More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 233 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 18615585 | 284 days ago | IN | 0 ETH | 0.00252666 | ||||
Approve | 18615349 | 284 days ago | IN | 0 ETH | 0.00150425 | ||||
Approve | 18284237 | 330 days ago | IN | 0 ETH | 0.00029697 | ||||
Approve | 18011758 | 368 days ago | IN | 0 ETH | 0.00074846 | ||||
Approve | 17967377 | 375 days ago | IN | 0 ETH | 0.00114581 | ||||
Approve | 17960514 | 376 days ago | IN | 0 ETH | 0.0006658 | ||||
Approve | 17960499 | 376 days ago | IN | 0 ETH | 0.00059318 | ||||
Approve | 17960477 | 376 days ago | IN | 0 ETH | 0.00056207 | ||||
Approve | 17958992 | 376 days ago | IN | 0 ETH | 0.00061178 | ||||
Approve | 17958803 | 376 days ago | IN | 0 ETH | 0.00079844 | ||||
Approve | 17958688 | 376 days ago | IN | 0 ETH | 0.00100142 | ||||
Approve | 17958542 | 376 days ago | IN | 0 ETH | 0.00098159 | ||||
Approve | 17958540 | 376 days ago | IN | 0 ETH | 0.00089865 | ||||
Approve | 17958481 | 376 days ago | IN | 0 ETH | 0.00064911 | ||||
Approve | 17958436 | 376 days ago | IN | 0 ETH | 0.00083104 | ||||
Approve | 17958423 | 376 days ago | IN | 0 ETH | 0.0013219 | ||||
Approve | 17958306 | 376 days ago | IN | 0 ETH | 0.00069941 | ||||
Approve | 17958170 | 376 days ago | IN | 0 ETH | 0.00073841 | ||||
Approve | 17958114 | 376 days ago | IN | 0 ETH | 0.00091571 | ||||
Approve | 17958112 | 376 days ago | IN | 0 ETH | 0.00098166 | ||||
Approve | 17957932 | 376 days ago | IN | 0 ETH | 0.00741212 | ||||
Approve | 17957916 | 376 days ago | IN | 0 ETH | 0.00074887 | ||||
Approve | 17957915 | 376 days ago | IN | 0 ETH | 0.00140276 | ||||
Approve | 17957897 | 376 days ago | IN | 0 ETH | 0.00148697 | ||||
Approve | 17957879 | 376 days ago | IN | 0 ETH | 0.00095982 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17963496 | 375 days ago | 0.00580639 ETH | ||||
17963496 | 375 days ago | 0.00580639 ETH | ||||
17961292 | 375 days ago | 0.00353498 ETH | ||||
17961292 | 375 days ago | 0.00353498 ETH | ||||
17960520 | 376 days ago | 0.00337114 ETH | ||||
17960520 | 376 days ago | 0.00337114 ETH | ||||
17959286 | 376 days ago | 0.00391906 ETH | ||||
17959286 | 376 days ago | 0.00391906 ETH | ||||
17959281 | 376 days ago | 0.00464285 ETH | ||||
17959281 | 376 days ago | 0.00464285 ETH | ||||
17959279 | 376 days ago | 0.00557742 ETH | ||||
17959279 | 376 days ago | 0.00557742 ETH | ||||
17958961 | 376 days ago | 0.0070444 ETH | ||||
17958961 | 376 days ago | 0.0070444 ETH | ||||
17958697 | 376 days ago | 0.01010824 ETH | ||||
17958697 | 376 days ago | 0.01010824 ETH | ||||
17958688 | 376 days ago | 0.01010824 ETH | ||||
17958688 | 376 days ago | 0.01010824 ETH | ||||
17958542 | 376 days ago | 0.01174425 ETH | ||||
17958542 | 376 days ago | 0.01174425 ETH | ||||
17958438 | 376 days ago | 0.01917909 ETH | ||||
17958438 | 376 days ago | 0.01917909 ETH | ||||
17958050 | 376 days ago | 0.0283355 ETH | ||||
17958050 | 376 days ago | 0.0283355 ETH | ||||
17957907 | 376 days ago | 0.04848576 ETH |
Loading...
Loading
Contract Name:
Moga
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-19 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.20; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Moga is ERC20, Ownable { string _name = unicode"Moga Coin"; string _symbol = "MOGA"; using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private isSwapping; uint256 public balance; address private treasuryWallet; uint256 public maxTx; uint256 public swapTreshold; uint256 public maxWallet; bool public limitsActive = true; bool public shouldContractSellAll = false; uint256 public buyTotalFees; uint256 public buyTreasuryFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellTreasuryFee; uint256 public sellLiquidityFee; uint256 public tokensForLiquidity; uint256 public tokensForTreasury; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event treasuryWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20(_name, _symbol) { 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 _buyTreasuryFee = 69; uint256 _buyLiquidityFee = 0; uint256 _sellTreasuryFee = 69; uint256 _sellLiquidityFee = 0; uint256 totalSupply = 100000000 * 1e18; maxTx = totalSupply * 20 / 1000; // 2% maxWallet = totalSupply * 20 / 1000; // 2% swapTreshold = totalSupply * 1 / 1000; // 0.05% buyTreasuryFee = _buyTreasuryFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyTreasuryFee + buyLiquidityFee; sellTreasuryFee = _sellTreasuryFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellTreasuryFee + sellLiquidityFee; treasuryWallet = address(0x47E8EA5bd3D885E2161cF799e26c7C7219F09Efa); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(treasuryWallet), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(address(treasuryWallet), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(address(this), totalSupply); } receive() external payable { } function TradingEnable() external onlyOwner{ uint256 ethAmount = address(this).balance; uint256 tokenAmount = balanceOf(address(this)); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable treasuryWallet, block.timestamp ); } function RemoveStuckEthereum() external onlyOwner { uint256 ethBalance = address(this).balance; require(ethBalance > 0, "ETH balance must be greater than 0"); (bool success,) = address(treasuryWallet).call{value: ethBalance}(""); require(success, "Failed to clear ETH balance"); } function RemoveStuckTokenBalance() external onlyOwner { uint256 tokenBalance = balanceOf(address(this)); require(tokenBalance > 0, "Token balance must be greater than 0"); _transfer(address(this), treasuryWallet, tokenBalance); } function removeLimits() external onlyOwner returns (bool){ limitsActive = false; return true; } function enableEmptyContract(bool enabled) external onlyOwner{ shouldContractSellAll = enabled; } // change the minimum amount of tokens to sell from fees function updateSwapTreshold(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."); swapTreshold = newAmount; return true; } function updateLimits(uint256 _maxTx, uint256 _maxWallet) external onlyOwner { require(_maxTx >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); require(_maxWallet >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxTx = _maxTx * (10**18); maxWallet = _maxWallet * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function update( uint256 _liquidityBuyFee, uint256 _liquiditySellFee, uint256 _treasuryBuyFee, uint256 _treasurySellFee ) external onlyOwner { buyLiquidityFee = _liquidityBuyFee; buyTreasuryFee = _treasuryBuyFee; buyTotalFees = buyLiquidityFee + buyTreasuryFee; sellLiquidityFee = _liquiditySellFee; sellTreasuryFee = _treasurySellFee; sellTotalFees = sellLiquidityFee + sellTreasuryFee; require(buyTotalFees <= 30 && sellTotalFees <= 30, "Fees cannot be higher then 30%"); } 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 updateTreasuryAddress(address newTreasuryWallet) external onlyOwner{ emit treasuryWalletUpdated(newTreasuryWallet, treasuryWallet); treasuryWallet = newTreasuryWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsActive){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !isSwapping ){ //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTx, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTx, "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 >= swapTreshold; if( canSwap && !isSwapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { isSwapping = true; swapBack(); isSwapping = false; } bool takeFee = !isSwapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForTreasury += fees * sellTreasuryFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForTreasury += fees * buyTreasuryFee / 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 address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(shouldContractSellAll == false){ if(contractBalance > swapTreshold * 20){ contractBalance = swapTreshold * 20; } }else{ contractBalance = balanceOf(address(this)); } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForTreasury).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForTreasury = 0; if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(treasuryWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"treasuryWalletUpdated","type":"event"},{"inputs":[],"name":"RemoveStuckEthereum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RemoveStuckTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TradingEnable","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":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"buyLiquidityFee","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":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","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":"shouldContractSellAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreshold","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"_liquidityBuyFee","type":"uint256"},{"internalType":"uint256","name":"_liquiditySellFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryBuyFee","type":"uint256"},{"internalType":"uint256","name":"_treasurySellFee","type":"uint256"}],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526040518060400160405280600981526020017f4d6f676120436f696e0000000000000000000000000000000000000000000000815250600690816200004a919062000e9b565b506040518060400160405280600481526020017f4d4f4741000000000000000000000000000000000000000000000000000000008152506007908162000091919062000e9b565b506001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000c9b565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000c9b565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000c9b565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000c9b565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000e9b565b50806004908162000218919062000e9b565b5050505f6200022c6200072460201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002f48160016200072b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000372573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000398919062000fe4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000424919062000fe4565b6040518363ffffffff1660e01b81526004016200044392919062001025565b6020604051808303815f875af115801562000460573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000486919062000fe4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004ce60a05160016200072b60201b60201c565b620004e360a05160016200082460201b60201c565b5f604590505f80604590505f806a52b7d2dcc80cd2e400000090506103e86014826200051091906200107d565b6200051c9190620010f4565b600b819055506103e86014826200053491906200107d565b620005409190620010f4565b600d819055506103e86001826200055891906200107d565b620005649190620010f4565b600c8190555084601081905550836011819055506011546010546200058a91906200112b565b600f819055508260138190555081601481905550601454601354620005b091906200112b565b6012819055507347e8ea5bd3d885e2161cf799e26c7c7219f09efa600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200062c6200061e620008c260201b60201c565b6001620008ea60201b60201c565b6200063f306001620008ea60201b60201c565b6200065461dead6001620008ea60201b60201c565b62000688600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008ea60201b60201c565b620006aa6200069c620008c260201b60201c565b60016200072b60201b60201c565b620006bd3060016200072b60201b60201c565b620006d261dead60016200072b60201b60201c565b62000706600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200072b60201b60201c565b62000718308262000a3360201b60201c565b50505050505062001322565b5f33905090565b6200073b6200072460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c390620011c3565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008fa6200072460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200098b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098290620011c3565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a279190620011ff565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9b9062001268565b60405180910390fd5b62000ab75f838362000bd060201b60201c565b62000ace8160025462000bd560201b90919060201c565b60028190555062000b25815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000bd560201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bc4919062001299565b60405180910390a35050565b505050565b5f80828462000be591906200112b565b90508381101562000c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c249062001302565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000cb357607f821691505b60208210810362000cc95762000cc862000c6e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d2d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cf0565b62000d39868362000cf0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d8362000d7d62000d778462000d51565b62000d5a565b62000d51565b9050919050565b5f819050919050565b62000d9e8362000d63565b62000db662000dad8262000d8a565b84845462000cfc565b825550505050565b5f90565b62000dcc62000dbe565b62000dd981848462000d93565b505050565b5b8181101562000e005762000df45f8262000dc2565b60018101905062000ddf565b5050565b601f82111562000e4f5762000e198162000ccf565b62000e248462000ce1565b8101602085101562000e34578190505b62000e4c62000e438562000ce1565b83018262000dde565b50505b505050565b5f82821c905092915050565b5f62000e715f198460080262000e54565b1980831691505092915050565b5f62000e8b838362000e60565b9150826002028217905092915050565b62000ea68262000c37565b67ffffffffffffffff81111562000ec25762000ec162000c41565b5b62000ece825462000c9b565b62000edb82828562000e04565b5f60209050601f83116001811462000f11575f841562000efc578287015190505b62000f08858262000e7e565b86555062000f77565b601f19841662000f218662000ccf565b5f5b8281101562000f4a5784890151825560018201915060208501945060208101905062000f23565b8683101562000f6a578489015162000f66601f89168262000e60565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000fae8262000f83565b9050919050565b62000fc08162000fa2565b811462000fcb575f80fd5b50565b5f8151905062000fde8162000fb5565b92915050565b5f6020828403121562000ffc5762000ffb62000f7f565b5b5f6200100b8482850162000fce565b91505092915050565b6200101f8162000fa2565b82525050565b5f6040820190506200103a5f83018562001014565b62001049602083018462001014565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010898262000d51565b9150620010968362000d51565b9250828202620010a68162000d51565b91508282048414831517620010c057620010bf62001050565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620011008262000d51565b91506200110d8362000d51565b92508262001120576200111f620010c7565b5b828204905092915050565b5f620011378262000d51565b9150620011448362000d51565b92508282019050808211156200115f576200115e62001050565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620011ab60208362001165565b9150620011b88262001175565b602082019050919050565b5f6020820190508181035f830152620011dc816200119d565b9050919050565b5f8115159050919050565b620011f981620011e3565b82525050565b5f602082019050620012145f830184620011ee565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001250601f8362001165565b91506200125d826200121a565b602082019050919050565b5f6020820190508181035f830152620012818162001242565b9050919050565b620012938162000d51565b82525050565b5f602082019050620012ae5f83018462001288565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620012ea601b8362001165565b9150620012f782620012b4565b602082019050919050565b5f6020820190508181035f8301526200131b81620012dc565b9050919050565b60805160a051614af26200137c5f395f8181610da9015261166201525f8181610b1401528181611a6a01528181611a910152818161344a0152818161352901528181613550015281816135e6015261360d0152614af25ff3fe608060405260043610610275575f3560e01c8063768aeb031161014e578063bf24a52c116100c0578063dd62ed3e11610079578063dd62ed3e1461093c578063e52fb9ec14610978578063f11a24d3146109a2578063f2fde38b146109cc578063f6374342146109f4578063f8b45b0514610a1e5761027c565b8063bf24a52c14610858578063c02466681461086e578063c0aa3d3614610896578063cc2ffe7c146108ac578063d1294d4c146108d6578063d85ba063146109125761027c565b80639a7a23d6116101125780639a7a23d61461072a578063a2240e1914610752578063a457c2d71461077a578063a9059cbb146107b6578063b62496f5146107f2578063b69ef8a81461082e5761027c565b8063768aeb0314610670578063841e4561146106985780638da5cb5b146106c057806395d89b41146106ea57806398399263146107145761027c565b806339509351116101e75780636b2fb124116101ab5780636b2fb1241461057857806370a08231146105a2578063715018a6146105de5780637437681e146105f4578063751039fc1461061e5780637571336a146106485761027c565b8063395093511461048257806349bd5a5e146104be5780634fbee193146104e85780635c068a8c146105245780636a486a8e1461054e5761027c565b8063184f5c6a11610239578063184f5c6a146103765780631864217b1461039e5780631a8145bb146103c85780631cce34ee146103f257806323b872dd1461041c578063313ce567146104585761027c565b806306fdde0314610280578063095ea7b3146102aa57806310d5de53146102e65780631694505e1461032257806318160ddd1461034c5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a48565b6040516102a191906137a2565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb9190613853565b610ad8565b6040516102dd91906138ab565b60405180910390f35b3480156102f1575f80fd5b5061030c600480360381019061030791906138c4565b610af5565b60405161031991906138ab565b60405180910390f35b34801561032d575f80fd5b50610336610b12565b604051610343919061394a565b60405180910390f35b348015610357575f80fd5b50610360610b36565b60405161036d9190613972565b60405180910390f35b348015610381575f80fd5b5061039c600480360381019061039791906139b5565b610b3f565b005b3480156103a9575f80fd5b506103b2610bf2565b6040516103bf91906138ab565b60405180910390f35b3480156103d3575f80fd5b506103dc610c05565b6040516103e99190613972565b60405180910390f35b3480156103fd575f80fd5b50610406610c0b565b60405161041391906138ab565b60405180910390f35b348015610427575f80fd5b50610442600480360381019061043d91906139e0565b610c1d565b60405161044f91906138ab565b60405180910390f35b348015610463575f80fd5b5061046c610cf1565b6040516104799190613a4b565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190613853565b610cf9565b6040516104b591906138ab565b60405180910390f35b3480156104c9575f80fd5b506104d2610da7565b6040516104df9190613a73565b60405180910390f35b3480156104f3575f80fd5b5061050e600480360381019061050991906138c4565b610dcb565b60405161051b91906138ab565b60405180910390f35b34801561052f575f80fd5b50610538610e1d565b6040516105459190613972565b60405180910390f35b348015610559575f80fd5b50610562610e23565b60405161056f9190613972565b60405180910390f35b348015610583575f80fd5b5061058c610e29565b6040516105999190613972565b60405180910390f35b3480156105ad575f80fd5b506105c860048036038101906105c391906138c4565b610e2f565b6040516105d59190613972565b60405180910390f35b3480156105e9575f80fd5b506105f2610e74565b005b3480156105ff575f80fd5b50610608610fc7565b6040516106159190613972565b60405180910390f35b348015610629575f80fd5b50610632610fcd565b60405161063f91906138ab565b60405180910390f35b348015610653575f80fd5b5061066e60048036038101906106699190613a8c565b611084565b005b34801561067b575f80fd5b5061069660048036038101906106919190613aca565b611172565b005b3480156106a3575f80fd5b506106be60048036038101906106b991906138c4565b6112ab565b005b3480156106cb575f80fd5b506106d46113ff565b6040516106e19190613a73565b60405180910390f35b3480156106f5575f80fd5b506106fe611427565b60405161070b91906137a2565b60405180910390f35b34801561071f575f80fd5b506107286114b7565b005b348015610735575f80fd5b50610750600480360381019061074b9190613a8c565b6115ca565b005b34801561075d575f80fd5b5061077860048036038101906107739190613b2e565b6116fc565b005b348015610785575f80fd5b506107a0600480360381019061079b9190613853565b6118b6565b6040516107ad91906138ab565b60405180910390f35b3480156107c1575f80fd5b506107dc60048036038101906107d79190613853565b61197e565b6040516107e991906138ab565b60405180910390f35b3480156107fd575f80fd5b50610818600480360381019061081391906138c4565b61199b565b60405161082591906138ab565b60405180910390f35b348015610839575f80fd5b506108426119b8565b60405161084f9190613972565b60405180910390f35b348015610863575f80fd5b5061086c6119be565b005b348015610879575f80fd5b50610894600480360381019061088f9190613a8c565b611b5c565b005b3480156108a1575f80fd5b506108aa611c98565b005b3480156108b7575f80fd5b506108c0611e41565b6040516108cd9190613972565b60405180910390f35b3480156108e1575f80fd5b506108fc60048036038101906108f79190613b6c565b611e47565b60405161090991906138ab565b60405180910390f35b34801561091d575f80fd5b50610926611fb5565b6040516109339190613972565b60405180910390f35b348015610947575f80fd5b50610962600480360381019061095d9190613b97565b611fbb565b60405161096f9190613972565b60405180910390f35b348015610983575f80fd5b5061098c61203d565b6040516109999190613972565b60405180910390f35b3480156109ad575f80fd5b506109b6612043565b6040516109c39190613972565b60405180910390f35b3480156109d7575f80fd5b506109f260048036038101906109ed91906138c4565b612049565b005b3480156109ff575f80fd5b50610a0861219d565b604051610a159190613972565b60405180910390f35b348015610a29575f80fd5b50610a326121a3565b604051610a3f9190613972565b60405180910390f35b606060038054610a5790613c02565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390613c02565b8015610ace5780601f10610aa557610100808354040283529160200191610ace565b820191905f5260205f20905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b5f610aeb610ae46121a9565b84846121b0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610b476121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613c7c565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600e60019054906101000a900460ff1681565b60155481565b600e5f9054906101000a900460ff1681565b5f610c29848484612373565b610ce684610c356121a9565b610ce185604051806060016040528060288152602001614a706028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c986121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b6121b0565b600190509392505050565b5f6012905090565b5f610d9d610d056121a9565b84610d988560015f610d156121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b6121b0565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b60125481565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e7c6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190613c7c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b5f610fd66121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90613c7c565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b61108c6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190613c7c565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61117a6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613c7c565b60405180910390fd5b83601181905550816010819055506010546011546112269190613cc7565b600f81905550826014819055508060138190555060135460145461124a9190613cc7565b601281905550601e600f54111580156112665750601e60125411155b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90613d44565b60405180910390fd5b50505050565b6112b36121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890613c7c565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461143690613c02565b80601f016020809104026020016040519081016040528092919081815260200182805461146290613c02565b80156114ad5780601f10611484576101008083540402835291602001916114ad565b820191905f5260205f20905b81548152906001019060200180831161149057829003601f168201915b5050505050905090565b6114bf6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154490613c7c565b60405180910390fd5b5f61155730610e2f565b90505f811161159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290613dd2565b60405180910390fd5b6115c730600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612373565b50565b6115d26121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790613c7c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613e60565b60405180910390fd5b6116f88282612d52565b5050565b6117046121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990613c7c565b60405180910390fd5b670de0b6b3a76400006103e860016117a8610b36565b6117b29190613e7e565b6117bc9190613eec565b6117c69190613eec565b821015611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90613f8c565b60405180910390fd5b670de0b6b3a76400006103e8600561181e610b36565b6118289190613e7e565b6118329190613eec565b61183c9190613eec565b81101561187e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118759061401a565b60405180910390fd5b670de0b6b3a7640000826118929190613e7e565b600b81905550670de0b6b3a7640000816118ac9190613e7e565b600d819055505050565b5f6119746118c26121a9565b8461196f85604051806060016040528060258152602001614a986025913960015f6118eb6121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b6121b0565b6001905092915050565b5f61199161198a6121a9565b8484612373565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b6119c66121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90613c7c565b60405180910390fd5b5f4790505f611a6230610e2f565b9050611a8f307f0000000000000000000000000000000000000000000000000000000000000000836121b0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611b1496959493929190614071565b60606040518083038185885af1158015611b30573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b5591906140e4565b5050505050565b611b646121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990613c7c565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c8c91906138ab565b60405180910390a25050565b611ca06121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613c7c565b60405180910390fd5b5f4790505f8111611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906141a4565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611dba906141ef565b5f6040518083038185875af1925050503d805f8114611df4576040519150601f19603f3d011682016040523d82523d5f602084013e611df9565b606091505b5050905080611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e349061424d565b60405180910390fd5b5050565b60165481565b5f611e506121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590613c7c565b60405180910390fd5b620186a06001611eec610b36565b611ef69190613e7e565b611f009190613eec565b821015611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f39906142db565b60405180910390fd5b6103e86005611f4f610b36565b611f599190613e7e565b611f639190613eec565b821115611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c90614369565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b60115481565b6120516121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690613c7c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612215906143f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614485565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123669190613972565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890614513565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612446906145a1565b60405180910390fd5b5f81036124665761246183835f612df0565b612c8e565b600e5f9054906101000a900460ff161561285a576124826113ff565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124f057506124c06113ff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612562575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257a575060085f9054906101000a900460ff16155b1561285957601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561261c575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126c357600b54811115612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d9061462f565b60405180910390fd5b600d5461267283610e2f565b8261267d9190613cc7565b11156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614697565b60405180910390fd5b612858565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612760575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127af57600b548111156127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190614725565b60405180910390fd5b612857565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661285657600d5461280983610e2f565b826128149190613cc7565b1115612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c90614697565b60405180910390fd5b5b5b5b5b5b5f61286430610e2f565b90505f600c548210159050808015612888575060085f9054906101000a900460ff16155b80156128db5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561292e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612981575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129c257600160085f6101000a81548160ff0219169083151502179055506129a8613079565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a70575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a79575f90505b5f8115612c7e57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ad757505f601254115b15612b6f57612b046064612af66012548861329f90919063ffffffff16565b61331690919063ffffffff16565b905060125460145482612b179190613e7e565b612b219190613eec565b60155f828254612b319190613cc7565b9250508190555060125460135482612b499190613e7e565b612b539190613eec565b60165f828254612b639190613cc7565b92505081905550612c5b565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612bc657505f600f54115b15612c5a57612bf36064612be5600f548861329f90919063ffffffff16565b61331690919063ffffffff16565b9050600f5460115482612c069190613e7e565b612c109190613eec565b60155f828254612c209190613cc7565b92505081905550600f5460105482612c389190613e7e565b612c429190613eec565b60165f828254612c529190613cc7565b925050819055505b5b5f811115612c6f57612c6e873083612df0565b5b8085612c7b9190614743565b94505b612c89878787612df0565b505050505b505050565b5f838311158290612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd191906137a2565b60405180910390fd5b505f8385612ce89190614743565b9050809150509392505050565b5f808284612d039190613cc7565b905083811015612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f906147c0565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5590614513565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec3906145a1565b60405180910390fd5b612ed783838361335f565b612f4081604051806060016040528060268152602001614a4a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612fcf815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306c9190613972565b60405180910390a3505050565b5f61308330610e2f565b90505f6016546015546130969190613cc7565b90505f808314806130a657505f82145b156130b35750505061329d565b5f1515600e60019054906101000a900460ff161515036130fa576014600c546130dc9190613e7e565b8311156130f5576014600c546130f29190613e7e565b92505b613106565b61310330610e2f565b92505b5f600283601554866131189190613e7e565b6131229190613eec565b61312c9190613eec565b90505f613142828661336490919063ffffffff16565b90505f479050613151826133ad565b5f613165824761336490919063ffffffff16565b90505f61318f876131816016548561329f90919063ffffffff16565b61331690919063ffffffff16565b90505f818361319e9190614743565b90505f6015819055505f6016819055505f861180156131bc57505f81115b15613209576131cb86826135e0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613200939291906147de565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161324e906141ef565b5f6040518083038185875af1925050503d805f8114613288576040519150601f19603f3d011682016040523d82523d5f602084013e61328d565b606091505b5050809750505050505050505050505b565b5f8083036132af575f9050613310565b5f82846132bc9190613e7e565b90508284826132cb9190613eec565b1461330b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330290614883565b60405180910390fd5b809150505b92915050565b5f61335783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136b7565b905092915050565b505050565b5f6133a583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c93565b905092915050565b5f600267ffffffffffffffff8111156133c9576133c86148a1565b5b6040519080825280602002602001820160405280156133f75781602001602082028036833780820191505090505b50905030815f8151811061340e5761340d6148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d5919061490f565b816001815181106134e9576134e86148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354e307f0000000000000000000000000000000000000000000000000000000000000000846121b0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135af9594939291906149f1565b5f604051808303815f87803b1580156135c6575f80fd5b505af11580156135d8573d5f803e3d5ffd5b505050505050565b61360b307f0000000000000000000000000000000000000000000000000000000000000000846121b0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161366f96959493929190614071565b60606040518083038185885af115801561368b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136b091906140e4565b5050505050565b5f80831182906136fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f491906137a2565b60405180910390fd5b505f838561370b9190613eec565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561374f578082015181840152602081019050613734565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61377482613718565b61377e8185613722565b935061378e818560208601613732565b6137978161375a565b840191505092915050565b5f6020820190508181035f8301526137ba818461376a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137ef826137c6565b9050919050565b6137ff816137e5565b8114613809575f80fd5b50565b5f8135905061381a816137f6565b92915050565b5f819050919050565b61383281613820565b811461383c575f80fd5b50565b5f8135905061384d81613829565b92915050565b5f8060408385031215613869576138686137c2565b5b5f6138768582860161380c565b92505060206138878582860161383f565b9150509250929050565b5f8115159050919050565b6138a581613891565b82525050565b5f6020820190506138be5f83018461389c565b92915050565b5f602082840312156138d9576138d86137c2565b5b5f6138e68482850161380c565b91505092915050565b5f819050919050565b5f61391261390d613908846137c6565b6138ef565b6137c6565b9050919050565b5f613923826138f8565b9050919050565b5f61393482613919565b9050919050565b6139448161392a565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c81613820565b82525050565b5f6020820190506139855f830184613963565b92915050565b61399481613891565b811461399e575f80fd5b50565b5f813590506139af8161398b565b92915050565b5f602082840312156139ca576139c96137c2565b5b5f6139d7848285016139a1565b91505092915050565b5f805f606084860312156139f7576139f66137c2565b5b5f613a048682870161380c565b9350506020613a158682870161380c565b9250506040613a268682870161383f565b9150509250925092565b5f60ff82169050919050565b613a4581613a30565b82525050565b5f602082019050613a5e5f830184613a3c565b92915050565b613a6d816137e5565b82525050565b5f602082019050613a865f830184613a64565b92915050565b5f8060408385031215613aa257613aa16137c2565b5b5f613aaf8582860161380c565b9250506020613ac0858286016139a1565b9150509250929050565b5f805f8060808587031215613ae257613ae16137c2565b5b5f613aef8782880161383f565b9450506020613b008782880161383f565b9350506040613b118782880161383f565b9250506060613b228782880161383f565b91505092959194509250565b5f8060408385031215613b4457613b436137c2565b5b5f613b518582860161383f565b9250506020613b628582860161383f565b9150509250929050565b5f60208284031215613b8157613b806137c2565b5b5f613b8e8482850161383f565b91505092915050565b5f8060408385031215613bad57613bac6137c2565b5b5f613bba8582860161380c565b9250506020613bcb8582860161380c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c1957607f821691505b602082108103613c2c57613c2b613bd5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c66602083613722565b9150613c7182613c32565b602082019050919050565b5f6020820190508181035f830152613c9381613c5a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cd182613820565b9150613cdc83613820565b9250828201905080821115613cf457613cf3613c9a565b5b92915050565b7f466565732063616e6e6f7420626520686967686572207468656e2033302500005f82015250565b5f613d2e601e83613722565b9150613d3982613cfa565b602082019050919050565b5f6020820190508181035f830152613d5b81613d22565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613dbc602483613722565b9150613dc782613d62565b604082019050919050565b5f6020820190508181035f830152613de981613db0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613e4a603983613722565b9150613e5582613df0565b604082019050919050565b5f6020820190508181035f830152613e7781613e3e565b9050919050565b5f613e8882613820565b9150613e9383613820565b9250828202613ea181613820565b91508282048414831517613eb857613eb7613c9a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ef682613820565b9150613f0183613820565b925082613f1157613f10613ebf565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613f76602f83613722565b9150613f8182613f1c565b604082019050919050565b5f6020820190508181035f830152613fa381613f6a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614004602483613722565b915061400f82613faa565b604082019050919050565b5f6020820190508181035f83015261403181613ff8565b9050919050565b5f819050919050565b5f61405b61405661405184614038565b6138ef565b613820565b9050919050565b61406b81614041565b82525050565b5f60c0820190506140845f830189613a64565b6140916020830188613963565b61409e6040830187614062565b6140ab6060830186614062565b6140b86080830185613a64565b6140c560a0830184613963565b979650505050505050565b5f815190506140de81613829565b92915050565b5f805f606084860312156140fb576140fa6137c2565b5b5f614108868287016140d0565b9350506020614119868287016140d0565b925050604061412a868287016140d0565b9150509250925092565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f61418e602283613722565b915061419982614134565b604082019050919050565b5f6020820190508181035f8301526141bb81614182565b9050919050565b5f81905092915050565b50565b5f6141da5f836141c2565b91506141e5826141cc565b5f82019050919050565b5f6141f9826141cf565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614237601b83613722565b915061424282614203565b602082019050919050565b5f6020820190508181035f8301526142648161422b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6142c5603583613722565b91506142d08261426b565b604082019050919050565b5f6020820190508181035f8301526142f2816142b9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614353603483613722565b915061435e826142f9565b604082019050919050565b5f6020820190508181035f83015261438081614347565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143e1602483613722565b91506143ec82614387565b604082019050919050565b5f6020820190508181035f83015261440e816143d5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61446f602283613722565b915061447a82614415565b604082019050919050565b5f6020820190508181035f83015261449c81614463565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6144fd602583613722565b9150614508826144a3565b604082019050919050565b5f6020820190508181035f83015261452a816144f1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458b602383613722565b915061459682614531565b604082019050919050565b5f6020820190508181035f8301526145b88161457f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614619603583613722565b9150614624826145bf565b604082019050919050565b5f6020820190508181035f8301526146468161460d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614681601383613722565b915061468c8261464d565b602082019050919050565b5f6020820190508181035f8301526146ae81614675565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61470f603683613722565b915061471a826146b5565b604082019050919050565b5f6020820190508181035f83015261473c81614703565b9050919050565b5f61474d82613820565b915061475883613820565b92508282039050818111156147705761476f613c9a565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6147aa601b83613722565b91506147b582614776565b602082019050919050565b5f6020820190508181035f8301526147d78161479e565b9050919050565b5f6060820190506147f15f830186613963565b6147fe6020830185613963565b61480b6040830184613963565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61486d602183613722565b915061487882614813565b604082019050919050565b5f6020820190508181035f83015261489a81614861565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614909816137f6565b92915050565b5f60208284031215614924576149236137c2565b5b5f614931848285016148fb565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61496c816137e5565b82525050565b5f61497d8383614963565b60208301905092915050565b5f602082019050919050565b5f61499f8261493a565b6149a98185614944565b93506149b483614954565b805f5b838110156149e45781516149cb8882614972565b97506149d683614989565b9250506001810190506149b7565b5085935050505092915050565b5f60a082019050614a045f830188613963565b614a116020830187614062565b8181036040830152614a238186614995565b9050614a326060830185613a64565b614a3f6080830184613963565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122075610e8c618ede781dd19d139b7f672eceae30a9a23dcda14f09b298a4b0798964736f6c63430008140033
Deployed Bytecode
0x608060405260043610610275575f3560e01c8063768aeb031161014e578063bf24a52c116100c0578063dd62ed3e11610079578063dd62ed3e1461093c578063e52fb9ec14610978578063f11a24d3146109a2578063f2fde38b146109cc578063f6374342146109f4578063f8b45b0514610a1e5761027c565b8063bf24a52c14610858578063c02466681461086e578063c0aa3d3614610896578063cc2ffe7c146108ac578063d1294d4c146108d6578063d85ba063146109125761027c565b80639a7a23d6116101125780639a7a23d61461072a578063a2240e1914610752578063a457c2d71461077a578063a9059cbb146107b6578063b62496f5146107f2578063b69ef8a81461082e5761027c565b8063768aeb0314610670578063841e4561146106985780638da5cb5b146106c057806395d89b41146106ea57806398399263146107145761027c565b806339509351116101e75780636b2fb124116101ab5780636b2fb1241461057857806370a08231146105a2578063715018a6146105de5780637437681e146105f4578063751039fc1461061e5780637571336a146106485761027c565b8063395093511461048257806349bd5a5e146104be5780634fbee193146104e85780635c068a8c146105245780636a486a8e1461054e5761027c565b8063184f5c6a11610239578063184f5c6a146103765780631864217b1461039e5780631a8145bb146103c85780631cce34ee146103f257806323b872dd1461041c578063313ce567146104585761027c565b806306fdde0314610280578063095ea7b3146102aa57806310d5de53146102e65780631694505e1461032257806318160ddd1461034c5761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a48565b6040516102a191906137a2565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb9190613853565b610ad8565b6040516102dd91906138ab565b60405180910390f35b3480156102f1575f80fd5b5061030c600480360381019061030791906138c4565b610af5565b60405161031991906138ab565b60405180910390f35b34801561032d575f80fd5b50610336610b12565b604051610343919061394a565b60405180910390f35b348015610357575f80fd5b50610360610b36565b60405161036d9190613972565b60405180910390f35b348015610381575f80fd5b5061039c600480360381019061039791906139b5565b610b3f565b005b3480156103a9575f80fd5b506103b2610bf2565b6040516103bf91906138ab565b60405180910390f35b3480156103d3575f80fd5b506103dc610c05565b6040516103e99190613972565b60405180910390f35b3480156103fd575f80fd5b50610406610c0b565b60405161041391906138ab565b60405180910390f35b348015610427575f80fd5b50610442600480360381019061043d91906139e0565b610c1d565b60405161044f91906138ab565b60405180910390f35b348015610463575f80fd5b5061046c610cf1565b6040516104799190613a4b565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190613853565b610cf9565b6040516104b591906138ab565b60405180910390f35b3480156104c9575f80fd5b506104d2610da7565b6040516104df9190613a73565b60405180910390f35b3480156104f3575f80fd5b5061050e600480360381019061050991906138c4565b610dcb565b60405161051b91906138ab565b60405180910390f35b34801561052f575f80fd5b50610538610e1d565b6040516105459190613972565b60405180910390f35b348015610559575f80fd5b50610562610e23565b60405161056f9190613972565b60405180910390f35b348015610583575f80fd5b5061058c610e29565b6040516105999190613972565b60405180910390f35b3480156105ad575f80fd5b506105c860048036038101906105c391906138c4565b610e2f565b6040516105d59190613972565b60405180910390f35b3480156105e9575f80fd5b506105f2610e74565b005b3480156105ff575f80fd5b50610608610fc7565b6040516106159190613972565b60405180910390f35b348015610629575f80fd5b50610632610fcd565b60405161063f91906138ab565b60405180910390f35b348015610653575f80fd5b5061066e60048036038101906106699190613a8c565b611084565b005b34801561067b575f80fd5b5061069660048036038101906106919190613aca565b611172565b005b3480156106a3575f80fd5b506106be60048036038101906106b991906138c4565b6112ab565b005b3480156106cb575f80fd5b506106d46113ff565b6040516106e19190613a73565b60405180910390f35b3480156106f5575f80fd5b506106fe611427565b60405161070b91906137a2565b60405180910390f35b34801561071f575f80fd5b506107286114b7565b005b348015610735575f80fd5b50610750600480360381019061074b9190613a8c565b6115ca565b005b34801561075d575f80fd5b5061077860048036038101906107739190613b2e565b6116fc565b005b348015610785575f80fd5b506107a0600480360381019061079b9190613853565b6118b6565b6040516107ad91906138ab565b60405180910390f35b3480156107c1575f80fd5b506107dc60048036038101906107d79190613853565b61197e565b6040516107e991906138ab565b60405180910390f35b3480156107fd575f80fd5b50610818600480360381019061081391906138c4565b61199b565b60405161082591906138ab565b60405180910390f35b348015610839575f80fd5b506108426119b8565b60405161084f9190613972565b60405180910390f35b348015610863575f80fd5b5061086c6119be565b005b348015610879575f80fd5b50610894600480360381019061088f9190613a8c565b611b5c565b005b3480156108a1575f80fd5b506108aa611c98565b005b3480156108b7575f80fd5b506108c0611e41565b6040516108cd9190613972565b60405180910390f35b3480156108e1575f80fd5b506108fc60048036038101906108f79190613b6c565b611e47565b60405161090991906138ab565b60405180910390f35b34801561091d575f80fd5b50610926611fb5565b6040516109339190613972565b60405180910390f35b348015610947575f80fd5b50610962600480360381019061095d9190613b97565b611fbb565b60405161096f9190613972565b60405180910390f35b348015610983575f80fd5b5061098c61203d565b6040516109999190613972565b60405180910390f35b3480156109ad575f80fd5b506109b6612043565b6040516109c39190613972565b60405180910390f35b3480156109d7575f80fd5b506109f260048036038101906109ed91906138c4565b612049565b005b3480156109ff575f80fd5b50610a0861219d565b604051610a159190613972565b60405180910390f35b348015610a29575f80fd5b50610a326121a3565b604051610a3f9190613972565b60405180910390f35b606060038054610a5790613c02565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390613c02565b8015610ace5780601f10610aa557610100808354040283529160200191610ace565b820191905f5260205f20905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b5f610aeb610ae46121a9565b84846121b0565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610b476121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613c7c565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600e60019054906101000a900460ff1681565b60155481565b600e5f9054906101000a900460ff1681565b5f610c29848484612373565b610ce684610c356121a9565b610ce185604051806060016040528060288152602001614a706028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c986121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b6121b0565b600190509392505050565b5f6012905090565b5f610d9d610d056121a9565b84610d988560015f610d156121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b6121b0565b6001905092915050565b7f000000000000000000000000bb6a0f57443f4b25995368c09eb21828cad9671481565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b60125481565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e7c6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190613c7c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b5f610fd66121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90613c7c565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b61108c6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190613c7c565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61117a6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613c7c565b60405180910390fd5b83601181905550816010819055506010546011546112269190613cc7565b600f81905550826014819055508060138190555060135460145461124a9190613cc7565b601281905550601e600f54111580156112665750601e60125411155b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90613d44565b60405180910390fd5b50505050565b6112b36121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890613c7c565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461143690613c02565b80601f016020809104026020016040519081016040528092919081815260200182805461146290613c02565b80156114ad5780601f10611484576101008083540402835291602001916114ad565b820191905f5260205f20905b81548152906001019060200180831161149057829003601f168201915b5050505050905090565b6114bf6121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154490613c7c565b60405180910390fd5b5f61155730610e2f565b90505f811161159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290613dd2565b60405180910390fd5b6115c730600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612373565b50565b6115d26121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790613c7c565b60405180910390fd5b7f000000000000000000000000bb6a0f57443f4b25995368c09eb21828cad9671473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613e60565b60405180910390fd5b6116f88282612d52565b5050565b6117046121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990613c7c565b60405180910390fd5b670de0b6b3a76400006103e860016117a8610b36565b6117b29190613e7e565b6117bc9190613eec565b6117c69190613eec565b821015611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90613f8c565b60405180910390fd5b670de0b6b3a76400006103e8600561181e610b36565b6118289190613e7e565b6118329190613eec565b61183c9190613eec565b81101561187e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118759061401a565b60405180910390fd5b670de0b6b3a7640000826118929190613e7e565b600b81905550670de0b6b3a7640000816118ac9190613e7e565b600d819055505050565b5f6119746118c26121a9565b8461196f85604051806060016040528060258152602001614a986025913960015f6118eb6121a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b6121b0565b6001905092915050565b5f61199161198a6121a9565b8484612373565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b6119c66121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90613c7c565b60405180910390fd5b5f4790505f611a6230610e2f565b9050611a8f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d836121b0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611b1496959493929190614071565b60606040518083038185885af1158015611b30573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b5591906140e4565b5050505050565b611b646121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990613c7c565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c8c91906138ab565b60405180910390a25050565b611ca06121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613c7c565b60405180910390fd5b5f4790505f8111611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906141a4565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611dba906141ef565b5f6040518083038185875af1925050503d805f8114611df4576040519150601f19603f3d011682016040523d82523d5f602084013e611df9565b606091505b5050905080611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e349061424d565b60405180910390fd5b5050565b60165481565b5f611e506121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590613c7c565b60405180910390fd5b620186a06001611eec610b36565b611ef69190613e7e565b611f009190613eec565b821015611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f39906142db565b60405180910390fd5b6103e86005611f4f610b36565b611f599190613e7e565b611f639190613eec565b821115611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c90614369565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600c5481565b60115481565b6120516121a9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690613c7c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612215906143f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614485565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123669190613972565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890614513565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612446906145a1565b60405180910390fd5b5f81036124665761246183835f612df0565b612c8e565b600e5f9054906101000a900460ff161561285a576124826113ff565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124f057506124c06113ff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561252857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612562575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257a575060085f9054906101000a900460ff16155b1561285957601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561261c575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126c357600b54811115612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d9061462f565b60405180910390fd5b600d5461267283610e2f565b8261267d9190613cc7565b11156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614697565b60405180910390fd5b612858565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612760575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127af57600b548111156127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190614725565b60405180910390fd5b612857565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661285657600d5461280983610e2f565b826128149190613cc7565b1115612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c90614697565b60405180910390fd5b5b5b5b5b5b5f61286430610e2f565b90505f600c548210159050808015612888575060085f9054906101000a900460ff16155b80156128db5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561292e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612981575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129c257600160085f6101000a81548160ff0219169083151502179055506129a8613079565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612a70575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612a79575f90505b5f8115612c7e57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ad757505f601254115b15612b6f57612b046064612af66012548861329f90919063ffffffff16565b61331690919063ffffffff16565b905060125460145482612b179190613e7e565b612b219190613eec565b60155f828254612b319190613cc7565b9250508190555060125460135482612b499190613e7e565b612b539190613eec565b60165f828254612b639190613cc7565b92505081905550612c5b565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612bc657505f600f54115b15612c5a57612bf36064612be5600f548861329f90919063ffffffff16565b61331690919063ffffffff16565b9050600f5460115482612c069190613e7e565b612c109190613eec565b60155f828254612c209190613cc7565b92505081905550600f5460105482612c389190613e7e565b612c429190613eec565b60165f828254612c529190613cc7565b925050819055505b5b5f811115612c6f57612c6e873083612df0565b5b8085612c7b9190614743565b94505b612c89878787612df0565b505050505b505050565b5f838311158290612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd191906137a2565b60405180910390fd5b505f8385612ce89190614743565b9050809150509392505050565b5f808284612d039190613cc7565b905083811015612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f906147c0565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5590614513565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec3906145a1565b60405180910390fd5b612ed783838361335f565b612f4081604051806060016040528060268152602001614a4a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c939092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612fcf815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612cf590919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306c9190613972565b60405180910390a3505050565b5f61308330610e2f565b90505f6016546015546130969190613cc7565b90505f808314806130a657505f82145b156130b35750505061329d565b5f1515600e60019054906101000a900460ff161515036130fa576014600c546130dc9190613e7e565b8311156130f5576014600c546130f29190613e7e565b92505b613106565b61310330610e2f565b92505b5f600283601554866131189190613e7e565b6131229190613eec565b61312c9190613eec565b90505f613142828661336490919063ffffffff16565b90505f479050613151826133ad565b5f613165824761336490919063ffffffff16565b90505f61318f876131816016548561329f90919063ffffffff16565b61331690919063ffffffff16565b90505f818361319e9190614743565b90505f6015819055505f6016819055505f861180156131bc57505f81115b15613209576131cb86826135e0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613200939291906147de565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161324e906141ef565b5f6040518083038185875af1925050503d805f8114613288576040519150601f19603f3d011682016040523d82523d5f602084013e61328d565b606091505b5050809750505050505050505050505b565b5f8083036132af575f9050613310565b5f82846132bc9190613e7e565b90508284826132cb9190613eec565b1461330b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330290614883565b60405180910390fd5b809150505b92915050565b5f61335783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136b7565b905092915050565b505050565b5f6133a583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c93565b905092915050565b5f600267ffffffffffffffff8111156133c9576133c86148a1565b5b6040519080825280602002602001820160405280156133f75781602001602082028036833780820191505090505b50905030815f8151811061340e5761340d6148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d5919061490f565b816001815181106134e9576134e86148ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121b0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135af9594939291906149f1565b5f604051808303815f87803b1580156135c6575f80fd5b505af11580156135d8573d5f803e3d5ffd5b505050505050565b61360b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121b0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161366f96959493929190614071565b60606040518083038185885af115801561368b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136b091906140e4565b5050505050565b5f80831182906136fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f491906137a2565b60405180910390fd5b505f838561370b9190613eec565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561374f578082015181840152602081019050613734565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61377482613718565b61377e8185613722565b935061378e818560208601613732565b6137978161375a565b840191505092915050565b5f6020820190508181035f8301526137ba818461376a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137ef826137c6565b9050919050565b6137ff816137e5565b8114613809575f80fd5b50565b5f8135905061381a816137f6565b92915050565b5f819050919050565b61383281613820565b811461383c575f80fd5b50565b5f8135905061384d81613829565b92915050565b5f8060408385031215613869576138686137c2565b5b5f6138768582860161380c565b92505060206138878582860161383f565b9150509250929050565b5f8115159050919050565b6138a581613891565b82525050565b5f6020820190506138be5f83018461389c565b92915050565b5f602082840312156138d9576138d86137c2565b5b5f6138e68482850161380c565b91505092915050565b5f819050919050565b5f61391261390d613908846137c6565b6138ef565b6137c6565b9050919050565b5f613923826138f8565b9050919050565b5f61393482613919565b9050919050565b6139448161392a565b82525050565b5f60208201905061395d5f83018461393b565b92915050565b61396c81613820565b82525050565b5f6020820190506139855f830184613963565b92915050565b61399481613891565b811461399e575f80fd5b50565b5f813590506139af8161398b565b92915050565b5f602082840312156139ca576139c96137c2565b5b5f6139d7848285016139a1565b91505092915050565b5f805f606084860312156139f7576139f66137c2565b5b5f613a048682870161380c565b9350506020613a158682870161380c565b9250506040613a268682870161383f565b9150509250925092565b5f60ff82169050919050565b613a4581613a30565b82525050565b5f602082019050613a5e5f830184613a3c565b92915050565b613a6d816137e5565b82525050565b5f602082019050613a865f830184613a64565b92915050565b5f8060408385031215613aa257613aa16137c2565b5b5f613aaf8582860161380c565b9250506020613ac0858286016139a1565b9150509250929050565b5f805f8060808587031215613ae257613ae16137c2565b5b5f613aef8782880161383f565b9450506020613b008782880161383f565b9350506040613b118782880161383f565b9250506060613b228782880161383f565b91505092959194509250565b5f8060408385031215613b4457613b436137c2565b5b5f613b518582860161383f565b9250506020613b628582860161383f565b9150509250929050565b5f60208284031215613b8157613b806137c2565b5b5f613b8e8482850161383f565b91505092915050565b5f8060408385031215613bad57613bac6137c2565b5b5f613bba8582860161380c565b9250506020613bcb8582860161380c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c1957607f821691505b602082108103613c2c57613c2b613bd5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c66602083613722565b9150613c7182613c32565b602082019050919050565b5f6020820190508181035f830152613c9381613c5a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cd182613820565b9150613cdc83613820565b9250828201905080821115613cf457613cf3613c9a565b5b92915050565b7f466565732063616e6e6f7420626520686967686572207468656e2033302500005f82015250565b5f613d2e601e83613722565b9150613d3982613cfa565b602082019050919050565b5f6020820190508181035f830152613d5b81613d22565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613dbc602483613722565b9150613dc782613d62565b604082019050919050565b5f6020820190508181035f830152613de981613db0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613e4a603983613722565b9150613e5582613df0565b604082019050919050565b5f6020820190508181035f830152613e7781613e3e565b9050919050565b5f613e8882613820565b9150613e9383613820565b9250828202613ea181613820565b91508282048414831517613eb857613eb7613c9a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613ef682613820565b9150613f0183613820565b925082613f1157613f10613ebf565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613f76602f83613722565b9150613f8182613f1c565b604082019050919050565b5f6020820190508181035f830152613fa381613f6a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614004602483613722565b915061400f82613faa565b604082019050919050565b5f6020820190508181035f83015261403181613ff8565b9050919050565b5f819050919050565b5f61405b61405661405184614038565b6138ef565b613820565b9050919050565b61406b81614041565b82525050565b5f60c0820190506140845f830189613a64565b6140916020830188613963565b61409e6040830187614062565b6140ab6060830186614062565b6140b86080830185613a64565b6140c560a0830184613963565b979650505050505050565b5f815190506140de81613829565b92915050565b5f805f606084860312156140fb576140fa6137c2565b5b5f614108868287016140d0565b9350506020614119868287016140d0565b925050604061412a868287016140d0565b9150509250925092565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f61418e602283613722565b915061419982614134565b604082019050919050565b5f6020820190508181035f8301526141bb81614182565b9050919050565b5f81905092915050565b50565b5f6141da5f836141c2565b91506141e5826141cc565b5f82019050919050565b5f6141f9826141cf565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f614237601b83613722565b915061424282614203565b602082019050919050565b5f6020820190508181035f8301526142648161422b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6142c5603583613722565b91506142d08261426b565b604082019050919050565b5f6020820190508181035f8301526142f2816142b9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614353603483613722565b915061435e826142f9565b604082019050919050565b5f6020820190508181035f83015261438081614347565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143e1602483613722565b91506143ec82614387565b604082019050919050565b5f6020820190508181035f83015261440e816143d5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61446f602283613722565b915061447a82614415565b604082019050919050565b5f6020820190508181035f83015261449c81614463565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6144fd602583613722565b9150614508826144a3565b604082019050919050565b5f6020820190508181035f83015261452a816144f1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458b602383613722565b915061459682614531565b604082019050919050565b5f6020820190508181035f8301526145b88161457f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614619603583613722565b9150614624826145bf565b604082019050919050565b5f6020820190508181035f8301526146468161460d565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614681601383613722565b915061468c8261464d565b602082019050919050565b5f6020820190508181035f8301526146ae81614675565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61470f603683613722565b915061471a826146b5565b604082019050919050565b5f6020820190508181035f83015261473c81614703565b9050919050565b5f61474d82613820565b915061475883613820565b92508282039050818111156147705761476f613c9a565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6147aa601b83613722565b91506147b582614776565b602082019050919050565b5f6020820190508181035f8301526147d78161479e565b9050919050565b5f6060820190506147f15f830186613963565b6147fe6020830185613963565b61480b6040830184613963565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61486d602183613722565b915061487882614813565b604082019050919050565b5f6020820190508181035f83015261489a81614861565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614909816137f6565b92915050565b5f60208284031215614924576149236137c2565b5b5f614931848285016148fb565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61496c816137e5565b82525050565b5f61497d8383614963565b60208301905092915050565b5f602082019050919050565b5f61499f8261493a565b6149a98185614944565b93506149b483614954565b805f5b838110156149e45781516149cb8882614972565b97506149d683614989565b9250506001810190506149b7565b5085935050505092915050565b5f60a082019050614a045f830188613963565b614a116020830187614062565b8181036040830152614a238186614995565b9050614a326060830185613a64565b614a3f6080830184613963565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122075610e8c618ede781dd19d139b7f672eceae30a9a23dcda14f09b298a4b0798964736f6c63430008140033
Deployed Bytecode Sourcemap
17481:13725:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4750:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5664:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18537:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17630:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5071:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22752:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17968:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18241:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17930:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5841:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4970:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6204:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17688:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25315:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18052:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18128:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18163:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5187:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10725:148;;;;;;;;;;;;;:::i;:::-;;17835:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22625:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23709:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23865:584;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25099:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10511:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4858:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22348:261;;;;;;;;;;;;;:::i;:::-;;24648:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23318:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6430:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5322:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18760:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17766:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21468:543;;;;;;;;;;;;;:::i;:::-;;24457:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22019:321;;;;;;;;;;;;;:::i;:::-;;18281:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22935:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18018:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5505:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17862:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18088:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10881:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18200:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17896:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4750:100;4804:13;4837:5;4830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4750:100;:::o;5664:169::-;5747:4;5764:39;5773:12;:10;:12::i;:::-;5787:7;5796:6;5764:8;:39::i;:::-;5821:4;5814:11;;5664:169;;;;:::o;18537:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17630:51::-;;;:::o;5071:108::-;5132:7;5159:12;;5152:19;;5071:108;:::o;22752:111::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22848:7:::1;22824:21;;:31;;;;;;;;;;;;;;;;;;22752:111:::0;:::o;17968:41::-;;;;;;;;;;;;;:::o;18241:33::-;;;;:::o;17930:31::-;;;;;;;;;;;;;:::o;5841:355::-;5981:4;5998:36;6008:6;6016:9;6027:6;5998:9;:36::i;:::-;6045:121;6054:6;6062:12;:10;:12::i;:::-;6076:89;6114:6;6076:89;;;;;;;;;;;;;;;;;:11;:19;6088:6;6076:19;;;;;;;;;;;;;;;:33;6096:12;:10;:12::i;:::-;6076:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6045:8;:121::i;:::-;6184:4;6177:11;;5841:355;;;;;:::o;4970:93::-;5028:5;5053:2;5046:9;;4970:93;:::o;6204:218::-;6292:4;6309:83;6318:12;:10;:12::i;:::-;6332:7;6341:50;6380:10;6341:11;:25;6353:12;:10;:12::i;:::-;6341:25;;;;;;;;;;;;;;;:34;6367:7;6341:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6309:8;:83::i;:::-;6410:4;6403:11;;6204:218;;;;:::o;17688:38::-;;;:::o;25315:125::-;25380:4;25404:19;:28;25424:7;25404:28;;;;;;;;;;;;;;;;;;;;;;;;;25397:35;;25315:125;;;:::o;18052:29::-;;;;:::o;18128:28::-;;;;:::o;18163:30::-;;;;:::o;5187:127::-;5261:7;5288:9;:18;5298:7;5288:18;;;;;;;;;;;;;;;;5281:25;;5187:127;;;:::o;10725:148::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10832:1:::1;10795:40;;10816:6;;;;;;;;;;;10795:40;;;;;;;;;;;;10863:1;10846:6;;:19;;;;;;;;;;;;;;;;;;10725:148::o:0;17835:20::-;;;;:::o;22625:118::-;22677:4;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22708:5:::1;22693:12;;:20;;;;;;;;;;;;;;;;;;22731:4;22724:11;;22625:118:::0;:::o;23709:144::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23841:4:::1;23799:31;:39;23831:6;23799:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23709:144:::0;;:::o;23865:584::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24076:16:::1;24058:15;:34;;;;24120:15;24103:14;:32;;;;24179:14;;24161:15;;:32;;;;:::i;:::-;24146:12;:47;;;;24223:17;24204:16;:36;;;;24269:16;24251:15;:34;;;;24331:15;;24312:16;;:34;;;;:::i;:::-;24296:13;:50;;;;24381:2;24365:12;;:18;;:41;;;;;24404:2;24387:13;;:19;;24365:41;24357:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;23865:584:::0;;;;:::o;25099:201::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25232:14:::1;;;;;;;;;;;25191:56;;25213:17;25191:56;;;;;;;;;;;;25275:17;25258:14;;:34;;;;;;;;;;;;;;;;;;25099:201:::0;:::o;10511:79::-;10549:7;10576:6;;;;;;;;;;;10569:13;;10511:79;:::o;4858:104::-;4914:13;4947:7;4940:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:104;:::o;22348:261::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22413:20:::1;22436:24;22454:4;22436:9;:24::i;:::-;22413:47;;22494:1;22479:12;:16;22471:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22547:54;22565:4;22572:14;;;;;;;;;;;22588:12;22547:9;:54::i;:::-;22402:207;22348:261::o:0;24648:245::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24755:13:::1;24747:21;;:4;:21;;::::0;24739:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24844:41;24873:4;24879:5;24844:28;:41::i;:::-;24648:245:::0;;:::o;23318:382::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23451:4:::1;23445;23441:1;23425:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23424:31;;;;:::i;:::-;23414:6;:41;;23406:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23567:4;23561;23557:1;23541:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23540:31;;;;:::i;:::-;23526:10;:45;;23518:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;23641:6;23631;:17;;;;:::i;:::-;23623:5;:25;;;;23685:6;23671:10;:21;;;;:::i;:::-;23659:9;:33;;;;23318:382:::0;;:::o;6430:269::-;6523:4;6540:129;6549:12;:10;:12::i;:::-;6563:7;6572:96;6611:15;6572:96;;;;;;;;;;;;;;;;;:11;:25;6584:12;:10;:12::i;:::-;6572:25;;;;;;;;;;;;;;;:34;6598:7;6572:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6540:8;:129::i;:::-;6687:4;6680:11;;6430:269;;;;:::o;5322:175::-;5408:4;5425:42;5435:12;:10;:12::i;:::-;5449:9;5460:6;5425:9;:42::i;:::-;5485:4;5478:11;;5322:175;;;;:::o;18760:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17766:22::-;;;;:::o;21468:543::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21532:17:::1;21552:21;21532:41;;21584:19;21606:24;21624:4;21606:9;:24::i;:::-;21584:46;;21661:62;21678:4;21693:15;21711:11;21661:8;:62::i;:::-;21736:15;:31;;;21775:9;21808:4;21828:11;21858:1;21905::::0;21948:14:::1;;;;;;;;;;;21977:15;21736:267;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21511:500;;21468:543::o:0;24457:182::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24573:8:::1;24542:19;:28;24562:7;24542:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24613:7;24597:34;;;24622:8;24597:34;;;;;;:::i;:::-;;;;;;;;24457:182:::0;;:::o;22019:321::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22080:18:::1;22101:21;22080:42;;22154:1;22141:10;:14;22133:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:12;22231:14;;;;;;;;;;;22223:28;;22259:10;22223:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22205:69;;;22293:7;22285:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22069:271;;22019:321::o:0;18281:32::-;;;;:::o;22935:374::-;23010:4;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23067:6:::1;23063:1;23047:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;23034:9;:39;;23026:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;23183:4;23179:1;23163:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23150:9;:37;;23142:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;23270:9;23255:12;:24;;;;23297:4;23290:11;;22935:374:::0;;;:::o;18018:27::-;;;;:::o;5505:151::-;5594:7;5621:11;:18;5633:5;5621:18;;;;;;;;;;;;;;;:27;5640:7;5621:27;;;;;;;;;;;;;;;;5614:34;;5505:151;;;;:::o;17862:27::-;;;;:::o;18088:30::-;;;;:::o;10881:169::-;10648:12;:10;:12::i;:::-;10638:22;;:6;;;;;;;;;;;:22;;;10630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11005:8:::1;10976:38;;10997:6;;;;;;;;;;;10976:38;;;;;;;;;;;;11034:8;11025:6;;:17;;;;;;;;;;;;;;;;;;10881:169:::0;:::o;18200:31::-;;;;:::o;17896:24::-;;;;:::o;103:98::-;156:7;183:10;176:17;;103:98;:::o;8106:381::-;8259:1;8242:19;;:5;:19;;;8234:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8340:1;8321:21;;:7;:21;;;8313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8425:6;8395:11;:18;8407:5;8395:18;;;;;;;;;;;;;;;:27;8414:7;8395:27;;;;;;;;;;;;;;;:36;;;;8463:7;8447:32;;8456:5;8447:32;;;8472:6;8447:32;;;;;;:::i;:::-;;;;;;;;8106:381;;;:::o;25449:3113::-;25597:1;25581:18;;:4;:18;;;25573:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25674:1;25660:16;;:2;:16;;;25652:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25741:1;25731:6;:11;25728:92;;25759:28;25775:4;25781:2;25785:1;25759:15;:28::i;:::-;25802:7;;25728:92;25836:12;;;;;;;;;;;25833:1052;;;25894:7;:5;:7::i;:::-;25886:15;;:4;:15;;;;:49;;;;;25928:7;:5;:7::i;:::-;25922:13;;:2;:13;;;;25886:49;:86;;;;;25970:1;25956:16;;:2;:16;;;;25886:86;:128;;;;;26007:6;25993:21;;:2;:21;;;;25886:128;:160;;;;;26036:10;;;;;;;;;;;26035:11;25886:160;25864:1010;;;26130:25;:31;26156:4;26130:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26166:31;:35;26198:2;26166:35;;;;;;;;;;;;;;;;;;;;;;;;;26165:36;26130:71;26126:733;;;26248:5;;26238:6;:15;;26230:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26372:9;;26355:13;26365:2;26355:9;:13::i;:::-;26346:6;:22;;;;:::i;:::-;:35;;26338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26126:733;;;26484:25;:29;26510:2;26484:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26518:31;:37;26550:4;26518:37;;;;;;;;;;;;;;;;;;;;;;;;;26517:38;26484:71;26480:379;;;26602:5;;26592:6;:15;;26584:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;26480:379;;;26713:31;:35;26745:2;26713:35;;;;;;;;;;;;;;;;;;;;;;;;;26709:150;;26806:9;;26789:13;26799:2;26789:9;:13::i;:::-;26780:6;:22;;;;:::i;:::-;:35;;26772:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26709:150;26480:379;26126:733;25864:1010;25833:1052;26898:28;26929:24;26947:4;26929:9;:24::i;:::-;26898:55;;26967:12;27006;;26982:20;:36;;26967:51;;27050:7;:35;;;;;27075:10;;;;;;;;;;;27074:11;27050:35;:84;;;;;27103:25;:31;27129:4;27103:31;;;;;;;;;;;;;;;;;;;;;;;;;27102:32;27050:84;:127;;;;;27152:19;:25;27172:4;27152:25;;;;;;;;;;;;;;;;;;;;;;;;;27151:26;27050:127;:168;;;;;27195:19;:23;27215:2;27195:23;;;;;;;;;;;;;;;;;;;;;;;;;27194:24;27050:168;27032:306;;;27258:4;27245:10;;:17;;;;;;;;;;;;;;;;;;27280:10;:8;:10::i;:::-;27321:5;27308:10;;:18;;;;;;;;;;;;;;;;;;27032:306;27351:12;27367:10;;;;;;;;;;;27366:11;27351:26;;27479:19;:25;27499:4;27479:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27508:19;:23;27528:2;27508:23;;;;;;;;;;;;;;;;;;;;;;;;;27479:52;27476:99;;;27558:5;27548:15;;27476:99;27588:12;27692:7;27689:819;;;27743:25;:29;27769:2;27743:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27792:1;27776:13;;:17;27743:50;27739:616;;;27820:34;27850:3;27820:25;27831:13;;27820:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27813:41;;27921:13;;27902:16;;27895:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27873:18;;:61;;;;;;;:::i;:::-;;;;;;;;27999:13;;27981:15;;27974:4;:22;;;;:::i;:::-;:38;;;;:::i;:::-;27953:17;;:59;;;;;;;:::i;:::-;;;;;;;;27739:616;;;28073:25;:31;28099:4;28073:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28123:1;28108:12;;:16;28073:51;28070:285;;;28152:33;28181:3;28152:24;28163:12;;28152:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;28145:40;;28251:12;;28233:15;;28226:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28204:18;;:59;;;;;;;:::i;:::-;;;;;;;;28327:12;;28310:14;;28303:4;:21;;;;:::i;:::-;:36;;;;:::i;:::-;28282:17;;:57;;;;;;;:::i;:::-;;;;;;;;28070:285;27739:616;28382:1;28375:4;:8;28372:93;;;28407:42;28423:4;28437;28444;28407:15;:42::i;:::-;28372:93;28492:4;28482:14;;;;;:::i;:::-;;;27689:819;28521:33;28537:4;28543:2;28547:6;28521:15;:33::i;:::-;25562:3000;;;;25449:3113;;;;:::o;8988:193::-;9074:7;9107:1;9102;:6;;9110:12;9094:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9134:9;9150:1;9146;:5;;;;:::i;:::-;9134:17;;9172:1;9165:8;;;8988:193;;;;;:::o;8654:182::-;8712:7;8732:9;8748:1;8744;:5;;;;:::i;:::-;8732:17;;8773:1;8768;:6;;8760:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8827:1;8820:8;;;8654:182;;;;:::o;24902:189::-;25019:5;24985:25;:31;25011:4;24985:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25077:5;25043:40;;25071:4;25043:40;;;;;;;;;;;;24902:189;;:::o;6707:575::-;6865:1;6847:20;;:6;:20;;;6839:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6949:1;6928:23;;:9;:23;;;6920:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7005:47;7026:6;7034:9;7045:6;7005:20;:47::i;:::-;7086:71;7108:6;7086:71;;;;;;;;;;;;;;;;;:9;:17;7096:6;7086:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7066:9;:17;7076:6;7066:17;;;;;;;;;;;;;;;:91;;;;7191:32;7216:6;7191:9;:20;7201:9;7191:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7168:9;:20;7178:9;7168:20;;;;;;;;;;;;;;;:55;;;;7256:9;7239:35;;7248:6;7239:35;;;7267:6;7239:35;;;;;;:::i;:::-;;;;;;;;6707:575;;;:::o;29706:1497::-;29745:23;29771:24;29789:4;29771:9;:24::i;:::-;29745:50;;29806:25;29855:17;;29834:18;;:38;;;;:::i;:::-;29806:66;;29883:12;29931:1;29912:15;:20;:46;;;;29957:1;29936:17;:22;29912:46;29909:60;;;29961:7;;;;;29909:60;30010:5;29985:30;;:21;;;;;;;;;;;:30;;;29982:242;;30067:2;30052:12;;:17;;;;:::i;:::-;30034:15;:35;30031:109;;;30122:2;30107:12;;:17;;;;:::i;:::-;30089:35;;30031:109;29982:242;;;30188:24;30206:4;30188:9;:24::i;:::-;30170:42;;29982:242;30296:23;30381:1;30361:17;30340:18;;30322:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30296:86;;30393:26;30422:36;30442:15;30422;:19;;:36;;;;:::i;:::-;30393:65;;30472:25;30500:21;30472:49;;30535:36;30552:18;30535:16;:36::i;:::-;30586:18;30607:44;30633:17;30607:21;:25;;:44;;;;:::i;:::-;30586:65;;30665:23;30691:56;30729:17;30691:33;30706:17;;30691:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;30665:82;;30758:23;30797:15;30784:10;:28;;;;:::i;:::-;30758:54;;30850:1;30829:18;:22;;;;30882:1;30862:17;:21;;;;30918:1;30900:15;:19;:42;;;;;30941:1;30923:15;:19;30900:42;30897:210;;;30958:46;30971:15;30988;30958:12;:46::i;:::-;31024:71;31039:18;31059:15;31076:18;;31024:71;;;;;;;;:::i;:::-;;;;;;;;30897:210;31141:14;;;;;;;;;;;31133:28;;31169:21;31133:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31120:75;;;;;29734:1469;;;;;;;;;29706:1497;:::o;9189:254::-;9247:7;9278:1;9273;:6;9269:47;;9303:1;9296:8;;;;9269:47;9329:9;9345:1;9341;:5;;;;:::i;:::-;9329:17;;9374:1;9369;9365;:5;;;;:::i;:::-;:10;9357:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9434:1;9427:8;;;9189:254;;;;;:::o;9451:132::-;9509:7;9536:39;9540:1;9543;9536:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9529:46;;9451:132;;;;:::o;8495:125::-;;;;:::o;8844:136::-;8902:7;8929:43;8933:1;8936;8929:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8922:50;;8844:136;;;;:::o;28571:597::-;28700:21;28738:1;28724:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28700:40;;28769:4;28751;28756:1;28751:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28795:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28785:4;28790:1;28785:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28831:62;28848:4;28863:15;28881:11;28831:8;:62::i;:::-;28933:15;:66;;;29014:11;29040:1;29084:4;29111;29131:15;28933:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28626:542;28571:597;:::o;29177:520::-;29325:62;29342:4;29357:15;29375:11;29325:8;:62::i;:::-;29431:15;:31;;;29470:9;29503:4;29523:11;29549:1;29592;29643:4;29663:15;29431:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29177:520;;:::o;9591:279::-;9677:7;9709:1;9705;:5;9712:12;9697:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9736:9;9752:1;9748;:5;;;;:::i;:::-;9736:17;;9861:1;9854:8;;;9591:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:116::-;5181:21;5196:5;5181:21;:::i;:::-;5174:5;5171:32;5161:60;;5217:1;5214;5207:12;5161:60;5111:116;:::o;5233:133::-;5276:5;5314:6;5301:20;5292:29;;5330:30;5354:5;5330:30;:::i;:::-;5233:133;;;;:::o;5372:323::-;5428:6;5477:2;5465:9;5456:7;5452:23;5448:32;5445:119;;;5483:79;;:::i;:::-;5445:119;5603:1;5628:50;5670:7;5661:6;5650:9;5646:22;5628:50;:::i;:::-;5618:60;;5574:114;5372:323;;;;:::o;5701:619::-;5778:6;5786;5794;5843:2;5831:9;5822:7;5818:23;5814:32;5811:119;;;5849:79;;:::i;:::-;5811:119;5969:1;5994:53;6039:7;6030:6;6019:9;6015:22;5994:53;:::i;:::-;5984:63;;5940:117;6096:2;6122:53;6167:7;6158:6;6147:9;6143:22;6122:53;:::i;:::-;6112:63;;6067:118;6224:2;6250:53;6295:7;6286:6;6275:9;6271:22;6250:53;:::i;:::-;6240:63;;6195:118;5701:619;;;;;:::o;6326:86::-;6361:7;6401:4;6394:5;6390:16;6379:27;;6326:86;;;:::o;6418:112::-;6501:22;6517:5;6501:22;:::i;:::-;6496:3;6489:35;6418:112;;:::o;6536:214::-;6625:4;6663:2;6652:9;6648:18;6640:26;;6676:67;6740:1;6729:9;6725:17;6716:6;6676:67;:::i;:::-;6536:214;;;;:::o;6756:118::-;6843:24;6861:5;6843:24;:::i;:::-;6838:3;6831:37;6756:118;;:::o;6880:222::-;6973:4;7011:2;7000:9;6996:18;6988:26;;7024:71;7092:1;7081:9;7077:17;7068:6;7024:71;:::i;:::-;6880:222;;;;:::o;7108:468::-;7173:6;7181;7230:2;7218:9;7209:7;7205:23;7201:32;7198:119;;;7236:79;;:::i;:::-;7198:119;7356:1;7381:53;7426:7;7417:6;7406:9;7402:22;7381:53;:::i;:::-;7371:63;;7327:117;7483:2;7509:50;7551:7;7542:6;7531:9;7527:22;7509:50;:::i;:::-;7499:60;;7454:115;7108:468;;;;;:::o;7582:765::-;7668:6;7676;7684;7692;7741:3;7729:9;7720:7;7716:23;7712:33;7709:120;;;7748:79;;:::i;:::-;7709:120;7868:1;7893:53;7938:7;7929:6;7918:9;7914:22;7893:53;:::i;:::-;7883:63;;7839:117;7995:2;8021:53;8066:7;8057:6;8046:9;8042:22;8021:53;:::i;:::-;8011:63;;7966:118;8123:2;8149:53;8194:7;8185:6;8174:9;8170:22;8149:53;:::i;:::-;8139:63;;8094:118;8251:2;8277:53;8322:7;8313:6;8302:9;8298:22;8277:53;:::i;:::-;8267:63;;8222:118;7582:765;;;;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::o;8833:329::-;8892:6;8941:2;8929:9;8920:7;8916:23;8912:32;8909:119;;;8947:79;;:::i;:::-;8909:119;9067:1;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9038:117;8833:329;;;;:::o;9168:474::-;9236:6;9244;9293:2;9281:9;9272:7;9268:23;9264:32;9261:119;;;9299:79;;:::i;:::-;9261:119;9419:1;9444:53;9489:7;9480:6;9469:9;9465:22;9444:53;:::i;:::-;9434:63;;9390:117;9546:2;9572:53;9617:7;9608:6;9597:9;9593:22;9572:53;:::i;:::-;9562:63;;9517:118;9168:474;;;;;:::o;9648:180::-;9696:77;9693:1;9686:88;9793:4;9790:1;9783:15;9817:4;9814:1;9807:15;9834:320;9878:6;9915:1;9909:4;9905:12;9895:22;;9962:1;9956:4;9952:12;9983:18;9973:81;;10039:4;10031:6;10027:17;10017:27;;9973:81;10101:2;10093:6;10090:14;10070:18;10067:38;10064:84;;10120:18;;:::i;:::-;10064:84;9885:269;9834:320;;;:::o;10160:182::-;10300:34;10296:1;10288:6;10284:14;10277:58;10160:182;:::o;10348:366::-;10490:3;10511:67;10575:2;10570:3;10511:67;:::i;:::-;10504:74;;10587:93;10676:3;10587:93;:::i;:::-;10705:2;10700:3;10696:12;10689:19;;10348:366;;;:::o;10720:419::-;10886:4;10924:2;10913:9;10909:18;10901:26;;10973:9;10967:4;10963:20;10959:1;10948:9;10944:17;10937:47;11001:131;11127:4;11001:131;:::i;:::-;10993:139;;10720:419;;;:::o;11145:180::-;11193:77;11190:1;11183:88;11290:4;11287:1;11280:15;11314:4;11311:1;11304:15;11331:191;11371:3;11390:20;11408:1;11390:20;:::i;:::-;11385:25;;11424:20;11442:1;11424:20;:::i;:::-;11419:25;;11467:1;11464;11460:9;11453:16;;11488:3;11485:1;11482:10;11479:36;;;11495:18;;:::i;:::-;11479:36;11331:191;;;;:::o;11528:180::-;11668:32;11664:1;11656:6;11652:14;11645:56;11528:180;:::o;11714:366::-;11856:3;11877:67;11941:2;11936:3;11877:67;:::i;:::-;11870:74;;11953:93;12042:3;11953:93;:::i;:::-;12071:2;12066:3;12062:12;12055:19;;11714:366;;;:::o;12086:419::-;12252:4;12290:2;12279:9;12275:18;12267:26;;12339:9;12333:4;12329:20;12325:1;12314:9;12310:17;12303:47;12367:131;12493:4;12367:131;:::i;:::-;12359:139;;12086:419;;;:::o;12511:223::-;12651:34;12647:1;12639:6;12635:14;12628:58;12720:6;12715:2;12707:6;12703:15;12696:31;12511:223;:::o;12740:366::-;12882:3;12903:67;12967:2;12962:3;12903:67;:::i;:::-;12896:74;;12979:93;13068:3;12979:93;:::i;:::-;13097:2;13092:3;13088:12;13081:19;;12740:366;;;:::o;13112:419::-;13278:4;13316:2;13305:9;13301:18;13293:26;;13365:9;13359:4;13355:20;13351:1;13340:9;13336:17;13329:47;13393:131;13519:4;13393:131;:::i;:::-;13385:139;;13112:419;;;:::o;13537:244::-;13677:34;13673:1;13665:6;13661:14;13654:58;13746:27;13741:2;13733:6;13729:15;13722:52;13537:244;:::o;13787:366::-;13929:3;13950:67;14014:2;14009:3;13950:67;:::i;:::-;13943:74;;14026:93;14115:3;14026:93;:::i;:::-;14144:2;14139:3;14135:12;14128:19;;13787:366;;;:::o;14159:419::-;14325:4;14363:2;14352:9;14348:18;14340:26;;14412:9;14406:4;14402:20;14398:1;14387:9;14383:17;14376:47;14440:131;14566:4;14440:131;:::i;:::-;14432:139;;14159:419;;;:::o;14584:410::-;14624:7;14647:20;14665:1;14647:20;:::i;:::-;14642:25;;14681:20;14699:1;14681:20;:::i;:::-;14676:25;;14736:1;14733;14729:9;14758:30;14776:11;14758:30;:::i;:::-;14747:41;;14937:1;14928:7;14924:15;14921:1;14918:22;14898:1;14891:9;14871:83;14848:139;;14967:18;;:::i;:::-;14848:139;14632:362;14584:410;;;;:::o;15000:180::-;15048:77;15045:1;15038:88;15145:4;15142:1;15135:15;15169:4;15166:1;15159:15;15186:185;15226:1;15243:20;15261:1;15243:20;:::i;:::-;15238:25;;15277:20;15295:1;15277:20;:::i;:::-;15272:25;;15316:1;15306:35;;15321:18;;:::i;:::-;15306:35;15363:1;15360;15356:9;15351:14;;15186:185;;;;:::o;15377:234::-;15517:34;15513:1;15505:6;15501:14;15494:58;15586:17;15581:2;15573:6;15569:15;15562:42;15377:234;:::o;15617:366::-;15759:3;15780:67;15844:2;15839:3;15780:67;:::i;:::-;15773:74;;15856:93;15945:3;15856:93;:::i;:::-;15974:2;15969:3;15965:12;15958:19;;15617:366;;;:::o;15989:419::-;16155:4;16193:2;16182:9;16178:18;16170:26;;16242:9;16236:4;16232:20;16228:1;16217:9;16213:17;16206:47;16270:131;16396:4;16270:131;:::i;:::-;16262:139;;15989:419;;;:::o;16414:223::-;16554:34;16550:1;16542:6;16538:14;16531:58;16623:6;16618:2;16610:6;16606:15;16599:31;16414:223;:::o;16643:366::-;16785:3;16806:67;16870:2;16865:3;16806:67;:::i;:::-;16799:74;;16882:93;16971:3;16882:93;:::i;:::-;17000:2;16995:3;16991:12;16984:19;;16643:366;;;:::o;17015:419::-;17181:4;17219:2;17208:9;17204:18;17196:26;;17268:9;17262:4;17258:20;17254:1;17243:9;17239:17;17232:47;17296:131;17422:4;17296:131;:::i;:::-;17288:139;;17015:419;;;:::o;17440:85::-;17485:7;17514:5;17503:16;;17440:85;;;:::o;17531:158::-;17589:9;17622:61;17640:42;17649:32;17675:5;17649:32;:::i;:::-;17640:42;:::i;:::-;17622:61;:::i;:::-;17609:74;;17531:158;;;:::o;17695:147::-;17790:45;17829:5;17790:45;:::i;:::-;17785:3;17778:58;17695:147;;:::o;17848:807::-;18097:4;18135:3;18124:9;18120:19;18112:27;;18149:71;18217:1;18206:9;18202:17;18193:6;18149:71;:::i;:::-;18230:72;18298:2;18287:9;18283:18;18274:6;18230:72;:::i;:::-;18312:80;18388:2;18377:9;18373:18;18364:6;18312:80;:::i;:::-;18402;18478:2;18467:9;18463:18;18454:6;18402:80;:::i;:::-;18492:73;18560:3;18549:9;18545:19;18536:6;18492:73;:::i;:::-;18575;18643:3;18632:9;18628:19;18619:6;18575:73;:::i;:::-;17848:807;;;;;;;;;:::o;18661:143::-;18718:5;18749:6;18743:13;18734:22;;18765:33;18792:5;18765:33;:::i;:::-;18661:143;;;;:::o;18810:663::-;18898:6;18906;18914;18963:2;18951:9;18942:7;18938:23;18934:32;18931:119;;;18969:79;;:::i;:::-;18931:119;19089:1;19114:64;19170:7;19161:6;19150:9;19146:22;19114:64;:::i;:::-;19104:74;;19060:128;19227:2;19253:64;19309:7;19300:6;19289:9;19285:22;19253:64;:::i;:::-;19243:74;;19198:129;19366:2;19392:64;19448:7;19439:6;19428:9;19424:22;19392:64;:::i;:::-;19382:74;;19337:129;18810:663;;;;;:::o;19479:221::-;19619:34;19615:1;19607:6;19603:14;19596:58;19688:4;19683:2;19675:6;19671:15;19664:29;19479:221;:::o;19706:366::-;19848:3;19869:67;19933:2;19928:3;19869:67;:::i;:::-;19862:74;;19945:93;20034:3;19945:93;:::i;:::-;20063:2;20058:3;20054:12;20047:19;;19706:366;;;:::o;20078:419::-;20244:4;20282:2;20271:9;20267:18;20259:26;;20331:9;20325:4;20321:20;20317:1;20306:9;20302:17;20295:47;20359:131;20485:4;20359:131;:::i;:::-;20351:139;;20078:419;;;:::o;20503:147::-;20604:11;20641:3;20626:18;;20503:147;;;;:::o;20656:114::-;;:::o;20776:398::-;20935:3;20956:83;21037:1;21032:3;20956:83;:::i;:::-;20949:90;;21048:93;21137:3;21048:93;:::i;:::-;21166:1;21161:3;21157:11;21150:18;;20776:398;;;:::o;21180:379::-;21364:3;21386:147;21529:3;21386:147;:::i;:::-;21379:154;;21550:3;21543:10;;21180:379;;;:::o;21565:177::-;21705:29;21701:1;21693:6;21689:14;21682:53;21565:177;:::o;21748:366::-;21890:3;21911:67;21975:2;21970:3;21911:67;:::i;:::-;21904:74;;21987:93;22076:3;21987:93;:::i;:::-;22105:2;22100:3;22096:12;22089:19;;21748:366;;;:::o;22120:419::-;22286:4;22324:2;22313:9;22309:18;22301:26;;22373:9;22367:4;22363:20;22359:1;22348:9;22344:17;22337:47;22401:131;22527:4;22401:131;:::i;:::-;22393:139;;22120:419;;;:::o;22545:240::-;22685:34;22681:1;22673:6;22669:14;22662:58;22754:23;22749:2;22741:6;22737:15;22730:48;22545:240;:::o;22791:366::-;22933:3;22954:67;23018:2;23013:3;22954:67;:::i;:::-;22947:74;;23030:93;23119:3;23030:93;:::i;:::-;23148:2;23143:3;23139:12;23132:19;;22791:366;;;:::o;23163:419::-;23329:4;23367:2;23356:9;23352:18;23344:26;;23416:9;23410:4;23406:20;23402:1;23391:9;23387:17;23380:47;23444:131;23570:4;23444:131;:::i;:::-;23436:139;;23163:419;;;:::o;23588:239::-;23728:34;23724:1;23716:6;23712:14;23705:58;23797:22;23792:2;23784:6;23780:15;23773:47;23588:239;:::o;23833:366::-;23975:3;23996:67;24060:2;24055:3;23996:67;:::i;:::-;23989:74;;24072:93;24161:3;24072:93;:::i;:::-;24190:2;24185:3;24181:12;24174:19;;23833:366;;;:::o;24205:419::-;24371:4;24409:2;24398:9;24394:18;24386:26;;24458:9;24452:4;24448:20;24444:1;24433:9;24429:17;24422:47;24486:131;24612:4;24486:131;:::i;:::-;24478:139;;24205:419;;;:::o;24630:223::-;24770:34;24766:1;24758:6;24754:14;24747:58;24839:6;24834:2;24826:6;24822:15;24815:31;24630:223;:::o;24859:366::-;25001:3;25022:67;25086:2;25081:3;25022:67;:::i;:::-;25015:74;;25098:93;25187:3;25098:93;:::i;:::-;25216:2;25211:3;25207:12;25200:19;;24859:366;;;:::o;25231:419::-;25397:4;25435:2;25424:9;25420:18;25412:26;;25484:9;25478:4;25474:20;25470:1;25459:9;25455:17;25448:47;25512:131;25638:4;25512:131;:::i;:::-;25504:139;;25231:419;;;:::o;25656:221::-;25796:34;25792:1;25784:6;25780:14;25773:58;25865:4;25860:2;25852:6;25848:15;25841:29;25656:221;:::o;25883:366::-;26025:3;26046:67;26110:2;26105:3;26046:67;:::i;:::-;26039:74;;26122:93;26211:3;26122:93;:::i;:::-;26240:2;26235:3;26231:12;26224:19;;25883:366;;;:::o;26255:419::-;26421:4;26459:2;26448:9;26444:18;26436:26;;26508:9;26502:4;26498:20;26494:1;26483:9;26479:17;26472:47;26536:131;26662:4;26536:131;:::i;:::-;26528:139;;26255:419;;;:::o;26680:224::-;26820:34;26816:1;26808:6;26804:14;26797:58;26889:7;26884:2;26876:6;26872:15;26865:32;26680:224;:::o;26910:366::-;27052:3;27073:67;27137:2;27132:3;27073:67;:::i;:::-;27066:74;;27149:93;27238:3;27149:93;:::i;:::-;27267:2;27262:3;27258:12;27251:19;;26910:366;;;:::o;27282:419::-;27448:4;27486:2;27475:9;27471:18;27463:26;;27535:9;27529:4;27525:20;27521:1;27510:9;27506:17;27499:47;27563:131;27689:4;27563:131;:::i;:::-;27555:139;;27282:419;;;:::o;27707:222::-;27847:34;27843:1;27835:6;27831:14;27824:58;27916:5;27911:2;27903:6;27899:15;27892:30;27707:222;:::o;27935:366::-;28077:3;28098:67;28162:2;28157:3;28098:67;:::i;:::-;28091:74;;28174:93;28263:3;28174:93;:::i;:::-;28292:2;28287:3;28283:12;28276:19;;27935:366;;;:::o;28307:419::-;28473:4;28511:2;28500:9;28496:18;28488:26;;28560:9;28554:4;28550:20;28546:1;28535:9;28531:17;28524:47;28588:131;28714:4;28588:131;:::i;:::-;28580:139;;28307:419;;;:::o;28732:240::-;28872:34;28868:1;28860:6;28856:14;28849:58;28941:23;28936:2;28928:6;28924:15;28917:48;28732:240;:::o;28978:366::-;29120:3;29141:67;29205:2;29200:3;29141:67;:::i;:::-;29134:74;;29217:93;29306:3;29217:93;:::i;:::-;29335:2;29330:3;29326:12;29319:19;;28978:366;;;:::o;29350:419::-;29516:4;29554:2;29543:9;29539:18;29531:26;;29603:9;29597:4;29593:20;29589:1;29578:9;29574:17;29567:47;29631:131;29757:4;29631:131;:::i;:::-;29623:139;;29350:419;;;:::o;29775:169::-;29915:21;29911:1;29903:6;29899:14;29892:45;29775:169;:::o;29950:366::-;30092:3;30113:67;30177:2;30172:3;30113:67;:::i;:::-;30106:74;;30189:93;30278:3;30189:93;:::i;:::-;30307:2;30302:3;30298:12;30291:19;;29950:366;;;:::o;30322:419::-;30488:4;30526:2;30515:9;30511:18;30503:26;;30575:9;30569:4;30565:20;30561:1;30550:9;30546:17;30539:47;30603:131;30729:4;30603:131;:::i;:::-;30595:139;;30322:419;;;:::o;30747:241::-;30887:34;30883:1;30875:6;30871:14;30864:58;30956:24;30951:2;30943:6;30939:15;30932:49;30747:241;:::o;30994:366::-;31136:3;31157:67;31221:2;31216:3;31157:67;:::i;:::-;31150:74;;31233:93;31322:3;31233:93;:::i;:::-;31351:2;31346:3;31342:12;31335:19;;30994:366;;;:::o;31366:419::-;31532:4;31570:2;31559:9;31555:18;31547:26;;31619:9;31613:4;31609:20;31605:1;31594:9;31590:17;31583:47;31647:131;31773:4;31647:131;:::i;:::-;31639:139;;31366:419;;;:::o;31791:194::-;31831:4;31851:20;31869:1;31851:20;:::i;:::-;31846:25;;31885:20;31903:1;31885:20;:::i;:::-;31880:25;;31929:1;31926;31922:9;31914:17;;31953:1;31947:4;31944:11;31941:37;;;31958:18;;:::i;:::-;31941:37;31791:194;;;;:::o;31991:177::-;32131:29;32127:1;32119:6;32115:14;32108:53;31991:177;:::o;32174:366::-;32316:3;32337:67;32401:2;32396:3;32337:67;:::i;:::-;32330:74;;32413:93;32502:3;32413:93;:::i;:::-;32531:2;32526:3;32522:12;32515:19;;32174:366;;;:::o;32546:419::-;32712:4;32750:2;32739:9;32735:18;32727:26;;32799:9;32793:4;32789:20;32785:1;32774:9;32770:17;32763:47;32827:131;32953:4;32827:131;:::i;:::-;32819:139;;32546:419;;;:::o;32971:442::-;33120:4;33158:2;33147:9;33143:18;33135:26;;33171:71;33239:1;33228:9;33224:17;33215:6;33171:71;:::i;:::-;33252:72;33320:2;33309:9;33305:18;33296:6;33252:72;:::i;:::-;33334;33402:2;33391:9;33387:18;33378:6;33334:72;:::i;:::-;32971:442;;;;;;:::o;33419:220::-;33559:34;33555:1;33547:6;33543:14;33536:58;33628:3;33623:2;33615:6;33611:15;33604:28;33419:220;:::o;33645:366::-;33787:3;33808:67;33872:2;33867:3;33808:67;:::i;:::-;33801:74;;33884:93;33973:3;33884:93;:::i;:::-;34002:2;33997:3;33993:12;33986:19;;33645:366;;;:::o;34017:419::-;34183:4;34221:2;34210:9;34206:18;34198:26;;34270:9;34264:4;34260:20;34256:1;34245:9;34241:17;34234:47;34298:131;34424:4;34298:131;:::i;:::-;34290:139;;34017:419;;;:::o;34442:180::-;34490:77;34487:1;34480:88;34587:4;34584:1;34577:15;34611:4;34608:1;34601:15;34628:180;34676:77;34673:1;34666:88;34773:4;34770:1;34763:15;34797:4;34794:1;34787:15;34814:143;34871:5;34902:6;34896:13;34887:22;;34918:33;34945:5;34918:33;:::i;:::-;34814:143;;;;:::o;34963:351::-;35033:6;35082:2;35070:9;35061:7;35057:23;35053:32;35050:119;;;35088:79;;:::i;:::-;35050:119;35208:1;35233:64;35289:7;35280:6;35269:9;35265:22;35233:64;:::i;:::-;35223:74;;35179:128;34963:351;;;;:::o;35320:114::-;35387:6;35421:5;35415:12;35405:22;;35320:114;;;:::o;35440:184::-;35539:11;35573:6;35568:3;35561:19;35613:4;35608:3;35604:14;35589:29;;35440:184;;;;:::o;35630:132::-;35697:4;35720:3;35712:11;;35750:4;35745:3;35741:14;35733:22;;35630:132;;;:::o;35768:108::-;35845:24;35863:5;35845:24;:::i;:::-;35840:3;35833:37;35768:108;;:::o;35882:179::-;35951:10;35972:46;36014:3;36006:6;35972:46;:::i;:::-;36050:4;36045:3;36041:14;36027:28;;35882:179;;;;:::o;36067:113::-;36137:4;36169;36164:3;36160:14;36152:22;;36067:113;;;:::o;36216:732::-;36335:3;36364:54;36412:5;36364:54;:::i;:::-;36434:86;36513:6;36508:3;36434:86;:::i;:::-;36427:93;;36544:56;36594:5;36544:56;:::i;:::-;36623:7;36654:1;36639:284;36664:6;36661:1;36658:13;36639:284;;;36740:6;36734:13;36767:63;36826:3;36811:13;36767:63;:::i;:::-;36760:70;;36853:60;36906:6;36853:60;:::i;:::-;36843:70;;36699:224;36686:1;36683;36679:9;36674:14;;36639:284;;;36643:14;36939:3;36932:10;;36340:608;;;36216:732;;;;:::o;36954:831::-;37217:4;37255:3;37244:9;37240:19;37232:27;;37269:71;37337:1;37326:9;37322:17;37313:6;37269:71;:::i;:::-;37350:80;37426:2;37415:9;37411:18;37402:6;37350:80;:::i;:::-;37477:9;37471:4;37467:20;37462:2;37451:9;37447:18;37440:48;37505:108;37608:4;37599:6;37505:108;:::i;:::-;37497:116;;37623:72;37691:2;37680:9;37676:18;37667:6;37623:72;:::i;:::-;37705:73;37773:3;37762:9;37758:19;37749:6;37705:73;:::i;:::-;36954:831;;;;;;;;:::o
Swarm Source
ipfs://75610e8c618ede781dd19d139b7f672eceae30a9a23dcda14f09b298a4b07989
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.