Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 COSMOS
Holders
13
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,883,007,720,144.430969286 COSMOSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SkimpyContract
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-07 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.6.12; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot 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). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ 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). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ 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. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot 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. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be 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. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be 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. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be 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. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { 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; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // Contract implementation contract SkimpyContract is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = 'Elon Cosmos'; string private _symbol = 'COSMOS'; uint8 private _decimals = 9; address private deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 private _taxFee = 40; uint256 private _previousTaxFee = _taxFee; uint256 private _devFee = 40; uint256 private _burnFee = 1; uint256 private _totalDevNBurnFee = _devFee + _burnFee; uint256 private _previousTotalDevNBurnFee = _totalDevNBurnFee; address payable public _devWallet; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwap = false; bool public swapEnabled = false; uint256 private _maxTxAmount = 1000000 * 10**6 * 10**9; uint256 private _numOfTokensToExchangeForDev = 10000 * 10**6 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapEnabledUpdated(bool enabled); modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor (address payable devWallet) public { _devWallet = devWallet; _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network //IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); // PancakeSwap: Router Testnet // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // Exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function 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 isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function setExcludeFromFee(address account, bool excluded) external onlyOwner() { _isExcludedFromFee[account] = excluded; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(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 removeAllFee() private { if(_taxFee == 0 && _totalDevNBurnFee == 0) return; _previousTaxFee = _taxFee; _previousTotalDevNBurnFee = _totalDevNBurnFee; _taxFee = 0; _totalDevNBurnFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _totalDevNBurnFee = _previousTotalDevNBurnFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint256 amount) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(sender != owner() && recipient != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap? // also, don't get caught in a circular team event. // also, don't swap if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForDev; if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) { // We need to swap the current tokens to ETH and send to the team wallet swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHToTeam(address(this).balance); } } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ takeFee = false; } //transfer amount, it will take tax and team fee _tokenTransfer(sender,recipient,amount,takeFee); } function swapTokensForEth(uint256 tokenAmount) 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, address(this), block.timestamp ); } function sendETHToTeam(uint256 amount) private { _devWallet.transfer(amount); } // We are exposing these functions to be able to manual swap and send // in case the token is highly valued and 5M becomes too much function manualSwap() external onlyOwner() { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() external onlyOwner() { uint256 contractETHBalance = address(this).balance; sendETHToTeam(contractETHBalance); } function setSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTotalDevNBurnFee) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevNBurn(tTotalDevNBurnFee); _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 tTotalDevNBurnFee) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevNBurn(tTotalDevNBurnFee); _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 tTotalDevNBurnFee) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevNBurn(tTotalDevNBurnFee); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTotalDevNBurnFee) = _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); _takeDevNBurn(tTotalDevNBurnFee); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _takeDevNBurn(uint256 tTotalDevNBurnFee) private { if(tTotalDevNBurnFee > 0){ uint256 currentRate = _getRate(); uint256 tDev = tTotalDevNBurnFee.mul(_devFee).div(_totalDevNBurnFee); uint256 tBurn = tTotalDevNBurnFee.sub(tDev); uint256 rDev = tDev.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rDev); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tDev); uint256 rBurn = tBurn.mul(currentRate); _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn); if(_isExcluded[deadAddress]) _tOwned[deadAddress] = _tOwned[deadAddress].add(tBurn); emit Transfer(address(this), deadAddress, tBurn); } } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tTotalDevNBurnFee) = _getTValues(tAmount, _taxFee, _totalDevNBurnFee); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTotalDevNBurnFee); } function _getTValues(uint256 tAmount, uint256 taxFee, uint256 totalDevNBurnFee) private pure returns (uint256, uint256, uint256) { uint256 tFee = tAmount.mul(taxFee).div(100); uint256 tTotalDevNBurnFee = tAmount.mul(totalDevNBurnFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(tTotalDevNBurnFee); return (tTransferAmount, tFee, tTotalDevNBurnFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); 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 _getTaxFee() public view returns(uint256) { return _taxFee; } function _getMaxTxAmount() public view returns(uint256) { return _maxTxAmount; } function _getETHBalance() public view returns(uint256 balance) { return address(this).balance; } function _setTaxFee(uint256 taxFee) external onlyOwner() { require(taxFee >= 1 && taxFee <= 10, 'taxFee should be in 1 - 10'); _taxFee = taxFee; } function _setDevFee(uint256 devFee) external onlyOwner() { require(devFee >= 1 && devFee <= 50, 'devFee should be in 1 - 50'); _devFee = devFee; _totalDevNBurnFee = _devFee + _burnFee; } function _setBurnFee(uint256 burnFee) external onlyOwner() { require(burnFee >= 1 && burnFee <= 10, 'devFee should be in 1 - 10'); _burnFee = burnFee; _totalDevNBurnFee = _devFee + _burnFee; } function _setDevWallet(address payable devWallet) external onlyOwner() { _devWallet = devWallet; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { require(maxTxAmount >= (100000 * 10**6 * 10**9) , 'maxTxAmount should be greater than 1000000000 * 10**9'); _maxTxAmount = maxTxAmount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"devWallet","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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getMaxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"_setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"_setDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"devWallet","type":"address"}],"name":"_setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405269d3c21bcecceda1000000600955600954600019816200002057fe5b0660001903600a556040518060400160405280600b81526020017f456c6f6e20436f736d6f73000000000000000000000000000000000000000000815250600c908051906020019062000075929190620006e0565b506040518060400160405280600681526020017f434f534d4f530000000000000000000000000000000000000000000000000000815250600d9080519060200190620000c3929190620006e0565b506009600e60006101000a81548160ff021916908360ff16021790555061dead600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506028600f55600f5460105560286011556001601255601254601154016013556013546014556000601560146101000a81548160ff02191690831515021790555060006015806101000a81548160ff021916908315150217905550683635c9adc5dea00000601655678ac7230489e80000601755348015620001a357600080fd5b5060405162005d5e38038062005d5e83398181016040526020811015620001c957600080fd5b81019080805190602001909291905050506000620001ec620006af60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5460036000620002e2620006af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038057600080fd5b505afa15801562000395573d6000803e3d6000fd5b505050506040513d6020811015620003ac57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200042057600080fd5b505afa15801562000435573d6000803e3d6000fd5b505050506040513d60208110156200044c57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004c757600080fd5b505af1158015620004dc573d6000803e3d6000fd5b505050506040513d6020811015620004f357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060016006600062000587620006b760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000640620006af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a3505062000786565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200072357805160ff191683800117855562000754565b8280016001018555821562000754579182015b828111156200075357825182559160200191906001019062000736565b5b50905062000763919062000767565b5090565b5b808211156200078257600081600090555060010162000768565b5090565b60805160601c60a05160601c61559a620007c460003980611766528061357952508061102852806139d45280613ac05280613ae7525061559a6000f3fe60806040526004361061024a5760003560e01c806359f1707d11610139578063b6c52324116100b6578063f2cc0c181161007a578063f2cc0c1814610cca578063f2fde38b14610d1b578063f429389014610d6c578063f7a9159114610d83578063f815a84214610dae578063f84354f114610dd957610251565b8063b6c5232414610b3b578063cba0e99614610b66578063dd46706414610bcd578063dd62ed3e14610c08578063e01af92c14610c8d57610251565b806395d89b41116100fd57806395d89b4114610955578063a457c2d7146109e5578063a69df4b514610a56578063a9059cbb14610a6d578063af9549e014610ade57610251565b806359f1707d146108305780636ddd17131461086b57806370a0823114610898578063715018a6146108fd5780638da5cb5b1461091457610251565b80632fbff030116101c75780634549b0391161018b5780634549b039146106db57806349bd5a5e1461073657806351bc3c85146107775780635342acb41461078e5780635880b873146107f557610251565b80632fbff0301461059b578063313ce567146105c657806339509351146105f45780633b6b1961146106655780633bd5d173146106a057610251565b80631694505e1161020e5780631694505e1461041457806318160ddd146104555780631bbae6e01461048057806323b872dd146104bb5780632d8381191461054c57610251565b806306fdde0314610256578063095ea7b3146102e65780630a1f8ea81461035757806311a63e17146103a857806313114a9d146103e957610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b610e2a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b5061033f6004803603604081101561030957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ecc565b60405180821515815260200191505060405180910390f35b34801561036357600080fd5b506103a66004803603602081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eea565b005b3480156103b457600080fd5b506103bd610ff6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f557600080fd5b506103fe61101c565b6040518082815260200191505060405180910390f35b34801561042057600080fd5b50610429611026565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046157600080fd5b5061046a61104a565b6040518082815260200191505060405180910390f35b34801561048c57600080fd5b506104b9600480360360208110156104a357600080fd5b8101908080359060200190929190505050611054565b005b3480156104c757600080fd5b50610534600480360360608110156104de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611188565b60405180821515815260200191505060405180910390f35b34801561055857600080fd5b506105856004803603602081101561056f57600080fd5b8101908080359060200190929190505050611261565b6040518082815260200191505060405180910390f35b3480156105a757600080fd5b506105b06112e5565b6040518082815260200191505060405180910390f35b3480156105d257600080fd5b506105db6112ef565b604051808260ff16815260200191505060405180910390f35b34801561060057600080fd5b5061064d6004803603604081101561061757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611306565b60405180821515815260200191505060405180910390f35b34801561067157600080fd5b5061069e6004803603602081101561068857600080fd5b81019080803590602001909291905050506113b9565b005b3480156106ac57600080fd5b506106d9600480360360208110156106c357600080fd5b810190808035906020019092919050505061151c565b005b3480156106e757600080fd5b50610720600480360360408110156106fe57600080fd5b81019080803590602001909291908035151590602001909291905050506116ad565b6040518082815260200191505060405180910390f35b34801561074257600080fd5b5061074b611764565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078357600080fd5b5061078c611788565b005b34801561079a57600080fd5b506107dd600480360360208110156107b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611869565b60405180821515815260200191505060405180910390f35b34801561080157600080fd5b5061082e6004803603602081101561081857600080fd5b81019080803590602001909291905050506118bf565b005b34801561083c57600080fd5b506108696004803603602081101561085357600080fd5b8101908080359060200190929190505050611a15565b005b34801561087757600080fd5b50610880611b78565b60405180821515815260200191505060405180910390f35b3480156108a457600080fd5b506108e7600480360360208110156108bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b89565b6040518082815260200191505060405180910390f35b34801561090957600080fd5b50610912611c74565b005b34801561092057600080fd5b50610929611dfa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561096157600080fd5b5061096a611e23565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109aa57808201518184015260208101905061098f565b50505050905090810190601f1680156109d75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109f157600080fd5b50610a3e60048036036040811015610a0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ec5565b60405180821515815260200191505060405180910390f35b348015610a6257600080fd5b50610a6b611f92565b005b348015610a7957600080fd5b50610ac660048036036040811015610a9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121af565b60405180821515815260200191505060405180910390f35b348015610aea57600080fd5b50610b3960048036036040811015610b0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506121cd565b005b348015610b4757600080fd5b50610b506122f0565b6040518082815260200191505060405180910390f35b348015610b7257600080fd5b50610bb560048036036020811015610b8957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122fa565b60405180821515815260200191505060405180910390f35b348015610bd957600080fd5b50610c0660048036036020811015610bf057600080fd5b8101908080359060200190929190505050612350565b005b348015610c1457600080fd5b50610c7760048036036040811015610c2b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612541565b6040518082815260200191505060405180910390f35b348015610c9957600080fd5b50610cc860048036036020811015610cb057600080fd5b810190808035151590602001909291905050506125c8565b005b348015610cd657600080fd5b50610d1960048036036020811015610ced57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126ac565b005b348015610d2757600080fd5b50610d6a60048036036020811015610d3e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a5f565b005b348015610d7857600080fd5b50610d81612c6a565b005b348015610d8f57600080fd5b50610d98612d43565b6040518082815260200191505060405180910390f35b348015610dba57600080fd5b50610dc3612d4d565b6040518082815260200191505060405180910390f35b348015610de557600080fd5b50610e2860048036036020811015610dfc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d55565b005b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ec25780601f10610e9757610100808354040283529160200191610ec2565b820191906000526020600020905b815481529060010190602001808311610ea557829003601f168201915b5050505050905090565b6000610ee0610ed96130df565b84846130e7565b6001905092915050565b610ef26130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b61105c6130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b68056bc75e2d6310000081101561117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018061549a6035913960400191505060405180910390fd5b8060168190555050565b60006111958484846132de565b611256846111a16130df565b6112518560405180606001604052806028815260200161540060289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112076130df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136b59092919063ffffffff16565b6130e7565b600190509392505050565b6000600a548211156112be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615345602a913960400191505060405180910390fd5b60006112c8613775565b90506112dd81846137a090919063ffffffff16565b915050919050565b6000600f54905090565b6000600e60009054906101000a900460ff16905090565b60006113af6113136130df565b846113aa85600560006113246130df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b6130e7565b6001905092915050565b6113c16130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611481576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156114935750600a8111155b611505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6465764665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b806012819055506012546011540160138190555050565b60006115266130df565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806154f1602c913960400191505060405180910390fd5b60006115d683613872565b5050505050905061162f81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061168781600a546138d990919063ffffffff16565b600a819055506116a283600b546137ea90919063ffffffff16565b600b81905550505050565b6000600954831115611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161174757600061173784613872565b505050505090508091505061175e565b600061175284613872565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6117906130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061185b30611b89565b905061186681613923565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118c76130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156119995750600a8111155b611a0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b80600f8190555050565b611a1d6130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015611aef575060328111155b611b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6465764665652073686f756c6420626520696e2031202d20353000000000000081525060200191505060405180910390fd5b806011819055506012546011540160138190555050565b60158054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c2457600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c6f565b611c6c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611261565b90505b919050565b611c7c6130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ebb5780601f10611e9057610100808354040283529160200191611ebb565b820191906000526020600020905b815481529060010190602001808311611e9e57829003601f168201915b5050505050905090565b6000611f88611ed26130df565b84611f83856040518060600160405280602581526020016155406025913960056000611efc6130df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136b59092919063ffffffff16565b6130e7565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061551d6023913960400191505060405180910390fd5b60025442116120af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121c36121bc6130df565b84846132de565b6001905092915050565b6121d56130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612295576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6123586130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612418576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125d06130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612690576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b6126b46130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612774576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561280d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154cf6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156129a15761295d600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611261565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a676130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061536f6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c726130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050612d4081613c07565b50565b6000601654905090565b600047905090565b612d5d6130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6008805490508110156130db578173ffffffffffffffffffffffffffffffffffffffff1660088281548110612f1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130ce57600860016008805490500381548110612f6c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110612fa457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061309457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556130db565b8080600101915050612edf565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561316d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154766024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806153956022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613364576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154516025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153226023913960400191505060405180910390fd5b60008111613443576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154286029913960400191505060405180910390fd5b61344b611dfa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156134b95750613489611dfa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561351a57601654811115613519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153b76028913960400191505060405180910390fd5b5b600061352530611b89565b905060165481106135365760165490505b60006017548210159050601560149054906101000a900460ff16158015613567575060158054906101000a900460ff165b80156135705750805b80156135c857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156135f0576135d682613923565b600047905060008111156135ee576135ed47613c07565b5b505b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136975750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a157600090505b6136ad86868684613c73565b505050505050565b6000838311158290613762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561372757808201518184015260208101905061370c565b50505050905090810190601f1680156137545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613782613f84565b9150915061379981836137a090919063ffffffff16565b9250505090565b60006137e283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614215565b905092915050565b600080828401905083811015613868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600061388f8a600f546013546142db565b925092509250600061389f613775565b905060008060006138b18e8786614371565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061391b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136b5565b905092915050565b6001601560146101000a81548160ff0219169083151502179055506060600267ffffffffffffffff8111801561395857600080fd5b506040519080825280602002602001820160405280156139875781602001602082028036833780820191505090505b509050308160008151811061399857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a3857600080fd5b505afa158015613a4c573d6000803e3d6000fd5b505050506040513d6020811015613a6257600080fd5b810190808051906020019092919050505081600181518110613a8057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ae5307f0000000000000000000000000000000000000000000000000000000000000000846130e7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613ba7578082015181840152602081019050613b8c565b505050509050019650505050505050600060405180830381600087803b158015613bd057600080fd5b505af1158015613be4573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c6f573d6000803e3d6000fd5b5050565b80613c8157613c806143cf565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d245750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d3957613d34848484614412565b613f70565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613ddc5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613df157613dec848484614672565b613f6f565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613e955750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613eaa57613ea58484846148d2565b613f6e565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613f4c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613f6157613f5c848484614a9d565b613f6d565b613f6c8484846148d2565b5b5b5b5b80613f7e57613f7d614d92565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156141d857826003600060088481548110613fb757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061409e575081600460006008848154811061403657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156140b557600a5460095494509450505050614211565b61413e60036000600884815481106140c957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846138d990919063ffffffff16565b92506141c9600460006008848154811061415457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836138d990919063ffffffff16565b91508080600101915050613f98565b506141f0600954600a546137a090919063ffffffff16565b82101561420857600a54600954935093505050614211565b81819350935050505b9091565b600080831182906142c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561428657808201518184015260208101905061426b565b50505050905090810190601f1680156142b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816142cd57fe5b049050809150509392505050565b60008060008061430760646142f9888a614da690919063ffffffff16565b6137a090919063ffffffff16565b905060006143316064614323888b614da690919063ffffffff16565b6137a090919063ffffffff16565b9050600061435a8261434c858c6138d990919063ffffffff16565b6138d990919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061438a8588614da690919063ffffffff16565b905060006143a18688614da690919063ffffffff16565b905060006143b882846138d990919063ffffffff16565b905082818395509550955050505093509350939050565b6000600f541480156143e357506000601354145b156143ed57614410565b600f546010819055506013546014819055506000600f8190555060006013819055505b565b60008060008060008061442487613872565b95509550955095509550955061448287600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145ac85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145f881614e2c565b61460284836152e7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061468487613872565b9550955095509550955095506146e286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061477783600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061480c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061485881614e2c565b61486284836152e7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806148e487613872565b95509550955095509550955061494286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149d785600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a2381614e2c565b614a2d84836152e7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614aaf87613872565b955095509550955095509550614b0d87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ba286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c3783600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ccc85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d1881614e2c565b614d2284836152e7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601454601381905550565b600080831415614db95760009050614e26565b6000828402905082848281614dca57fe5b0414614e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806153df6021913960400191505060405180910390fd5b809150505b92915050565b60008111156152e4576000614e3f613775565b90506000614e6c601354614e5e60115486614da690919063ffffffff16565b6137a090919063ffffffff16565b90506000614e8382856138d990919063ffffffff16565b90506000614e9a8484614da690919063ffffffff16565b9050614eee81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561501957614fd583600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600061502e8584614da690919063ffffffff16565b90506150a48160036000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b60036000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615257576151f18360046000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b60046000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350505050505b50565b6152fc82600a546138d990919063ffffffff16565b600a8190555061531781600b546137ea90919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736d61785478416d6f756e742073686f756c642062652067726561746572207468616e2031303030303030303030202a2031302a2a3957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fa43029e9307c014086f76e014ccff82317209ed0a6c391b368dbc815e6e442564736f6c634300060c003300000000000000000000000023d32bd85114480a05b9fbf42c41a8487daa3633
Deployed Bytecode
0x60806040526004361061024a5760003560e01c806359f1707d11610139578063b6c52324116100b6578063f2cc0c181161007a578063f2cc0c1814610cca578063f2fde38b14610d1b578063f429389014610d6c578063f7a9159114610d83578063f815a84214610dae578063f84354f114610dd957610251565b8063b6c5232414610b3b578063cba0e99614610b66578063dd46706414610bcd578063dd62ed3e14610c08578063e01af92c14610c8d57610251565b806395d89b41116100fd57806395d89b4114610955578063a457c2d7146109e5578063a69df4b514610a56578063a9059cbb14610a6d578063af9549e014610ade57610251565b806359f1707d146108305780636ddd17131461086b57806370a0823114610898578063715018a6146108fd5780638da5cb5b1461091457610251565b80632fbff030116101c75780634549b0391161018b5780634549b039146106db57806349bd5a5e1461073657806351bc3c85146107775780635342acb41461078e5780635880b873146107f557610251565b80632fbff0301461059b578063313ce567146105c657806339509351146105f45780633b6b1961146106655780633bd5d173146106a057610251565b80631694505e1161020e5780631694505e1461041457806318160ddd146104555780631bbae6e01461048057806323b872dd146104bb5780632d8381191461054c57610251565b806306fdde0314610256578063095ea7b3146102e65780630a1f8ea81461035757806311a63e17146103a857806313114a9d146103e957610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b610e2a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b5061033f6004803603604081101561030957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ecc565b60405180821515815260200191505060405180910390f35b34801561036357600080fd5b506103a66004803603602081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eea565b005b3480156103b457600080fd5b506103bd610ff6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f557600080fd5b506103fe61101c565b6040518082815260200191505060405180910390f35b34801561042057600080fd5b50610429611026565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046157600080fd5b5061046a61104a565b6040518082815260200191505060405180910390f35b34801561048c57600080fd5b506104b9600480360360208110156104a357600080fd5b8101908080359060200190929190505050611054565b005b3480156104c757600080fd5b50610534600480360360608110156104de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611188565b60405180821515815260200191505060405180910390f35b34801561055857600080fd5b506105856004803603602081101561056f57600080fd5b8101908080359060200190929190505050611261565b6040518082815260200191505060405180910390f35b3480156105a757600080fd5b506105b06112e5565b6040518082815260200191505060405180910390f35b3480156105d257600080fd5b506105db6112ef565b604051808260ff16815260200191505060405180910390f35b34801561060057600080fd5b5061064d6004803603604081101561061757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611306565b60405180821515815260200191505060405180910390f35b34801561067157600080fd5b5061069e6004803603602081101561068857600080fd5b81019080803590602001909291905050506113b9565b005b3480156106ac57600080fd5b506106d9600480360360208110156106c357600080fd5b810190808035906020019092919050505061151c565b005b3480156106e757600080fd5b50610720600480360360408110156106fe57600080fd5b81019080803590602001909291908035151590602001909291905050506116ad565b6040518082815260200191505060405180910390f35b34801561074257600080fd5b5061074b611764565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078357600080fd5b5061078c611788565b005b34801561079a57600080fd5b506107dd600480360360208110156107b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611869565b60405180821515815260200191505060405180910390f35b34801561080157600080fd5b5061082e6004803603602081101561081857600080fd5b81019080803590602001909291905050506118bf565b005b34801561083c57600080fd5b506108696004803603602081101561085357600080fd5b8101908080359060200190929190505050611a15565b005b34801561087757600080fd5b50610880611b78565b60405180821515815260200191505060405180910390f35b3480156108a457600080fd5b506108e7600480360360208110156108bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b89565b6040518082815260200191505060405180910390f35b34801561090957600080fd5b50610912611c74565b005b34801561092057600080fd5b50610929611dfa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561096157600080fd5b5061096a611e23565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109aa57808201518184015260208101905061098f565b50505050905090810190601f1680156109d75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109f157600080fd5b50610a3e60048036036040811015610a0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ec5565b60405180821515815260200191505060405180910390f35b348015610a6257600080fd5b50610a6b611f92565b005b348015610a7957600080fd5b50610ac660048036036040811015610a9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121af565b60405180821515815260200191505060405180910390f35b348015610aea57600080fd5b50610b3960048036036040811015610b0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506121cd565b005b348015610b4757600080fd5b50610b506122f0565b6040518082815260200191505060405180910390f35b348015610b7257600080fd5b50610bb560048036036020811015610b8957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122fa565b60405180821515815260200191505060405180910390f35b348015610bd957600080fd5b50610c0660048036036020811015610bf057600080fd5b8101908080359060200190929190505050612350565b005b348015610c1457600080fd5b50610c7760048036036040811015610c2b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612541565b6040518082815260200191505060405180910390f35b348015610c9957600080fd5b50610cc860048036036020811015610cb057600080fd5b810190808035151590602001909291905050506125c8565b005b348015610cd657600080fd5b50610d1960048036036020811015610ced57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126ac565b005b348015610d2757600080fd5b50610d6a60048036036020811015610d3e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a5f565b005b348015610d7857600080fd5b50610d81612c6a565b005b348015610d8f57600080fd5b50610d98612d43565b6040518082815260200191505060405180910390f35b348015610dba57600080fd5b50610dc3612d4d565b6040518082815260200191505060405180910390f35b348015610de557600080fd5b50610e2860048036036020811015610dfc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d55565b005b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ec25780601f10610e9757610100808354040283529160200191610ec2565b820191906000526020600020905b815481529060010190602001808311610ea557829003601f168201915b5050505050905090565b6000610ee0610ed96130df565b84846130e7565b6001905092915050565b610ef26130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b61105c6130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b68056bc75e2d6310000081101561117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603581526020018061549a6035913960400191505060405180910390fd5b8060168190555050565b60006111958484846132de565b611256846111a16130df565b6112518560405180606001604052806028815260200161540060289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112076130df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136b59092919063ffffffff16565b6130e7565b600190509392505050565b6000600a548211156112be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615345602a913960400191505060405180910390fd5b60006112c8613775565b90506112dd81846137a090919063ffffffff16565b915050919050565b6000600f54905090565b6000600e60009054906101000a900460ff16905090565b60006113af6113136130df565b846113aa85600560006113246130df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b6130e7565b6001905092915050565b6113c16130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611481576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156114935750600a8111155b611505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6465764665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b806012819055506012546011540160138190555050565b60006115266130df565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806154f1602c913960400191505060405180910390fd5b60006115d683613872565b5050505050905061162f81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061168781600a546138d990919063ffffffff16565b600a819055506116a283600b546137ea90919063ffffffff16565b600b81905550505050565b6000600954831115611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161174757600061173784613872565b505050505090508091505061175e565b600061175284613872565b50505050915050809150505b92915050565b7f000000000000000000000000941723d802dbb3da533b05a8418f8e168acad5f081565b6117906130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061185b30611b89565b905061186681613923565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118c76130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156119995750600a8111155b611a0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b80600f8190555050565b611a1d6130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015611aef575060328111155b611b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6465764665652073686f756c6420626520696e2031202d20353000000000000081525060200191505060405180910390fd5b806011819055506012546011540160138190555050565b60158054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c2457600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c6f565b611c6c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611261565b90505b919050565b611c7c6130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ebb5780601f10611e9057610100808354040283529160200191611ebb565b820191906000526020600020905b815481529060010190602001808311611e9e57829003601f168201915b5050505050905090565b6000611f88611ed26130df565b84611f83856040518060600160405280602581526020016155406025913960056000611efc6130df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136b59092919063ffffffff16565b6130e7565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061551d6023913960400191505060405180910390fd5b60025442116120af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121c36121bc6130df565b84846132de565b6001905092915050565b6121d56130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612295576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6123586130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612418576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125d06130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612690576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b6126b46130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612774576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561280d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154cf6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156129a15761295d600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611261565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a676130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061536f6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c726130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050612d4081613c07565b50565b6000601654905090565b600047905090565b612d5d6130df565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e1d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6008805490508110156130db578173ffffffffffffffffffffffffffffffffffffffff1660088281548110612f1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130ce57600860016008805490500381548110612f6c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110612fa457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061309457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556130db565b8080600101915050612edf565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561316d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154766024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806153956022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613364576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154516025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153226023913960400191505060405180910390fd5b60008111613443576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154286029913960400191505060405180910390fd5b61344b611dfa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156134b95750613489611dfa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561351a57601654811115613519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153b76028913960400191505060405180910390fd5b5b600061352530611b89565b905060165481106135365760165490505b60006017548210159050601560149054906101000a900460ff16158015613567575060158054906101000a900460ff165b80156135705750805b80156135c857507f000000000000000000000000941723d802dbb3da533b05a8418f8e168acad5f073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156135f0576135d682613923565b600047905060008111156135ee576135ed47613c07565b5b505b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136975750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a157600090505b6136ad86868684613c73565b505050505050565b6000838311158290613762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561372757808201518184015260208101905061370c565b50505050905090810190601f1680156137545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613782613f84565b9150915061379981836137a090919063ffffffff16565b9250505090565b60006137e283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614215565b905092915050565b600080828401905083811015613868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600061388f8a600f546013546142db565b925092509250600061389f613775565b905060008060006138b18e8786614371565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061391b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136b5565b905092915050565b6001601560146101000a81548160ff0219169083151502179055506060600267ffffffffffffffff8111801561395857600080fd5b506040519080825280602002602001820160405280156139875781602001602082028036833780820191505090505b509050308160008151811061399857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a3857600080fd5b505afa158015613a4c573d6000803e3d6000fd5b505050506040513d6020811015613a6257600080fd5b810190808051906020019092919050505081600181518110613a8057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ae5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846130e7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613ba7578082015181840152602081019050613b8c565b505050509050019650505050505050600060405180830381600087803b158015613bd057600080fd5b505af1158015613be4573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c6f573d6000803e3d6000fd5b5050565b80613c8157613c806143cf565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d245750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613d3957613d34848484614412565b613f70565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613ddc5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613df157613dec848484614672565b613f6f565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613e955750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613eaa57613ea58484846148d2565b613f6e565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613f4c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613f6157613f5c848484614a9d565b613f6d565b613f6c8484846148d2565b5b5b5b5b80613f7e57613f7d614d92565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156141d857826003600060088481548110613fb757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061409e575081600460006008848154811061403657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156140b557600a5460095494509450505050614211565b61413e60036000600884815481106140c957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846138d990919063ffffffff16565b92506141c9600460006008848154811061415457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836138d990919063ffffffff16565b91508080600101915050613f98565b506141f0600954600a546137a090919063ffffffff16565b82101561420857600a54600954935093505050614211565b81819350935050505b9091565b600080831182906142c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561428657808201518184015260208101905061426b565b50505050905090810190601f1680156142b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816142cd57fe5b049050809150509392505050565b60008060008061430760646142f9888a614da690919063ffffffff16565b6137a090919063ffffffff16565b905060006143316064614323888b614da690919063ffffffff16565b6137a090919063ffffffff16565b9050600061435a8261434c858c6138d990919063ffffffff16565b6138d990919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061438a8588614da690919063ffffffff16565b905060006143a18688614da690919063ffffffff16565b905060006143b882846138d990919063ffffffff16565b905082818395509550955050505093509350939050565b6000600f541480156143e357506000601354145b156143ed57614410565b600f546010819055506013546014819055506000600f8190555060006013819055505b565b60008060008060008061442487613872565b95509550955095509550955061448287600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451786600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145ac85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145f881614e2c565b61460284836152e7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061468487613872565b9550955095509550955095506146e286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061477783600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061480c85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061485881614e2c565b61486284836152e7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806148e487613872565b95509550955095509550955061494286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149d785600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a2381614e2c565b614a2d84836152e7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614aaf87613872565b955095509550955095509550614b0d87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ba286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138d990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c3783600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ccc85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d1881614e2c565b614d2284836152e7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601454601381905550565b600080831415614db95760009050614e26565b6000828402905082848281614dca57fe5b0414614e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806153df6021913960400191505060405180910390fd5b809150505b92915050565b60008111156152e4576000614e3f613775565b90506000614e6c601354614e5e60115486614da690919063ffffffff16565b6137a090919063ffffffff16565b90506000614e8382856138d990919063ffffffff16565b90506000614e9a8484614da690919063ffffffff16565b9050614eee81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561501957614fd583600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600061502e8584614da690919063ffffffff16565b90506150a48160036000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b60036000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615257576151f18360046000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ea90919063ffffffff16565b60046000600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350505050505b50565b6152fc82600a546138d990919063ffffffff16565b600a8190555061531781600b546137ea90919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736d61785478416d6f756e742073686f756c642062652067726561746572207468616e2031303030303030303030202a2031302a2a3957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fa43029e9307c014086f76e014ccff82317209ed0a6c391b368dbc815e6e442564736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000023d32bd85114480a05b9fbf42c41a8487daa3633
-----Decoded View---------------
Arg [0] : devWallet (address): 0x23D32bD85114480a05B9Fbf42C41A8487daA3633
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000023d32bd85114480a05b9fbf42c41a8487daa3633
Deployed Bytecode Sourcemap
26519:20240:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29382:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30386:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46371:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27763:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31734:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27817:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29695:103;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46511:241;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30571:329;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32742:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45316:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29592:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30912:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46111:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31841:405;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32258:472;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27879:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38041:168;;;;;;;;;;;;;:::i;:::-;;34519:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45672:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45865:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27960:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29810:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16354:160;;;;;;;;;;;;;:::i;:::-;;15652:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29485:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31154:281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17461:313;;;;;;;;;;;;;:::i;:::-;;30032:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31577:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16958:97;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31447:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17139:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30223:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38409:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33023:475;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16686:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38229:168;;;;;;;;;;;;;:::i;:::-;;45420:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45534:118;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33510:522;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29382:91;29419:13;29456:5;29449:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29382:91;:::o;30386:173::-;30461:4;30482:39;30491:12;:10;:12::i;:::-;30505:7;30514:6;30482:8;:39::i;:::-;30543:4;30536:11;;30386:173;;;;:::o;46371:120::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46470:9:::1;46457:10;;:22;;;;;;;;;;;;;;;;;;46371:120:::0;:::o;27763:33::-;;;;;;;;;;;;;:::o;31734:95::-;31776:7;31807:10;;31800:17;;31734:95;:::o;27817:51::-;;;:::o;29695:103::-;29748:7;29779;;29772:14;;29695:103;:::o;46511:241::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46617:22:::1;46601:11;:39;;46593:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46729:11;46714:12;:26;;;;46511:241:::0;:::o;30571:329::-;30669:4;30690:36;30700:6;30708:9;30719:6;30690:9;:36::i;:::-;30741:121;30750:6;30758:12;:10;:12::i;:::-;30772:89;30810:6;30772:89;;;;;;;;;;;;;;;;;:11;:19;30784:6;30772:19;;;;;;;;;;;;;;;:33;30792:12;:10;:12::i;:::-;30772:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;30741:8;:121::i;:::-;30884:4;30877:11;;30571:329;;;;;:::o;32742:269::-;32808:7;32851;;32840;:18;;32832:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32920:19;32943:10;:8;:10::i;:::-;32920:33;;32975:24;32987:11;32975:7;:11;;:24;;;;:::i;:::-;32968:31;;;32742:269;;;:::o;45316:92::-;45358:7;45389;;45382:14;;45316:92;:::o;29592:91::-;29633:5;29662:9;;;;;;;;;;;29655:16;;29592:91;:::o;30912:230::-;31000:4;31021:83;31030:12;:10;:12::i;:::-;31044:7;31053:50;31092:10;31053:11;:25;31065:12;:10;:12::i;:::-;31053:25;;;;;;;;;;;;;;;:34;31079:7;31053:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;31021:8;:83::i;:::-;31126:4;31119:11;;30912:230;;;;:::o;46111:240::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46204:1:::1;46193:7;:12;;:29;;;;;46220:2;46209:7;:13;;46193:29;46185:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;46279:7;46268:8;:18;;;;46331:8;;46321:7;;:18;46301:17;:38;;;;46111:240:::0;:::o;31841:405::-;31897:14;31914:12;:10;:12::i;:::-;31897:29;;31950:11;:19;31962:6;31950:19;;;;;;;;;;;;;;;;;;;;;;;;;31949:20;31941:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32034:15;32058:19;32069:7;32058:10;:19::i;:::-;32033:44;;;;;;;32110:28;32130:7;32110;:15;32118:6;32110:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32092:7;:15;32100:6;32092:15;;;;;;;;;;;;;;;:46;;;;32163:20;32175:7;32163;;:11;;:20;;;;:::i;:::-;32153:7;:30;;;;32211:23;32226:7;32211:10;;:14;;:23;;;;:::i;:::-;32198:10;:36;;;;31841:405;;;:::o;32258:472::-;32348:7;32391;;32380;:18;;32372:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32454:17;32449:270;;32493:15;32517:19;32528:7;32517:10;:19::i;:::-;32492:44;;;;;;;32562:7;32555:14;;;;;32449:270;32612:23;32643:19;32654:7;32643:10;:19::i;:::-;32610:52;;;;;;;32688:15;32681:22;;;32258:472;;;;;:::o;27879:38::-;;;:::o;38041:168::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38099:23:::1;38125:24;38143:4;38125:9;:24::i;:::-;38099:50;;38164:33;38181:15;38164:16;:33::i;:::-;15964:1;38041:168::o:0;34519:131::-;34583:4;34611:18;:27;34630:7;34611:27;;;;;;;;;;;;;;;;;;;;;;;;;34604:34;;34519:131;;;:::o;45672:181::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45762:1:::1;45752:6;:11;;:27;;;;;45777:2;45767:6;:12;;45752:27;45744:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;45835:6;45825:7;:16;;;;45672:181:::0;:::o;45865:234::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45955:1:::1;45945:6;:11;;:27;;;;;45970:2;45960:6;:12;;45945:27;45937:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;46028:6;46018:7;:16;;;;46079:8;;46069:7;;:18;46049:17;:38;;;;45865:234:::0;:::o;27960:31::-;;;;;;;;;;;;:::o;29810:210::-;29876:7;29904:11;:20;29916:7;29904:20;;;;;;;;;;;;;;;;;;;;;;;;;29900:49;;;29933:7;:16;29941:7;29933:16;;;;;;;;;;;;;;;;29926:23;;;;29900:49;29971:37;29991:7;:16;29999:7;29991:16;;;;;;;;;;;;;;;;29971:19;:37::i;:::-;29964:44;;29810:210;;;;:::o;16354:160::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16465:1:::1;16428:40;;16449:6;::::0;::::1;;;;;;;;16428:40;;;;;;;;;;;;16500:1;16483:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16354:160::o:0;15652:87::-;15690:7;15721:6;;;;;;;;;;;15714:13;;15652:87;:::o;29485:95::-;29524:13;29561:7;29554:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29485:95;:::o;31154:281::-;31247:4;31268:129;31277:12;:10;:12::i;:::-;31291:7;31300:96;31339:15;31300:96;;;;;;;;;;;;;;;;;:11;:25;31312:12;:10;:12::i;:::-;31300:25;;;;;;;;;;;;;;;:34;31326:7;31300:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;31268:8;:129::i;:::-;31419:4;31412:11;;31154:281;;;;:::o;17461:313::-;17535:10;17517:28;;:14;;;;;;;;;;;:28;;;17509:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17614:9;;17608:3;:15;17600:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17709:14;;;;;;;;;;;17680:44;;17701:6;;;;;;;;;;17680:44;;;;;;;;;;;;17748:14;;;;;;;;;;;17739:6;;:23;;;;;;;;;;;;;;;;;;17461:313::o;30032:179::-;30110:4;30131:42;30141:12;:10;:12::i;:::-;30155:9;30166:6;30131:9;:42::i;:::-;30195:4;30188:11;;30032:179;;;;:::o;31577:145::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31702:8:::1;31672:18;:27;31691:7;31672:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31577:145:::0;;:::o;16958:97::-;17003:7;17034:9;;17027:16;;16958:97;:::o;31447:118::-;31505:4;31533:11;:20;31545:7;31533:20;;;;;;;;;;;;;;;;;;;;;;;;;31526:27;;31447:118;;;:::o;17139:234::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17224:6:::1;::::0;::::1;;;;;;;;17207:14;;:23;;;;;;;;;;;;;;;;;;17262:1;17245:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17297:4;17291:3;:10;17279:9;:22;;;;17358:1;17321:40;;17342:6;::::0;::::1;;;;;;;;17321:40;;;;;;;;;;;;17139:234:::0;:::o;30223:151::-;30304:7;30335:11;:18;30347:5;30335:18;;;;;;;;;;;;;;;:27;30354:7;30335:27;;;;;;;;;;;;;;;;30328:34;;30223:151;;;;:::o;38409:106::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38496:7:::1;38482:11;::::0;:21:::1;;;;;;;;;;;;;;;;;;38409:106:::0;:::o;33023:475::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33119:42:::1;33108:53;;:7;:53;;;;33100:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33224:11;:20;33236:7;33224:20;;;;;;;;;;;;;;;;;;;;;;;;;33223:21;33215:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33313:1;33294:7;:16;33302:7;33294:16;;;;;;;;;;;;;;;;:20;33291:116;;;33354:37;33374:7;:16;33382:7;33374:16;;;;;;;;;;;;;;;;33354:19;:37::i;:::-;33335:7;:16;33343:7;33335:16;;;;;;;;;;;;;;;:56;;;;33291:116;33444:4;33421:11;:20;33433:7;33421:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33463:9;33478:7;33463:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33023:475:::0;:::o;16686:260::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16799:1:::1;16779:22;;:8;:22;;;;16771:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16893:8;16864:38;;16885:6;::::0;::::1;;;;;;;;16864:38;;;;;;;;;;;;16926:8;16917:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16686:260:::0;:::o;38229:168::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38287:26:::1;38316:21;38287:50;;38352:33;38366:18;38352:13;:33::i;:::-;15964:1;38229:168::o:0;45420:102::-;45467:7;45498:12;;45491:19;;45420:102;:::o;45534:118::-;45580:15;45619:21;45612:28;;45534:118;:::o;33510:522::-;15900:12;:10;:12::i;:::-;15890:22;;:6;;;;;;;;;;:22;;;15882:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33595:11:::1;:20;33607:7;33595:20;;;;;;;;;;;;;;;;;;;;;;;;;33587:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33667:9;33662:359;33686:9;:16;;;;33682:1;:20;33662:359;;;33748:7;33732:23;;:9;33742:1;33732:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;33728:278;;;33795:9;33824:1;33805:9;:16;;;;:20;33795:31;;;;;;;;;;;;;;;;;;;;;;;;;33780:9;33790:1;33780:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33868:1;33849:7;:16;33857:7;33849:16;;;;;;;;;;;;;;;:20;;;;33915:5;33892:11;:20;33904:7;33892:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;33943:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33981:5;;33728:278;33704:3;;;;;;;33662:359;;;;33510:522:::0;:::o;109:114::-;162:15;201:10;194:17;;109:114;:::o;34662:357::-;34776:1;34759:19;;:5;:19;;;;34751:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34861:1;34842:21;;:7;:21;;;;34834:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34949:6;34919:11;:18;34931:5;34919:18;;;;;;;;;;;;;;;:27;34938:7;34919:27;;;;;;;;;;;;;;;:36;;;;34991:7;34975:32;;34984:5;34975:32;;;35000:6;34975:32;;;;;;;;;;;;;;;;;;34662:357;;;:::o;35031:2051::-;35150:1;35132:20;;:6;:20;;;;35124:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35238:1;35217:23;;:9;:23;;;;35209:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35312:1;35303:6;:10;35295:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35401:7;:5;:7::i;:::-;35391:17;;:6;:17;;;;:41;;;;;35425:7;:5;:7::i;:::-;35412:20;;:9;:20;;;;35391:41;35388:138;;;35469:12;;35459:6;:22;;35451:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35388:138;35809:28;35840:24;35858:4;35840:9;:24::i;:::-;35809:55;;35920:12;;35896:20;:36;35893:124;;35989:12;;35966:35;;35893:124;36045:24;36096:28;;36072:20;:52;;36045:79;;36144:6;;;;;;;;;;;36143:7;:22;;;;;36154:11;;;;;;;;;;36143:22;:45;;;;;36169:19;36143:45;:72;;;;;36202:13;36192:23;;:6;:23;;;;36143:72;36139:452;;;36326:38;36343:20;36326:16;:38::i;:::-;36401:26;36430:21;36401:50;;36494:1;36473:18;:22;36470:106;;;36520:36;36534:21;36520:13;:36::i;:::-;36470:106;36139:452;;36684:12;36699:4;36684:19;;36823:18;:26;36842:6;36823:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;36853:18;:29;36872:9;36853:29;;;;;;;;;;;;;;;;;;;;;;;;;36823:59;36820:113;;;36912:5;36902:15;;36820:113;37023:47;37038:6;37045:9;37055:6;37062:7;37023:14;:47::i;:::-;35031:2051;;;;;;:::o;4636:208::-;4722:7;4759:1;4754;:6;;4762:12;4746:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4790:9;4806:1;4802;:5;4790:17;;4831:1;4824:8;;;4636:208;;;;;:::o;44508:175::-;44549:7;44574:15;44591;44610:19;:17;:19::i;:::-;44573:56;;;;44651:20;44663:7;44651;:11;;:20;;;;:::i;:::-;44644:27;;;;44508:175;:::o;6166:140::-;6224:7;6255:39;6259:1;6262;6255:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6248:46;;6166:140;;;;:::o;3639:197::-;3697:7;3721:9;3737:1;3733;:5;3721:17;;3766:1;3761;:6;;3753:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3823:1;3816:8;;;3639:197;;;;:::o;43179:514::-;43238:7;43247;43256;43265;43274;43283;43308:23;43333:12;43347:25;43376:48;43388:7;43397;;43406:17;;43376:11;:48::i;:::-;43307:117;;;;;;43439:19;43462:10;:8;:10::i;:::-;43439:33;;43488:15;43505:23;43530:12;43546:39;43558:7;43567:4;43573:11;43546;:39::i;:::-;43487:98;;;;;;43608:7;43617:15;43634:4;43640:15;43657:4;43663:17;43600:81;;;;;;;;;;;;;;;;;;;43179:514;;;;;;;:::o;4154:144::-;4212:7;4243:43;4247:1;4250;4243:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4236:50;;4154:144;;;;:::o;37094:656::-;28318:4;28309:6;;:13;;;;;;;;;;;;;;;;;;37239:21:::1;37277:1;37263:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37239:40;;37312:4;37294;37299:1;37294:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;37342:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;37332:4;37337:1;37332:7;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::1;37381:62;37398:4;37413:15;37431:11;37381:8;:62::i;:::-;37490:15;:66;;;37575:11;37605:1;37653:4;37684;37708:15;37490:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28337:1;28362:5:::0;28353:6;;:14;;;;;;;;;;;;;;;;;;37094:656;:::o;37770:101::-;37832:10;;;;;;;;;;;:19;;:27;37852:6;37832:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37770:101;:::o;38535:883::-;38651:7;38647:44;;38677:14;:12;:14::i;:::-;38647:44;38712:11;:19;38724:6;38712:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;38736:11;:22;38748:9;38736:22;;;;;;;;;;;;;;;;;;;;;;;;;38735:23;38712:46;38708:637;;;38779:48;38801:6;38809:9;38820:6;38779:21;:48::i;:::-;38708:637;;;38854:11;:19;38866:6;38854:19;;;;;;;;;;;;;;;;;;;;;;;;;38853:20;:46;;;;;38877:11;:22;38889:9;38877:22;;;;;;;;;;;;;;;;;;;;;;;;;38853:46;38849:496;;;38920:46;38940:6;38948:9;38959:6;38920:19;:46::i;:::-;38849:496;;;38993:11;:19;39005:6;38993:19;;;;;;;;;;;;;;;;;;;;;;;;;38992:20;:47;;;;;39017:11;:22;39029:9;39017:22;;;;;;;;;;;;;;;;;;;;;;;;;39016:23;38992:47;38988:357;;;39060:44;39078:6;39086:9;39097:6;39060:17;:44::i;:::-;38988:357;;;39130:11;:19;39142:6;39130:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;39153:11;:22;39165:9;39153:22;;;;;;;;;;;;;;;;;;;;;;;;;39130:45;39126:219;;;39196:48;39218:6;39226:9;39237:6;39196:21;:48::i;:::-;39126:219;;;39285:44;39303:6;39311:9;39322:6;39285:17;:44::i;:::-;39126:219;38988:357;38849:496;38708:637;39365:7;39361:45;;39391:15;:13;:15::i;:::-;39361:45;38535:883;;;;:::o;44695:601::-;44745:7;44754;44778:15;44796:7;;44778:25;;44818:15;44836:7;;44818:25;;44869:9;44864:305;44888:9;:16;;;;44884:1;:20;44864:305;;;44958:7;44934;:21;44942:9;44952:1;44942:12;;;;;;;;;;;;;;;;;;;;;;;;;44934:21;;;;;;;;;;;;;;;;:31;:66;;;;44993:7;44969;:21;44977:9;44987:1;44977:12;;;;;;;;;;;;;;;;;;;;;;;;;44969:21;;;;;;;;;;;;;;;;:31;44934:66;44930:97;;;45010:7;;45019;;45002:25;;;;;;;;;44930:97;45056:34;45068:7;:21;45076:9;45086:1;45076:12;;;;;;;;;;;;;;;;;;;;;;;;;45068:21;;;;;;;;;;;;;;;;45056:7;:11;;:34;;;;:::i;:::-;45046:44;;45119:34;45131:7;:21;45139:9;45149:1;45139:12;;;;;;;;;;;;;;;;;;;;;;;;;45131:21;;;;;;;;;;;;;;;;45119:7;:11;;:34;;;;:::i;:::-;45109:44;;44906:3;;;;;;;44864:305;;;;45197:20;45209:7;;45197;;:11;;:20;;;;:::i;:::-;45187:7;:30;45183:61;;;45227:7;;45236;;45219:25;;;;;;;;45183:61;45267:7;45276;45259:25;;;;;;44695:601;;;:::o;6843:298::-;6929:7;6965:1;6961;:5;6968:12;6953:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6996:9;7012:1;7008;:5;;;;;;6996:17;;7128:1;7121:8;;;6843:298;;;;;:::o;43705:425::-;43807:7;43816;43825;43849:12;43864:28;43888:3;43864:19;43876:6;43864:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;43849:43;;43907:25;43935:38;43969:3;43935:29;43947:16;43935:7;:11;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;43907:66;;43988:23;44014:40;44036:17;44014;44026:4;44014:7;:11;;:17;;;;:::i;:::-;:21;;:40;;;;:::i;:::-;43988:66;;44077:15;44094:4;44100:17;44069:49;;;;;;;;;43705:425;;;;;;;:::o;44142:354::-;44237:7;44246;44255;44279:15;44297:24;44309:11;44297:7;:11;;:24;;;;:::i;:::-;44279:42;;44336:12;44351:21;44360:11;44351:4;:8;;:21;;;;:::i;:::-;44336:36;;44387:23;44413:17;44425:4;44413:7;:11;;:17;;;;:::i;:::-;44387:43;;44453:7;44462:15;44479:4;44445:39;;;;;;;;;44142:354;;;;;;;:::o;34044:298::-;34105:1;34094:7;;:12;:38;;;;;34131:1;34110:17;;:22;34094:38;34091:50;;;34134:7;;34091:50;34187:7;;34169:15;:25;;;;34237:17;;34209:25;:45;;;;34293:1;34283:7;:11;;;;34329:1;34309:17;:21;;;;34044:298;:::o;40634:612::-;40741:15;40758:23;40783:12;40797:23;40822:12;40836:25;40865:19;40876:7;40865:10;:19::i;:::-;40740:144;;;;;;;;;;;;40917:28;40937:7;40917;:15;40925:6;40917:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40899:7;:15;40907:6;40899:15;;;;;;;;;;;;;;;:46;;;;40978:28;40998:7;40978;:15;40986:6;40978:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40960:7;:15;40968:6;40960:15;;;;;;;;;;;;;;;:46;;;;41042:39;41065:15;41042:7;:18;41050:9;41042:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41021:7;:18;41029:9;41021:18;;;;;;;;;;;;;;;:60;;;;41097:32;41111:17;41097:13;:32::i;:::-;41147:23;41159:4;41165;41147:11;:23::i;:::-;41207:9;41190:44;;41199:6;41190:44;;;41218:15;41190:44;;;;;;;;;;;;;;;;;;40634:612;;;;;;;;;:::o;39987:635::-;40092:15;40109:23;40134:12;40148:23;40173:12;40187:25;40216:19;40227:7;40216:10;:19::i;:::-;40091:144;;;;;;;;;;;;40268:28;40288:7;40268;:15;40276:6;40268:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40250:7;:15;40258:6;40250:15;;;;;;;;;;;;;;;:46;;;;40332:39;40355:15;40332:7;:18;40340:9;40332:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;40311:7;:18;40319:9;40311:18;;;;;;;;;;;;;;;:60;;;;40407:39;40430:15;40407:7;:18;40415:9;40407:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;40386:7;:18;40394:9;40386:18;;;;;;;;;;;;;;;:60;;;;40465:32;40479:17;40465:13;:32::i;:::-;40523:23;40535:4;40541;40523:11;:23::i;:::-;40583:9;40566:44;;40575:6;40566:44;;;40594:15;40566:44;;;;;;;;;;;;;;;;;;39987:635;;;;;;;;;:::o;39430:545::-;39533:15;39550:23;39575:12;39589:23;39614:12;39628:25;39657:19;39668:7;39657:10;:19::i;:::-;39532:144;;;;;;;;;;;;39709:28;39729:7;39709;:15;39717:6;39709:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39691:7;:15;39699:6;39691:15;;;;;;;;;;;;;;;:46;;;;39773:39;39796:15;39773:7;:18;39781:9;39773:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39752:7;:18;39760:9;39752:18;;;;;;;;;;;;;;;:60;;;;39828:32;39842:17;39828:13;:32::i;:::-;39876:23;39888:4;39894;39876:11;:23::i;:::-;39936:9;39919:44;;39928:6;39919:44;;;39947:15;39919:44;;;;;;;;;;;;;;;;;;39430:545;;;;;;;;;:::o;41258:695::-;41365:15;41382:23;41407:12;41421:23;41446:12;41460:25;41489:19;41500:7;41489:10;:19::i;:::-;41364:144;;;;;;;;;;;;41541:28;41561:7;41541;:15;41549:6;41541:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41523:7;:15;41531:6;41523:15;;;;;;;;;;;;;;;:46;;;;41602:28;41622:7;41602;:15;41610:6;41602:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41584:7;:15;41592:6;41584:15;;;;;;;;;;;;;;;:46;;;;41666:39;41689:15;41666:7;:18;41674:9;41666:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41645:7;:18;41653:9;41645:18;;;;;;;;;;;;;;;:60;;;;41741:39;41764:15;41741:7;:18;41749:9;41741:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41720:7;:18;41728:9;41720:18;;;;;;;;;;;;;;;:60;;;;41798:32;41812:17;41798:13;:32::i;:::-;41854:23;41866:4;41872;41854:11;:23::i;:::-;41914:9;41897:44;;41906:6;41897:44;;;41925:15;41897:44;;;;;;;;;;;;;;;;;;41258:695;;;;;;;;;:::o;34358:145::-;34416:15;;34406:7;:25;;;;34466;;34446:17;:45;;;;34358:145::o;5138:511::-;5196:7;5462:1;5457;:6;5453:55;;;5491:1;5484:8;;;;5453:55;5524:9;5540:1;5536;:5;5524:17;;5573:1;5568;5564;:5;;;;;;:10;5556:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5636:1;5629:8;;;5138:511;;;;;:::o;41965:929::-;42061:1;42041:17;:21;42038:845;;;42082:19;42105:10;:8;:10::i;:::-;42082:33;;42136:12;42151:53;42186:17;;42151:30;42173:7;;42151:17;:21;;:30;;;;:::i;:::-;:34;;:53;;;;:::i;:::-;42136:68;;42223:13;42239:27;42261:4;42239:17;:21;;:27;;;;:::i;:::-;42223:43;;42287:12;42302:21;42311:11;42302:4;:8;;:21;;;;:::i;:::-;42287:36;;42367:32;42394:4;42367:7;:22;42383:4;42367:22;;;;;;;;;;;;;;;;:26;;:32;;;;:::i;:::-;42342:7;:22;42358:4;42342:22;;;;;;;;;;;;;;;:57;;;;42421:11;:26;42441:4;42421:26;;;;;;;;;;;;;;;;;;;;;;;;;42418:109;;;42495:32;42522:4;42495:7;:22;42511:4;42495:22;;;;;;;;;;;;;;;;:26;;:32;;;;:::i;:::-;42470:7;:22;42486:4;42470:22;;;;;;;;;;;;;;;:57;;;;42418:109;42548:13;42564:22;42574:11;42564:5;:9;;:22;;;;:::i;:::-;42548:38;;42628:31;42653:5;42628:7;:20;42636:11;;;;;;;;;;;42628:20;;;;;;;;;;;;;;;;:24;;:31;;;;:::i;:::-;42605:7;:20;42613:11;;;;;;;;;;;42605:20;;;;;;;;;;;;;;;:54;;;;42681:11;:24;42693:11;;;;;;;;;;;42681:24;;;;;;;;;;;;;;;;;;;;;;;;;42678:104;;;42751:31;42776:5;42751:7;:20;42759:11;;;;;;;;;;;42751:20;;;;;;;;;;;;;;;;:24;;:31;;;;:::i;:::-;42728:7;:20;42736:11;;;;;;;;;;;42728:20;;;;;;;;;;;;;;;:54;;;;42678:104;42848:11;;;;;;;;;;;42824:43;;42841:4;42824:43;;;42861:5;42824:43;;;;;;;;;;;;;;;;;;42038:845;;;;;;41965:929;:::o;42906:159::-;42988:17;43000:4;42988:7;;:11;;:17;;;;:::i;:::-;42978:7;:27;;;;43033:20;43048:4;43033:10;;:14;;:20;;;;:::i;:::-;43020:10;:33;;;;42906:159;;:::o
Swarm Source
ipfs://fa43029e9307c014086f76e014ccff82317209ed0a6c391b368dbc815e6e4425
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.