Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000,000,000 Ø
Holders
40
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
104,423.091927711 ØValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FORSAKEN
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-13 */ // SPDX-License-Identifier: Unlicensed /* In spite of everything, I will find that which is taken. I will not forgive those who have forsaken. I'm going back home. https://twitter.com/ForsakenETH */ pragma solidity ^0.8.14; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (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"); (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"); (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 { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Ownable is Context { address internal _owner; address private _previousOwner; uint256 public _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { 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; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock."); require(block.timestamp > _lockTime , "Contract is locked."); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface 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 FORSAKEN is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; 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; mapping (address => bool) private _isExcludedFromKeyHolders; mapping (address => bool) private isForsaken; address[] public thirteenKeys; address[] public keyHolders; address[] private _excluded; address public _marketingWalletAddress; address public _burnAddress = 0x000000000000000000000000000000000000dEaD; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeTotal; string private _name; string private _symbol; uint256 private _decimals; //Tax Fee Used for Reflections //Liquidity Fee Added to LP //Marketing Fee used for marketing initially, later used for something else // Buy tax uint256 private _buyTaxFee = 0; uint256 private _buyLiquidityFee = 2; uint256 private _buyMarketingFee = 3; // Sell tax uint256 private _sellTaxFee = 0; uint256 private _sellLiquidityFee = 3; uint256 private _sellMarketingFee = 10; uint256 public _taxFee = _buyTaxFee; uint256 public _liquidityFee = _buyLiquidityFee; uint256 public _marketingFee = _buyMarketingFee; uint256 private _previousTaxFee = _taxFee; // used for reflections uint256 private _previousMarketingFee = _liquidityFee; uint256 private _previousLiquidityFee = _marketingFee; bool public tradingActive; uint256 private openedAtBlock; uint256 private openedAtTimestamp = 0; bool public firstEpoch; bool public secondEpoch; bool public thirdEpoch; uint256 public firstEpochInterval = 0; // project starts in the first epoch uint256 public secondEpochInterval = 7200; // trigger the second epoch uint256 public thirdEpochInterval = 14400; // trigger the third epoch bool public thirteenKeysEstablished = false; uint[] tempBalances; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public numTokensSellToAddToLiquidity; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _name = "Forsaken"; _symbol = unicode"Ø"; _decimals = 9; _tTotal = 10000000000 * 10 ** _decimals; _rTotal = (MAX - (MAX % _tTotal)); numTokensSellToAddToLiquidity = 8000000 * 10 ** _decimals; _marketingWalletAddress = 0x564b371aEdB2A07D656b6336205F501bA64bC7cA; _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[_msgSender()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromKeyHolders[_msgSender()] = true; _isExcludedFromKeyHolders[address(this)] = true; _isExcludedFromKeyHolders[_burnAddress] = true; _isExcludedFromKeyHolders[uniswapV2Pair] = true; //exclude from rewards _isExcluded[_burnAddress] = true; _isExcluded[uniswapV2Pair] = true; _owner = _msgSender(); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint256) { 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 isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } 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 excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _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); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setSellFeePercent(uint256 tFee, uint256 lFee, uint256 mFee) external onlyOwner() { _sellTaxFee = tFee; _sellLiquidityFee = lFee; _sellMarketingFee = mFee; } function setBuyFeePercent(uint256 tFee, uint256 lFee, uint256 mFee) external onlyOwner() { _buyTaxFee = tFee; _buyLiquidityFee = lFee; _buyMarketingFee = mFee; } function setMarketingWalletAddress(address _addr) external onlyOwner { _marketingWalletAddress = _addr; } function setNumTokensSellToAddToLiquidity(uint256 amount) external onlyOwner { numTokensSellToAddToLiquidity = amount * 10 **_decimals; } function setRouterAddress(address newRouter) external onlyOwner { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} // to withdraw stucked ETH function withdrawStuckedFunds(uint amount) external onlyOwner{ // This is the current recommended method to use. (bool sent,) = _owner.call{value: amount}(""); require(sent, "Failed to send ETH"); } 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 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tMarketing); return (tTransferAmount, tFee, tLiquidity, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rMarketing); 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 _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[_marketingWalletAddress] = _rOwned[_marketingWalletAddress].add(rMarketing); if(_isExcluded[_marketingWalletAddress]) _tOwned[_marketingWalletAddress] = _tOwned[_marketingWalletAddress].add(tMarketing); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { _previousTaxFee = _taxFee; _previousMarketingFee = _marketingFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _marketingFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _marketingFee = _previousMarketingFee; _liquidityFee = _previousLiquidityFee; } function secondEpochOccurs() public view returns (uint256) { if (openedAtTimestamp != 0) { return openedAtTimestamp + secondEpochInterval; } return 0; } function thirdEpochOccurs() public view returns (uint256) { if (openedAtTimestamp != 0) { return openedAtTimestamp + thirdEpochInterval; } return 0; } function currentTimestamp() public view returns (uint256) { return block.timestamp; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function forsaken(address[] memory wallets_, bool status) public onlyOwner { require(block.number < openedAtBlock + 100, "unable to save your soul"); for (uint256 i = 0; i < wallets_.length; i++) { isForsaken[wallets_[i]] = status; } } 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 iamforsaken() external onlyOwner { tradingActive = true; openedAtBlock = block.number; openedAtTimestamp = block.timestamp; } function keyHolderExist(address wallet) public view returns (bool){ for (uint i; i< keyHolders.length;i++){ if (keyHolders[i]==wallet) return true; } return false; } function excludeFromKeyHolders(address account, bool status) public onlyOwner { _isExcludedFromKeyHolders[account] = status; } function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner { require(wallets.length == amountsInTokens.length, "arrays must be the same length"); require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input. for(uint256 i = 0; i < wallets.length; i++){ address wallet = wallets[i]; uint256 amount = amountsInTokens[i]*1e9; addKeyHolder(wallet); _transfer(msg.sender, wallet, amount); } } function addKeyHolder(address wallet) private { if (!keyHolderExist(wallet)) { keyHolders.push(wallet); } } function sorter() internal { uint length = keyHolders.length; for (uint i = 1; i < length; i++) { uint key = tempBalances[i]; int j = int(i) - 1; while ((int(j) >= 0) && (tempBalances[uint(j)] < key)) { tempBalances[uint(j + 1)] = tempBalances[uint(j)]; j--; } tempBalances[uint(j + 1)] = key; } } function manualEstablishThirteenKeys() internal { require(!thirteenKeysEstablished, "thirteen already established"); for (uint i = 0; i < keyHolders.length; i++) { tempBalances.push(_rOwned[keyHolders[i]]); } sorter(); // loop on the top holders, identifying the top 13 uint z = 0; while (thirteenKeys.length < 13) { for (uint x = 0; x < keyHolders.length; x++) { if (_rOwned[keyHolders[x]] == tempBalances[z] && (!_isExcludedFromKeyHolders[keyHolders[x]])) { thirteenKeys.push(keyHolders[x]); } } z++; } thirteenKeysEstablished = true; } function establishThirteenKeys() internal { require(!thirteenKeysEstablished, "thirteen already established"); for (uint i = 0; i < keyHolders.length; i++) { tempBalances.push(_rOwned[keyHolders[i]]); } sorter(); // loop on the top holders, identifying the top 13 uint z = 0; while (thirteenKeys.length < 13) { for (uint x = 0; x < keyHolders.length; x++) { if (_rOwned[keyHolders[x]] == tempBalances[z] && (!_isExcludedFromKeyHolders[keyHolders[x]])) { thirteenKeys.push(keyHolders[x]); } } z++; } thirteenKeysEstablished = true; } 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"); require(!isForsaken[from] && !isForsaken[to], "your soul is eternally lost"); uint256 contractTokenBalance = balanceOf(address(this)); if (!tradingActive) { require(_isExcludedFromFee[from] || _isExcludedFromFee[to] ,"Trading not Active"); } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; swapAndLiquify(contractTokenBalance); } bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } else { if (from == uniswapV2Pair) { // Buy _taxFee = _buyTaxFee; _liquidityFee = _buyLiquidityFee; _marketingFee = _buyMarketingFee; addKeyHolder(to); } else if (to == uniswapV2Pair && thirdEpoch){ // Sell during third epoch _taxFee = _sellTaxFee; _liquidityFee = _sellLiquidityFee; _marketingFee = _sellMarketingFee; } else if (to == uniswapV2Pair && secondEpoch){ // Sell during second epoch _taxFee = 8; _liquidityFee = _sellLiquidityFee; // _marketingFee = 2; } else if (to == uniswapV2Pair){ // Sell during first epoch _taxFee = 0; _liquidityFee = _sellLiquidityFee; _marketingFee = 10; } else { // Transfer _taxFee = 0; _liquidityFee = 0; _marketingFee = 0; } } if (tradingActive && (!_isExcludedFromFee[from] || !_isExcludedFromFee[to])) { _checkEpochs(); } _tokenTransfer(from,to,amount,takeFee); } function _checkEpochs() internal { if (block.timestamp > openedAtTimestamp && !firstEpoch) { firstEpoch = true; } if (block.timestamp > openedAtTimestamp + secondEpochInterval && !secondEpoch) { secondEpoch = true; } if (block.timestamp > openedAtTimestamp + thirdEpochInterval && !thirdEpoch) { thirdEpoch = true; establishThirteenKeys(); } } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tFee = _marketingFee.add(_liquidityFee); uint256 marketingTokens = contractTokenBalance.div(tFee).mul(_marketingFee); uint256 liquidityTokens = contractTokenBalance.sub(marketingTokens); tFee = _marketingFee.add(_liquidityFee.div(2)); uint256 half = liquidityTokens.div(2); uint256 otherHalf = liquidityTokens.sub(half); uint256 initialBalance = address(this).balance; uint256 swapTokens = marketingTokens.add(half); swapTokensForEth(swapTokens); uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingFunds = newBalance.div(tFee).mul(_marketingFee); if (!thirteenKeysEstablished) { (bool success, ) = payable(_marketingWalletAddress).call{ value: marketingFunds, gas: 30000}(""); require(success, " _marketingWalletAddress transfer is reverted"); } else { uint256 ethForKeyHolder = marketingFunds.div(thirteenKeys.length); for (uint k = 0; k < thirteenKeys.length; k++) { (bool success, ) = payable(thirteenKeys[k]).call{ value: ethForKeyHolder, gas: 30000}(""); require(success, "keyholder transfer is reverted"); } } uint256 halfFunds = newBalance.div(tFee).mul(_liquidityFee.div(2)); addLiquidity(otherHalf, halfFunds); emit SwapAndLiquify(half, halfFunds, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } 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 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _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 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _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 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
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":"_burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFromKeyHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstEpochInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets_","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"forsaken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"iamforsaken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"keyHolderExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"keyHolders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"secondEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondEpochInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondEpochOccurs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFee","type":"uint256"},{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFee","type":"uint256"},{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setSellFeePercent","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":[],"name":"thirdEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdEpochInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdEpochOccurs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"thirteenKeys","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirteenKeysEstablished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600e80546001600160a01b03191661dead17905560006015819055600260168190556003601781905560188390556019819055600a601a55601b839055601c829055601d819055601e839055601f919091556020556023819055602555611c206026556138406027556028805460ff19169055602b805460ff60a81b1916600160a81b1790553480156200009757600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3604080518082019091526008808252672337b939b0b5b2b760c11b6020909201918252620001089160129162000501565b5060408051808201909152600280825261187360f31b6020909201918252620001349160139162000501565b50600960148190556200014990600a620006bc565b6200015a906402540be400620006d1565b600f8190556200016d90600019620006f3565b6200017b9060001962000716565b6010556014546200018e90600a620006bc565b6200019d90627a1200620006d1565b602c55600d80546001600160a01b03191673564b371aedb2a07d656b6336205f501ba64bc7ca17905560105460036000620001d53390565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000277919062000730565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002eb919062000730565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035f919062000730565b602b80546001600160a01b03199081166001600160a01b0393841617909155602a80549091169183169190911790556001600660006200039c3390565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600890620003ea3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260088452828120805486166001908117909155600e8054841683528483208054881683179055602b80548516845285842080548916841790559054841683526007909552838220805487168217905593549091168152208054909216179055620004823390565b600080546001600160a01b0319166001600160a01b0392909216919091179055620004aa3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051620004f291815260200190565b60405180910390a35062000797565b8280546200050f906200075b565b90600052602060002090601f0160209004810192826200053357600085556200057e565b82601f106200054e57805160ff19168380011785556200057e565b828001600101855582156200057e579182015b828111156200057e57825182559160200191906001019062000561565b506200058c92915062000590565b5090565b5b808211156200058c576000815560010162000591565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005fe578160001904821115620005e257620005e2620005a7565b80851615620005f057918102915b93841c9390800290620005c2565b509250929050565b6000826200061757506001620006b6565b816200062657506000620006b6565b81600181146200063f57600281146200064a576200066a565b6001915050620006b6565b60ff8411156200065e576200065e620005a7565b50506001821b620006b6565b5060208310610133831016604e8410600b84101617156200068f575081810a620006b6565b6200069b8383620005bd565b8060001904821115620006b257620006b2620005a7565b0290505b92915050565b6000620006ca838362000606565b9392505050565b6000816000190483118215151615620006ee57620006ee620005a7565b500290565b6000826200071157634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200072b576200072b620005a7565b500390565b6000602082840312156200074357600080fd5b81516001600160a01b0381168114620006ca57600080fd5b600181811c908216806200077057607f821691505b6020821081036200079157634e487b7160e01b600052602260045260246000fd5b50919050565b613d9980620007a76000396000f3fe6080604052600436106103a65760003560e01c80634a74bb02116101e7578063b77bf4341161010d578063d2b85a14116100a0578063edbcf6221161006f578063edbcf62214610aa0578063ef94d66114610ab5578063f0f165af14610ad5578063f2fde38b14610af557600080fd5b8063d2b85a1414610a04578063dd46706414610a1a578063dd62ed3e14610a3a578063ea2f0b3714610a8057600080fd5b8063c49b9a80116100dc578063c49b9a801461098e578063caea37b7146109ae578063cda3c241146109ce578063d12a7688146109ee57600080fd5b8063b77bf43414610914578063bbc0c74214610934578063bd3900c01461094e578063be19674b1461096e57600080fd5b8063715018a61161018557806395d89b411161015457806395d89b41146108aa578063a457c2d7146108bf578063a69df4b5146108df578063a9059cbb146108f457600080fd5b8063715018a61461082857806379af25a61461083d57806388f82020146108535780638da5cb5b1461088c57600080fd5b80635342acb4116101c15780635342acb4146107a357806355ebcc0a146107dc5780636bc87c3a146107f257806370a082311461080857600080fd5b80634a74bb02146107425780634cb80fd51461076357806352390c021461078357600080fd5b806326cf23ec116102cc5780633bd5d1731161026a57806341cb87fc1161023957806341cb87fc146106c2578063437823ec146106e25780634549b0391461070257806349bd5a5e1461072257600080fd5b80633bd5d173146106535780634144d9e414610673578063416827441461069357806341b084b0146106ad57600080fd5b80633685d419116102a65780633685d419146105e85780633950935114610608578063399b218b146106285780633b124fe71461063d57600080fd5b806326cf23ec1461059d5780632d838119146105b3578063313ce567146105d357600080fd5b8063180d9d43116103445780631e2ff94f116103135780631e2ff94f1461053457806322976e0d146105475780632307b4411461055d57806323b872dd1461057d57600080fd5b8063180d9d43146104c057806318160ddd146104df5780631b7273d4146104f45780631d113a641461051457600080fd5b806313114a9d1161038057806313114a9d1461042f57806314f88abf1461044e578063151cd1c2146104685780631694505e1461048857600080fd5b806306fdde03146103b2578063095ea7b3146103dd5780630d4f90fe1461040d57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b15565b6040516103d4919061359a565b60405180910390f35b3480156103e957600080fd5b506103fd6103f8366004613604565b610ba7565b60405190151581526020016103d4565b34801561041957600080fd5b5061042d610428366004613724565b610bbe565b005b34801561043b57600080fd5b506011545b6040519081526020016103d4565b34801561045a57600080fd5b506028546103fd9060ff1681565b34801561047457600080fd5b5061042d610483366004613772565b610cb9565b34801561049457600080fd5b50602a546104a8906001600160a01b031681565b6040516001600160a01b0390911681526020016103d4565b3480156104cc57600080fd5b506024546103fd90610100900460ff1681565b3480156104eb57600080fd5b50600f54610440565b34801561050057600080fd5b506104a861050f36600461379e565b610cf1565b34801561052057600080fd5b506024546103fd9062010000900460ff1681565b34801561054057600080fd5b5042610440565b34801561055357600080fd5b50610440601d5481565b34801561056957600080fd5b5061042d6105783660046137b7565b610d1b565b34801561058957600080fd5b506103fd610598366004613872565b610e86565b3480156105a957600080fd5b5061044060255481565b3480156105bf57600080fd5b506104406105ce36600461379e565b610eef565b3480156105df57600080fd5b50601454610440565b3480156105f457600080fd5b5061042d6106033660046138b3565b610f73565b34801561061457600080fd5b506103fd610623366004613604565b611129565b34801561063457600080fd5b5061044061115f565b34801561064957600080fd5b50610440601b5481565b34801561065f57600080fd5b5061042d61066e36600461379e565b611186565b34801561067f57600080fd5b50600d546104a8906001600160a01b031681565b34801561069f57600080fd5b506024546103fd9060ff1681565b3480156106b957600080fd5b5061042d611272565b3480156106ce57600080fd5b5061042d6106dd3660046138b3565b6112b3565b3480156106ee57600080fd5b5061042d6106fd3660046138b3565b611458565b34801561070e57600080fd5b5061044061071d3660046138d0565b6114a6565b34801561072e57600080fd5b50602b546104a8906001600160a01b031681565b34801561074e57600080fd5b50602b546103fd90600160a81b900460ff1681565b34801561076f57600080fd5b5061042d61077e3660046138b3565b611535565b34801561078f57600080fd5b5061042d61079e3660046138b3565b611581565b3480156107af57600080fd5b506103fd6107be3660046138b3565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107e857600080fd5b5061044060275481565b3480156107fe57600080fd5b50610440601c5481565b34801561081457600080fd5b506104406108233660046138b3565b6116d4565b34801561083457600080fd5b5061042d611733565b34801561084957600080fd5b5061044060025481565b34801561085f57600080fd5b506103fd61086e3660046138b3565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561089857600080fd5b506000546001600160a01b03166104a8565b3480156108b657600080fd5b506103c7611795565b3480156108cb57600080fd5b506103fd6108da366004613604565b6117a4565b3480156108eb57600080fd5b5061042d6117f3565b34801561090057600080fd5b506103fd61090f366004613604565b6118ef565b34801561092057600080fd5b5061042d61092f3660046138f3565b6118fc565b34801561094057600080fd5b506021546103fd9060ff1681565b34801561095a57600080fd5b50600e546104a8906001600160a01b031681565b34801561097a57600080fd5b5061042d610989366004613772565b611951565b34801561099a57600080fd5b5061042d6109a936600461391f565b611989565b3480156109ba57600080fd5b5061042d6109c936600461379e565b611a0b565b3480156109da57600080fd5b506103fd6109e93660046138b3565b611acd565b3480156109fa57600080fd5b50610440602c5481565b348015610a1057600080fd5b5061044060265481565b348015610a2657600080fd5b5061042d610a3536600461379e565b611b36565b348015610a4657600080fd5b50610440610a5536600461393a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a8c57600080fd5b5061042d610a9b3660046138b3565b611ba5565b348015610aac57600080fd5b50610440611bf0565b348015610ac157600080fd5b506104a8610ad036600461379e565b611c0c565b348015610ae157600080fd5b5061042d610af036600461379e565b611c1c565b348015610b0157600080fd5b5061042d610b103660046138b3565b611c64565b606060128054610b2490613973565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5090613973565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b6000610bb4338484611d3c565b5060015b92915050565b6000546001600160a01b03163314610bf15760405162461bcd60e51b8152600401610be8906139ad565b60405180910390fd5b602254610bff9060646139f8565b4310610c4d5760405162461bcd60e51b815260206004820152601860248201527f756e61626c6520746f207361766520796f757220736f756c00000000000000006044820152606401610be8565b60005b8251811015610cb4578160096000858481518110610c7057610c70613a10565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610cac81613a26565b915050610c50565b505050565b6000546001600160a01b03163314610ce35760405162461bcd60e51b8152600401610be8906139ad565b601892909255601955601a55565b600a8181548110610d0157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610d455760405162461bcd60e51b8152600401610be8906139ad565b8051825114610d965760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610be8565b60c8825110610e065760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610be8565b60005b8251811015610cb4576000838281518110610e2657610e26613a10565b602002602001015190506000838381518110610e4457610e44613a10565b6020026020010151633b9aca00610e5b9190613a3f565b9050610e6682611e60565b610e71338383611ebc565b50508080610e7e90613a26565b915050610e09565b6000610e93848484611ebc565b610ee58433610ee085604051806060016040528060288152602001613cf7602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612318565b611d3c565b5060019392505050565b6000601054821115610f565760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610be8565b6000610f60612344565b9050610f6c8382612367565b9392505050565b6000546001600160a01b03163314610f9d5760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03811660009081526007602052604090205460ff166110055760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610be8565b60005b600c5481101561112557816001600160a01b0316600c828154811061102f5761102f613a10565b6000918252602090912001546001600160a01b03160361111357600c805461105990600190613a5e565b8154811061106957611069613a10565b600091825260209091200154600c80546001600160a01b03909216918390811061109557611095613a10565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600c8054806110ed576110ed613a75565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061111d81613a26565b915050611008565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bb4918590610ee09086612373565b60006023546000146111805760265460235461117b91906139f8565b905090565b50600090565b3360008181526007602052604090205460ff16156111fb5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610be8565b60006112068361237f565b5050506001600160a01b038616600090815260036020526040902054939450611234939250849150506123da565b6001600160a01b03831660009081526003602052604090205560105461125a90826123da565b60105560115461126a9084612373565b601155505050565b6000546001600160a01b0316331461129c5760405162461bcd60e51b8152600401610be8906139ad565b6021805460ff191660011790554360225542602355565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610be8906139ad565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113449190613a8b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190613a8b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114269190613a8b565b602b80546001600160a01b039283166001600160a01b031991821617909155602a805493909216921691909117905550565b6000546001600160a01b031633146114825760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600f548311156114fa5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610be8565b8161151a57600061150a8461237f565b50949650610bb895505050505050565b60006115258461237f565b50939650610bb895505050505050565b6000546001600160a01b0316331461155f5760405162461bcd60e51b8152600401610be8906139ad565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115ab5760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03811660009081526007602052604090205460ff16156116145760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610be8565b6001600160a01b0381166000908152600360205260409020541561166e576001600160a01b03811660009081526003602052604090205461165490610eef565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561171157506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610bb890610eef565b6000546001600160a01b0316331461175d5760405162461bcd60e51b8152600401610be8906139ad565b600080546040516001600160a01b0390911690600080516020613d1f833981519152908390a3600080546001600160a01b0319169055565b606060138054610b2490613973565b6000610bb43384610ee085604051806060016040528060258152602001613d3f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612318565b6001546001600160a01b031633146118595760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610be8565b60025442116118a05760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610be8565b600154600080546040516001600160a01b039384169390911691600080516020613d1f83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610bb4338484611ebc565b6000546001600160a01b031633146119265760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461197b5760405162461bcd60e51b8152600401610be8906139ad565b601592909255601655601755565b6000546001600160a01b031633146119b35760405162461bcd60e51b8152600401610be8906139ad565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611a0090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611a355760405162461bcd60e51b8152600401610be8906139ad565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611a82576040519150601f19603f3d011682016040523d82523d6000602084013e611a87565b606091505b50509050806111255760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610be8565b6000805b600b54811015611b2d57826001600160a01b0316600b8281548110611af857611af8613a10565b6000918252602090912001546001600160a01b031603611b1b5750600192915050565b80611b2581613a26565b915050611ad1565b50600092915050565b6000546001600160a01b03163314611b605760405162461bcd60e51b8152600401610be8906139ad565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815560028290556040518190600080516020613d1f833981519152908290a350565b6000546001600160a01b03163314611bcf5760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03166000908152600660205260409020805460ff19169055565b60006023546000146111805760275460235461117b91906139f8565b600b8181548110610d0157600080fd5b6000546001600160a01b03163314611c465760405162461bcd60e51b8152600401610be8906139ad565b601454611c5490600a613b8c565b611c5e9082613a3f565b602c5550565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b038116611cf35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be8565b600080546040516001600160a01b0380851693921691600080516020613d1f83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d9e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be8565b6001600160a01b038216611dff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611e6981611acd565b611eb957600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0383161790555b50565b6001600160a01b038316611f205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610be8565b6001600160a01b038216611f825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610be8565b60008111611fe45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610be8565b6001600160a01b03831660009081526009602052604090205460ff1615801561202657506001600160a01b03821660009081526009602052604090205460ff16155b6120725760405162461bcd60e51b815260206004820152601b60248201527f796f757220736f756c20697320657465726e616c6c79206c6f737400000000006044820152606401610be8565b600061207d306116d4565b60215490915060ff1661210a576001600160a01b03841660009081526006602052604090205460ff16806120c957506001600160a01b03831660009081526006602052604090205460ff165b61210a5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742041637469766560701b6044820152606401610be8565b602c54811080159081906121285750602b54600160a01b900460ff16155b80156121425750602b546001600160a01b03868116911614155b80156121575750602b54600160a81b900460ff165b1561216a57602c54915061216a826123e6565b6001600160a01b03851660009081526006602052604090205460019060ff16806121ac57506001600160a01b03851660009081526006602052604090205460ff165b156121b9575060006122a9565b602b546001600160a01b03908116908716036121ef57601554601b55601654601c55601754601d556121ea85611e60565b6122a9565b602b546001600160a01b038681169116148015612214575060245462010000900460ff165b1561223057601854601b55601954601c55601a54601d556122a9565b602b546001600160a01b0386811691161480156122545750602454610100900460ff165b1561226e576008601b55601954601c556002601d556122a9565b602b546001600160a01b0390811690861603612299576000601b55601954601c55600a601d556122a9565b6000601b819055601c819055601d555b60215460ff1680156122f757506001600160a01b03861660009081526006602052604090205460ff1615806122f757506001600160a01b03851660009081526006602052604090205460ff16155b1561230457612304612717565b612310868686846127c0565b505050505050565b6000818484111561233c5760405162461bcd60e51b8152600401610be8919061359a565b505050900390565b6000806000612351612960565b90925090506123608282612367565b9250505090565b6000610f6c8284613b98565b6000610f6c82846139f8565b60008060008060008060008060008060006123998c612ae2565b935093509350935060008060006123ba8f8787876123b5612344565b612b37565b919f509d509b509599509397509195509350505050919395979092949650565b6000610f6c8284613a5e565b602b805460ff60a01b1916600160a01b179055601c54601d5460009161240c9190612373565b9050600061242f601d54612429848661236790919063ffffffff16565b90612b99565b9050600061243d84836123da565b90506124616124586002601c5461236790919063ffffffff16565b601d5490612373565b92506000612470826002612367565b9050600061247e83836123da565b905047600061248d8685612373565b905061249881612ba5565b60006124a447846123da565b905060006124c1601d546124298b8561236790919063ffffffff16565b60285490915060ff1661259257600d546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114612520576040519150601f19603f3d011682016040523d82523d6000602084013e612525565b606091505b505090508061258c5760405162461bcd60e51b815260206004820152602d60248201527f205f6d61726b6574696e6757616c6c657441646472657373207472616e73666560448201526c1c881a5cc81c995d995c9d1959609a1b6064820152608401610be8565b5061268b565b600a546000906125a3908390612367565b905060005b600a54811015612688576000600a82815481106125c7576125c7613a10565b60009182526020822001546040516001600160a01b0390911691617530918691818181858888f193505050503d806000811461261f576040519150601f19603f3d011682016040523d82523d6000602084013e612624565b606091505b50509050806126755760405162461bcd60e51b815260206004820152601e60248201527f6b6579686f6c646572207472616e7366657220697320726576657274656400006044820152606401610be8565b508061268081613a26565b9150506125a8565b50505b60006126b06126a66002601c5461236790919063ffffffff16565b612429858d612367565b90506126bc8682612cf7565b60408051888152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602b805460ff60a01b19169055505050505050505050565b6023544211801561272b575060245460ff16155b1561273e576024805460ff191660011790555b60265460235461274e91906139f8565b421180156127645750602454610100900460ff16155b15612779576024805461ff0019166101001790555b60275460235461278991906139f8565b421180156127a0575060245462010000900460ff16155b156127be576024805462ff00001916620100001790556127be612dcc565b565b806127ea576127ea601b8054601e55601d8054601f55601c80546020556000928390559082905555565b6001600160a01b03841660009081526007602052604090205460ff16801561282b57506001600160a01b03831660009081526007602052604090205460ff16155b156128405761283b848484612fe3565b61293e565b6001600160a01b03841660009081526007602052604090205460ff1615801561288157506001600160a01b03831660009081526007602052604090205460ff165b156128915761283b848484613129565b6001600160a01b03841660009081526007602052604090205460ff161580156128d357506001600160a01b03831660009081526007602052604090205460ff16155b156128e35761283b8484846131e8565b6001600160a01b03841660009081526007602052604090205460ff16801561292357506001600160a01b03831660009081526007602052604090205460ff165b156129335761283b848484613242565b61293e8484846131e8565b8061295a5761295a601e54601b55601f54601d55602054601c55565b50505050565b601054600f546000918291825b600c54811015612ab2578260036000600c848154811061298f5761298f613a10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806129fa57508160046000600c84815481106129d3576129d3613a10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a1057601054600f54945094505050509091565b612a5660036000600c8481548110612a2a57612a2a613a10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906123da565b9250612a9e60046000600c8481548110612a7257612a72613a10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906123da565b915080612aaa81613a26565b91505061296d565b50600f54601054612ac291612367565b821015612ad957601054600f549350935050509091565b90939092509050565b6000806000806000612af3866132cb565b90506000612b00876132ed565b90506000612b0d88613309565b90506000612b2782612b2185818d896123da565b906123da565b9993985091965094509092505050565b6000808080612b468986612b99565b90506000612b548987612b99565b90506000612b628988612b99565b90506000612b708989612b99565b90506000612b8482612b21858189896123da565b949d949c50929a509298505050505050505050565b6000610f6c8284613a3f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bda57612bda613a10565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c579190613a8b565b81600181518110612c6a57612c6a613a10565b6001600160a01b039283166020918202929092010152602a54612c909130911684611d3c565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc9908590600090869030904290600401613bba565b600060405180830381600087803b158015612ce357600080fd5b505af1158015612310573d6000803e3d6000fd5b602a54612d0f9030906001600160a01b031684611d3c565b602a546001600160a01b031663f305d719823085600080612d386000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612da0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612dc59190613c2b565b5050505050565b60285460ff1615612e1f5760405162461bcd60e51b815260206004820152601c60248201527f746869727465656e20616c72656164792065737461626c6973686564000000006044820152606401610be8565b60005b600b54811015612e9157602960036000600b8481548110612e4557612e45613a10565b60009182526020808320909101546001600160a01b0316835282810193909352604090910181205483546001810185559382529190209091015580612e8981613a26565b915050612e22565b50612e9a613325565b60005b600a54600d1115612fd35760005b600b54811015612fc05760298281548110612ec857612ec8613a10565b906000526020600020015460036000600b8481548110612eea57612eea613a10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054148015612f58575060086000600b8381548110612f2e57612f2e613a10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16155b15612fae57600a600b8281548110612f7257612f72613a10565b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b80612fb881613a26565b915050612eab565b5080612fcb81613a26565b915050612e9d565b506028805460ff19166001179055565b6000806000806000806000612ff78861237f565b965096509650965096509650965061303d88600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123da90919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461306c90886123da565b6001600160a01b03808c1660009081526003602052604080822093909355908b168152205461309b9087612373565b6001600160a01b038a166000908152600360205260409020556130bd8261342f565b6130c6816134b7565b6130d08584613576565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161311591815260200190565b60405180910390a350505050505050505050565b600080600080600080600061313d8861237f565b965096509650965096509650965061318387600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123da90919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c168152600490915220546131b99085612373565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461309b9087612373565b60008060008060008060006131fc8861237f565b965096509650965096509650965061306c87600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123da90919063ffffffff16565b60008060008060008060006132568861237f565b965096509650965096509650965061329c88600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123da90919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461318390886123da565b6000610bb860646132e7601b5485612b9990919063ffffffff16565b90612367565b6000610bb860646132e7601c5485612b9990919063ffffffff16565b6000610bb860646132e7601d5485612b9990919063ffffffff16565b600b5460015b818110156111255760006029828154811061334857613348613a10565b60009182526020822001549150613360600184613c59565b90505b600081121580156133905750816029828154811061338357613383613a10565b9060005260206000200154105b156133f057602981815481106133a8576133a8613a10565b906000526020600020015460298260016133c29190613c98565b815481106133d2576133d2613a10565b600091825260209091200155806133e881613cd9565b915050613363565b8160296133fe836001613c98565b8154811061340e5761340e613a10565b6000918252602090912001555081905061342781613a26565b91505061332b565b6000613439612344565b905060006134478383612b99565b306000908152600360205260409020549091506134649082612373565b3060009081526003602090815260408083209390935560079052205460ff1615610cb457306000908152600460205260409020546134a29084612373565b30600090815260046020526040902055505050565b60006134c1612344565b905060006134cf8383612b99565b600d546001600160a01b03166000908152600360205260409020549091506134f79082612373565b600d80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615610cb457600d546001600160a01b03166000908152600460205260409020546135569084612373565b600d546001600160a01b0316600090815260046020526040902055505050565b60105461358390836123da565b6010556011546135939082612373565b6011555050565b600060208083528351808285015260005b818110156135c7578581018301518582016040015282016135ab565b818111156135d9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611eb957600080fd5b6000806040838503121561361757600080fd5b8235613622816135ef565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561366f5761366f613630565b604052919050565b600067ffffffffffffffff82111561369157613691613630565b5060051b60200190565b600082601f8301126136ac57600080fd5b813560206136c16136bc83613677565b613646565b82815260059290921b840181019181810190868411156136e057600080fd5b8286015b848110156137045780356136f7816135ef565b83529183019183016136e4565b509695505050505050565b8035801515811461371f57600080fd5b919050565b6000806040838503121561373757600080fd5b823567ffffffffffffffff81111561374e57600080fd5b61375a8582860161369b565b9250506137696020840161370f565b90509250929050565b60008060006060848603121561378757600080fd5b505081359360208301359350604090920135919050565b6000602082840312156137b057600080fd5b5035919050565b600080604083850312156137ca57600080fd5b823567ffffffffffffffff808211156137e257600080fd5b6137ee8683870161369b565b935060209150818501358181111561380557600080fd5b85019050601f8101861361381857600080fd5b80356138266136bc82613677565b81815260059190911b8201830190838101908883111561384557600080fd5b928401925b828410156138635783358252928401929084019061384a565b80955050505050509250929050565b60008060006060848603121561388757600080fd5b8335613892816135ef565b925060208401356138a2816135ef565b929592945050506040919091013590565b6000602082840312156138c557600080fd5b8135610f6c816135ef565b600080604083850312156138e357600080fd5b823591506137696020840161370f565b6000806040838503121561390657600080fd5b8235613911816135ef565b91506137696020840161370f565b60006020828403121561393157600080fd5b610f6c8261370f565b6000806040838503121561394d57600080fd5b8235613958816135ef565b91506020830135613968816135ef565b809150509250929050565b600181811c9082168061398757607f821691505b6020821081036139a757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a0b57613a0b6139e2565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201613a3857613a386139e2565b5060010190565b6000816000190483118215151615613a5957613a596139e2565b500290565b600082821015613a7057613a706139e2565b500390565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613a9d57600080fd5b8151610f6c816135ef565b600181815b80851115613ae3578160001904821115613ac957613ac96139e2565b80851615613ad657918102915b93841c9390800290613aad565b509250929050565b600082613afa57506001610bb8565b81613b0757506000610bb8565b8160018114613b1d5760028114613b2757613b43565b6001915050610bb8565b60ff841115613b3857613b386139e2565b50506001821b610bb8565b5060208310610133831016604e8410600b8410161715613b66575081810a610bb8565b613b708383613aa8565b8060001904821115613b8457613b846139e2565b029392505050565b6000610f6c8383613aeb565b600082613bb557634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c0a5784516001600160a01b031683529383019391830191600101613be5565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613c4057600080fd5b8351925060208401519150604084015190509250925092565b60008083128015600160ff1b850184121615613c7757613c776139e2565b6001600160ff1b0384018313811615613c9257613c926139e2565b50500390565b600080821280156001600160ff1b0384900385131615613cba57613cba6139e2565b600160ff1b8390038412811615613cd357613cd36139e2565b50500190565b6000600160ff1b8201613cee57613cee6139e2565b50600019019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202ab53caeb2a593320953111c18f4e5dcb5502d24b1ce38f6507f140c5b6fb3cc64736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106103a65760003560e01c80634a74bb02116101e7578063b77bf4341161010d578063d2b85a14116100a0578063edbcf6221161006f578063edbcf62214610aa0578063ef94d66114610ab5578063f0f165af14610ad5578063f2fde38b14610af557600080fd5b8063d2b85a1414610a04578063dd46706414610a1a578063dd62ed3e14610a3a578063ea2f0b3714610a8057600080fd5b8063c49b9a80116100dc578063c49b9a801461098e578063caea37b7146109ae578063cda3c241146109ce578063d12a7688146109ee57600080fd5b8063b77bf43414610914578063bbc0c74214610934578063bd3900c01461094e578063be19674b1461096e57600080fd5b8063715018a61161018557806395d89b411161015457806395d89b41146108aa578063a457c2d7146108bf578063a69df4b5146108df578063a9059cbb146108f457600080fd5b8063715018a61461082857806379af25a61461083d57806388f82020146108535780638da5cb5b1461088c57600080fd5b80635342acb4116101c15780635342acb4146107a357806355ebcc0a146107dc5780636bc87c3a146107f257806370a082311461080857600080fd5b80634a74bb02146107425780634cb80fd51461076357806352390c021461078357600080fd5b806326cf23ec116102cc5780633bd5d1731161026a57806341cb87fc1161023957806341cb87fc146106c2578063437823ec146106e25780634549b0391461070257806349bd5a5e1461072257600080fd5b80633bd5d173146106535780634144d9e414610673578063416827441461069357806341b084b0146106ad57600080fd5b80633685d419116102a65780633685d419146105e85780633950935114610608578063399b218b146106285780633b124fe71461063d57600080fd5b806326cf23ec1461059d5780632d838119146105b3578063313ce567146105d357600080fd5b8063180d9d43116103445780631e2ff94f116103135780631e2ff94f1461053457806322976e0d146105475780632307b4411461055d57806323b872dd1461057d57600080fd5b8063180d9d43146104c057806318160ddd146104df5780631b7273d4146104f45780631d113a641461051457600080fd5b806313114a9d1161038057806313114a9d1461042f57806314f88abf1461044e578063151cd1c2146104685780631694505e1461048857600080fd5b806306fdde03146103b2578063095ea7b3146103dd5780630d4f90fe1461040d57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610b15565b6040516103d4919061359a565b60405180910390f35b3480156103e957600080fd5b506103fd6103f8366004613604565b610ba7565b60405190151581526020016103d4565b34801561041957600080fd5b5061042d610428366004613724565b610bbe565b005b34801561043b57600080fd5b506011545b6040519081526020016103d4565b34801561045a57600080fd5b506028546103fd9060ff1681565b34801561047457600080fd5b5061042d610483366004613772565b610cb9565b34801561049457600080fd5b50602a546104a8906001600160a01b031681565b6040516001600160a01b0390911681526020016103d4565b3480156104cc57600080fd5b506024546103fd90610100900460ff1681565b3480156104eb57600080fd5b50600f54610440565b34801561050057600080fd5b506104a861050f36600461379e565b610cf1565b34801561052057600080fd5b506024546103fd9062010000900460ff1681565b34801561054057600080fd5b5042610440565b34801561055357600080fd5b50610440601d5481565b34801561056957600080fd5b5061042d6105783660046137b7565b610d1b565b34801561058957600080fd5b506103fd610598366004613872565b610e86565b3480156105a957600080fd5b5061044060255481565b3480156105bf57600080fd5b506104406105ce36600461379e565b610eef565b3480156105df57600080fd5b50601454610440565b3480156105f457600080fd5b5061042d6106033660046138b3565b610f73565b34801561061457600080fd5b506103fd610623366004613604565b611129565b34801561063457600080fd5b5061044061115f565b34801561064957600080fd5b50610440601b5481565b34801561065f57600080fd5b5061042d61066e36600461379e565b611186565b34801561067f57600080fd5b50600d546104a8906001600160a01b031681565b34801561069f57600080fd5b506024546103fd9060ff1681565b3480156106b957600080fd5b5061042d611272565b3480156106ce57600080fd5b5061042d6106dd3660046138b3565b6112b3565b3480156106ee57600080fd5b5061042d6106fd3660046138b3565b611458565b34801561070e57600080fd5b5061044061071d3660046138d0565b6114a6565b34801561072e57600080fd5b50602b546104a8906001600160a01b031681565b34801561074e57600080fd5b50602b546103fd90600160a81b900460ff1681565b34801561076f57600080fd5b5061042d61077e3660046138b3565b611535565b34801561078f57600080fd5b5061042d61079e3660046138b3565b611581565b3480156107af57600080fd5b506103fd6107be3660046138b3565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107e857600080fd5b5061044060275481565b3480156107fe57600080fd5b50610440601c5481565b34801561081457600080fd5b506104406108233660046138b3565b6116d4565b34801561083457600080fd5b5061042d611733565b34801561084957600080fd5b5061044060025481565b34801561085f57600080fd5b506103fd61086e3660046138b3565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561089857600080fd5b506000546001600160a01b03166104a8565b3480156108b657600080fd5b506103c7611795565b3480156108cb57600080fd5b506103fd6108da366004613604565b6117a4565b3480156108eb57600080fd5b5061042d6117f3565b34801561090057600080fd5b506103fd61090f366004613604565b6118ef565b34801561092057600080fd5b5061042d61092f3660046138f3565b6118fc565b34801561094057600080fd5b506021546103fd9060ff1681565b34801561095a57600080fd5b50600e546104a8906001600160a01b031681565b34801561097a57600080fd5b5061042d610989366004613772565b611951565b34801561099a57600080fd5b5061042d6109a936600461391f565b611989565b3480156109ba57600080fd5b5061042d6109c936600461379e565b611a0b565b3480156109da57600080fd5b506103fd6109e93660046138b3565b611acd565b3480156109fa57600080fd5b50610440602c5481565b348015610a1057600080fd5b5061044060265481565b348015610a2657600080fd5b5061042d610a3536600461379e565b611b36565b348015610a4657600080fd5b50610440610a5536600461393a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a8c57600080fd5b5061042d610a9b3660046138b3565b611ba5565b348015610aac57600080fd5b50610440611bf0565b348015610ac157600080fd5b506104a8610ad036600461379e565b611c0c565b348015610ae157600080fd5b5061042d610af036600461379e565b611c1c565b348015610b0157600080fd5b5061042d610b103660046138b3565b611c64565b606060128054610b2490613973565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5090613973565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b6000610bb4338484611d3c565b5060015b92915050565b6000546001600160a01b03163314610bf15760405162461bcd60e51b8152600401610be8906139ad565b60405180910390fd5b602254610bff9060646139f8565b4310610c4d5760405162461bcd60e51b815260206004820152601860248201527f756e61626c6520746f207361766520796f757220736f756c00000000000000006044820152606401610be8565b60005b8251811015610cb4578160096000858481518110610c7057610c70613a10565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610cac81613a26565b915050610c50565b505050565b6000546001600160a01b03163314610ce35760405162461bcd60e51b8152600401610be8906139ad565b601892909255601955601a55565b600a8181548110610d0157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610d455760405162461bcd60e51b8152600401610be8906139ad565b8051825114610d965760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610be8565b60c8825110610e065760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610be8565b60005b8251811015610cb4576000838281518110610e2657610e26613a10565b602002602001015190506000838381518110610e4457610e44613a10565b6020026020010151633b9aca00610e5b9190613a3f565b9050610e6682611e60565b610e71338383611ebc565b50508080610e7e90613a26565b915050610e09565b6000610e93848484611ebc565b610ee58433610ee085604051806060016040528060288152602001613cf7602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612318565b611d3c565b5060019392505050565b6000601054821115610f565760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610be8565b6000610f60612344565b9050610f6c8382612367565b9392505050565b6000546001600160a01b03163314610f9d5760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03811660009081526007602052604090205460ff166110055760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610be8565b60005b600c5481101561112557816001600160a01b0316600c828154811061102f5761102f613a10565b6000918252602090912001546001600160a01b03160361111357600c805461105990600190613a5e565b8154811061106957611069613a10565b600091825260209091200154600c80546001600160a01b03909216918390811061109557611095613a10565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600c8054806110ed576110ed613a75565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061111d81613a26565b915050611008565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bb4918590610ee09086612373565b60006023546000146111805760265460235461117b91906139f8565b905090565b50600090565b3360008181526007602052604090205460ff16156111fb5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610be8565b60006112068361237f565b5050506001600160a01b038616600090815260036020526040902054939450611234939250849150506123da565b6001600160a01b03831660009081526003602052604090205560105461125a90826123da565b60105560115461126a9084612373565b601155505050565b6000546001600160a01b0316331461129c5760405162461bcd60e51b8152600401610be8906139ad565b6021805460ff191660011790554360225542602355565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610be8906139ad565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113449190613a8b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190613a8b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114269190613a8b565b602b80546001600160a01b039283166001600160a01b031991821617909155602a805493909216921691909117905550565b6000546001600160a01b031633146114825760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600f548311156114fa5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610be8565b8161151a57600061150a8461237f565b50949650610bb895505050505050565b60006115258461237f565b50939650610bb895505050505050565b6000546001600160a01b0316331461155f5760405162461bcd60e51b8152600401610be8906139ad565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115ab5760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03811660009081526007602052604090205460ff16156116145760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610be8565b6001600160a01b0381166000908152600360205260409020541561166e576001600160a01b03811660009081526003602052604090205461165490610eef565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561171157506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610bb890610eef565b6000546001600160a01b0316331461175d5760405162461bcd60e51b8152600401610be8906139ad565b600080546040516001600160a01b0390911690600080516020613d1f833981519152908390a3600080546001600160a01b0319169055565b606060138054610b2490613973565b6000610bb43384610ee085604051806060016040528060258152602001613d3f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190612318565b6001546001600160a01b031633146118595760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610be8565b60025442116118a05760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610be8565b600154600080546040516001600160a01b039384169390911691600080516020613d1f83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610bb4338484611ebc565b6000546001600160a01b031633146119265760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461197b5760405162461bcd60e51b8152600401610be8906139ad565b601592909255601655601755565b6000546001600160a01b031633146119b35760405162461bcd60e51b8152600401610be8906139ad565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611a0090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611a355760405162461bcd60e51b8152600401610be8906139ad565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611a82576040519150601f19603f3d011682016040523d82523d6000602084013e611a87565b606091505b50509050806111255760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610be8565b6000805b600b54811015611b2d57826001600160a01b0316600b8281548110611af857611af8613a10565b6000918252602090912001546001600160a01b031603611b1b5750600192915050565b80611b2581613a26565b915050611ad1565b50600092915050565b6000546001600160a01b03163314611b605760405162461bcd60e51b8152600401610be8906139ad565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815560028290556040518190600080516020613d1f833981519152908290a350565b6000546001600160a01b03163314611bcf5760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b03166000908152600660205260409020805460ff19169055565b60006023546000146111805760275460235461117b91906139f8565b600b8181548110610d0157600080fd5b6000546001600160a01b03163314611c465760405162461bcd60e51b8152600401610be8906139ad565b601454611c5490600a613b8c565b611c5e9082613a3f565b602c5550565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610be8906139ad565b6001600160a01b038116611cf35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be8565b600080546040516001600160a01b0380851693921691600080516020613d1f83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d9e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be8565b6001600160a01b038216611dff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611e6981611acd565b611eb957600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0383161790555b50565b6001600160a01b038316611f205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610be8565b6001600160a01b038216611f825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610be8565b60008111611fe45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610be8565b6001600160a01b03831660009081526009602052604090205460ff1615801561202657506001600160a01b03821660009081526009602052604090205460ff16155b6120725760405162461bcd60e51b815260206004820152601b60248201527f796f757220736f756c20697320657465726e616c6c79206c6f737400000000006044820152606401610be8565b600061207d306116d4565b60215490915060ff1661210a576001600160a01b03841660009081526006602052604090205460ff16806120c957506001600160a01b03831660009081526006602052604090205460ff165b61210a5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742041637469766560701b6044820152606401610be8565b602c54811080159081906121285750602b54600160a01b900460ff16155b80156121425750602b546001600160a01b03868116911614155b80156121575750602b54600160a81b900460ff165b1561216a57602c54915061216a826123e6565b6001600160a01b03851660009081526006602052604090205460019060ff16806121ac57506001600160a01b03851660009081526006602052604090205460ff165b156121b9575060006122a9565b602b546001600160a01b03908116908716036121ef57601554601b55601654601c55601754601d556121ea85611e60565b6122a9565b602b546001600160a01b038681169116148015612214575060245462010000900460ff165b1561223057601854601b55601954601c55601a54601d556122a9565b602b546001600160a01b0386811691161480156122545750602454610100900460ff165b1561226e576008601b55601954601c556002601d556122a9565b602b546001600160a01b0390811690861603612299576000601b55601954601c55600a601d556122a9565b6000601b819055601c819055601d555b60215460ff1680156122f757506001600160a01b03861660009081526006602052604090205460ff1615806122f757506001600160a01b03851660009081526006602052604090205460ff16155b1561230457612304612717565b612310868686846127c0565b505050505050565b6000818484111561233c5760405162461bcd60e51b8152600401610be8919061359a565b505050900390565b6000806000612351612960565b90925090506123608282612367565b9250505090565b6000610f6c8284613b98565b6000610f6c82846139f8565b60008060008060008060008060008060006123998c612ae2565b935093509350935060008060006123ba8f8787876123b5612344565b612b37565b919f509d509b509599509397509195509350505050919395979092949650565b6000610f6c8284613a5e565b602b805460ff60a01b1916600160a01b179055601c54601d5460009161240c9190612373565b9050600061242f601d54612429848661236790919063ffffffff16565b90612b99565b9050600061243d84836123da565b90506124616124586002601c5461236790919063ffffffff16565b601d5490612373565b92506000612470826002612367565b9050600061247e83836123da565b905047600061248d8685612373565b905061249881612ba5565b60006124a447846123da565b905060006124c1601d546124298b8561236790919063ffffffff16565b60285490915060ff1661259257600d546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114612520576040519150601f19603f3d011682016040523d82523d6000602084013e612525565b606091505b505090508061258c5760405162461bcd60e51b815260206004820152602d60248201527f205f6d61726b6574696e6757616c6c657441646472657373207472616e73666560448201526c1c881a5cc81c995d995c9d1959609a1b6064820152608401610be8565b5061268b565b600a546000906125a3908390612367565b905060005b600a54811015612688576000600a82815481106125c7576125c7613a10565b60009182526020822001546040516001600160a01b0390911691617530918691818181858888f193505050503d806000811461261f576040519150601f19603f3d011682016040523d82523d6000602084013e612624565b606091505b50509050806126755760405162461bcd60e51b815260206004820152601e60248201527f6b6579686f6c646572207472616e7366657220697320726576657274656400006044820152606401610be8565b508061268081613a26565b9150506125a8565b50505b60006126b06126a66002601c5461236790919063ffffffff16565b612429858d612367565b90506126bc8682612cf7565b60408051888152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602b805460ff60a01b19169055505050505050505050565b6023544211801561272b575060245460ff16155b1561273e576024805460ff191660011790555b60265460235461274e91906139f8565b421180156127645750602454610100900460ff16155b15612779576024805461ff0019166101001790555b60275460235461278991906139f8565b421180156127a0575060245462010000900460ff16155b156127be576024805462ff00001916620100001790556127be612dcc565b565b806127ea576127ea601b8054601e55601d8054601f55601c80546020556000928390559082905555565b6001600160a01b03841660009081526007602052604090205460ff16801561282b57506001600160a01b03831660009081526007602052604090205460ff16155b156128405761283b848484612fe3565b61293e565b6001600160a01b03841660009081526007602052604090205460ff1615801561288157506001600160a01b03831660009081526007602052604090205460ff165b156128915761283b848484613129565b6001600160a01b03841660009081526007602052604090205460ff161580156128d357506001600160a01b03831660009081526007602052604090205460ff16155b156128e35761283b8484846131e8565b6001600160a01b03841660009081526007602052604090205460ff16801561292357506001600160a01b03831660009081526007602052604090205460ff165b156129335761283b848484613242565b61293e8484846131e8565b8061295a5761295a601e54601b55601f54601d55602054601c55565b50505050565b601054600f546000918291825b600c54811015612ab2578260036000600c848154811061298f5761298f613a10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806129fa57508160046000600c84815481106129d3576129d3613a10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a1057601054600f54945094505050509091565b612a5660036000600c8481548110612a2a57612a2a613a10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906123da565b9250612a9e60046000600c8481548110612a7257612a72613a10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906123da565b915080612aaa81613a26565b91505061296d565b50600f54601054612ac291612367565b821015612ad957601054600f549350935050509091565b90939092509050565b6000806000806000612af3866132cb565b90506000612b00876132ed565b90506000612b0d88613309565b90506000612b2782612b2185818d896123da565b906123da565b9993985091965094509092505050565b6000808080612b468986612b99565b90506000612b548987612b99565b90506000612b628988612b99565b90506000612b708989612b99565b90506000612b8482612b21858189896123da565b949d949c50929a509298505050505050505050565b6000610f6c8284613a3f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bda57612bda613a10565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c579190613a8b565b81600181518110612c6a57612c6a613a10565b6001600160a01b039283166020918202929092010152602a54612c909130911684611d3c565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612cc9908590600090869030904290600401613bba565b600060405180830381600087803b158015612ce357600080fd5b505af1158015612310573d6000803e3d6000fd5b602a54612d0f9030906001600160a01b031684611d3c565b602a546001600160a01b031663f305d719823085600080612d386000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612da0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612dc59190613c2b565b5050505050565b60285460ff1615612e1f5760405162461bcd60e51b815260206004820152601c60248201527f746869727465656e20616c72656164792065737461626c6973686564000000006044820152606401610be8565b60005b600b54811015612e9157602960036000600b8481548110612e4557612e45613a10565b60009182526020808320909101546001600160a01b0316835282810193909352604090910181205483546001810185559382529190209091015580612e8981613a26565b915050612e22565b50612e9a613325565b60005b600a54600d1115612fd35760005b600b54811015612fc05760298281548110612ec857612ec8613a10565b906000526020600020015460036000600b8481548110612eea57612eea613a10565b60009182526020808320909101546001600160a01b03168352820192909252604001902054148015612f58575060086000600b8381548110612f2e57612f2e613a10565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16155b15612fae57600a600b8281548110612f7257612f72613a10565b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b80612fb881613a26565b915050612eab565b5080612fcb81613a26565b915050612e9d565b506028805460ff19166001179055565b6000806000806000806000612ff78861237f565b965096509650965096509650965061303d88600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123da90919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461306c90886123da565b6001600160a01b03808c1660009081526003602052604080822093909355908b168152205461309b9087612373565b6001600160a01b038a166000908152600360205260409020556130bd8261342f565b6130c6816134b7565b6130d08584613576565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161311591815260200190565b60405180910390a350505050505050505050565b600080600080600080600061313d8861237f565b965096509650965096509650965061318387600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123da90919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c168152600490915220546131b99085612373565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461309b9087612373565b60008060008060008060006131fc8861237f565b965096509650965096509650965061306c87600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123da90919063ffffffff16565b60008060008060008060006132568861237f565b965096509650965096509650965061329c88600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123da90919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461318390886123da565b6000610bb860646132e7601b5485612b9990919063ffffffff16565b90612367565b6000610bb860646132e7601c5485612b9990919063ffffffff16565b6000610bb860646132e7601d5485612b9990919063ffffffff16565b600b5460015b818110156111255760006029828154811061334857613348613a10565b60009182526020822001549150613360600184613c59565b90505b600081121580156133905750816029828154811061338357613383613a10565b9060005260206000200154105b156133f057602981815481106133a8576133a8613a10565b906000526020600020015460298260016133c29190613c98565b815481106133d2576133d2613a10565b600091825260209091200155806133e881613cd9565b915050613363565b8160296133fe836001613c98565b8154811061340e5761340e613a10565b6000918252602090912001555081905061342781613a26565b91505061332b565b6000613439612344565b905060006134478383612b99565b306000908152600360205260409020549091506134649082612373565b3060009081526003602090815260408083209390935560079052205460ff1615610cb457306000908152600460205260409020546134a29084612373565b30600090815260046020526040902055505050565b60006134c1612344565b905060006134cf8383612b99565b600d546001600160a01b03166000908152600360205260409020549091506134f79082612373565b600d80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615610cb457600d546001600160a01b03166000908152600460205260409020546135569084612373565b600d546001600160a01b0316600090815260046020526040902055505050565b60105461358390836123da565b6010556011546135939082612373565b6011555050565b600060208083528351808285015260005b818110156135c7578581018301518582016040015282016135ab565b818111156135d9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611eb957600080fd5b6000806040838503121561361757600080fd5b8235613622816135ef565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561366f5761366f613630565b604052919050565b600067ffffffffffffffff82111561369157613691613630565b5060051b60200190565b600082601f8301126136ac57600080fd5b813560206136c16136bc83613677565b613646565b82815260059290921b840181019181810190868411156136e057600080fd5b8286015b848110156137045780356136f7816135ef565b83529183019183016136e4565b509695505050505050565b8035801515811461371f57600080fd5b919050565b6000806040838503121561373757600080fd5b823567ffffffffffffffff81111561374e57600080fd5b61375a8582860161369b565b9250506137696020840161370f565b90509250929050565b60008060006060848603121561378757600080fd5b505081359360208301359350604090920135919050565b6000602082840312156137b057600080fd5b5035919050565b600080604083850312156137ca57600080fd5b823567ffffffffffffffff808211156137e257600080fd5b6137ee8683870161369b565b935060209150818501358181111561380557600080fd5b85019050601f8101861361381857600080fd5b80356138266136bc82613677565b81815260059190911b8201830190838101908883111561384557600080fd5b928401925b828410156138635783358252928401929084019061384a565b80955050505050509250929050565b60008060006060848603121561388757600080fd5b8335613892816135ef565b925060208401356138a2816135ef565b929592945050506040919091013590565b6000602082840312156138c557600080fd5b8135610f6c816135ef565b600080604083850312156138e357600080fd5b823591506137696020840161370f565b6000806040838503121561390657600080fd5b8235613911816135ef565b91506137696020840161370f565b60006020828403121561393157600080fd5b610f6c8261370f565b6000806040838503121561394d57600080fd5b8235613958816135ef565b91506020830135613968816135ef565b809150509250929050565b600181811c9082168061398757607f821691505b6020821081036139a757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a0b57613a0b6139e2565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201613a3857613a386139e2565b5060010190565b6000816000190483118215151615613a5957613a596139e2565b500290565b600082821015613a7057613a706139e2565b500390565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613a9d57600080fd5b8151610f6c816135ef565b600181815b80851115613ae3578160001904821115613ac957613ac96139e2565b80851615613ad657918102915b93841c9390800290613aad565b509250929050565b600082613afa57506001610bb8565b81613b0757506000610bb8565b8160018114613b1d5760028114613b2757613b43565b6001915050610bb8565b60ff841115613b3857613b386139e2565b50506001821b610bb8565b5060208310610133831016604e8410600b8410161715613b66575081810a610bb8565b613b708383613aa8565b8060001904821115613b8457613b846139e2565b029392505050565b6000610f6c8383613aeb565b600082613bb557634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613c0a5784516001600160a01b031683529383019391830191600101613be5565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613c4057600080fd5b8351925060208401519150604084015190509250925092565b60008083128015600160ff1b850184121615613c7757613c776139e2565b6001600160ff1b0384018313811615613c9257613c926139e2565b50500390565b600080821280156001600160ff1b0384900385131615613cba57613cba6139e2565b600160ff1b8390038412811615613cd357613cd36139e2565b50500190565b6000600160ff1b8201613cee57613cee6139e2565b50600019019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202ab53caeb2a593320953111c18f4e5dcb5502d24b1ce38f6507f140c5b6fb3cc64736f6c634300080e0033
Deployed Bytecode Sourcemap
16844:27886:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21207:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22121:161;;;;;;;;;;-1:-1:-1;22121:161:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;22121:161:0;1072:187:1;32572:279:0;;;;;;;;;;-1:-1:-1;32572:279:0;;;;;:::i;:::-;;:::i;:::-;;23242:87;;;;;;;;;;-1:-1:-1;23311:10:0;;23242:87;;;3338:25:1;;;3326:2;3311:18;23242:87:0;3192:177:1;19085:43:0;;;;;;;;;;-1:-1:-1;19085:43:0;;;;;;;;26212:204;;;;;;;;;;-1:-1:-1;26212:204:0;;;;;:::i;:::-;;:::i;19173:41::-;;;;;;;;;;-1:-1:-1;19173:41:0;;;;-1:-1:-1;;;;;19173:41:0;;;;;;-1:-1:-1;;;;;3886:32:1;;;3868:51;;3856:2;3841:18;19173:41:0;3695:230:1;18789:23:0;;;;;;;;;;-1:-1:-1;18789:23:0;;;;;;;;;;;21486:95;;;;;;;;;;-1:-1:-1;21566:7:0;;21486:95;;17372:29;;;;;;;;;;-1:-1:-1;17372:29:0;;;;;:::i;:::-;;:::i;18820:22::-;;;;;;;;;;-1:-1:-1;18820:22:0;;;;;;;;;;;32318:110;;;;;;;;;;-1:-1:-1;32394:15:0;32318:110;;18391:47;;;;;;;;;;;;;;;;33761:651;;;;;;;;;;-1:-1:-1;33761:651:0;;;;;:::i;:::-;;:::i;22290:313::-;;;;;;;;;;-1:-1:-1;22290:313:0;;;;;:::i;:::-;;:::i;18849:37::-;;;;;;;;;;;;;;;;24169:253;;;;;;;;;;-1:-1:-1;24169:253:0;;;;;:::i;:::-;;:::i;21393:85::-;;;;;;;;;;-1:-1:-1;21461:9:0;;21393:85;;24771:479;;;;;;;;;;-1:-1:-1;24771:479:0;;;;;:::i;:::-;;:::i;22611:218::-;;;;;;;;;;-1:-1:-1;22611:218:0;;;;;:::i;:::-;;:::i;31910:197::-;;;;;;;;;;;;;:::i;18294:35::-;;;;;;;;;;;;;;;;23337:378;;;;;;;;;;-1:-1:-1;23337:378:0;;;;;:::i;:::-;;:::i;17478:38::-;;;;;;;;;;-1:-1:-1;17478:38:0;;;;-1:-1:-1;;;;;17478:38:0;;;18758:22;;;;;;;;;;-1:-1:-1;18758:22:0;;;;;;;;33206:166;;;;;;;;;;;;;:::i;26926:318::-;;;;;;;;;;-1:-1:-1;26926:318:0;;;;;:::i;:::-;;:::i;25971:111::-;;;;;;;;;;-1:-1:-1;25971:111:0;;;;;:::i;:::-;;:::i;23723:438::-;;;;;;;;;;-1:-1:-1;23723:438:0;;;;;:::i;:::-;;:::i;19221:28::-;;;;;;;;;;-1:-1:-1;19221:28:0;;;;-1:-1:-1;;;;;19221:28:0;;;19284:40;;;;;;;;;;-1:-1:-1;19284:40:0;;;;-1:-1:-1;;;19284:40:0;;;;;;26636:119;;;;;;;;;;-1:-1:-1;26636:119:0;;;;;:::i;:::-;;:::i;24430:333::-;;;;;;;;;;-1:-1:-1;24430:333:0;;;;;:::i;:::-;;:::i;32440:123::-;;;;;;;;;;-1:-1:-1;32440:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;32528:27:0;32504:4;32528:27;;;:18;:27;;;;;;;;;32440:123;19008:41;;;;;;;;;;;;;;;;18337:47;;;;;;;;;;;;;;;;21589:198;;;;;;;;;;-1:-1:-1;21589:198:0;;;;;:::i;:::-;;:::i;7838:148::-;;;;;;;;;;;;;:::i;7361:24::-;;;;;;;;;;;;;;;;23114:120;;;;;;;;;;-1:-1:-1;23114:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23206:20:0;23182:4;23206:20;;;:11;:20;;;;;;;;;23114:120;7607:87;;;;;;;;;;-1:-1:-1;7653:7:0;7680:6;-1:-1:-1;;;;;7680:6:0;7607:87;;21298;;;;;;;;;;;;;:::i;22837:269::-;;;;;;;;;;-1:-1:-1;22837:269:0;;;;;:::i;:::-;;:::i;8606:294::-;;;;;;;;;;;;;:::i;21795:167::-;;;;;;;;;;-1:-1:-1;21795:167:0;;;;;:::i;:::-;;:::i;33612:140::-;;;;;;;;;;-1:-1:-1;33612:140:0;;;;;:::i;:::-;;:::i;18646:25::-;;;;;;;;;;-1:-1:-1;18646:25:0;;;;;;;;17526:72;;;;;;;;;;-1:-1:-1;17526:72:0;;;;-1:-1:-1;;;;;17526:72:0;;;26424:200;;;;;;;;;;-1:-1:-1;26424:200:0;;;;;:::i;:::-;;:::i;27252:173::-;;;;;;;;;;-1:-1:-1;27252:173:0;;;;;:::i;:::-;;:::i;27564:238::-;;;;;;;;;;-1:-1:-1;27564:238:0;;;;;:::i;:::-;;:::i;33380:224::-;;;;;;;;;;-1:-1:-1;33380:224:0;;;;;:::i;:::-;;:::i;19331:44::-;;;;;;;;;;;;;;;;18931:41;;;;;;;;;;;;;;;;8322:208;;;;;;;;;;-1:-1:-1;8322:208:0;;;;;:::i;:::-;;:::i;21970:143::-;;;;;;;;;;-1:-1:-1;21970:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;22078:18:0;;;22051:7;22078:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21970:143;26094:110;;;;;;;;;;-1:-1:-1;26094:110:0;;;;;:::i;:::-;;:::i;32115:195::-;;;;;;;;;;;;;:::i;17408:27::-;;;;;;;;;;-1:-1:-1;17408:27:0;;;;;:::i;:::-;;:::i;26767:151::-;;;;;;;;;;-1:-1:-1;26767:151:0;;;;;:::i;:::-;;:::i;7996:244::-;;;;;;;;;;-1:-1:-1;7996:244:0;;;;;:::i;:::-;;:::i;21207:83::-;21244:13;21277:5;21270:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21207:83;:::o;22121:161::-;22196:4;22213:39;3641:10;22236:7;22245:6;22213:8;:39::i;:::-;-1:-1:-1;22270:4:0;22121:161;;;;;:::o;32572:279::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;;;;;;;;;32680:13:::1;::::0;:19:::1;::::0;32696:3:::1;32680:19;:::i;:::-;32665:12;:34;32657:71;;;::::0;-1:-1:-1;;;32657:71:0;;8543:2:1;32657:71:0::1;::::0;::::1;8525:21:1::0;8582:2;8562:18;;;8555:30;8621:26;8601:18;;;8594:54;8665:18;;32657:71:0::1;8341:348:1::0;32657:71:0::1;32744:9;32739:105;32763:8;:15;32759:1;:19;32739:105;;;32826:6;32800:10;:23;32811:8;32820:1;32811:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32800:23:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32800:23:0;:32;;-1:-1:-1;;32800:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32780:3;::::1;::::0;::::1;:::i;:::-;;;;32739:105;;;;32572:279:::0;;:::o;26212:204::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;26312:11:::1;:24:::0;;;;26347:17:::1;:24:::0;26381:17:::1;:24:::0;26212:204::o;17372:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17372:29:0;;-1:-1:-1;17372:29:0;:::o;33761:651::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;33903:15:::1;:22;33885:7;:14;:40;33877:83;;;::::0;-1:-1:-1;;;33877:83:0;;9168:2:1;33877:83:0::1;::::0;::::1;9150:21:1::0;9207:2;9187:18;;;9180:30;9246:32;9226:18;;;9219:60;9296:18;;33877:83:0::1;8966:354:1::0;33877:83:0::1;33996:3;33979:7;:14;:20;33971:87;;;::::0;-1:-1:-1;;;33971:87:0;;9527:2:1;33971:87:0::1;::::0;::::1;9509:21:1::0;9566:2;9546:18;;;9539:30;9605:34;9585:18;;;9578:62;-1:-1:-1;;;9656:18:1;;;9649:52;9718:19;;33971:87:0::1;9325:418:1::0;33971:87:0::1;34171:9;34167:238;34190:7;:14;34186:1;:18;34167:238;;;34225:14;34242:7;34250:1;34242:10;;;;;;;;:::i;:::-;;;;;;;34225:27;;34267:14;34284:15;34300:1;34284:18;;;;;;;;:::i;:::-;;;;;;;34303:3;34284:22;;;;:::i;:::-;34267:39;;34321:20;34334:6;34321:12;:20::i;:::-;34356:37;34366:10;34378:6;34386;34356:9;:37::i;:::-;34210:195;;34206:3;;;;;:::i;:::-;;;;34167:238;;22290:313:::0;22388:4;22405:36;22415:6;22423:9;22434:6;22405:9;:36::i;:::-;22452:121;22461:6;3641:10;22483:89;22521:6;22483:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22483:19:0;;;;;;:11;:19;;;;;;;;3641:10;22483:33;;;;;;;;;;:37;:89::i;:::-;22452:8;:121::i;:::-;-1:-1:-1;22591:4:0;22290:313;;;;;:::o;24169:253::-;24235:7;24274;;24263;:18;;24255:73;;;;-1:-1:-1;;;24255:73:0;;10123:2:1;24255:73:0;;;10105:21:1;10162:2;10142:18;;;10135:30;10201:34;10181:18;;;10174:62;-1:-1:-1;;;10252:18:1;;;10245:40;10302:19;;24255:73:0;9921:406:1;24255:73:0;24339:19;24362:10;:8;:10::i;:::-;24339:33;-1:-1:-1;24390:24:0;:7;24339:33;24390:11;:24::i;:::-;24383:31;24169:253;-1:-1:-1;;;24169:253:0:o;24771:479::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24853:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24845:60;;;::::0;-1:-1:-1;;;24845:60:0;;10534:2:1;24845:60:0::1;::::0;::::1;10516:21:1::0;10573:2;10553:18;;;10546:30;10612:29;10592:18;;;10585:57;10659:18;;24845:60:0::1;10332:351:1::0;24845:60:0::1;24921:9;24916:327;24940:9;:16:::0;24936:20;::::1;24916:327;;;24998:7;-1:-1:-1::0;;;;;24982:23:0::1;:9;24992:1;24982:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24982:12:0::1;:23:::0;24978:254:::1;;25041:9;25051:16:::0;;:20:::1;::::0;25070:1:::1;::::0;25051:20:::1;:::i;:::-;25041:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25026:9:::1;:12:::0;;-1:-1:-1;;;;;25041:31:0;;::::1;::::0;25036:1;;25026:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25026:46:0::1;-1:-1:-1::0;;;;;25026:46:0;;::::1;;::::0;;25091:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25130:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25130:28:0::1;::::0;;25177:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25177:15:0;;;;;-1:-1:-1;;;;;;25177:15:0::1;::::0;;;;;24916:327:::1;24771:479:::0;:::o;24978:254::-:1;24958:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24916:327;;;;24771:479:::0;:::o;22611:218::-;3641:10;22699:4;22748:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22748:34:0;;;;;;;;;;22699:4;;22716:83;;22739:7;;22748:50;;22787:10;22748:38;:50::i;31910:197::-;31960:7;31984:17;;32005:1;31984:22;31980:101;;32050:19;;32030:17;;:39;;;;:::i;:::-;32023:46;;31910:197;:::o;31980:101::-;-1:-1:-1;32098:1:0;;31910:197::o;23337:378::-;3641:10;23389:14;23438:19;;;:11;:19;;;;;;;;23437:20;23429:77;;;;-1:-1:-1;;;23429:77:0;;11152:2:1;23429:77:0;;;11134:21:1;11191:2;11171:18;;;11164:30;11230:34;11210:18;;;11203:62;-1:-1:-1;;;11281:18:1;;;11274:42;11333:19;;23429:77:0;10950:408:1;23429:77:0;23518:15;23543:19;23554:7;23543:10;:19::i;:::-;-1:-1:-1;;;;;;;;23591:15:0;;;;;;:7;:15;;;;;;23517:45;;-1:-1:-1;23591:28:0;;:15;-1:-1:-1;23517:45:0;;-1:-1:-1;;23591:19:0;:28::i;:::-;-1:-1:-1;;;;;23573:15:0;;;;;;:7;:15;;;;;:46;23640:7;;:20;;23652:7;23640:11;:20::i;:::-;23630:7;:30;23684:10;;:23;;23699:7;23684:14;:23::i;:::-;23671:10;:36;-1:-1:-1;;;23337:378:0:o;33206:166::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;33259:13:::1;:20:::0;;-1:-1:-1;;33259:20:0::1;33275:4;33259:20;::::0;;33306:12:::1;33290:13;:28:::0;33349:15:::1;33329:17;:35:::0;33206:166::o;26926:318::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;27001:35:::1;27058:9;27001:67;;27113:16;-1:-1:-1::0;;;;;27113:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27095:56:0::1;;27160:4;27167:16;-1:-1:-1::0;;;;;27167:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27095:96;::::0;-1:-1:-1;;;;;;27095:96:0::1;::::0;;;;;;-1:-1:-1;;;;;11849:15:1;;;27095:96:0::1;::::0;::::1;11831:34:1::0;11901:15;;11881:18;;;11874:43;11766:18;;27095:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27079:13;:112:::0;;-1:-1:-1;;;;;27079:112:0;;::::1;-1:-1:-1::0;;;;;;27079:112:0;;::::1;;::::0;;;27202:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;26926:318:0:o;25971:111::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26040:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26040:34:0::1;26070:4;26040:34;::::0;;25971:111::o;23723:438::-;23813:7;23852;;23841;:18;;23833:62;;;;-1:-1:-1;;;23833:62:0;;12130:2:1;23833:62:0;;;12112:21:1;12169:2;12149:18;;;12142:30;12208:33;12188:18;;;12181:61;12259:18;;23833:62:0;11928:355:1;23833:62:0;23911:17;23906:248;;23946:15;23971:19;23982:7;23971:10;:19::i;:::-;-1:-1:-1;23945:45:0;;-1:-1:-1;24005:14:0;;-1:-1:-1;;;;;;24005:14:0;23906:248;24054:23;24086:19;24097:7;24086:10;:19::i;:::-;-1:-1:-1;24052:53:0;;-1:-1:-1;24120:22:0;;-1:-1:-1;;;;;;24120:22:0;26636:119;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;26716:23:::1;:31:::0;;-1:-1:-1;;;;;;26716:31:0::1;-1:-1:-1::0;;;;;26716:31:0;;;::::1;::::0;;;::::1;::::0;;26636:119::o;24430:333::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24513:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24512:21;24504:61;;;::::0;-1:-1:-1;;;24504:61:0;;12490:2:1;24504:61:0::1;::::0;::::1;12472:21:1::0;12529:2;12509:18;;;12502:30;12568:29;12548:18;;;12541:57;12615:18;;24504:61:0::1;12288:351:1::0;24504:61:0::1;-1:-1:-1::0;;;;;24579:16:0;::::1;24598:1;24579:16:::0;;;:7:::1;:16;::::0;;;;;:20;24576:108:::1;;-1:-1:-1::0;;;;;24655:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24635:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24616:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24576:108:::1;-1:-1:-1::0;;;;;24694:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24694:27:0::1;24717:4;24694:27:::0;;::::1;::::0;;;24732:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24732:23:0::1;::::0;;::::1;::::0;;24430:333::o;21589:198::-;-1:-1:-1;;;;;21679:20:0;;21655:7;21679:20;;;:11;:20;;;;;;;;21675:49;;;-1:-1:-1;;;;;;21708:16:0;;;;;:7;:16;;;;;;;21589:198::o;21675:49::-;-1:-1:-1;;;;;21762:16:0;;;;;;:7;:16;;;;;;21742:37;;:19;:37::i;7838:148::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;7945:1:::1;7929:6:::0;;7908:40:::1;::::0;-1:-1:-1;;;;;7929:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7908:40:0;7945:1;;7908:40:::1;7976:1;7959:19:::0;;-1:-1:-1;;;;;;7959:19:0::1;::::0;;7838:148::o;21298:87::-;21337:13;21370:7;21363:14;;;;;:::i;22837:269::-;22930:4;22947:129;3641:10;22970:7;22979:96;23018:15;22979:96;;;;;;;;;;;;;;;;;3641:10;22979:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22979:34:0;;;;;;;;;;;;:38;:96::i;8606:294::-;8658:14;;-1:-1:-1;;;;;8658:14:0;8676:10;8658:28;8650:77;;;;-1:-1:-1;;;8650:77:0;;12846:2:1;8650:77:0;;;12828:21:1;12885:2;12865:18;;;12858:30;12924:34;12904:18;;;12897:62;-1:-1:-1;;;12975:18:1;;;12968:34;13019:19;;8650:77:0;12644:400:1;8650:77:0;8764:9;;8746:15;:27;8738:60;;;;-1:-1:-1;;;8738:60:0;;13251:2:1;8738:60:0;;;13233:21:1;13290:2;13270:18;;;13263:30;-1:-1:-1;;;13309:18:1;;;13302:49;13368:18;;8738:60:0;13049:343:1;8738:60:0;8843:14;;;8835:6;;8814:44;;-1:-1:-1;;;;;8843:14:0;;;;8835:6;;;;-1:-1:-1;;;;;;;;;;;8814:44:0;;8878:14;;;8869:23;;-1:-1:-1;;;;;;8869:23:0;-1:-1:-1;;;;;8878:14:0;;;8869:23;;;;;;8606:294::o;21795:167::-;21873:4;21890:42;3641:10;21914:9;21925:6;21890:9;:42::i;33612:140::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33701:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:43;;-1:-1:-1;;33701:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33612:140::o;26424:200::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;26523:10:::1;:23:::0;;;;26557:16:::1;:23:::0;26590:16:::1;:23:::0;26424:200::o;27252:173::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;27331:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;27331:32:0::1;-1:-1:-1::0;;;;27331:32:0;;::::1;;::::0;;27379:38:::1;::::0;::::1;::::0;::::1;::::0;27355:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;27379:38:0::1;;;;;;;;27252:173:::0;:::o;27564:238::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;27696:9:::1;27710:6:::0;;:30:::1;::::0;-1:-1:-1;;;;;27710:6:0;;::::1;::::0;27729;;27696:9;27710:30;27696:9;27710:30;27729:6;27710;:30:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27695:45;;;27759:4;27751:35;;;::::0;-1:-1:-1;;;27751:35:0;;13809:2:1;27751:35:0::1;::::0;::::1;13791:21:1::0;13848:2;13828:18;;;13821:30;-1:-1:-1;;;13867:18:1;;;13860:48;13925:18;;27751:35:0::1;13607:342:1::0;33380:224:0;33441:4;33462:6;33457:116;33473:10;:17;33470:20;;33457:116;;;33529:6;-1:-1:-1;;;;;33514:21:0;:10;33525:1;33514:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;33514:13:0;:21;33510:51;;-1:-1:-1;33557:4:0;;33380:224;-1:-1:-1;;33380:224:0:o;33510:51::-;33491:3;;;;:::i;:::-;;;;33457:116;;;-1:-1:-1;33590:5:0;;33380:224;-1:-1:-1;;33380:224:0:o;8322:208::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;8403:6:::1;::::0;;;8386:23;;-1:-1:-1;;;;;;8386:23:0;;::::1;-1:-1:-1::0;;;;;8403:6:0;::::1;8386:23;::::0;;;8420:19:::1;::::0;;8450:9:::1;:16:::0;;;8482:40:::1;::::0;8403:6;;-1:-1:-1;;;;;;;;;;;8482:40:0;8403:6;;8482:40:::1;8322:208:::0;:::o;26094:110::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26161:27:0::1;26191:5;26161:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26161:35:0::1;::::0;;26094:110::o;32115:195::-;32164:7;32188:17;;32209:1;32188:22;32184:100;;32254:18;;32234:17;;:38;;;;:::i;17408:27::-;;;;;;;;;;;;26767:151;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;26901:9:::1;::::0;26896:14:::1;::::0;:2:::1;:14;:::i;:::-;26887:23;::::0;:6;:23:::1;:::i;:::-;26855:29;:55:::0;-1:-1:-1;26767:151:0:o;7996:244::-;7653:7;7680:6;-1:-1:-1;;;;;7680:6:0;3641:10;7746:23;7738:68;;;;-1:-1:-1;;;7738:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8085:22:0;::::1;8077:73;;;::::0;-1:-1:-1;;;8077:73:0;;15530:2:1;8077:73:0::1;::::0;::::1;15512:21:1::0;15569:2;15549:18;;;15542:30;15608:34;15588:18;;;15581:62;-1:-1:-1;;;15659:18:1;;;15652:36;15705:19;;8077:73:0::1;15328:402:1::0;8077:73:0::1;8187:6;::::0;;8166:38:::1;::::0;-1:-1:-1;;;;;8166:38:0;;::::1;::::0;8187:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;8166:38:0;::::1;8215:6;:17:::0;;-1:-1:-1;;;;;;8215:17:0::1;-1:-1:-1::0;;;;;8215:17:0;;;::::1;::::0;;;::::1;::::0;;7996:244::o;32859:337::-;-1:-1:-1;;;;;32952:19:0;;32944:68;;;;-1:-1:-1;;;32944:68:0;;15937:2:1;32944:68:0;;;15919:21:1;15976:2;15956:18;;;15949:30;16015:34;15995:18;;;15988:62;-1:-1:-1;;;16066:18:1;;;16059:34;16110:19;;32944:68:0;15735:400:1;32944:68:0;-1:-1:-1;;;;;33031:21:0;;33023:68;;;;-1:-1:-1;;;33023:68:0;;16342:2:1;33023:68:0;;;16324:21:1;16381:2;16361:18;;;16354:30;16420:34;16400:18;;;16393:62;-1:-1:-1;;;16471:18:1;;;16464:32;16513:19;;33023:68:0;16140:398:1;33023:68:0;-1:-1:-1;;;;;33104:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33156:32;;3338:25:1;;;33156:32:0;;3311:18:1;33156:32:0;;;;;;;32859:337;;;:::o;34421:147::-;34484:22;34499:6;34484:14;:22::i;:::-;34479:81;;34524:10;:23;;;;;;;-1:-1:-1;34524:23:0;;;;;;;;-1:-1:-1;;;;;;34524:23:0;-1:-1:-1;;;;;34524:23:0;;;;;34479:81;34421:147;:::o;36485:2509::-;-1:-1:-1;;;;;36607:18:0;;36599:68;;;;-1:-1:-1;;;36599:68:0;;16745:2:1;36599:68:0;;;16727:21:1;16784:2;16764:18;;;16757:30;16823:34;16803:18;;;16796:62;-1:-1:-1;;;16874:18:1;;;16867:35;16919:19;;36599:68:0;16543:401:1;36599:68:0;-1:-1:-1;;;;;36686:16:0;;36678:64;;;;-1:-1:-1;;;36678:64:0;;17151:2:1;36678:64:0;;;17133:21:1;17190:2;17170:18;;;17163:30;17229:34;17209:18;;;17202:62;-1:-1:-1;;;17280:18:1;;;17273:33;17323:19;;36678:64:0;16949:399:1;36678:64:0;36770:1;36761:6;:10;36753:64;;;;-1:-1:-1;;;36753:64:0;;17555:2:1;36753:64:0;;;17537:21:1;17594:2;17574:18;;;17567:30;17633:34;17613:18;;;17606:62;-1:-1:-1;;;17684:18:1;;;17677:39;17733:19;;36753:64:0;17353:405:1;36753:64:0;-1:-1:-1;;;;;36837:16:0;;;;;;:10;:16;;;;;;;;36836:17;:36;;;;-1:-1:-1;;;;;;36858:14:0;;;;;;:10;:14;;;;;;;;36857:15;36836:36;36828:76;;;;-1:-1:-1;;;36828:76:0;;17965:2:1;36828:76:0;;;17947:21:1;18004:2;17984:18;;;17977:30;18043:29;18023:18;;;18016:57;18090:18;;36828:76:0;17763:351:1;36828:76:0;36925:28;36956:24;36974:4;36956:9;:24::i;:::-;36998:13;;36925:55;;-1:-1:-1;36998:13:0;;36993:128;;-1:-1:-1;;;;;37036:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;37064:22:0;;;;;;:18;:22;;;;;;;;37036:50;37028:81;;;;-1:-1:-1;;;37028:81:0;;18321:2:1;37028:81:0;;;18303:21:1;18360:2;18340:18;;;18333:30;-1:-1:-1;;;18379:18:1;;;18372:48;18437:18;;37028:81:0;18119:342:1;37028:81:0;37202:29;;37178:53;;;;;;;37260;;-1:-1:-1;37297:16:0;;-1:-1:-1;;;37297:16:0;;;;37296:17;37260:53;:91;;;;-1:-1:-1;37338:13:0;;-1:-1:-1;;;;;37330:21:0;;;37338:13;;37330:21;;37260:91;:129;;;;-1:-1:-1;37368:21:0;;-1:-1:-1;;;37368:21:0;;;;37260:129;37242:289;;;37439:29;;37416:52;;37483:36;37498:20;37483:14;:36::i;:::-;-1:-1:-1;;;;;37584:24:0;;37551:12;37584:24;;;:18;:24;;;;;;37566:4;;37584:24;;;:50;;-1:-1:-1;;;;;;37612:22:0;;;;;;:18;:22;;;;;;;;37584:50;37581:1229;;;-1:-1:-1;37660:5:0;37581:1229;;;37722:13;;-1:-1:-1;;;;;37722:13:0;;;37714:21;;;;37710:1089;;37773:10;;37763:7;:20;37818:16;;37802:13;:32;37869:16;;37853:13;:32;37904:16;37917:2;37904:12;:16::i;:::-;37710:1089;;;37973:13;;-1:-1:-1;;;;;37967:19:0;;;37973:13;;37967:19;:33;;;;-1:-1:-1;37990:10:0;;;;;;;37967:33;37963:836;;;38057:11;;38047:7;:21;38103:17;;38087:13;:33;38155:17;;38139:13;:33;37963:836;;;38225:13;;-1:-1:-1;;;;;38219:19:0;;;38225:13;;38219:19;:34;;;;-1:-1:-1;38242:11:0;;;;;;;38219:34;38215:584;;;38311:1;38301:7;:11;38347:17;;38331:13;:33;38402:1;38386:13;:17;38215:584;;;38456:13;;-1:-1:-1;;;;;38456:13:0;;;38450:19;;;;38446:353;;38526:1;38516:7;:11;38562:17;;38546:13;:33;38615:2;38599:13;:18;38446:353;;;38706:1;38696:7;:11;;;38726:13;:17;;;38762:13;:17;38446:353;38824:13;;;;:71;;;;-1:-1:-1;;;;;;38843:24:0;;;;;;:18;:24;;;;;;;;38842:25;;:52;;-1:-1:-1;;;;;;38872:22:0;;;;;;:18;:22;;;;;;;;38871:23;38842:52;38820:118;;;38912:14;:12;:14::i;:::-;38948:38;38963:4;38968:2;38971:6;38978:7;38948:14;:38::i;:::-;36588:2406;;;36485:2509;;;:::o;2875:206::-;2961:7;3022:12;3014:6;;;;3006:29;;;;-1:-1:-1;;;3006:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3057:5:0;;;2875:206::o;29414:163::-;29455:7;29476:15;29493;29512:19;:17;:19::i;:::-;29475:56;;-1:-1:-1;29475:56:0;-1:-1:-1;29549:20:0;29475:56;;29549:11;:20::i;:::-;29542:27;;;;29414:163;:::o;2657:98::-;2715:7;2742:5;2746:1;2742;:5;:::i;2331:98::-;2389:7;2416:5;2420:1;2416;:5;:::i;27965:472::-;28024:7;28033;28042;28051;28060;28069;28078;28099:23;28124:12;28138:18;28158;28180:20;28192:7;28180:11;:20::i;:::-;28098:102;;;;;;;;28212:15;28229:23;28254:12;28270:62;28282:7;28291:4;28297:10;28309;28321;:8;:10::i;:::-;28270:11;:62::i;:::-;28211:121;;-1:-1:-1;28211:121:0;-1:-1:-1;28211:121:0;-1:-1:-1;28383:15:0;;-1:-1:-1;28400:4:0;;-1:-1:-1;28406:10:0;;-1:-1:-1;28418:10:0;-1:-1:-1;;;;27965:472:0;;;;;;;;;:::o;2439:98::-;2497:7;2524:5;2528:1;2524;:5;:::i;39464:1639::-;19676:16;:23;;-1:-1:-1;;;;19676:23:0;-1:-1:-1;;;19676:23:0;;;39582:13:::1;::::0;39564::::1;::::0;19676:23;;39564:32:::1;::::0;:13;:17:::1;:32::i;:::-;39549:47;;39607:23;39633:49;39668:13;;39633:30;39658:4;39633:20;:24;;:30;;;;:::i;:::-;:34:::0;::::1;:49::i;:::-;39607:75:::0;-1:-1:-1;39693:23:0::1;39719:41;:20:::0;39607:75;39719:24:::1;:41::i;:::-;39693:67;;39778:39;39796:20;39814:1;39796:13;;:17;;:20;;;;:::i;:::-;39778:13;::::0;;:17:::1;:39::i;:::-;39771:46:::0;-1:-1:-1;39828:12:0::1;39848:22;:15:::0;39868:1:::1;39848:19;:22::i;:::-;39828:42:::0;-1:-1:-1;39881:17:0::1;39901:25;:15:::0;39828:42;39901:19:::1;:25::i;:::-;39881:45:::0;-1:-1:-1;39962:21:0::1;39937:22;40015:25;:15:::0;40035:4;40015:19:::1;:25::i;:::-;39994:46;;40051:28;40068:10;40051:16;:28::i;:::-;40090:18;40111:41;:21;40137:14:::0;40111:25:::1;:41::i;:::-;40090:62;;40163:22;40188:39;40213:13;;40188:20;40203:4;40188:10;:14;;:20;;;;:::i;:39::-;40245:23;::::0;40163:64;;-1:-1:-1;40245:23:0::1;;40240:662;;40312:23;::::0;40304:111:::1;::::0;40286:12:::1;::::0;-1:-1:-1;;;;;40312:23:0::1;::::0;40405:5:::1;::::0;40367:14;;40286:12;40304:111;40286:12;40304:111;40367:14;40312:23;40405:5;40304:111:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40285:130;;;40438:7;40430:65;;;::::0;-1:-1:-1;;;40430:65:0;;18890:2:1;40430:65:0::1;::::0;::::1;18872:21:1::0;18929:2;18909:18;;;18902:30;18968:34;18948:18;;;18941:62;-1:-1:-1;;;19019:18:1;;;19012:43;19072:19;;40430:65:0::1;18688:409:1::0;40430:65:0::1;40270:237;40240:662;;;40582:12;:19:::0;40537:23:::1;::::0;40563:39:::1;::::0;:14;;:18:::1;:39::i;:::-;40537:65;;40622:6;40617:274;40638:12;:19:::0;40634:23;::::1;40617:274;;;40684:12;40710;40723:1;40710:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;40702:104:::1;::::0;-1:-1:-1;;;;;40710:15:0;;::::1;::::0;40796:5:::1;::::0;40757:15;;40702:104;40710:15;40702:104;40757:15;40710;40796:5;40702:104:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40683:123;;;40833:7;40825:50;;;::::0;-1:-1:-1;;;40825:50:0;;19304:2:1;40825:50:0::1;::::0;::::1;19286:21:1::0;19343:2;19323:18;;;19316:30;19382:32;19362:18;;;19355:60;19432:18;;40825:50:0::1;19102:354:1::0;40825:50:0::1;-1:-1:-1::0;40659:3:0;::::1;::::0;::::1;:::i;:::-;;;;40617:274;;;;40522:380;40240:662;40916:17;40936:46;40961:20;40979:1;40961:13;;:17;;:20;;;;:::i;:::-;40936;:10:::0;40951:4;40936:14:::1;:20::i;:46::-;40916:66;;40993:34;41006:9;41017;40993:12;:34::i;:::-;41051:42;::::0;;19663:25:1;;;19719:2;19704:18;;19697:34;;;19747:18;;;19740:34;;;41051:42:0::1;::::0;19651:2:1;19636:18;41051:42:0::1;;;;;;;-1:-1:-1::0;;19722:16:0;:24;;-1:-1:-1;;;;19722:24:0;;;-1:-1:-1;;;;;;;;;39464:1639:0:o;39002:454::-;39068:17;;39050:15;:35;:50;;;;-1:-1:-1;39090:10:0;;;;39089:11;39050:50;39046:100;;;39117:10;:17;;-1:-1:-1;;39117:17:0;39130:4;39117:17;;;39046:100;39198:19;;39178:17;;:39;;;;:::i;:::-;39160:15;:57;:73;;;;-1:-1:-1;39222:11:0;;;;;;;39221:12;39160:73;39156:124;;;39250:11;:18;;-1:-1:-1;;39250:18:0;;;;;39156:124;39332:18;;39312:17;;:38;;;;:::i;:::-;39294:15;:56;:71;;;;-1:-1:-1;39355:10:0;;;;;;;39354:11;39294:71;39290:159;;;39382:10;:17;;-1:-1:-1;;39382:17:0;;;;;39414:23;:21;:23::i;:::-;39002:454::o;42040:834::-;42151:7;42147:40;;42173:14;31518:7;;;31500:15;:25;31560:13;;;31536:21;:37;31608:13;;;31584:21;:37;-1:-1:-1;31642:11:0;;;;31664:17;;;;31692;31456:261;42173:14;-1:-1:-1;;;;;42212:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;42236:22:0;;;;;;:11;:22;;;;;;;;42235:23;42212:46;42208:597;;;42275:48;42297:6;42305:9;42316:6;42275:21;:48::i;:::-;42208:597;;;-1:-1:-1;;;;;42346:19:0;;;;;;:11;:19;;;;;;;;42345:20;:46;;;;-1:-1:-1;;;;;;42369:22:0;;;;;;:11;:22;;;;;;;;42345:46;42341:464;;;42408:46;42428:6;42436:9;42447:6;42408:19;:46::i;42341:464::-;-1:-1:-1;;;;;42477:19:0;;;;;;:11;:19;;;;;;;;42476:20;:47;;;;-1:-1:-1;;;;;;42501:22:0;;;;;;:11;:22;;;;;;;;42500:23;42476:47;42472:333;;;42540:44;42558:6;42566:9;42577:6;42540:17;:44::i;42472:333::-;-1:-1:-1;;;;;42606:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42629:22:0;;;;;;:11;:22;;;;;;;;42606:45;42602:203;;;42668:48;42690:6;42698:9;42709:6;42668:21;:48::i;42602:203::-;42749:44;42767:6;42775:9;42786:6;42749:17;:44::i;:::-;42829:7;42825:41;;42851:15;31783;;31773:7;:25;31825:21;;31809:13;:37;31873:21;;31857:13;:37;31729:173;42851:15;42040:834;;;;:::o;29585:561::-;29682:7;;29718;;29635;;;;;29742:289;29766:9;:16;29762:20;;29742:289;;;29832:7;29808;:21;29816:9;29826:1;29816:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29816:12:0;29808:21;;;;;;;;;;;;;:31;;:66;;;29867:7;29843;:21;29851:9;29861:1;29851:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29851:12:0;29843:21;;;;;;;;;;;;;:31;29808:66;29804:97;;;29884:7;;29893;;29876:25;;;;;;;29585:561;;:::o;29804:97::-;29926:34;29938:7;:21;29946:9;29956:1;29946:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29946:12:0;29938:21;;;;;;;;;;;;;29926:7;;:11;:34::i;:::-;29916:44;;29985:34;29997:7;:21;30005:9;30015:1;30005:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30005:12:0;29997:21;;;;;;;;;;;;;29985:7;;:11;:34::i;:::-;29975:44;-1:-1:-1;29784:3:0;;;;:::i;:::-;;;;29742:289;;;-1:-1:-1;30067:7:0;;30055;;:20;;:11;:20::i;:::-;30045:7;:30;30041:61;;;30085:7;;30094;;30077:25;;;;;;29585:561;;:::o;30041:61::-;30121:7;;30130;;-1:-1:-1;29585:561:0;-1:-1:-1;29585:561:0:o;28445:429::-;28505:7;28514;28523;28532;28552:12;28567:24;28583:7;28567:15;:24::i;:::-;28552:39;;28602:18;28623:30;28645:7;28623:21;:30::i;:::-;28602:51;;28664:18;28685:30;28707:7;28685:21;:30::i;:::-;28664:51;-1:-1:-1;28726:23:0;28752:49;28664:51;28752:33;28774:10;28752:33;:7;28764:4;28752:11;:17::i;:::-;:21;;:33::i;:49::-;28726:75;28837:4;;-1:-1:-1;28843:10:0;;-1:-1:-1;28843:10:0;-1:-1:-1;28445:429:0;;-1:-1:-1;;;28445:429:0:o;28882:524::-;29017:7;;;;29073:24;:7;29085:11;29073;:24::i;:::-;29055:42;-1:-1:-1;29108:12:0;29123:21;:4;29132:11;29123:8;:21::i;:::-;29108:36;-1:-1:-1;29155:18:0;29176:27;:10;29191:11;29176:14;:27::i;:::-;29155:48;-1:-1:-1;29214:18:0;29235:27;:10;29250:11;29235:14;:27::i;:::-;29214:48;-1:-1:-1;29273:23:0;29299:49;29214:48;29299:33;29321:10;29299:33;:7;29311:4;29299:11;:17::i;:49::-;29367:7;;;;-1:-1:-1;29393:4:0;;-1:-1:-1;28882:524:0;;-1:-1:-1;;;;;;;;;28882:524:0:o;2547:98::-;2605:7;2632:5;2636:1;2632;:5;:::i;41111:499::-;41201:16;;;41215:1;41201:16;;;;;;;;41177:21;;41201:16;;;;;;;;;;-1:-1:-1;41201:16:0;41177:40;;41246:4;41228;41233:1;41228:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41228:23:0;;;:7;;;;;;;;;;:23;;;;41272:15;;:22;;;-1:-1:-1;;;41272:22:0;;;;:15;;;;;:20;;:22;;;;;41228:7;;41272:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41262:4;41267:1;41262:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41262:32:0;;;:7;;;;;;;;;:32;41337:15;;41305:62;;41322:4;;41337:15;41355:11;41305:8;:62::i;:::-;41378:15;;:224;;-1:-1:-1;;;41378:224:0;;-1:-1:-1;;;;;41378:15:0;;;;:66;;:224;;41459:11;;41378:15;;41529:4;;41556;;41576:15;;41378:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41618:414;41731:15;;41699:62;;41716:4;;-1:-1:-1;;;;;41731:15:0;41749:11;41699:8;:62::i;:::-;41772:15;;-1:-1:-1;;;;;41772:15:0;:31;41811:9;41844:4;41864:11;41772:15;;41976:7;7653;7680:6;-1:-1:-1;;;;;7680:6:0;;7607:87;41976:7;41772:252;;;;;;-1:-1:-1;;;;;;41772:252:0;;;-1:-1:-1;;;;;21129:15:1;;;41772:252:0;;;21111:34:1;21161:18;;;21154:34;;;;21204:18;;;21197:34;;;;21247:18;;;21240:34;21311:15;;;21290:19;;;21283:44;41998:15:0;21343:19:1;;;21336:35;21045:19;;41772:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41618:414;;:::o;35752:725::-;35814:23;;;;35813:24;35805:65;;;;-1:-1:-1;;;35805:65:0;;21895:2:1;35805:65:0;;;21877:21:1;21934:2;21914:18;;;21907:30;21973;21953:18;;;21946:58;22021:18;;35805:65:0;21693:352:1;35805:65:0;35886:6;35881:113;35902:10;:17;35898:21;;35881:113;;;35941:12;35959:7;:22;35967:10;35978:1;35967:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35967:13:0;35959:22;;;;;;;;;;;;;;;;35941:41;;35967:13;35941:41;;;;;;;;;;;;;;35921:3;;;;:::i;:::-;;;;35881:113;;;;36004:8;:6;:8::i;:::-;36083:6;36104:325;36111:12;:19;36133:2;-1:-1:-1;36104:325:0;;;36157:6;36152:248;36173:10;:17;36169:21;;36152:248;;;36246:12;36259:1;36246:15;;;;;;;;:::i;:::-;;;;;;;;;36220:7;:22;36228:10;36239:1;36228:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36228:13:0;36220:22;;;;;;;;;;;;;:41;:88;;;;;36267:25;:40;36293:10;36304:1;36293:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36293:13:0;36267:40;;;;;;;;;;;;;;;36266:41;36220:88;36216:169;;;36333:12;36351:10;36362:1;36351:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;36333:32;;36351:13;36333:32;;;;;;;;;;;;;;-1:-1:-1;;;;;;36333:32:0;-1:-1:-1;;;;;36351:13:0;;;36333:32;;;;;;36216:169;36192:3;;;;:::i;:::-;;;;36152:248;;;-1:-1:-1;36414:3:0;;;;:::i;:::-;;;;36104:325;;;-1:-1:-1;36439:23:0;:30;;-1:-1:-1;;36439:30:0;36465:4;36439:30;;;35752:725::o;44100:623::-;44203:15;44220:23;44245:12;44259:23;44284:12;44298:18;44318;44340:19;44351:7;44340:10;:19::i;:::-;44202:157;;;;;;;;;;;;;;44388:28;44408:7;44388;:15;44396:6;-1:-1:-1;;;;;44388:15:0;-1:-1:-1;;;;;44388:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;44370:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44445:7;:15;;;;:28;;44465:7;44445:19;:28::i;:::-;-1:-1:-1;;;;;44427:15:0;;;;;;;:7;:15;;;;;;:46;;;;44505:18;;;;;;;:39;;44528:15;44505:22;:39::i;:::-;-1:-1:-1;;;;;44484:18:0;;;;;;:7;:18;;;;;:60;44558:26;44573:10;44558:14;:26::i;:::-;44595;44610:10;44595:14;:26::i;:::-;44632:23;44644:4;44650;44632:11;:23::i;:::-;44688:9;-1:-1:-1;;;;;44671:44:0;44680:6;-1:-1:-1;;;;;44671:44:0;;44699:15;44671:44;;;;3338:25:1;;3326:2;3311:18;;3192:177;44671:44:0;;;;;;;;44191:532;;;;;;;44100:623;;;:::o;43449:643::-;43550:15;43567:23;43592:12;43606:23;43631:12;43645:18;43665;43687:19;43698:7;43687:10;:19::i;:::-;43549:157;;;;;;;;;;;;;;43735:28;43755:7;43735;:15;43743:6;-1:-1:-1;;;;;43735:15:0;-1:-1:-1;;;;;43735:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;43717:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43795:18;;;;;:7;:18;;;;;:39;;43818:15;43795:22;:39::i;:::-;-1:-1:-1;;;;;43774:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43866:7;:18;;;;:39;;43889:15;43866:22;:39::i;42882:559::-;42981:15;42998:23;43023:12;43037:23;43062:12;43076:18;43096;43118:19;43129:7;43118:10;:19::i;:::-;42980:157;;;;;;;;;;;;;;43166:28;43186:7;43166;:15;43174:6;-1:-1:-1;;;;;43166:15:0;-1:-1:-1;;;;;43166:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;25260:699::-;25363:15;25380:23;25405:12;25419:23;25444:12;25458:18;25478;25500:19;25511:7;25500:10;:19::i;:::-;25362:157;;;;;;;;;;;;;;25548:28;25568:7;25548;:15;25556:6;-1:-1:-1;;;;;25548:15:0;-1:-1:-1;;;;;25548:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;25530:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25605:7;:15;;;;:28;;25625:7;25605:19;:28::i;30942:154::-;31006:7;31033:55;31072:5;31033:20;31045:7;;31033;:11;;:20;;;;:::i;:::-;:24;;:55::i;31278:166::-;31348:7;31375:61;31420:5;31375:26;31387:13;;31375:7;:11;;:26;;;;:::i;31104:166::-;31174:7;31201:61;31246:5;31201:26;31213:13;;31201:7;:11;;:26;;;;:::i;34576:429::-;34629:10;:17;34671:1;34657:341;34678:6;34674:1;:10;34657:341;;;34706:8;34717:12;34730:1;34717:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;34755:10:0;34764:1;34759;34755:10;:::i;:::-;34747:18;;34780:161;34798:1;34792;34788:11;;34787:46;;;;;34829:3;34805:12;34823:1;34805:21;;;;;;;;:::i;:::-;;;;;;;;;:27;34787:46;34780:161;;;34882:12;34900:1;34882:21;;;;;;;;:::i;:::-;;;;;;;;;34854:12;34872:1;34876;34872:5;;;;:::i;:::-;34854:25;;;;;;;;:::i;:::-;;;;;;;;;;:49;34922:3;;;;:::i;:::-;;;;34780:161;;;34983:3;34955:12;34973:5;:1;34977;34973:5;:::i;:::-;34955:25;;;;;;;;:::i;:::-;;;;;;;;;;:31;-1:-1:-1;34686:3:0;;-1:-1:-1;34686:3:0;;;:::i;:::-;;;;34657:341;;30158:355;30221:19;30244:10;:8;:10::i;:::-;30221:33;-1:-1:-1;30265:18:0;30286:27;:10;30221:33;30286:14;:27::i;:::-;30365:4;30349:22;;;;:7;:22;;;;;;30265:48;;-1:-1:-1;30349:38:0;;30265:48;30349:26;:38::i;:::-;30340:4;30324:22;;;;:7;:22;;;;;;;;:63;;;;30401:11;:26;;;;;;30398:107;;;30483:4;30467:22;;;;:7;:22;;;;;;:38;;30494:10;30467:26;:38::i;:::-;30458:4;30442:22;;;;:7;:22;;;;;:63;30210:303;;30158:355;:::o;30525:405::-;30588:19;30611:10;:8;:10::i;:::-;30588:33;-1:-1:-1;30632:18:0;30653:27;:10;30588:33;30653:14;:27::i;:::-;30734:23;;-1:-1:-1;;;;;30734:23:0;30726:32;;;;:7;:32;;;;;;30632:48;;-1:-1:-1;30726:48:0;;30632;30726:36;:48::i;:::-;30699:23;;;-1:-1:-1;;;;;30699:23:0;;;30691:32;;;;:7;:32;;;;;;;;:83;;;;30800:23;;;;;30788:36;;:11;:36;;;;;;;30785:137;;;30882:23;;-1:-1:-1;;;;;30882:23:0;30874:32;;;;:7;:32;;;;;;:48;;30911:10;30874:36;:48::i;:::-;30847:23;;-1:-1:-1;;;;;30847:23:0;30839:32;;;;:7;:32;;;;;:83;30577:353;;30525:405;:::o;27810:147::-;27888:7;;:17;;27900:4;27888:11;:17::i;:::-;27878:7;:27;27929:10;;:20;;27944:4;27929:14;:20::i;:::-;27916:10;:33;-1:-1:-1;;27810:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:127::-;1325:10;1320:3;1316:20;1313:1;1306:31;1356:4;1353:1;1346:15;1380:4;1377:1;1370:15;1396:275;1467:2;1461:9;1532:2;1513:13;;-1:-1:-1;;1509:27:1;1497:40;;1567:18;1552:34;;1588:22;;;1549:62;1546:88;;;1614:18;;:::i;:::-;1650:2;1643:22;1396:275;;-1:-1:-1;1396:275:1:o;1676:183::-;1736:4;1769:18;1761:6;1758:30;1755:56;;;1791:18;;:::i;:::-;-1:-1:-1;1836:1:1;1832:14;1848:4;1828:25;;1676:183::o;1864:737::-;1918:5;1971:3;1964:4;1956:6;1952:17;1948:27;1938:55;;1989:1;1986;1979:12;1938:55;2025:6;2012:20;2051:4;2075:60;2091:43;2131:2;2091:43;:::i;:::-;2075:60;:::i;:::-;2169:15;;;2255:1;2251:10;;;;2239:23;;2235:32;;;2200:12;;;;2279:15;;;2276:35;;;2307:1;2304;2297:12;2276:35;2343:2;2335:6;2331:15;2355:217;2371:6;2366:3;2363:15;2355:217;;;2451:3;2438:17;2468:31;2493:5;2468:31;:::i;:::-;2512:18;;2550:12;;;;2388;;2355:217;;;-1:-1:-1;2590:5:1;1864:737;-1:-1:-1;;;;;;1864:737:1:o;2606:160::-;2671:20;;2727:13;;2720:21;2710:32;;2700:60;;2756:1;2753;2746:12;2700:60;2606:160;;;:::o;2771:416::-;2861:6;2869;2922:2;2910:9;2901:7;2897:23;2893:32;2890:52;;;2938:1;2935;2928:12;2890:52;2978:9;2965:23;3011:18;3003:6;3000:30;2997:50;;;3043:1;3040;3033:12;2997:50;3066:61;3119:7;3110:6;3099:9;3095:22;3066:61;:::i;:::-;3056:71;;;3146:35;3177:2;3166:9;3162:18;3146:35;:::i;:::-;3136:45;;2771:416;;;;;:::o;3374:316::-;3451:6;3459;3467;3520:2;3508:9;3499:7;3495:23;3491:32;3488:52;;;3536:1;3533;3526:12;3488:52;-1:-1:-1;;3559:23:1;;;3629:2;3614:18;;3601:32;;-1:-1:-1;3680:2:1;3665:18;;;3652:32;;3374:316;-1:-1:-1;3374:316:1:o;3930:180::-;3989:6;4042:2;4030:9;4021:7;4017:23;4013:32;4010:52;;;4058:1;4055;4048:12;4010:52;-1:-1:-1;4081:23:1;;3930:180;-1:-1:-1;3930:180:1:o;4323:1138::-;4441:6;4449;4502:2;4490:9;4481:7;4477:23;4473:32;4470:52;;;4518:1;4515;4508:12;4470:52;4558:9;4545:23;4587:18;4628:2;4620:6;4617:14;4614:34;;;4644:1;4641;4634:12;4614:34;4667:61;4720:7;4711:6;4700:9;4696:22;4667:61;:::i;:::-;4657:71;;4747:2;4737:12;;4802:2;4791:9;4787:18;4774:32;4831:2;4821:8;4818:16;4815:36;;;4847:1;4844;4837:12;4815:36;4870:24;;;-1:-1:-1;4925:4:1;4917:13;;4913:27;-1:-1:-1;4903:55:1;;4954:1;4951;4944:12;4903:55;4990:2;4977:16;5013:60;5029:43;5069:2;5029:43;:::i;5013:60::-;5107:15;;;5189:1;5185:10;;;;5177:19;;5173:28;;;5138:12;;;;5213:19;;;5210:39;;;5245:1;5242;5235:12;5210:39;5269:11;;;;5289:142;5305:6;5300:3;5297:15;5289:142;;;5371:17;;5359:30;;5322:12;;;;5409;;;;5289:142;;;5450:5;5440:15;;;;;;;4323:1138;;;;;:::o;5466:456::-;5543:6;5551;5559;5612:2;5600:9;5591:7;5587:23;5583:32;5580:52;;;5628:1;5625;5618:12;5580:52;5667:9;5654:23;5686:31;5711:5;5686:31;:::i;:::-;5736:5;-1:-1:-1;5793:2:1;5778:18;;5765:32;5806:33;5765:32;5806:33;:::i;:::-;5466:456;;5858:7;;-1:-1:-1;;;5912:2:1;5897:18;;;;5884:32;;5466:456::o;5927:247::-;5986:6;6039:2;6027:9;6018:7;6014:23;6010:32;6007:52;;;6055:1;6052;6045:12;6007:52;6094:9;6081:23;6113:31;6138:5;6113:31;:::i;6179:248::-;6244:6;6252;6305:2;6293:9;6284:7;6280:23;6276:32;6273:52;;;6321:1;6318;6311:12;6273:52;6357:9;6344:23;6334:33;;6386:35;6417:2;6406:9;6402:18;6386:35;:::i;6432:315::-;6497:6;6505;6558:2;6546:9;6537:7;6533:23;6529:32;6526:52;;;6574:1;6571;6564:12;6526:52;6613:9;6600:23;6632:31;6657:5;6632:31;:::i;:::-;6682:5;-1:-1:-1;6706:35:1;6737:2;6722:18;;6706:35;:::i;6752:180::-;6808:6;6861:2;6849:9;6840:7;6836:23;6832:32;6829:52;;;6877:1;6874;6867:12;6829:52;6900:26;6916:9;6900:26;:::i;6937:388::-;7005:6;7013;7066:2;7054:9;7045:7;7041:23;7037:32;7034:52;;;7082:1;7079;7072:12;7034:52;7121:9;7108:23;7140:31;7165:5;7140:31;:::i;:::-;7190:5;-1:-1:-1;7247:2:1;7232:18;;7219:32;7260:33;7219:32;7260:33;:::i;:::-;7312:7;7302:17;;;6937:388;;;;;:::o;7330:380::-;7409:1;7405:12;;;;7452;;;7473:61;;7527:4;7519:6;7515:17;7505:27;;7473:61;7580:2;7572:6;7569:14;7549:18;7546:38;7543:161;;7626:10;7621:3;7617:20;7614:1;7607:31;7661:4;7658:1;7651:15;7689:4;7686:1;7679:15;7543:161;;7330:380;;;:::o;7715:356::-;7917:2;7899:21;;;7936:18;;;7929:30;7995:34;7990:2;7975:18;;7968:62;8062:2;8047:18;;7715:356::o;8076:127::-;8137:10;8132:3;8128:20;8125:1;8118:31;8168:4;8165:1;8158:15;8192:4;8189:1;8182:15;8208:128;8248:3;8279:1;8275:6;8272:1;8269:13;8266:39;;;8285:18;;:::i;:::-;-1:-1:-1;8321:9:1;;8208:128::o;8694:127::-;8755:10;8750:3;8746:20;8743:1;8736:31;8786:4;8783:1;8776:15;8810:4;8807:1;8800:15;8826:135;8865:3;8886:17;;;8883:43;;8906:18;;:::i;:::-;-1:-1:-1;8953:1:1;8942:13;;8826:135::o;9748:168::-;9788:7;9854:1;9850;9846:6;9842:14;9839:1;9836:21;9831:1;9824:9;9817:17;9813:45;9810:71;;;9861:18;;:::i;:::-;-1:-1:-1;9901:9:1;;9748:168::o;10688:125::-;10728:4;10756:1;10753;10750:8;10747:34;;;10761:18;;:::i;:::-;-1:-1:-1;10798:9:1;;10688:125::o;10818:127::-;10879:10;10874:3;10870:20;10867:1;10860:31;10910:4;10907:1;10900:15;10934:4;10931:1;10924:15;11363:251;11433:6;11486:2;11474:9;11465:7;11461:23;11457:32;11454:52;;;11502:1;11499;11492:12;11454:52;11534:9;11528:16;11553:31;11578:5;11553:31;:::i;13954:422::-;14043:1;14086:5;14043:1;14100:270;14121:7;14111:8;14108:21;14100:270;;;14180:4;14176:1;14172:6;14168:17;14162:4;14159:27;14156:53;;;14189:18;;:::i;:::-;14239:7;14229:8;14225:22;14222:55;;;14259:16;;;;14222:55;14338:22;;;;14298:15;;;;14100:270;;;14104:3;13954:422;;;;;:::o;14381:806::-;14430:5;14460:8;14450:80;;-1:-1:-1;14501:1:1;14515:5;;14450:80;14549:4;14539:76;;-1:-1:-1;14586:1:1;14600:5;;14539:76;14631:4;14649:1;14644:59;;;;14717:1;14712:130;;;;14624:218;;14644:59;14674:1;14665:10;;14688:5;;;14712:130;14749:3;14739:8;14736:17;14733:43;;;14756:18;;:::i;:::-;-1:-1:-1;;14812:1:1;14798:16;;14827:5;;14624:218;;14926:2;14916:8;14913:16;14907:3;14901:4;14898:13;14894:36;14888:2;14878:8;14875:16;14870:2;14864:4;14861:12;14857:35;14854:77;14851:159;;;-1:-1:-1;14963:19:1;;;14995:5;;14851:159;15042:34;15067:8;15061:4;15042:34;:::i;:::-;15112:6;15108:1;15104:6;15100:19;15091:7;15088:32;15085:58;;;15123:18;;:::i;:::-;15161:20;;14381:806;-1:-1:-1;;;14381:806:1:o;15192:131::-;15252:5;15281:36;15308:8;15302:4;15281:36;:::i;18466:217::-;18506:1;18532;18522:132;;18576:10;18571:3;18567:20;18564:1;18557:31;18611:4;18608:1;18601:15;18639:4;18636:1;18629:15;18522:132;-1:-1:-1;18668:9:1;;18466:217::o;19785:980::-;20047:4;20095:3;20084:9;20080:19;20126:6;20115:9;20108:25;20152:2;20190:6;20185:2;20174:9;20170:18;20163:34;20233:3;20228:2;20217:9;20213:18;20206:31;20257:6;20292;20286:13;20323:6;20315;20308:22;20361:3;20350:9;20346:19;20339:26;;20400:2;20392:6;20388:15;20374:29;;20421:1;20431:195;20445:6;20442:1;20439:13;20431:195;;;20510:13;;-1:-1:-1;;;;;20506:39:1;20494:52;;20601:15;;;;20566:12;;;;20542:1;20460:9;20431:195;;;-1:-1:-1;;;;;;;20682:32:1;;;;20677:2;20662:18;;20655:60;-1:-1:-1;;;20746:3:1;20731:19;20724:35;20643:3;19785:980;-1:-1:-1;;;19785:980:1:o;21382:306::-;21470:6;21478;21486;21539:2;21527:9;21518:7;21514:23;21510:32;21507:52;;;21555:1;21552;21545:12;21507:52;21584:9;21578:16;21568:26;;21634:2;21623:9;21619:18;21613:25;21603:35;;21678:2;21667:9;21663:18;21657:25;21647:35;;21382:306;;;;;:::o;22050:267::-;22089:4;22118:9;;;22143:10;;-1:-1:-1;;;22162:19:1;;22155:27;;22139:44;22136:70;;;22186:18;;:::i;:::-;-1:-1:-1;;;;;22233:27:1;;22226:35;;22218:44;;22215:70;;;22265:18;;:::i;:::-;-1:-1:-1;;22302:9:1;;22050:267::o;22322:265::-;22361:3;22389:9;;;22414:10;;-1:-1:-1;;;;;22433:27:1;;;22426:35;;22410:52;22407:78;;;22465:18;;:::i;:::-;-1:-1:-1;;;22512:19:1;;;22505:27;;22497:36;;22494:62;;;22536:18;;:::i;:::-;-1:-1:-1;;22572:9:1;;22322:265::o;22592:144::-;22630:3;-1:-1:-1;;;22651:22:1;;22648:48;;22676:18;;:::i;:::-;-1:-1:-1;;;22712:18:1;;22592:144::o
Swarm Source
ipfs://2ab53caeb2a593320953111c18f4e5dcb5502d24b1ce38f6507f140c5b6fb3cc
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.