Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60018054 | 16416629 | 532 days ago | IN | Create: CXS | 0 ETH | 0.090517 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CXS
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-16 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.17; // IERC20 interface interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. */ contract Ownable is Context { address private _owner; address private _previousOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ 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); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ 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"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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); } } } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; 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 LockToken is Ownable { bool public isOpen = false; mapping(address => bool) private _whiteList; modifier open(address from, address to) { require(isOpen || _whiteList[from] || _whiteList[to], "Not Open"); _; } constructor() { _whiteList[msg.sender] = true; _whiteList[address(this)] = true; } function openTrade() external onlyOwner { isOpen = true; } function includeToWhiteList(address[] memory _users) external onlyOwner { for(uint8 i = 0; i < _users.length; i++) { _whiteList[_users[i]] = true; } } } contract CXS is Context, IERC20, Ownable, LockToken { using Address for address; using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; string private _name = "cryptoxservice"; string private _symbol = "CXS"; uint8 private _decimals = 9; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) public _isExcludedFromWalletLimit; mapping (address=> bool) public _isExcludedFromMaxTx; mapping (address => bool) private _isExcluded; address[] private _excluded; mapping(address => bool) public _isBlacklisted; bool public blacklistRenounced = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _marketingFee = 6; uint256 private _previousMarketingFee = _marketingFee; uint256 public _burnFee = 2; uint256 private _previousBurnFee = _burnFee; uint256 public _maxTxAmount = 10000000 * 10**9; uint256 public swapTokensAtAmount = 5000 * 10**9; uint256 public maxWalletToken = 200000 * 10**9; address payable public marketingWallet = payable(0x8Fd508Ec4d828FB77C37CcD0C2C0E1D9fA0Cf365); // marketing wallet address. address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; //burn wallet address. //sell fees uint256 public _sellTaxFee = 2; uint256 public _sellMarketingFee = 11; uint256 public _sellBurnFee = 2; bool inSwap; bool public swapEnabled = true; modifier lockTheSwap { inSwap = true; _; inSwap = false; } event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event swapEnabledUpdated(bool enabled); event BlacklistMultipleAccounts(address[] accounts, bool isBlacklisted); constructor (address _owner) { _rOwned[_owner] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee/limits _isExcludedFromFee[_owner] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _owner, _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); 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 excludeFromWalletLimit (address user, bool excluded) external onlyOwner { _isExcludedFromWalletLimit[user] = excluded; } function excludeFromMaxTxLimit (address user, bool excluded) external onlyOwner { _isExcludedFromMaxTx[user] = excluded; } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); if(_marketingFee > 0) { _takeMarketing(tMarketing); emit Transfer(sender, address(this), tMarketing); } if(_burnFee > 0) { _takeBurn(tBurn); emit Transfer(sender, deadAddress, tBurn); } _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMarketing, tBurn, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing, tBurn); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tBurn = calculateBurnFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing).sub(tBurn); return (tTransferAmount, tFee, tMarketing, tBurn); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rBurn = tBurn.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing).sub(rBurn); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing); } function _takeBurn(uint256 tBurn) private { uint256 currentRate = _getRate(); uint256 rBurn = tBurn.mul(currentRate); _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn); if(_isExcluded[deadAddress]) _tOwned[deadAddress] = _tOwned[deadAddress].add(tBurn); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div( 10**2 ); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_burnFee).div( 10**2 ); } function removeAllFee() private { _taxFee = 0; _marketingFee = 0; _burnFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _marketingFee = _previousMarketingFee; _burnFee = _previousBurnFee; } function _transfer( address from, address to, uint256 amount ) open(from, to) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address'); bool excludedAccount = _isExcludedFromFee[from] || _isExcludedFromFee[to] || _isExcludedFromWalletLimit[to]; if (to != uniswapV2Pair && !excludedAccount) { uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if ( overMinTokenBalance && !inSwap && to == uniswapV2Pair && swapEnabled ) { contractTokenBalance = swapTokensAtAmount; //swap tokens for marketing wallet swapTokensForEth(contractTokenBalance, marketingWallet); } _tokenTransfer(from,to,amount); } function swapTokensForEth(uint256 tokenAmount, address _to) private lockTheSwap{ // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, _to, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(recipient==uniswapV2Pair){ setAllFees(_sellTaxFee, _sellMarketingFee, _sellBurnFee); } if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ removeAllFee(); } else { if (!_isExcludedFromMaxTx[sender]){ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); if(_marketingFee > 0) { _takeMarketing(tMarketing); emit Transfer(sender, address(this), tMarketing); } if(_burnFee > 0) { _takeBurn(tBurn); emit Transfer(sender, deadAddress, tBurn); } _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); if(_marketingFee > 0) { _takeMarketing(tMarketing); emit Transfer(sender, address(this), tMarketing); } if(_burnFee > 0) { _takeBurn(tBurn); emit Transfer(sender, deadAddress, tBurn); } _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing, uint256 tBurn) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); if(_marketingFee > 0) { _takeMarketing(tMarketing); emit Transfer(sender, address(this), tMarketing); } if(_burnFee > 0) { _takeBurn(tBurn); emit Transfer(sender, deadAddress, tBurn); } _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setAllFees(uint256 taxFee, uint256 marketingFee, uint256 burnFee) private { require(taxFee.add(marketingFee.add(burnFee)) <= 25, "tax too high"); _taxFee = taxFee; _marketingFee = marketingFee; _burnFee = burnFee; } function setBuyFees(uint256 taxFee, uint256 marketingFee, uint256 burnFee) external onlyOwner() { require(taxFee.add(marketingFee).add(burnFee) <= 25, "tax too high"); setAllFees(taxFee, marketingFee, burnFee); _previousTaxFee = taxFee; _previousMarketingFee = marketingFee; _previousBurnFee = burnFee; } function setSellFees(uint256 taxFee, uint256 marketingFee, uint256 burnFee) external onlyOwner() { require(taxFee.add(marketingFee).add(burnFee) <= 25, "tax too high"); _sellTaxFee = taxFee; _sellMarketingFee = marketingFee; _sellBurnFee = burnFee; } function setMaxWalletToken(uint256 _maxToken) external onlyOwner { maxWalletToken = _maxToken; require(maxWalletToken >= totalSupply().div(100), "value too low"); } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; require(_maxTxAmount >= totalSupply().div(100), "value too low"); } function setSwapEnabled(bool _enabled) public onlyOwner { swapEnabled = _enabled; emit swapEnabledUpdated(_enabled); } function renounceBlacklist() external onlyOwner { require(blacklistRenounced == false, "already renounced"); blacklistRenounced = true; } function blacklistAddress(address account, bool value) external onlyOwner{ require(blacklistRenounced == false, "Blacklist has already been renounced"); _isBlacklisted[account] = value; } function blacklistMultipleAccounts(address[] calldata accounts, bool blacklisted) public onlyOwner { require(blacklistRenounced == false, "Blacklist has already been renounced"); for(uint256 i = 0; i < accounts.length; i++) { _isBlacklisted[accounts[i]] = blacklisted; } emit BlacklistMultipleAccounts(accounts, blacklisted); } function setMarketingWallet(address payable newWallet) external onlyOwner() { marketingWallet = newWallet; } function setSwapTokensAtAmount(uint256 newAmt) external onlyOwner() { swapTokensAtAmount = newAmt; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"BlacklistMultipleAccounts","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapEnabledUpdated","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","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":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"blacklistMultipleAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blacklistRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6001805460ff60a01b19169055610120604052600e60e09081526d63727970746f787365727669636560901b610100526003906200003e908262000472565b5060408051808201909152600381526243585360e81b602082015260049062000068908262000472565b506005805460ff19908116600917909155600f80549091169055662386f26fc1000060108190556200009d906000196200053e565b620000ab9060001962000561565b6011556002601381905560148190556006601581905560165560178190556018819055662386f26fc1000060195565048c27395000601a5565b5e620f48000601b55601c80546001600160a01b031916738fd508ec4d828fb77c37ccd0c2c0e1d9fa0cf36517905561dead60c052601d819055600b601e55601f556020805461ff0019166101001790553480156200014257600080fd5b5060405162003a0938038062003a09833981016040819052620001659162000589565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3503360009081526002602090815260408083208054600160ff199182168117909255308552828520805490911690911790556011546001600160a01b0385168452600683529281902092909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a0155926004808401938290030181865afa1580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000264919062000589565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d8919062000589565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c919062000589565b6001600160a01b0390811660a052818116608052821660008181526009602090815260408083208054600160ff1991821681179092553085528285208054909116909117905560105490519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620005bb565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003f857607f821691505b6020821081036200041957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200046d57600081815260208120601f850160051c81016020861015620004485750805b601f850160051c820191505b81811015620004695782815560010162000454565b5050505b505050565b81516001600160401b038111156200048e576200048e620003cd565b620004a6816200049f8454620003e3565b846200041f565b602080601f831160018114620004de5760008415620004c55750858301515b600019600386901b1c1916600185901b17855562000469565b600085815260208120601f198616915b828110156200050f57888601518255948401946001909101908401620004ee565b50858210156200052e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826200055c57634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200058357634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200059c57600080fd5b81516001600160a01b0381168114620005b457600080fd5b9392505050565b60805160a05160c0516133d16200063860003960008181610566015281816127fb01528181612c2a01528181612c7001528181612cbd0152612d000152600081816106cd01528181611d8a01528181611e7201526121c601526000818161045f0152818161205001528181612109015261214501526133d16000f3fe6080604052600436106103545760003560e01c80635d098b38116101c6578063a9059cbb116100f7578063e16830a811610095578063ea2f0b371161006f578063ea2f0b3714610a37578063ec28438a14610a57578063f2fde38b14610a77578063fb201b1d14610a9757600080fd5b8063e16830a8146109eb578063e2f4560514610a0b578063e6c75f7114610a2157600080fd5b8063c0b0fda2116100d1578063c0b0fda214610959578063c86079521461096f578063dd62ed3e14610985578063e01af92c146109cb57600080fd5b8063a9059cbb146108e9578063afa4f3b214610909578063bea852521461092957600080fd5b80637d1db4a51161016457806391d55f411161013e57806391d55f411461087457806395d89b4114610894578063a457c2d7146108a9578063a7b97fa9146108c957600080fd5b80637d1db4a51461080757806388f820201461081d5780638da5cb5b1461085657600080fd5b806370a08231116101a057806370a082311461079c578063715018a6146107bc57806375f0a874146107d15780637abdc1ca146107f157600080fd5b80635d098b38146107485780635f189361146107685780636ddd17131461077d57600080fd5b806327c8f835116102a0578063437823ec1161023e57806347535d7b1161021857806347535d7b1461069a57806349bd5a5e146106bb57806352390c02146106ef5780635342acb41461070f57600080fd5b8063437823ec1461063a5780634549b0391461065a578063455a43961461067a57600080fd5b80633685d4191161027a5780633685d419146105ca57806339509351146105ea5780633b124fe71461060a5780633dc599ff1461062057600080fd5b806327c8f835146105545780632d83811914610588578063313ce567146105a857600080fd5b80631694505e1161030d578063200a692d116102e7578063200a692d146104e857806322976e0d146104fe57806323b872dd1461051457806323cc66011461053457600080fd5b80631694505e1461044d57806318160ddd146104995780631cdd3be3146104b857600080fd5b806306fdde0314610360578063078662911461038b578063095ea7b3146103cb5780630b6bb6f5146103eb5780630d075d9c1461040d5780630f683e901461042d57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610aac565b6040516103829190612d58565b60405180910390f35b34801561039757600080fd5b506103bb6103a6366004612dcb565b600b6020526000908152604090205460ff1681565b6040519015158152602001610382565b3480156103d757600080fd5b506103bb6103e6366004612de8565b610b3e565b3480156103f757600080fd5b5061040b610406366004612e2a565b610b55565b005b34801561041957600080fd5b5061040b610428366004612eef565b610bfa565b34801561043957600080fd5b5061040b610448366004612eef565b610c71565b34801561045957600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610382565b3480156104a557600080fd5b506010545b604051908152602001610382565b3480156104c457600080fd5b506103bb6104d3366004612dcb565b600e6020526000908152604090205460ff1681565b3480156104f457600080fd5b506104aa601d5481565b34801561050a57600080fd5b506104aa60155481565b34801561052057600080fd5b506103bb61052f366004612f1b565b610cd7565b34801561054057600080fd5b5061040b61054f366004612f6c565b610d40565b34801561056057600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000000081565b34801561059457600080fd5b506104aa6105a3366004612fa1565b610d95565b3480156105b457600080fd5b5060055460405160ff9091168152602001610382565b3480156105d657600080fd5b5061040b6105e5366004612dcb565b610e19565b3480156105f657600080fd5b506103bb610605366004612de8565b610fcb565b34801561061657600080fd5b506104aa60135481565b34801561062c57600080fd5b50600f546103bb9060ff1681565b34801561064657600080fd5b5061040b610655366004612dcb565b611001565b34801561066657600080fd5b506104aa610675366004612fba565b61104f565b34801561068657600080fd5b5061040b610695366004612f6c565b6110de565b3480156106a657600080fd5b506001546103bb90600160a01b900460ff1681565b3480156106c757600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000000081565b3480156106fb57600080fd5b5061040b61070a366004612dcb565b611156565b34801561071b57600080fd5b506103bb61072a366004612dcb565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561075457600080fd5b5061040b610763366004612dcb565b6112a9565b34801561077457600080fd5b5061040b6112f5565b34801561078957600080fd5b506020546103bb90610100900460ff1681565b3480156107a857600080fd5b506104aa6107b7366004612dcb565b611375565b3480156107c857600080fd5b5061040b6113d4565b3480156107dd57600080fd5b50601c54610481906001600160a01b031681565b3480156107fd57600080fd5b506104aa601f5481565b34801561081357600080fd5b506104aa60195481565b34801561082957600080fd5b506103bb610838366004612dcb565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561086257600080fd5b506000546001600160a01b0316610481565b34801561088057600080fd5b5061040b61088f366004612fa1565b611448565b3480156108a057600080fd5b506103756114cf565b3480156108b557600080fd5b506103bb6108c4366004612de8565b6114de565b3480156108d557600080fd5b5061040b6108e4366004612fdd565b61152d565b3480156108f557600080fd5b506103bb610904366004612de8565b61162c565b34801561091557600080fd5b5061040b610924366004612fa1565b611639565b34801561093557600080fd5b506103bb610944366004612dcb565b600a6020526000908152604090205460ff1681565b34801561096557600080fd5b506104aa60175481565b34801561097b57600080fd5b506104aa601e5481565b34801561099157600080fd5b506104aa6109a0366004613061565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109d757600080fd5b5061040b6109e636600461309a565b611668565b3480156109f757600080fd5b5061040b610a06366004612f6c565b6116de565b348015610a1757600080fd5b506104aa601a5481565b348015610a2d57600080fd5b506104aa601b5481565b348015610a4357600080fd5b5061040b610a52366004612dcb565b611733565b348015610a6357600080fd5b5061040b610a72366004612fa1565b61177e565b348015610a8357600080fd5b5061040b610a92366004612dcb565b6117fc565b348015610aa357600080fd5b5061040b6118e6565b606060038054610abb906130b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906130b5565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b5050505050905090565b6000610b4b338484611925565b5060015b92915050565b6000546001600160a01b03163314610b885760405162461bcd60e51b8152600401610b7f906130ef565b60405180910390fd5b60005b81518160ff161015610bf657600160026000848460ff1681518110610bb257610bb2613124565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610bee81613150565b915050610b8b565b5050565b6000546001600160a01b03163314610c245760405162461bcd60e51b8152600401610b7f906130ef565b6019610c3a82610c348686611a49565b90611a49565b1115610c585760405162461bcd60e51b8152600401610b7f9061316f565b610c63838383611aa8565b601492909255601655601855565b6000546001600160a01b03163314610c9b5760405162461bcd60e51b8152600401610b7f906130ef565b6019610cab82610c348686611a49565b1115610cc95760405162461bcd60e51b8152600401610b7f9061316f565b601d92909255601e55601f55565b6000610ce4848484611aea565b610d368433610d318560405180606001604052806028815260200161334f602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611ef0565b611925565b5060019392505050565b6000546001600160a01b03163314610d6a5760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000601154821115610dfc5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b7f565b6000610e06611f2a565b9050610e128382611f4d565b9392505050565b6000546001600160a01b03163314610e435760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b0381166000908152600c602052604090205460ff16610eab5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b7f565b60005b600d54811015610bf657816001600160a01b0316600d8281548110610ed557610ed5613124565b6000918252602090912001546001600160a01b031603610fb957600d8054610eff90600190613195565b81548110610f0f57610f0f613124565b600091825260209091200154600d80546001600160a01b039092169183908110610f3b57610f3b613124565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d805480610f9357610f936131a8565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fc3816131be565b915050610eae565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b4b918590610d319086611a49565b6000546001600160a01b0316331461102b5760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006010548311156110a35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b7f565b816110c35760006110b384611f8f565b50949650610b4f95505050505050565b60006110ce84611f8f565b50939650610b4f95505050505050565b6000546001600160a01b031633146111085760405162461bcd60e51b8152600401610b7f906130ef565b600f5460ff161561112b5760405162461bcd60e51b8152600401610b7f906131d7565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111805760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b0381166000908152600c602052604090205460ff16156111e95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b7f565b6001600160a01b03811660009081526006602052604090205415611243576001600160a01b03811660009081526006602052604090205461122990610d95565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146112d35760405162461bcd60e51b8152600401610b7f906130ef565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461131f5760405162461bcd60e51b8152600401610b7f906130ef565b600f5460ff16156113665760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c995b9bdd5b98d959607a1b6044820152606401610b7f565b600f805460ff19166001179055565b6001600160a01b0381166000908152600c602052604081205460ff16156113b257506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b4f90610d95565b6000546001600160a01b031633146113fe5760405162461bcd60e51b8152600401610b7f906130ef565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114725760405162461bcd60e51b8152600401610b7f906130ef565b601b81905561148b606461148560105490565b90611f4d565b601b5410156114cc5760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b7f565b50565b606060048054610abb906130b5565b6000610b4b3384610d3185604051806060016040528060258152602001613377602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611ef0565b6000546001600160a01b031633146115575760405162461bcd60e51b8152600401610b7f906130ef565b600f5460ff161561157a5760405162461bcd60e51b8152600401610b7f906131d7565b60005b828110156115eb5781600e600086868581811061159c5761159c613124565b90506020020160208101906115b19190612dcb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806115e3816131be565b91505061157d565b507f6a7a5947ac5b035c56afedd80341423bf33595b569bd49d4e2f82b23e72275e383838360405161161f9392919061321b565b60405180910390a1505050565b6000610b4b338484611aea565b6000546001600160a01b031633146116635760405162461bcd60e51b8152600401610b7f906130ef565b601a55565b6000546001600160a01b031633146116925760405162461bcd60e51b8152600401610b7f906130ef565b6020805461ff0019166101008315159081029190911782556040519081527f4b2f02f52c63d8e0a67a39776bc2d158740139cfef7438af1666c33a6a29dac3910160405180910390a150565b6000546001600160a01b031633146117085760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461175d5760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146117a85760405162461bcd60e51b8152600401610b7f906130ef565b60198190556117bb606461148560105490565b60195410156114cc5760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b7f565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03811661188b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119105760405162461bcd60e51b8152600401610b7f906130ef565b6001805460ff60a01b1916600160a01b179055565b6001600160a01b0383166119875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b7f565b6001600160a01b0382166119e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b7f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080611a568385613274565b905083811015610e125760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b7f565b6019611abe611ab78484611a49565b8590611a49565b1115611adc5760405162461bcd60e51b8152600401610b7f9061316f565b601392909255601555601755565b60015483908390600160a01b900460ff1680611b1e57506001600160a01b03821660009081526002602052604090205460ff165b80611b4157506001600160a01b03811660009081526002602052604090205460ff165b611b785760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b7f565b6001600160a01b038516611bdc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b7f565b6001600160a01b038416611c3e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b7f565b60008311611ca05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b7f565b6001600160a01b0385166000908152600e602052604090205460ff16158015611ce257506001600160a01b0384166000908152600e602052604090205460ff16155b611d245760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610b7f565b6001600160a01b03851660009081526009602052604081205460ff1680611d6357506001600160a01b03851660009081526009602052604090205460ff165b80611d8657506001600160a01b0385166000908152600a602052604090205460ff165b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614158015611dc8575080155b15611e44576000611dd886611375565b601b54909150611de88683613274565b1115611e425760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610b7f565b505b6000611e4f30611375565b601a5490915081108015908190611e69575060205460ff16155b8015611ea657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316145b8015611eb95750602054610100900460ff165b15611edb57601a54601c54909250611edb9083906001600160a01b0316611fea565b611ee68888886121c4565b5050505050505050565b60008184841115611f145760405162461bcd60e51b8152600401610b7f9190612d58565b506000611f218486613195565b95945050505050565b6000806000611f3761245e565b9092509050611f468282611f4d565b9250505090565b6000610e1283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125e0565b6000806000806000806000806000806000611fa98c61260e565b93509350935093506000806000611fca8f878787611fc5611f2a565b612663565b919f509d509b509599509397509195509350505050919395979092949650565b6020805460ff191660011781556040805160028082526060820183526000939192909183019080368337019050509050308160008151811061202e5761202e613124565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d09190613287565b816001815181106120e3576120e3613124565b60200260200101906001600160a01b031690816001600160a01b03168152505061212e307f000000000000000000000000000000000000000000000000000000000000000085611925565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906121839086906000908690889042906004016132a4565b600060405180830381600087803b15801561219d57600080fd5b505af11580156121b1573d6000803e3d6000fd5b50506020805460ff191690555050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361220e5761220e601d54601e54601f54611aa8565b6001600160a01b03831660009081526009602052604090205460ff168061224d57506001600160a01b03821660009081526009602052604090205460ff165b1561226b57612266600060138190556015819055601755565b6122ee565b6001600160a01b0383166000908152600b602052604090205460ff166122ee576019548111156122ee5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b7f565b6001600160a01b0383166000908152600c602052604090205460ff16801561232f57506001600160a01b0382166000908152600c602052604090205460ff16155b156123445761233f8383836126c5565b612442565b6001600160a01b0383166000908152600c602052604090205460ff1615801561238557506001600160a01b0382166000908152600c602052604090205460ff165b156123955761233f8383836128ca565b6001600160a01b0383166000908152600c602052604090205460ff161580156123d757506001600160a01b0382166000908152600c602052604090205460ff16155b156123e75761233f838383612989565b6001600160a01b0383166000908152600c602052604090205460ff16801561242757506001600160a01b0382166000908152600c602052604090205460ff165b156124375761233f8383836129e3565b612442838383612989565b612459601454601355601654601555601854601755565b505050565b6011546010546000918291825b600d548110156125b0578260066000600d848154811061248d5761248d613124565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124f857508160076000600d84815481106124d1576124d1613124565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561250e57601154601054945094505050509091565b61255460066000600d848154811061252857612528613124565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612a68565b925061259c60076000600d848154811061257057612570613124565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612a68565b9150806125a8816131be565b91505061246b565b506010546011546125c091611f4d565b8210156125d7576011546010549350935050509091565b90939092509050565b600081836126015760405162461bcd60e51b8152600401610b7f9190612d58565b506000611f218486613315565b600080600080600061261f86612aaa565b9050600061262c87612ac6565b9050600061263988612ae2565b905060006126538261264d85818d89612a68565b90612a68565b9993985091965094509092505050565b60008080806126728986612afe565b905060006126808987612afe565b9050600061268e8988612afe565b9050600061269c8989612afe565b905060006126b08261264d85818989612a68565b949d949c50929a509298505050505050505050565b60008060008060008060006126d988611f8f565b965096509650965096509650965061271f88600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612a6890919063ffffffff16565b6001600160a01b038b1660009081526007602090815260408083209390935560069052205461274e9088612a68565b6001600160a01b03808c1660009081526006602052604080822093909355908b168152205461277d9087611a49565b6001600160a01b038a16600090815260066020526040902055601554156127e8576127a782612b80565b60405182815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b60175415612867576127f981612c08565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161285e91815260200190565b60405180910390a35b6128718584612d34565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516128b691815260200190565b60405180910390a350505050505050505050565b60008060008060008060006128de88611f8f565b965096509650965096509650965061292487600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612a6890919063ffffffff16565b6001600160a01b03808c16600090815260066020908152604080832094909455918c1681526007909152205461295a9085611a49565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461277d9087611a49565b600080600080600080600061299d88611f8f565b965096509650965096509650965061274e87600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612a6890919063ffffffff16565b60008060008060008060006129f788611f8f565b9650965096509650965096509650612a3d88600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612a6890919063ffffffff16565b6001600160a01b038b1660009081526007602090815260408083209390935560069052205461292490885b6000610e1283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef0565b6000610b4f606461148560135485612afe90919063ffffffff16565b6000610b4f606461148560155485612afe90919063ffffffff16565b6000610b4f606461148560175485612afe90919063ffffffff16565b600082600003612b1057506000610b4f565b6000612b1c8385613337565b905082612b298583613315565b14610e125760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b7f565b6000612b8a611f2a565b90506000612b988383612afe565b30600090815260066020526040902054909150612bb59082611a49565b30600090815260066020908152604080832093909355600c9052205460ff16156124595730600090815260076020526040902054612bf39084611a49565b30600090815260076020526040902055505050565b6000612c12611f2a565b90506000612c208383612afe565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260066020526040902054909150612c669082611a49565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260066020908152604080832093909355600c9052205460ff1615612459576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260076020526040902054612cf69084611a49565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260076020526040902055505050565b601154612d419083612a68565b601155601254612d519082611a49565b6012555050565b600060208083528351808285015260005b81811015612d8557858101830151858201604001528201612d69565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114cc57600080fd5b8035612dc681612da6565b919050565b600060208284031215612ddd57600080fd5b8135610e1281612da6565b60008060408385031215612dfb57600080fd5b8235612e0681612da6565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612e3d57600080fd5b823567ffffffffffffffff80821115612e5557600080fd5b818501915085601f830112612e6957600080fd5b813581811115612e7b57612e7b612e14565b8060051b604051601f19603f83011681018181108582111715612ea057612ea0612e14565b604052918252848201925083810185019188831115612ebe57600080fd5b938501935b82851015612ee357612ed485612dbb565b84529385019392850192612ec3565b98975050505050505050565b600080600060608486031215612f0457600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f3057600080fd5b8335612f3b81612da6565b92506020840135612f4b81612da6565b929592945050506040919091013590565b80358015158114612dc657600080fd5b60008060408385031215612f7f57600080fd5b8235612f8a81612da6565b9150612f9860208401612f5c565b90509250929050565b600060208284031215612fb357600080fd5b5035919050565b60008060408385031215612fcd57600080fd5b82359150612f9860208401612f5c565b600080600060408486031215612ff257600080fd5b833567ffffffffffffffff8082111561300a57600080fd5b818601915086601f83011261301e57600080fd5b81358181111561302d57600080fd5b8760208260051b850101111561304257600080fd5b6020928301955093506130589186019050612f5c565b90509250925092565b6000806040838503121561307457600080fd5b823561307f81612da6565b9150602083013561308f81612da6565b809150509250929050565b6000602082840312156130ac57600080fd5b610e1282612f5c565b600181811c908216806130c957607f821691505b6020821081036130e957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81036131665761316661313a565b60010192915050565b6020808252600c908201526b0e8c2f040e8dede40d0d2ced60a31b604082015260600190565b81810381811115610b4f57610b4f61313a565b634e487b7160e01b600052603160045260246000fd5b6000600182016131d0576131d061313a565b5060010190565b60208082526024908201527f426c61636b6c6973742068617320616c7265616479206265656e2072656e6f756040820152631b98d95960e21b606082015260800190565b6040808252810183905260008460608301825b8681101561325e57823561324181612da6565b6001600160a01b031682526020928301929091019060010161322e565b5080925050508215156020830152949350505050565b80820180821115610b4f57610b4f61313a565b60006020828403121561329957600080fd5b8151610e1281612da6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132f45784516001600160a01b0316835293830193918301916001016132cf565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261333257634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b4f57610b4f61313a56fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ea8ed680d4684a7013b7e5c7183fcabdb8065e603cd61242b5d057764f6339f364736f6c63430008110033000000000000000000000000428567060a9c682b8583e0aa18734e2f4aed1efd
Deployed Bytecode
0x6080604052600436106103545760003560e01c80635d098b38116101c6578063a9059cbb116100f7578063e16830a811610095578063ea2f0b371161006f578063ea2f0b3714610a37578063ec28438a14610a57578063f2fde38b14610a77578063fb201b1d14610a9757600080fd5b8063e16830a8146109eb578063e2f4560514610a0b578063e6c75f7114610a2157600080fd5b8063c0b0fda2116100d1578063c0b0fda214610959578063c86079521461096f578063dd62ed3e14610985578063e01af92c146109cb57600080fd5b8063a9059cbb146108e9578063afa4f3b214610909578063bea852521461092957600080fd5b80637d1db4a51161016457806391d55f411161013e57806391d55f411461087457806395d89b4114610894578063a457c2d7146108a9578063a7b97fa9146108c957600080fd5b80637d1db4a51461080757806388f820201461081d5780638da5cb5b1461085657600080fd5b806370a08231116101a057806370a082311461079c578063715018a6146107bc57806375f0a874146107d15780637abdc1ca146107f157600080fd5b80635d098b38146107485780635f189361146107685780636ddd17131461077d57600080fd5b806327c8f835116102a0578063437823ec1161023e57806347535d7b1161021857806347535d7b1461069a57806349bd5a5e146106bb57806352390c02146106ef5780635342acb41461070f57600080fd5b8063437823ec1461063a5780634549b0391461065a578063455a43961461067a57600080fd5b80633685d4191161027a5780633685d419146105ca57806339509351146105ea5780633b124fe71461060a5780633dc599ff1461062057600080fd5b806327c8f835146105545780632d83811914610588578063313ce567146105a857600080fd5b80631694505e1161030d578063200a692d116102e7578063200a692d146104e857806322976e0d146104fe57806323b872dd1461051457806323cc66011461053457600080fd5b80631694505e1461044d57806318160ddd146104995780631cdd3be3146104b857600080fd5b806306fdde0314610360578063078662911461038b578063095ea7b3146103cb5780630b6bb6f5146103eb5780630d075d9c1461040d5780630f683e901461042d57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610aac565b6040516103829190612d58565b60405180910390f35b34801561039757600080fd5b506103bb6103a6366004612dcb565b600b6020526000908152604090205460ff1681565b6040519015158152602001610382565b3480156103d757600080fd5b506103bb6103e6366004612de8565b610b3e565b3480156103f757600080fd5b5061040b610406366004612e2a565b610b55565b005b34801561041957600080fd5b5061040b610428366004612eef565b610bfa565b34801561043957600080fd5b5061040b610448366004612eef565b610c71565b34801561045957600080fd5b506104817f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610382565b3480156104a557600080fd5b506010545b604051908152602001610382565b3480156104c457600080fd5b506103bb6104d3366004612dcb565b600e6020526000908152604090205460ff1681565b3480156104f457600080fd5b506104aa601d5481565b34801561050a57600080fd5b506104aa60155481565b34801561052057600080fd5b506103bb61052f366004612f1b565b610cd7565b34801561054057600080fd5b5061040b61054f366004612f6c565b610d40565b34801561056057600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000dead81565b34801561059457600080fd5b506104aa6105a3366004612fa1565b610d95565b3480156105b457600080fd5b5060055460405160ff9091168152602001610382565b3480156105d657600080fd5b5061040b6105e5366004612dcb565b610e19565b3480156105f657600080fd5b506103bb610605366004612de8565b610fcb565b34801561061657600080fd5b506104aa60135481565b34801561062c57600080fd5b50600f546103bb9060ff1681565b34801561064657600080fd5b5061040b610655366004612dcb565b611001565b34801561066657600080fd5b506104aa610675366004612fba565b61104f565b34801561068657600080fd5b5061040b610695366004612f6c565b6110de565b3480156106a657600080fd5b506001546103bb90600160a01b900460ff1681565b3480156106c757600080fd5b506104817f0000000000000000000000004a3e343b0bbffbf352620b701aa8da808983d2ef81565b3480156106fb57600080fd5b5061040b61070a366004612dcb565b611156565b34801561071b57600080fd5b506103bb61072a366004612dcb565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561075457600080fd5b5061040b610763366004612dcb565b6112a9565b34801561077457600080fd5b5061040b6112f5565b34801561078957600080fd5b506020546103bb90610100900460ff1681565b3480156107a857600080fd5b506104aa6107b7366004612dcb565b611375565b3480156107c857600080fd5b5061040b6113d4565b3480156107dd57600080fd5b50601c54610481906001600160a01b031681565b3480156107fd57600080fd5b506104aa601f5481565b34801561081357600080fd5b506104aa60195481565b34801561082957600080fd5b506103bb610838366004612dcb565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561086257600080fd5b506000546001600160a01b0316610481565b34801561088057600080fd5b5061040b61088f366004612fa1565b611448565b3480156108a057600080fd5b506103756114cf565b3480156108b557600080fd5b506103bb6108c4366004612de8565b6114de565b3480156108d557600080fd5b5061040b6108e4366004612fdd565b61152d565b3480156108f557600080fd5b506103bb610904366004612de8565b61162c565b34801561091557600080fd5b5061040b610924366004612fa1565b611639565b34801561093557600080fd5b506103bb610944366004612dcb565b600a6020526000908152604090205460ff1681565b34801561096557600080fd5b506104aa60175481565b34801561097b57600080fd5b506104aa601e5481565b34801561099157600080fd5b506104aa6109a0366004613061565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109d757600080fd5b5061040b6109e636600461309a565b611668565b3480156109f757600080fd5b5061040b610a06366004612f6c565b6116de565b348015610a1757600080fd5b506104aa601a5481565b348015610a2d57600080fd5b506104aa601b5481565b348015610a4357600080fd5b5061040b610a52366004612dcb565b611733565b348015610a6357600080fd5b5061040b610a72366004612fa1565b61177e565b348015610a8357600080fd5b5061040b610a92366004612dcb565b6117fc565b348015610aa357600080fd5b5061040b6118e6565b606060038054610abb906130b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae7906130b5565b8015610b345780601f10610b0957610100808354040283529160200191610b34565b820191906000526020600020905b815481529060010190602001808311610b1757829003601f168201915b5050505050905090565b6000610b4b338484611925565b5060015b92915050565b6000546001600160a01b03163314610b885760405162461bcd60e51b8152600401610b7f906130ef565b60405180910390fd5b60005b81518160ff161015610bf657600160026000848460ff1681518110610bb257610bb2613124565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610bee81613150565b915050610b8b565b5050565b6000546001600160a01b03163314610c245760405162461bcd60e51b8152600401610b7f906130ef565b6019610c3a82610c348686611a49565b90611a49565b1115610c585760405162461bcd60e51b8152600401610b7f9061316f565b610c63838383611aa8565b601492909255601655601855565b6000546001600160a01b03163314610c9b5760405162461bcd60e51b8152600401610b7f906130ef565b6019610cab82610c348686611a49565b1115610cc95760405162461bcd60e51b8152600401610b7f9061316f565b601d92909255601e55601f55565b6000610ce4848484611aea565b610d368433610d318560405180606001604052806028815260200161334f602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611ef0565b611925565b5060019392505050565b6000546001600160a01b03163314610d6a5760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000601154821115610dfc5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b7f565b6000610e06611f2a565b9050610e128382611f4d565b9392505050565b6000546001600160a01b03163314610e435760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b0381166000908152600c602052604090205460ff16610eab5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b7f565b60005b600d54811015610bf657816001600160a01b0316600d8281548110610ed557610ed5613124565b6000918252602090912001546001600160a01b031603610fb957600d8054610eff90600190613195565b81548110610f0f57610f0f613124565b600091825260209091200154600d80546001600160a01b039092169183908110610f3b57610f3b613124565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d805480610f9357610f936131a8565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fc3816131be565b915050610eae565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b4b918590610d319086611a49565b6000546001600160a01b0316331461102b5760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006010548311156110a35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b7f565b816110c35760006110b384611f8f565b50949650610b4f95505050505050565b60006110ce84611f8f565b50939650610b4f95505050505050565b6000546001600160a01b031633146111085760405162461bcd60e51b8152600401610b7f906130ef565b600f5460ff161561112b5760405162461bcd60e51b8152600401610b7f906131d7565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111805760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b0381166000908152600c602052604090205460ff16156111e95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b7f565b6001600160a01b03811660009081526006602052604090205415611243576001600160a01b03811660009081526006602052604090205461122990610d95565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146112d35760405162461bcd60e51b8152600401610b7f906130ef565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461131f5760405162461bcd60e51b8152600401610b7f906130ef565b600f5460ff16156113665760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c995b9bdd5b98d959607a1b6044820152606401610b7f565b600f805460ff19166001179055565b6001600160a01b0381166000908152600c602052604081205460ff16156113b257506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b4f90610d95565b6000546001600160a01b031633146113fe5760405162461bcd60e51b8152600401610b7f906130ef565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114725760405162461bcd60e51b8152600401610b7f906130ef565b601b81905561148b606461148560105490565b90611f4d565b601b5410156114cc5760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b7f565b50565b606060048054610abb906130b5565b6000610b4b3384610d3185604051806060016040528060258152602001613377602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611ef0565b6000546001600160a01b031633146115575760405162461bcd60e51b8152600401610b7f906130ef565b600f5460ff161561157a5760405162461bcd60e51b8152600401610b7f906131d7565b60005b828110156115eb5781600e600086868581811061159c5761159c613124565b90506020020160208101906115b19190612dcb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806115e3816131be565b91505061157d565b507f6a7a5947ac5b035c56afedd80341423bf33595b569bd49d4e2f82b23e72275e383838360405161161f9392919061321b565b60405180910390a1505050565b6000610b4b338484611aea565b6000546001600160a01b031633146116635760405162461bcd60e51b8152600401610b7f906130ef565b601a55565b6000546001600160a01b031633146116925760405162461bcd60e51b8152600401610b7f906130ef565b6020805461ff0019166101008315159081029190911782556040519081527f4b2f02f52c63d8e0a67a39776bc2d158740139cfef7438af1666c33a6a29dac3910160405180910390a150565b6000546001600160a01b031633146117085760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461175d5760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146117a85760405162461bcd60e51b8152600401610b7f906130ef565b60198190556117bb606461148560105490565b60195410156114cc5760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b7f565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610b7f906130ef565b6001600160a01b03811661188b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119105760405162461bcd60e51b8152600401610b7f906130ef565b6001805460ff60a01b1916600160a01b179055565b6001600160a01b0383166119875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b7f565b6001600160a01b0382166119e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b7f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080611a568385613274565b905083811015610e125760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b7f565b6019611abe611ab78484611a49565b8590611a49565b1115611adc5760405162461bcd60e51b8152600401610b7f9061316f565b601392909255601555601755565b60015483908390600160a01b900460ff1680611b1e57506001600160a01b03821660009081526002602052604090205460ff165b80611b4157506001600160a01b03811660009081526002602052604090205460ff165b611b785760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b7f565b6001600160a01b038516611bdc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b7f565b6001600160a01b038416611c3e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b7f565b60008311611ca05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b7f565b6001600160a01b0385166000908152600e602052604090205460ff16158015611ce257506001600160a01b0384166000908152600e602052604090205460ff16155b611d245760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610b7f565b6001600160a01b03851660009081526009602052604081205460ff1680611d6357506001600160a01b03851660009081526009602052604090205460ff165b80611d8657506001600160a01b0385166000908152600a602052604090205460ff165b90507f0000000000000000000000004a3e343b0bbffbf352620b701aa8da808983d2ef6001600160a01b0316856001600160a01b031614158015611dc8575080155b15611e44576000611dd886611375565b601b54909150611de88683613274565b1115611e425760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610b7f565b505b6000611e4f30611375565b601a5490915081108015908190611e69575060205460ff16155b8015611ea657507f0000000000000000000000004a3e343b0bbffbf352620b701aa8da808983d2ef6001600160a01b0316876001600160a01b0316145b8015611eb95750602054610100900460ff165b15611edb57601a54601c54909250611edb9083906001600160a01b0316611fea565b611ee68888886121c4565b5050505050505050565b60008184841115611f145760405162461bcd60e51b8152600401610b7f9190612d58565b506000611f218486613195565b95945050505050565b6000806000611f3761245e565b9092509050611f468282611f4d565b9250505090565b6000610e1283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125e0565b6000806000806000806000806000806000611fa98c61260e565b93509350935093506000806000611fca8f878787611fc5611f2a565b612663565b919f509d509b509599509397509195509350505050919395979092949650565b6020805460ff191660011781556040805160028082526060820183526000939192909183019080368337019050509050308160008151811061202e5761202e613124565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d09190613287565b816001815181106120e3576120e3613124565b60200260200101906001600160a01b031690816001600160a01b03168152505061212e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85611925565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906121839086906000908690889042906004016132a4565b600060405180830381600087803b15801561219d57600080fd5b505af11580156121b1573d6000803e3d6000fd5b50506020805460ff191690555050505050565b7f0000000000000000000000004a3e343b0bbffbf352620b701aa8da808983d2ef6001600160a01b0316826001600160a01b03160361220e5761220e601d54601e54601f54611aa8565b6001600160a01b03831660009081526009602052604090205460ff168061224d57506001600160a01b03821660009081526009602052604090205460ff165b1561226b57612266600060138190556015819055601755565b6122ee565b6001600160a01b0383166000908152600b602052604090205460ff166122ee576019548111156122ee5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b7f565b6001600160a01b0383166000908152600c602052604090205460ff16801561232f57506001600160a01b0382166000908152600c602052604090205460ff16155b156123445761233f8383836126c5565b612442565b6001600160a01b0383166000908152600c602052604090205460ff1615801561238557506001600160a01b0382166000908152600c602052604090205460ff165b156123955761233f8383836128ca565b6001600160a01b0383166000908152600c602052604090205460ff161580156123d757506001600160a01b0382166000908152600c602052604090205460ff16155b156123e75761233f838383612989565b6001600160a01b0383166000908152600c602052604090205460ff16801561242757506001600160a01b0382166000908152600c602052604090205460ff165b156124375761233f8383836129e3565b612442838383612989565b612459601454601355601654601555601854601755565b505050565b6011546010546000918291825b600d548110156125b0578260066000600d848154811061248d5761248d613124565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124f857508160076000600d84815481106124d1576124d1613124565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561250e57601154601054945094505050509091565b61255460066000600d848154811061252857612528613124565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612a68565b925061259c60076000600d848154811061257057612570613124565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612a68565b9150806125a8816131be565b91505061246b565b506010546011546125c091611f4d565b8210156125d7576011546010549350935050509091565b90939092509050565b600081836126015760405162461bcd60e51b8152600401610b7f9190612d58565b506000611f218486613315565b600080600080600061261f86612aaa565b9050600061262c87612ac6565b9050600061263988612ae2565b905060006126538261264d85818d89612a68565b90612a68565b9993985091965094509092505050565b60008080806126728986612afe565b905060006126808987612afe565b9050600061268e8988612afe565b9050600061269c8989612afe565b905060006126b08261264d85818989612a68565b949d949c50929a509298505050505050505050565b60008060008060008060006126d988611f8f565b965096509650965096509650965061271f88600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612a6890919063ffffffff16565b6001600160a01b038b1660009081526007602090815260408083209390935560069052205461274e9088612a68565b6001600160a01b03808c1660009081526006602052604080822093909355908b168152205461277d9087611a49565b6001600160a01b038a16600090815260066020526040902055601554156127e8576127a782612b80565b60405182815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b60175415612867576127f981612c08565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161285e91815260200190565b60405180910390a35b6128718584612d34565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516128b691815260200190565b60405180910390a350505050505050505050565b60008060008060008060006128de88611f8f565b965096509650965096509650965061292487600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612a6890919063ffffffff16565b6001600160a01b03808c16600090815260066020908152604080832094909455918c1681526007909152205461295a9085611a49565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461277d9087611a49565b600080600080600080600061299d88611f8f565b965096509650965096509650965061274e87600660008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612a6890919063ffffffff16565b60008060008060008060006129f788611f8f565b9650965096509650965096509650612a3d88600760008d6001600160a01b03166001600160a01b0316815260200190815260200160002054612a6890919063ffffffff16565b6001600160a01b038b1660009081526007602090815260408083209390935560069052205461292490885b6000610e1283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef0565b6000610b4f606461148560135485612afe90919063ffffffff16565b6000610b4f606461148560155485612afe90919063ffffffff16565b6000610b4f606461148560175485612afe90919063ffffffff16565b600082600003612b1057506000610b4f565b6000612b1c8385613337565b905082612b298583613315565b14610e125760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b7f565b6000612b8a611f2a565b90506000612b988383612afe565b30600090815260066020526040902054909150612bb59082611a49565b30600090815260066020908152604080832093909355600c9052205460ff16156124595730600090815260076020526040902054612bf39084611a49565b30600090815260076020526040902055505050565b6000612c12611f2a565b90506000612c208383612afe565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead16600090815260066020526040902054909150612c669082611a49565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead16600090815260066020908152604080832093909355600c9052205460ff1615612459576001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead16600090815260076020526040902054612cf69084611a49565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead16600090815260076020526040902055505050565b601154612d419083612a68565b601155601254612d519082611a49565b6012555050565b600060208083528351808285015260005b81811015612d8557858101830151858201604001528201612d69565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114cc57600080fd5b8035612dc681612da6565b919050565b600060208284031215612ddd57600080fd5b8135610e1281612da6565b60008060408385031215612dfb57600080fd5b8235612e0681612da6565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215612e3d57600080fd5b823567ffffffffffffffff80821115612e5557600080fd5b818501915085601f830112612e6957600080fd5b813581811115612e7b57612e7b612e14565b8060051b604051601f19603f83011681018181108582111715612ea057612ea0612e14565b604052918252848201925083810185019188831115612ebe57600080fd5b938501935b82851015612ee357612ed485612dbb565b84529385019392850192612ec3565b98975050505050505050565b600080600060608486031215612f0457600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f3057600080fd5b8335612f3b81612da6565b92506020840135612f4b81612da6565b929592945050506040919091013590565b80358015158114612dc657600080fd5b60008060408385031215612f7f57600080fd5b8235612f8a81612da6565b9150612f9860208401612f5c565b90509250929050565b600060208284031215612fb357600080fd5b5035919050565b60008060408385031215612fcd57600080fd5b82359150612f9860208401612f5c565b600080600060408486031215612ff257600080fd5b833567ffffffffffffffff8082111561300a57600080fd5b818601915086601f83011261301e57600080fd5b81358181111561302d57600080fd5b8760208260051b850101111561304257600080fd5b6020928301955093506130589186019050612f5c565b90509250925092565b6000806040838503121561307457600080fd5b823561307f81612da6565b9150602083013561308f81612da6565b809150509250929050565b6000602082840312156130ac57600080fd5b610e1282612f5c565b600181811c908216806130c957607f821691505b6020821081036130e957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81036131665761316661313a565b60010192915050565b6020808252600c908201526b0e8c2f040e8dede40d0d2ced60a31b604082015260600190565b81810381811115610b4f57610b4f61313a565b634e487b7160e01b600052603160045260246000fd5b6000600182016131d0576131d061313a565b5060010190565b60208082526024908201527f426c61636b6c6973742068617320616c7265616479206265656e2072656e6f756040820152631b98d95960e21b606082015260800190565b6040808252810183905260008460608301825b8681101561325e57823561324181612da6565b6001600160a01b031682526020928301929091019060010161322e565b5080925050508215156020830152949350505050565b80820180821115610b4f57610b4f61313a565b60006020828403121561329957600080fd5b8151610e1281612da6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132f45784516001600160a01b0316835293830193918301916001016132cf565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261333257634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b4f57610b4f61313a56fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ea8ed680d4684a7013b7e5c7183fcabdb8065e603cd61242b5d057764f6339f364736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000428567060a9c682b8583e0aa18734e2f4aed1efd
-----Decoded View---------------
Arg [0] : _owner (address): 0x428567060A9C682b8583E0AA18734e2F4aeD1EFd
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000428567060a9c682b8583e0aa18734e2f4aed1efd
Deployed Bytecode Sourcemap
20952:20592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23941:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21613:52;;;;;;;;;;-1:-1:-1;21613:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1259:14:1;;1252:22;1234:41;;1222:2;1207:18;21613:52:0;1094:187:1;24853:161:0;;;;;;;;;;-1:-1:-1;24853:161:0;;;;;:::i;:::-;;:::i;20755:186::-;;;;;;;;;;-1:-1:-1;20755:186:0;;;;;:::i;:::-;;:::i;:::-;;39198:360;;;;;;;;;;-1:-1:-1;39198:360:0;;;;;:::i;:::-;;:::i;39576:297::-;;;;;;;;;;-1:-1:-1;39576:297:0;;;;;:::i;:::-;;:::i;21084:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3376:32:1;;;3358:51;;3346:2;3331:18;21084:51:0;3185:230:1;24218:95:0;;;;;;;;;;-1:-1:-1;24298:7:0;;24218:95;;;3566:25:1;;;3554:2;3539:18;24218:95:0;3420:177:1;21758:46:0;;;;;;;;;;-1:-1:-1;21758:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22742:30;;;;;;;;;;;;;;;;22133:32;;;;;;;;;;;;;;;;25022:313;;;;;;;;;;-1:-1:-1;25022:313:0;;;;;:::i;:::-;;:::i;28005:136::-;;;;;;;;;;-1:-1:-1;28005:136:0;;;;;:::i;:::-;;:::i;22612:81::-;;;;;;;;;;;;;;;26765:253;;;;;;;;;;-1:-1:-1;26765:253:0;;;;;:::i;:::-;;:::i;24127:83::-;;;;;;;;;;-1:-1:-1;24193:9:0;;24127:83;;24193:9;;;;5083:36:1;;5071:2;5056:18;24127:83:0;4941:184:1;27367:479:0;;;;;;;;;;-1:-1:-1;27367:479:0;;;;;:::i;:::-;;:::i;25343:218::-;;;;;;;;;;-1:-1:-1;25343:218:0;;;;;:::i;:::-;;:::i;22050:26::-;;;;;;;;;;;;;;;;21811:38;;;;;;;;;;-1:-1:-1;21811:38:0;;;;;;;;29065:111;;;;;;;;;;-1:-1:-1;29065:111:0;;;;;:::i;:::-;;:::i;26319:438::-;;;;;;;;;;-1:-1:-1;26319:438:0;;;;;:::i;:::-;;:::i;40592:210::-;;;;;;;;;;-1:-1:-1;40592:210:0;;;;;:::i;:::-;;:::i;20335:26::-;;;;;;;;;;-1:-1:-1;20335:26:0;;;;-1:-1:-1;;;20335:26:0;;;;;;21142:38;;;;;;;;;;;;;;;27026:333;;;;;;;;;;-1:-1:-1;27026:333:0;;;;;:::i;:::-;;:::i;29184:123::-;;;;;;;;;;-1:-1:-1;29184:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;29272:27:0;29248:4;29272:27;;;:18;:27;;;;;;;;;29184:123;41201:122;;;;;;;;;;-1:-1:-1;41201:122:0;;;;;:::i;:::-;;:::i;40424:160::-;;;;;;;;;;;;;:::i;22885:30::-;;;;;;;;;;-1:-1:-1;22885:30:0;;;;;;;;;;;24321:198;;;;;;;;;;-1:-1:-1;24321:198:0;;;;;:::i;:::-;;:::i;2412:148::-;;;;;;;;;;;;;:::i;22483:92::-;;;;;;;;;;-1:-1:-1;22483:92:0;;;;-1:-1:-1;;;;;22483:92:0;;;22823:31;;;;;;;;;;;;;;;;22320:46;;;;;;;;;;;;;;;;26191:120;;;;;;;;;;-1:-1:-1;26191:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;26283:20:0;26259:4;26283:20;;;:11;:20;;;;;;;;;26191:120;1769:79;;;;;;;;;;-1:-1:-1;1807:7:0;1834:6;-1:-1:-1;;;;;1834:6:0;1769:79;;39884:185;;;;;;;;;;-1:-1:-1;39884:185:0;;;;;:::i;:::-;;:::i;24032:87::-;;;;;;;;;;;;;:::i;25569:269::-;;;;;;;;;;-1:-1:-1;25569:269:0;;;;;:::i;:::-;;:::i;40810:383::-;;;;;;;;;;-1:-1:-1;40810:383:0;;;;;:::i;:::-;;:::i;24527:167::-;;;;;;;;;;-1:-1:-1;24527:167:0;;;;;:::i;:::-;;:::i;41331:114::-;;;;;;;;;;-1:-1:-1;41331:114:0;;;;;:::i;:::-;;:::i;21547:59::-;;;;;;;;;;-1:-1:-1;21547:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22234:27;;;;;;;;;;;;;;;;22779:37;;;;;;;;;;;;;;;;24702:143;;;;;;;;;;-1:-1:-1;24702:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;24810:18:0;;;24783:7;24810:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24702:143;40275:141;;;;;;;;;;-1:-1:-1;40275:141:0;;;;;:::i;:::-;;:::i;27854:143::-;;;;;;;;;;-1:-1:-1;27854:143:0;;;;;:::i;:::-;;:::i;22373:48::-;;;;;;;;;;;;;;;;22428:46;;;;;;;;;;;;;;;;29319:110;;;;;;;;;;-1:-1:-1;29319:110:0;;;;;:::i;:::-;;:::i;40081:186::-;;;;;;;;;;-1:-1:-1;40081:186:0;;;;;:::i;:::-;;:::i;2715:244::-;;;;;;;;;;-1:-1:-1;2715:244:0;;;;;:::i;:::-;;:::i;20675:72::-;;;;;;;;;;;;;:::i;23941:83::-;23978:13;24011:5;24004:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23941:83;:::o;24853:161::-;24928:4;24945:39;902:10;24968:7;24977:6;24945:8;:39::i;:::-;-1:-1:-1;25002:4:0;24853:161;;;;;:::o;20755:186::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;;;;;;;;;20842:7:::1;20838:96;20859:6;:13;20855:1;:17;;;20838:96;;;20918:4;20894:10;:21;20905:6;20912:1;20905:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20894:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20894:21:0;:28;;-1:-1:-1;;20894:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20874:3;::::1;::::0;::::1;:::i;:::-;;;;20838:96;;;;20755:186:::0;:::o;39198:360::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;39360:2:::1;39319:37;39348:7:::0;39319:24:::1;:6:::0;39330:12;39319:10:::1;:24::i;:::-;:28:::0;::::1;:37::i;:::-;:43;;39311:68;;;;-1:-1:-1::0;;;39311:68:0::1;;;;;;;:::i;:::-;39390:41;39401:6;39409:12;39423:7;39390:10;:41::i;:::-;39442:15;:24:::0;;;;39477:21:::1;:36:::0;39524:16:::1;:26:::0;39198:360::o;39576:297::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;39739:2:::1;39698:37;39727:7:::0;39698:24:::1;:6:::0;39709:12;39698:10:::1;:24::i;:37::-;:43;;39690:68;;;;-1:-1:-1::0;;;39690:68:0::1;;;;;;;:::i;:::-;39769:11;:20:::0;;;;39800:17:::1;:32:::0;39843:12:::1;:22:::0;39576:297::o;25022:313::-;25120:4;25137:36;25147:6;25155:9;25166:6;25137:9;:36::i;:::-;25184:121;25193:6;902:10;25215:89;25253:6;25215:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25215:19:0;;;;;;:11;:19;;;;;;;;902:10;25215:33;;;;;;;;;;:37;:89::i;:::-;25184:8;:121::i;:::-;-1:-1:-1;25323:4:0;25022:313;;;;;:::o;28005:136::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28096:26:0;;;::::1;;::::0;;;:20:::1;:26;::::0;;;;:37;;-1:-1:-1;;28096:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28005:136::o;26765:253::-;26831:7;26870;;26859;:18;;26851:73;;;;-1:-1:-1;;;26851:73:0;;8872:2:1;26851:73:0;;;8854:21:1;8911:2;8891:18;;;8884:30;8950:34;8930:18;;;8923:62;-1:-1:-1;;;9001:18:1;;;8994:40;9051:19;;26851:73:0;8670:406:1;26851:73:0;26935:19;26958:10;:8;:10::i;:::-;26935:33;-1:-1:-1;26986:24:0;:7;26935:33;26986:11;:24::i;:::-;26979:31;26765:253;-1:-1:-1;;;26765:253:0:o;27367:479::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27449:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27441:60;;;::::0;-1:-1:-1;;;27441:60:0;;9283:2:1;27441:60:0::1;::::0;::::1;9265:21:1::0;9322:2;9302:18;;;9295:30;9361:29;9341:18;;;9334:57;9408:18;;27441:60:0::1;9081:351:1::0;27441:60:0::1;27517:9;27512:327;27536:9;:16:::0;27532:20;::::1;27512:327;;;27594:7;-1:-1:-1::0;;;;;27578:23:0::1;:9;27588:1;27578:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27578:12:0::1;:23:::0;27574:254:::1;;27637:9;27647:16:::0;;:20:::1;::::0;27666:1:::1;::::0;27647:20:::1;:::i;:::-;27637:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27622:9:::1;:12:::0;;-1:-1:-1;;;;;27637:31:0;;::::1;::::0;27632:1;;27622:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27622:46:0::1;-1:-1:-1::0;;;;;27622:46:0;;::::1;;::::0;;27687:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27726:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27726:28:0::1;::::0;;27773:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27773:15:0;;;;;-1:-1:-1;;;;;;27773:15:0::1;::::0;;;;;20838:96:::1;20755:186:::0;:::o;27574:254::-:1;27554:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27512:327;;25343:218:::0;902:10;25431:4;25480:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25480:34:0;;;;;;;;;;25431:4;;25448:83;;25471:7;;25480:50;;25519:10;25480:38;:50::i;29065:111::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29134:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29134:34:0::1;29164:4;29134:34;::::0;;29065:111::o;26319:438::-;26409:7;26448;;26437;:18;;26429:62;;;;-1:-1:-1;;;26429:62:0;;10044:2:1;26429:62:0;;;10026:21:1;10083:2;10063:18;;;10056:30;10122:33;10102:18;;;10095:61;10173:18;;26429:62:0;9842:355:1;26429:62:0;26507:17;26502:248;;26542:15;26567:19;26578:7;26567:10;:19::i;:::-;-1:-1:-1;26541:45:0;;-1:-1:-1;26601:14:0;;-1:-1:-1;;;;;;26601:14:0;26502:248;26650:23;26682:19;26693:7;26682:10;:19::i;:::-;-1:-1:-1;26648:53:0;;-1:-1:-1;26716:22:0;;-1:-1:-1;;;;;;26716:22:0;40592:210;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;40684:18:::1;::::0;::::1;;:27;40676:76;;;;-1:-1:-1::0;;;40676:76:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40763:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;40763:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40592:210::o;27026:333::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27109:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27108:21;27100:61;;;::::0;-1:-1:-1;;;27100:61:0;;9283:2:1;27100:61:0::1;::::0;::::1;9265:21:1::0;9322:2;9302:18;;;9295:30;9361:29;9341:18;;;9334:57;9408:18;;27100:61:0::1;9081:351:1::0;27100:61:0::1;-1:-1:-1::0;;;;;27175:16:0;::::1;27194:1;27175:16:::0;;;:7:::1;:16;::::0;;;;;:20;27172:108:::1;;-1:-1:-1::0;;;;;27251:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;27231:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;27212:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;27172:108:::1;-1:-1:-1::0;;;;;27290:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27290:27:0::1;27313:4;27290:27:::0;;::::1;::::0;;;27328:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27328:23:0::1;::::0;;::::1;::::0;;27026:333::o;41201:122::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;41288:15:::1;:27:::0;;-1:-1:-1;;;;;;41288:27:0::1;-1:-1:-1::0;;;;;41288:27:0;;;::::1;::::0;;;::::1;::::0;;41201:122::o;40424:160::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;40491:18:::1;::::0;::::1;;:27;40483:57;;;::::0;-1:-1:-1;;;40483:57:0;;10809:2:1;40483:57:0::1;::::0;::::1;10791:21:1::0;10848:2;10828:18;;;10821:30;-1:-1:-1;;;10867:18:1;;;10860:47;10924:18;;40483:57:0::1;10607:341:1::0;40483:57:0::1;40551:18;:25:::0;;-1:-1:-1;;40551:25:0::1;40572:4;40551:25;::::0;;40424:160::o;24321:198::-;-1:-1:-1;;;;;24411:20:0;;24387:7;24411:20;;;:11;:20;;;;;;;;24407:49;;;-1:-1:-1;;;;;;24440:16:0;;;;;:7;:16;;;;;;;24321:198::o;24407:49::-;-1:-1:-1;;;;;24494:16:0;;;;;;:7;:16;;;;;;24474:37;;:19;:37::i;2412:148::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;2519:1:::1;2503:6:::0;;2482:40:::1;::::0;-1:-1:-1;;;;;2503:6:0;;::::1;::::0;2482:40:::1;::::0;2519:1;;2482:40:::1;2550:1;2533:19:::0;;-1:-1:-1;;;;;;2533:19:0::1;::::0;;2412:148::o;39884:185::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;39959:14:::1;:26:::0;;;40022:22:::1;40040:3;40022:13;24298:7:::0;;;24218:95;40022:13:::1;:17:::0;::::1;:22::i;:::-;40004:14;;:40;;39996:66;;;::::0;-1:-1:-1;;;39996:66:0;;11155:2:1;39996:66:0::1;::::0;::::1;11137:21:1::0;11194:2;11174:18;;;11167:30;-1:-1:-1;;;11213:18:1;;;11206:43;11266:18;;39996:66:0::1;10953:337:1::0;39996:66:0::1;39884:185:::0;:::o;24032:87::-;24071:13;24104:7;24097:14;;;;;:::i;25569:269::-;25662:4;25679:129;902:10;25702:7;25711:96;25750:15;25711:96;;;;;;;;;;;;;;;;;902:10;25711:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25711:34:0;;;;;;;;;;;;:38;:96::i;40810:383::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;40928:18:::1;::::0;::::1;;:27;40920:76;;;;-1:-1:-1::0;;;40920:76:0::1;;;;;;;:::i;:::-;41011:9;41007:113;41026:19:::0;;::::1;41007:113;;;41097:11;41067:14;:27;41082:8;;41091:1;41082:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41067:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41067:27:0;:41;;-1:-1:-1;;41067:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41047:3;::::1;::::0;::::1;:::i;:::-;;;;41007:113;;;;41137:48;41163:8;;41173:11;41137:48;;;;;;;;:::i;:::-;;;;;;;;40810:383:::0;;;:::o;24527:167::-;24605:4;24622:42;902:10;24646:9;24657:6;24622:9;:42::i;41331:114::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;41410:18:::1;:27:::0;41331:114::o;40275:141::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;40342:11:::1;:22:::0;;-1:-1:-1;;40342:22:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;40380:28:::1;::::0;1234:41:1;;;40380:28:0::1;::::0;1207:18:1;40380:28:0::1;;;;;;;40275:141:::0;:::o;27854:143::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27946:32:0;;;::::1;;::::0;;;:26:::1;:32;::::0;;;;:43;;-1:-1:-1;;27946:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27854:143::o;29319:110::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29386:27:0::1;29416:5;29386:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29386:35:0::1;::::0;;29319:110::o;40081:186::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;40158:12:::1;:26:::0;;;40219:22:::1;40237:3;40219:13;24298:7:::0;;;24218:95;40219:22:::1;40203:12;;:38;;40195:64;;;::::0;-1:-1:-1;;;40195:64:0;;11155:2:1;40195:64:0::1;::::0;::::1;11137:21:1::0;11194:2;11174:18;;;11167:30;-1:-1:-1;;;11213:18:1;;;11206:43;11266:18;;40195:64:0::1;10953:337:1::0;2715:244:0;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2804:22:0;::::1;2796:73;;;::::0;-1:-1:-1;;;2796:73:0;;12296:2:1;2796:73:0::1;::::0;::::1;12278:21:1::0;12335:2;12315:18;;;12308:30;12374:34;12354:18;;;12347:62;-1:-1:-1;;;12425:18:1;;;12418:36;12471:19;;2796:73:0::1;12094:402:1::0;2796:73:0::1;2906:6;::::0;;2885:38:::1;::::0;-1:-1:-1;;;;;2885:38:0;;::::1;::::0;2906:6;::::1;::::0;2885:38:::1;::::0;::::1;2934:6;:17:::0;;-1:-1:-1;;;;;;2934:17:0::1;-1:-1:-1::0;;;;;2934:17:0;;;::::1;::::0;;;::::1;::::0;;2715:244::o;20675:72::-;1981:6;;-1:-1:-1;;;;;1981:6:0;902:10;1981:22;1973:67;;;;-1:-1:-1;;;1973:67:0;;;;;;;:::i;:::-;20735:4:::1;20726:13:::0;;-1:-1:-1;;;;20726:13:0::1;-1:-1:-1::0;;;20726:13:0::1;::::0;;20675:72::o;25846:337::-;-1:-1:-1;;;;;25939:19:0;;25931:68;;;;-1:-1:-1;;;25931:68:0;;12703:2:1;25931:68:0;;;12685:21:1;12742:2;12722:18;;;12715:30;12781:34;12761:18;;;12754:62;-1:-1:-1;;;12832:18:1;;;12825:34;12876:19;;25931:68:0;12501:400:1;25931:68:0;-1:-1:-1;;;;;26018:21:0;;26010:68;;;;-1:-1:-1;;;26010:68:0;;13108:2:1;26010:68:0;;;13090:21:1;13147:2;13127:18;;;13120:30;13186:34;13166:18;;;13159:62;-1:-1:-1;;;13237:18:1;;;13230:32;13279:19;;26010:68:0;12906:398:1;26010:68:0;-1:-1:-1;;;;;26091:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26143:32;;3566:25:1;;;26143:32:0;;3539:18:1;26143:32:0;;;;;;;25846:337;;;:::o;3202:181::-;3260:7;;3292:5;3296:1;3292;:5;:::i;:::-;3280:17;;3321:1;3316;:6;;3308:46;;;;-1:-1:-1;;;3308:46:0;;13641:2:1;3308:46:0;;;13623:21:1;13680:2;13660:18;;;13653:30;13719:29;13699:18;;;13692:57;13766:18;;3308:46:0;13439:351:1;38915:265:0;39058:2;39017:37;39028:25;:12;39045:7;39028:16;:25::i;:::-;39017:6;;:10;:37::i;:::-;:43;;39009:68;;;;-1:-1:-1;;;39009:68:0;;;;;;;:::i;:::-;39088:7;:16;;;;39115:13;:28;39154:8;:18;38915:265::o;33225:1360::-;20477:6;;33325:4;;33331:2;;-1:-1:-1;;;20477:6:0;;;;;:26;;-1:-1:-1;;;;;;20487:16:0;;;;;;:10;:16;;;;;;;;20477:26;:44;;;-1:-1:-1;;;;;;20507:14:0;;;;;;:10;:14;;;;;;;;20477:44;20469:65;;;;-1:-1:-1;;;20469:65:0;;13997:2:1;20469:65:0;;;13979:21:1;14036:1;14016:18;;;14009:29;-1:-1:-1;;;14054:18:1;;;14047:38;14102:18;;20469:65:0;13795:331:1;20469:65:0;-1:-1:-1;;;;;33362:18:0;::::1;33354:68;;;::::0;-1:-1:-1;;;33354:68:0;;14333:2:1;33354:68:0::1;::::0;::::1;14315:21:1::0;14372:2;14352:18;;;14345:30;14411:34;14391:18;;;14384:62;-1:-1:-1;;;14462:18:1;;;14455:35;14507:19;;33354:68:0::1;14131:401:1::0;33354:68:0::1;-1:-1:-1::0;;;;;33441:16:0;::::1;33433:64;;;::::0;-1:-1:-1;;;33433:64:0;;14739:2:1;33433:64:0::1;::::0;::::1;14721:21:1::0;14778:2;14758:18;;;14751:30;14817:34;14797:18;;;14790:62;-1:-1:-1;;;14868:18:1;;;14861:33;14911:19;;33433:64:0::1;14537:399:1::0;33433:64:0::1;33525:1;33516:6;:10;33508:64;;;::::0;-1:-1:-1;;;33508:64:0;;15143:2:1;33508:64:0::1;::::0;::::1;15125:21:1::0;15182:2;15162:18;;;15155:30;15221:34;15201:18;;;15194:62;-1:-1:-1;;;15272:18:1;;;15265:39;15321:19;;33508:64:0::1;14941:405:1::0;33508:64:0::1;-1:-1:-1::0;;;;;33592:20:0;::::1;;::::0;;;:14:::1;:20;::::0;;;;;::::1;;33591:21;:44:::0;::::1;;;-1:-1:-1::0;;;;;;33617:18:0;::::1;;::::0;;;:14:::1;:18;::::0;;;;;::::1;;33616:19;33591:44;33583:76;;;::::0;-1:-1:-1;;;33583:76:0;;15553:2:1;33583:76:0::1;::::0;::::1;15535:21:1::0;15592:2;15572:18;;;15565:30;-1:-1:-1;;;15611:18:1;;;15604:49;15670:18;;33583:76:0::1;15351:343:1::0;33583:76:0::1;-1:-1:-1::0;;;;;33694:24:0;::::1;33671:20;33694:24:::0;;;:18:::1;:24;::::0;;;;;::::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;33722:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;33694:50;:84;;;-1:-1:-1::0;;;;;;33748:30:0;::::1;;::::0;;;:26:::1;:30;::::0;;;;;::::1;;33694:84;33671:107;;33809:13;-1:-1:-1::0;;;;;33803:19:0::1;:2;-1:-1:-1::0;;;;;33803:19:0::1;;;:39;;;;;33827:15;33826:16;33803:39;33799:237;;;33859:32;33894:13;33904:2;33894:9;:13::i;:::-;33969:14;::::0;33859:48;;-1:-1:-1;33932:33:0::1;33959:6:::0;33859:48;33932:33:::1;:::i;:::-;:51;;33924:100;;;::::0;-1:-1:-1;;;33924:100:0;;15901:2:1;33924:100:0::1;::::0;::::1;15883:21:1::0;15940:2;15920:18;;;15913:30;15979:34;15959:18;;;15952:62;-1:-1:-1;;;16030:18:1;;;16023:34;16074:19;;33924:100:0::1;15699:400:1::0;33924:100:0::1;33844:192;33799:237;34048:28;34079:24;34097:4;34079:9;:24::i;:::-;34173:18;::::0;34048:55;;-1:-1:-1;34149:42:0;::::1;::::0;::::1;::::0;;;34222:43:::1;;-1:-1:-1::0;34259:6:0::1;::::0;::::1;;34258:7;34222:43;:79;;;;;34288:13;-1:-1:-1::0;;;;;34282:19:0::1;:2;-1:-1:-1::0;;;;;34282:19:0::1;;34222:79;:107;;;;-1:-1:-1::0;34318:11:0::1;::::0;::::1;::::0;::::1;;;34222:107;34204:323;;;34379:18;::::0;34499:15:::1;::::0;34379:18;;-1:-1:-1;34460:55:0::1;::::0;34379:18;;-1:-1:-1;;;;;34499:15:0::1;34460:16;:55::i;:::-;34547:30;34562:4;34567:2;34570:6;34547:14;:30::i;:::-;33343:1242;;;33225:1360:::0;;;;;:::o;3839:192::-;3925:7;3961:12;3953:6;;;;3945:29;;;;-1:-1:-1;;;3945:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3985:9:0;3997:5;4001:1;3997;:5;:::i;:::-;3985:17;3839:192;-1:-1:-1;;;;;3839:192:0:o;30990:163::-;31031:7;31052:15;31069;31088:19;:17;:19::i;:::-;31051:56;;-1:-1:-1;31051:56:0;-1:-1:-1;31125:20:0;31051:56;;31125:11;:20::i;:::-;31118:27;;;;30990:163;:::o;4792:132::-;4850:7;4877:39;4881:1;4884;4877:39;;;;;;;;;;;;;;;;;:3;:39::i;29596:457::-;29655:7;29664;29673;29682;29691;29700;29709;29730:23;29755:12;29769:18;29789:13;29806:20;29818:7;29806:11;:20::i;:::-;29729:97;;;;;;;;29838:15;29855:23;29880:12;29896:57;29908:7;29917:4;29923:10;29935:5;29942:10;:8;:10::i;:::-;29896:11;:57::i;:::-;29837:116;;-1:-1:-1;29837:116:0;-1:-1:-1;29837:116:0;-1:-1:-1;30004:15:0;;-1:-1:-1;30021:4:0;;-1:-1:-1;30027:10:0;;-1:-1:-1;30039:5:0;-1:-1:-1;;;;29596:457:0;;;;;;;;;:::o;34593:603::-;22956:6;:13;;-1:-1:-1;;22956:13:0;22965:4;22956:13;;;34767:16:::1;::::0;;34781:1:::1;34767:16:::0;;;;;::::1;::::0;;-1:-1:-1;;34767:16:0;;34781:1;;34767:16;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;34767:16:0::1;34743:40;;34812:4;34794;34799:1;34794:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;34794:23:0::1;;;-1:-1:-1::0;;;;;34794:23:0::1;;;::::0;::::1;34838:15;-1:-1:-1::0;;;;;34838:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34828:4;34833:1;34828:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;34828:32:0::1;;;-1:-1:-1::0;;;;;34828:32:0::1;;;::::0;::::1;34873:62;34890:4;34905:15;34923:11;34873:8;:62::i;:::-;34974:214;::::0;-1:-1:-1;;;34974:214:0;;-1:-1:-1;;;;;34974:15:0::1;:66;::::0;::::1;::::0;:214:::1;::::0;35055:11;;35081:1:::1;::::0;35125:4;;35144:3;;35162:15:::1;::::0;34974:214:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22992:6:0;:14;;-1:-1:-1;;22992:14:0;;;-1:-1:-1;;;;;34593:603:0:o;35277:1175::-;35388:13;-1:-1:-1;;;;;35377:24:0;:9;-1:-1:-1;;;;;35377:24:0;;35374:111;;35417:56;35428:11;;35441:17;;35460:12;;35417:10;:56::i;:::-;-1:-1:-1;;;;;35518:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;35548:29:0;;;;;;:18;:29;;;;;;;;35518:59;35515:275;;;35595:14;32981:1;32971:7;:11;;;32993:13;:17;;;33021:8;:12;32928:113;35595:14;35515:275;;;-1:-1:-1;;;;;35647:28:0;;;;;;:20;:28;;;;;;;;35642:137;;35709:12;;35699:6;:22;;35691:75;;;;-1:-1:-1;;;35691:75:0;;17547:2:1;35691:75:0;;;17529:21:1;17586:2;17566:18;;;17559:30;17625:34;17605:18;;;17598:62;-1:-1:-1;;;17676:18:1;;;17669:38;17724:19;;35691:75:0;17345:404:1;35691:75:0;-1:-1:-1;;;;;35824:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;35848:22:0;;;;;;:11;:22;;;;;;;;35847:23;35824:46;35820:597;;;35887:48;35909:6;35917:9;35928:6;35887:21;:48::i;:::-;35820:597;;;-1:-1:-1;;;;;35958:19:0;;;;;;:11;:19;;;;;;;;35957:20;:46;;;;-1:-1:-1;;;;;;35981:22:0;;;;;;:11;:22;;;;;;;;35957:46;35953:464;;;36020:46;36040:6;36048:9;36059:6;36020:19;:46::i;35953:464::-;-1:-1:-1;;;;;36089:19:0;;;;;;:11;:19;;;;;;;;36088:20;:47;;;;-1:-1:-1;;;;;;36113:22:0;;;;;;:11;:22;;;;;;;;36112:23;36088:47;36084:333;;;36152:44;36170:6;36178:9;36189:6;36152:17;:44::i;36084:333::-;-1:-1:-1;;;;;36218:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;36241:22:0;;;;;;:11;:22;;;;;;;;36218:45;36214:203;;;36280:48;36302:6;36310:9;36321:6;36280:21;:48::i;36214:203::-;36361:44;36379:6;36387:9;36398:6;36361:17;:44::i;:::-;36429:15;33106;;33096:7;:25;33147:21;;33131:13;:37;33189:16;;33178:8;:27;33053:160;36429:15;35277:1175;;;:::o;31161:561::-;31258:7;;31294;;31211;;;;;31318:289;31342:9;:16;31338:20;;31318:289;;;31408:7;31384;:21;31392:9;31402:1;31392:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31392:12:0;31384:21;;;;;;;;;;;;;:31;;:66;;;31443:7;31419;:21;31427:9;31437:1;31427:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31427:12:0;31419:21;;;;;;;;;;;;;:31;31384:66;31380:97;;;31460:7;;31469;;31452:25;;;;;;;31161:561;;:::o;31380:97::-;31502:34;31514:7;:21;31522:9;31532:1;31522:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31522:12:0;31514:21;;;;;;;;;;;;;31502:7;;:11;:34::i;:::-;31492:44;;31561:34;31573:7;:21;31581:9;31591:1;31581:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31581:12:0;31573:21;;;;;;;;;;;;;31561:7;;:11;:34::i;:::-;31551:44;-1:-1:-1;31360:3:0;;;;:::i;:::-;;;;31318:289;;;-1:-1:-1;31643:7:0;;31631;;:20;;:11;:20::i;:::-;31621:7;:30;31617:61;;;31661:7;;31670;;31653:25;;;;;;31161:561;;:::o;31617:61::-;31697:7;;31706;;-1:-1:-1;31161:561:0;-1:-1:-1;31161:561:0:o;5119:278::-;5205:7;5240:12;5233:5;5225:28;;;;-1:-1:-1;;;5225:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5264:9:0;5276:5;5280:1;5276;:5;:::i;30061:409::-;30121:7;30130;30139;30148;30168:12;30183:24;30199:7;30183:15;:24::i;:::-;30168:39;;30218:18;30239:30;30261:7;30239:21;:30::i;:::-;30218:51;;30280:13;30296:25;30313:7;30296:16;:25::i;:::-;30280:41;-1:-1:-1;30332:23:0;30358:44;30280:41;30358:33;30380:10;30358:33;:7;30370:4;30358:11;:17::i;:::-;:21;;:33::i;:44::-;30332:70;30438:4;;-1:-1:-1;30444:10:0;;-1:-1:-1;30444:10:0;-1:-1:-1;30061:409:0;;-1:-1:-1;;;30061:409:0:o;30478:504::-;30608:7;;;;30664:24;:7;30676:11;30664;:24::i;:::-;30646:42;-1:-1:-1;30699:12:0;30714:21;:4;30723:11;30714:8;:21::i;:::-;30699:36;-1:-1:-1;30746:18:0;30767:27;:10;30782:11;30767:14;:27::i;:::-;30746:48;-1:-1:-1;30805:13:0;30821:22;:5;30831:11;30821:9;:22::i;:::-;30805:38;-1:-1:-1;30854:23:0;30880:44;30805:38;30880:33;30902:10;30880:33;:7;30892:4;30880:11;:17::i;:44::-;30943:7;;;;-1:-1:-1;30969:4:0;;-1:-1:-1;30478:504:0;;-1:-1:-1;;;;;;;;;30478:504:0:o;38083:820::-;38186:15;38203:23;38228:12;38242:23;38267:12;38281:18;38301:13;38318:19;38329:7;38318:10;:19::i;:::-;38185:152;;;;;;;;;;;;;;38366:28;38386:7;38366;:15;38374:6;-1:-1:-1;;;;;38366:15:0;-1:-1:-1;;;;;38366:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38348:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38423:7;:15;;;;:28;;38443:7;38423:19;:28::i;:::-;-1:-1:-1;;;;;38405:15:0;;;;;;;:7;:15;;;;;;:46;;;;38483:18;;;;;;;:39;;38506:15;38483:22;:39::i;:::-;-1:-1:-1;;;;;38462:18:0;;;;;;:7;:18;;;;;:60;38539:13;;:17;38536:138;;38573:26;38588:10;38573:14;:26::i;:::-;38619:43;;3566:25:1;;;38644:4:0;;-1:-1:-1;;;;;38619:43:0;;;;;3554:2:1;3539:18;38619:43:0;;;;;;;38536:138;38689:8;;:12;38686:116;;38718:16;38728:5;38718:9;:16::i;:::-;38771:11;-1:-1:-1;;;;;38754:36:0;38763:6;-1:-1:-1;;;;;38754:36:0;;38784:5;38754:36;;;;3566:25:1;;3554:2;3539:18;;3420:177;38754:36:0;;;;;;;;38686:116;38812:23;38824:4;38830;38812:11;:23::i;:::-;38868:9;-1:-1:-1;;;;;38851:44:0;38860:6;-1:-1:-1;;;;;38851:44:0;;38879:15;38851:44;;;;3566:25:1;;3554:2;3539:18;;3420:177;38851:44:0;;;;;;;;38174:729;;;;;;;38083:820;;;:::o;37236:839::-;37337:15;37354:23;37379:12;37393:23;37418:12;37432:18;37452:13;37469:19;37480:7;37469:10;:19::i;:::-;37336:152;;;;;;;;;;;;;;37517:28;37537:7;37517;:15;37525:6;-1:-1:-1;;;;;37517:15:0;-1:-1:-1;;;;;37517:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;37499:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;37577:18;;;;;:7;:18;;;;;:39;;37600:15;37577:22;:39::i;:::-;-1:-1:-1;;;;;37556:18:0;;;;;;:7;:18;;;;;;;;:60;;;;37648:7;:18;;;;:39;;37671:15;37648:22;:39::i;36460:768::-;36559:15;36576:23;36601:12;36615:23;36640:12;36654:18;36674:13;36691:19;36702:7;36691:10;:19::i;:::-;36558:152;;;;;;;;;;;;;;36739:28;36759:7;36739;:15;36747:6;-1:-1:-1;;;;;36739:15:0;-1:-1:-1;;;;;36739:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;28153:896::-;28256:15;28273:23;28298:12;28312:23;28337:12;28351:18;28371:13;28388:19;28399:7;28388:10;:19::i;:::-;28255:152;;;;;;;;;;;;;;28436:28;28456:7;28436;:15;28444:6;-1:-1:-1;;;;;28436:15:0;-1:-1:-1;;;;;28436:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;28418:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28493:7;:15;;;;:28;;28513:7;3533:136;3591:7;3618:43;3622:1;3625;3618:43;;;;;;;;;;;;;;;;;:3;:43::i;32424:154::-;32488:7;32515:55;32554:5;32515:20;32527:7;;32515;:11;;:20;;;;:::i;32586:166::-;32656:7;32683:61;32728:5;32683:26;32695:13;;32683:7;:11;;:26;;;;:::i;32760:156::-;32825:7;32852:56;32892:5;32852:21;32864:8;;32852:7;:11;;:21;;;;:::i;4154:471::-;4212:7;4457:1;4462;4457:6;4453:47;;-1:-1:-1;4487:1:0;4480:8;;4453:47;4512:9;4524:5;4528:1;4524;:5;:::i;:::-;4512:17;-1:-1:-1;4557:1:0;4548:5;4552:1;4512:17;4548:5;:::i;:::-;:10;4540:56;;;;-1:-1:-1;;;4540:56:0;;18351:2:1;4540:56:0;;;18333:21:1;18390:2;18370:18;;;18363:30;18429:34;18409:18;;;18402:62;-1:-1:-1;;;18480:18:1;;;18473:31;18521:19;;4540:56:0;18149:397:1;31734:355:0;31797:19;31820:10;:8;:10::i;:::-;31797:33;-1:-1:-1;31841:18:0;31862:27;:10;31797:33;31862:14;:27::i;:::-;31941:4;31925:22;;;;:7;:22;;;;;;31841:48;;-1:-1:-1;31925:38:0;;31841:48;31925:26;:38::i;:::-;31916:4;31900:22;;;;:7;:22;;;;;;;;:63;;;;31977:11;:26;;;;;;31974:107;;;32059:4;32043:22;;;;:7;:22;;;;;;:38;;32070:10;32043:26;:38::i;:::-;32034:4;32018:22;;;;:7;:22;;;;;:63;31786:303;;31734:355;:::o;32097:315::-;32150:19;32173:10;:8;:10::i;:::-;32150:33;-1:-1:-1;32194:13:0;32210:22;:5;32150:33;32210:9;:22::i;:::-;-1:-1:-1;;;;;32274:11:0;32266:20;;;;;:7;:20;;;;;;32194:38;;-1:-1:-1;32266:31:0;;32194:38;32266:24;:31::i;:::-;-1:-1:-1;;;;;32251:11:0;32243:20;;;;;:7;:20;;;;;;;;:54;;;;32311:11;:24;;;;;;32308:96;;;-1:-1:-1;;;;;32381:11:0;32373:20;;;;;:7;:20;;;;;;:31;;32398:5;32373:24;:31::i;:::-;-1:-1:-1;;;;;32358:11:0;32350:20;;;;;:7;:20;;;;;:54;32139:273;;32097:315;:::o;29441:147::-;29519:7;;:17;;29531:4;29519:11;:17::i;:::-;29509:7;:27;29560:10;;:20;;29575:4;29560:14;:20::i;:::-;29547:10;:33;-1:-1:-1;;29441:147:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:247::-;901:6;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;1009:9;996:23;1028:31;1053:5;1028:31;:::i;1286:315::-;1354:6;1362;1415:2;1403:9;1394:7;1390:23;1386:32;1383:52;;;1431:1;1428;1421:12;1383:52;1470:9;1457:23;1489:31;1514:5;1489:31;:::i;:::-;1539:5;1591:2;1576:18;;;;1563:32;;-1:-1:-1;;;1286:315:1:o;1606:127::-;1667:10;1662:3;1658:20;1655:1;1648:31;1698:4;1695:1;1688:15;1722:4;1719:1;1712:15;1738:1121;1822:6;1853:2;1896;1884:9;1875:7;1871:23;1867:32;1864:52;;;1912:1;1909;1902:12;1864:52;1952:9;1939:23;1981:18;2022:2;2014:6;2011:14;2008:34;;;2038:1;2035;2028:12;2008:34;2076:6;2065:9;2061:22;2051:32;;2121:7;2114:4;2110:2;2106:13;2102:27;2092:55;;2143:1;2140;2133:12;2092:55;2179:2;2166:16;2201:2;2197;2194:10;2191:36;;;2207:18;;:::i;:::-;2253:2;2250:1;2246:10;2285:2;2279:9;2348:2;2344:7;2339:2;2335;2331:11;2327:25;2319:6;2315:38;2403:6;2391:10;2388:22;2383:2;2371:10;2368:18;2365:46;2362:72;;;2414:18;;:::i;:::-;2450:2;2443:22;2500:18;;;2534:15;;;;-1:-1:-1;2576:11:1;;;2572:20;;;2604:19;;;2601:39;;;2636:1;2633;2626:12;2601:39;2660:11;;;;2680:148;2696:6;2691:3;2688:15;2680:148;;;2762:23;2781:3;2762:23;:::i;:::-;2750:36;;2713:12;;;;2806;;;;2680:148;;;2847:6;1738:1121;-1:-1:-1;;;;;;;;1738:1121:1:o;2864:316::-;2941:6;2949;2957;3010:2;2998:9;2989:7;2985:23;2981:32;2978:52;;;3026:1;3023;3016:12;2978:52;-1:-1:-1;;3049:23:1;;;3119:2;3104:18;;3091:32;;-1:-1:-1;3170:2:1;3155:18;;;3142:32;;2864:316;-1:-1:-1;2864:316:1:o;3602:456::-;3679:6;3687;3695;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;3803:9;3790:23;3822:31;3847:5;3822:31;:::i;:::-;3872:5;-1:-1:-1;3929:2:1;3914:18;;3901:32;3942:33;3901:32;3942:33;:::i;:::-;3602:456;;3994:7;;-1:-1:-1;;;4048:2:1;4033:18;;;;4020:32;;3602:456::o;4063:160::-;4128:20;;4184:13;;4177:21;4167:32;;4157:60;;4213:1;4210;4203:12;4228:315;4293:6;4301;4354:2;4342:9;4333:7;4329:23;4325:32;4322:52;;;4370:1;4367;4360:12;4322:52;4409:9;4396:23;4428:31;4453:5;4428:31;:::i;:::-;4478:5;-1:-1:-1;4502:35:1;4533:2;4518:18;;4502:35;:::i;:::-;4492:45;;4228:315;;;;;:::o;4756:180::-;4815:6;4868:2;4856:9;4847:7;4843:23;4839:32;4836:52;;;4884:1;4881;4874:12;4836:52;-1:-1:-1;4907:23:1;;4756:180;-1:-1:-1;4756:180:1:o;5130:248::-;5195:6;5203;5256:2;5244:9;5235:7;5231:23;5227:32;5224:52;;;5272:1;5269;5262:12;5224:52;5308:9;5295:23;5285:33;;5337:35;5368:2;5357:9;5353:18;5337:35;:::i;5867:689::-;5959:6;5967;5975;6028:2;6016:9;6007:7;6003:23;5999:32;5996:52;;;6044:1;6041;6034:12;5996:52;6084:9;6071:23;6113:18;6154:2;6146:6;6143:14;6140:34;;;6170:1;6167;6160:12;6140:34;6208:6;6197:9;6193:22;6183:32;;6253:7;6246:4;6242:2;6238:13;6234:27;6224:55;;6275:1;6272;6265:12;6224:55;6315:2;6302:16;6341:2;6333:6;6330:14;6327:34;;;6357:1;6354;6347:12;6327:34;6412:7;6405:4;6395:6;6392:1;6388:14;6384:2;6380:23;6376:34;6373:47;6370:67;;;6433:1;6430;6423:12;6370:67;6464:4;6456:13;;;;-1:-1:-1;6488:6:1;-1:-1:-1;6513:37:1;;6529:20;;;-1:-1:-1;6513:37:1;:::i;:::-;6503:47;;5867:689;;;;;:::o;6561:388::-;6629:6;6637;6690:2;6678:9;6669:7;6665:23;6661:32;6658:52;;;6706:1;6703;6696:12;6658:52;6745:9;6732:23;6764:31;6789:5;6764:31;:::i;:::-;6814:5;-1:-1:-1;6871:2:1;6856:18;;6843:32;6884:33;6843:32;6884:33;:::i;:::-;6936:7;6926:17;;;6561:388;;;;;:::o;6954:180::-;7010:6;7063:2;7051:9;7042:7;7038:23;7034:32;7031:52;;;7079:1;7076;7069:12;7031:52;7102:26;7118:9;7102:26;:::i;7139:380::-;7218:1;7214:12;;;;7261;;;7282:61;;7336:4;7328:6;7324:17;7314:27;;7282:61;7389:2;7381:6;7378:14;7358:18;7355:38;7352:161;;7435:10;7430:3;7426:20;7423:1;7416:31;7470:4;7467:1;7460:15;7498:4;7495:1;7488:15;7352:161;;7139:380;;;:::o;7524:356::-;7726:2;7708:21;;;7745:18;;;7738:30;7804:34;7799:2;7784:18;;7777:62;7871:2;7856:18;;7524:356::o;7885:127::-;7946:10;7941:3;7937:20;7934:1;7927:31;7977:4;7974:1;7967:15;8001:4;7998:1;7991:15;8017:127;8078:10;8073:3;8069:20;8066:1;8059:31;8109:4;8106:1;8099:15;8133:4;8130:1;8123:15;8149:175;8186:3;8230:4;8223:5;8219:16;8259:4;8250:7;8247:17;8244:43;;8267:18;;:::i;:::-;8316:1;8303:15;;8149:175;-1:-1:-1;;8149:175:1:o;8329:336::-;8531:2;8513:21;;;8570:2;8550:18;;;8543:30;-1:-1:-1;;;8604:2:1;8589:18;;8582:42;8656:2;8641:18;;8329:336::o;9437:128::-;9504:9;;;9525:11;;;9522:37;;;9539:18;;:::i;9570:127::-;9631:10;9626:3;9622:20;9619:1;9612:31;9662:4;9659:1;9652:15;9686:4;9683:1;9676:15;9702:135;9741:3;9762:17;;;9759:43;;9782:18;;:::i;:::-;-1:-1:-1;9829:1:1;9818:13;;9702:135::o;10202:400::-;10404:2;10386:21;;;10443:2;10423:18;;;10416:30;10482:34;10477:2;10462:18;;10455:62;-1:-1:-1;;;10548:2:1;10533:18;;10526:34;10592:3;10577:19;;10202:400::o;11295:794::-;11517:2;11529:21;;;11502:18;;11585:22;;;11469:4;11664:6;11638:2;11623:18;;11469:4;11698:304;11712:6;11709:1;11706:13;11698:304;;;11787:6;11774:20;11807:31;11832:5;11807:31;:::i;:::-;-1:-1:-1;;;;;11863:31:1;11851:44;;11918:4;11977:15;;;;11942:12;;;;11891:1;11727:9;11698:304;;;11702:3;12019;12011:11;;;;12074:6;12067:14;12060:22;12053:4;12042:9;12038:20;12031:52;11295:794;;;;;;:::o;13309:125::-;13374:9;;;13395:10;;;13392:36;;;13408:18;;:::i;16104:251::-;16174:6;16227:2;16215:9;16206:7;16202:23;16198:32;16195:52;;;16243:1;16240;16233:12;16195:52;16275:9;16269:16;16294:31;16319:5;16294:31;:::i;16360:980::-;16622:4;16670:3;16659:9;16655:19;16701:6;16690:9;16683:25;16727:2;16765:6;16760:2;16749:9;16745:18;16738:34;16808:3;16803:2;16792:9;16788:18;16781:31;16832:6;16867;16861:13;16898:6;16890;16883:22;16936:3;16925:9;16921:19;16914:26;;16975:2;16967:6;16963:15;16949:29;;16996:1;17006:195;17020:6;17017:1;17014:13;17006:195;;;17085:13;;-1:-1:-1;;;;;17081:39:1;17069:52;;17176:15;;;;17141:12;;;;17117:1;17035:9;17006:195;;;-1:-1:-1;;;;;;;17257:32:1;;;;17252:2;17237:18;;17230:60;-1:-1:-1;;;17321:3:1;17306:19;17299:35;17218:3;16360:980;-1:-1:-1;;;16360:980:1:o;17754:217::-;17794:1;17820;17810:132;;17864:10;17859:3;17855:20;17852:1;17845:31;17899:4;17896:1;17889:15;17927:4;17924:1;17917:15;17810:132;-1:-1:-1;17956:9:1;;17754:217::o;17976:168::-;18049:9;;;18080;;18097:15;;;18091:22;;18077:37;18067:71;;18118:18;;:::i
Swarm Source
ipfs://ea8ed680d4684a7013b7e5c7183fcabdb8065e603cd61242b5d057764f6339f3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.