More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 365 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17998306 | 447 days ago | IN | 0 ETH | 0.00054918 | ||||
Approve | 17857099 | 467 days ago | IN | 0 ETH | 0.00167429 | ||||
Approve | 17799306 | 475 days ago | IN | 0 ETH | 0.00168666 | ||||
Approve | 17795560 | 476 days ago | IN | 0 ETH | 0.00059536 | ||||
Approve | 17778928 | 478 days ago | IN | 0 ETH | 0.00162816 | ||||
Approve | 17776271 | 478 days ago | IN | 0 ETH | 0.0009276 | ||||
Transfer | 17775149 | 478 days ago | IN | 0 ETH | 0.00222412 | ||||
Approve | 17774030 | 479 days ago | IN | 0 ETH | 0.00103454 | ||||
Approve | 17773783 | 479 days ago | IN | 0 ETH | 0.00182944 | ||||
Approve | 17773780 | 479 days ago | IN | 0 ETH | 0.00153415 | ||||
Approve | 17772465 | 479 days ago | IN | 0 ETH | 0.0011341 | ||||
Approve | 17766596 | 480 days ago | IN | 0 ETH | 0.0009812 | ||||
Approve | 17765842 | 480 days ago | IN | 0 ETH | 0.00134094 | ||||
Approve | 17765842 | 480 days ago | IN | 0 ETH | 0.00134094 | ||||
Approve | 17765842 | 480 days ago | IN | 0 ETH | 0.00134094 | ||||
Approve | 17764764 | 480 days ago | IN | 0 ETH | 0.0013265 | ||||
Approve | 17764159 | 480 days ago | IN | 0 ETH | 0.00301841 | ||||
Approve | 17764138 | 480 days ago | IN | 0 ETH | 0.00336679 | ||||
Approve | 17764117 | 480 days ago | IN | 0 ETH | 0.00299363 | ||||
Approve | 17764067 | 480 days ago | IN | 0 ETH | 0.00264883 | ||||
Approve | 17764063 | 480 days ago | IN | 0 ETH | 0.00269698 | ||||
Approve | 17763986 | 480 days ago | IN | 0 ETH | 0.00156061 | ||||
Approve | 17763983 | 480 days ago | IN | 0 ETH | 0.00240807 | ||||
Approve | 17763969 | 480 days ago | IN | 0 ETH | 0.00294851 | ||||
Approve | 17763942 | 480 days ago | IN | 0 ETH | 0.00307989 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18144392 | 427 days ago | 0.0029 ETH | ||||
18144392 | 427 days ago | 0.00096666 ETH | ||||
18144392 | 427 days ago | 0.00386666 ETH | ||||
17998309 | 447 days ago | 0.00337444 ETH | ||||
17998309 | 447 days ago | 0.00112481 ETH | ||||
17998309 | 447 days ago | 0.00449926 ETH | ||||
17799304 | 475 days ago | 0.0035694 ETH | ||||
17799304 | 475 days ago | 0.0011898 ETH | ||||
17799304 | 475 days ago | 0.0047592 ETH | ||||
17785873 | 477 days ago | 0.00427205 ETH | ||||
17785873 | 477 days ago | 0.00142401 ETH | ||||
17785873 | 477 days ago | 0.00569606 ETH | ||||
17785872 | 477 days ago | 0.00427205 ETH | ||||
17785872 | 477 days ago | 0.00142401 ETH | ||||
17785872 | 477 days ago | 0.00569606 ETH | ||||
17785872 | 477 days ago | 0.00427205 ETH | ||||
17785872 | 477 days ago | 0.00142401 ETH | ||||
17785872 | 477 days ago | 0.00569606 ETH | ||||
17777052 | 478 days ago | 0.00417082 ETH | ||||
17777052 | 478 days ago | 0.00139027 ETH | ||||
17777052 | 478 days ago | 0.00556109 ETH | ||||
17774192 | 479 days ago | 0.00457794 ETH | ||||
17774192 | 479 days ago | 0.00152598 ETH | ||||
17774192 | 479 days ago | 0.00610392 ETH | ||||
17774032 | 479 days ago | 0.00632413 ETH |
Loading...
Loading
Contract Name:
OPPEN
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-21 */ /** *Submitted for verification at Etherscan.io on 2022-08-03 */ // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.9.0; abstract contract Context { function _msgSender() internal view returns (address payable) { return payable(msg.sender); } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/od/ai/nu/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address lpPair, uint); function getPair(address tokenA, address tokenB) external view returns (address lpPair); function createPair(address tokenA, address tokenB) external returns (address lpPair); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } 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 OPPEN is Context, IERC20Upgradeable { // Ownership moved to in-contract for customizability. address private _owner; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => bool) lpPairs; uint256 private timeSinceLastPair = 0; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; mapping(address => bool) public bots; mapping (address => bool) private _liquidityHolders; uint256 private startingSupply; string private _name; string private _symbol; uint256 public _reflectFee = 0; uint256 public _liquidityFee = 0; uint256 public _marketingFee =1500; uint256 public _buyReflectFee = _reflectFee; uint256 public _buyLiquidityFee = _liquidityFee; uint256 public _buyMarketingFee = _marketingFee; uint256 public _sellReflectFee = 0; uint256 public _sellLiquidityFee = 0; uint256 public _sellMarketingFee = 1500; uint256 public _transferReflectFee = 0; uint256 public _transferLiquidityFee = 0; uint256 public _transferMarketingFee = 0; uint256 private maxReflectFee = 1000; uint256 private maxLiquidityFee = 1000; uint256 private maxMarketingFee = 2200; uint256 public _liquidityRatio = 0; uint256 public _marketingRatio = 0; uint256 private masterTaxDivisor = 10000; uint256 public MarketShare = 1; uint256 public DevShare = 0; uint256 public ValueDivisor = 1; uint256 private constant MAX = ~uint256(0); uint8 private _decimals; uint256 private _decimalsMul; uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeTotal; IUniswapV2Router02 public dexRouter; address public lpPair; // UNI ROUTER address public _routerAddress; address public DEAD = 0x000000000000000000000000000000000000dEaD; address public ZERO = 0x0000000000000000000000000000000000000000; address payable private _devWallet; address payable private _marketWallet; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; uint256 private _maxTxAmount; uint256 public maxTxAmountUI; uint256 private _maxWalletSize; uint256 public maxWalletSizeUI; uint256 private swapThreshold; uint256 private swapAmount; bool tradingEnabled = false; bool public _hasLiqBeenAdded = false; uint256 private _liqAddBlock = 0; uint256 private _liqAddStamp = 0; bool private sameBlockActive = true; mapping (address => uint256) private lastTrade; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SniperCaught(address sniperAddress); uint256 Planted; bool contractInitialized = false; modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } constructor () payable { // Set the owner. _owner = msg.sender; if (block.chainid == 56) { _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E; } else if (block.chainid == 97) { _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3; } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 5) { _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else { revert(); } _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _liquidityHolders[owner()] = true; _approve(_msgSender(), _routerAddress, MAX); _approve(address(this), _routerAddress, MAX); } receive() external payable {} function Manhattan(address payable setMarketWallet, address payable setDevWallet) external onlyOwner { require(!contractInitialized); _marketWallet = payable(setMarketWallet); _devWallet = payable(setDevWallet); _name = unicode"OπEN"; _symbol = "OPPEN"; startingSupply = 2_000_0000; if (startingSupply < 20000000) { _decimals = 9; _decimalsMul = _decimals; } else { _decimals = 9; _decimalsMul = _decimals; } _tTotal = startingSupply * (10**_decimalsMul); _rTotal = (MAX - (MAX % _tTotal)); dexRouter = IUniswapV2Router02(_routerAddress); lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this)); lpPairs[lpPair] = true; _allowances[address(this)][address(dexRouter)] = type(uint256).max; _maxTxAmount = (_tTotal * 15) / 1000; maxTxAmountUI = (startingSupply * 15) / 1000; _maxWalletSize = (_tTotal * 15) / 1000; maxWalletSizeUI = (startingSupply * 15) / 1000; swapThreshold = (_tTotal * 5) / 10000; swapAmount = (_tTotal * 5) / 1000; approve(_routerAddress, type(uint256).max); contractInitialized = true; _rOwned[owner()] = _rTotal; emit Transfer(ZERO, owner(), _tTotal); _approve(address(this), address(dexRouter), type(uint256).max); _transfer(owner(), address(this), balanceOf(owner())); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); Planted = block.number; } //=============================================================================================================== //=============================================================================================================== //=============================================================================================================== // Ownable removed as a lib and added here to allow for custom transfers and recnouncements. // This allows for removal of ownership privelages from the owner once renounced or transferred. function owner() public view returns (address) { return _owner; } function transferOwner(address newOwner) external onlyOwner() { require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address."); require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address."); setExcludedFromFee(_owner, false); setExcludedFromFee(newOwner, true); setExcludedFromReward(newOwner, true); if (_devWallet == payable(_owner)) _devWallet = payable(newOwner); _allowances[_owner][newOwner] = balanceOf(_owner); if(balanceOf(_owner) > 0) { _transfer(_owner, newOwner, balanceOf(_owner)); } _owner = newOwner; emit OwnershipTransferred(_owner, newOwner); } function renounceOwnership() public virtual onlyOwner() { setExcludedFromFee(_owner, false); _owner = address(0); emit OwnershipTransferred(_owner, address(0)); } //=============================================================================================================== //=============================================================================================================== //=============================================================================================================== function totalSupply() external view override returns (uint256) { return _tTotal; } function decimals() external view returns (uint8) { return _decimals; } function symbol() external view returns (string memory) { return _symbol; } function name() external view returns (string memory) { return _name; } function getOwner() external view returns (address) { return owner(); } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } 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 approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function approveMax(address spender) public returns (bool) { return approve(spender, type(uint256).max); } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue); return true; } function setNewRouter(address newRouter) external onlyOwner() { IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter); address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH()); if (get_pair == address(0)) { lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH()); } else { lpPair = get_pair; } dexRouter = _newRouter; _approve(address(this), newRouter, MAX); } function setLpPair(address pair, bool enabled) external onlyOwner { if (enabled == false) { lpPairs[pair] = false; } else { if (timeSinceLastPair != 0) { require(block.timestamp - timeSinceLastPair > 1 weeks, "Cannot set a new pair this week!"); } lpPairs[pair] = true; timeSinceLastPair = block.timestamp; } } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner { require(reflect <= maxReflectFee && liquidity <= maxLiquidityFee && marketing <= maxMarketingFee ); require(reflect + liquidity + marketing <= 4900); _buyReflectFee = reflect; _buyLiquidityFee = liquidity; _buyMarketingFee = marketing; } function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner { require(reflect <= maxReflectFee && liquidity <= maxLiquidityFee && marketing <= maxMarketingFee ); require(reflect + liquidity + marketing <= 4900); _sellReflectFee = reflect; _sellLiquidityFee = liquidity; _sellMarketingFee = marketing; } function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner { require(reflect <= maxReflectFee && liquidity <= maxLiquidityFee && marketing <= maxMarketingFee ); require(reflect + liquidity + marketing <= 4900); _transferReflectFee = reflect; _transferLiquidityFee = liquidity; _transferMarketingFee = marketing; } function setValues(uint256 ms, uint256 ds, uint256 vd) external onlyOwner { MarketShare = ms; DevShare = ds; ValueDivisor = vd; } function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner { _liquidityRatio = liquidity; _marketingRatio = marketing; } function MaxTx(uint256 percent, uint256 divisor) external onlyOwner { uint256 check = (_tTotal * percent) / divisor; require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply."); _maxTxAmount = check; maxTxAmountUI = (startingSupply * percent) / divisor; } function WalletSize(uint256 percent, uint256 divisor) external onlyOwner { uint256 check = (_tTotal * percent) / divisor; require(check >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply."); _maxWalletSize = check; maxWalletSizeUI = (startingSupply * percent) / divisor; } function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner { swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor; swapAmount = (_tTotal * amountPercent) / amountDivisor; } function NewMarketWallet(address payable newWallet) external onlyOwner { require(_marketWallet != newWallet, "Wallet already set!"); _marketWallet = payable(newWallet); } function NewDevWallet(address payable newWallet) external onlyOwner { require(_devWallet != newWallet, "Wallet already set!"); _devWallet = payable(newWallet); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setExcludedFromFee(address account, bool enabled) public onlyOwner { _isExcludedFromFee[account] = enabled; } function setExcludedFromReward(address account, bool enabled) public onlyOwner { if (enabled == true) { require(!_isExcluded[account], "Account is already excluded."); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } else if (enabled == false) { 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 totalFees() public view returns (uint256) { return _tFeeTotal; } function _hasLimits(address from, address to) internal view returns (bool) { return from != owner() && to != owner() && !_liquidityHolders[to] && !_liquidityHolders[from] && to != DEAD && to != address(0) && from != address(this); } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } function _approve(address sender, address spender, uint256 amount) internal { require(sender != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[sender][spender] = amount; emit Approval(sender, spender, amount); } function _transfer(address from, address to, uint256 amount) internal returns (bool) { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(_hasLimits(from, to)) { if(!tradingEnabled) { revert("Trading not yet enabled!"); } if (sameBlockActive) { if (lpPairs[from]){ require(lastTrade[to] != block.number); lastTrade[to] = block.number; } else { require(lastTrade[from] != block.number); lastTrade[from] = block.number; } } require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); require(!bots[from] && !bots[to], "Account is blacklisted!"); if(to != _routerAddress && !lpPairs[to]) { require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize."); } } bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } if (lpPairs[to]) { if (!inSwapAndLiquify && swapAndLiquifyEnabled ) { uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= swapThreshold) { if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; } swapAndLiquify(contractTokenBalance); } } } return _finalizeTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap { if (_liquidityRatio + _marketingRatio == 0) return; uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2; uint256 toSwapForEth = contractTokenBalance - toLiquify; address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( toSwapForEth, 0, path, address(this), block.timestamp ); uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2; if (toLiquify > 0) { dexRouter.addLiquidityETH{value: liquidityBalance}( address(this), toLiquify, 0, 0, DEAD, block.timestamp ); emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify); } if (contractTokenBalance - toLiquify > 0) { uint256 OperationsFee = (address(this).balance); uint256 marketFee = OperationsFee/(ValueDivisor)*(MarketShare); uint256 devfeeshare = OperationsFee/(ValueDivisor)*(DevShare); _marketWallet.transfer(marketFee); _devWallet.transfer(devfeeshare); } } function _checkLiquidityAdd(address from, address to) internal { require(!_hasLiqBeenAdded, "Liquidity already added and marked."); if (!_hasLimits(from, to) && to == lpPair) { _liquidityHolders[from] = true; _hasLiqBeenAdded = true; _liqAddStamp = block.timestamp; swapAndLiquifyEnabled = true; emit SwapAndLiquifyEnabledUpdated(true); } } function Trinity() public onlyOwner { require(!tradingEnabled, "Trading already enabled!"); setExcludedFromReward(address(this), true); setExcludedFromReward(lpPair, true); tradingEnabled = true; swapAndLiquifyEnabled = true; } function FatMan(address[] memory bots_) public onlyOwner { for (uint256 i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } function LittleBoy(address notbot) public onlyOwner { bots[notbot] = false; } struct ExtraValues { uint256 tTransferAmount; uint256 tFee; uint256 tLiquidity; uint256 rTransferAmount; uint256 rAmount; uint256 rFee; } function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) { if (!_hasLiqBeenAdded) { _checkLiquidityAdd(from, to); if (!_hasLiqBeenAdded && _hasLimits(from, to)) { revert("Only owner can transfer at this time."); } } ExtraValues memory values = _getValues(from, to, tAmount, takeFee); _rOwned[from] = _rOwned[from] - values.rAmount; _rOwned[to] = _rOwned[to] + values.rTransferAmount; if (_isExcluded[from] && !_isExcluded[to]) { _tOwned[from] = _tOwned[from] - tAmount; } else if (!_isExcluded[from] && _isExcluded[to]) { _tOwned[to] = _tOwned[to] + values.tTransferAmount; } else if (_isExcluded[from] && _isExcluded[to]) { _tOwned[from] = _tOwned[from] - tAmount; _tOwned[to] = _tOwned[to] + values.tTransferAmount; } if (values.tLiquidity > 0) _takeLiquidity(from, values.tLiquidity); if (values.rFee > 0 || values.tFee > 0) _takeReflect(values.rFee, values.tFee); emit Transfer(from, to, values.tTransferAmount); return true; } function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) { ExtraValues memory values; uint256 currentRate = _getRate(); values.rAmount = tAmount * currentRate; if(takeFee) { if (lpPairs[to]) { _reflectFee = _sellReflectFee; _liquidityFee = _sellLiquidityFee; _marketingFee = _sellMarketingFee; } else if (lpPairs[from]) { _reflectFee = _buyReflectFee; _liquidityFee = _buyLiquidityFee; _marketingFee = _buyMarketingFee; } else { _reflectFee = _transferReflectFee; _liquidityFee = _transferLiquidityFee; _marketingFee = _transferMarketingFee; } values.tFee = (tAmount * _reflectFee) / masterTaxDivisor; values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / masterTaxDivisor; values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity); values.rFee = values.tFee * currentRate; } else { values.tFee = 0; values.tLiquidity = 0; values.tTransferAmount = tAmount; values.rFee = 0; } values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate)); return values; } function _getRate() internal view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / tSupply; } function _getCurrentSupply() internal 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 - _rOwned[_excluded[i]]; tSupply = tSupply - _tOwned[_excluded[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeReflect(uint256 rFee, uint256 tFee) internal { _rTotal = _rTotal - rFee; _tFeeTotal = _tFeeTotal + tFee; } function takeETHback() external onlyOwner { payable(owner()).transfer(address(this).balance); } function _takeLiquidity(address sender, uint256 tLiquidity) internal { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity * currentRate; _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity; if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity; emit Transfer(sender, address(this), tLiquidity); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"FatMan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"LittleBoy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"setMarketWallet","type":"address"},{"internalType":"address payable","name":"setDevWallet","type":"address"}],"name":"Manhattan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MarketShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"MaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"NewDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"NewMarketWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Trinity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ValueDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"WalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","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":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","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":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"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":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ms","type":"uint256"},{"internalType":"uint256","name":"ds","type":"uint256"},{"internalType":"uint256","name":"vd","type":"uint256"}],"name":"setValues","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":"takeETHback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260006004819055600e819055600f8190556105dc6010819055601182905560128290556013819055601482905560158290556016556017819055601881905560198190556103e8601a819055601b55610898601c55601d819055601e819055612710601f556001602081905560218290556022819055602b80546001600160a01b031990811661dead17909155602c805482169055602e805460ff60a81b191690556035805461ffff19169055603683905560378390556038805460ff199081169093178155603b805490931690925582541633179091554614156200011057602a80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000199565b46606114156200014657602a80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000199565b4660011480620001565750466004145b80620001625750466005145b156200019457602a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000199565b600080fd5b600160066000620001b26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600a906200020b6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620002546200023f3390565b602a546001600160a01b031660001962000276565b602a54620002709030906001600160a01b031660001962000276565b620003a2565b6001600160a01b038316620002de5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620003415760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002d5565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6140a480620003b26000396000f3fe6080604052600436106103e85760003560e01c80636cbdd5e311610208578063bfd7928411610118578063da4b33c7116100ab578063e7c281d61161007a578063e7c281d614610b4f578063ea08d30b14610b6f578063eafb5a3c14610b85578063f6540ec714610ba5578063fb78680d14610bbb57600080fd5b8063da4b33c714610abe578063dc44b6a014610ade578063dd62ed3e14610af4578063e6d97f1714610b3a57600080fd5b8063c9987e98116100e7578063c9987e9814610a53578063d038b07e14610a68578063d4154e8514610a7e578063d9e6646014610a9e57600080fd5b8063bfd79284146109d7578063c49b9a8014610a07578063c5d2418914610a27578063c860795214610a3d57600080fd5b80638da5cb5b1161019b578063a9059cbb1161016a578063a9059cbb14610941578063aebe12c414610961578063b746454c14610981578063bac3052b146109a1578063bbcea6bf146109c157600080fd5b80638da5cb5b146108ce57806395d89b41146108ec578063a457c2d714610901578063a5a84a811461092157600080fd5b806380c581d1116101d757806380c581d11461085f57806388790a681461087f57806388f8202014610895578063893d20e8146108ce57600080fd5b80636cbdd5e3146107fe57806370a0823114610814578063715018a61461083457806371e078d51461084957600080fd5b8063384f6b51116103035780635342acb411610296578063640384091161026557806364038409146107725780636612e66f146107885780636639dd93146107a85780636bc87c3a146107c85780636c6d9fa1146107de57600080fd5b80635342acb4146106d9578063571ac8b014610712578063575f18e51461073257806358fa63ca1461075257600080fd5b80634a74bb02116102d25780634a74bb02146106635780634ef3cce5146106845780634fb2e45d1461069a57806350a8e016146106ba57600080fd5b8063384f6b51146105f7578063395093511461060d578063452ed4f11461062d57806345e8c85c1461064d57600080fd5b806315639c1b1161037b57806323b872dd1161034a57806323b872dd146105755780632d83811914610595578063313ce567146105b5578063356e2f13146105d757600080fd5b806315639c1b1461051e57806317eade331461053457806318160ddd1461054a57806322976e0d1461055f57600080fd5b80630e954d8e116103b75780630e954d8e146104a3578063111be316146104c757806313114a9d146104e957806313e46192146104fe57600080fd5b806303fd2a45146103f457806306fdde03146104315780630758d92414610453578063095ea7b31461047357600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50602b54610414906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561043d57600080fd5b50610446610bdb565b60405161042891906139c0565b34801561045f57600080fd5b50602854610414906001600160a01b031681565b34801561047f57600080fd5b5061049361048e366004613a3a565b610c6d565b6040519015158152602001610428565b3480156104af57600080fd5b506104b960215481565b604051908152602001610428565b3480156104d357600080fd5b506104e76104e2366004613a66565b610c84565b005b3480156104f557600080fd5b506027546104b9565b34801561050a57600080fd5b506104e7610519366004613aa2565b610cc5565b34801561052a57600080fd5b506104b9600e5481565b34801561054057600080fd5b506104b960225481565b34801561055657600080fd5b506025546104b9565b34801561056b57600080fd5b506104b960105481565b34801561058157600080fd5b50610493610590366004613ad7565b610fb9565b3480156105a157600080fd5b506104b96105b0366004613b18565b61100c565b3480156105c157600080fd5b5060235460405160ff9091168152602001610428565b3480156105e357600080fd5b506104e76105f2366004613b47565b611090565b34801561060357600080fd5b506104b9601d5481565b34801561061957600080fd5b50610493610628366004613a3a565b611122565b34801561063957600080fd5b50602954610414906001600160a01b031681565b34801561065957600080fd5b506104b960175481565b34801561066f57600080fd5b50602e5461049390600160a81b900460ff1681565b34801561069057600080fd5b506104b9601e5481565b3480156106a657600080fd5b506104e76106b5366004613c0c565b611159565b3480156106c657600080fd5b5060355461049390610100900460ff1681565b3480156106e557600080fd5b506104936106f4366004613c0c565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561071e57600080fd5b5061049361072d366004613c0c565b6112fb565b34801561073e57600080fd5b506104e761074d366004613a66565b611309565b34801561075e57600080fd5b50602c54610414906001600160a01b031681565b34801561077e57600080fd5b506104b960305481565b34801561079457600080fd5b506104e76107a3366004613aa2565b61138f565b3480156107b457600080fd5b506104e76107c3366004613c29565b6113e4565b3480156107d457600080fd5b506104b9600f5481565b3480156107ea57600080fd5b506104e76107f9366004613a66565b611419565b34801561080a57600080fd5b506104b960195481565b34801561082057600080fd5b506104b961082f366004613c0c565b61149f565b34801561084057600080fd5b506104e76114fe565b34801561085557600080fd5b506104b960205481565b34801561086b57600080fd5b506104e761087a366004613aa2565b61157d565b34801561088b57600080fd5b506104b960155481565b3480156108a157600080fd5b506104936108b0366004613c0c565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108da57600080fd5b506000546001600160a01b0316610414565b3480156108f857600080fd5b50610446611660565b34801561090d57600080fd5b5061049361091c366004613a3a565b61166f565b34801561092d57600080fd5b506104e761093c366004613c4b565b6116a6565b34801561094d57600080fd5b5061049361095c366004613a3a565b611c1e565b34801561096d57600080fd5b506104e761097c366004613c0c565b611c2b565b34801561098d57600080fd5b506104e761099c366004613c0c565b611c76565b3480156109ad57600080fd5b506104e76109bc366004613c0c565b611d16565b3480156109cd57600080fd5b506104b960145481565b3480156109e357600080fd5b506104936109f2366004613c0c565b60096020526000908152604090205460ff1681565b348015610a1357600080fd5b506104e7610a22366004613c84565b611db6565b348015610a3357600080fd5b506104b960135481565b348015610a4957600080fd5b506104b960165481565b348015610a5f57600080fd5b506104e7611e38565b348015610a7457600080fd5b506104b960115481565b348015610a8a57600080fd5b506104e7610a99366004613c29565b611e9f565b348015610aaa57600080fd5b50602a54610414906001600160a01b031681565b348015610aca57600080fd5b506104e7610ad9366004613c29565b611f92565b348015610aea57600080fd5b506104b960125481565b348015610b0057600080fd5b506104b9610b0f366004613c4b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b4657600080fd5b506104e761207a565b348015610b5b57600080fd5b506104e7610b6a366004613a66565b61213b565b348015610b7b57600080fd5b506104b960185481565b348015610b9157600080fd5b506104e7610ba0366004613c0c565b6121c1565b348015610bb157600080fd5b506104b960325481565b348015610bc757600080fd5b506104e7610bd6366004613c9f565b61254b565b6060600c8054610bea90613cd1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1690613cd1565b8015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b5050505050905090565b6000610c7a3384846125b4565b5060015b92915050565b6000546001600160a01b03163314610cb75760405162461bcd60e51b8152600401610cae90613d0c565b60405180910390fd5b602092909255602155602255565b6000546001600160a01b03163314610cef5760405162461bcd60e51b8152600401610cae90613d0c565b60018115151415610e24576001600160a01b03821660009081526007602052604090205460ff1615610d635760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cae565b6001600160a01b03821660009081526001602052604090205415610dbd576001600160a01b038216600090815260016020526040902054610da39061100c565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80610fb5576001600160a01b03821660009081526007602052604090205460ff16610e915760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cae565b60005b600854811015610fb357826001600160a01b031660088281548110610ebb57610ebb613d41565b6000918252602090912001546001600160a01b03161415610fa15760088054610ee690600190613d6d565b81548110610ef657610ef6613d41565b600091825260209091200154600880546001600160a01b039092169183908110610f2257610f22613d41565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610f7a57610f7a613d84565b600082815260209020810160001990810180546001600160a01b0319169055019055610fb3565b80610fab81613d9a565b915050610e94565b505b5050565b6000610fc68484846126d8565b506001600160a01b038416600090815260056020908152604080832033808552925290912054611002918691610ffd908690613d6d565b6125b4565b5060019392505050565b60006026548211156110735760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cae565b600061107d612b92565b90506110898184613dcb565b9392505050565b6000546001600160a01b031633146110ba5760405162461bcd60e51b8152600401610cae90613d0c565b60005b8151811015610fb5576001600960008484815181106110de576110de613d41565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061111a81613d9a565b9150506110bd565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c7a918590610ffd908690613ddf565b6000546001600160a01b031633146111835760405162461bcd60e51b8152600401610cae90613d0c565b6001600160a01b0381166111a95760405162461bcd60e51b8152600401610cae90613df7565b602b546001600160a01b03828116911614156111d75760405162461bcd60e51b8152600401610cae90613df7565b600080546111f0916001600160a01b039091169061138f565b6111fb81600161138f565b611206816001610cc5565b600054602d546001600160a01b039081169116141561123b57602d80546001600160a01b0319166001600160a01b0383161790555b600054611250906001600160a01b031661149f565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611289911661149f565b11156112b0576000546112ae906001600160a01b0316826112a98261149f565b6126d8565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610c7e82600019610c6d565b6000546001600160a01b031633146113335760405162461bcd60e51b8152600401610cae90613d0c565b601a5483111580156113475750601b548211155b80156113555750601c548111155b61135e57600080fd5b6113248161136c8486613ddf565b6113769190613ddf565b111561138157600080fd5b601792909255601855601955565b6000546001600160a01b031633146113b95760405162461bcd60e51b8152600401610cae90613d0c565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461140e5760405162461bcd60e51b8152600401610cae90613d0c565b601d91909155601e55565b6000546001600160a01b031633146114435760405162461bcd60e51b8152600401610cae90613d0c565b601a5483111580156114575750601b548211155b80156114655750601c548111155b61146e57600080fd5b6113248161147c8486613ddf565b6114869190613ddf565b111561149157600080fd5b601192909255601255601355565b6001600160a01b03811660009081526007602052604081205460ff16156114dc57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c7e9061100c565b6000546001600160a01b031633146115285760405162461bcd60e51b8152600401610cae90613d0c565b60008054611541916001600160a01b039091169061138f565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146115a75760405162461bcd60e51b8152600401610cae90613d0c565b806115ce57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156116355762093a80600454426115e89190613d6d565b116116355760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610cae565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600d8054610bea90613cd1565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c7a918590610ffd908690613d6d565b6000546001600160a01b031633146116d05760405162461bcd60e51b8152600401610cae90613d0c565b603b5460ff16156116e057600080fd5b602e80546001600160a01b038085166001600160a01b031992831617909255602d8054928416929091169190911790556040805180820190915260058082526427e7c022a760d91b602090920191825261173c91600c91613927565b506040805180820190915260058082526427a82822a760d91b602090920191825261176991600d91613927565b506301312d00600b556023805460ff1916600990811790915560245560245461179390600a613f38565b600b546117a09190613f44565b60258190556117b190600019613f63565b6117bd90600019613d6d565b602655602a54602880546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561181757600080fd5b505afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f9190613f77565b6001600160a01b031663c9c65396602860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118ab57600080fd5b505afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190613f77565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561192a57600080fd5b505af115801561193e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119629190613f77565b602980546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff191660011790553083526005825280832060285490941683529290522060001990556025546103e8906119ca90600f613f44565b6119d49190613dcb565b602f55600b546103e8906119e990600f613f44565b6119f39190613dcb565b6030556025546103e890611a0890600f613f44565b611a129190613dcb565b603155600b546103e890611a2790600f613f44565b611a319190613dcb565b60325560255461271090611a46906005613f44565b611a509190613dcb565b6033556025546103e890611a65906005613f44565b611a6f9190613dcb565b603455602a54611a8a906001600160a01b0316600019610c6d565b50603b805460ff19166001908117909155602654906000611ab36000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611adf6000546001600160a01b031690565b602c546025546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602854611b429030906001600160a01b03166000196125b4565b611b6d611b576000546001600160a01b031690565b306112a961082f6000546001600160a01b031690565b506028546001600160a01b031663f305d7194730611b8a8161149f565b600080611b9f6000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611bc196959493929190613f94565b6060604051808303818588803b158015611bda57600080fd5b505af1158015611bee573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c139190613fcf565b505043603a55505050565b60006110023384846126d8565b6000546001600160a01b03163314611c555760405162461bcd60e51b8152600401610cae90613d0c565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314611ca05760405162461bcd60e51b8152600401610cae90613d0c565b602e546001600160a01b0382811691161415611cf45760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610cae565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d405760405162461bcd60e51b8152600401610cae90613d0c565b602d546001600160a01b0382811691161415611d945760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610cae565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611de05760405162461bcd60e51b8152600401610cae90613d0c565b602e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611e2d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e625760405162461bcd60e51b8152600401610cae90613d0c565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611e9c573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611ec95760405162461bcd60e51b8152600401610cae90613d0c565b60008183602554611eda9190613f44565b611ee49190613dcb565b90506103e8602554611ef69190613dcb565b811015611f6b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cae565b602f819055600b548290611f80908590613f44565b611f8a9190613dcb565b603055505050565b6000546001600160a01b03163314611fbc5760405162461bcd60e51b8152600401610cae90613d0c565b60008183602554611fcd9190613f44565b611fd79190613dcb565b90506103e8602554611fe99190613dcb565b8110156120535760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610cae565b6031819055600b548290612068908590613f44565b6120729190613dcb565b603255505050565b6000546001600160a01b031633146120a45760405162461bcd60e51b8152600401610cae90613d0c565b60355460ff16156120f75760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cae565b612102306001610cc5565b602954612119906001600160a01b03166001610cc5565b6035805460ff19166001179055602e805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146121655760405162461bcd60e51b8152600401610cae90613d0c565b601a5483111580156121795750601b548211155b80156121875750601c548111155b61219057600080fd5b6113248161219e8486613ddf565b6121a89190613ddf565b11156121b357600080fd5b601492909255601555601655565b6000546001600160a01b031633146121eb5760405162461bcd60e51b8152600401610cae90613d0c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561222b57600080fd5b505afa15801561223f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122639190613f77565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156122ab57600080fd5b505afa1580156122bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e39190613f77565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561232957600080fd5b505afa15801561233d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123619190613f77565b90506001600160a01b03811661250757816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156123aa57600080fd5b505afa1580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190613f77565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561242a57600080fd5b505afa15801561243e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124629190613f77565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e29190613f77565b602980546001600160a01b0319166001600160a01b0392909216919091179055612523565b602980546001600160a01b0319166001600160a01b0383161790555b602880546001600160a01b0319166001600160a01b038416179055610fb330846000196125b4565b6000546001600160a01b031633146125755760405162461bcd60e51b8152600401610cae90613d0c565b82846025546125849190613f44565b61258e9190613dcb565b60335560255481906125a1908490613f44565b6125ab9190613dcb565b60345550505050565b6001600160a01b0383166126165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cae565b6001600160a01b0382166126775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cae565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661273e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cae565b6001600160a01b0383166127a05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cae565b600082116128025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cae565b61280c8484612bb5565b15612aba5760355460ff166128635760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cae565b60385460ff1615612915576001600160a01b03841660009081526003602052604090205460ff16156128d4576001600160a01b0383166000908152603960205260409020544314156128b457600080fd5b6001600160a01b0383166000908152603960205260409020439055612915565b6001600160a01b0384166000908152603960205260409020544314156128f957600080fd5b6001600160a01b03841660009081526039602052604090204390555b602f548211156129785760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cae565b6001600160a01b03841660009081526009602052604090205460ff161580156129ba57506001600160a01b03831660009081526009602052604090205460ff16155b612a065760405162461bcd60e51b815260206004820152601760248201527f4163636f756e7420697320626c61636b6c6973746564210000000000000000006044820152606401610cae565b602a546001600160a01b03848116911614801590612a3d57506001600160a01b03831660009081526003602052604090205460ff16155b15612aba5760315482612a4f8561149f565b612a599190613ddf565b1115612aba5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610cae565b6001600160a01b03841660009081526006602052604090205460019060ff1680612afc57506001600160a01b03841660009081526006602052604090205460ff165b15612b05575060005b6001600160a01b03841660009081526003602052604090205460ff1615612b7d57602e54600160a01b900460ff16158015612b495750602e54600160a81b900460ff165b15612b7d576000612b593061149f565b90506033548110612b7b576034548110612b7257506034545b612b7b81612c75565b505b612b8985858584613029565b95945050505050565b6000806000612b9f6133aa565b9092509050612bae8183613dcb565b9250505090565b600080546001600160a01b03848116911614801590612be257506000546001600160a01b03838116911614155b8015612c0757506001600160a01b0382166000908152600a602052604090205460ff16155b8015612c2c57506001600160a01b0383166000908152600a602052604090205460ff16155b8015612c465750602b546001600160a01b03838116911614155b8015612c5a57506001600160a01b03821615155b801561108957506001600160a01b0383163014159392505050565b602e805460ff60a01b1916600160a01b179055601e54601d54612c989190613ddf565b612ca157613019565b60006002601e54601d54612cb59190613ddf565b601d54612cc29085613f44565b612ccc9190613dcb565b612cd69190613dcb565b90506000612ce48284613d6d565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612d1e57612d1e613d41565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d7257600080fd5b505afa158015612d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612daa9190613f77565b81600181518110612dbd57612dbd613d41565b6001600160a01b03928316602091820292909201015260285460405163791ac94760e01b815291169063791ac94790612e03908590600090869030904290600401613ffd565b600060405180830381600087803b158015612e1d57600080fd5b505af1158015612e31573d6000803e3d6000fd5b5050505060006002601e54601d54612e499190613ddf565b601d54612e569047613f44565b612e609190613dcb565b612e6a9190613dcb565b90508315612f4957602854602b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612eb29230928b92600092839216904290600401613f94565b6060604051808303818588803b158015612ecb57600080fd5b505af1158015612edf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f049190613fcf565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612f558587613d6d565b1115613014576020546022544791600091612f709084613dcb565b612f7a9190613f44565b9050600060215460225484612f8f9190613dcb565b612f999190613f44565b602e546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015612fd4573d6000803e3d6000fd5b50602d546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561300f573d6000803e3d6000fd5b505050505b505050505b50602e805460ff60a01b19169055565b603554600090610100900460ff166130bd57613045858561352d565b603554610100900460ff1615801561306257506130628585612bb5565b156130bd5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610cae565b60006130cb86868686613647565b60808101516001600160a01b0388166000908152600160205260409020549192506130f591613d6d565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461312c9190613ddf565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561318057506001600160a01b03851660009081526007602052604090205460ff16155b156131c7576001600160a01b0386166000908152600260205260409020546131a9908590613d6d565b6001600160a01b038716600090815260026020526040902055613307565b6001600160a01b03861660009081526007602052604090205460ff1615801561320857506001600160a01b03851660009081526007602052604090205460ff165b156132505780516001600160a01b0386166000908152600260205260409020546132329190613ddf565b6001600160a01b038616600090815260026020526040902055613307565b6001600160a01b03861660009081526007602052604090205460ff16801561329057506001600160a01b03851660009081526007602052604090205460ff165b15613307576001600160a01b0386166000908152600260205260409020546132b9908590613d6d565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546132ed9190613ddf565b6001600160a01b0386166000908152600260205260409020555b60408101511561331f5761331f868260400151613835565b60008160a001511180613336575060008160200151115b1561334d5761334d8160a001518260200151613901565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161339691815260200190565b60405180910390a350600195945050505050565b6026546025546000918291825b6008548110156134fc578260016000600884815481106133d9576133d9613d41565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613444575081600260006008848154811061341d5761341d613d41565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561345a57602654602554945094505050509091565b600160006008838154811061347157613471613d41565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134a09084613d6d565b925060026000600883815481106134b9576134b9613d41565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134e89083613d6d565b9150806134f481613d9a565b9150506133b7565b5060255460265461350d9190613dcb565b821015613524576026546025549350935050509091565b90939092509050565b603554610100900460ff16156135915760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610cae565b61359b8282612bb5565b1580156135b557506029546001600160a01b038281169116145b15610fb5576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556035805461ff00191661010017905542603755602e805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161363b91901515815260200190565b60405180910390a15050565b6136806040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6136b96040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006136c3612b92565b90506136cf8186613f44565b608083015283156137df576001600160a01b03861660009081526003602052604090205460ff161561371257601454600e55601554600f5560165460105561375d565b6001600160a01b03871660009081526003602052604090205460ff161561374a57601154600e55601254600f5560135460105561375d565b601754600e55601854600f556019546010555b601f54600e5461376d9087613f44565b6137779190613dcb565b6020830152601f54601054600f5461378f9190613ddf565b6137999087613f44565b6137a39190613dcb565b6040830181905260208301516137b99190613ddf565b6137c39086613d6d565b825260208201516137d5908290613f44565b60a08301526137f8565b6000602083018190526040830181905285835260a08301525b8082604001516138089190613f44565b8260a001516138179190613ddf565b82608001516138269190613d6d565b60608301525095945050505050565b600061383f612b92565b9050600061384d8284613f44565b3060009081526001602052604090205490915061386b908290613ddf565b3060009081526001602090815260408083209390935560079052205460ff16156138bb57306000908152600260205260409020546138aa908490613ddf565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160265461390f9190613d6d565b602655602754613920908290613ddf565b6027555050565b82805461393390613cd1565b90600052602060002090601f016020900481019282613955576000855561399b565b82601f1061396e57805160ff191683800117855561399b565b8280016001018555821561399b579182015b8281111561399b578251825591602001919060010190613980565b506139a79291506139ab565b5090565b5b808211156139a757600081556001016139ac565b600060208083528351808285015260005b818110156139ed578581018301518582016040015282016139d1565b818111156139ff576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611e9c57600080fd5b8035613a3581613a15565b919050565b60008060408385031215613a4d57600080fd5b8235613a5881613a15565b946020939093013593505050565b600080600060608486031215613a7b57600080fd5b505081359360208301359350604090920135919050565b80358015158114613a3557600080fd5b60008060408385031215613ab557600080fd5b8235613ac081613a15565b9150613ace60208401613a92565b90509250929050565b600080600060608486031215613aec57600080fd5b8335613af781613a15565b92506020840135613b0781613a15565b929592945050506040919091013590565b600060208284031215613b2a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215613b5a57600080fd5b823567ffffffffffffffff80821115613b7257600080fd5b818501915085601f830112613b8657600080fd5b813581811115613b9857613b98613b31565b8060051b604051601f19603f83011681018181108582111715613bbd57613bbd613b31565b604052918252848201925083810185019188831115613bdb57600080fd5b938501935b82851015613c0057613bf185613a2a565b84529385019392850192613be0565b98975050505050505050565b600060208284031215613c1e57600080fd5b813561108981613a15565b60008060408385031215613c3c57600080fd5b50508035926020909101359150565b60008060408385031215613c5e57600080fd5b8235613c6981613a15565b91506020830135613c7981613a15565b809150509250929050565b600060208284031215613c9657600080fd5b61108982613a92565b60008060008060808587031215613cb557600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680613ce557607f821691505b60208210811415613d0657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613d7f57613d7f613d57565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613dae57613dae613d57565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613dda57613dda613db5565b500490565b60008219821115613df257613df2613d57565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b80851115613e8f578160001904821115613e7557613e75613d57565b80851615613e8257918102915b93841c9390800290613e59565b509250929050565b600082613ea657506001610c7e565b81613eb357506000610c7e565b8160018114613ec95760028114613ed357613eef565b6001915050610c7e565b60ff841115613ee457613ee4613d57565b50506001821b610c7e565b5060208310610133831016604e8410600b8410161715613f12575081810a610c7e565b613f1c8383613e54565b8060001904821115613f3057613f30613d57565b029392505050565b60006110898383613e97565b6000816000190483118215151615613f5e57613f5e613d57565b500290565b600082613f7257613f72613db5565b500690565b600060208284031215613f8957600080fd5b815161108981613a15565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613fe457600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561404d5784516001600160a01b031683529383019391830191600101614028565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122012badbfe5072395b229bf0d790533ac0c784097bb30292754ff7d0e68a4b40f064736f6c63430008090033
Deployed Bytecode
0x6080604052600436106103e85760003560e01c80636cbdd5e311610208578063bfd7928411610118578063da4b33c7116100ab578063e7c281d61161007a578063e7c281d614610b4f578063ea08d30b14610b6f578063eafb5a3c14610b85578063f6540ec714610ba5578063fb78680d14610bbb57600080fd5b8063da4b33c714610abe578063dc44b6a014610ade578063dd62ed3e14610af4578063e6d97f1714610b3a57600080fd5b8063c9987e98116100e7578063c9987e9814610a53578063d038b07e14610a68578063d4154e8514610a7e578063d9e6646014610a9e57600080fd5b8063bfd79284146109d7578063c49b9a8014610a07578063c5d2418914610a27578063c860795214610a3d57600080fd5b80638da5cb5b1161019b578063a9059cbb1161016a578063a9059cbb14610941578063aebe12c414610961578063b746454c14610981578063bac3052b146109a1578063bbcea6bf146109c157600080fd5b80638da5cb5b146108ce57806395d89b41146108ec578063a457c2d714610901578063a5a84a811461092157600080fd5b806380c581d1116101d757806380c581d11461085f57806388790a681461087f57806388f8202014610895578063893d20e8146108ce57600080fd5b80636cbdd5e3146107fe57806370a0823114610814578063715018a61461083457806371e078d51461084957600080fd5b8063384f6b51116103035780635342acb411610296578063640384091161026557806364038409146107725780636612e66f146107885780636639dd93146107a85780636bc87c3a146107c85780636c6d9fa1146107de57600080fd5b80635342acb4146106d9578063571ac8b014610712578063575f18e51461073257806358fa63ca1461075257600080fd5b80634a74bb02116102d25780634a74bb02146106635780634ef3cce5146106845780634fb2e45d1461069a57806350a8e016146106ba57600080fd5b8063384f6b51146105f7578063395093511461060d578063452ed4f11461062d57806345e8c85c1461064d57600080fd5b806315639c1b1161037b57806323b872dd1161034a57806323b872dd146105755780632d83811914610595578063313ce567146105b5578063356e2f13146105d757600080fd5b806315639c1b1461051e57806317eade331461053457806318160ddd1461054a57806322976e0d1461055f57600080fd5b80630e954d8e116103b75780630e954d8e146104a3578063111be316146104c757806313114a9d146104e957806313e46192146104fe57600080fd5b806303fd2a45146103f457806306fdde03146104315780630758d92414610453578063095ea7b31461047357600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50602b54610414906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561043d57600080fd5b50610446610bdb565b60405161042891906139c0565b34801561045f57600080fd5b50602854610414906001600160a01b031681565b34801561047f57600080fd5b5061049361048e366004613a3a565b610c6d565b6040519015158152602001610428565b3480156104af57600080fd5b506104b960215481565b604051908152602001610428565b3480156104d357600080fd5b506104e76104e2366004613a66565b610c84565b005b3480156104f557600080fd5b506027546104b9565b34801561050a57600080fd5b506104e7610519366004613aa2565b610cc5565b34801561052a57600080fd5b506104b9600e5481565b34801561054057600080fd5b506104b960225481565b34801561055657600080fd5b506025546104b9565b34801561056b57600080fd5b506104b960105481565b34801561058157600080fd5b50610493610590366004613ad7565b610fb9565b3480156105a157600080fd5b506104b96105b0366004613b18565b61100c565b3480156105c157600080fd5b5060235460405160ff9091168152602001610428565b3480156105e357600080fd5b506104e76105f2366004613b47565b611090565b34801561060357600080fd5b506104b9601d5481565b34801561061957600080fd5b50610493610628366004613a3a565b611122565b34801561063957600080fd5b50602954610414906001600160a01b031681565b34801561065957600080fd5b506104b960175481565b34801561066f57600080fd5b50602e5461049390600160a81b900460ff1681565b34801561069057600080fd5b506104b9601e5481565b3480156106a657600080fd5b506104e76106b5366004613c0c565b611159565b3480156106c657600080fd5b5060355461049390610100900460ff1681565b3480156106e557600080fd5b506104936106f4366004613c0c565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561071e57600080fd5b5061049361072d366004613c0c565b6112fb565b34801561073e57600080fd5b506104e761074d366004613a66565b611309565b34801561075e57600080fd5b50602c54610414906001600160a01b031681565b34801561077e57600080fd5b506104b960305481565b34801561079457600080fd5b506104e76107a3366004613aa2565b61138f565b3480156107b457600080fd5b506104e76107c3366004613c29565b6113e4565b3480156107d457600080fd5b506104b9600f5481565b3480156107ea57600080fd5b506104e76107f9366004613a66565b611419565b34801561080a57600080fd5b506104b960195481565b34801561082057600080fd5b506104b961082f366004613c0c565b61149f565b34801561084057600080fd5b506104e76114fe565b34801561085557600080fd5b506104b960205481565b34801561086b57600080fd5b506104e761087a366004613aa2565b61157d565b34801561088b57600080fd5b506104b960155481565b3480156108a157600080fd5b506104936108b0366004613c0c565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108da57600080fd5b506000546001600160a01b0316610414565b3480156108f857600080fd5b50610446611660565b34801561090d57600080fd5b5061049361091c366004613a3a565b61166f565b34801561092d57600080fd5b506104e761093c366004613c4b565b6116a6565b34801561094d57600080fd5b5061049361095c366004613a3a565b611c1e565b34801561096d57600080fd5b506104e761097c366004613c0c565b611c2b565b34801561098d57600080fd5b506104e761099c366004613c0c565b611c76565b3480156109ad57600080fd5b506104e76109bc366004613c0c565b611d16565b3480156109cd57600080fd5b506104b960145481565b3480156109e357600080fd5b506104936109f2366004613c0c565b60096020526000908152604090205460ff1681565b348015610a1357600080fd5b506104e7610a22366004613c84565b611db6565b348015610a3357600080fd5b506104b960135481565b348015610a4957600080fd5b506104b960165481565b348015610a5f57600080fd5b506104e7611e38565b348015610a7457600080fd5b506104b960115481565b348015610a8a57600080fd5b506104e7610a99366004613c29565b611e9f565b348015610aaa57600080fd5b50602a54610414906001600160a01b031681565b348015610aca57600080fd5b506104e7610ad9366004613c29565b611f92565b348015610aea57600080fd5b506104b960125481565b348015610b0057600080fd5b506104b9610b0f366004613c4b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b4657600080fd5b506104e761207a565b348015610b5b57600080fd5b506104e7610b6a366004613a66565b61213b565b348015610b7b57600080fd5b506104b960185481565b348015610b9157600080fd5b506104e7610ba0366004613c0c565b6121c1565b348015610bb157600080fd5b506104b960325481565b348015610bc757600080fd5b506104e7610bd6366004613c9f565b61254b565b6060600c8054610bea90613cd1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1690613cd1565b8015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b5050505050905090565b6000610c7a3384846125b4565b5060015b92915050565b6000546001600160a01b03163314610cb75760405162461bcd60e51b8152600401610cae90613d0c565b60405180910390fd5b602092909255602155602255565b6000546001600160a01b03163314610cef5760405162461bcd60e51b8152600401610cae90613d0c565b60018115151415610e24576001600160a01b03821660009081526007602052604090205460ff1615610d635760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cae565b6001600160a01b03821660009081526001602052604090205415610dbd576001600160a01b038216600090815260016020526040902054610da39061100c565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80610fb5576001600160a01b03821660009081526007602052604090205460ff16610e915760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cae565b60005b600854811015610fb357826001600160a01b031660088281548110610ebb57610ebb613d41565b6000918252602090912001546001600160a01b03161415610fa15760088054610ee690600190613d6d565b81548110610ef657610ef6613d41565b600091825260209091200154600880546001600160a01b039092169183908110610f2257610f22613d41565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610f7a57610f7a613d84565b600082815260209020810160001990810180546001600160a01b0319169055019055610fb3565b80610fab81613d9a565b915050610e94565b505b5050565b6000610fc68484846126d8565b506001600160a01b038416600090815260056020908152604080832033808552925290912054611002918691610ffd908690613d6d565b6125b4565b5060019392505050565b60006026548211156110735760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cae565b600061107d612b92565b90506110898184613dcb565b9392505050565b6000546001600160a01b031633146110ba5760405162461bcd60e51b8152600401610cae90613d0c565b60005b8151811015610fb5576001600960008484815181106110de576110de613d41565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061111a81613d9a565b9150506110bd565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c7a918590610ffd908690613ddf565b6000546001600160a01b031633146111835760405162461bcd60e51b8152600401610cae90613d0c565b6001600160a01b0381166111a95760405162461bcd60e51b8152600401610cae90613df7565b602b546001600160a01b03828116911614156111d75760405162461bcd60e51b8152600401610cae90613df7565b600080546111f0916001600160a01b039091169061138f565b6111fb81600161138f565b611206816001610cc5565b600054602d546001600160a01b039081169116141561123b57602d80546001600160a01b0319166001600160a01b0383161790555b600054611250906001600160a01b031661149f565b600080546001600160a01b039081168252600560209081526040808420868416855290915282209290925580549091611289911661149f565b11156112b0576000546112ae906001600160a01b0316826112a98261149f565b6126d8565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610c7e82600019610c6d565b6000546001600160a01b031633146113335760405162461bcd60e51b8152600401610cae90613d0c565b601a5483111580156113475750601b548211155b80156113555750601c548111155b61135e57600080fd5b6113248161136c8486613ddf565b6113769190613ddf565b111561138157600080fd5b601792909255601855601955565b6000546001600160a01b031633146113b95760405162461bcd60e51b8152600401610cae90613d0c565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461140e5760405162461bcd60e51b8152600401610cae90613d0c565b601d91909155601e55565b6000546001600160a01b031633146114435760405162461bcd60e51b8152600401610cae90613d0c565b601a5483111580156114575750601b548211155b80156114655750601c548111155b61146e57600080fd5b6113248161147c8486613ddf565b6114869190613ddf565b111561149157600080fd5b601192909255601255601355565b6001600160a01b03811660009081526007602052604081205460ff16156114dc57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c7e9061100c565b6000546001600160a01b031633146115285760405162461bcd60e51b8152600401610cae90613d0c565b60008054611541916001600160a01b039091169061138f565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146115a75760405162461bcd60e51b8152600401610cae90613d0c565b806115ce57506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156116355762093a80600454426115e89190613d6d565b116116355760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610cae565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600d8054610bea90613cd1565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c7a918590610ffd908690613d6d565b6000546001600160a01b031633146116d05760405162461bcd60e51b8152600401610cae90613d0c565b603b5460ff16156116e057600080fd5b602e80546001600160a01b038085166001600160a01b031992831617909255602d8054928416929091169190911790556040805180820190915260058082526427e7c022a760d91b602090920191825261173c91600c91613927565b506040805180820190915260058082526427a82822a760d91b602090920191825261176991600d91613927565b506301312d00600b556023805460ff1916600990811790915560245560245461179390600a613f38565b600b546117a09190613f44565b60258190556117b190600019613f63565b6117bd90600019613d6d565b602655602a54602880546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561181757600080fd5b505afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f9190613f77565b6001600160a01b031663c9c65396602860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156118ab57600080fd5b505afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190613f77565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561192a57600080fd5b505af115801561193e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119629190613f77565b602980546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff191660011790553083526005825280832060285490941683529290522060001990556025546103e8906119ca90600f613f44565b6119d49190613dcb565b602f55600b546103e8906119e990600f613f44565b6119f39190613dcb565b6030556025546103e890611a0890600f613f44565b611a129190613dcb565b603155600b546103e890611a2790600f613f44565b611a319190613dcb565b60325560255461271090611a46906005613f44565b611a509190613dcb565b6033556025546103e890611a65906005613f44565b611a6f9190613dcb565b603455602a54611a8a906001600160a01b0316600019610c6d565b50603b805460ff19166001908117909155602654906000611ab36000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611adf6000546001600160a01b031690565b602c546025546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602854611b429030906001600160a01b03166000196125b4565b611b6d611b576000546001600160a01b031690565b306112a961082f6000546001600160a01b031690565b506028546001600160a01b031663f305d7194730611b8a8161149f565b600080611b9f6000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611bc196959493929190613f94565b6060604051808303818588803b158015611bda57600080fd5b505af1158015611bee573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c139190613fcf565b505043603a55505050565b60006110023384846126d8565b6000546001600160a01b03163314611c555760405162461bcd60e51b8152600401610cae90613d0c565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b03163314611ca05760405162461bcd60e51b8152600401610cae90613d0c565b602e546001600160a01b0382811691161415611cf45760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610cae565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d405760405162461bcd60e51b8152600401610cae90613d0c565b602d546001600160a01b0382811691161415611d945760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610cae565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611de05760405162461bcd60e51b8152600401610cae90613d0c565b602e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611e2d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e625760405162461bcd60e51b8152600401610cae90613d0c565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611e9c573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611ec95760405162461bcd60e51b8152600401610cae90613d0c565b60008183602554611eda9190613f44565b611ee49190613dcb565b90506103e8602554611ef69190613dcb565b811015611f6b5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cae565b602f819055600b548290611f80908590613f44565b611f8a9190613dcb565b603055505050565b6000546001600160a01b03163314611fbc5760405162461bcd60e51b8152600401610cae90613d0c565b60008183602554611fcd9190613f44565b611fd79190613dcb565b90506103e8602554611fe99190613dcb565b8110156120535760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610cae565b6031819055600b548290612068908590613f44565b6120729190613dcb565b603255505050565b6000546001600160a01b031633146120a45760405162461bcd60e51b8152600401610cae90613d0c565b60355460ff16156120f75760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cae565b612102306001610cc5565b602954612119906001600160a01b03166001610cc5565b6035805460ff19166001179055602e805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146121655760405162461bcd60e51b8152600401610cae90613d0c565b601a5483111580156121795750601b548211155b80156121875750601c548111155b61219057600080fd5b6113248161219e8486613ddf565b6121a89190613ddf565b11156121b357600080fd5b601492909255601555601655565b6000546001600160a01b031633146121eb5760405162461bcd60e51b8152600401610cae90613d0c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561222b57600080fd5b505afa15801561223f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122639190613f77565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156122ab57600080fd5b505afa1580156122bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e39190613f77565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561232957600080fd5b505afa15801561233d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123619190613f77565b90506001600160a01b03811661250757816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156123aa57600080fd5b505afa1580156123be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e29190613f77565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561242a57600080fd5b505afa15801561243e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124629190613f77565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e29190613f77565b602980546001600160a01b0319166001600160a01b0392909216919091179055612523565b602980546001600160a01b0319166001600160a01b0383161790555b602880546001600160a01b0319166001600160a01b038416179055610fb330846000196125b4565b6000546001600160a01b031633146125755760405162461bcd60e51b8152600401610cae90613d0c565b82846025546125849190613f44565b61258e9190613dcb565b60335560255481906125a1908490613f44565b6125ab9190613dcb565b60345550505050565b6001600160a01b0383166126165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cae565b6001600160a01b0382166126775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cae565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661273e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cae565b6001600160a01b0383166127a05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cae565b600082116128025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cae565b61280c8484612bb5565b15612aba5760355460ff166128635760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cae565b60385460ff1615612915576001600160a01b03841660009081526003602052604090205460ff16156128d4576001600160a01b0383166000908152603960205260409020544314156128b457600080fd5b6001600160a01b0383166000908152603960205260409020439055612915565b6001600160a01b0384166000908152603960205260409020544314156128f957600080fd5b6001600160a01b03841660009081526039602052604090204390555b602f548211156129785760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cae565b6001600160a01b03841660009081526009602052604090205460ff161580156129ba57506001600160a01b03831660009081526009602052604090205460ff16155b612a065760405162461bcd60e51b815260206004820152601760248201527f4163636f756e7420697320626c61636b6c6973746564210000000000000000006044820152606401610cae565b602a546001600160a01b03848116911614801590612a3d57506001600160a01b03831660009081526003602052604090205460ff16155b15612aba5760315482612a4f8561149f565b612a599190613ddf565b1115612aba5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610cae565b6001600160a01b03841660009081526006602052604090205460019060ff1680612afc57506001600160a01b03841660009081526006602052604090205460ff165b15612b05575060005b6001600160a01b03841660009081526003602052604090205460ff1615612b7d57602e54600160a01b900460ff16158015612b495750602e54600160a81b900460ff165b15612b7d576000612b593061149f565b90506033548110612b7b576034548110612b7257506034545b612b7b81612c75565b505b612b8985858584613029565b95945050505050565b6000806000612b9f6133aa565b9092509050612bae8183613dcb565b9250505090565b600080546001600160a01b03848116911614801590612be257506000546001600160a01b03838116911614155b8015612c0757506001600160a01b0382166000908152600a602052604090205460ff16155b8015612c2c57506001600160a01b0383166000908152600a602052604090205460ff16155b8015612c465750602b546001600160a01b03838116911614155b8015612c5a57506001600160a01b03821615155b801561108957506001600160a01b0383163014159392505050565b602e805460ff60a01b1916600160a01b179055601e54601d54612c989190613ddf565b612ca157613019565b60006002601e54601d54612cb59190613ddf565b601d54612cc29085613f44565b612ccc9190613dcb565b612cd69190613dcb565b90506000612ce48284613d6d565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612d1e57612d1e613d41565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d7257600080fd5b505afa158015612d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612daa9190613f77565b81600181518110612dbd57612dbd613d41565b6001600160a01b03928316602091820292909201015260285460405163791ac94760e01b815291169063791ac94790612e03908590600090869030904290600401613ffd565b600060405180830381600087803b158015612e1d57600080fd5b505af1158015612e31573d6000803e3d6000fd5b5050505060006002601e54601d54612e499190613ddf565b601d54612e569047613f44565b612e609190613dcb565b612e6a9190613dcb565b90508315612f4957602854602b5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612eb29230928b92600092839216904290600401613f94565b6060604051808303818588803b158015612ecb57600080fd5b505af1158015612edf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f049190613fcf565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612f558587613d6d565b1115613014576020546022544791600091612f709084613dcb565b612f7a9190613f44565b9050600060215460225484612f8f9190613dcb565b612f999190613f44565b602e546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015612fd4573d6000803e3d6000fd5b50602d546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561300f573d6000803e3d6000fd5b505050505b505050505b50602e805460ff60a01b19169055565b603554600090610100900460ff166130bd57613045858561352d565b603554610100900460ff1615801561306257506130628585612bb5565b156130bd5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610cae565b60006130cb86868686613647565b60808101516001600160a01b0388166000908152600160205260409020549192506130f591613d6d565b6001600160a01b038088166000908152600160205260408082209390935560608401519188168152919091205461312c9190613ddf565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561318057506001600160a01b03851660009081526007602052604090205460ff16155b156131c7576001600160a01b0386166000908152600260205260409020546131a9908590613d6d565b6001600160a01b038716600090815260026020526040902055613307565b6001600160a01b03861660009081526007602052604090205460ff1615801561320857506001600160a01b03851660009081526007602052604090205460ff165b156132505780516001600160a01b0386166000908152600260205260409020546132329190613ddf565b6001600160a01b038616600090815260026020526040902055613307565b6001600160a01b03861660009081526007602052604090205460ff16801561329057506001600160a01b03851660009081526007602052604090205460ff165b15613307576001600160a01b0386166000908152600260205260409020546132b9908590613d6d565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546132ed9190613ddf565b6001600160a01b0386166000908152600260205260409020555b60408101511561331f5761331f868260400151613835565b60008160a001511180613336575060008160200151115b1561334d5761334d8160a001518260200151613901565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161339691815260200190565b60405180910390a350600195945050505050565b6026546025546000918291825b6008548110156134fc578260016000600884815481106133d9576133d9613d41565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613444575081600260006008848154811061341d5761341d613d41565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561345a57602654602554945094505050509091565b600160006008838154811061347157613471613d41565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134a09084613d6d565b925060026000600883815481106134b9576134b9613d41565b60009182526020808320909101546001600160a01b031683528201929092526040019020546134e89083613d6d565b9150806134f481613d9a565b9150506133b7565b5060255460265461350d9190613dcb565b821015613524576026546025549350935050509091565b90939092509050565b603554610100900460ff16156135915760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610cae565b61359b8282612bb5565b1580156135b557506029546001600160a01b038281169116145b15610fb5576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556035805461ff00191661010017905542603755602e805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161363b91901515815260200190565b60405180910390a15050565b6136806040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6136b96040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006136c3612b92565b90506136cf8186613f44565b608083015283156137df576001600160a01b03861660009081526003602052604090205460ff161561371257601454600e55601554600f5560165460105561375d565b6001600160a01b03871660009081526003602052604090205460ff161561374a57601154600e55601254600f5560135460105561375d565b601754600e55601854600f556019546010555b601f54600e5461376d9087613f44565b6137779190613dcb565b6020830152601f54601054600f5461378f9190613ddf565b6137999087613f44565b6137a39190613dcb565b6040830181905260208301516137b99190613ddf565b6137c39086613d6d565b825260208201516137d5908290613f44565b60a08301526137f8565b6000602083018190526040830181905285835260a08301525b8082604001516138089190613f44565b8260a001516138179190613ddf565b82608001516138269190613d6d565b60608301525095945050505050565b600061383f612b92565b9050600061384d8284613f44565b3060009081526001602052604090205490915061386b908290613ddf565b3060009081526001602090815260408083209390935560079052205460ff16156138bb57306000908152600260205260409020546138aa908490613ddf565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160265461390f9190613d6d565b602655602754613920908290613ddf565b6027555050565b82805461393390613cd1565b90600052602060002090601f016020900481019282613955576000855561399b565b82601f1061396e57805160ff191683800117855561399b565b8280016001018555821561399b579182015b8281111561399b578251825591602001919060010190613980565b506139a79291506139ab565b5090565b5b808211156139a757600081556001016139ac565b600060208083528351808285015260005b818110156139ed578581018301518582016040015282016139d1565b818111156139ff576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611e9c57600080fd5b8035613a3581613a15565b919050565b60008060408385031215613a4d57600080fd5b8235613a5881613a15565b946020939093013593505050565b600080600060608486031215613a7b57600080fd5b505081359360208301359350604090920135919050565b80358015158114613a3557600080fd5b60008060408385031215613ab557600080fd5b8235613ac081613a15565b9150613ace60208401613a92565b90509250929050565b600080600060608486031215613aec57600080fd5b8335613af781613a15565b92506020840135613b0781613a15565b929592945050506040919091013590565b600060208284031215613b2a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215613b5a57600080fd5b823567ffffffffffffffff80821115613b7257600080fd5b818501915085601f830112613b8657600080fd5b813581811115613b9857613b98613b31565b8060051b604051601f19603f83011681018181108582111715613bbd57613bbd613b31565b604052918252848201925083810185019188831115613bdb57600080fd5b938501935b82851015613c0057613bf185613a2a565b84529385019392850192613be0565b98975050505050505050565b600060208284031215613c1e57600080fd5b813561108981613a15565b60008060408385031215613c3c57600080fd5b50508035926020909101359150565b60008060408385031215613c5e57600080fd5b8235613c6981613a15565b91506020830135613c7981613a15565b809150509250929050565b600060208284031215613c9657600080fd5b61108982613a92565b60008060008060808587031215613cb557600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680613ce557607f821691505b60208210811415613d0657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613d7f57613d7f613d57565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613dae57613dae613d57565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613dda57613dda613db5565b500490565b60008219821115613df257613df2613d57565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b80851115613e8f578160001904821115613e7557613e75613d57565b80851615613e8257918102915b93841c9390800290613e59565b509250929050565b600082613ea657506001610c7e565b81613eb357506000610c7e565b8160018114613ec95760028114613ed357613eef565b6001915050610c7e565b60ff841115613ee457613ee4613d57565b50506001821b610c7e565b5060208310610133831016604e8410600b8410161715613f12575081810a610c7e565b613f1c8383613e54565b8060001904821115613f3057613f30613d57565b029392505050565b60006110898383613e97565b6000816000190483118215151615613f5e57613f5e613d57565b500290565b600082613f7257613f72613db5565b500690565b600060208284031215613f8957600080fd5b815161108981613a15565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613fe457600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561404d5784516001600160a01b031683529383019391830191600101614028565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122012badbfe5072395b229bf0d790533ac0c784097bb30292754ff7d0e68a4b40f064736f6c63430008090033
Deployed Bytecode Sourcemap
8274:25535:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10308:64;;;;;;;;;;-1:-1:-1;10308:64:0;;;;-1:-1:-1;;;;;10308:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;10308:64:0;;;;;;;;16711:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10179:35::-;;;;;;;;;;-1:-1:-1;10179:35:0;;;;-1:-1:-1;;;;;10179:35:0;;;17387:161;;;;;;;;;;-1:-1:-1;17387:161:0;;;;;:::i;:::-;;:::i;:::-;;;1818:14:1;;1811:22;1793:41;;1781:2;1766:18;17387:161:0;1653:187:1;9896:27:0;;;;;;;;;;;;;;;;;;;1991:25:1;;;1979:2;1964:18;9896:27:0;1845:177:1;21019:161:0;;;;;;;;;;-1:-1:-1;21019:161:0;;;;;:::i;:::-;;:::i;:::-;;23957:87;;;;;;;;;;-1:-1:-1;24026:10:0;;23957:87;;23043:906;;;;;;;;;;-1:-1:-1;23043:906:0;;;;;:::i;:::-;;:::i;9031:30::-;;;;;;;;;;;;;;;;9930:31;;;;;;;;;;;;;;;;16464:83;;;;;;;;;;-1:-1:-1;16537:7:0;;16464:83;;9107:34;;;;;;;;;;;;;;;;17684:266;;;;;;;;;;-1:-1:-1;17684:266:0;;;;;:::i;:::-;;:::i;24384:250::-;;;;;;;;;;-1:-1:-1;24384:250:0;;;;;:::i;:::-;;:::i;16553:71::-;;;;;;;;;;-1:-1:-1;16612:9:0;;16553:71;;16612:9;;;;3621:36:1;;3609:2;3594:18;16553:71:0;3479:184:1;29146:166:0;;;;;;;;;;-1:-1:-1;29146:166:0;;;;;:::i;:::-;;:::i;9726:34::-;;;;;;;;;;;;;;;;17958:215;;;;;;;;;;-1:-1:-1;17958:215:0;;;;;:::i;:::-;;:::i;10221:21::-;;;;;;;;;;-1:-1:-1;10221:21:0;;;;-1:-1:-1;;;;;10221:21:0;;;9446:38;;;;;;;;;;;;;;;;10569:41;;;;;;;;;;-1:-1:-1;10569:41:0;;;;-1:-1:-1;;;10569:41:0;;;;;;9767:34;;;;;;;;;;;;;;;;15114:795;;;;;;;;;;-1:-1:-1;15114:795:0;;;;;:::i;:::-;;:::i;10878:36::-;;;;;;;;;;-1:-1:-1;10878:36:0;;;;;;;;;;;19535:123;;;;;;;;;;-1:-1:-1;19535:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;19623:27:0;19599:4;19623:27;;;:18;:27;;;;;;;;;19535:123;17556:120;;;;;;;;;;-1:-1:-1;17556:120:0;;;;;:::i;:::-;;:::i;20556:455::-;;;;;;;;;;-1:-1:-1;20556:455:0;;;;;:::i;:::-;;:::i;10379:64::-;;;;;;;;;;-1:-1:-1;10379:64:0;;;;-1:-1:-1;;;;;10379:64:0;;;10658:28;;;;;;;;;;;;;;;;22903:132;;;;;;;;;;-1:-1:-1;22903:132:0;;;;;:::i;:::-;;:::i;21188:160::-;;;;;;;;;;-1:-1:-1;21188:160:0;;;;;:::i;:::-;;:::i;9068:32::-;;;;;;;;;;;;;;;;19666:435;;;;;;;;;;-1:-1:-1;19666:435:0;;;;;:::i;:::-;;:::i;9538:40::-;;;;;;;;;;;;;;;;17006:198;;;;;;;;;;-1:-1:-1;17006:198:0;;;;;:::i;:::-;;:::i;15917:194::-;;;;;;;;;;;;;:::i;9859:30::-;;;;;;;;;;;;;;;;18975:424;;;;;;;;;;-1:-1:-1;18975:424:0;;;;;:::i;:::-;;:::i;9351:36::-;;;;;;;;;;;;;;;;19407:120;;;;;;;;;;-1:-1:-1;19407:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19499:20:0;19475:4;19499:20;;;:11;:20;;;;;;;;;19407:120;16788:71;;;;;;;;;;-1:-1:-1;16831:7:0;15092:6;-1:-1:-1;;;;;15092:6:0;16788:71;;16630:75;;;;;;;;;;;;;:::i;18181:225::-;;;;;;;;;;-1:-1:-1;18181:225:0;;;;;:::i;:::-;;:::i;12641:1833::-;;;;;;;;;;-1:-1:-1;12641:1833:0;;;;;:::i;:::-;;:::i;17212:167::-;;;;;;;;;;-1:-1:-1;17212:167:0;;;;;:::i;:::-;;:::i;29320:91::-;;;;;;;;;;-1:-1:-1;29320:91:0;;;;;:::i;:::-;;:::i;22333:193::-;;;;;;;;;;-1:-1:-1;22333:193:0;;;;;:::i;:::-;;:::i;22534:184::-;;;;;;;;;;-1:-1:-1;22534:184:0;;;;;:::i;:::-;;:::i;9310:34::-;;;;;;;;;;;;;;;;8828:36;;;;;;;;;;-1:-1:-1;8828:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22724:171;;;;;;;;;;-1:-1:-1;22724:171:0;;;;;:::i;:::-;;:::i;9254:47::-;;;;;;;;;;;;;;;;9394:39;;;;;;;;;;;;;;;;33262:109;;;;;;;;;;;;;:::i;9150:43::-;;;;;;;;;;;;;;;;21356:330;;;;;;;;;;-1:-1:-1;21356:330:0;;;;;:::i;:::-;;:::i;10270:29::-;;;;;;;;;;-1:-1:-1;10270:29:0;;;;-1:-1:-1;;;;;10270:29:0;;;21694:334;;;;;;;;;;-1:-1:-1;21694:334:0;;;;;:::i;:::-;;:::i;9200:47::-;;;;;;;;;;;;;;;;16865:133;;;;;;;;;;-1:-1:-1;16865:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16967:19:0;;;16949:7;16967:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16865:133;28859:279;;;;;;;;;;;;;:::i;20109:439::-;;;;;;;;;;-1:-1:-1;20109:439:0;;;;;:::i;:::-;;:::i;9491:40::-;;;;;;;;;;;;;;;;18414:553;;;;;;;;;;-1:-1:-1;18414:553:0;;;;;:::i;:::-;;:::i;10732:30::-;;;;;;;;;;;;;;;;22036:289;;;;;;;;;;-1:-1:-1;22036:289:0;;;;;:::i;:::-;;:::i;16711:71::-;16750:13;16774:5;16767:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16711:71;:::o;17387:161::-;17462:4;17479:39;260:10;17502:7;17511:6;17479:8;:39::i;:::-;-1:-1:-1;17536:4:0;17387:161;;;;;:::o;21019:::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;;;;;;;;;21104:11:::1;:16:::0;;;;21131:8:::1;:13:::0;21155:12:::1;:17:::0;21019:161::o;23043:906::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;23148:4:::1;23137:15:::0;::::1;;;23133:809;;;-1:-1:-1::0;;;;;23178:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23177:21;23169:62;;;::::0;-1:-1:-1;;;23169:62:0;;8016:2:1;23169:62:0::1;::::0;::::1;7998:21:1::0;8055:2;8035:18;;;8028:30;8094;8074:18;;;8067:58;8142:18;;23169:62:0::1;7814:352:1::0;23169:62:0::1;-1:-1:-1::0;;;;;23249:16:0;::::1;23268:1;23249:16:::0;;;:7:::1;:16;::::0;;;;;:20;23246:116:::1;;-1:-1:-1::0;;;;;23329:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23309:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23290:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23246:116:::1;-1:-1:-1::0;;;;;;23376:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23376:27:0::1;23399:4;23376:27:::0;;::::1;::::0;;;23418:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23418:23:0::1;::::0;;::::1;::::0;;23043:906::o;23133:809::-:1;23463:16:::0;23459:483:::1;;-1:-1:-1::0;;;;;23504:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23496:61;;;::::0;-1:-1:-1;;;23496:61:0;;8373:2:1;23496:61:0::1;::::0;::::1;8355:21:1::0;8412:2;8392:18;;;8385:30;8451;8431:18;;;8424:58;8499:18;;23496:61:0::1;8171:352:1::0;23496:61:0::1;23577:9;23572:359;23596:9;:16:::0;23592:20;::::1;23572:359;;;23658:7;-1:-1:-1::0;;;;;23642:23:0::1;:9;23652:1;23642:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23642:12:0::1;:23;23638:278;;;23705:9;23715:16:::0;;:20:::1;::::0;23734:1:::1;::::0;23715:20:::1;:::i;:::-;23705:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23690:9:::1;:12:::0;;-1:-1:-1;;;;;23705:31:0;;::::1;::::0;23700:1;;23690:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23690:46:0::1;-1:-1:-1::0;;;;;23690:46:0;;::::1;;::::0;;23759:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23802:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23802:28:0::1;::::0;;23853:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23853:15:0;;;;;-1:-1:-1;;;;;;23853:15:0::1;::::0;;;;;23891:5:::1;;23638:278;23614:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23572:359;;;;23459:483;23043:906:::0;;:::o;17684:266::-;17782:4;17799:36;17809:6;17817:9;17828:6;17799:9;:36::i;:::-;-1:-1:-1;;;;;;17877:19:0;;;;;;:11;:19;;;;;;;;260:10;17877:33;;;;;;;;;17846:74;;17855:6;;17877:42;;17913:6;;17877:42;:::i;:::-;17846:8;:74::i;:::-;-1:-1:-1;17938:4:0;17684:266;;;;;:::o;24384:250::-;24450:7;24489;;24478;:18;;24470:73;;;;-1:-1:-1;;;24470:73:0;;9396:2:1;24470:73:0;;;9378:21:1;9435:2;9415:18;;;9408:30;9474:34;9454:18;;;9447:62;-1:-1:-1;;;9525:18:1;;;9518:40;9575:19;;24470:73:0;9194:406:1;24470:73:0;24554:19;24577:10;:8;:10::i;:::-;24554:33;-1:-1:-1;24605:21:0;24554:33;24605:7;:21;:::i;:::-;24598:28;24384:250;-1:-1:-1;;;24384:250:0:o;29146:166::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;29219:9:::1;29214:91;29238:5;:12;29234:1;:16;29214:91;;;29289:4;29272;:14;29277:5;29283:1;29277:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29272:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;29272:14:0;:21;;-1:-1:-1;;29272:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29252:3;::::1;::::0;::::1;:::i;:::-;;;;29214:91;;17958:215:::0;260:10;18046:4;18095:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18095:34:0;;;;;;;;;;18046:4;;18063:80;;18086:7;;18095:47;;18132:10;;18095:47;:::i;15114:795::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15195:22:0;::::1;15187:96;;;;-1:-1:-1::0;;;15187:96:0::1;;;;;;;:::i;:::-;15314:4;::::0;-1:-1:-1;;;;;15302:16:0;;::::1;15314:4:::0;::::1;15302:16;;15294:90;;;;-1:-1:-1::0;;;15294:90:0::1;;;;;;;:::i;:::-;15414:6;::::0;;15395:33:::1;::::0;-1:-1:-1;;;;;15414:6:0;;::::1;::::0;15395:18:::1;:33::i;:::-;15439:34;15458:8;15468:4;15439:18;:34::i;:::-;15484:37;15506:8;15516:4;15484:21;:37::i;:::-;15568:6;::::0;15546:10:::1;::::0;-1:-1:-1;;;;;15546:10:0;;::::1;15568:6:::0;::::1;15546:29;15542:78;;;15590:10;:30:::0;;-1:-1:-1;;;;;;15590:30:0::1;-1:-1:-1::0;;;;;15590:30:0;::::1;;::::0;;15542:78:::1;15683:6;::::0;15673:17:::1;::::0;-1:-1:-1;;;;;15683:6:0::1;15673:9;:17::i;:::-;15641:19;15653:6:::0;;-1:-1:-1;;;;;15653:6:0;;::::1;15641:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;15714:6;;15641:19;;15704:17:::1;::::0;15714:6:::1;15704:9;:17::i;:::-;:21;15701:99;;;15752:6;::::0;15742:46:::1;::::0;-1:-1:-1;;;;;15752:6:0::1;15760:8:::0;15770:17:::1;15752:6:::0;15770:9:::1;:17::i;:::-;15742:9;:46::i;:::-;;15701:99;15820:6;:17:::0;;-1:-1:-1;;;;;;15820:17:0::1;-1:-1:-1::0;;;;;15820:17:0;::::1;::::0;;::::1;::::0;;15853:38:::1;::::0;15820:17;;;;15853:38:::1;::::0;15820:6;15853:38:::1;15114:795:::0;:::o;17556:120::-;17609:4;17633:35;17641:7;-1:-1:-1;;17633:7:0;:35::i;20556:455::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;20686:13:::1;;20675:7;:24;;:73;;;;;20733:15;;20720:9;:28;;20675:73;:122;;;;;20782:15;;20769:9;:28;;20675:122;20667:149;;;::::0;::::1;;20870:4;20857:9:::0;20835:19:::1;20845:9:::0;20835:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;20827:48;;;::::0;::::1;;20886:19;:29:::0;;;;20926:21:::1;:33:::0;20970:21:::1;:33:::0;20556:455::o;22903:132::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22990:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;22990:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22903:132::o;21188:160::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;21275:15:::1;:27:::0;;;;21313:15:::1;:27:::0;21188:160::o;19666:435::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;19791:13:::1;;19780:7;:24;;:73;;;;;19838:15;;19825:9;:28;;19780:73;:122;;;;;19887:15;;19874:9;:28;;19780:122;19772:149;;;::::0;::::1;;19975:4;19962:9:::0;19940:19:::1;19950:9:::0;19940:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;19932:48;;;::::0;::::1;;19991:14;:24:::0;;;;20026:16:::1;:28:::0;20065:16:::1;:28:::0;19666:435::o;17006:198::-;-1:-1:-1;;;;;17096:20:0;;17072:7;17096:20;;;:11;:20;;;;;;;;17092:49;;;-1:-1:-1;;;;;;17125:16:0;;;;;:7;:16;;;;;;;17006:198::o;17092:49::-;-1:-1:-1;;;;;17179:16:0;;;;;;:7;:16;;;;;;17159:37;;:19;:37::i;15917:194::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;16003:6:::1;::::0;;15984:33:::1;::::0;-1:-1:-1;;;;;16003:6:0;;::::1;::::0;15984:18:::1;:33::i;:::-;16045:1;16028:19:::0;;-1:-1:-1;;;;;;16028:19:0::1;::::0;;16063:40:::1;::::0;16045:1;;16063:40:::1;::::0;16045:1;;16063:40:::1;15917:194::o:0;18975:424::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;19056:16;19052:340:::1;;-1:-1:-1::0;;;;;;19089:13:0::1;19105:5;19089:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;19089:21:0::1;::::0;;23043:906::o;19052:340::-:1;19147:17;::::0;:22;19143:153:::1;;19236:7;19216:17;;19198:15;:35;;;;:::i;:::-;:45;19190:90;;;::::0;-1:-1:-1;;;19190:90:0;;10627:2:1;19190:90:0::1;::::0;::::1;10609:21:1::0;;;10646:18;;;10639:30;10705:34;10685:18;;;10678:62;10757:18;;19190:90:0::1;10425:356:1::0;19190:90:0::1;-1:-1:-1::0;;;;;19310:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;19310:20:0::1;19326:4;19310:20;::::0;;19365:15:::1;19345:17;:35:::0;18975:424;;:::o;16630:75::-;16671:13;16695:7;16688:14;;;;;:::i;18181:225::-;260:10;18274:4;18323:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18323:34:0;;;;;;;;;;18274:4;;18291:85;;18314:7;;18323:52;;18360:15;;18323:52;:::i;12641:1833::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;12762:19:::1;::::0;::::1;;12761:20;12753:29;;;::::0;::::1;;12795:13;:40:::0;;-1:-1:-1;;;;;12795:40:0;;::::1;-1:-1:-1::0;;;;;;12795:40:0;;::::1;;::::0;;;12846:10:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;12893:22:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;12893:22:0::1;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:22:::1;:::i;:::-;-1:-1:-1::0;12926:17:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;12926:17:0::1;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:17:::1;:::i;:::-;-1:-1:-1::0;12971:10:0::1;12954:14;:27:::0;13123:9:::1;:13:::0;;-1:-1:-1;;13123:13:0::1;13135:1;13123:13:::0;;::::1;::::0;;;13151:12:::1;:24:::0;13229:12:::1;::::0;13225:16:::1;::::0;:2:::1;:16;:::i;:::-;13207:14;;:35;;;;:::i;:::-;13197:7;:45:::0;;;13271:13:::1;::::0;-1:-1:-1;;13271:13:0::1;:::i;:::-;13264:21;::::0;-1:-1:-1;;13264:21:0::1;:::i;:::-;13253:7;:33:::0;13330:14:::1;::::0;13299:9:::1;:46:::0;;-1:-1:-1;;;;;;13299:46:0::1;-1:-1:-1::0;;;;;13330:14:0;;::::1;13299:46:::0;;::::1;::::0;;13383:19:::1;::::0;;-1:-1:-1;;;13383:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;13330:14;13383:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13365:49:0::1;;13415:9;;;;;;;;;-1:-1:-1::0;;;;;13415:9:0::1;-1:-1:-1::0;;;;;13415:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13365:82;::::0;-1:-1:-1;;;;;;13365:82:0::1;::::0;;;;;;-1:-1:-1;;;;;12936:15:1;;;13365:82:0::1;::::0;::::1;12918:34:1::0;13441:4:0::1;12968:18:1::0;;;12961:43;12853:18;;13365:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13356:6;:91:::0;;-1:-1:-1;;;;;;13356:91:0::1;-1:-1:-1::0;;;;;13356:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13458:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;13458:22:0::1;-1:-1:-1::0;13458:22:0::1;::::0;;13511:4:::1;13491:26:::0;;:11:::1;:26:::0;;;;;13526:9:::1;::::0;;;::::1;13491:46:::0;;;;;;-1:-1:-1;;13491:66:0;;13594:7:::1;::::0;13610:4:::1;::::0;13594:12:::1;::::0;13604:2:::1;13594:12;:::i;:::-;13593:21;;;;:::i;:::-;13578:12;:36:::0;13642:14:::1;::::0;13665:4:::1;::::0;13642:19:::1;::::0;13659:2:::1;13642:19;:::i;:::-;13641:28;;;;:::i;:::-;13625:13;:44:::0;13698:7:::1;::::0;13714:4:::1;::::0;13698:12:::1;::::0;13708:2:::1;13698:12;:::i;:::-;13697:21;;;;:::i;:::-;13680:14;:38:::0;13748:14:::1;::::0;13771:4:::1;::::0;13748:19:::1;::::0;13765:2:::1;13748:19;:::i;:::-;13747:28;;;;:::i;:::-;13729:15;:46:::0;13803:7:::1;::::0;13818:5:::1;::::0;13803:11:::1;::::0;13813:1:::1;13803:11;:::i;:::-;13802:21;;;;:::i;:::-;13786:13;:37:::0;13848:7:::1;::::0;13863:4:::1;::::0;13848:11:::1;::::0;13858:1:::1;13848:11;:::i;:::-;13847:20;;;;:::i;:::-;13834:10;:33:::0;13888:14:::1;::::0;13880:42:::1;::::0;-1:-1:-1;;;;;13888:14:0::1;-1:-1:-1::0;;13880:7:0::1;:42::i;:::-;-1:-1:-1::0;13935:19:0::1;:26:::0;;-1:-1:-1;;13935:26:0::1;13957:4;13935:26:::0;;::::1;::::0;;;13991:7:::1;::::0;;13935:19:::1;13980:7;15065::::0;15092:6;-1:-1:-1;;;;;15092:6:0;;15027:79;13980:7:::1;-1:-1:-1::0;;;;;13972:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13972:16:0;:26;14029:7:::1;15065::::0;15092:6;-1:-1:-1;;;;;15092:6:0;;15027:79;14029:7:::1;14023:4;::::0;14038:7:::1;::::0;14014:32:::1;::::0;1991:25:1;;;-1:-1:-1;;;;;14014:32:0;;::::1;::::0;14023:4;;::::1;::::0;14014:32:::1;::::0;1979:2:1;1964:18;14014:32:0::1;;;;;;;14091:9;::::0;14059:62:::1;::::0;14076:4:::1;::::0;-1:-1:-1;;;;;14091:9:0::1;-1:-1:-1::0;;14059:8:0::1;:62::i;:::-;14134:53;14144:7;15065::::0;15092:6;-1:-1:-1;;;;;15092:6:0;;15027:79;14144:7:::1;14161:4;14168:18;14178:7;15065::::0;15092:6;-1:-1:-1;;;;;15092:6:0;;15027:79;14134:53:::1;-1:-1:-1::0;14214:9:0::1;::::0;-1:-1:-1;;;;;14214:9:0::1;:25;14247:21;14292:4;14312:24;14292:4:::0;14312:9:::1;:24::i;:::-;14351:1;14368::::0;14385:7:::1;15065::::0;15092:6;-1:-1:-1;;;;;15092:6:0;;15027:79;14385:7:::1;14407:15;14214:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14454:12:0::1;14444:7;:22:::0;-1:-1:-1;;;12641:1833:0:o;17212:167::-;17290:4;17307:42;260:10;17331:9;17342:6;17307:9;:42::i;29320:91::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29383:12:0::1;29398:5;29383:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;29383:20:0::1;::::0;;29320:91::o;22333:193::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;22423:13:::1;::::0;-1:-1:-1;;;;;22423:26:0;;::::1;:13:::0;::::1;:26;;22415:58;;;::::0;-1:-1:-1;;;22415:58:0;;14140:2:1;22415:58:0::1;::::0;::::1;14122:21:1::0;14179:2;14159:18;;;14152:30;-1:-1:-1;;;14198:18:1;;;14191:49;14257:18;;22415:58:0::1;13938:343:1::0;22415:58:0::1;22484:13;:34:::0;;-1:-1:-1;;;;;;22484:34:0::1;-1:-1:-1::0;;;;;22484:34:0;;;::::1;::::0;;;::::1;::::0;;22333:193::o;22534:184::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;22621:10:::1;::::0;-1:-1:-1;;;;;22621:23:0;;::::1;:10:::0;::::1;:23;;22613:55;;;::::0;-1:-1:-1;;;22613:55:0;;14140:2:1;22613:55:0::1;::::0;::::1;14122:21:1::0;14179:2;14159:18;;;14152:30;-1:-1:-1;;;14198:18:1;;;14191:49;14257:18;;22613:55:0::1;13938:343:1::0;22613:55:0::1;22679:10;:31:::0;;-1:-1:-1;;;;;;22679:31:0::1;-1:-1:-1::0;;;;;22679:31:0;;;::::1;::::0;;;::::1;::::0;;22534:184::o;22724:171::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;22801:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;22801:32:0::1;-1:-1:-1::0;;;;22801:32:0;;::::1;;::::0;;22849:38:::1;::::0;::::1;::::0;::::1;::::0;22825:8;1818:14:1;1811:22;1793:41;;1781:2;1766:18;;1653:187;22849:38:0::1;;;;;;;;22724:171:::0;:::o;33262:109::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;15065:7;15092:6;;33315:48:::1;::::0;-1:-1:-1;;;;;15092:6:0;;;;33341:21:::1;33315:48:::0;::::1;;;::::0;33341:21;;33315:48;15065:7;33315:48;33341:21;15092:6;33315:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33262:109::o:0;21356:330::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;21435:13:::1;21473:7;21462;21452;;:17;;;;:::i;:::-;21451:29;;;;:::i;:::-;21435:45;;21519:4;21509:7;;:14;;;;:::i;:::-;21499:5;:25;;21491:93;;;::::0;-1:-1:-1;;;21491:93:0;;14488:2:1;21491:93:0::1;::::0;::::1;14470:21:1::0;14527:2;14507:18;;;14500:30;14566:34;14546:18;;;14539:62;14637:25;14617:18;;;14610:53;14680:19;;21491:93:0::1;14286:419:1::0;21491:93:0::1;21595:12;:20:::0;;;21643:14:::1;::::0;21671:7;;21643:24:::1;::::0;21660:7;;21643:24:::1;:::i;:::-;21642:36;;;;:::i;:::-;21626:13;:52:::0;-1:-1:-1;;;21356:330:0:o;21694:334::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;21778:13:::1;21816:7;21805;21795;;:17;;;;:::i;:::-;21794:29;;;;:::i;:::-;21778:45;;21862:4;21852:7;;:14;;;;:::i;:::-;21842:5;:25;;21834:88;;;::::0;-1:-1:-1;;;21834:88:0;;14912:2:1;21834:88:0::1;::::0;::::1;14894:21:1::0;14951:2;14931:18;;;14924:30;14990:34;14970:18;;;14963:62;-1:-1:-1;;;15041:18:1;;;15034:48;15099:19;;21834:88:0::1;14710:414:1::0;21834:88:0::1;21933:14;:22:::0;;;21985:14:::1;::::0;22013:7;;21985:24:::1;::::0;22002:7;;21985:24:::1;:::i;:::-;21984:36;;;;:::i;:::-;21966:15;:54:::0;-1:-1:-1;;;21694:334:0:o;28859:279::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;28915:14:::1;::::0;::::1;;28914:15;28906:52;;;::::0;-1:-1:-1;;;28906:52:0;;15331:2:1;28906:52:0::1;::::0;::::1;15313:21:1::0;15370:2;15350:18;;;15343:30;15409:26;15389:18;;;15382:54;15453:18;;28906:52:0::1;15129:348:1::0;28906:52:0::1;28969:42;28999:4;29006;28969:21;:42::i;:::-;29044:6;::::0;29022:35:::1;::::0;-1:-1:-1;;;;;29044:6:0::1;::::0;29022:21:::1;:35::i;:::-;29070:14;:21:::0;;-1:-1:-1;;29070:21:0::1;29087:4;29070:21;::::0;;29102::::1;:28:::0;;-1:-1:-1;;;;29102:28:0::1;-1:-1:-1::0;;;29102:28:0::1;::::0;;28859:279::o;20109:439::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;20235:13:::1;;20224:7;:24;;:73;;;;;20282:15;;20269:9;:28;;20224:73;:122;;;;;20331:15;;20318:9;:28;;20224:122;20216:149;;;::::0;::::1;;20419:4;20406:9:::0;20384:19:::1;20394:9:::0;20384:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;20376:48;;;::::0;::::1;;20435:15;:25:::0;;;;20471:17:::1;:29:::0;20511:17:::1;:29:::0;20109:439::o;18414:553::-;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;18487:29:::1;18538:9;18487:61;;18559:16;18596:10;-1:-1:-1::0;;;;;18596:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18578:47:0::1;;18634:4;18641:10;-1:-1:-1::0;;;;;18641:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18578:81;::::0;-1:-1:-1;;;;;;18578:81:0::1;::::0;;;;;;-1:-1:-1;;;;;12936:15:1;;;18578:81:0::1;::::0;::::1;12918:34:1::0;12988:15;;12968:18;;;12961:43;12853:18;;18578:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18559:100:::0;-1:-1:-1;;;;;;18674:22:0;::::1;18670:207;;18740:10;-1:-1:-1::0;;;;;18740:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18722:50:0::1;;18781:4;18788:10;-1:-1:-1::0;;;;;18788:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18722:84;::::0;-1:-1:-1;;;;;;18722:84:0::1;::::0;;;;;;-1:-1:-1;;;;;12936:15:1;;;18722:84:0::1;::::0;::::1;12918:34:1::0;12988:15;;12968:18;;;12961:43;12853:18;;18722:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18713:6;:93:::0;;-1:-1:-1;;;;;;18713:93:0::1;-1:-1:-1::0;;;;;18713:93:0;;;::::1;::::0;;;::::1;::::0;;18670:207:::1;;;18848:6;:17:::0;;-1:-1:-1;;;;;;18848:17:0::1;-1:-1:-1::0;;;;;18848:17:0;::::1;;::::0;;18670:207:::1;18887:9;:22:::0;;-1:-1:-1;;;;;;18887:22:0::1;-1:-1:-1::0;;;;;18887:22:0;::::1;;::::0;;18920:39:::1;18937:4;18944:9:::0;-1:-1:-1;;18920:8:0::1;:39::i;22036:289::-:0;11721:6;;-1:-1:-1;;;;;11721:6:0;260:10;11721:22;11713:67;;;;-1:-1:-1;;;11713:67:0;;;;;;;:::i;:::-;22236:16:::1;22216;22206:7;;:26;;;;:::i;:::-;22205:47;;;;:::i;:::-;22189:13;:63:::0;22277:7:::1;::::0;22304:13;;22277:23:::1;::::0;22287:13;;22277:23:::1;:::i;:::-;22276:41;;;;:::i;:::-;22263:10;:54:::0;-1:-1:-1;;;;22036:289:0:o;24646:342::-;-1:-1:-1;;;;;24741:20:0;;24733:69;;;;-1:-1:-1;;;24733:69:0;;15684:2:1;24733:69:0;;;15666:21:1;15723:2;15703:18;;;15696:30;15762:34;15742:18;;;15735:62;-1:-1:-1;;;15813:18:1;;;15806:34;15857:19;;24733:69:0;15482:400:1;24733:69:0;-1:-1:-1;;;;;24821:21:0;;24813:68;;;;-1:-1:-1;;;24813:68:0;;16089:2:1;24813:68:0;;;16071:21:1;16128:2;16108:18;;;16101:30;16167:34;16147:18;;;16140:62;-1:-1:-1;;;16218:18:1;;;16211:32;16260:19;;24813:68:0;15887:398:1;24813:68:0;-1:-1:-1;;;;;24894:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;24947:33;;1991:25:1;;;24947:33:0;;1964:18:1;24947:33:0;;;;;;;24646:342;;;:::o;24996:1851::-;25075:4;-1:-1:-1;;;;;25100:18:0;;25092:68;;;;-1:-1:-1;;;25092:68:0;;16492:2:1;25092:68:0;;;16474:21:1;16531:2;16511:18;;;16504:30;16570:34;16550:18;;;16543:62;-1:-1:-1;;;16621:18:1;;;16614:35;16666:19;;25092:68:0;16290:401:1;25092:68:0;-1:-1:-1;;;;;25179:16:0;;25171:64;;;;-1:-1:-1;;;25171:64:0;;16898:2:1;25171:64:0;;;16880:21:1;16937:2;16917:18;;;16910:30;16976:34;16956:18;;;16949:62;-1:-1:-1;;;17027:18:1;;;17020:33;17070:19;;25171:64:0;16696:399:1;25171:64:0;25263:1;25254:6;:10;25246:64;;;;-1:-1:-1;;;25246:64:0;;17302:2:1;25246:64:0;;;17284:21:1;17341:2;17321:18;;;17314:30;17380:34;17360:18;;;17353:62;-1:-1:-1;;;17431:18:1;;;17424:39;17480:19;;25246:64:0;17100:405:1;25246:64:0;25324:20;25335:4;25341:2;25324:10;:20::i;:::-;25321:851;;;25365:14;;;;25361:89;;25400:34;;-1:-1:-1;;;25400:34:0;;17712:2:1;25400:34:0;;;17694:21:1;17751:2;17731:18;;;17724:30;17790:26;17770:18;;;17763:54;17834:18;;25400:34:0;17510:348:1;25361:89:0;25468:15;;;;25464:347;;;-1:-1:-1;;;;;25508:13:0;;;;;;:7;:13;;;;;;;;25504:292;;;-1:-1:-1;;;;;25553:13:0;;;;;;:9;:13;;;;;;25570:12;25553:29;;25545:38;;;;;;-1:-1:-1;;;;;25606:13:0;;;;;;:9;:13;;;;;25622:12;25606:28;;25504:292;;;-1:-1:-1;;;;;25691:15:0;;;;;;:9;:15;;;;;;25710:12;25691:31;;25683:40;;;;;;-1:-1:-1;;;;;25746:15:0;;;;;;:9;:15;;;;;25764:12;25746:30;;25504:292;25843:12;;25833:6;:22;;25825:75;;;;-1:-1:-1;;;25825:75:0;;18065:2:1;25825:75:0;;;18047:21:1;18104:2;18084:18;;;18077:30;18143:34;18123:18;;;18116:62;-1:-1:-1;;;18194:18:1;;;18187:38;18242:19;;25825:75:0;17863:404:1;25825:75:0;-1:-1:-1;;;;;25924:10:0;;;;;;:4;:10;;;;;;;;25923:11;:24;;;;-1:-1:-1;;;;;;25939:8:0;;;;;;:4;:8;;;;;;;;25938:9;25923:24;25915:60;;;;-1:-1:-1;;;25915:60:0;;18474:2:1;25915:60:0;;;18456:21:1;18513:2;18493:18;;;18486:30;18552:25;18532:18;;;18525:53;18595:18;;25915:60:0;18272:347:1;25915:60:0;25999:14;;-1:-1:-1;;;;;25993:20:0;;;25999:14;;25993:20;;;;:36;;-1:-1:-1;;;;;;26018:11:0;;;;;;:7;:11;;;;;;;;26017:12;25993:36;25990:171;;;26084:14;;26074:6;26058:13;26068:2;26058:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;26050:95;;;;-1:-1:-1;;;26050:95:0;;18826:2:1;26050:95:0;;;18808:21:1;18865:2;18845:18;;;18838:30;18904:34;18884:18;;;18877:62;-1:-1:-1;;;18955:18:1;;;18948:40;19005:19;;26050:95:0;18624:406:1;26050:95:0;-1:-1:-1;;;;;26215:24:0;;26182:12;26215:24;;;:18;:24;;;;;;26197:4;;26215:24;;;:50;;-1:-1:-1;;;;;;26243:22:0;;;;;;:18;:22;;;;;;;;26215:50;26212:96;;;-1:-1:-1;26291:5:0;26212:96;-1:-1:-1;;;;;26324:11:0;;;;;;:7;:11;;;;;;;;26320:457;;;26357:16;;-1:-1:-1;;;26357:16:0;;;;26356:17;:59;;;;-1:-1:-1;26394:21:0;;-1:-1:-1;;;26394:21:0;;;;26356:59;26352:408;;;26450:28;26481:24;26499:4;26481:9;:24::i;:::-;26450:55;;26552:13;;26528:20;:37;26524:221;;26617:10;;26593:20;:34;26590:77;;-1:-1:-1;26654:10:0;;26590:77;26689:36;26704:20;26689:14;:36::i;:::-;26431:329;26352:408;26795:44;26813:4;26819:2;26823:6;26831:7;26795:17;:44::i;:::-;26788:51;24996:1851;-1:-1:-1;;;;;24996:1851:0:o;32383:161::-;32425:7;32446:15;32463;32482:19;:17;:19::i;:::-;32445:56;;-1:-1:-1;32445:56:0;-1:-1:-1;32519:17:0;32445:56;;32519:17;:::i;:::-;32512:24;;;;32383:161;:::o;24052:324::-;24121:4;15092:6;;-1:-1:-1;;;;;24145:15:0;;;15092:6;;24145:15;;;;:45;;-1:-1:-1;15065:7:0;15092:6;-1:-1:-1;;;;;24177:13:0;;;15092:6;;24177:13;;24145:45;:84;;;;-1:-1:-1;;;;;;24208:21:0;;;;;;:17;:21;;;;;;;;24207:22;24145:84;:125;;;;-1:-1:-1;;;;;;24247:23:0;;;;;;:17;:23;;;;;;;;24246:24;24145:125;:152;;;;-1:-1:-1;24293:4:0;;-1:-1:-1;;;;;24287:10:0;;;24293:4;;24287:10;;24145:152;:185;;;;-1:-1:-1;;;;;;24314:16:0;;;;24145:185;:223;;;;-1:-1:-1;;;;;;24347:21:0;;24363:4;24347:21;;24138:230;24052:324;-1:-1:-1;;;24052:324:0:o;26855:1541::-;11595:16;:23;;-1:-1:-1;;;;11595:23:0;-1:-1:-1;;;11595:23:0;;;26963:15:::1;::::0;26945::::1;::::0;:33:::1;::::0;26963:15;26945:33:::1;:::i;:::-;26941:64;;26998:7;;26941:64;27015:17;27118:1;27098:15;;27080;;:33;;;;:::i;:::-;27060:15;::::0;27037:38:::1;::::0;:20;:38:::1;:::i;:::-;27036:78;;;;:::i;:::-;27035:84;;;;:::i;:::-;27015:104:::0;-1:-1:-1;27132:20:0::1;27155:32;27015:104:::0;27155:20;:32:::1;:::i;:::-;27224:16;::::0;;27238:1:::1;27224:16:::0;;;;;::::1;::::0;;27132:55;;-1:-1:-1;27200:21:0::1;::::0;27224:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27224:16:0::1;27200:40;;27269:4;27251;27256:1;27251:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27251:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27295:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;27295:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;27251:7;;27295:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27285:4;27290:1;27285:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27285:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27324:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;27324:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;27399:12;;27324:9:::1;::::0;27442:4;;27469::::1;::::0;27489:15:::1;::::0;27324:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27530:24;27641:1;27621:15;;27603;;:33;;;;:::i;:::-;27583:15;::::0;27559:39:::1;::::0;:21:::1;:39;:::i;:::-;27558:79;;;;:::i;:::-;27557:85;;;;:::i;:::-;27530:112:::0;-1:-1:-1;27659:13:0;;27655:344:::1;;27689:9;::::0;27860:4:::1;::::0;27689:224:::1;::::0;-1:-1:-1;;;27689:224:0;;-1:-1:-1;;;;;27689:9:0;;::::1;::::0;:25:::1;::::0;27722:16;;27689:224:::1;::::0;27766:4:::1;::::0;27790:9;;27689::::1;::::0;;;27860:4:::1;::::0;27883:15:::1;::::0;27689:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27933:54:0::1;::::0;;20222:25:1;;;20278:2;20263:18;;20256:34;;;20306:18;;;20299:34;;;27933:54:0::1;::::0;-1:-1:-1;20210:2:1;20195:18;27933:54:0::1;;;;;;;27655:344;28048:1;28013:32;28036:9:::0;28013:20;:32:::1;:::i;:::-;:36;28009:380;;;28180:11;::::0;28165:12:::1;::::0;28093:21:::1;::::0;28068::::1;::::0;28150:28:::1;::::0;28093:21;28150:28:::1;:::i;:::-;:42;;;;:::i;:::-;28130:62;;28207:19;28259:8;;28244:12;;28229:13;:28;;;;:::i;:::-;:39;;;;:::i;:::-;28283:13;::::0;:33:::1;::::0;28207:61;;-1:-1:-1;;;;;;28283:13:0::1;::::0;:33;::::1;;;::::0;28306:9;;28283:13:::1;:33:::0;:13;:33;28306:9;28283:13;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28331:10:0::1;::::0;:32:::1;::::0;-1:-1:-1;;;;;28331:10:0;;::::1;::::0;:32;::::1;;;::::0;28351:11;;28331:10:::1;:32:::0;:10;:32;28351:11;28331:10;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28051:338;;;28009:380;26930:1466;;;;11629:1;-1:-1:-1::0;11641:16:0;:24;;-1:-1:-1;;;;11641:24:0;;;26855:1541::o;29625:1278::-;29753:16;;29727:4;;29753:16;;;;;29748:237;;29790:28;29809:4;29815:2;29790:18;:28::i;:::-;29842:16;;;;;;;29841:17;:41;;;;;29862:20;29873:4;29879:2;29862:10;:20::i;:::-;29837:137;;;29907:47;;-1:-1:-1;;;29907:47:0;;20546:2:1;29907:47:0;;;20528:21:1;20585:2;20565:18;;;20558:30;20624:34;20604:18;;;20597:62;-1:-1:-1;;;20675:18:1;;;20668:35;20720:19;;29907:47:0;20344:401:1;29837:137:0;30005:25;30033:38;30044:4;30050:2;30054:7;30063;30033:10;:38::i;:::-;30116:14;;;;-1:-1:-1;;;;;30100:13:0;;;;;;:7;:13;;;;;;30005:66;;-1:-1:-1;30100:30:0;;;:::i;:::-;-1:-1:-1;;;;;30084:13:0;;;;;;;:7;:13;;;;;;:46;;;;30169:22;;;;30155:11;;;;;;;;;;:36;;30169:22;30155:36;:::i;:::-;-1:-1:-1;;;;;30141:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;30208:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;30230:15:0;;;;;;:11;:15;;;;;;;;30229:16;30208:37;30204:416;;;-1:-1:-1;;;;;30278:13:0;;;;;;:7;:13;;;;;;:23;;30294:7;;30278:23;:::i;:::-;-1:-1:-1;;;;;30262:13:0;;;;;;:7;:13;;;;;:39;30204:416;;;-1:-1:-1;;;;;30324:17:0;;;;;;:11;:17;;;;;;;;30323:18;:37;;;;-1:-1:-1;;;;;;30345:15:0;;;;;;:11;:15;;;;;;;;30323:37;30319:301;;;30405:22;;-1:-1:-1;;;;;30391:11:0;;30405:22;30391:11;;;:7;:11;;;;;;:36;;30405:22;30391:36;:::i;:::-;-1:-1:-1;;;;;30377:11:0;;;;;;:7;:11;;;;;:50;30319:301;;;-1:-1:-1;;;;;30451:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;30472:15:0;;;;;;:11;:15;;;;;;;;30451:36;30447:173;;;-1:-1:-1;;;;;30520:13:0;;;;;;:7;:13;;;;;;:23;;30536:7;;30520:23;:::i;:::-;-1:-1:-1;;;;;30504:13:0;;;;;;;:7;:13;;;;;;:39;;;;30586:22;;30572:11;;;;;;;;;;:36;;30586:22;30572:36;:::i;:::-;-1:-1:-1;;;;;30558:11:0;;;;;;:7;:11;;;;;:50;30447:173;30636:17;;;;:21;30632:79;;30672:39;30687:4;30693:6;:17;;;30672:14;:39::i;:::-;30740:1;30726:6;:11;;;:15;:34;;;;30759:1;30745:6;:11;;;:15;30726:34;30722:91;;;30775:38;30788:6;:11;;;30801:6;:11;;;30775:12;:38::i;:::-;30846:2;-1:-1:-1;;;;;30831:42:0;30840:4;-1:-1:-1;;;;;30831:42:0;;30850:6;:22;;;30831:42;;;;1991:25:1;;1979:2;1964:18;;1845:177;30831:42:0;;;;;;;;-1:-1:-1;30891:4:0;;29625:1278;-1:-1:-1;;;;;29625:1278:0:o;32552:547::-;32650:7;;32686;;32603;;;;;32704:283;32728:9;:16;32724:20;;32704:283;;;32794:7;32770;:21;32778:9;32788:1;32778:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32778:12:0;32770:21;;;;;;;;;;;;;:31;;:66;;;32829:7;32805;:21;32813:9;32823:1;32813:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32813:12:0;32805:21;;;;;;;;;;;;;:31;32770:66;32766:97;;;32846:7;;32855;;32838:25;;;;;;;32552:547;;:::o;32766:97::-;32898:7;:21;32906:9;32916:1;32906:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32906:12:0;32898:21;;;;;;;;;;;;;32888:31;;:7;:31;:::i;:::-;32878:41;;32954:7;:21;32962:9;32972:1;32962:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32962:12:0;32954:21;;;;;;;;;;;;;32944:31;;:7;:31;:::i;:::-;32934:41;-1:-1:-1;32746:3:0;;;;:::i;:::-;;;;32704:283;;;;33021:7;;33011;;:17;;;;:::i;:::-;33001:7;:27;32997:58;;;33038:7;;33047;;33030:25;;;;;;32552:547;;:::o;32997:58::-;33074:7;;33083;;-1:-1:-1;32552:547:0;-1:-1:-1;32552:547:0:o;28412:439::-;28495:16;;;;;;;28494:17;28486:65;;;;-1:-1:-1;;;28486:65:0;;20952:2:1;28486:65:0;;;20934:21:1;20991:2;20971:18;;;20964:30;21030:34;21010:18;;;21003:62;-1:-1:-1;;;21081:18:1;;;21074:33;21124:19;;28486:65:0;20750:399:1;28486:65:0;28567:20;28578:4;28584:2;28567:10;:20::i;:::-;28566:21;:37;;;;-1:-1:-1;28597:6:0;;-1:-1:-1;;;;;28591:12:0;;;28597:6;;28591:12;28566:37;28562:282;;;-1:-1:-1;;;;;28620:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;28620:30:0;28646:4;28620:30;;;;;;28665:16;:23;;-1:-1:-1;;28665:23:0;28620:30;28665:23;;;28718:15;28703:12;:30;28750:21;:28;;-1:-1:-1;;;;28750:28:0;-1:-1:-1;;;28750:28:0;;;28798:34;;;;;;1818:14:1;;1811:22;1793:41;;1781:2;1766:18;;1653:187;28798:34:0;;;;;;;;28412:439;;:::o;30911:1464::-;31006:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31006:18:0;31037:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31037:25:0;31073:19;31095:10;:8;:10::i;:::-;31073:32;-1:-1:-1;31135:21:0;31073:32;31135:7;:21;:::i;:::-;31118:14;;;:38;31169:1071;;;;-1:-1:-1;;;;;31200:11:0;;;;;;:7;:11;;;;;;;;31196:561;;;31246:15;;31232:11;:29;31296:17;;31280:13;:33;31348:17;;31332:13;:33;31196:561;;;-1:-1:-1;;;;;31391:13:0;;;;;;:7;:13;;;;;;;;31387:370;;;31439:14;;31425:11;:28;31488:16;;31472:13;:32;31539:16;;31523:13;:32;31387:370;;;31610:19;;31596:11;:33;31664:21;;31648:13;:37;31720:21;;31704:13;:37;31387:370;31813:16;;31798:11;;31788:21;;:7;:21;:::i;:::-;31787:42;;;;:::i;:::-;31773:11;;;:56;31910:16;;31892:13;;31876;;:29;;31892:13;31876:29;:::i;:::-;31865:41;;:7;:41;:::i;:::-;31864:62;;;;:::i;:::-;31844:17;;;:82;;;31977:11;;;;:31;;31844:82;31977:31;:::i;:::-;31966:43;;:7;:43;:::i;:::-;31941:68;;32040:11;;;;:25;;32054:11;;32040:25;:::i;:::-;32026:11;;;:39;31169:1071;;;32112:1;32098:11;;;:15;;;32128:17;;;:21;;;32164:32;;;32213:11;;;:15;31169:1071;32330:11;32310:6;:17;;;:31;;;;:::i;:::-;32295:6;:11;;;:47;;;;:::i;:::-;32277:6;:14;;;:66;;;;:::i;:::-;32252:22;;;:91;-1:-1:-1;32252:22:0;30911:1464;-1:-1:-1;;;;;30911:1464:0:o;33383:423::-;33463:19;33486:10;:8;:10::i;:::-;33463:33;-1:-1:-1;33507:18:0;33528:24;33463:33;33528:10;:24;:::i;:::-;33604:4;33588:22;;;;:7;:22;;;;;;33507:45;;-1:-1:-1;33588:35:0;;33507:45;;33588:35;:::i;:::-;33579:4;33563:22;;;;:7;:22;;;;;;;;:60;;;;33637:11;:26;;;;;;33634:104;;;33719:4;33703:22;;;;:7;:22;;;;;;:35;;33728:10;;33703:35;:::i;:::-;33694:4;33678:22;;;;:7;:22;;;;;:60;33634:104;33754:43;;1991:25:1;;;33779:4:0;;-1:-1:-1;;;;;33754:43:0;;;;;1979:2:1;1964:18;33754:43:0;;;;;;;33452:354;;33383:423;;:::o;33111:143::-;33201:4;33191:7;;:14;;;;:::i;:::-;33181:7;:24;33229:10;;:17;;33242:4;;33229:17;:::i;:::-;33216:10;:30;-1:-1:-1;;33111:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:131::-;-1:-1:-1;;;;;1133:31:1;;1123:42;;1113:70;;1179:1;1176;1169:12;1194:134;1262:20;;1291:31;1262:20;1291:31;:::i;:::-;1194:134;;;:::o;1333:315::-;1401:6;1409;1462:2;1450:9;1441:7;1437:23;1433:32;1430:52;;;1478:1;1475;1468:12;1430:52;1517:9;1504:23;1536:31;1561:5;1536:31;:::i;:::-;1586:5;1638:2;1623:18;;;;1610:32;;-1:-1:-1;;;1333:315:1:o;2027:316::-;2104:6;2112;2120;2173:2;2161:9;2152:7;2148:23;2144:32;2141:52;;;2189:1;2186;2179:12;2141:52;-1:-1:-1;;2212:23:1;;;2282:2;2267:18;;2254:32;;-1:-1:-1;2333:2:1;2318:18;;;2305:32;;2027:316;-1:-1:-1;2027:316:1:o;2348:160::-;2413:20;;2469:13;;2462:21;2452:32;;2442:60;;2498:1;2495;2488:12;2513:315;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:52;;;2655:1;2652;2645:12;2607:52;2694:9;2681:23;2713:31;2738:5;2713:31;:::i;:::-;2763:5;-1:-1:-1;2787:35:1;2818:2;2803:18;;2787:35;:::i;:::-;2777:45;;2513:315;;;;;:::o;2833:456::-;2910:6;2918;2926;2979:2;2967:9;2958:7;2954:23;2950:32;2947:52;;;2995:1;2992;2985:12;2947:52;3034:9;3021:23;3053:31;3078:5;3053:31;:::i;:::-;3103:5;-1:-1:-1;3160:2:1;3145:18;;3132:32;3173:33;3132:32;3173:33;:::i;:::-;2833:456;;3225:7;;-1:-1:-1;;;3279:2:1;3264:18;;;;3251:32;;2833:456::o;3294:180::-;3353:6;3406:2;3394:9;3385:7;3381:23;3377:32;3374:52;;;3422:1;3419;3412:12;3374:52;-1:-1:-1;3445:23:1;;3294:180;-1:-1:-1;3294:180:1:o;3668:127::-;3729:10;3724:3;3720:20;3717:1;3710:31;3760:4;3757:1;3750:15;3784:4;3781:1;3774:15;3800:1121;3884:6;3915:2;3958;3946:9;3937:7;3933:23;3929:32;3926:52;;;3974:1;3971;3964:12;3926:52;4014:9;4001:23;4043:18;4084:2;4076:6;4073:14;4070:34;;;4100:1;4097;4090:12;4070:34;4138:6;4127:9;4123:22;4113:32;;4183:7;4176:4;4172:2;4168:13;4164:27;4154:55;;4205:1;4202;4195:12;4154:55;4241:2;4228:16;4263:2;4259;4256:10;4253:36;;;4269:18;;:::i;:::-;4315:2;4312:1;4308:10;4347:2;4341:9;4410:2;4406:7;4401:2;4397;4393:11;4389:25;4381:6;4377:38;4465:6;4453:10;4450:22;4445:2;4433:10;4430:18;4427:46;4424:72;;;4476:18;;:::i;:::-;4512:2;4505:22;4562:18;;;4596:15;;;;-1:-1:-1;4638:11:1;;;4634:20;;;4666:19;;;4663:39;;;4698:1;4695;4688:12;4663:39;4722:11;;;;4742:148;4758:6;4753:3;4750:15;4742:148;;;4824:23;4843:3;4824:23;:::i;:::-;4812:36;;4775:12;;;;4868;;;;4742:148;;;4909:6;3800:1121;-1:-1:-1;;;;;;;;3800:1121:1:o;4926:247::-;4985:6;5038:2;5026:9;5017:7;5013:23;5009:32;5006:52;;;5054:1;5051;5044:12;5006:52;5093:9;5080:23;5112:31;5137:5;5112:31;:::i;5178:248::-;5246:6;5254;5307:2;5295:9;5286:7;5282:23;5278:32;5275:52;;;5323:1;5320;5313:12;5275:52;-1:-1:-1;;5346:23:1;;;5416:2;5401:18;;;5388:32;;-1:-1:-1;5178:248:1:o;5431:404::-;5515:6;5523;5576:2;5564:9;5555:7;5551:23;5547:32;5544:52;;;5592:1;5589;5582:12;5544:52;5631:9;5618:23;5650:31;5675:5;5650:31;:::i;:::-;5700:5;-1:-1:-1;5757:2:1;5742:18;;5729:32;5770:33;5729:32;5770:33;:::i;:::-;5822:7;5812:17;;;5431:404;;;;;:::o;6100:180::-;6156:6;6209:2;6197:9;6188:7;6184:23;6180:32;6177:52;;;6225:1;6222;6215:12;6177:52;6248:26;6264:9;6248:26;:::i;6678:385::-;6764:6;6772;6780;6788;6841:3;6829:9;6820:7;6816:23;6812:33;6809:53;;;6858:1;6855;6848:12;6809:53;-1:-1:-1;;6881:23:1;;;6951:2;6936:18;;6923:32;;-1:-1:-1;7002:2:1;6987:18;;6974:32;;7053:2;7038:18;7025:32;;-1:-1:-1;6678:385:1;-1:-1:-1;6678:385:1:o;7068:380::-;7147:1;7143:12;;;;7190;;;7211:61;;7265:4;7257:6;7253:17;7243:27;;7211:61;7318:2;7310:6;7307:14;7287:18;7284:38;7281:161;;;7364:10;7359:3;7355:20;7352:1;7345:31;7399:4;7396:1;7389:15;7427:4;7424:1;7417:15;7281:161;;7068:380;;;:::o;7453:356::-;7655:2;7637:21;;;7674:18;;;7667:30;7733:34;7728:2;7713:18;;7706:62;7800:2;7785:18;;7453:356::o;8528:127::-;8589:10;8584:3;8580:20;8577:1;8570:31;8620:4;8617:1;8610:15;8644:4;8641:1;8634:15;8660:127;8721:10;8716:3;8712:20;8709:1;8702:31;8752:4;8749:1;8742:15;8776:4;8773:1;8766:15;8792:125;8832:4;8860:1;8857;8854:8;8851:34;;;8865:18;;:::i;:::-;-1:-1:-1;8902:9:1;;8792:125::o;8922:127::-;8983:10;8978:3;8974:20;8971:1;8964:31;9014:4;9011:1;9004:15;9038:4;9035:1;9028:15;9054:135;9093:3;-1:-1:-1;;9114:17:1;;9111:43;;;9134:18;;:::i;:::-;-1:-1:-1;9181:1:1;9170:13;;9054:135::o;9605:127::-;9666:10;9661:3;9657:20;9654:1;9647:31;9697:4;9694:1;9687:15;9721:4;9718:1;9711:15;9737:120;9777:1;9803;9793:35;;9808:18;;:::i;:::-;-1:-1:-1;9842:9:1;;9737:120::o;9862:128::-;9902:3;9933:1;9929:6;9926:1;9923:13;9920:39;;;9939:18;;:::i;:::-;-1:-1:-1;9975:9:1;;9862:128::o;9995:425::-;10197:2;10179:21;;;10236:2;10216:18;;;10209:30;10275:34;10270:2;10255:18;;10248:62;10346:31;10341:2;10326:18;;10319:59;10410:3;10395:19;;9995:425::o;10786:422::-;10875:1;10918:5;10875:1;10932:270;10953:7;10943:8;10940:21;10932:270;;;11012:4;11008:1;11004:6;11000:17;10994:4;10991:27;10988:53;;;11021:18;;:::i;:::-;11071:7;11061:8;11057:22;11054:55;;;11091:16;;;;11054:55;11170:22;;;;11130:15;;;;10932:270;;;10936:3;10786:422;;;;;:::o;11213:806::-;11262:5;11292:8;11282:80;;-1:-1:-1;11333:1:1;11347:5;;11282:80;11381:4;11371:76;;-1:-1:-1;11418:1:1;11432:5;;11371:76;11463:4;11481:1;11476:59;;;;11549:1;11544:130;;;;11456:218;;11476:59;11506:1;11497:10;;11520:5;;;11544:130;11581:3;11571:8;11568:17;11565:43;;;11588:18;;:::i;:::-;-1:-1:-1;;11644:1:1;11630:16;;11659:5;;11456:218;;11758:2;11748:8;11745:16;11739:3;11733:4;11730:13;11726:36;11720:2;11710:8;11707:16;11702:2;11696:4;11693:12;11689:35;11686:77;11683:159;;;-1:-1:-1;11795:19:1;;;11827:5;;11683:159;11874:34;11899:8;11893:4;11874:34;:::i;:::-;11944:6;11940:1;11936:6;11932:19;11923:7;11920:32;11917:58;;;11955:18;;:::i;:::-;11993:20;;11213:806;-1:-1:-1;;;11213:806:1:o;12024:131::-;12084:5;12113:36;12140:8;12134:4;12113:36;:::i;12160:168::-;12200:7;12266:1;12262;12258:6;12254:14;12251:1;12248:21;12243:1;12236:9;12229:17;12225:45;12222:71;;;12273:18;;:::i;:::-;-1:-1:-1;12313:9:1;;12160:168::o;12333:112::-;12365:1;12391;12381:35;;12396:18;;:::i;:::-;-1:-1:-1;12430:9:1;;12333:112::o;12450:251::-;12520:6;12573:2;12561:9;12552:7;12548:23;12544:32;12541:52;;;12589:1;12586;12579:12;12541:52;12621:9;12615:16;12640:31;12665:5;12640:31;:::i;13015:607::-;-1:-1:-1;;;;;13374:15:1;;;13356:34;;13421:2;13406:18;;13399:34;;;;13464:2;13449:18;;13442:34;;;;13507:2;13492:18;;13485:34;;;;13556:15;;;13550:3;13535:19;;13528:44;13336:3;13588:19;;13581:35;;;;13305:3;13290:19;;13015:607::o;13627:306::-;13715:6;13723;13731;13784:2;13772:9;13763:7;13759:23;13755:32;13752:52;;;13800:1;13797;13790:12;13752:52;13829:9;13823:16;13813:26;;13879:2;13868:9;13864:18;13858:25;13848:35;;13923:2;13912:9;13908:18;13902:25;13892:35;;13627:306;;;;;:::o;19035:980::-;19297:4;19345:3;19334:9;19330:19;19376:6;19365:9;19358:25;19402:2;19440:6;19435:2;19424:9;19420:18;19413:34;19483:3;19478:2;19467:9;19463:18;19456:31;19507:6;19542;19536:13;19573:6;19565;19558:22;19611:3;19600:9;19596:19;19589:26;;19650:2;19642:6;19638:15;19624:29;;19671:1;19681:195;19695:6;19692:1;19689:13;19681:195;;;19760:13;;-1:-1:-1;;;;;19756:39:1;19744:52;;19851:15;;;;19816:12;;;;19792:1;19710:9;19681:195;;;-1:-1:-1;;;;;;;19932:32:1;;;;19927:2;19912:18;;19905:60;-1:-1:-1;;;19996:3:1;19981:19;19974:35;19893:3;19035:980;-1:-1:-1;;;19035:980:1:o
Swarm Source
ipfs://12badbfe5072395b229bf0d790533ac0c784097bb30292754ff7d0e68a4b40f0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.