Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 ARTINU
Holders
169
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Token
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Multiple files format)
/** *Submitted for verification at BscScan.com on 2021-04-02 */ // SPDX-License-Identifier: Unlicensed /** #ORFANO 2% fee auto add to the liquidity pool to locked forever when selling 2% fee auto distribute to all holders 2% fee auto moved to charity wallet */ import "Ownable.sol"; pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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 ); } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards 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). * * 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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" ); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); 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, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 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, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract Token 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; address private _charityWalletAddress = 0x853c64EdD278B9C30E8abf5F8cf42aeF64C3796D; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "ARTINU"; string private _symbol = "ARTINU"; uint8 private _decimals = 9; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _charityFee = 2; uint256 private _previousCharityFee = _charityFee; uint256 public _liquidityFee = 4; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 10000000 * 10**9; uint256 private numTokensSellToAddToLiquidity = 10000000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , , , ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(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 includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setCharityFeePercent(uint256 charityFee) external onlyOwner() { _charityFee = charityFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div(10**2); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tCharity, _getRate() ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tCharity ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tCharity = calculateCharityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub( tCharity ); return (tTransferAmount, tFee, tLiquidity, tCharity); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rCharity = tCharity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub( rCharity ); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeCharity(uint256 tCharity) private { uint256 currentRate = _getRate(); uint256 rCharity = tCharity.mul(currentRate); _rOwned[_charityWalletAddress] = _rOwned[_charityWalletAddress].add( rCharity ); if (_isExcluded[_charityWalletAddress]) _tOwned[_charityWalletAddress] = _tOwned[_charityWalletAddress].add( tCharity ); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateCharityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_charityFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousCharityFee = _charityFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _charityFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _charityFee = _previousCharityFee; _liquidityFee = _previousLiquidityFee; } 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 from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if (from != owner() && to != owner()) require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH // swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap // addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } // function swapTokensForEth(uint256 tokenAmount) private { // // generate the uniswap pair path of token -> weth // address[] memory path = new address[](2); // path[0] = address(this); // path[1] = uniswapV2Router.WETH(); // _approve(address(this), address(uniswapV2Router), tokenAmount); // // make the swap // uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( // tokenAmount, // 0, // accept any amount of ETH // path, // address(this), // block.timestamp // ); // } // function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // // approve token transfer to cover all possible scenarios // _approve(address(this), address(uniswapV2Router), tokenAmount); // // add the liquidity // uniswapV2Router.addLiquidityETH{value: ethAmount}( // address(this), // tokenAmount, // 0, // slippage is unavoidable // 0, // slippage is unavoidable // owner(), // block.timestamp // ); // } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
import "Ownable.sol"; import "Token.sol"; pragma solidity 0.8.0; contract CrowdSale is Ownable { Token public tokenSold; uint256 public rateInTokens; uint256 public minimumBuyBNB = 660000000000000000; bool public onlyWhitelisted = true; mapping(address => bool) public whitelistedAddress; mapping(address => uint256) public whitelistedAmount; constructor(Token TokenAdr, uint256 rate) { tokenSold = TokenAdr; rateInTokens = rate; } event TokensSold(address tokenBuyer, uint256 amountBought); function whiteListAddresses(address[] memory _whitelist, uint256 _amount) public onlyOwner { for (uint256 j = 0; j < _whitelist.length; j++) { whitelistedAmount[_whitelist[j]] = _amount; whitelistedAddress[_whitelist[j]] = true; } } function changeRate(uint256 newRate) public onlyOwner { rateInTokens = newRate; } function setMinimumBuyBNB(uint256 newMin) public onlyOwner { minimumBuyBNB = newMin; } function setOnlyWhitelisted(bool status) public onlyOwner { onlyWhitelisted = status; } function AdminWithdrawTokens(address _adr, uint256 _amount) public onlyOwner { tokenSold.transfer(_adr, _amount); } // Specify 0 and will withdraw all. function AdminWithdrawBNB(uint256 _value) public onlyOwner { uint256 total = address(this).balance; if (_value == 0) { payable(msg.sender).transfer(total); } else { require(_value >= total, "Too Much!"); payable(msg.sender).transfer(_value); } } function buyTokens() public payable { require(msg.value >= minimumBuyBNB); uint256 value = (rateInTokens * msg.value) / 10**9; require(value > 0); if (onlyWhitelisted == true) { require(whitelistedAmount[msg.sender] >= value, "Incorrect value"); require( whitelistedAddress[msg.sender] == true, "You are not whitelisted" ); whitelistedAmount[msg.sender] = whitelistedAmount[msg.sender] - value; } tokenSold.transfer(msg.sender, value); emit TokensSold(msg.sender, value); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"uint256","name":"charityFee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405273853c64edd278b9c30e8abf5f8cf42aef64c3796d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a76400006008556008546000196200007791906200083f565b60001962000086919062000790565b6009556040518060400160405280600681526020017f415254494e550000000000000000000000000000000000000000000000000000815250600b9080519060200190620000d692919062000631565b506040518060400160405280600681526020017f415254494e550000000000000000000000000000000000000000000000000000815250600c90805190602001906200012492919062000631565b506009600d60006101000a81548160ff021916908360ff1602179055506002600e55600e54600f55600260105560105460115560046012556012546013556001601460016101000a81548160ff021916908315150217905550662386f26fc10000601555662386f26fc10000601655348015620001a057600080fd5b506000620001b36200060060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460016000620002686200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030657600080fd5b505afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003419190620006f8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a457600080fd5b505afa158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df9190620006f8565b6040518363ffffffff1660e01b8152600401620003fe92919062000746565b602060405180830381600087803b1580156200041957600080fd5b505af11580156200042e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004549190620006f8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160046000620004d76200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005906200060860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620005f1919062000773565b60405180910390a3506200091e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200063f9062000809565b90600052602060002090601f016020900481019282620006635760008555620006af565b82601f106200067e57805160ff1916838001178555620006af565b82800160010185558215620006af579182015b82811115620006ae57825182559160200191906001019062000691565b5b509050620006be9190620006c2565b5090565b5b80821115620006dd576000816000905550600101620006c3565b5090565b600081519050620006f28162000904565b92915050565b6000602082840312156200070b57600080fd5b60006200071b84828501620006e1565b91505092915050565b6200072f81620007cb565b82525050565b6200074081620007ff565b82525050565b60006040820190506200075d600083018562000724565b6200076c602083018462000724565b9392505050565b60006020820190506200078a600083018462000735565b92915050565b60006200079d82620007ff565b9150620007aa83620007ff565b925082821015620007c057620007bf62000877565b5b828203905092915050565b6000620007d882620007df565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200082257607f821691505b60208210811415620008395762000838620008d5565b5b50919050565b60006200084c82620007ff565b91506200085983620007ff565b9250826200086c576200086b620008a6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200090f81620007cb565b81146200091b57600080fd5b50565b60805160601c60a05160601c614aaf62000951600039600081816112fb01526123de01526000610a090152614aaf6000f3fe6080604052600436106102135760003560e01c806352390c021161011857806395d89b41116100a0578063c49b9a801161006f578063c49b9a80146107e6578063d543dbeb1461080f578063dd62ed3e14610838578063ea2f0b3714610875578063f2fde38b1461089e5761021a565b806395d89b4114610718578063a457c2d714610743578063a9059cbb14610780578063af41063b146107bd5761021a565b8063715018a6116100e7578063715018a6146106455780637d1db4a51461065c57806388f82020146106875780638da5cb5b146106c45780638ee88c53146106ef5761021a565b806352390c02146105775780635342acb4146105a05780636bc87c3a146105dd57806370a08231146106085761021a565b80633685d4191161019b57806340f8007a1161016a57806340f8007a14610490578063437823ec146104bb5780634549b039146104e457806349bd5a5e146105215780634a74bb021461054c5761021a565b80633685d419146103d657806339509351146103ff5780633b124fe71461043c5780633bd5d173146104675761021a565b80631694505e116101e25780631694505e146102db57806318160ddd1461030657806323b872dd146103315780632d8381191461036e578063313ce567146103ab5761021a565b8063061c82d01461021f57806306fdde0314610248578063095ea7b31461027357806313114a9d146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613ef2565b6108c7565b005b34801561025457600080fd5b5061025d61094d565b60405161026a91906144c2565b60405180910390f35b34801561027f57600080fd5b5061029a60048036038101906102959190613e8d565b6109df565b6040516102a7919061448c565b60405180910390f35b3480156102bc57600080fd5b506102c56109fd565b6040516102d29190614684565b60405180910390f35b3480156102e757600080fd5b506102f0610a07565b6040516102fd91906144a7565b60405180910390f35b34801561031257600080fd5b5061031b610a2b565b6040516103289190614684565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190613e3e565b610a35565b604051610365919061448c565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613ef2565b610b0e565b6040516103a29190614684565b60405180910390f35b3480156103b757600080fd5b506103c0610b7c565b6040516103cd91906146d6565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613dd9565b610b93565b005b34801561040b57600080fd5b5061042660048036038101906104219190613e8d565b610f61565b604051610433919061448c565b60405180910390f35b34801561044857600080fd5b50610451611014565b60405161045e9190614684565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613ef2565b61101a565b005b34801561049c57600080fd5b506104a5611196565b6040516104b29190614684565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613dd9565b61119c565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613f1b565b611273565b6040516105189190614684565b60405180910390f35b34801561052d57600080fd5b506105366112f9565b6040516105439190614471565b60405180910390f35b34801561055857600080fd5b5061056161131d565b60405161056e919061448c565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613dd9565b611330565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190613dd9565b6115cb565b6040516105d4919061448c565b60405180910390f35b3480156105e957600080fd5b506105f2611621565b6040516105ff9190614684565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613dd9565b611627565b60405161063c9190614684565b60405180910390f35b34801561065157600080fd5b5061065a611712565b005b34801561066857600080fd5b5061067161184c565b60405161067e9190614684565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190613dd9565b611852565b6040516106bb919061448c565b60405180910390f35b3480156106d057600080fd5b506106d96118a8565b6040516106e69190614471565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613ef2565b6118d1565b005b34801561072457600080fd5b5061072d611957565b60405161073a91906144c2565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613e8d565b6119e9565b604051610777919061448c565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190613e8d565b611ab6565b6040516107b4919061448c565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613ef2565b611ad4565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613ec9565b611b5a565b005b34801561081b57600080fd5b5061083660048036038101906108319190613ef2565b611c2a565b005b34801561084457600080fd5b5061085f600480360381019061085a9190613e02565b611cd7565b60405161086c9190614684565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190613dd9565b611d5e565b005b3480156108aa57600080fd5b506108c560048036038101906108c09190613dd9565b611e35565b005b6108cf611fde565b73ffffffffffffffffffffffffffffffffffffffff166108ed6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a906145e4565b60405180910390fd5b80600e8190555050565b6060600b805461095c906148ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610988906148ce565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b60006109f36109ec611fde565b8484611fe6565b6001905092915050565b6000600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b6000610a428484846121b1565b610b0384610a4e611fde565b610afe85604051806060016040528060288152602001614a2d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ab4611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e9092919063ffffffff16565b611fe6565b600190509392505050565b6000600954821115610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90614504565b60405180910390fd5b6000610b5f612573565b9050610b74818461259e90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610b9b611fde565b73ffffffffffffffffffffffffffffffffffffffff16610bb96118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c06906145e4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9290614584565b60405180910390fd5b60005b600680549050811015610f5d578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610cfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f4a5760066001600680549050610d5791906147ee565b81548110610d8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f5d565b8080610f5590614900565b915050610c9e565b5050565b600061100a610f6e611fde565b846110058560036000610f7f611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b611fe6565b6001905092915050565b600e5481565b6000611024611fde565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614664565b60405180910390fd5b60006110be836125ca565b505050505050905061111881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111708160095461263290919063ffffffff16565b60098190555061118b83600a546125b490919063ffffffff16565b600a81905550505050565b60105481565b6111a4611fde565b73ffffffffffffffffffffffffffffffffffffffff166111c26118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906145e4565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006008548311156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b1906145a4565b60405180910390fd5b816112db5760006112ca846125ca565b5050505050509050809150506112f3565b60006112e6846125ca565b5050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460019054906101000a900460ff1681565b611338611fde565b73ffffffffffffffffffffffffffffffffffffffff166113566118a8565b73ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a3906145e4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614564565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561150d576114c9600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c257600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061170d565b61170a600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b90505b919050565b61171a611fde565b73ffffffffffffffffffffffffffffffffffffffff166117386118a8565b73ffffffffffffffffffffffffffffffffffffffff161461178e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611785906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118d9611fde565b73ffffffffffffffffffffffffffffffffffffffff166118f76118a8565b73ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906145e4565b60405180910390fd5b8060128190555050565b6060600c8054611966906148ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611992906148ce565b80156119df5780601f106119b4576101008083540402835291602001916119df565b820191906000526020600020905b8154815290600101906020018083116119c257829003601f168201915b5050505050905090565b6000611aac6119f6611fde565b84611aa785604051806060016040528060258152602001614a556025913960036000611a20611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e9092919063ffffffff16565b611fe6565b6001905092915050565b6000611aca611ac3611fde565b84846121b1565b6001905092915050565b611adc611fde565b73ffffffffffffffffffffffffffffffffffffffff16611afa6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b47906145e4565b60405180910390fd5b8060108190555050565b611b62611fde565b73ffffffffffffffffffffffffffffffffffffffff16611b806118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd906145e4565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c1f919061448c565b60405180910390a150565b611c32611fde565b73ffffffffffffffffffffffffffffffffffffffff16611c506118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9d906145e4565b60405180910390fd5b611cce6064611cc08360085461264890919063ffffffff16565b61259e90919063ffffffff16565b60158190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d66611fde565b73ffffffffffffffffffffffffffffffffffffffff16611d846118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd1906145e4565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e3d611fde565b73ffffffffffffffffffffffffffffffffffffffff16611e5b6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614524565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d90614644565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd90614544565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a49190614684565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890614624565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612291576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612288906144e4565b60405180910390fd5b600081116122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90614604565b60405180910390fd5b6122dc6118a8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234a575061231a6118a8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561239557601554811115612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906145c4565b60405180910390fd5b5b60006123a030611627565b905060155481106123b15760155490505b600060165482101590508080156123d55750601460009054906101000a900460ff16155b801561242d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124455750601460019054906101000a900460ff165b156124595760165491506124588261265e565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125005750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561250a57600090505b61251686868684612721565b505050505050565b6000838311158290612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d91906144c2565b60405180910390fd5b5082840390509392505050565b6000806000612580612a32565b91509150612597818361259e90919063ffffffff16565b9250505090565b600081836125ac9190614763565b905092915050565b600081836125c2919061470d565b905092915050565b60008060008060008060008060008060006125e48c612d7d565b935093509350935060008060006126058f878787612600612573565b612dfc565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000818361264091906147ee565b905092915050565b600081836126569190614794565b905092915050565b6001601460006101000a81548160ff021916908315150217905550600061268f60028361259e90919063ffffffff16565b905060006126a6828461263290919063ffffffff16565b9050600047905060006126c2824761263290919063ffffffff16565b90507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516126f79392919061469f565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b8061272f5761272e612eb0565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127d25750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127e7576127e2848484612f04565b612a1e565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561288a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561289f5761289a848484613172565b612a1d565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129435750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612958576129538484846133e0565b612a1c565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129fa5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a0f57612a0a8484846135b9565b612a1b565b612a1a8484846133e0565b5b5b5b5b80612a2c57612a2b6138bc565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612d4057826001600060068481548110612a92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ba65750816002600060068481548110612b3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612bbd5760095460085494509450505050612d79565b612c736001600060068481548110612bfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461263290919063ffffffff16565b9250612d2b6002600060068481548110612cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361263290919063ffffffff16565b91508080612d3890614900565b915050612a46565b50612d5860085460095461259e90919063ffffffff16565b821015612d7057600954600854935093505050612d79565b81819350935050505b9091565b6000806000806000612d8e866138d9565b90506000612d9b8761390a565b90506000612da88861393b565b90506000612de382612dd585612dc7888e61263290919063ffffffff16565b61263290919063ffffffff16565b61263290919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612e15858a61264890919063ffffffff16565b90506000612e2c868a61264890919063ffffffff16565b90506000612e43878a61264890919063ffffffff16565b90506000612e5a888a61264890919063ffffffff16565b90506000612e9582612e8785612e79888a61263290919063ffffffff16565b61263290919063ffffffff16565b61263290919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600e54148015612ec457506000601254145b15612ece57612f02565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b6000806000806000806000612f18886125ca565b9650965096509650965096509650612f7888600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300d87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130a286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130ee8261396c565b6130f781613b11565b6131018584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161315e9190614684565b60405180910390a350505050505050505050565b6000806000806000806000613186886125ca565b96509650965096509650965096506131e687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327b84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335c8261396c565b61336581613b11565b61336f8584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516133cc9190614684565b60405180910390a350505050505050505050565b60008060008060008060006133f4886125ca565b965096509650965096509650965061345487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135358261396c565b61353e81613b11565b6135488584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516135a59190614684565b60405180910390a350505050505050505050565b60008060008060008060006135cd886125ca565b965096509650965096509650965061362d88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c287600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375784600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ec86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138388261396c565b61384181613b11565b61384b8584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516138a89190614684565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b600061390360646138f5600e548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b600061393460646139266012548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b600061396560646139576010548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b6000613976612573565b9050600061398d828461264890919063ffffffff16565b90506139e181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b0c57613ac883600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000613b1b612573565b90506000613b32828461264890919063ffffffff16565b9050613ba88160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d5b57613cf58360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613d758260095461263290919063ffffffff16565b600981905550613d9081600a546125b490919063ffffffff16565b600a819055505050565b600081359050613da9816149e7565b92915050565b600081359050613dbe816149fe565b92915050565b600081359050613dd381614a15565b92915050565b600060208284031215613deb57600080fd5b6000613df984828501613d9a565b91505092915050565b60008060408385031215613e1557600080fd5b6000613e2385828601613d9a565b9250506020613e3485828601613d9a565b9150509250929050565b600080600060608486031215613e5357600080fd5b6000613e6186828701613d9a565b9350506020613e7286828701613d9a565b9250506040613e8386828701613dc4565b9150509250925092565b60008060408385031215613ea057600080fd5b6000613eae85828601613d9a565b9250506020613ebf85828601613dc4565b9150509250929050565b600060208284031215613edb57600080fd5b6000613ee984828501613daf565b91505092915050565b600060208284031215613f0457600080fd5b6000613f1284828501613dc4565b91505092915050565b60008060408385031215613f2e57600080fd5b6000613f3c85828601613dc4565b9250506020613f4d85828601613daf565b9150509250929050565b613f6081614822565b82525050565b613f6f81614834565b82525050565b613f7e81614877565b82525050565b6000613f8f826146f1565b613f9981856146fc565b9350613fa981856020860161489b565b613fb2816149d6565b840191505092915050565b6000613fca6023836146fc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614030602a836146fc565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006140966026836146fc565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140fc6022836146fc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614162601b836146fc565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006141a2601b836146fc565b91507f4163636f756e7420697320616c726561647920696e636c7564656400000000006000830152602082019050919050565b60006141e2601f836146fc565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b60006142226028836146fc565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142886020836146fc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006142c86029836146fc565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b600061432e6025836146fc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143946024836146fc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143fa602c836146fc565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61445c81614860565b82525050565b61446b8161486a565b82525050565b60006020820190506144866000830184613f57565b92915050565b60006020820190506144a16000830184613f66565b92915050565b60006020820190506144bc6000830184613f75565b92915050565b600060208201905081810360008301526144dc8184613f84565b905092915050565b600060208201905081810360008301526144fd81613fbd565b9050919050565b6000602082019050818103600083015261451d81614023565b9050919050565b6000602082019050818103600083015261453d81614089565b9050919050565b6000602082019050818103600083015261455d816140ef565b9050919050565b6000602082019050818103600083015261457d81614155565b9050919050565b6000602082019050818103600083015261459d81614195565b9050919050565b600060208201905081810360008301526145bd816141d5565b9050919050565b600060208201905081810360008301526145dd81614215565b9050919050565b600060208201905081810360008301526145fd8161427b565b9050919050565b6000602082019050818103600083015261461d816142bb565b9050919050565b6000602082019050818103600083015261463d81614321565b9050919050565b6000602082019050818103600083015261465d81614387565b9050919050565b6000602082019050818103600083015261467d816143ed565b9050919050565b60006020820190506146996000830184614453565b92915050565b60006060820190506146b46000830186614453565b6146c16020830185614453565b6146ce6040830184614453565b949350505050565b60006020820190506146eb6000830184614462565b92915050565b600081519050919050565b600082825260208201905092915050565b600061471882614860565b915061472383614860565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561475857614757614949565b5b828201905092915050565b600061476e82614860565b915061477983614860565b92508261478957614788614978565b5b828204905092915050565b600061479f82614860565b91506147aa83614860565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147e3576147e2614949565b5b828202905092915050565b60006147f982614860565b915061480483614860565b92508282101561481757614816614949565b5b828203905092915050565b600061482d82614840565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061488282614889565b9050919050565b600061489482614840565b9050919050565b60005b838110156148b957808201518184015260208101905061489e565b838111156148c8576000848401525b50505050565b600060028204905060018216806148e657607f821691505b602082108114156148fa576148f96149a7565b5b50919050565b600061490b82614860565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561493e5761493d614949565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6149f081614822565b81146149fb57600080fd5b50565b614a0781614834565b8114614a1257600080fd5b50565b614a1e81614860565b8114614a2957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220003457e7ad6451f9f923a7eca80167525fb02208c78858d6d35137612ebf79ab64736f6c63430008000033
Deployed Bytecode
0x6080604052600436106102135760003560e01c806352390c021161011857806395d89b41116100a0578063c49b9a801161006f578063c49b9a80146107e6578063d543dbeb1461080f578063dd62ed3e14610838578063ea2f0b3714610875578063f2fde38b1461089e5761021a565b806395d89b4114610718578063a457c2d714610743578063a9059cbb14610780578063af41063b146107bd5761021a565b8063715018a6116100e7578063715018a6146106455780637d1db4a51461065c57806388f82020146106875780638da5cb5b146106c45780638ee88c53146106ef5761021a565b806352390c02146105775780635342acb4146105a05780636bc87c3a146105dd57806370a08231146106085761021a565b80633685d4191161019b57806340f8007a1161016a57806340f8007a14610490578063437823ec146104bb5780634549b039146104e457806349bd5a5e146105215780634a74bb021461054c5761021a565b80633685d419146103d657806339509351146103ff5780633b124fe71461043c5780633bd5d173146104675761021a565b80631694505e116101e25780631694505e146102db57806318160ddd1461030657806323b872dd146103315780632d8381191461036e578063313ce567146103ab5761021a565b8063061c82d01461021f57806306fdde0314610248578063095ea7b31461027357806313114a9d146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613ef2565b6108c7565b005b34801561025457600080fd5b5061025d61094d565b60405161026a91906144c2565b60405180910390f35b34801561027f57600080fd5b5061029a60048036038101906102959190613e8d565b6109df565b6040516102a7919061448c565b60405180910390f35b3480156102bc57600080fd5b506102c56109fd565b6040516102d29190614684565b60405180910390f35b3480156102e757600080fd5b506102f0610a07565b6040516102fd91906144a7565b60405180910390f35b34801561031257600080fd5b5061031b610a2b565b6040516103289190614684565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190613e3e565b610a35565b604051610365919061448c565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613ef2565b610b0e565b6040516103a29190614684565b60405180910390f35b3480156103b757600080fd5b506103c0610b7c565b6040516103cd91906146d6565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613dd9565b610b93565b005b34801561040b57600080fd5b5061042660048036038101906104219190613e8d565b610f61565b604051610433919061448c565b60405180910390f35b34801561044857600080fd5b50610451611014565b60405161045e9190614684565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613ef2565b61101a565b005b34801561049c57600080fd5b506104a5611196565b6040516104b29190614684565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613dd9565b61119c565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613f1b565b611273565b6040516105189190614684565b60405180910390f35b34801561052d57600080fd5b506105366112f9565b6040516105439190614471565b60405180910390f35b34801561055857600080fd5b5061056161131d565b60405161056e919061448c565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613dd9565b611330565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190613dd9565b6115cb565b6040516105d4919061448c565b60405180910390f35b3480156105e957600080fd5b506105f2611621565b6040516105ff9190614684565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613dd9565b611627565b60405161063c9190614684565b60405180910390f35b34801561065157600080fd5b5061065a611712565b005b34801561066857600080fd5b5061067161184c565b60405161067e9190614684565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190613dd9565b611852565b6040516106bb919061448c565b60405180910390f35b3480156106d057600080fd5b506106d96118a8565b6040516106e69190614471565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613ef2565b6118d1565b005b34801561072457600080fd5b5061072d611957565b60405161073a91906144c2565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613e8d565b6119e9565b604051610777919061448c565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190613e8d565b611ab6565b6040516107b4919061448c565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613ef2565b611ad4565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613ec9565b611b5a565b005b34801561081b57600080fd5b5061083660048036038101906108319190613ef2565b611c2a565b005b34801561084457600080fd5b5061085f600480360381019061085a9190613e02565b611cd7565b60405161086c9190614684565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190613dd9565b611d5e565b005b3480156108aa57600080fd5b506108c560048036038101906108c09190613dd9565b611e35565b005b6108cf611fde565b73ffffffffffffffffffffffffffffffffffffffff166108ed6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a906145e4565b60405180910390fd5b80600e8190555050565b6060600b805461095c906148ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610988906148ce565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b60006109f36109ec611fde565b8484611fe6565b6001905092915050565b6000600a54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b6000610a428484846121b1565b610b0384610a4e611fde565b610afe85604051806060016040528060288152602001614a2d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ab4611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e9092919063ffffffff16565b611fe6565b600190509392505050565b6000600954821115610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90614504565b60405180910390fd5b6000610b5f612573565b9050610b74818461259e90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610b9b611fde565b73ffffffffffffffffffffffffffffffffffffffff16610bb96118a8565b73ffffffffffffffffffffffffffffffffffffffff1614610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c06906145e4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9290614584565b60405180910390fd5b60005b600680549050811015610f5d578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610cfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f4a5760066001600680549050610d5791906147ee565b81548110610d8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f5d565b8080610f5590614900565b915050610c9e565b5050565b600061100a610f6e611fde565b846110058560036000610f7f611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b611fe6565b6001905092915050565b600e5481565b6000611024611fde565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614664565b60405180910390fd5b60006110be836125ca565b505050505050905061111881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111708160095461263290919063ffffffff16565b60098190555061118b83600a546125b490919063ffffffff16565b600a81905550505050565b60105481565b6111a4611fde565b73ffffffffffffffffffffffffffffffffffffffff166111c26118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906145e4565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006008548311156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b1906145a4565b60405180910390fd5b816112db5760006112ca846125ca565b5050505050509050809150506112f3565b60006112e6846125ca565b5050505050915050809150505b92915050565b7f000000000000000000000000bdaeba60d7bb3ecce97f8ff22eab3e6d0159c83581565b601460019054906101000a900460ff1681565b611338611fde565b73ffffffffffffffffffffffffffffffffffffffff166113566118a8565b73ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a3906145e4565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090614564565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561150d576114c9600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c257600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061170d565b61170a600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b90505b919050565b61171a611fde565b73ffffffffffffffffffffffffffffffffffffffff166117386118a8565b73ffffffffffffffffffffffffffffffffffffffff161461178e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611785906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118d9611fde565b73ffffffffffffffffffffffffffffffffffffffff166118f76118a8565b73ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906145e4565b60405180910390fd5b8060128190555050565b6060600c8054611966906148ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611992906148ce565b80156119df5780601f106119b4576101008083540402835291602001916119df565b820191906000526020600020905b8154815290600101906020018083116119c257829003601f168201915b5050505050905090565b6000611aac6119f6611fde565b84611aa785604051806060016040528060258152602001614a556025913960036000611a20611fde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251e9092919063ffffffff16565b611fe6565b6001905092915050565b6000611aca611ac3611fde565b84846121b1565b6001905092915050565b611adc611fde565b73ffffffffffffffffffffffffffffffffffffffff16611afa6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b47906145e4565b60405180910390fd5b8060108190555050565b611b62611fde565b73ffffffffffffffffffffffffffffffffffffffff16611b806118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd906145e4565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611c1f919061448c565b60405180910390a150565b611c32611fde565b73ffffffffffffffffffffffffffffffffffffffff16611c506118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9d906145e4565b60405180910390fd5b611cce6064611cc08360085461264890919063ffffffff16565b61259e90919063ffffffff16565b60158190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d66611fde565b73ffffffffffffffffffffffffffffffffffffffff16611d846118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd1906145e4565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e3d611fde565b73ffffffffffffffffffffffffffffffffffffffff16611e5b6118a8565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906145e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614524565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d90614644565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd90614544565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a49190614684565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221890614624565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612291576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612288906144e4565b60405180910390fd5b600081116122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90614604565b60405180910390fd5b6122dc6118a8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234a575061231a6118a8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561239557601554811115612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b906145c4565b60405180910390fd5b5b60006123a030611627565b905060155481106123b15760155490505b600060165482101590508080156123d55750601460009054906101000a900460ff16155b801561242d57507f000000000000000000000000bdaeba60d7bb3ecce97f8ff22eab3e6d0159c83573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124455750601460019054906101000a900460ff165b156124595760165491506124588261265e565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125005750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561250a57600090505b61251686868684612721565b505050505050565b6000838311158290612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d91906144c2565b60405180910390fd5b5082840390509392505050565b6000806000612580612a32565b91509150612597818361259e90919063ffffffff16565b9250505090565b600081836125ac9190614763565b905092915050565b600081836125c2919061470d565b905092915050565b60008060008060008060008060008060006125e48c612d7d565b935093509350935060008060006126058f878787612600612573565b612dfc565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000818361264091906147ee565b905092915050565b600081836126569190614794565b905092915050565b6001601460006101000a81548160ff021916908315150217905550600061268f60028361259e90919063ffffffff16565b905060006126a6828461263290919063ffffffff16565b9050600047905060006126c2824761263290919063ffffffff16565b90507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516126f79392919061469f565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b8061272f5761272e612eb0565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127d25750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127e7576127e2848484612f04565b612a1e565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561288a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561289f5761289a848484613172565b612a1d565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129435750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612958576129538484846133e0565b612a1c565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129fa5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a0f57612a0a8484846135b9565b612a1b565b612a1a8484846133e0565b5b5b5b5b80612a2c57612a2b6138bc565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612d4057826001600060068481548110612a92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ba65750816002600060068481548110612b3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612bbd5760095460085494509450505050612d79565b612c736001600060068481548110612bfe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461263290919063ffffffff16565b9250612d2b6002600060068481548110612cb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361263290919063ffffffff16565b91508080612d3890614900565b915050612a46565b50612d5860085460095461259e90919063ffffffff16565b821015612d7057600954600854935093505050612d79565b81819350935050505b9091565b6000806000806000612d8e866138d9565b90506000612d9b8761390a565b90506000612da88861393b565b90506000612de382612dd585612dc7888e61263290919063ffffffff16565b61263290919063ffffffff16565b61263290919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612e15858a61264890919063ffffffff16565b90506000612e2c868a61264890919063ffffffff16565b90506000612e43878a61264890919063ffffffff16565b90506000612e5a888a61264890919063ffffffff16565b90506000612e9582612e8785612e79888a61263290919063ffffffff16565b61263290919063ffffffff16565b61263290919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600e54148015612ec457506000601254145b15612ece57612f02565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b6000806000806000806000612f18886125ca565b9650965096509650965096509650612f7888600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300d87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130a286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130ee8261396c565b6130f781613b11565b6131018584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161315e9190614684565b60405180910390a350505050505050505050565b6000806000806000806000613186886125ca565b96509650965096509650965096506131e687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327b84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335c8261396c565b61336581613b11565b61336f8584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516133cc9190614684565b60405180910390a350505050505050505050565b60008060008060008060006133f4886125ca565b965096509650965096509650965061345487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135358261396c565b61353e81613b11565b6135488584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516135a59190614684565b60405180910390a350505050505050505050565b60008060008060008060006135cd886125ca565b965096509650965096509650965061362d88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c287600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263290919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375784600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ec86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138388261396c565b61384181613b11565b61384b8584613d60565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516138a89190614684565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b600061390360646138f5600e548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b600061393460646139266012548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b600061396560646139576010548561264890919063ffffffff16565b61259e90919063ffffffff16565b9050919050565b6000613976612573565b9050600061398d828461264890919063ffffffff16565b90506139e181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b0c57613ac883600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000613b1b612573565b90506000613b32828461264890919063ffffffff16565b9050613ba88160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d5b57613cf58360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b490919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613d758260095461263290919063ffffffff16565b600981905550613d9081600a546125b490919063ffffffff16565b600a819055505050565b600081359050613da9816149e7565b92915050565b600081359050613dbe816149fe565b92915050565b600081359050613dd381614a15565b92915050565b600060208284031215613deb57600080fd5b6000613df984828501613d9a565b91505092915050565b60008060408385031215613e1557600080fd5b6000613e2385828601613d9a565b9250506020613e3485828601613d9a565b9150509250929050565b600080600060608486031215613e5357600080fd5b6000613e6186828701613d9a565b9350506020613e7286828701613d9a565b9250506040613e8386828701613dc4565b9150509250925092565b60008060408385031215613ea057600080fd5b6000613eae85828601613d9a565b9250506020613ebf85828601613dc4565b9150509250929050565b600060208284031215613edb57600080fd5b6000613ee984828501613daf565b91505092915050565b600060208284031215613f0457600080fd5b6000613f1284828501613dc4565b91505092915050565b60008060408385031215613f2e57600080fd5b6000613f3c85828601613dc4565b9250506020613f4d85828601613daf565b9150509250929050565b613f6081614822565b82525050565b613f6f81614834565b82525050565b613f7e81614877565b82525050565b6000613f8f826146f1565b613f9981856146fc565b9350613fa981856020860161489b565b613fb2816149d6565b840191505092915050565b6000613fca6023836146fc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614030602a836146fc565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006140966026836146fc565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140fc6022836146fc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614162601b836146fc565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006141a2601b836146fc565b91507f4163636f756e7420697320616c726561647920696e636c7564656400000000006000830152602082019050919050565b60006141e2601f836146fc565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b60006142226028836146fc565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142886020836146fc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006142c86029836146fc565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b600061432e6025836146fc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143946024836146fc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143fa602c836146fc565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61445c81614860565b82525050565b61446b8161486a565b82525050565b60006020820190506144866000830184613f57565b92915050565b60006020820190506144a16000830184613f66565b92915050565b60006020820190506144bc6000830184613f75565b92915050565b600060208201905081810360008301526144dc8184613f84565b905092915050565b600060208201905081810360008301526144fd81613fbd565b9050919050565b6000602082019050818103600083015261451d81614023565b9050919050565b6000602082019050818103600083015261453d81614089565b9050919050565b6000602082019050818103600083015261455d816140ef565b9050919050565b6000602082019050818103600083015261457d81614155565b9050919050565b6000602082019050818103600083015261459d81614195565b9050919050565b600060208201905081810360008301526145bd816141d5565b9050919050565b600060208201905081810360008301526145dd81614215565b9050919050565b600060208201905081810360008301526145fd8161427b565b9050919050565b6000602082019050818103600083015261461d816142bb565b9050919050565b6000602082019050818103600083015261463d81614321565b9050919050565b6000602082019050818103600083015261465d81614387565b9050919050565b6000602082019050818103600083015261467d816143ed565b9050919050565b60006020820190506146996000830184614453565b92915050565b60006060820190506146b46000830186614453565b6146c16020830185614453565b6146ce6040830184614453565b949350505050565b60006020820190506146eb6000830184614462565b92915050565b600081519050919050565b600082825260208201905092915050565b600061471882614860565b915061472383614860565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561475857614757614949565b5b828201905092915050565b600061476e82614860565b915061477983614860565b92508261478957614788614978565b5b828204905092915050565b600061479f82614860565b91506147aa83614860565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147e3576147e2614949565b5b828202905092915050565b60006147f982614860565b915061480483614860565b92508282101561481757614816614949565b5b828203905092915050565b600061482d82614840565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061488282614889565b9050919050565b600061489482614840565b9050919050565b60005b838110156148b957808201518184015260208101905061489e565b838111156148c8576000848401525b50505050565b600060028204905060018216806148e657607f821691505b602082108114156148fa576148f96149a7565b5b50919050565b600061490b82614860565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561493e5761493d614949565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6149f081614822565b81146149fb57600080fd5b50565b614a0781614834565b8114614a1257600080fd5b50565b614a1e81614860565b8114614a2957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220003457e7ad6451f9f923a7eca80167525fb02208c78858d6d35137612ebf79ab64736f6c63430008000033
Deployed Bytecode Sourcemap
27958:20943:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36022:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30381:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31327:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32767:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29047:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30646:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31519:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33751:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30559:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34514:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31956:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28778:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32858:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28858:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35793:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33275:470;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29104:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29176:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34068:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41427:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28949:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30745:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1713:145:2;;;;;;;;;;;;;:::i;:::-;;29223:46:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32643:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1081:85:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36242:120:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30468:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32251:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30946:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36124:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36510:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36368:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31144:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35908:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2007:274:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36022:96:3;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36105:6:3::1;36095:7;:16;;;;36022:96:::0;:::o;30381:81::-;30418:13;30450:5;30443:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30381:81;:::o;31327:186::-;31426:4;31446:39;31455:12;:10;:12::i;:::-;31469:7;31478:6;31446:8;:39::i;:::-;31502:4;31495:11;;31327:186;;;;:::o;32767:85::-;32809:7;32835:10;;32828:17;;32767:85;:::o;29047:51::-;;;:::o;30646:93::-;30699:7;30725;;30718:14;;30646:93;:::o;31519:431::-;31647:4;31663:36;31673:6;31681:9;31692:6;31663:9;:36::i;:::-;31709:213;31731:6;31751:12;:10;:12::i;:::-;31777:135;31832:6;31777:135;;;;;;;;;;;;;;;;;:11;:19;31789:6;31777:19;;;;;;;;;;;;;;;:33;31797:12;:10;:12::i;:::-;31777:33;;;;;;;;;;;;;;;;:37;;:135;;;;;:::i;:::-;31709:8;:213::i;:::-;31939:4;31932:11;;31519:431;;;;;:::o;33751:311::-;33842:7;33897;;33886;:18;;33865:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;33982:19;34004:10;:8;:10::i;:::-;33982:32;;34031:24;34043:11;34031:7;:11;;:24;;;;:::i;:::-;34024:31;;;33751:311;;;:::o;30559:81::-;30600:5;30624:9;;;;;;;;;;;30617:16;;30559:81;:::o;34514:468::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34595:11:3::1;:20;34607:7;34595:20;;;;;;;;;;;;;;;;;;;;;;;;;34587:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34662:9;34657:319;34681:9;:16;;;;34677:1;:20;34657:319;;;34738:7;34722:23;;:9;34732:1;34722:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;34718:248;;;34780:9;34809:1;34790:9;:16;;;;:20;;;;:::i;:::-;34780:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34765:9;34775:1;34765:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34848:1;34829:7;:16;34837:7;34829:16;;;;;;;;;;;;;;;:20;;;;34890:5;34867:11;:20;34879:7;34867:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34913:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34946:5;;34718:248;34699:3;;;;;:::i;:::-;;;;34657:319;;;;34514:468:::0;:::o;31956:289::-;32068:4;32088:129;32110:12;:10;:12::i;:::-;32136:7;32157:50;32196:10;32157:11;:25;32169:12;:10;:12::i;:::-;32157:25;;;;;;;;;;;;;;;:34;32183:7;32157:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32088:8;:129::i;:::-;32234:4;32227:11;;31956:289;;;;:::o;28778:26::-;;;;:::o;32858:411::-;32909:14;32926:12;:10;:12::i;:::-;32909:29;;32970:11;:19;32982:6;32970:19;;;;;;;;;;;;;;;;;;;;;;;;;32969:20;32948:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33070:15;33101:19;33112:7;33101:10;:19::i;:::-;33069:51;;;;;;;;33148:28;33168:7;33148;:15;33156:6;33148:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33130:7;:15;33138:6;33130:15;;;;;;;;;;;;;;;:46;;;;33196:20;33208:7;33196;;:11;;:20;;;;:::i;:::-;33186:7;:30;;;;33239:23;33254:7;33239:10;;:14;;:23;;;;:::i;:::-;33226:10;:36;;;;32858:411;;;:::o;28858:30::-;;;;:::o;35793:109::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35891:4:3::1;35861:18;:27;35880:7;35861:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35793:109:::0;:::o;33275:470::-;33390:7;33432;;33421;:18;;33413:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33490:17;33485:254;;33524:15;33555:19;33566:7;33555:10;:19::i;:::-;33523:51;;;;;;;;33595:7;33588:14;;;;;33485:254;33636:23;33673:19;33684:7;33673:10;:19::i;:::-;33633:59;;;;;;;;33713:15;33706:22;;;33275:470;;;;;:::o;29104:38::-;;;:::o;29176:40::-;;;;;;;;;;;;;:::o;34068:440::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34263:11:3::1;:20;34275:7;34263:20;;;;;;;;;;;;;;;;;;;;;;;;;34262:21;34254:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34348:1;34329:7;:16;34337:7;34329:16;;;;;;;;;;;;;;;;:20;34325:107;;;34384:37;34404:7;:16;34412:7;34404:16;;;;;;;;;;;;;;;;34384:19;:37::i;:::-;34365:7;:16;34373:7;34365:16;;;;;;;;;;;;;;;:56;;;;34325:107;34464:4;34441:11;:20;34453:7;34441:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34478:9;34493:7;34478:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34068:440:::0;:::o;41427:122::-;41492:4;41515:18;:27;41534:7;41515:27;;;;;;;;;;;;;;;;;;;;;;;;;41508:34;;41427:122;;;:::o;28949:32::-;;;;:::o;30745:195::-;30811:7;30834:11;:20;30846:7;30834:20;;;;;;;;;;;;;;;;;;;;;;;;;30830:49;;;30863:7;:16;30871:7;30863:16;;;;;;;;;;;;;;;;30856:23;;;;30830:49;30896:37;30916:7;:16;30924:7;30916:16;;;;;;;;;;;;;;;;30896:19;:37::i;:::-;30889:44;;30745:195;;;;:::o;1713:145:2:-;1304:12;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1819:1:::1;1782:40;;1803:6;::::0;::::1;;;;;;;;1782:40;;;;;;;;;;;;1849:1;1832:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1713:145::o:0;29223:46:3:-;;;;:::o;32643:118::-;32711:4;32734:11;:20;32746:7;32734:20;;;;;;;;;;;;;;;;;;;;;;;;;32727:27;;32643:118;;;:::o;1081:85:2:-;1127:7;1153:6;;;;;;;;;;;1146:13;;1081:85;:::o;36242:120:3:-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36343:12:3::1;36327:13;:28;;;;36242:120:::0;:::o;30468:85::-;30507:13;30539:7;30532:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30468:85;:::o;32251:386::-;32368:4;32388:221;32410:12;:10;:12::i;:::-;32436:7;32457:142;32513:15;32457:142;;;;;;;;;;;;;;;;;:11;:25;32469:12;:10;:12::i;:::-;32457:25;;;;;;;;;;;;;;;:34;32483:7;32457:34;;;;;;;;;;;;;;;;:38;;:142;;;;;:::i;:::-;32388:8;:221::i;:::-;32626:4;32619:11;;32251:386;;;;:::o;30946:192::-;31048:4;31068:42;31078:12;:10;:12::i;:::-;31092:9;31103:6;31068:9;:42::i;:::-;31127:4;31120:11;;30946:192;;;;:::o;36124:112::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36219:10:3::1;36205:11;:24;;;;36124:112:::0;:::o;36510:168::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36610:8:3::1;36586:21;;:32;;;;;;;;;;;;;;;;;;36633:38;36662:8;36633:38;;;;;;:::i;:::-;;;;;;;;36510:168:::0;:::o;36368:136::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36461:36:3::1;36491:5;36461:25;36473:12;36461:7;;:11;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;36446:12;:51;;;;36368:136:::0;:::o;31144:177::-;31257:7;31287:11;:18;31299:5;31287:18;;;;;;;;;;;;;;;:27;31306:7;31287:27;;;;;;;;;;;;;;;;31280:34;;31144:177;;;;:::o;35908:108::-;1304:12:2;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36004:5:3::1;35974:18;:27;35993:7;35974:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35908:108:::0;:::o;2007:274:2:-;1304:12;:10;:12::i;:::-;1293:23;;:7;:5;:7::i;:::-;:23;;;1285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2128:1:::1;2108:22;;:8;:22;;;;2087:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2238:8;2209:38;;2230:6;::::0;::::1;;;;;;;;2209:38;;;;;;;;;;;;2266:8;2257:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2007:274:::0;:::o;586:96:0:-;639:7;665:10;658:17;;586:96;:::o;41555:361:3:-;41694:1;41677:19;;:5;:19;;;;41669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41774:1;41755:21;;:7;:21;;;;41747:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41856:6;41826:11;:18;41838:5;41826:18;;;;;;;;;;;;;;;:27;41845:7;41826:27;;;;;;;;;;;;;;;:36;;;;41893:7;41877:32;;41886:5;41877:32;;;41902:6;41877:32;;;;;;:::i;:::-;;;;;;;;41555:361;;;:::o;41922:1788::-;42055:1;42039:18;;:4;:18;;;;42031:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42131:1;42117:16;;:2;:16;;;;42109:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42200:1;42191:6;:10;42183:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42269:7;:5;:7::i;:::-;42261:15;;:4;:15;;;;:32;;;;;42286:7;:5;:7::i;:::-;42280:13;;:2;:13;;;;42261:32;42257:171;;;42342:12;;42332:6;:22;;42307:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;42257:171;42717:28;42748:24;42766:4;42748:9;:24::i;:::-;42717:55;;42811:12;;42787:20;:36;42783:102;;42862:12;;42839:35;;42783:102;42895:24;42959:29;;42922:20;:66;;42895:93;;43015:19;:53;;;;;43052:16;;;;;;;;;;;43051:17;43015:53;:90;;;;;43092:13;43084:21;;:4;:21;;;;43015:90;:127;;;;;43121:21;;;;;;;;;;;43015:127;42998:310;;;43190:29;;43167:52;;43261:36;43276:20;43261:14;:36::i;:::-;42998:310;43378:12;43393:4;43378:19;;43495:18;:24;43514:4;43495:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43523:18;:22;43542:2;43523:22;;;;;;;;;;;;;;;;;;;;;;;;;43495:50;43491:96;;;43571:5;43561:15;;43491:96;43662:41;43677:4;43683:2;43687:6;43695:7;43662:14;:41::i;:::-;41922:1788;;;;;;:::o;8025:231::-;8141:7;8197:1;8192;:6;;8200:12;8184:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8238:1;8234;:5;8227:12;;8025:231;;;;;:::o;38922:161::-;38964:7;38984:15;39001;39020:19;:17;:19::i;:::-;38983:56;;;;39056:20;39068:7;39056;:11;;:20;;;;:::i;:::-;39049:27;;;;38922:161;:::o;6916:96::-;6974:7;7004:1;7000;:5;;;;:::i;:::-;6993:12;;6916:96;;;;:::o;5821:::-;5879:7;5909:1;5905;:5;;;;:::i;:::-;5898:12;;5821:96;;;;:::o;36924:806::-;37020:7;37041;37062;37083;37104;37125;37146;37192:23;37229:12;37255:18;37287:16;37316:20;37328:7;37316:11;:20::i;:::-;37178:158;;;;;;;;37347:15;37364:23;37389:12;37405:130;37430:7;37451:4;37469:10;37493:8;37515:10;:8;:10::i;:::-;37405:11;:130::i;:::-;37346:189;;;;;;37566:7;37587:15;37616:4;37634:15;37663:4;37681:10;37705:8;37545:178;;;;;;;;;;;;;;;;;;;;;36924:806;;;;;;;;;:::o;6188:96::-;6246:7;6276:1;6272;:5;;;;:::i;:::-;6265:12;;6188:96;;;;:::o;6531:::-;6589:7;6619:1;6615;:5;;;;:::i;:::-;6608:12;;6531:96;;;;:::o;43716:962::-;29648:4;29629:16;;:23;;;;;;;;;;;;;;;;;;43850:12:::1;43865:27;43890:1;43865:20;:24;;:27;;;;:::i;:::-;43850:42;;43902:17;43922:30;43947:4;43922:20;:24;;:30;;;;:::i;:::-;43902:50;;44224:22;44249:21;44224:46;;44465:18;44486:41;44512:14;44486:21;:25;;:41;;;;:::i;:::-;44465:62;;44628:43;44643:4;44649:10;44661:9;44628:43;;;;;;;;:::i;:::-;;;;;;;;29662:1;;;;29692:5:::0;29673:16;;:24;;;;;;;;;;;;;;;;;;43716:962;:::o;45925:817::-;46075:7;46070:28;;46084:14;:12;:14::i;:::-;46070:28;46113:11;:19;46125:6;46113:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;46137:11;:22;46149:9;46137:22;;;;;;;;;;;;;;;;;;;;;;;;;46136:23;46113:46;46109:587;;;46175:48;46197:6;46205:9;46216:6;46175:21;:48::i;:::-;46109:587;;;46245:11;:19;46257:6;46245:19;;;;;;;;;;;;;;;;;;;;;;;;;46244:20;:46;;;;;46268:11;:22;46280:9;46268:22;;;;;;;;;;;;;;;;;;;;;;;;;46244:46;46240:456;;;46306:46;46326:6;46334:9;46345:6;46306:19;:46::i;:::-;46240:456;;;46374:11;:19;46386:6;46374:19;;;;;;;;;;;;;;;;;;;;;;;;;46373:20;:47;;;;;46398:11;:22;46410:9;46398:22;;;;;;;;;;;;;;;;;;;;;;;;;46397:23;46373:47;46369:327;;;46436:44;46454:6;46462:9;46473:6;46436:17;:44::i;:::-;46369:327;;;46501:11;:19;46513:6;46501:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46524:11;:22;46536:9;46524:22;;;;;;;;;;;;;;;;;;;;;;;;;46501:45;46497:199;;;46562:48;46584:6;46592:9;46603:6;46562:21;:48::i;:::-;46497:199;;;46641:44;46659:6;46667:9;46678:6;46641:17;:44::i;:::-;46497:199;46369:327;46240:456;46109:587;46711:7;46706:29;;46720:15;:13;:15::i;:::-;46706:29;45925:817;;;;:::o;39089:592::-;39140:7;39149;39168:15;39186:7;;39168:25;;39203:15;39221:7;;39203:25;;39243:9;39238:331;39262:9;:16;;;;39258:1;:20;39238:331;;;39344:7;39320;:21;39328:9;39338:1;39328:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39320:21;;;;;;;;;;;;;;;;:31;:82;;;;39395:7;39371;:21;39379:9;39389:1;39379:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39371:21;;;;;;;;;;;;;;;;:31;39320:82;39299:143;;;39425:7;;39434;;39417:25;;;;;;;;;39299:143;39466:34;39478:7;:21;39486:9;39496:1;39486:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39478:21;;;;;;;;;;;;;;;;39466:7;:11;;:34;;;;:::i;:::-;39456:44;;39524:34;39536:7;:21;39544:9;39554:1;39544:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39536:21;;;;;;;;;;;;;;;;39524:7;:11;;:34;;;;:::i;:::-;39514:44;;39280:3;;;;;:::i;:::-;;;;39238:331;;;;39592:20;39604:7;;39592;;:11;;:20;;;;:::i;:::-;39582:7;:30;39578:61;;;39622:7;;39631;;39614:25;;;;;;;;39578:61;39657:7;39666;39649:25;;;;;;39089:592;;;:::o;37736:523::-;37833:7;37854;37875;37896;37928:12;37943:24;37959:7;37943:15;:24::i;:::-;37928:39;;37977:18;37998:30;38020:7;37998:21;:30::i;:::-;37977:51;;38038:16;38057:28;38077:7;38057:19;:28::i;:::-;38038:47;;38095:23;38121:69;38172:8;38121:33;38143:10;38121:17;38133:4;38121:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:69;;;;:::i;:::-;38095:95;;38208:15;38225:4;38231:10;38243:8;38200:52;;;;;;;;;;;;37736:523;;;;;:::o;38265:651::-;38481:7;38502;38523;38555:15;38573:24;38585:11;38573:7;:11;;:24;;;;:::i;:::-;38555:42;;38607:12;38622:21;38631:11;38622:4;:8;;:21;;;;:::i;:::-;38607:36;;38653:18;38674:27;38689:11;38674:10;:14;;:27;;;;:::i;:::-;38653:48;;38711:16;38730:25;38743:11;38730:8;:12;;:25;;;;:::i;:::-;38711:44;;38765:23;38791:69;38842:8;38791:33;38813:10;38791:17;38803:4;38791:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:69;;;;:::i;:::-;38765:95;;38878:7;38887:15;38904:4;38870:39;;;;;;;;;;;38265:651;;;;;;;;;:::o;40955:295::-;41012:1;41001:7;;:12;:34;;;;;41034:1;41017:13;;:18;41001:34;40997:47;;;41037:7;;40997:47;41072:7;;41054:15;:25;;;;41111:11;;41089:19;:33;;;;41156:13;;41132:21;:37;;;;41190:1;41180:7;:11;;;;41215:1;41201:11;:15;;;;41242:1;41226:13;:17;;;;40955:295;:::o;48170:729::-;48315:15;48344:23;48381:12;48407:23;48444:12;48470:18;48502:16;48531:19;48542:7;48531:10;:19::i;:::-;48301:249;;;;;;;;;;;;;;48578:28;48598:7;48578;:15;48586:6;48578:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48560:7;:15;48568:6;48560:15;;;;;;;;;;;;;;;:46;;;;48634:28;48654:7;48634;:15;48642:6;48634:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48616:7;:15;48624:6;48616:15;;;;;;;;;;;;;;;:46;;;;48693:39;48716:15;48693:7;:18;48701:9;48693:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48672:7;:18;48680:9;48672:18;;;;;;;;;;;;;;;:60;;;;48742:26;48757:10;48742:14;:26::i;:::-;48778:22;48791:8;48778:12;:22::i;:::-;48810:23;48822:4;48828;48810:11;:23::i;:::-;48865:9;48848:44;;48857:6;48848:44;;;48876:15;48848:44;;;;;;:::i;:::-;;;;;;;;48170:729;;;;;;;;;;:::o;47423:741::-;47566:15;47595:23;47632:12;47658:23;47695:12;47721:18;47753:16;47782:19;47793:7;47782:10;:19::i;:::-;47552:249;;;;;;;;;;;;;;47829:28;47849:7;47829;:15;47837:6;47829:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47811:7;:15;47819:6;47811:15;;;;;;;;;;;;;;;:46;;;;47888:39;47911:15;47888:7;:18;47896:9;47888:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47867:7;:18;47875:9;47867:18;;;;;;;;;;;;;;;:60;;;;47958:39;47981:15;47958:7;:18;47966:9;47958:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47937:7;:18;47945:9;47937:18;;;;;;;;;;;;;;;:60;;;;48007:26;48022:10;48007:14;:26::i;:::-;48043:22;48056:8;48043:12;:22::i;:::-;48075:23;48087:4;48093;48075:11;:23::i;:::-;48130:9;48113:44;;48122:6;48113:44;;;48141:15;48113:44;;;;;;:::i;:::-;;;;;;;;47423:741;;;;;;;;;;:::o;46748:669::-;46889:15;46918:23;46955:12;46981:23;47018:12;47044:18;47076:16;47105:19;47116:7;47105:10;:19::i;:::-;46875:249;;;;;;;;;;;;;;47152:28;47172:7;47152;:15;47160:6;47152:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47134:7;:15;47142:6;47134:15;;;;;;;;;;;;;;;:46;;;;47211:39;47234:15;47211:7;:18;47219:9;47211:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47190:7;:18;47198:9;47190:18;;;;;;;;;;;;;;;:60;;;;47260:26;47275:10;47260:14;:26::i;:::-;47296:22;47309:8;47296:12;:22::i;:::-;47328:23;47340:4;47346;47328:11;:23::i;:::-;47383:9;47366:44;;47375:6;47366:44;;;47394:15;47366:44;;;;;;:::i;:::-;;;;;;;;46748:669;;;;;;;;;;:::o;34988:799::-;35133:15;35162:23;35199:12;35225:23;35262:12;35288:18;35320:16;35349:19;35360:7;35349:10;:19::i;:::-;35119:249;;;;;;;;;;;;;;35396:28;35416:7;35396;:15;35404:6;35396:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35378:7;:15;35386:6;35378:15;;;;;;;;;;;;;;;:46;;;;35452:28;35472:7;35452;:15;35460:6;35452:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35434:7;:15;35442:6;35434:15;;;;;;;;;;;;;;;:46;;;;35511:39;35534:15;35511:7;:18;35519:9;35511:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35490:7;:18;35498:9;35490:18;;;;;;;;;;;;;;;:60;;;;35581:39;35604:15;35581:7;:18;35589:9;35581:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35560:7;:18;35568:9;35560:18;;;;;;;;;;;;;;;:60;;;;35630:26;35645:10;35630:14;:26::i;:::-;35666:22;35679:8;35666:12;:22::i;:::-;35698:23;35710:4;35716;35698:11;:23::i;:::-;35753:9;35736:44;;35745:6;35736:44;;;35764:15;35736:44;;;;;;:::i;:::-;;;;;;;;34988:799;;;;;;;;;;:::o;41256:165::-;41309:15;;41299:7;:25;;;;41348:19;;41334:11;:33;;;;41393:21;;41377:13;:37;;;;41256:165::o;40477:128::-;40541:7;40567:31;40592:5;40567:20;40579:7;;40567;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;40560:38;;40477:128;;;:::o;40781:168::-;40875:7;40905:37;40936:5;40905:26;40917:13;;40905:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;40898:44;;40781:168;;;:::o;40611:164::-;40703:7;40733:35;40762:5;40733:24;40745:11;;40733:7;:11;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;40726:42;;40611:164;;;:::o;39687:349::-;39749:19;39771:10;:8;:10::i;:::-;39749:32;;39791:18;39812:27;39827:11;39812:10;:14;;:27;;;;:::i;:::-;39791:48;;39874:38;39901:10;39874:7;:22;39890:4;39874:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39849:7;:22;39865:4;39849:22;;;;;;;;;;;;;;;:63;;;;39926:11;:26;39946:4;39926:26;;;;;;;;;;;;;;;;;;;;;;;;;39922:107;;;39991:38;40018:10;39991:7;:22;40007:4;39991:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39966:7;:22;39982:4;39966:22;;;;;;;;;;;;;;;:63;;;;39922:107;39687:349;;;:::o;40042:429::-;40100:19;40122:10;:8;:10::i;:::-;40100:32;;40142:16;40161:25;40174:11;40161:8;:12;;:25;;;;:::i;:::-;40142:44;;40229:66;40277:8;40229:7;:30;40237:21;;;;;;;;;;;40229:30;;;;;;;;;;;;;;;;:34;;:66;;;;:::i;:::-;40196:7;:30;40204:21;;;;;;;;;;;40196:30;;;;;;;;;;;;;;;:99;;;;40309:11;:34;40321:21;;;;;;;;;;;40309:34;;;;;;;;;;;;;;;;;;;;;;;;;40305:159;;;40390:74;40442:8;40390:7;:30;40398:21;;;;;;;;;;;40390:30;;;;;;;;;;;;;;;;:34;;:74;;;;:::i;:::-;40357:7;:30;40365:21;;;;;;;;;;;40357:30;;;;;;;;;;;;;;;:107;;;;40305:159;40042:429;;;:::o;36774:144::-;36851:17;36863:4;36851:7;;:11;;:17;;;;:::i;:::-;36841:7;:27;;;;36891:20;36906:4;36891:10;;:14;;:20;;;;:::i;:::-;36878:10;:33;;;;36774:144;;:::o;7:139:4:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;;;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;;;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:256::-;;2193:2;2181:9;2172:7;2168:23;2164:32;2161:2;;;2209:1;2206;2199:12;2161:2;2252:1;2277:50;2319:7;2310:6;2299:9;2295:22;2277:50;:::i;:::-;2267:60;;2223:114;2151:193;;;;:::o;2350:262::-;;2458:2;2446:9;2437:7;2433:23;2429:32;2426:2;;;2474:1;2471;2464:12;2426:2;2517:1;2542:53;2587:7;2578:6;2567:9;2563:22;2542:53;:::i;:::-;2532:63;;2488:117;2416:196;;;;:::o;2618:401::-;;;2740:2;2728:9;2719:7;2715:23;2711:32;2708:2;;;2756:1;2753;2746:12;2708:2;2799:1;2824:53;2869:7;2860:6;2849:9;2845:22;2824:53;:::i;:::-;2814:63;;2770:117;2926:2;2952:50;2994:7;2985:6;2974:9;2970:22;2952:50;:::i;:::-;2942:60;;2897:115;2698:321;;;;;:::o;3025:118::-;3112:24;3130:5;3112:24;:::i;:::-;3107:3;3100:37;3090:53;;:::o;3149:109::-;3230:21;3245:5;3230:21;:::i;:::-;3225:3;3218:34;3208:50;;:::o;3264:185::-;3378:64;3436:5;3378:64;:::i;:::-;3373:3;3366:77;3356:93;;:::o;3455:364::-;;3571:39;3604:5;3571:39;:::i;:::-;3626:71;3690:6;3685:3;3626:71;:::i;:::-;3619:78;;3706:52;3751:6;3746:3;3739:4;3732:5;3728:16;3706:52;:::i;:::-;3783:29;3805:6;3783:29;:::i;:::-;3778:3;3774:39;3767:46;;3547:272;;;;;:::o;3825:367::-;;3988:67;4052:2;4047:3;3988:67;:::i;:::-;3981:74;;4085:34;4081:1;4076:3;4072:11;4065:55;4151:5;4146:2;4141:3;4137:12;4130:27;4183:2;4178:3;4174:12;4167:19;;3971:221;;;:::o;4198:374::-;;4361:67;4425:2;4420:3;4361:67;:::i;:::-;4354:74;;4458:34;4454:1;4449:3;4445:11;4438:55;4524:12;4519:2;4514:3;4510:12;4503:34;4563:2;4558:3;4554:12;4547:19;;4344:228;;;:::o;4578:370::-;;4741:67;4805:2;4800:3;4741:67;:::i;:::-;4734:74;;4838:34;4834:1;4829:3;4825:11;4818:55;4904:8;4899:2;4894:3;4890:12;4883:30;4939:2;4934:3;4930:12;4923:19;;4724:224;;;:::o;4954:366::-;;5117:67;5181:2;5176:3;5117:67;:::i;:::-;5110:74;;5214:34;5210:1;5205:3;5201:11;5194:55;5280:4;5275:2;5270:3;5266:12;5259:26;5311:2;5306:3;5302:12;5295:19;;5100:220;;;:::o;5326:325::-;;5489:67;5553:2;5548:3;5489:67;:::i;:::-;5482:74;;5586:29;5582:1;5577:3;5573:11;5566:50;5642:2;5637:3;5633:12;5626:19;;5472:179;;;:::o;5657:325::-;;5820:67;5884:2;5879:3;5820:67;:::i;:::-;5813:74;;5917:29;5913:1;5908:3;5904:11;5897:50;5973:2;5968:3;5964:12;5957:19;;5803:179;;;:::o;5988:329::-;;6151:67;6215:2;6210:3;6151:67;:::i;:::-;6144:74;;6248:33;6244:1;6239:3;6235:11;6228:54;6308:2;6303:3;6299:12;6292:19;;6134:183;;;:::o;6323:372::-;;6486:67;6550:2;6545:3;6486:67;:::i;:::-;6479:74;;6583:34;6579:1;6574:3;6570:11;6563:55;6649:10;6644:2;6639:3;6635:12;6628:32;6686:2;6681:3;6677:12;6670:19;;6469:226;;;:::o;6701:330::-;;6864:67;6928:2;6923:3;6864:67;:::i;:::-;6857:74;;6961:34;6957:1;6952:3;6948:11;6941:55;7022:2;7017:3;7013:12;7006:19;;6847:184;;;:::o;7037:373::-;;7200:67;7264:2;7259:3;7200:67;:::i;:::-;7193:74;;7297:34;7293:1;7288:3;7284:11;7277:55;7363:11;7358:2;7353:3;7349:12;7342:33;7401:2;7396:3;7392:12;7385:19;;7183:227;;;:::o;7416:369::-;;7579:67;7643:2;7638:3;7579:67;:::i;:::-;7572:74;;7676:34;7672:1;7667:3;7663:11;7656:55;7742:7;7737:2;7732:3;7728:12;7721:29;7776:2;7771:3;7767:12;7760:19;;7562:223;;;:::o;7791:368::-;;7954:67;8018:2;8013:3;7954:67;:::i;:::-;7947:74;;8051:34;8047:1;8042:3;8038:11;8031:55;8117:6;8112:2;8107:3;8103:12;8096:28;8150:2;8145:3;8141:12;8134:19;;7937:222;;;:::o;8165:376::-;;8328:67;8392:2;8387:3;8328:67;:::i;:::-;8321:74;;8425:34;8421:1;8416:3;8412:11;8405:55;8491:14;8486:2;8481:3;8477:12;8470:36;8532:2;8527:3;8523:12;8516:19;;8311:230;;;:::o;8547:118::-;8634:24;8652:5;8634:24;:::i;:::-;8629:3;8622:37;8612:53;;:::o;8671:112::-;8754:22;8770:5;8754:22;:::i;:::-;8749:3;8742:35;8732:51;;:::o;8789:222::-;;8920:2;8909:9;8905:18;8897:26;;8933:71;9001:1;8990:9;8986:17;8977:6;8933:71;:::i;:::-;8887:124;;;;:::o;9017:210::-;;9142:2;9131:9;9127:18;9119:26;;9155:65;9217:1;9206:9;9202:17;9193:6;9155:65;:::i;:::-;9109:118;;;;:::o;9233:276::-;;9391:2;9380:9;9376:18;9368:26;;9404:98;9499:1;9488:9;9484:17;9475:6;9404:98;:::i;:::-;9358:151;;;;:::o;9515:313::-;;9666:2;9655:9;9651:18;9643:26;;9715:9;9709:4;9705:20;9701:1;9690:9;9686:17;9679:47;9743:78;9816:4;9807:6;9743:78;:::i;:::-;9735:86;;9633:195;;;;:::o;9834:419::-;;10038:2;10027:9;10023:18;10015:26;;10087:9;10081:4;10077:20;10073:1;10062:9;10058:17;10051:47;10115:131;10241:4;10115:131;:::i;:::-;10107:139;;10005:248;;;:::o;10259:419::-;;10463:2;10452:9;10448:18;10440:26;;10512:9;10506:4;10502:20;10498:1;10487:9;10483:17;10476:47;10540:131;10666:4;10540:131;:::i;:::-;10532:139;;10430:248;;;:::o;10684:419::-;;10888:2;10877:9;10873:18;10865:26;;10937:9;10931:4;10927:20;10923:1;10912:9;10908:17;10901:47;10965:131;11091:4;10965:131;:::i;:::-;10957:139;;10855:248;;;:::o;11109:419::-;;11313:2;11302:9;11298:18;11290:26;;11362:9;11356:4;11352:20;11348:1;11337:9;11333:17;11326:47;11390:131;11516:4;11390:131;:::i;:::-;11382:139;;11280:248;;;:::o;11534:419::-;;11738:2;11727:9;11723:18;11715:26;;11787:9;11781:4;11777:20;11773:1;11762:9;11758:17;11751:47;11815:131;11941:4;11815:131;:::i;:::-;11807:139;;11705:248;;;:::o;11959:419::-;;12163:2;12152:9;12148:18;12140:26;;12212:9;12206:4;12202:20;12198:1;12187:9;12183:17;12176:47;12240:131;12366:4;12240:131;:::i;:::-;12232:139;;12130:248;;;:::o;12384:419::-;;12588:2;12577:9;12573:18;12565:26;;12637:9;12631:4;12627:20;12623:1;12612:9;12608:17;12601:47;12665:131;12791:4;12665:131;:::i;:::-;12657:139;;12555:248;;;:::o;12809:419::-;;13013:2;13002:9;12998:18;12990:26;;13062:9;13056:4;13052:20;13048:1;13037:9;13033:17;13026:47;13090:131;13216:4;13090:131;:::i;:::-;13082:139;;12980:248;;;:::o;13234:419::-;;13438:2;13427:9;13423:18;13415:26;;13487:9;13481:4;13477:20;13473:1;13462:9;13458:17;13451:47;13515:131;13641:4;13515:131;:::i;:::-;13507:139;;13405:248;;;:::o;13659:419::-;;13863:2;13852:9;13848:18;13840:26;;13912:9;13906:4;13902:20;13898:1;13887:9;13883:17;13876:47;13940:131;14066:4;13940:131;:::i;:::-;13932:139;;13830:248;;;:::o;14084:419::-;;14288:2;14277:9;14273:18;14265:26;;14337:9;14331:4;14327:20;14323:1;14312:9;14308:17;14301:47;14365:131;14491:4;14365:131;:::i;:::-;14357:139;;14255:248;;;:::o;14509:419::-;;14713:2;14702:9;14698:18;14690:26;;14762:9;14756:4;14752:20;14748:1;14737:9;14733:17;14726:47;14790:131;14916:4;14790:131;:::i;:::-;14782:139;;14680:248;;;:::o;14934:419::-;;15138:2;15127:9;15123:18;15115:26;;15187:9;15181:4;15177:20;15173:1;15162:9;15158:17;15151:47;15215:131;15341:4;15215:131;:::i;:::-;15207:139;;15105:248;;;:::o;15359:222::-;;15490:2;15479:9;15475:18;15467:26;;15503:71;15571:1;15560:9;15556:17;15547:6;15503:71;:::i;:::-;15457:124;;;;:::o;15587:442::-;;15774:2;15763:9;15759:18;15751:26;;15787:71;15855:1;15844:9;15840:17;15831:6;15787:71;:::i;:::-;15868:72;15936:2;15925:9;15921:18;15912:6;15868:72;:::i;:::-;15950;16018:2;16007:9;16003:18;15994:6;15950:72;:::i;:::-;15741:288;;;;;;:::o;16035:214::-;;16162:2;16151:9;16147:18;16139:26;;16175:67;16239:1;16228:9;16224:17;16215:6;16175:67;:::i;:::-;16129:120;;;;:::o;16255:99::-;;16341:5;16335:12;16325:22;;16314:40;;;:::o;16360:169::-;;16478:6;16473:3;16466:19;16518:4;16513:3;16509:14;16494:29;;16456:73;;;;:::o;16535:305::-;;16594:20;16612:1;16594:20;:::i;:::-;16589:25;;16628:20;16646:1;16628:20;:::i;:::-;16623:25;;16782:1;16714:66;16710:74;16707:1;16704:81;16701:2;;;16788:18;;:::i;:::-;16701:2;16832:1;16829;16825:9;16818:16;;16579:261;;;;:::o;16846:185::-;;16903:20;16921:1;16903:20;:::i;:::-;16898:25;;16937:20;16955:1;16937:20;:::i;:::-;16932:25;;16976:1;16966:2;;16981:18;;:::i;:::-;16966:2;17023:1;17020;17016:9;17011:14;;16888:143;;;;:::o;17037:348::-;;17100:20;17118:1;17100:20;:::i;:::-;17095:25;;17134:20;17152:1;17134:20;:::i;:::-;17129:25;;17322:1;17254:66;17250:74;17247:1;17244:81;17239:1;17232:9;17225:17;17221:105;17218:2;;;17329:18;;:::i;:::-;17218:2;17377:1;17374;17370:9;17359:20;;17085:300;;;;:::o;17391:191::-;;17451:20;17469:1;17451:20;:::i;:::-;17446:25;;17485:20;17503:1;17485:20;:::i;:::-;17480:25;;17524:1;17521;17518:8;17515:2;;;17529:18;;:::i;:::-;17515:2;17574:1;17571;17567:9;17559:17;;17436:146;;;;:::o;17588:96::-;;17654:24;17672:5;17654:24;:::i;:::-;17643:35;;17633:51;;;:::o;17690:90::-;;17767:5;17760:13;17753:21;17742:32;;17732:48;;;:::o;17786:126::-;;17863:42;17856:5;17852:54;17841:65;;17831:81;;;:::o;17918:77::-;;17984:5;17973:16;;17963:32;;;:::o;18001:86::-;;18076:4;18069:5;18065:16;18054:27;;18044:43;;;:::o;18093:180::-;;18203:64;18261:5;18203:64;:::i;:::-;18190:77;;18180:93;;;:::o;18279:140::-;;18389:24;18407:5;18389:24;:::i;:::-;18376:37;;18366:53;;;:::o;18425:307::-;18493:1;18503:113;18517:6;18514:1;18511:13;18503:113;;;18602:1;18597:3;18593:11;18587:18;18583:1;18578:3;18574:11;18567:39;18539:2;18536:1;18532:10;18527:15;;18503:113;;;18634:6;18631:1;18628:13;18625:2;;;18714:1;18705:6;18700:3;18696:16;18689:27;18625:2;18474:258;;;;:::o;18738:320::-;;18819:1;18813:4;18809:12;18799:22;;18866:1;18860:4;18856:12;18887:18;18877:2;;18943:4;18935:6;18931:17;18921:27;;18877:2;19005;18997:6;18994:14;18974:18;18971:38;18968:2;;;19024:18;;:::i;:::-;18968:2;18789:269;;;;:::o;19064:233::-;;19126:24;19144:5;19126:24;:::i;:::-;19117:33;;19172:66;19165:5;19162:77;19159:2;;;19242:18;;:::i;:::-;19159:2;19289:1;19282:5;19278:13;19271:20;;19107:190;;;:::o;19303:180::-;19351:77;19348:1;19341:88;19448:4;19445:1;19438:15;19472:4;19469:1;19462:15;19489:180;19537:77;19534:1;19527:88;19634:4;19631:1;19624:15;19658:4;19655:1;19648:15;19675:180;19723:77;19720:1;19713:88;19820:4;19817:1;19810:15;19844:4;19841:1;19834:15;19861:102;;19953:2;19949:7;19944:2;19937:5;19933:14;19929:28;19919:38;;19909:54;;;:::o;19969:122::-;20042:24;20060:5;20042:24;:::i;:::-;20035:5;20032:35;20022:2;;20081:1;20078;20071:12;20022:2;20012:79;:::o;20097:116::-;20167:21;20182:5;20167:21;:::i;:::-;20160:5;20157:32;20147:2;;20203:1;20200;20193:12;20147:2;20137:76;:::o;20219:122::-;20292:24;20310:5;20292:24;:::i;:::-;20285:5;20282:35;20272:2;;20331:1;20328;20321:12;20272:2;20262:79;:::o
Swarm Source
ipfs://003457e7ad6451f9f923a7eca80167525fb02208c78858d6d35137612ebf79ab
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.