ERC-20
Gaming
Overview
Max Total Supply
100,000,000 JEFE
Holders
1,304
Market
Price
$0.0241 @ 0.000007 ETH (-8.85%)
Onchain Market Cap
$2,412,535.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 9 Decimals)
Balance
12,784.377500941 JEFEValue
$308.43 ( ~0.0851250004374379 ETH) [0.0128%]Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
JEFE
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at optimistic.etherscan.io on 2023-10-04 */ /** SPDX-License-Identifier: MIT JEFE TOKEN #JEFE #helping heroes around the world */ pragma solidity ^0.8.4; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface ERC20 { 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); } 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; } } library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Ownable is Context { address private _previousOwner; uint256 private _lockTime; 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 virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: Caller is not owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getTime() public view returns (uint256) { return block.timestamp; } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.5.0; 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to); 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 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 JEFE is Context, ERC20, Ownable { using SafeMath for uint256; using Address for address; address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; //vault address address public _vaultWalletAddress = 0x000000000000000000000000000000000000dEaD; //total supply and token general setup uint8 private _decimals = 9; uint256 public _taxFee = 0; uint256 private _previousTaxFee = _taxFee; uint256 public _vaultFee = 0; uint256 private _previousVaultFee = _vaultFee; uint256 public _liquidityFee = 0; uint256 private _previousLiquidityFee = _liquidityFee; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10000000 * 10**1 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "JEFE TOKEN"; string private _symbol = "JEFE"; //unirouting IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 3000000 * 10**1 * 10**9; uint256 private numTokensSellToAddToLiquidity = 5000000 * 10**1 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } /* adding option for updating pools for future swap v3 */ constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function getVaultAddress() public view returns (address account) { return _vaultWalletAddress; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public 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 totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tVault) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeVault(tVault); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } /* Null setup function setVaultAddress(address vaultAddress) external onlyOwner() { _vaultWalletAddress = vaultAddress; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setVaultFeePercent(uint256 vaultFee) external onlyOwner() { _vaultFee = vaultFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } */ function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tVault) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tVault, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tVault); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tVault = calculateVaultFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tVault); return (tTransferAmount, tFee, tLiquidity, tVault); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tVault, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rVault= tVault.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rVault); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeVault(uint256 tVault) private { uint256 currentRate = _getRate(); uint256 rVault = tVault.mul(currentRate); _rOwned[_vaultWalletAddress] = _rOwned[_vaultWalletAddress].add(rVault); if(_isExcluded[_vaultWalletAddress]) _tOwned[_vaultWalletAddress] = _tOwned[_vaultWalletAddress].add(tVault); } function calculateVaultFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_vaultFee).div( 10**2 ); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousVaultFee = _vaultFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _vaultFee = 0; _liquidityFee = 0; } function _approve(address owner, address spender, uint256 amount) private { 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 _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, vault, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } 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 owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tVault) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeVault(tVault); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tVault) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeVault(tVault); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tVault) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeVault(tVault); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _vaultFee = _previousVaultFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } }
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":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_vaultFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_vaultWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAddress","outputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e060405261dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525061dead600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060098060146101000a81548160ff021916908360ff1602179055506000600a55600a54600b556000600c55600c54600d556000600e55600e54600f5567016345785d8a0000601055601054600019620000d9919062000866565b600019620000e89190620007b7565b6011556040518060400160405280600a81526020017f4a45464520544f4b454e00000000000000000000000000000000000000000000815250601390805190602001906200013892919062000658565b506040518060400160405280600481526020017f4a45464500000000000000000000000000000000000000000000000000000000815250601490805190602001906200018692919062000658565b506001601560016101000a81548160ff021916908315150217905550666a94d74f43000060165566b1a2bc2ec50000601755348015620001c557600080fd5b506000620001d86200062660201b60201c565b905080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350601154600360006200028e6200062660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032c57600080fd5b505afa15801562000341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036791906200071f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ca57600080fd5b505afa158015620003df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040591906200071f565b6040518363ffffffff1660e01b8152600401620004249291906200076d565b602060405180830381600087803b1580156200043f57600080fd5b505af115801562000454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047a91906200071f565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620004fd6200062e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005b66200062660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6010546040516200061791906200079a565b60405180910390a35062000945565b600033905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006669062000830565b90600052602060002090601f0160209004810192826200068a5760008555620006d6565b82601f10620006a557805160ff1916838001178555620006d6565b82800160010185558215620006d6579182015b82811115620006d5578251825591602001919060010190620006b8565b5b509050620006e59190620006e9565b5090565b5b8082111562000704576000816000905550600101620006ea565b5090565b60008151905062000719816200092b565b92915050565b6000602082840312156200073257600080fd5b6000620007428482850162000708565b91505092915050565b6200075681620007f2565b82525050565b620007678162000826565b82525050565b60006040820190506200078460008301856200074b565b6200079360208301846200074b565b9392505050565b6000602082019050620007b160008301846200075c565b92915050565b6000620007c48262000826565b9150620007d18362000826565b925082821015620007e757620007e66200089e565b5b828203905092915050565b6000620007ff8262000806565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200084957607f821691505b6020821081141562000860576200085f620008fc565b5b50919050565b6000620008738262000826565b9150620008808362000826565b925082620008935762000892620008cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200093681620007f2565b81146200094257600080fd5b50565b60805160601c60a05160601c60c05160601c6149d2620009a860003960008181610e230152611abb0152600081816108db01528181612797015281816128ad015281816128d4015281816129700152612997015260006109e201526149d26000f3fe6080604052600436106101f25760003560e01c80634a74bb021161010d5780638da5cb5b116100a0578063c49b9a801161006f578063c49b9a801461073c578063dd62ed3e14610765578063ea2f0b37146107a2578063ee8b3525146107cb578063f2fde38b146107f6576101f9565b80638da5cb5b1461066c57806395d89b4114610697578063a457c2d7146106c2578063a9059cbb146106ff576101f9565b80636bc87c3a116100dc5780636bc87c3a146105c257806370a08231146105ed578063715018a61461062a5780637d1db4a514610641576101f9565b80634a74bb02146105045780635342acb41461052f578063557ed1ba1461056c57806365cacaa414610597576101f9565b8063313ce56711610185578063437823ec11610154578063437823ec146104485780634549b0391461047157806346c3a2fd146104ae57806349bd5a5e146104d9576101f9565b8063313ce5671461038c57806339509351146103b75780633b124fe7146103f45780633bd5d1731461041f576101f9565b806318160ddd116101c157806318160ddd146102bc57806323b872dd146102e757806327c8f835146103245780632d8381191461034f576101f9565b806306fdde03146101fe578063095ea7b31461022957806313114a9d146102665780631694505e14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b5061021361081f565b6040516102209190613faf565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613b05565b6108b1565b60405161025d9190613f79565b60405180910390f35b34801561027257600080fd5b5061027b6108cf565b6040516102889190614171565b60405180910390f35b34801561029d57600080fd5b506102a66108d9565b6040516102b39190613f94565b60405180910390f35b3480156102c857600080fd5b506102d16108fd565b6040516102de9190614171565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613ab6565b610907565b60405161031b9190613f79565b60405180910390f35b34801561033057600080fd5b506103396109e0565b6040516103469190613efd565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613b6a565b610a04565b6040516103839190614171565b60405180910390f35b34801561039857600080fd5b506103a1610a72565b6040516103ae919061421d565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613b05565b610a89565b6040516103eb9190613f79565b60405180910390f35b34801561040057600080fd5b50610409610b3c565b6040516104169190614171565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190613b6a565b610b42565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613a28565b610cbe565b005b34801561047d57600080fd5b5061049860048036038101906104939190613b93565b610d95565b6040516104a59190614171565b60405180910390f35b3480156104ba57600080fd5b506104c3610e1b565b6040516104d09190614171565b60405180910390f35b3480156104e557600080fd5b506104ee610e21565b6040516104fb9190613efd565b60405180910390f35b34801561051057600080fd5b50610519610e45565b6040516105269190613f79565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613a28565b610e58565b6040516105639190613f79565b60405180910390f35b34801561057857600080fd5b50610581610eae565b60405161058e9190614171565b60405180910390f35b3480156105a357600080fd5b506105ac610eb6565b6040516105b99190613efd565b60405180910390f35b3480156105ce57600080fd5b506105d7610ee0565b6040516105e49190614171565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190613a28565b610ee6565b6040516106219190614171565b60405180910390f35b34801561063657600080fd5b5061063f610fd1565b005b34801561064d57600080fd5b5061065661110e565b6040516106639190614171565b60405180910390f35b34801561067857600080fd5b50610681611114565b60405161068e9190613efd565b60405180910390f35b3480156106a357600080fd5b506106ac61113e565b6040516106b99190613faf565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190613b05565b6111d0565b6040516106f69190613f79565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613b05565b61129d565b6040516107339190613f79565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190613b41565b6112bb565b005b34801561077157600080fd5b5061078c60048036038101906107879190613a7a565b61138b565b6040516107999190614171565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190613a28565b611412565b005b3480156107d757600080fd5b506107e06114e9565b6040516107ed9190613efd565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190613a28565b61150f565b005b60606013805461082e90614460565b80601f016020809104026020016040519081016040528092919081815260200182805461085a90614460565b80156108a75780601f1061087c576101008083540402835291602001916108a7565b820191906000526020600020905b81548152906001019060200180831161088a57829003601f168201915b5050505050905090565b60006108c56108be6116bb565b84846116c3565b6001905092915050565b6000601254905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601054905090565b600061091484848461188e565b6109d5846109206116bb565b6109d08560405180606001604052806028815260200161495060289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109866116bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bfb9092919063ffffffff16565b6116c3565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601154821115610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613ff1565b60405180910390fd5b6000610a55611c5f565b9050610a6a8184611c8a90919063ffffffff16565b915050919050565b6000600960149054906101000a900460ff16905090565b6000610b32610a966116bb565b84610b2d8560056000610aa76116bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b6116c3565b6001905092915050565b600a5481565b6000610b4c6116bb565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290614151565b60405180910390fd5b6000610be683611d32565b5050505050509050610c4081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c9881601154611d9a90919063ffffffff16565b601181905550610cb383601254611cd490919063ffffffff16565b601281905550505050565b610cc66116bb565b73ffffffffffffffffffffffffffffffffffffffff16610ce4611114565b73ffffffffffffffffffffffffffffffffffffffff1614610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190614071565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601054831115610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390614091565b60405180910390fd5b81610dfd576000610dec84611d32565b505050505050905080915050610e15565b6000610e0884611d32565b5050505050915050809150505b92915050565b600c5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b601560019054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8157600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610fcc565b610fc9600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a04565b90505b919050565b610fd96116bb565b73ffffffffffffffffffffffffffffffffffffffff16610ff7611114565b73ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490614071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606014805461114d90614460565b80601f016020809104026020016040519081016040528092919081815260200182805461117990614460565b80156111c65780601f1061119b576101008083540402835291602001916111c6565b820191906000526020600020905b8154815290600101906020018083116111a957829003601f168201915b5050505050905090565b60006112936111dd6116bb565b8461128e8560405180606001604052806025815260200161497860259139600560006112076116bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bfb9092919063ffffffff16565b6116c3565b6001905092915050565b60006112b16112aa6116bb565b848461188e565b6001905092915050565b6112c36116bb565b73ffffffffffffffffffffffffffffffffffffffff166112e1611114565b73ffffffffffffffffffffffffffffffffffffffff1614611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90614071565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516113809190613f79565b60405180910390a150565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61141a6116bb565b73ffffffffffffffffffffffffffffffffffffffff16611438611114565b73ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148590614071565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115176116bb565b73ffffffffffffffffffffffffffffffffffffffff16611535611114565b73ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290614071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290614011565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90614131565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90614031565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118819190614171565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590614111565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196590613fd1565b60405180910390fd5b600081116119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a8906140f1565b60405180910390fd5b6119b9611114565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a2757506119f7611114565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a7257601654811115611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a68906140b1565b60405180910390fd5b5b6000611a7d30610ee6565b90506016548110611a8e5760165490505b60006017548210159050808015611ab25750601560009054906101000a900460ff16155b8015611b0a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611b225750601560019054906101000a900460ff165b15611b36576017549150611b3582611de4565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611bdd5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611be757600090505b611bf386868684611eba565b505050505050565b6000838311158290611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a9190613faf565b60405180910390fd5b5060008385611c52919061436e565b9050809150509392505050565b6000806000611c6c6121cb565b91509150611c838183611c8a90919063ffffffff16565b9250505090565b6000611ccc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612516565b905092915050565b6000808284611ce3919061428d565b905083811015611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f90614051565b60405180910390fd5b8091505092915050565b6000806000806000806000806000806000611d4c8c612579565b93509350935093506000806000611d6d8f878787611d68611c5f565b6125f8565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000611ddc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bfb565b905092915050565b6001601560006101000a81548160ff0219169083151502179055506000611e15600283611c8a90919063ffffffff16565b90506000611e2c8284611d9a90919063ffffffff16565b90506000479050611e3c836126ac565b6000611e518247611d9a90919063ffffffff16565b9050611e5d838261296a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611e90939291906141e6565b60405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b80611ec857611ec7612a5a565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611f6b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f8057611f7b848484612aae565b6121b7565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120235750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561203857612033848484612d1c565b6121b6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120dc5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120f1576120ec848484612f8a565b6121b5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121935750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121a8576121a3848484613163565b6121b4565b6121b3848484612f8a565b5b5b5b5b806121c5576121c4613466565b5b50505050565b600080600060115490506000601054905060005b6008805490508110156124d95782600360006008848154811061222b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061233f57508160046000600884815481106122d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156123565760115460105494509450505050612512565b61240c6003600060088481548110612397577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611d9a90919063ffffffff16565b92506124c4600460006008848154811061244f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611d9a90919063ffffffff16565b915080806124d190614492565b9150506121df565b506124f1601054601154611c8a90919063ffffffff16565b82101561250957601154601054935093505050612512565b81819350935050505b9091565b6000808311829061255d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125549190613faf565b60405180910390fd5b506000838561256c91906142e3565b9050809150509392505050565b600080600080600061258a86613483565b90506000612597876134b4565b905060006125a4886134e5565b905060006125df826125d1856125c3888e611d9a90919063ffffffff16565b611d9a90919063ffffffff16565b611d9a90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612611858a61351690919063ffffffff16565b90506000612628868a61351690919063ffffffff16565b9050600061263f878a61351690919063ffffffff16565b90506000612656888a61351690919063ffffffff16565b905060006126918261268385612675888a611d9a90919063ffffffff16565b611d9a90919063ffffffff16565b611d9a90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156126ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561271d5781602001602082028036833780820191505090505b509050308160008151811061275b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127fb57600080fd5b505afa15801561280f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128339190613a51565b8160018151811061286d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128d2307f0000000000000000000000000000000000000000000000000000000000000000846116c3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161293495949392919061418c565b600060405180830381600087803b15801561294e57600080fd5b505af1158015612962573d6000803e3d6000fd5b505050505050565b612995307f0000000000000000000000000000000000000000000000000000000000000000846116c3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129df611114565b426040518863ffffffff1660e01b8152600401612a0196959493929190613f18565b6060604051808303818588803b158015612a1a57600080fd5b505af1158015612a2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a539190613bcf565b5050505050565b6000600a54148015612a6e57506000600e54145b15612a7857612aac565b600a54600b81905550600c54600d81905550600e54600f819055506000600a819055506000600c819055506000600e819055505b565b6000806000806000806000612ac288611d32565b9650965096509650965096509650612b2288600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bb787600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c4c86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c9882613591565b612ca181613736565b612cab8584613985565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612d089190614171565b60405180910390a350505050505050505050565b6000806000806000806000612d3088611d32565b9650965096509650965096509650612d9087600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e2584600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eba86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f0682613591565b612f0f81613736565b612f198584613985565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612f769190614171565b60405180910390a350505050505050505050565b6000806000806000806000612f9e88611d32565b9650965096509650965096509650612ffe87600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061309386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130df82613591565b6130e881613736565b6130f28584613985565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161314f9190614171565b60405180910390a350505050505050505050565b600080600080600080600061317788611d32565b96509650965096509650965096506131d788600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326c87600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330184600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061339686600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133e282613591565b6133eb81613736565b6133f58584613985565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516134529190614171565b60405180910390a350505050505050505050565b600b54600a81905550600f54600e81905550600d54600c81905550565b60006134ad606461349f600a548561351690919063ffffffff16565b611c8a90919063ffffffff16565b9050919050565b60006134de60646134d0600e548561351690919063ffffffff16565b611c8a90919063ffffffff16565b9050919050565b600061350f6064613501600c548561351690919063ffffffff16565b611c8a90919063ffffffff16565b9050919050565b600080831415613529576000905061358b565b600082846135379190614314565b905082848261354691906142e3565b14613586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357d906140d1565b60405180910390fd5b809150505b92915050565b600061359b611c5f565b905060006135b2828461351690919063ffffffff16565b905061360681600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613731576136ed83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000613740611c5f565b90506000613757828461351690919063ffffffff16565b90506137cd8160036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b60036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139805761391a8360046000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b60046000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61399a82601154611d9a90919063ffffffff16565b6011819055506139b581601254611cd490919063ffffffff16565b6012819055505050565b6000813590506139ce8161490a565b92915050565b6000815190506139e38161490a565b92915050565b6000813590506139f881614921565b92915050565b600081359050613a0d81614938565b92915050565b600081519050613a2281614938565b92915050565b600060208284031215613a3a57600080fd5b6000613a48848285016139bf565b91505092915050565b600060208284031215613a6357600080fd5b6000613a71848285016139d4565b91505092915050565b60008060408385031215613a8d57600080fd5b6000613a9b858286016139bf565b9250506020613aac858286016139bf565b9150509250929050565b600080600060608486031215613acb57600080fd5b6000613ad9868287016139bf565b9350506020613aea868287016139bf565b9250506040613afb868287016139fe565b9150509250925092565b60008060408385031215613b1857600080fd5b6000613b26858286016139bf565b9250506020613b37858286016139fe565b9150509250929050565b600060208284031215613b5357600080fd5b6000613b61848285016139e9565b91505092915050565b600060208284031215613b7c57600080fd5b6000613b8a848285016139fe565b91505092915050565b60008060408385031215613ba657600080fd5b6000613bb4858286016139fe565b9250506020613bc5858286016139e9565b9150509250929050565b600080600060608486031215613be457600080fd5b6000613bf286828701613a13565b9350506020613c0386828701613a13565b9250506040613c1486828701613a13565b9150509250925092565b6000613c2a8383613c36565b60208301905092915050565b613c3f816143a2565b82525050565b613c4e816143a2565b82525050565b6000613c5f82614248565b613c69818561426b565b9350613c7483614238565b8060005b83811015613ca5578151613c8c8882613c1e565b9750613c978361425e565b925050600181019050613c78565b5085935050505092915050565b613cbb816143b4565b82525050565b613cca816143f7565b82525050565b613cd98161441b565b82525050565b6000613cea82614253565b613cf4818561427c565b9350613d0481856020860161442d565b613d0d81614568565b840191505092915050565b6000613d2560238361427c565b9150613d3082614579565b604082019050919050565b6000613d48602a8361427c565b9150613d53826145c8565b604082019050919050565b6000613d6b60268361427c565b9150613d7682614617565b604082019050919050565b6000613d8e60228361427c565b9150613d9982614666565b604082019050919050565b6000613db1601b8361427c565b9150613dbc826146b5565b602082019050919050565b6000613dd4601c8361427c565b9150613ddf826146de565b602082019050919050565b6000613df7601f8361427c565b9150613e0282614707565b602082019050919050565b6000613e1a60288361427c565b9150613e2582614730565b604082019050919050565b6000613e3d60218361427c565b9150613e488261477f565b604082019050919050565b6000613e6060298361427c565b9150613e6b826147ce565b604082019050919050565b6000613e8360258361427c565b9150613e8e8261481d565b604082019050919050565b6000613ea660248361427c565b9150613eb18261486c565b604082019050919050565b6000613ec9602c8361427c565b9150613ed4826148bb565b604082019050919050565b613ee8816143e0565b82525050565b613ef7816143ea565b82525050565b6000602082019050613f126000830184613c45565b92915050565b600060c082019050613f2d6000830189613c45565b613f3a6020830188613edf565b613f476040830187613cd0565b613f546060830186613cd0565b613f616080830185613c45565b613f6e60a0830184613edf565b979650505050505050565b6000602082019050613f8e6000830184613cb2565b92915050565b6000602082019050613fa96000830184613cc1565b92915050565b60006020820190508181036000830152613fc98184613cdf565b905092915050565b60006020820190508181036000830152613fea81613d18565b9050919050565b6000602082019050818103600083015261400a81613d3b565b9050919050565b6000602082019050818103600083015261402a81613d5e565b9050919050565b6000602082019050818103600083015261404a81613d81565b9050919050565b6000602082019050818103600083015261406a81613da4565b9050919050565b6000602082019050818103600083015261408a81613dc7565b9050919050565b600060208201905081810360008301526140aa81613dea565b9050919050565b600060208201905081810360008301526140ca81613e0d565b9050919050565b600060208201905081810360008301526140ea81613e30565b9050919050565b6000602082019050818103600083015261410a81613e53565b9050919050565b6000602082019050818103600083015261412a81613e76565b9050919050565b6000602082019050818103600083015261414a81613e99565b9050919050565b6000602082019050818103600083015261416a81613ebc565b9050919050565b60006020820190506141866000830184613edf565b92915050565b600060a0820190506141a16000830188613edf565b6141ae6020830187613cd0565b81810360408301526141c08186613c54565b90506141cf6060830185613c45565b6141dc6080830184613edf565b9695505050505050565b60006060820190506141fb6000830186613edf565b6142086020830185613edf565b6142156040830184613edf565b949350505050565b60006020820190506142326000830184613eee565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614298826143e0565b91506142a3836143e0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142d8576142d76144db565b5b828201905092915050565b60006142ee826143e0565b91506142f9836143e0565b9250826143095761430861450a565b5b828204905092915050565b600061431f826143e0565b915061432a836143e0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614363576143626144db565b5b828202905092915050565b6000614379826143e0565b9150614384836143e0565b925082821015614397576143966144db565b5b828203905092915050565b60006143ad826143c0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061440282614409565b9050919050565b6000614414826143c0565b9050919050565b6000614426826143e0565b9050919050565b60005b8381101561444b578082015181840152602081019050614430565b8381111561445a576000848401525b50505050565b6000600282049050600182168061447857607f821691505b6020821081141561448c5761448b614539565b5b50919050565b600061449d826143e0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144d0576144cf6144db565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4f776e61626c653a2043616c6c6572206973206e6f74206f776e657200000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b614913816143a2565b811461491e57600080fd5b50565b61492a816143b4565b811461493557600080fd5b50565b614941816143e0565b811461494c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c4931f22663bb31baa30b61be8acf2e343bc6a49f5acee969a66f6384966a9db64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c80634a74bb021161010d5780638da5cb5b116100a0578063c49b9a801161006f578063c49b9a801461073c578063dd62ed3e14610765578063ea2f0b37146107a2578063ee8b3525146107cb578063f2fde38b146107f6576101f9565b80638da5cb5b1461066c57806395d89b4114610697578063a457c2d7146106c2578063a9059cbb146106ff576101f9565b80636bc87c3a116100dc5780636bc87c3a146105c257806370a08231146105ed578063715018a61461062a5780637d1db4a514610641576101f9565b80634a74bb02146105045780635342acb41461052f578063557ed1ba1461056c57806365cacaa414610597576101f9565b8063313ce56711610185578063437823ec11610154578063437823ec146104485780634549b0391461047157806346c3a2fd146104ae57806349bd5a5e146104d9576101f9565b8063313ce5671461038c57806339509351146103b75780633b124fe7146103f45780633bd5d1731461041f576101f9565b806318160ddd116101c157806318160ddd146102bc57806323b872dd146102e757806327c8f835146103245780632d8381191461034f576101f9565b806306fdde03146101fe578063095ea7b31461022957806313114a9d146102665780631694505e14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b5061021361081f565b6040516102209190613faf565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613b05565b6108b1565b60405161025d9190613f79565b60405180910390f35b34801561027257600080fd5b5061027b6108cf565b6040516102889190614171565b60405180910390f35b34801561029d57600080fd5b506102a66108d9565b6040516102b39190613f94565b60405180910390f35b3480156102c857600080fd5b506102d16108fd565b6040516102de9190614171565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613ab6565b610907565b60405161031b9190613f79565b60405180910390f35b34801561033057600080fd5b506103396109e0565b6040516103469190613efd565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613b6a565b610a04565b6040516103839190614171565b60405180910390f35b34801561039857600080fd5b506103a1610a72565b6040516103ae919061421d565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613b05565b610a89565b6040516103eb9190613f79565b60405180910390f35b34801561040057600080fd5b50610409610b3c565b6040516104169190614171565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190613b6a565b610b42565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613a28565b610cbe565b005b34801561047d57600080fd5b5061049860048036038101906104939190613b93565b610d95565b6040516104a59190614171565b60405180910390f35b3480156104ba57600080fd5b506104c3610e1b565b6040516104d09190614171565b60405180910390f35b3480156104e557600080fd5b506104ee610e21565b6040516104fb9190613efd565b60405180910390f35b34801561051057600080fd5b50610519610e45565b6040516105269190613f79565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613a28565b610e58565b6040516105639190613f79565b60405180910390f35b34801561057857600080fd5b50610581610eae565b60405161058e9190614171565b60405180910390f35b3480156105a357600080fd5b506105ac610eb6565b6040516105b99190613efd565b60405180910390f35b3480156105ce57600080fd5b506105d7610ee0565b6040516105e49190614171565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190613a28565b610ee6565b6040516106219190614171565b60405180910390f35b34801561063657600080fd5b5061063f610fd1565b005b34801561064d57600080fd5b5061065661110e565b6040516106639190614171565b60405180910390f35b34801561067857600080fd5b50610681611114565b60405161068e9190613efd565b60405180910390f35b3480156106a357600080fd5b506106ac61113e565b6040516106b99190613faf565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190613b05565b6111d0565b6040516106f69190613f79565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613b05565b61129d565b6040516107339190613f79565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190613b41565b6112bb565b005b34801561077157600080fd5b5061078c60048036038101906107879190613a7a565b61138b565b6040516107999190614171565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190613a28565b611412565b005b3480156107d757600080fd5b506107e06114e9565b6040516107ed9190613efd565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190613a28565b61150f565b005b60606013805461082e90614460565b80601f016020809104026020016040519081016040528092919081815260200182805461085a90614460565b80156108a75780601f1061087c576101008083540402835291602001916108a7565b820191906000526020600020905b81548152906001019060200180831161088a57829003601f168201915b5050505050905090565b60006108c56108be6116bb565b84846116c3565b6001905092915050565b6000601254905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000601054905090565b600061091484848461188e565b6109d5846109206116bb565b6109d08560405180606001604052806028815260200161495060289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109866116bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bfb9092919063ffffffff16565b6116c3565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000601154821115610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613ff1565b60405180910390fd5b6000610a55611c5f565b9050610a6a8184611c8a90919063ffffffff16565b915050919050565b6000600960149054906101000a900460ff16905090565b6000610b32610a966116bb565b84610b2d8560056000610aa76116bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b6116c3565b6001905092915050565b600a5481565b6000610b4c6116bb565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290614151565b60405180910390fd5b6000610be683611d32565b5050505050509050610c4081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c9881601154611d9a90919063ffffffff16565b601181905550610cb383601254611cd490919063ffffffff16565b601281905550505050565b610cc66116bb565b73ffffffffffffffffffffffffffffffffffffffff16610ce4611114565b73ffffffffffffffffffffffffffffffffffffffff1614610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190614071565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601054831115610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390614091565b60405180910390fd5b81610dfd576000610dec84611d32565b505050505050905080915050610e15565b6000610e0884611d32565b5050505050915050809150505b92915050565b600c5481565b7f0000000000000000000000003b3a003aaeca552bdad21c9af2d4ba281fb547a681565b601560019054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8157600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610fcc565b610fc9600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a04565b90505b919050565b610fd96116bb565b73ffffffffffffffffffffffffffffffffffffffff16610ff7611114565b73ffffffffffffffffffffffffffffffffffffffff161461104d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104490614071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606014805461114d90614460565b80601f016020809104026020016040519081016040528092919081815260200182805461117990614460565b80156111c65780601f1061119b576101008083540402835291602001916111c6565b820191906000526020600020905b8154815290600101906020018083116111a957829003601f168201915b5050505050905090565b60006112936111dd6116bb565b8461128e8560405180606001604052806025815260200161497860259139600560006112076116bb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bfb9092919063ffffffff16565b6116c3565b6001905092915050565b60006112b16112aa6116bb565b848461188e565b6001905092915050565b6112c36116bb565b73ffffffffffffffffffffffffffffffffffffffff166112e1611114565b73ffffffffffffffffffffffffffffffffffffffff1614611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90614071565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516113809190613f79565b60405180910390a150565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61141a6116bb565b73ffffffffffffffffffffffffffffffffffffffff16611438611114565b73ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148590614071565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115176116bb565b73ffffffffffffffffffffffffffffffffffffffff16611535611114565b73ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290614071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290614011565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90614131565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90614031565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118819190614171565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590614111565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561196e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196590613fd1565b60405180910390fd5b600081116119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a8906140f1565b60405180910390fd5b6119b9611114565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a2757506119f7611114565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611a7257601654811115611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a68906140b1565b60405180910390fd5b5b6000611a7d30610ee6565b90506016548110611a8e5760165490505b60006017548210159050808015611ab25750601560009054906101000a900460ff16155b8015611b0a57507f0000000000000000000000003b3a003aaeca552bdad21c9af2d4ba281fb547a673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611b225750601560019054906101000a900460ff165b15611b36576017549150611b3582611de4565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611bdd5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611be757600090505b611bf386868684611eba565b505050505050565b6000838311158290611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a9190613faf565b60405180910390fd5b5060008385611c52919061436e565b9050809150509392505050565b6000806000611c6c6121cb565b91509150611c838183611c8a90919063ffffffff16565b9250505090565b6000611ccc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612516565b905092915050565b6000808284611ce3919061428d565b905083811015611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f90614051565b60405180910390fd5b8091505092915050565b6000806000806000806000806000806000611d4c8c612579565b93509350935093506000806000611d6d8f878787611d68611c5f565b6125f8565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000611ddc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bfb565b905092915050565b6001601560006101000a81548160ff0219169083151502179055506000611e15600283611c8a90919063ffffffff16565b90506000611e2c8284611d9a90919063ffffffff16565b90506000479050611e3c836126ac565b6000611e518247611d9a90919063ffffffff16565b9050611e5d838261296a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611e90939291906141e6565b60405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b80611ec857611ec7612a5a565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611f6b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f8057611f7b848484612aae565b6121b7565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120235750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561203857612033848484612d1c565b6121b6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120dc5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120f1576120ec848484612f8a565b6121b5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121935750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121a8576121a3848484613163565b6121b4565b6121b3848484612f8a565b5b5b5b5b806121c5576121c4613466565b5b50505050565b600080600060115490506000601054905060005b6008805490508110156124d95782600360006008848154811061222b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061233f57508160046000600884815481106122d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156123565760115460105494509450505050612512565b61240c6003600060088481548110612397577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611d9a90919063ffffffff16565b92506124c4600460006008848154811061244f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611d9a90919063ffffffff16565b915080806124d190614492565b9150506121df565b506124f1601054601154611c8a90919063ffffffff16565b82101561250957601154601054935093505050612512565b81819350935050505b9091565b6000808311829061255d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125549190613faf565b60405180910390fd5b506000838561256c91906142e3565b9050809150509392505050565b600080600080600061258a86613483565b90506000612597876134b4565b905060006125a4886134e5565b905060006125df826125d1856125c3888e611d9a90919063ffffffff16565b611d9a90919063ffffffff16565b611d9a90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612611858a61351690919063ffffffff16565b90506000612628868a61351690919063ffffffff16565b9050600061263f878a61351690919063ffffffff16565b90506000612656888a61351690919063ffffffff16565b905060006126918261268385612675888a611d9a90919063ffffffff16565b611d9a90919063ffffffff16565b611d9a90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156126ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561271d5781602001602082028036833780820191505090505b509050308160008151811061275b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127fb57600080fd5b505afa15801561280f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128339190613a51565b8160018151811061286d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128d2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116c3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161293495949392919061418c565b600060405180830381600087803b15801561294e57600080fd5b505af1158015612962573d6000803e3d6000fd5b505050505050565b612995307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116c3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129df611114565b426040518863ffffffff1660e01b8152600401612a0196959493929190613f18565b6060604051808303818588803b158015612a1a57600080fd5b505af1158015612a2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a539190613bcf565b5050505050565b6000600a54148015612a6e57506000600e54145b15612a7857612aac565b600a54600b81905550600c54600d81905550600e54600f819055506000600a819055506000600c819055506000600e819055505b565b6000806000806000806000612ac288611d32565b9650965096509650965096509650612b2288600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bb787600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c4c86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c9882613591565b612ca181613736565b612cab8584613985565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612d089190614171565b60405180910390a350505050505050505050565b6000806000806000806000612d3088611d32565b9650965096509650965096509650612d9087600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e2584600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eba86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f0682613591565b612f0f81613736565b612f198584613985565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612f769190614171565b60405180910390a350505050505050505050565b6000806000806000806000612f9e88611d32565b9650965096509650965096509650612ffe87600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061309386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130df82613591565b6130e881613736565b6130f28584613985565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161314f9190614171565b60405180910390a350505050505050505050565b600080600080600080600061317788611d32565b96509650965096509650965096506131d788600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326c87600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330184600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061339686600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133e282613591565b6133eb81613736565b6133f58584613985565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516134529190614171565b60405180910390a350505050505050505050565b600b54600a81905550600f54600e81905550600d54600c81905550565b60006134ad606461349f600a548561351690919063ffffffff16565b611c8a90919063ffffffff16565b9050919050565b60006134de60646134d0600e548561351690919063ffffffff16565b611c8a90919063ffffffff16565b9050919050565b600061350f6064613501600c548561351690919063ffffffff16565b611c8a90919063ffffffff16565b9050919050565b600080831415613529576000905061358b565b600082846135379190614314565b905082848261354691906142e3565b14613586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357d906140d1565b60405180910390fd5b809150505b92915050565b600061359b611c5f565b905060006135b2828461351690919063ffffffff16565b905061360681600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613731576136ed83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000613740611c5f565b90506000613757828461351690919063ffffffff16565b90506137cd8160036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b60036000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139805761391a8360046000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cd490919063ffffffff16565b60046000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61399a82601154611d9a90919063ffffffff16565b6011819055506139b581601254611cd490919063ffffffff16565b6012819055505050565b6000813590506139ce8161490a565b92915050565b6000815190506139e38161490a565b92915050565b6000813590506139f881614921565b92915050565b600081359050613a0d81614938565b92915050565b600081519050613a2281614938565b92915050565b600060208284031215613a3a57600080fd5b6000613a48848285016139bf565b91505092915050565b600060208284031215613a6357600080fd5b6000613a71848285016139d4565b91505092915050565b60008060408385031215613a8d57600080fd5b6000613a9b858286016139bf565b9250506020613aac858286016139bf565b9150509250929050565b600080600060608486031215613acb57600080fd5b6000613ad9868287016139bf565b9350506020613aea868287016139bf565b9250506040613afb868287016139fe565b9150509250925092565b60008060408385031215613b1857600080fd5b6000613b26858286016139bf565b9250506020613b37858286016139fe565b9150509250929050565b600060208284031215613b5357600080fd5b6000613b61848285016139e9565b91505092915050565b600060208284031215613b7c57600080fd5b6000613b8a848285016139fe565b91505092915050565b60008060408385031215613ba657600080fd5b6000613bb4858286016139fe565b9250506020613bc5858286016139e9565b9150509250929050565b600080600060608486031215613be457600080fd5b6000613bf286828701613a13565b9350506020613c0386828701613a13565b9250506040613c1486828701613a13565b9150509250925092565b6000613c2a8383613c36565b60208301905092915050565b613c3f816143a2565b82525050565b613c4e816143a2565b82525050565b6000613c5f82614248565b613c69818561426b565b9350613c7483614238565b8060005b83811015613ca5578151613c8c8882613c1e565b9750613c978361425e565b925050600181019050613c78565b5085935050505092915050565b613cbb816143b4565b82525050565b613cca816143f7565b82525050565b613cd98161441b565b82525050565b6000613cea82614253565b613cf4818561427c565b9350613d0481856020860161442d565b613d0d81614568565b840191505092915050565b6000613d2560238361427c565b9150613d3082614579565b604082019050919050565b6000613d48602a8361427c565b9150613d53826145c8565b604082019050919050565b6000613d6b60268361427c565b9150613d7682614617565b604082019050919050565b6000613d8e60228361427c565b9150613d9982614666565b604082019050919050565b6000613db1601b8361427c565b9150613dbc826146b5565b602082019050919050565b6000613dd4601c8361427c565b9150613ddf826146de565b602082019050919050565b6000613df7601f8361427c565b9150613e0282614707565b602082019050919050565b6000613e1a60288361427c565b9150613e2582614730565b604082019050919050565b6000613e3d60218361427c565b9150613e488261477f565b604082019050919050565b6000613e6060298361427c565b9150613e6b826147ce565b604082019050919050565b6000613e8360258361427c565b9150613e8e8261481d565b604082019050919050565b6000613ea660248361427c565b9150613eb18261486c565b604082019050919050565b6000613ec9602c8361427c565b9150613ed4826148bb565b604082019050919050565b613ee8816143e0565b82525050565b613ef7816143ea565b82525050565b6000602082019050613f126000830184613c45565b92915050565b600060c082019050613f2d6000830189613c45565b613f3a6020830188613edf565b613f476040830187613cd0565b613f546060830186613cd0565b613f616080830185613c45565b613f6e60a0830184613edf565b979650505050505050565b6000602082019050613f8e6000830184613cb2565b92915050565b6000602082019050613fa96000830184613cc1565b92915050565b60006020820190508181036000830152613fc98184613cdf565b905092915050565b60006020820190508181036000830152613fea81613d18565b9050919050565b6000602082019050818103600083015261400a81613d3b565b9050919050565b6000602082019050818103600083015261402a81613d5e565b9050919050565b6000602082019050818103600083015261404a81613d81565b9050919050565b6000602082019050818103600083015261406a81613da4565b9050919050565b6000602082019050818103600083015261408a81613dc7565b9050919050565b600060208201905081810360008301526140aa81613dea565b9050919050565b600060208201905081810360008301526140ca81613e0d565b9050919050565b600060208201905081810360008301526140ea81613e30565b9050919050565b6000602082019050818103600083015261410a81613e53565b9050919050565b6000602082019050818103600083015261412a81613e76565b9050919050565b6000602082019050818103600083015261414a81613e99565b9050919050565b6000602082019050818103600083015261416a81613ebc565b9050919050565b60006020820190506141866000830184613edf565b92915050565b600060a0820190506141a16000830188613edf565b6141ae6020830187613cd0565b81810360408301526141c08186613c54565b90506141cf6060830185613c45565b6141dc6080830184613edf565b9695505050505050565b60006060820190506141fb6000830186613edf565b6142086020830185613edf565b6142156040830184613edf565b949350505050565b60006020820190506142326000830184613eee565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614298826143e0565b91506142a3836143e0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142d8576142d76144db565b5b828201905092915050565b60006142ee826143e0565b91506142f9836143e0565b9250826143095761430861450a565b5b828204905092915050565b600061431f826143e0565b915061432a836143e0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614363576143626144db565b5b828202905092915050565b6000614379826143e0565b9150614384836143e0565b925082821015614397576143966144db565b5b828203905092915050565b60006143ad826143c0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061440282614409565b9050919050565b6000614414826143c0565b9050919050565b6000614426826143e0565b9050919050565b60005b8381101561444b578082015181840152602081019050614430565b8381111561445a576000848401525b50505050565b6000600282049050600182168061447857607f821691505b6020821081141561448c5761448b614539565b5b50919050565b600061449d826143e0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144d0576144cf6144db565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4f776e61626c653a2043616c6c6572206973206e6f74206f776e657200000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b614913816143a2565b811461491e57600080fd5b50565b61492a816143b4565b811461493557600080fd5b50565b614941816143e0565b811461494c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c4931f22663bb31baa30b61be8acf2e343bc6a49f5acee969a66f6384966a9db64736f6c63430008040033
Deployed Bytecode Sourcemap
15957:18792:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18711:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19743:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20740:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17240:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19108:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19912:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16070:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21667:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19017:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20233:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16674:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20835:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34507:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21221:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16755:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17298:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17371:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34372:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7833:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18802:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16842:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19211:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7414:148;;;;;;;;;;;;;:::i;:::-;;17418:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7193:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18922;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20459:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19417:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23321:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19592:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34630:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16503:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7575:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18711:83;18748:13;18781:5;18774:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18711:83;:::o;19743:161::-;19818:4;19835:39;19844:12;:10;:12::i;:::-;19858:7;19867:6;19835:8;:39::i;:::-;19892:4;19885:11;;19743:161;;;;:::o;20740:87::-;20782:7;20809:10;;20802:17;;20740:87;:::o;17240:51::-;;;:::o;19108:95::-;19161:7;19188;;19181:14;;19108:95;:::o;19912:313::-;20010:4;20027:36;20037:6;20045:9;20056:6;20027:9;:36::i;:::-;20074:121;20083:6;20091:12;:10;:12::i;:::-;20105:89;20143:6;20105:89;;;;;;;;;;;;;;;;;:11;:19;20117:6;20105:19;;;;;;;;;;;;;;;:33;20125:12;:10;:12::i;:::-;20105:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20074:8;:121::i;:::-;20213:4;20206:11;;19912:313;;;;;:::o;16070:81::-;;;:::o;21667:253::-;21733:7;21772;;21761;:18;;21753:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21837:19;21860:10;:8;:10::i;:::-;21837:33;;21888:24;21900:11;21888:7;:11;;:24;;;;:::i;:::-;21881:31;;;21667:253;;;:::o;19017:83::-;19058:5;19083:9;;;;;;;;;;;19076:16;;19017:83;:::o;20233:218::-;20321:4;20338:83;20347:12;:10;:12::i;:::-;20361:7;20370:50;20409:10;20370:11;:25;20382:12;:10;:12::i;:::-;20370:25;;;;;;;;;;;;;;;:34;20396:7;20370:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20338:8;:83::i;:::-;20439:4;20432:11;;20233:218;;;;:::o;16674:26::-;;;;:::o;20835:378::-;20887:14;20904:12;:10;:12::i;:::-;20887:29;;20936:11;:19;20948:6;20936:19;;;;;;;;;;;;;;;;;;;;;;;;;20935:20;20927:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21016:15;21041:19;21052:7;21041:10;:19::i;:::-;21015:45;;;;;;;;21089:28;21109:7;21089;:15;21097:6;21089:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21071:7;:15;21079:6;21071:15;;;;;;;;;;;;;;;:46;;;;21138:20;21150:7;21138;;:11;;:20;;;;:::i;:::-;21128:7;:30;;;;21182:23;21197:7;21182:10;;:14;;:23;;;;:::i;:::-;21169:10;:36;;;;20835:378;;;:::o;34507:111::-;7341:12;:10;:12::i;:::-;7330:23;;:7;:5;:7::i;:::-;:23;;;7322:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34606:4:::1;34576:18;:27;34595:7;34576:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34507:111:::0;:::o;21221:438::-;21311:7;21350;;21339;:18;;21331:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21409:17;21404:248;;21444:15;21469:19;21480:7;21469:10;:19::i;:::-;21443:45;;;;;;;;21510:7;21503:14;;;;;21404:248;21552:23;21584:19;21595:7;21584:10;:19::i;:::-;21550:53;;;;;;;;21625:15;21618:22;;;21221:438;;;;;:::o;16755:28::-;;;;:::o;17298:38::-;;;:::o;17371:40::-;;;;;;;;;;;;;:::o;34372:123::-;34436:4;34460:18;:27;34479:7;34460:27;;;;;;;;;;;;;;;;;;;;;;;;;34453:34;;34372:123;;;:::o;7833:90::-;7873:7;7900:15;7893:22;;7833:90;:::o;18802:110::-;18850:15;18885:19;;;;;;;;;;;18878:26;;18802:110;:::o;16842:32::-;;;;:::o;19211:198::-;19277:7;19301:11;:20;19313:7;19301:20;;;;;;;;;;;;;;;;;;;;;;;;;19297:49;;;19330:7;:16;19338:7;19330:16;;;;;;;;;;;;;;;;19323:23;;;;19297:49;19364:37;19384:7;:16;19392:7;19384:16;;;;;;;;;;;;;;;;19364:19;:37::i;:::-;19357:44;;19211:198;;;;:::o;7414:148::-;7341:12;:10;:12::i;:::-;7330:23;;:7;:5;:7::i;:::-;:23;;;7322:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7521:1:::1;7484:40;;7505:6;;;;;;;;;;;7484:40;;;;;;;;;;;;7552:1;7535:6;;:19;;;;;;;;;;;;;;;;;;7414:148::o:0;17418:53::-;;;;:::o;7193:87::-;7239:7;7266:6;;;;;;;;;;;7259:13;;7193:87;:::o;18922:::-;18961:13;18994:7;18987:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18922:87;:::o;20459:269::-;20552:4;20569:129;20578:12;:10;:12::i;:::-;20592:7;20601:96;20640:15;20601:96;;;;;;;;;;;;;;;;;:11;:25;20613:12;:10;:12::i;:::-;20601:25;;;;;;;;;;;;;;;:34;20627:7;20601:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20569:8;:129::i;:::-;20716:4;20709:11;;20459:269;;;;:::o;19417:167::-;19495:4;19512:42;19522:12;:10;:12::i;:::-;19536:9;19547:6;19512:9;:42::i;:::-;19572:4;19565:11;;19417:167;;;;:::o;23321:171::-;7341:12;:10;:12::i;:::-;7330:23;;:7;:5;:7::i;:::-;:23;;;7322:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23422:8:::1;23398:21;;:32;;;;;;;;;;;;;;;;;;23446:38;23475:8;23446:38;;;;;;:::i;:::-;;;;;;;;23321:171:::0;:::o;19592:143::-;19673:7;19700:11;:18;19712:5;19700:18;;;;;;;;;;;;;;;:27;19719:7;19700:27;;;;;;;;;;;;;;;;19693:34;;19592:143;;;;:::o;34630:110::-;7341:12;:10;:12::i;:::-;7330:23;;:7;:5;:7::i;:::-;:23;;;7322:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34727:5:::1;34697:18;:27;34716:7;34697:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34630:110:::0;:::o;16503:79::-;;;;;;;;;;;;;:::o;7575:244::-;7341:12;:10;:12::i;:::-;7330:23;;:7;:5;:7::i;:::-;:23;;;7322:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7684:1:::1;7664:22;;:8;:22;;;;7656:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7774:8;7745:38;;7766:6;;;;;;;;;;;7745:38;;;;;;;;;;;;7803:8;7794:6;;:17;;;;;;;;;;;;;;;;;;7575:244:::0;:::o;170:98::-;223:7;250:10;243:17;;170:98;:::o;27483:337::-;27593:1;27576:19;;:5;:19;;;;27568:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27674:1;27655:21;;:7;:21;;;;27647:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27758:6;27728:11;:18;27740:5;27728:18;;;;;;;;;;;;;;;:27;27747:7;27728:27;;;;;;;;;;;;;;;:36;;;;27796:7;27780:32;;27789:5;27780:32;;;27805:6;27780:32;;;;;;:::i;:::-;;;;;;;;27483:337;;;:::o;27828:1524::-;27966:1;27950:18;;:4;:18;;;;27942:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28043:1;28029:16;;:2;:16;;;;28021:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28113:1;28104:6;:10;28096:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28182:7;:5;:7::i;:::-;28174:15;;:4;:15;;;;:32;;;;;28199:7;:5;:7::i;:::-;28193:13;;:2;:13;;;;28174:32;28171:125;;;28239:12;;28229:6;:22;;28221:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28171:125;28309:28;28340:24;28358:4;28340:9;:24::i;:::-;28309:55;;28412:12;;28388:20;:36;28385:112;;28473:12;;28450:35;;28385:112;28517:24;28568:29;;28544:20;:53;;28517:80;;28626:19;:53;;;;;28663:16;;;;;;;;;;;28662:17;28626:53;:91;;;;;28704:13;28696:21;;:4;:21;;;;28626:91;:129;;;;;28734:21;;;;;;;;;;;28626:129;28608:318;;;28805:29;;28782:52;;28878:36;28893:20;28878:14;:36::i;:::-;28608:318;29007:12;29022:4;29007:19;;29134:18;:24;29153:4;29134:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;29162:18;:22;29181:2;29162:22;;;;;;;;;;;;;;;;;;;;;;;;;29134:50;29131:96;;;29210:5;29200:15;;29131:96;29306:38;29321:4;29326:2;29329:6;29336:7;29306:14;:38::i;:::-;27828:1524;;;;;;:::o;1559:192::-;1645:7;1678:1;1673;:6;;1681:12;1665:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1705:9;1721:1;1717;:5;;;;:::i;:::-;1705:17;;1742:1;1735:8;;;1559:192;;;;;:::o;25157:163::-;25198:7;25219:15;25236;25255:19;:17;:19::i;:::-;25218:56;;;;25292:20;25304:7;25292;:11;;:20;;;;:::i;:::-;25285:27;;;;25157:163;:::o;2019:132::-;2077:7;2104:39;2108:1;2111;2104:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2097:46;;2019:132;;;;:::o;1226:181::-;1284:7;1304:9;1320:1;1316;:5;;;;:::i;:::-;1304:17;;1345:1;1340;:6;;1332:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1398:1;1391:8;;;1226:181;;;;:::o;23753:460::-;23812:7;23821;23830;23839;23848;23857;23866;23887:23;23912:12;23926:18;23946:14;23964:20;23976:7;23964:11;:20::i;:::-;23886:98;;;;;;;;23996:15;24013:23;24038:12;24054:58;24066:7;24075:4;24081:10;24093:6;24101:10;:8;:10::i;:::-;24054:11;:58::i;:::-;23995:117;;;;;;24131:7;24140:15;24157:4;24163:15;24180:4;24186:10;24198:6;24123:82;;;;;;;;;;;;;;;;;;;;;23753:460;;;;;;;;;:::o;1415:136::-;1473:7;1500:43;1504:1;1507;1500:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1493:50;;1415:136;;;;:::o;29360:985::-;17869:4;17850:16;;:23;;;;;;;;;;;;;;;;;;29496:12:::1;29511:27;29536:1;29511:20;:24;;:27;;;;:::i;:::-;29496:42;;29549:17;29569:30;29594:4;29569:20;:24;;:30;;;;:::i;:::-;29549:50;;29877:22;29902:21;29877:46;;29968:22;29985:4;29968:16;:22::i;:::-;30121:18;30142:41;30168:14;30142:21;:25;;:41;;;;:::i;:::-;30121:62;;30233:35;30246:9;30257:10;30233:12;:35::i;:::-;30294:43;30309:4;30315:10;30327:9;30294:43;;;;;;;;:::i;:::-;;;;;;;;17884:1;;;;17915:5:::0;17896:16;;:24;;;;;;;;;;;;;;;;;;29360:985;:::o;31544:834::-;31655:7;31651:40;;31677:14;:12;:14::i;:::-;31651:40;31716:11;:19;31728:6;31716:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31740:11;:22;31752:9;31740:22;;;;;;;;;;;;;;;;;;;;;;;;;31739:23;31716:46;31712:597;;;31779:48;31801:6;31809:9;31820:6;31779:21;:48::i;:::-;31712:597;;;31850:11;:19;31862:6;31850:19;;;;;;;;;;;;;;;;;;;;;;;;;31849:20;:46;;;;;31873:11;:22;31885:9;31873:22;;;;;;;;;;;;;;;;;;;;;;;;;31849:46;31845:464;;;31912:46;31932:6;31940:9;31951:6;31912:19;:46::i;:::-;31845:464;;;31981:11;:19;31993:6;31981:19;;;;;;;;;;;;;;;;;;;;;;;;;31980:20;:47;;;;;32005:11;:22;32017:9;32005:22;;;;;;;;;;;;;;;;;;;;;;;;;32004:23;31980:47;31976:333;;;32044:44;32062:6;32070:9;32081:6;32044:17;:44::i;:::-;31976:333;;;32110:11;:19;32122:6;32110:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;32133:11;:22;32145:9;32133:22;;;;;;;;;;;;;;;;;;;;;;;;;32110:45;32106:203;;;32172:48;32194:6;32202:9;32213:6;32172:21;:48::i;:::-;32106:203;;;32253:44;32271:6;32279:9;32290:6;32253:17;:44::i;:::-;32106:203;31976:333;31845:464;31712:597;32333:7;32329:41;;32355:15;:13;:15::i;:::-;32329:41;31544:834;;;;:::o;25328:561::-;25378:7;25387;25407:15;25425:7;;25407:25;;25443:15;25461:7;;25443:25;;25490:9;25485:289;25509:9;:16;;;;25505:1;:20;25485:289;;;25575:7;25551;:21;25559:9;25569:1;25559:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25551:21;;;;;;;;;;;;;;;;:31;:66;;;;25610:7;25586;:21;25594:9;25604:1;25594:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25586:21;;;;;;;;;;;;;;;;:31;25551:66;25547:97;;;25627:7;;25636;;25619:25;;;;;;;;;25547:97;25669:34;25681:7;:21;25689:9;25699:1;25689:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25681:21;;;;;;;;;;;;;;;;25669:7;:11;;:34;;;;:::i;:::-;25659:44;;25728:34;25740:7;:21;25748:9;25758:1;25748:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25740:21;;;;;;;;;;;;;;;;25728:7;:11;;:34;;;;:::i;:::-;25718:44;;25527:3;;;;;:::i;:::-;;;;25485:289;;;;25798:20;25810:7;;25798;;:11;;:20;;;;:::i;:::-;25788:7;:30;25784:61;;;25828:7;;25837;;25820:25;;;;;;;;25784:61;25864:7;25873;25856:25;;;;;;25328:561;;;:::o;2159:278::-;2245:7;2277:1;2273;:5;2280:12;2265:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2304:9;2320:1;2316;:5;;;;:::i;:::-;2304:17;;2428:1;2421:8;;;2159:278;;;;;:::o;24221:413::-;24281:7;24290;24299;24308;24328:12;24343:24;24359:7;24343:15;:24::i;:::-;24328:39;;24378:18;24399:30;24421:7;24399:21;:30::i;:::-;24378:51;;24440:14;24457:26;24475:7;24457:17;:26::i;:::-;24440:43;;24494:23;24520:45;24558:6;24520:33;24542:10;24520:17;24532:4;24520:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:45;;;;:::i;:::-;24494:71;;24584:15;24601:4;24607:10;24619:6;24576:50;;;;;;;;;;;;24221:413;;;;;:::o;24642:507::-;24773:7;24782;24791;24811:15;24829:24;24841:11;24829:7;:11;;:24;;;;:::i;:::-;24811:42;;24864:12;24879:21;24888:11;24879:4;:8;;:21;;;;:::i;:::-;24864:36;;24911:18;24932:27;24947:11;24932:10;:14;;:27;;;;:::i;:::-;24911:48;;24970:14;24986:23;24997:11;24986:6;:10;;:23;;;;:::i;:::-;24970:39;;25020:23;25046:45;25084:6;25046:33;25068:10;25046:17;25058:4;25046:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:45;;;;:::i;:::-;25020:71;;25110:7;25119:15;25136:4;25102:39;;;;;;;;;;;24642:507;;;;;;;;;:::o;30353:589::-;30479:21;30517:1;30503:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30479:40;;30548:4;30530;30535:1;30530:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;30574:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30564:4;30569:1;30564:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;30609:62;30626:4;30641:15;30659:11;30609:8;:62::i;:::-;30710:15;:66;;;30791:11;30817:1;30861:4;30888;30908:15;30710:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30353:589;;:::o;30950:513::-;31098:62;31115:4;31130:15;31148:11;31098:8;:62::i;:::-;31203:15;:31;;;31242:9;31275:4;31295:11;31321:1;31364;31407:7;:5;:7::i;:::-;31429:15;31203:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30950:513;;:::o;27153:314::-;27210:1;27199:7;;:12;:34;;;;;27232:1;27215:13;;:18;27199:34;27196:46;;;27235:7;;27196:46;27280:7;;27262:15;:25;;;;27318:9;;27298:17;:29;;;;27362:13;;27338:21;:37;;;;27406:1;27396:7;:11;;;;27430:1;27418:9;:13;;;;27458:1;27442:13;:17;;;;27153:314;:::o;33580:611::-;33683:15;33700:23;33725:12;33739:23;33764:12;33778:18;33798:14;33816:19;33827:7;33816:10;:19::i;:::-;33682:153;;;;;;;;;;;;;;33864:28;33884:7;33864;:15;33872:6;33864:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33846:7;:15;33854:6;33846:15;;;;;;;;;;;;;;;:46;;;;33921:28;33941:7;33921;:15;33929:6;33921:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33903:7;:15;33911:6;33903:15;;;;;;;;;;;;;;;:46;;;;33981:39;34004:15;33981:7;:18;33989:9;33981:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33960:7;:18;33968:9;33960:18;;;;;;;;;;;;;;;:60;;;;34034:26;34049:10;34034:14;:26::i;:::-;34071:18;34082:6;34071:10;:18::i;:::-;34100:23;34112:4;34118;34100:11;:23::i;:::-;34156:9;34139:44;;34148:6;34139:44;;;34167:15;34139:44;;;;;;:::i;:::-;;;;;;;;33580:611;;;;;;;;;;:::o;32941:631::-;33042:15;33059:23;33084:12;33098:23;33123:12;33137:18;33157:14;33175:19;33186:7;33175:10;:19::i;:::-;33041:153;;;;;;;;;;;;;;33223:28;33243:7;33223;:15;33231:6;33223:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33205:7;:15;33213:6;33205:15;;;;;;;;;;;;;;;:46;;;;33283:39;33306:15;33283:7;:18;33291:9;33283:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33262:7;:18;33270:9;33262:18;;;;;;;;;;;;;;;:60;;;;33354:39;33377:15;33354:7;:18;33362:9;33354:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33333:7;:18;33341:9;33333:18;;;;;;;;;;;;;;;:60;;;;33415:26;33430:10;33415:14;:26::i;:::-;33452:18;33463:6;33452:10;:18::i;:::-;33481:23;33493:4;33499;33481:11;:23::i;:::-;33537:9;33520:44;;33529:6;33520:44;;;33548:15;33520:44;;;;;;:::i;:::-;;;;;;;;32941:631;;;;;;;;;;:::o;32386:547::-;32485:15;32502:23;32527:12;32541:23;32566:12;32580:18;32600:14;32618:19;32629:7;32618:10;:19::i;:::-;32484:153;;;;;;;;;;;;;;32666:28;32686:7;32666;:15;32674:6;32666:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32648:7;:15;32656:6;32648:15;;;;;;;;;;;;;;;:46;;;;32726:39;32749:15;32726:7;:18;32734:9;32726:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32705:7;:18;32713:9;32705:18;;;;;;;;;;;;;;;:60;;;;32776:26;32791:10;32776:14;:26::i;:::-;32813:18;32824:6;32813:10;:18::i;:::-;32842:23;32854:4;32860;32842:11;:23::i;:::-;32898:9;32881:44;;32890:6;32881:44;;;32909:15;32881:44;;;;;;:::i;:::-;;;;;;;;32386:547;;;;;;;;;;:::o;21939:687::-;22042:15;22059:23;22084:12;22098:23;22123:12;22137:18;22157:14;22175:19;22186:7;22175:10;:19::i;:::-;22041:153;;;;;;;;;;;;;;22223:28;22243:7;22223;:15;22231:6;22223:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22205:7;:15;22213:6;22205:15;;;;;;;;;;;;;;;:46;;;;22280:28;22300:7;22280;:15;22288:6;22280:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22262:7;:15;22270:6;22262:15;;;;;;;;;;;;;;;:46;;;;22340:39;22363:15;22340:7;:18;22348:9;22340:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22319:7;:18;22327:9;22319:18;;;;;;;;;;;;;;;:60;;;;22411:39;22434:15;22411:7;:18;22419:9;22411:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;22390:7;:18;22398:9;22390:18;;;;;;;;;;;;;;;:60;;;;22469:26;22484:10;22469:14;:26::i;:::-;22506:18;22517:6;22506:10;:18::i;:::-;22535:23;22547:4;22553;22535:11;:23::i;:::-;22591:9;22574:44;;22583:6;22574:44;;;22602:15;22574:44;;;;;;:::i;:::-;;;;;;;;21939:687;;;;;;;;;;:::o;34199:167::-;34253:15;;34243:7;:25;;;;34295:21;;34279:13;:37;;;;34339:17;;34327:9;:29;;;;34199:167::o;26810:154::-;26874:7;26901:55;26940:5;26901:20;26913:7;;26901;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;26894:62;;26810:154;;;:::o;26975:166::-;27045:7;27072:61;27117:5;27072:26;27084:13;;27072:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;27065:68;;26975:166;;;:::o;26640:158::-;26706:7;26733:57;26774:5;26733:22;26745:9;;26733:7;:11;;:22;;;;:::i;:::-;:26;;:57;;;;:::i;:::-;26726:64;;26640:158;;;:::o;1759:250::-;1817:7;1846:1;1841;:6;1837:47;;;1871:1;1864:8;;;;1837:47;1896:9;1912:1;1908;:5;;;;:::i;:::-;1896:17;;1941:1;1936;1932;:5;;;;:::i;:::-;:10;1924:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2000:1;1993:8;;;1759:250;;;;;:::o;25901:355::-;25964:19;25987:10;:8;:10::i;:::-;25964:33;;26008:18;26029:27;26044:11;26029:10;:14;;:27;;;;:::i;:::-;26008:48;;26092:38;26119:10;26092:7;:22;26108:4;26092:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;26067:7;:22;26083:4;26067:22;;;;;;;;;;;;;;;:63;;;;26144:11;:26;26164:4;26144:26;;;;;;;;;;;;;;;;;;;;;;;;;26141:107;;;26210:38;26237:10;26210:7;:22;26226:4;26210:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;26185:7;:22;26201:4;26185:22;;;;;;;;;;;;;;;:63;;;;26141:107;25901:355;;;:::o;26268:361::-;26323:19;26346:10;:8;:10::i;:::-;26323:33;;26367:14;26384:23;26395:11;26384:6;:10;;:23;;;;:::i;:::-;26367:40;;26449;26482:6;26449:7;:28;26457:19;;;;;;;;;;;26449:28;;;;;;;;;;;;;;;;:32;;:40;;;;:::i;:::-;26418:7;:28;26426:19;;;;;;;;;;;26418:28;;;;;;;;;;;;;;;:71;;;;26503:11;:32;26515:19;;;;;;;;;;;26503:32;;;;;;;;;;;;;;;;;;;;;;;;;26500:121;;;26581:40;26614:6;26581:7;:28;26589:19;;;;;;;;;;;26581:28;;;;;;;;;;;;;;;;:32;;:40;;;;:::i;:::-;26550:7;:28;26558:19;;;;;;;;;;;26550:28;;;;;;;;;;;;;;;:71;;;;26500:121;26268:361;;;:::o;23598:147::-;23676:17;23688:4;23676:7;;:11;;:17;;;;:::i;:::-;23666:7;:27;;;;23717:20;23732:4;23717:10;;:14;;:20;;;;:::i;:::-;23704:10;:33;;;;23598:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;2331:6;2339;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;2732:6;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;2997:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;3701:6;3709;3717;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;4284:10;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;4787:3;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:185::-;5635:64;5693:5;5635:64;:::i;:::-;5630:3;5623:77;5613:93;;:::o;5712:147::-;5807:45;5846:5;5807:45;:::i;:::-;5802:3;5795:58;5785:74;;:::o;5865:364::-;5953:3;5981:39;6014:5;5981:39;:::i;:::-;6036:71;6100:6;6095:3;6036:71;:::i;:::-;6029:78;;6116:52;6161:6;6156:3;6149:4;6142:5;6138:16;6116:52;:::i;:::-;6193:29;6215:6;6193:29;:::i;:::-;6188:3;6184:39;6177:46;;5957:272;;;;;:::o;6235:366::-;6377:3;6398:67;6462:2;6457:3;6398:67;:::i;:::-;6391:74;;6474:93;6563:3;6474:93;:::i;:::-;6592:2;6587:3;6583:12;6576:19;;6381:220;;;:::o;6607:366::-;6749:3;6770:67;6834:2;6829:3;6770:67;:::i;:::-;6763:74;;6846:93;6935:3;6846:93;:::i;:::-;6964:2;6959:3;6955:12;6948:19;;6753:220;;;:::o;6979:366::-;7121:3;7142:67;7206:2;7201:3;7142:67;:::i;:::-;7135:74;;7218:93;7307:3;7218:93;:::i;:::-;7336:2;7331:3;7327:12;7320:19;;7125:220;;;:::o;7351:366::-;7493:3;7514:67;7578:2;7573:3;7514:67;:::i;:::-;7507:74;;7590:93;7679:3;7590:93;:::i;:::-;7708:2;7703:3;7699:12;7692:19;;7497:220;;;:::o;7723:366::-;7865:3;7886:67;7950:2;7945:3;7886:67;:::i;:::-;7879:74;;7962:93;8051:3;7962:93;:::i;:::-;8080:2;8075:3;8071:12;8064:19;;7869:220;;;:::o;8095:366::-;8237:3;8258:67;8322:2;8317:3;8258:67;:::i;:::-;8251:74;;8334:93;8423:3;8334:93;:::i;:::-;8452:2;8447:3;8443:12;8436:19;;8241:220;;;:::o;8467:366::-;8609:3;8630:67;8694:2;8689:3;8630:67;:::i;:::-;8623:74;;8706:93;8795:3;8706:93;:::i;:::-;8824:2;8819:3;8815:12;8808:19;;8613:220;;;:::o;8839:366::-;8981:3;9002:67;9066:2;9061:3;9002:67;:::i;:::-;8995:74;;9078:93;9167:3;9078:93;:::i;:::-;9196:2;9191:3;9187:12;9180:19;;8985:220;;;:::o;9211:366::-;9353:3;9374:67;9438:2;9433:3;9374:67;:::i;:::-;9367:74;;9450:93;9539:3;9450:93;:::i;:::-;9568:2;9563:3;9559:12;9552:19;;9357:220;;;:::o;9583:366::-;9725:3;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:366::-;10097:3;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10194:93;10283:3;10194:93;:::i;:::-;10312:2;10307:3;10303:12;10296:19;;10101:220;;;:::o;10327:366::-;10469:3;10490:67;10554:2;10549:3;10490:67;:::i;:::-;10483:74;;10566:93;10655:3;10566:93;:::i;:::-;10684:2;10679:3;10675:12;10668:19;;10473:220;;;:::o;10699:366::-;10841:3;10862:67;10926:2;10921:3;10862:67;:::i;:::-;10855:74;;10938:93;11027:3;10938:93;:::i;:::-;11056:2;11051:3;11047:12;11040:19;;10845:220;;;:::o;11071:118::-;11158:24;11176:5;11158:24;:::i;:::-;11153:3;11146:37;11136:53;;:::o;11195:112::-;11278:22;11294:5;11278:22;:::i;:::-;11273:3;11266:35;11256:51;;:::o;11313:222::-;11406:4;11444:2;11433:9;11429:18;11421:26;;11457:71;11525:1;11514:9;11510:17;11501:6;11457:71;:::i;:::-;11411:124;;;;:::o;11541:807::-;11790:4;11828:3;11817:9;11813:19;11805:27;;11842:71;11910:1;11899:9;11895:17;11886:6;11842:71;:::i;:::-;11923:72;11991:2;11980:9;11976:18;11967:6;11923:72;:::i;:::-;12005:80;12081:2;12070:9;12066:18;12057:6;12005:80;:::i;:::-;12095;12171:2;12160:9;12156:18;12147:6;12095:80;:::i;:::-;12185:73;12253:3;12242:9;12238:19;12229:6;12185:73;:::i;:::-;12268;12336:3;12325:9;12321:19;12312:6;12268:73;:::i;:::-;11795:553;;;;;;;;;:::o;12354:210::-;12441:4;12479:2;12468:9;12464:18;12456:26;;12492:65;12554:1;12543:9;12539:17;12530:6;12492:65;:::i;:::-;12446:118;;;;:::o;12570:276::-;12690:4;12728:2;12717:9;12713:18;12705:26;;12741:98;12836:1;12825:9;12821:17;12812:6;12741:98;:::i;:::-;12695:151;;;;:::o;12852:313::-;12965:4;13003:2;12992:9;12988:18;12980:26;;13052:9;13046:4;13042:20;13038:1;13027:9;13023:17;13016:47;13080:78;13153:4;13144:6;13080:78;:::i;:::-;13072:86;;12970:195;;;;:::o;13171:419::-;13337:4;13375:2;13364:9;13360:18;13352:26;;13424:9;13418:4;13414:20;13410:1;13399:9;13395:17;13388:47;13452:131;13578:4;13452:131;:::i;:::-;13444:139;;13342:248;;;:::o;13596:419::-;13762:4;13800:2;13789:9;13785:18;13777:26;;13849:9;13843:4;13839:20;13835:1;13824:9;13820:17;13813:47;13877:131;14003:4;13877:131;:::i;:::-;13869:139;;13767:248;;;:::o;14021:419::-;14187:4;14225:2;14214:9;14210:18;14202:26;;14274:9;14268:4;14264:20;14260:1;14249:9;14245:17;14238:47;14302:131;14428:4;14302:131;:::i;:::-;14294:139;;14192:248;;;:::o;14446:419::-;14612:4;14650:2;14639:9;14635:18;14627:26;;14699:9;14693:4;14689:20;14685:1;14674:9;14670:17;14663:47;14727:131;14853:4;14727:131;:::i;:::-;14719:139;;14617:248;;;:::o;14871:419::-;15037:4;15075:2;15064:9;15060:18;15052:26;;15124:9;15118:4;15114:20;15110:1;15099:9;15095:17;15088:47;15152:131;15278:4;15152:131;:::i;:::-;15144:139;;15042:248;;;:::o;15296:419::-;15462:4;15500:2;15489:9;15485:18;15477:26;;15549:9;15543:4;15539:20;15535:1;15524:9;15520:17;15513:47;15577:131;15703:4;15577:131;:::i;:::-;15569:139;;15467:248;;;:::o;15721:419::-;15887:4;15925:2;15914:9;15910:18;15902:26;;15974:9;15968:4;15964:20;15960:1;15949:9;15945:17;15938:47;16002:131;16128:4;16002:131;:::i;:::-;15994:139;;15892:248;;;:::o;16146:419::-;16312:4;16350:2;16339:9;16335:18;16327:26;;16399:9;16393:4;16389:20;16385:1;16374:9;16370:17;16363:47;16427:131;16553:4;16427:131;:::i;:::-;16419:139;;16317:248;;;:::o;16571:419::-;16737:4;16775:2;16764:9;16760:18;16752:26;;16824:9;16818:4;16814:20;16810:1;16799:9;16795:17;16788:47;16852:131;16978:4;16852:131;:::i;:::-;16844:139;;16742:248;;;:::o;16996:419::-;17162:4;17200:2;17189:9;17185:18;17177:26;;17249:9;17243:4;17239:20;17235:1;17224:9;17220:17;17213:47;17277:131;17403:4;17277:131;:::i;:::-;17269:139;;17167:248;;;:::o;17421:419::-;17587:4;17625:2;17614:9;17610:18;17602:26;;17674:9;17668:4;17664:20;17660:1;17649:9;17645:17;17638:47;17702:131;17828:4;17702:131;:::i;:::-;17694:139;;17592:248;;;:::o;17846:419::-;18012:4;18050:2;18039:9;18035:18;18027:26;;18099:9;18093:4;18089:20;18085:1;18074:9;18070:17;18063:47;18127:131;18253:4;18127:131;:::i;:::-;18119:139;;18017:248;;;:::o;18271:419::-;18437:4;18475:2;18464:9;18460:18;18452:26;;18524:9;18518:4;18514:20;18510:1;18499:9;18495:17;18488:47;18552:131;18678:4;18552:131;:::i;:::-;18544:139;;18442:248;;;:::o;18696:222::-;18789:4;18827:2;18816:9;18812:18;18804:26;;18840:71;18908:1;18897:9;18893:17;18884:6;18840:71;:::i;:::-;18794:124;;;;:::o;18924:831::-;19187:4;19225:3;19214:9;19210:19;19202:27;;19239:71;19307:1;19296:9;19292:17;19283:6;19239:71;:::i;:::-;19320:80;19396:2;19385:9;19381:18;19372:6;19320:80;:::i;:::-;19447:9;19441:4;19437:20;19432:2;19421:9;19417:18;19410:48;19475:108;19578:4;19569:6;19475:108;:::i;:::-;19467:116;;19593:72;19661:2;19650:9;19646:18;19637:6;19593:72;:::i;:::-;19675:73;19743:3;19732:9;19728:19;19719:6;19675:73;:::i;:::-;19192:563;;;;;;;;:::o;19761:442::-;19910:4;19948:2;19937:9;19933:18;19925:26;;19961:71;20029:1;20018:9;20014:17;20005:6;19961:71;:::i;:::-;20042:72;20110:2;20099:9;20095:18;20086:6;20042:72;:::i;:::-;20124;20192:2;20181:9;20177:18;20168:6;20124:72;:::i;:::-;19915:288;;;;;;:::o;20209:214::-;20298:4;20336:2;20325:9;20321:18;20313:26;;20349:67;20413:1;20402:9;20398:17;20389:6;20349:67;:::i;:::-;20303:120;;;;:::o;20429:132::-;20496:4;20519:3;20511:11;;20549:4;20544:3;20540:14;20532:22;;20501:60;;;:::o;20567:114::-;20634:6;20668:5;20662:12;20652:22;;20641:40;;;:::o;20687:99::-;20739:6;20773:5;20767:12;20757:22;;20746:40;;;:::o;20792:113::-;20862:4;20894;20889:3;20885:14;20877:22;;20867:38;;;:::o;20911:184::-;21010:11;21044:6;21039:3;21032:19;21084:4;21079:3;21075:14;21060:29;;21022:73;;;;:::o;21101:169::-;21185:11;21219:6;21214:3;21207:19;21259:4;21254:3;21250:14;21235:29;;21197:73;;;;:::o;21276:305::-;21316:3;21335:20;21353:1;21335:20;:::i;:::-;21330:25;;21369:20;21387:1;21369:20;:::i;:::-;21364:25;;21523:1;21455:66;21451:74;21448:1;21445:81;21442:2;;;21529:18;;:::i;:::-;21442:2;21573:1;21570;21566:9;21559:16;;21320:261;;;;:::o;21587:185::-;21627:1;21644:20;21662:1;21644:20;:::i;:::-;21639:25;;21678:20;21696:1;21678:20;:::i;:::-;21673:25;;21717:1;21707:2;;21722:18;;:::i;:::-;21707:2;21764:1;21761;21757:9;21752:14;;21629:143;;;;:::o;21778:348::-;21818:7;21841:20;21859:1;21841:20;:::i;:::-;21836:25;;21875:20;21893:1;21875:20;:::i;:::-;21870:25;;22063:1;21995:66;21991:74;21988:1;21985:81;21980:1;21973:9;21966:17;21962:105;21959:2;;;22070:18;;:::i;:::-;21959:2;22118:1;22115;22111:9;22100:20;;21826:300;;;;:::o;22132:191::-;22172:4;22192:20;22210:1;22192:20;:::i;:::-;22187:25;;22226:20;22244:1;22226:20;:::i;:::-;22221:25;;22265:1;22262;22259:8;22256:2;;;22270:18;;:::i;:::-;22256:2;22315:1;22312;22308:9;22300:17;;22177:146;;;;:::o;22329:96::-;22366:7;22395:24;22413:5;22395:24;:::i;:::-;22384:35;;22374:51;;;:::o;22431:90::-;22465:7;22508:5;22501:13;22494:21;22483:32;;22473:48;;;:::o;22527:126::-;22564:7;22604:42;22597:5;22593:54;22582:65;;22572:81;;;:::o;22659:77::-;22696:7;22725:5;22714:16;;22704:32;;;:::o;22742:86::-;22777:7;22817:4;22810:5;22806:16;22795:27;;22785:43;;;:::o;22834:180::-;22911:9;22944:64;23002:5;22944:64;:::i;:::-;22931:77;;22921:93;;;:::o;23020:140::-;23097:9;23130:24;23148:5;23130:24;:::i;:::-;23117:37;;23107:53;;;:::o;23166:121::-;23224:9;23257:24;23275:5;23257:24;:::i;:::-;23244:37;;23234:53;;;:::o;23293:307::-;23361:1;23371:113;23385:6;23382:1;23379:13;23371:113;;;23470:1;23465:3;23461:11;23455:18;23451:1;23446:3;23442:11;23435:39;23407:2;23404:1;23400:10;23395:15;;23371:113;;;23502:6;23499:1;23496:13;23493:2;;;23582:1;23573:6;23568:3;23564:16;23557:27;23493:2;23342:258;;;;:::o;23606:320::-;23650:6;23687:1;23681:4;23677:12;23667:22;;23734:1;23728:4;23724:12;23755:18;23745:2;;23811:4;23803:6;23799:17;23789:27;;23745:2;23873;23865:6;23862:14;23842:18;23839:38;23836:2;;;23892:18;;:::i;:::-;23836:2;23657:269;;;;:::o;23932:233::-;23971:3;23994:24;24012:5;23994:24;:::i;:::-;23985:33;;24040:66;24033:5;24030:77;24027:2;;;24110:18;;:::i;:::-;24027:2;24157:1;24150:5;24146:13;24139:20;;23975:190;;;:::o;24171:180::-;24219:77;24216:1;24209:88;24316:4;24313:1;24306:15;24340:4;24337:1;24330:15;24357:180;24405:77;24402:1;24395:88;24502:4;24499:1;24492:15;24526:4;24523:1;24516:15;24543:180;24591:77;24588:1;24581:88;24688:4;24685:1;24678:15;24712:4;24709:1;24702:15;24729:102;24770:6;24821:2;24817:7;24812:2;24805:5;24801:14;24797:28;24787:38;;24777:54;;;:::o;24837:222::-;24977:34;24973:1;24965:6;24961:14;24954:58;25046:5;25041:2;25033:6;25029:15;25022:30;24943:116;:::o;25065:229::-;25205:34;25201:1;25193:6;25189:14;25182:58;25274:12;25269:2;25261:6;25257:15;25250:37;25171:123;:::o;25300:225::-;25440:34;25436:1;25428:6;25424:14;25417:58;25509:8;25504:2;25496:6;25492:15;25485:33;25406:119;:::o;25531:221::-;25671:34;25667:1;25659:6;25655:14;25648:58;25740:4;25735:2;25727:6;25723:15;25716:29;25637:115;:::o;25758:177::-;25898:29;25894:1;25886:6;25882:14;25875:53;25864:71;:::o;25941:178::-;26081:30;26077:1;26069:6;26065:14;26058:54;26047:72;:::o;26125:181::-;26265:33;26261:1;26253:6;26249:14;26242:57;26231:75;:::o;26312:227::-;26452:34;26448:1;26440:6;26436:14;26429:58;26521:10;26516:2;26508:6;26504:15;26497:35;26418:121;:::o;26545:220::-;26685:34;26681:1;26673:6;26669:14;26662:58;26754:3;26749:2;26741:6;26737:15;26730:28;26651:114;:::o;26771:228::-;26911:34;26907:1;26899:6;26895:14;26888:58;26980:11;26975:2;26967:6;26963:15;26956:36;26877:122;:::o;27005:224::-;27145:34;27141:1;27133:6;27129:14;27122:58;27214:7;27209:2;27201:6;27197:15;27190:32;27111:118;:::o;27235:223::-;27375:34;27371:1;27363:6;27359:14;27352:58;27444:6;27439:2;27431:6;27427:15;27420:31;27341:117;:::o;27464:231::-;27604:34;27600:1;27592:6;27588:14;27581:58;27673:14;27668:2;27660:6;27656:15;27649:39;27570:125;:::o;27701:122::-;27774:24;27792:5;27774:24;:::i;:::-;27767:5;27764:35;27754:2;;27813:1;27810;27803:12;27754:2;27744:79;:::o;27829:116::-;27899:21;27914:5;27899:21;:::i;:::-;27892:5;27889:32;27879:2;;27935:1;27932;27925:12;27879:2;27869:76;:::o;27951:122::-;28024:24;28042:5;28024:24;:::i;:::-;28017:5;28014:35;28004:2;;28063:1;28060;28053:12;28004:2;27994:79;:::o
Swarm Source
ipfs://c4931f22663bb31baa30b61be8acf2e343bc6a49f5acee969a66f6384966a9db
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.