ERC-20
Overview
Max Total Supply
1,000,000 FAM
Holders
54
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
8,595.766985646113131702 FAMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
FAMSOCIAL
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-07 */ /* https://fam-social.com/ https://t.me/famsocial */ // SPDX-License-Identifier: MIT // File: contracts/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, 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); } // File: contracts/IUniswapV2Router02.sol pragma solidity >=0.6.2; 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; } // File: contracts/IUniswapV2Pair.sol pragma solidity >=0.5.0; 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; } // File: contracts/IUniswapV2Factory.sol pragma solidity >=0.5.0; 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; } // File: contracts/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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" ); (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 functionCallWithValue( target, data, 0, "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" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: contracts/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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) { return msg.data; } } // File: contracts/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // 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 generally not needed starting with Solidity 0.8, since 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 subtraction 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. 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; } } } // File: contracts/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 ); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: contracts/old.sol pragma solidity 0.8.17; contract Blacklist { struct AntiBot { bool antiBotStatus; mapping(address => uint256) _userFirstTry; mapping(address => uint256) _userLastTry; mapping(address => bool) _blacklistedUsers; } AntiBot antiBot; } abstract contract Configuration is IERC20 { string public _name = "FAMSOCIAL"; string public _symbol = "FAM"; uint8 public _decimals = 18; uint256 public _totalSupply = 1000000 * 10**_decimals; // 1 million total supply address public developerAddress = 0x885d9F7e6b1913DF7743E473bB9101c01A607926; // Developer Address uint256 public maxTransactionAmount = _totalSupply / 100; // 1% of the total supply uint256 public maxWalletBalance = _totalSupply / 100; // 1% of the total supply address public uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; uint256 public numberOfTokensToSwapToLiquidity = _totalSupply / 1000; // 0.1% of the total supply uint8 public _liquidityFee = 3; // 3% uint8 public _developerFee = 2; // 2% bool public _FeeOnBuy = true; bool public _FeeOnSell = true; bool public _FeeOnTransfer = false; } contract FAMSOCIAL is Context, Configuration, Ownable, Blacklist { using SafeMath for uint256; using Address for address; mapping(address => bool) public whitelist; bool public isWhitelistingEnabled = false; mapping(address => uint256) private _totalOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; bool private inSwapAndLiquify; bool private swapAndLiquifyEnabled = true; modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } uint256 public launchingTime; bool public tradeStarted; IUniswapV2Router02 public _uniswapV2Router = IUniswapV2Router02(uniswapV2Router); address public uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); constructor() { whitelist[_msgSender()] = true; whitelist[address(this)] = true; whitelist[developerAddress] = true; whitelist[uniswapV2Router] = true; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[developerAddress] = true; _isExcludedFromFee[uniswapV2Router] = true; _approve(_msgSender(), address(uniswapV2Router), ~uint256(0)); _approve(address(this), address(uniswapV2Router), ~uint256(0)); antiBot.antiBotStatus = true; _totalOwned[_msgSender()] = _totalSupply; //mint all to msg.sender emit Transfer(address(0), _msgSender(), _totalSupply); } 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 _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _totalOwned[account]; } function transfer(address recipient, uint256 amount) public override returns (bool res) { if (isWhitelistingEnabled == true) { require( (whitelist[_msgSender()] == true && whitelist[recipient] == true), "Transaction not allowed" ); _transfer(_msgSender(), recipient, amount); return res = true; } if (isWhitelistingEnabled == false) { _transfer(_msgSender(), recipient, amount); return res = 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; } // once enabled, can never be turned off function EnableTrading() external onlyOwner { tradeStarted = true; launchingTime = block.number; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool res) { if (isWhitelistingEnabled == true) { require( (whitelist[sender] == true && whitelist[recipient] == true), "Transaction not allowed" ); _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return res = true; } if (isWhitelistingEnabled == false) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return res = 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 toggleWhitelisting() external onlyOwner { isWhitelistingEnabled = !isWhitelistingEnabled; } // Add multiple addresses to the whitelist function addWhitelistAddresses(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { whitelist[addresses[i]] = true; } } // Add a single address to the whitelist function addWhitelistAddress(address addr) external onlyOwner { whitelist[addr] = true; } // Remove multiple addresses from the whitelist function removeWhitelistAddresses(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { whitelist[addresses[i]] = false; } } // Remove a single address from the whitelist function removeWhitelistAddress(address addr) external onlyOwner { whitelist[addr] = false; } 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(tradeStarted, "Wait for trading to start"); require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require( !antiBot._blacklistedUsers[to] && !antiBot._blacklistedUsers[from], "You are not allowed" ); if ( amount > maxTransactionAmount && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] ) { revert("Transfer is bigger than max tx amount"); } if ( maxWalletBalance > 0 && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && to != uniswapV2Pair ) { uint256 recipientBalance = balanceOf(to); require( recipientBalance + amount <= maxWalletBalance, "Your balance is too high" ); } if (antiBot.antiBotStatus == true) { if ( to != owner() && to != address(_uniswapV2Router) && to != uniswapV2Pair ) { require( antiBot._userLastTry[tx.origin] < block.number, "You cannot do more than 1 transaction per block" ); antiBot._userLastTry[tx.origin] = block.number; } } if ( block.number <= (launchingTime + 2) && to != address(_uniswapV2Router) && to != uniswapV2Pair ) { antiBot._blacklistedUsers[to] = true; } bool takeFee = _FeeOnTransfer; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } else { if (from == uniswapV2Pair) { takeFee = _FeeOnBuy; } else if (to == uniswapV2Pair) { takeFee = _FeeOnSell; } } _tokenTransfer(from, to, amount, takeFee); } function _beforeTransfer(address sender) internal { uint256 contractTokenBalance = balanceOf(address(this)); checkLiqBal(contractTokenBalance, sender); } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) { _beforeTransfer(sender); _transferStandard(sender, recipient, amount); } else { _beforeTransfer(sender); _transferWithFee(sender, recipient, amount); } } function _transferWithFee( address sender, address recipient, uint256 tAmount ) private { uint256 fromBalance = _totalOwned[sender]; require( fromBalance >= tAmount, "ERC20: transfer amount exceeds balance" ); uint256 devFee = (tAmount * _developerFee) / 100; uint256 liqFee = (tAmount * _liquidityFee) / 100; uint256 tTransferAmount = tAmount - devFee - liqFee; unchecked { _totalOwned[sender] = fromBalance - tTransferAmount; _totalOwned[recipient] += tTransferAmount; _totalOwned[address(this)] += liqFee; _totalOwned[developerAddress] += devFee; } emit Transfer(sender, recipient, tTransferAmount); emit Transfer(sender, developerAddress, devFee); emit Transfer(sender, address(this), liqFee); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { uint256 fromBalance = _totalOwned[sender]; require( fromBalance >= tAmount, "ERC20: transfer amount exceeds balance" ); unchecked { _totalOwned[sender] = fromBalance - tAmount; _totalOwned[recipient] += tAmount; } emit Transfer(sender, recipient, tAmount); } function _getCurrentSupply() private view returns (uint256) { uint256 tSupply = _totalSupply; return tSupply; } function isExcludedFromFee(address _address) public view returns (bool) { return _isExcludedFromFee[_address]; } function excludeFromFee(address _address) public onlyOwner { _isExcludedFromFee[_address] = true; } function includeInFee(address _address) public onlyOwner { _isExcludedFromFee[_address] = false; } function setDeveloperAddress(address _dev) external onlyOwner { developerAddress = _dev; } function setFeesStatus( bool FeeOnBuy, bool FeeOnsell, bool FeeOnTransfer ) external onlyOwner { _FeeOnBuy = FeeOnBuy; _FeeOnSell = FeeOnsell; _FeeOnTransfer = FeeOnTransfer; } function checkFeesStatus() public view onlyOwner returns (bool[] memory) { bool[] memory result = new bool[](3); result[0] = _FeeOnBuy; result[1] = _FeeOnSell; result[2] = _FeeOnTransfer; return result; } function checkLiqBal(uint256 contractTokenBalance, address sender) internal { if (contractTokenBalance >= maxTransactionAmount) contractTokenBalance = maxTransactionAmount; bool isOverRequiredTokenBalance = (contractTokenBalance >= numberOfTokensToSwapToLiquidity); if ( isOverRequiredTokenBalance && swapAndLiquifyEnabled && !inSwapAndLiquify && (sender != uniswapV2Pair) ) { startSwappingForLiquidity(contractTokenBalance); } } function startSwappingForLiquidity(uint256 amount) private lockTheSwap { uint256 half = amount.div(2); uint256 otherHalf = amount.sub(half); uint256 initialBalance = address(this).balance; _swapTokens(half); uint256 newBalance = address(this).balance.sub(initialBalance); _createLiquidity(otherHalf, newBalance); } function _swapTokens(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = _uniswapV2Router.WETH(); _approve(address(this), address(_uniswapV2Router), tokenAmount); _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function _createLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(_uniswapV2Router), tokenAmount); _uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), block.timestamp ); } function blackListWallets(address _wallet, bool _status) public onlyOwner { antiBot._blacklistedUsers[_wallet] = _status; // true or false } // change the minimum amount of tokens to sell for ETH, swap add liquidity function setMinimunAmountOfTokenToSwapToLiquidity(uint256 _minAmount) external onlyOwner returns (bool) { numberOfTokensToSwapToLiquidity = _minAmount; return true; } function setMaxTransactionAmount(uint256 _amount) external onlyOwner { maxTransactionAmount = _amount * (10**_decimals); } function updateMaxWalletBalance(uint256 _newMaxBalance) external onlyOwner { maxWalletBalance = _newMaxBalance * (10**_decimals); } // disable Transfer antiBotStatus ANTI BOT - cannot be reenabled function disableAntiBot() external onlyOwner returns (bool) { antiBot.antiBotStatus = false; return true; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_FeeOnBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_FeeOnSell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_FeeOnTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developerFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addWhitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addWhitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blackListWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkFeesStatus","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAntiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"includeInFee","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":"_address","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfTokensToSwapToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeWhitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeWhitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"FeeOnBuy","type":"bool"},{"internalType":"bool","name":"FeeOnsell","type":"bool"},{"internalType":"bool","name":"FeeOnTransfer","type":"bool"}],"name":"setFeesStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmount","type":"uint256"}],"name":"setMinimunAmountOfTokenToSwapToLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleWhitelisting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"res","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":"res","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":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxBalance","type":"uint256"}],"name":"updateMaxWalletBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600960809081526811905354d3d0d2505360ba1b60a0526000906200002a9082620006a6565b5060408051808201909152600381526246414d60e81b6020820152600190620000549082620006a6565b506002805460ff191660129081179091556200007290600a62000887565b6200008190620f42406200089f565b6003819055600480546001600160a01b03191673885d9f7e6b1913df7743e473bb9101c01a607926179055620000ba90606490620008b9565b6005556064600354620000ce9190620008b9565b600655600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905560035462000109906103e890620008b9565b6008556009805464ffffffffff19166301010203179055600f805460ff191690556013805461ff001916610100908117909155600754601580546001600160a01b039283168402610100600160a81b031990911617908190556040805163c45a015560e01b81529051939091049091169163c45a0155916004818101926020929091908290030181865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620008dc565b6001600160a01b031663c9c6539630601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002559190620008dc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c99190620008dc565b601680546001600160a01b0319166001600160a01b0392909216919091179055348015620002f657600080fd5b50620003023362000475565b336000818152600e602090815260408083208054600160ff199182168117909255308086528386208054831684179055600480546001600160a01b039081168852858820805485168617905560078054821689528689208054861687179055600954650100000000009004821689526012909752858820805485168617905591875284872080548416851790555481168652838620805483168417905593549093168452922080549091169091179055620003cc906007546001600160a01b0316600019620004d5565b600754620003e89030906001600160a01b0316600019620004d5565b600a805460ff1916600117905560035460106000620004043390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200046791815260200190565b60405180910390a362000907565b600980546001600160a01b0383811665010000000000818102600160281b600160c81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166200053d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005a05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000534565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200062c57607f821691505b6020821081036200064d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006a157600081815260208120601f850160051c810160208610156200067c5750805b601f850160051c820191505b818110156200069d5782815560010162000688565b5050505b505050565b81516001600160401b03811115620006c257620006c262000601565b620006da81620006d3845462000617565b8462000653565b602080601f831160018114620007125760008415620006f95750858301515b600019600386901b1c1916600185901b1785556200069d565b600085815260208120601f198616915b82811015620007435788860151825594840194600190910190840162000722565b5085821015620007625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007c9578160001904821115620007ad57620007ad62000772565b80851615620007bb57918102915b93841c93908002906200078d565b509250929050565b600082620007e25750600162000881565b81620007f15750600062000881565b81600181146200080a5760028114620008155762000835565b600191505062000881565b60ff84111562000829576200082962000772565b50506001821b62000881565b5060208310610133831016604e8410600b84101617156200085a575081810a62000881565b62000866838362000788565b80600019048211156200087d576200087d62000772565b0290505b92915050565b60006200089860ff841683620007d1565b9392505050565b808202811582820484141762000881576200088162000772565b600082620008d757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008ef57600080fd5b81516001600160a01b03811681146200089857600080fd5b6124f680620009176000396000f3fe6080604052600436106102e85760003560e01c806370a0823111610190578063b09f1266116100dc578063d28d885211610095578063e3d5fdb61161006f578063e3d5fdb6146108f9578063ea2f0b3714610919578063f2fde38b14610939578063fbefa4131461095957600080fd5b8063d28d88521461087e578063dcc345f214610893578063dd62ed3e146108b357600080fd5b8063b09f1266146107dd578063b7ecbaae146107f2578063b83921a614610812578063bbde77c114610832578063c8c8ebe414610848578063caccd7f71461085e57600080fd5b80638ebe4fe5116101495780639b19251a116101235780639b19251a1461074b578063a22b557c1461077b578063a457c2d71461079d578063a9059cbb146107bd57600080fd5b80638ebe4fe5146106f657806394a7ef151461071657806395d89b411461073657600080fd5b806370a082311461062a578063715018a61461066057806386746510146106755780638c52c6c81461068f5780638d2efcb9146106af5780638da5cb5b146106d157600080fd5b80632a1cb2e81161024f578063437823ec116102085780634e363b65116101e25780634e363b65146105925780635342acb4146105b2578063583e0568146105eb5780636bc87c3a1461061057600080fd5b8063437823ec1461053357806348de478e1461055357806349bd5a5e1461057257600080fd5b80632a1cb2e814610486578063313ce567146104a757806332424aa3146104cd57806337aa30ee146104e757806339509351146104fd5780633eaaf86b1461051d57600080fd5b806318160ddd116102a157806318160ddd146103e2578063188b1bf1146103f75780631d97b7cd146104175780631e293c101461042c57806323b872dd1461044c57806329d42dbd1461046c57600080fd5b806306fdde03146102f457806307ce9de41461031f578063095ea7b3146103445780630b76dbec146103645780630e256a5e146103885780631694505e146103aa57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030961096e565b6040516103169190611efe565b60405180910390f35b34801561032b57600080fd5b50610334610a00565b6040519015158152602001610316565b34801561035057600080fd5b5061033461035f366004611f61565b610a1a565b34801561037057600080fd5b5061037a60085481565b604051908152602001610316565b34801561039457600080fd5b506103a86103a3366004611f8d565b610a31565b005b3480156103b657600080fd5b506007546103ca906001600160a01b031681565b6040516001600160a01b039091168152602001610316565b3480156103ee57600080fd5b5060035461037a565b34801561040357600080fd5b506103a8610412366004612002565b610ab0565b34801561042357600080fd5b506103a8610ad9565b34801561043857600080fd5b506103a8610447366004612002565b610af4565b34801561045857600080fd5b5061033461046736600461201b565b610b1d565b34801561047857600080fd5b506015546103349060ff1681565b34801561049257600080fd5b50600954610334906301000000900460ff1681565b3480156104b357600080fd5b5060025460ff165b60405160ff9091168152602001610316565b3480156104d957600080fd5b506002546104bb9060ff1681565b3480156104f357600080fd5b5061037a60145481565b34801561050957600080fd5b50610334610518366004611f61565b610c4a565b34801561052957600080fd5b5061037a60035481565b34801561053f57600080fd5b506103a861054e36600461205c565b610c80565b34801561055f57600080fd5b506009546104bb90610100900460ff1681565b34801561057e57600080fd5b506016546103ca906001600160a01b031681565b34801561059e57600080fd5b506103346105ad366004612002565b610cac565b3480156105be57600080fd5b506103346105cd36600461205c565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156105f757600080fd5b506015546103ca9061010090046001600160a01b031681565b34801561061c57600080fd5b506009546104bb9060ff1681565b34801561063657600080fd5b5061037a61064536600461205c565b6001600160a01b031660009081526010602052604090205490565b34801561066c57600080fd5b506103a8610cc4565b34801561068157600080fd5b50600f546103349060ff1681565b34801561069b57600080fd5b506103a86106aa366004612089565b610cd8565b3480156106bb57600080fd5b506106c4610d0b565b60405161031691906120be565b3480156106dd57600080fd5b50600954600160281b90046001600160a01b03166103ca565b34801561070257600080fd5b506009546103349062010000900460ff1681565b34801561072257600080fd5b506103a861073136600461205c565b610dda565b34801561074257600080fd5b50610309610e06565b34801561075757600080fd5b5061033461076636600461205c565b600e6020526000908152604090205460ff1681565b34801561078757600080fd5b5060095461033490640100000000900460ff1681565b3480156107a957600080fd5b506103346107b8366004611f61565b610e15565b3480156107c957600080fd5b506103346107d8366004611f61565b610e64565b3480156107e957600080fd5b50610309610f29565b3480156107fe57600080fd5b506103a861080d36600461205c565b610fb7565b34801561081e57600080fd5b506103a861082d366004611f8d565b610fe0565b34801561083e57600080fd5b5061037a60065481565b34801561085457600080fd5b5061037a60055481565b34801561086a57600080fd5b506004546103ca906001600160a01b031681565b34801561088a57600080fd5b5061030961105a565b34801561089f57600080fd5b506103a86108ae36600461205c565b611067565b3480156108bf57600080fd5b5061037a6108ce366004612104565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561090557600080fd5b506103a861091436600461213d565b611091565b34801561092557600080fd5b506103a861093436600461205c565b6110e3565b34801561094557600080fd5b506103a861095436600461205c565b61110c565b34801561096557600080fd5b506103a8611185565b60606000805461097d90612180565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990612180565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a0a6111a1565b50600a805460ff19169055600190565b6000610a27338484611203565b5060015b92915050565b610a396111a1565b60005b81811015610aab576001600e6000858585818110610a5c57610a5c6121ba565b9050602002016020810190610a71919061205c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610aa3816121e6565b915050610a3c565b505050565b610ab86111a1565b600254610ac99060ff16600a6122e3565b610ad390826122f2565b60065550565b610ae16111a1565b6015805460ff1916600117905543601455565b610afc6111a1565b600254610b0d9060ff16600a6122e3565b610b1790826122f2565b60055550565b600f5460009060ff161515600103610c29576001600160a01b0384166000908152600e602052604090205460ff1615156001148015610b7957506001600160a01b0383166000908152600e602052604090205460ff1615156001145b610bc45760405162461bcd60e51b8152602060048201526017602482015276151c985b9cd858dd1a5bdb881b9bdd08185b1b1bddd959604a1b60448201526064015b60405180910390fd5b610bcf848484611327565b610c218433610c1c85604051806060016040528060288152602001612454602891396001600160a01b038a16600090815260116020908152604080832033845290915290205491906118d0565b611203565b506001610c43565b600f5460ff161515600003610c4357610bcf848484611327565b9392505050565b3360008181526011602090815260408083206001600160a01b03871684529091528120549091610a27918590610c1c90866118fc565b610c886111a1565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610cb66111a1565b50600881905560015b919050565b610ccc6111a1565b610cd66000611908565b565b610ce06111a1565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060610d156111a1565b6040805160038082526080820190925260009160208201606080368337019050509050600960029054906101000a900460ff1681600081518110610d5b57610d5b6121ba565b602002602001019015159081151581525050600960039054906101000a900460ff1681600181518110610d9057610d906121ba565b602002602001019015159081151581525050600960049054906101000a900460ff1681600281518110610dc557610dc56121ba565b91151560209283029190910190910152905090565b610de26111a1565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b60606001805461097d90612180565b6000610a273384610c1c8560405180606001604052806025815260200161249c602591393360009081526011602090815260408083206001600160a01b038d16845290915290205491906118d0565b600f5460009060ff161515600103610f1157336000908152600e602052604090205460ff1615156001148015610eb757506001600160a01b0383166000908152600e602052604090205460ff1615156001145b610efd5760405162461bcd60e51b8152602060048201526017602482015276151c985b9cd858dd1a5bdb881b9bdd08185b1b1bddd959604a1b6044820152606401610bbb565b610f09335b8484611327565b506001610a2b565b600f5460ff161515600003610a2b57610f0933610f02565b60018054610f3690612180565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6290612180565b8015610faf5780601f10610f8457610100808354040283529160200191610faf565b820191906000526020600020905b815481529060010190602001808311610f9257829003601f168201915b505050505081565b610fbf6111a1565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b610fe86111a1565b60005b81811015610aab576000600e600085858581811061100b5761100b6121ba565b9050602002016020810190611020919061205c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611052816121e6565b915050610feb565b60008054610f3690612180565b61106f6111a1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6110996111a1565b600980549115156401000000000264ff000000001993151563010000000263ff0000001995151562010000029590951663ffff000019909316929092179390931791909116179055565b6110eb6111a1565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6111146111a1565b6001600160a01b0381166111795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbb565b61118281611908565b50565b61118d6111a1565b600f805460ff19811660ff90911615179055565b6009546001600160a01b03600160281b909104163314610cd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbb565b6001600160a01b0383166112655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbb565b6001600160a01b0382166112c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bbb565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60155460ff166113795760405162461bcd60e51b815260206004820152601960248201527f5761697420666f722074726164696e6720746f207374617274000000000000006044820152606401610bbb565b6001600160a01b0383166113dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bbb565b6001600160a01b03821661143f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bbb565b600081116114a15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bbb565b6001600160a01b0382166000908152600d602052604090205460ff161580156114e357506001600160a01b0383166000908152600d602052604090205460ff16155b6115255760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c99481b9bdd08185b1b1bddd959606a1b6044820152606401610bbb565b6005548111801561154f57506001600160a01b03831660009081526012602052604090205460ff16155b801561157457506001600160a01b03821660009081526012602052604090205460ff16155b156115cf5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220697320626967676572207468616e206d617820747820616044820152641b5bdd5b9d60da1b6064820152608401610bbb565b60006006541180156115fa57506001600160a01b03831660009081526012602052604090205460ff16155b801561161f57506001600160a01b03821660009081526012602052604090205460ff16155b801561163957506016546001600160a01b03838116911614155b156116b4576001600160a01b0382166000908152601060205260409020546006546116648383612309565b11156116b25760405162461bcd60e51b815260206004820152601860248201527f596f75722062616c616e636520697320746f6f206869676800000000000000006044820152606401610bbb565b505b600a5460ff1615156001036117a3576009546001600160a01b03838116600160281b90920416148015906116fb57506015546001600160a01b038381166101009092041614155b801561171557506016546001600160a01b03838116911614155b156117a357326000908152600c602052604090205443116117905760405162461bcd60e51b815260206004820152602f60248201527f596f752063616e6e6f7420646f206d6f7265207468616e2031207472616e736160448201526e6374696f6e2070657220626c6f636b60881b6064820152608401610bbb565b326000908152600c602052604090204390555b6014546117b1906002612309565b43111580156117d357506015546001600160a01b038381166101009092041614155b80156117ed57506016546001600160a01b03838116911614155b15611816576001600160a01b0382166000908152600d60205260409020805460ff191660011790555b6009546001600160a01b03841660009081526012602052604090205460ff640100000000909204821691168061186457506001600160a01b03831660009081526012602052604090205460ff165b15611871575060006118be565b6016546001600160a01b0390811690851603611899575060095462010000900460ff166118be565b6016546001600160a01b03908116908416036118be57506009546301000000900460ff165b6118ca84848484611968565b50505050565b600081848411156118f45760405162461bcd60e51b8152600401610bbb9190611efe565b505050900390565b6000610c438284612309565b600980546001600160a01b03838116600160281b81810265010000000000600160c81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80611986576119768461199a565b6119818484846119b8565b6118ca565b61198f8461199a565b6118ca848484611a4d565b306000908152601060205260409020546119b48183611bc8565b5050565b6001600160a01b038316600090815260106020526040902054818110156119f15760405162461bcd60e51b8152600401610bbb9061231c565b6001600160a01b03808516600081815260106020526040808220868603905592861680825290839020805486019055915160008051602061247c83398151915290611a3f9086815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526010602052604090205481811015611a865760405162461bcd60e51b8152600401610bbb9061231c565b600954600090606490611aa190610100900460ff16856122f2565b611aab9190612362565b600954909150600090606490611ac49060ff16866122f2565b611ace9190612362565b9050600081611add8487612384565b611ae79190612384565b6001600160a01b03808916600081815260106020526040808220858a0390558a841680835281832080548701905530835281832080548901905560045490941682529081902080548801905551929350909160008051602061247c83398151915290611b569085815260200190565b60405180910390a36004546040518481526001600160a01b039182169189169060008051602061247c8339815191529060200160405180910390a360405182815230906001600160a01b0389169060008051602061247c8339815191529060200160405180910390a350505050505050565b6005548210611bd75760055491505b60085482108015908190611bf25750601354610100900460ff165b8015611c01575060135460ff16155b8015611c1b57506016546001600160a01b03838116911614155b15610aab57610aab836013805460ff191660011790556000611c3e826002611c81565b90506000611c4c8383611c8d565b905047611c5883611c99565b6000611c644783611c8d565b9050611c708382611e16565b50506013805460ff19169055505050565b6000610c438284612362565b6000610c438284612384565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611cce57611cce6121ba565b60200260200101906001600160a01b031690816001600160a01b031681525050601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d659190612397565b81600181518110611d7857611d786121ba565b6001600160a01b039283166020918202929092010152601554611da391309161010090041684611203565b60155460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611de09085906000908690309042906004016123b4565b600060405180830381600087803b158015611dfa57600080fd5b505af1158015611e0e573d6000803e3d6000fd5b505050505050565b601554611e3390309061010090046001600160a01b031684611203565b6015546001600160a01b036101009091041663f305d719823085600080611e6a6009546001600160a01b03600160281b9091041690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611ed2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef79190612425565b5050505050565b600060208083528351808285015260005b81811015611f2b57858101830151858201604001528201611f0f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461118257600080fd5b60008060408385031215611f7457600080fd5b8235611f7f81611f4c565b946020939093013593505050565b60008060208385031215611fa057600080fd5b823567ffffffffffffffff80821115611fb857600080fd5b818501915085601f830112611fcc57600080fd5b813581811115611fdb57600080fd5b8660208260051b8501011115611ff057600080fd5b60209290920196919550909350505050565b60006020828403121561201457600080fd5b5035919050565b60008060006060848603121561203057600080fd5b833561203b81611f4c565b9250602084013561204b81611f4c565b929592945050506040919091013590565b60006020828403121561206e57600080fd5b8135610c4381611f4c565b80358015158114610cbf57600080fd5b6000806040838503121561209c57600080fd5b82356120a781611f4c565b91506120b560208401612079565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156120f85783511515835292840192918401916001016120da565b50909695505050505050565b6000806040838503121561211757600080fd5b823561212281611f4c565b9150602083013561213281611f4c565b809150509250929050565b60008060006060848603121561215257600080fd5b61215b84612079565b925061216960208501612079565b915061217760408501612079565b90509250925092565b600181811c9082168061219457607f821691505b6020821081036121b457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016121f8576121f86121d0565b5060010190565b600181815b8085111561223a578160001904821115612220576122206121d0565b8085161561222d57918102915b93841c9390800290612204565b509250929050565b60008261225157506001610a2b565b8161225e57506000610a2b565b8160018114612274576002811461227e5761229a565b6001915050610a2b565b60ff84111561228f5761228f6121d0565b50506001821b610a2b565b5060208310610133831016604e8410600b84101617156122bd575081810a610a2b565b6122c783836121ff565b80600019048211156122db576122db6121d0565b029392505050565b6000610c4360ff841683612242565b8082028115828204841417610a2b57610a2b6121d0565b80820180821115610a2b57610a2b6121d0565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60008261237f57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610a2b57610a2b6121d0565b6000602082840312156123a957600080fd5b8151610c4381611f4c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124045784516001600160a01b0316835293830193918301916001016123df565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561243a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220670d829701d7981ff816d92dbe1100bbe0b9215b5b3479ae6a53fa47c4f7744a64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102e85760003560e01c806370a0823111610190578063b09f1266116100dc578063d28d885211610095578063e3d5fdb61161006f578063e3d5fdb6146108f9578063ea2f0b3714610919578063f2fde38b14610939578063fbefa4131461095957600080fd5b8063d28d88521461087e578063dcc345f214610893578063dd62ed3e146108b357600080fd5b8063b09f1266146107dd578063b7ecbaae146107f2578063b83921a614610812578063bbde77c114610832578063c8c8ebe414610848578063caccd7f71461085e57600080fd5b80638ebe4fe5116101495780639b19251a116101235780639b19251a1461074b578063a22b557c1461077b578063a457c2d71461079d578063a9059cbb146107bd57600080fd5b80638ebe4fe5146106f657806394a7ef151461071657806395d89b411461073657600080fd5b806370a082311461062a578063715018a61461066057806386746510146106755780638c52c6c81461068f5780638d2efcb9146106af5780638da5cb5b146106d157600080fd5b80632a1cb2e81161024f578063437823ec116102085780634e363b65116101e25780634e363b65146105925780635342acb4146105b2578063583e0568146105eb5780636bc87c3a1461061057600080fd5b8063437823ec1461053357806348de478e1461055357806349bd5a5e1461057257600080fd5b80632a1cb2e814610486578063313ce567146104a757806332424aa3146104cd57806337aa30ee146104e757806339509351146104fd5780633eaaf86b1461051d57600080fd5b806318160ddd116102a157806318160ddd146103e2578063188b1bf1146103f75780631d97b7cd146104175780631e293c101461042c57806323b872dd1461044c57806329d42dbd1461046c57600080fd5b806306fdde03146102f457806307ce9de41461031f578063095ea7b3146103445780630b76dbec146103645780630e256a5e146103885780631694505e146103aa57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030961096e565b6040516103169190611efe565b60405180910390f35b34801561032b57600080fd5b50610334610a00565b6040519015158152602001610316565b34801561035057600080fd5b5061033461035f366004611f61565b610a1a565b34801561037057600080fd5b5061037a60085481565b604051908152602001610316565b34801561039457600080fd5b506103a86103a3366004611f8d565b610a31565b005b3480156103b657600080fd5b506007546103ca906001600160a01b031681565b6040516001600160a01b039091168152602001610316565b3480156103ee57600080fd5b5060035461037a565b34801561040357600080fd5b506103a8610412366004612002565b610ab0565b34801561042357600080fd5b506103a8610ad9565b34801561043857600080fd5b506103a8610447366004612002565b610af4565b34801561045857600080fd5b5061033461046736600461201b565b610b1d565b34801561047857600080fd5b506015546103349060ff1681565b34801561049257600080fd5b50600954610334906301000000900460ff1681565b3480156104b357600080fd5b5060025460ff165b60405160ff9091168152602001610316565b3480156104d957600080fd5b506002546104bb9060ff1681565b3480156104f357600080fd5b5061037a60145481565b34801561050957600080fd5b50610334610518366004611f61565b610c4a565b34801561052957600080fd5b5061037a60035481565b34801561053f57600080fd5b506103a861054e36600461205c565b610c80565b34801561055f57600080fd5b506009546104bb90610100900460ff1681565b34801561057e57600080fd5b506016546103ca906001600160a01b031681565b34801561059e57600080fd5b506103346105ad366004612002565b610cac565b3480156105be57600080fd5b506103346105cd36600461205c565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156105f757600080fd5b506015546103ca9061010090046001600160a01b031681565b34801561061c57600080fd5b506009546104bb9060ff1681565b34801561063657600080fd5b5061037a61064536600461205c565b6001600160a01b031660009081526010602052604090205490565b34801561066c57600080fd5b506103a8610cc4565b34801561068157600080fd5b50600f546103349060ff1681565b34801561069b57600080fd5b506103a86106aa366004612089565b610cd8565b3480156106bb57600080fd5b506106c4610d0b565b60405161031691906120be565b3480156106dd57600080fd5b50600954600160281b90046001600160a01b03166103ca565b34801561070257600080fd5b506009546103349062010000900460ff1681565b34801561072257600080fd5b506103a861073136600461205c565b610dda565b34801561074257600080fd5b50610309610e06565b34801561075757600080fd5b5061033461076636600461205c565b600e6020526000908152604090205460ff1681565b34801561078757600080fd5b5060095461033490640100000000900460ff1681565b3480156107a957600080fd5b506103346107b8366004611f61565b610e15565b3480156107c957600080fd5b506103346107d8366004611f61565b610e64565b3480156107e957600080fd5b50610309610f29565b3480156107fe57600080fd5b506103a861080d36600461205c565b610fb7565b34801561081e57600080fd5b506103a861082d366004611f8d565b610fe0565b34801561083e57600080fd5b5061037a60065481565b34801561085457600080fd5b5061037a60055481565b34801561086a57600080fd5b506004546103ca906001600160a01b031681565b34801561088a57600080fd5b5061030961105a565b34801561089f57600080fd5b506103a86108ae36600461205c565b611067565b3480156108bf57600080fd5b5061037a6108ce366004612104565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561090557600080fd5b506103a861091436600461213d565b611091565b34801561092557600080fd5b506103a861093436600461205c565b6110e3565b34801561094557600080fd5b506103a861095436600461205c565b61110c565b34801561096557600080fd5b506103a8611185565b60606000805461097d90612180565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990612180565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a0a6111a1565b50600a805460ff19169055600190565b6000610a27338484611203565b5060015b92915050565b610a396111a1565b60005b81811015610aab576001600e6000858585818110610a5c57610a5c6121ba565b9050602002016020810190610a71919061205c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610aa3816121e6565b915050610a3c565b505050565b610ab86111a1565b600254610ac99060ff16600a6122e3565b610ad390826122f2565b60065550565b610ae16111a1565b6015805460ff1916600117905543601455565b610afc6111a1565b600254610b0d9060ff16600a6122e3565b610b1790826122f2565b60055550565b600f5460009060ff161515600103610c29576001600160a01b0384166000908152600e602052604090205460ff1615156001148015610b7957506001600160a01b0383166000908152600e602052604090205460ff1615156001145b610bc45760405162461bcd60e51b8152602060048201526017602482015276151c985b9cd858dd1a5bdb881b9bdd08185b1b1bddd959604a1b60448201526064015b60405180910390fd5b610bcf848484611327565b610c218433610c1c85604051806060016040528060288152602001612454602891396001600160a01b038a16600090815260116020908152604080832033845290915290205491906118d0565b611203565b506001610c43565b600f5460ff161515600003610c4357610bcf848484611327565b9392505050565b3360008181526011602090815260408083206001600160a01b03871684529091528120549091610a27918590610c1c90866118fc565b610c886111a1565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610cb66111a1565b50600881905560015b919050565b610ccc6111a1565b610cd66000611908565b565b610ce06111a1565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060610d156111a1565b6040805160038082526080820190925260009160208201606080368337019050509050600960029054906101000a900460ff1681600081518110610d5b57610d5b6121ba565b602002602001019015159081151581525050600960039054906101000a900460ff1681600181518110610d9057610d906121ba565b602002602001019015159081151581525050600960049054906101000a900460ff1681600281518110610dc557610dc56121ba565b91151560209283029190910190910152905090565b610de26111a1565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b60606001805461097d90612180565b6000610a273384610c1c8560405180606001604052806025815260200161249c602591393360009081526011602090815260408083206001600160a01b038d16845290915290205491906118d0565b600f5460009060ff161515600103610f1157336000908152600e602052604090205460ff1615156001148015610eb757506001600160a01b0383166000908152600e602052604090205460ff1615156001145b610efd5760405162461bcd60e51b8152602060048201526017602482015276151c985b9cd858dd1a5bdb881b9bdd08185b1b1bddd959604a1b6044820152606401610bbb565b610f09335b8484611327565b506001610a2b565b600f5460ff161515600003610a2b57610f0933610f02565b60018054610f3690612180565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6290612180565b8015610faf5780601f10610f8457610100808354040283529160200191610faf565b820191906000526020600020905b815481529060010190602001808311610f9257829003601f168201915b505050505081565b610fbf6111a1565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b610fe86111a1565b60005b81811015610aab576000600e600085858581811061100b5761100b6121ba565b9050602002016020810190611020919061205c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611052816121e6565b915050610feb565b60008054610f3690612180565b61106f6111a1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6110996111a1565b600980549115156401000000000264ff000000001993151563010000000263ff0000001995151562010000029590951663ffff000019909316929092179390931791909116179055565b6110eb6111a1565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6111146111a1565b6001600160a01b0381166111795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbb565b61118281611908565b50565b61118d6111a1565b600f805460ff19811660ff90911615179055565b6009546001600160a01b03600160281b909104163314610cd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbb565b6001600160a01b0383166112655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbb565b6001600160a01b0382166112c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bbb565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60155460ff166113795760405162461bcd60e51b815260206004820152601960248201527f5761697420666f722074726164696e6720746f207374617274000000000000006044820152606401610bbb565b6001600160a01b0383166113dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bbb565b6001600160a01b03821661143f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bbb565b600081116114a15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bbb565b6001600160a01b0382166000908152600d602052604090205460ff161580156114e357506001600160a01b0383166000908152600d602052604090205460ff16155b6115255760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c99481b9bdd08185b1b1bddd959606a1b6044820152606401610bbb565b6005548111801561154f57506001600160a01b03831660009081526012602052604090205460ff16155b801561157457506001600160a01b03821660009081526012602052604090205460ff16155b156115cf5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220697320626967676572207468616e206d617820747820616044820152641b5bdd5b9d60da1b6064820152608401610bbb565b60006006541180156115fa57506001600160a01b03831660009081526012602052604090205460ff16155b801561161f57506001600160a01b03821660009081526012602052604090205460ff16155b801561163957506016546001600160a01b03838116911614155b156116b4576001600160a01b0382166000908152601060205260409020546006546116648383612309565b11156116b25760405162461bcd60e51b815260206004820152601860248201527f596f75722062616c616e636520697320746f6f206869676800000000000000006044820152606401610bbb565b505b600a5460ff1615156001036117a3576009546001600160a01b03838116600160281b90920416148015906116fb57506015546001600160a01b038381166101009092041614155b801561171557506016546001600160a01b03838116911614155b156117a357326000908152600c602052604090205443116117905760405162461bcd60e51b815260206004820152602f60248201527f596f752063616e6e6f7420646f206d6f7265207468616e2031207472616e736160448201526e6374696f6e2070657220626c6f636b60881b6064820152608401610bbb565b326000908152600c602052604090204390555b6014546117b1906002612309565b43111580156117d357506015546001600160a01b038381166101009092041614155b80156117ed57506016546001600160a01b03838116911614155b15611816576001600160a01b0382166000908152600d60205260409020805460ff191660011790555b6009546001600160a01b03841660009081526012602052604090205460ff640100000000909204821691168061186457506001600160a01b03831660009081526012602052604090205460ff165b15611871575060006118be565b6016546001600160a01b0390811690851603611899575060095462010000900460ff166118be565b6016546001600160a01b03908116908416036118be57506009546301000000900460ff165b6118ca84848484611968565b50505050565b600081848411156118f45760405162461bcd60e51b8152600401610bbb9190611efe565b505050900390565b6000610c438284612309565b600980546001600160a01b03838116600160281b81810265010000000000600160c81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80611986576119768461199a565b6119818484846119b8565b6118ca565b61198f8461199a565b6118ca848484611a4d565b306000908152601060205260409020546119b48183611bc8565b5050565b6001600160a01b038316600090815260106020526040902054818110156119f15760405162461bcd60e51b8152600401610bbb9061231c565b6001600160a01b03808516600081815260106020526040808220868603905592861680825290839020805486019055915160008051602061247c83398151915290611a3f9086815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526010602052604090205481811015611a865760405162461bcd60e51b8152600401610bbb9061231c565b600954600090606490611aa190610100900460ff16856122f2565b611aab9190612362565b600954909150600090606490611ac49060ff16866122f2565b611ace9190612362565b9050600081611add8487612384565b611ae79190612384565b6001600160a01b03808916600081815260106020526040808220858a0390558a841680835281832080548701905530835281832080548901905560045490941682529081902080548801905551929350909160008051602061247c83398151915290611b569085815260200190565b60405180910390a36004546040518481526001600160a01b039182169189169060008051602061247c8339815191529060200160405180910390a360405182815230906001600160a01b0389169060008051602061247c8339815191529060200160405180910390a350505050505050565b6005548210611bd75760055491505b60085482108015908190611bf25750601354610100900460ff165b8015611c01575060135460ff16155b8015611c1b57506016546001600160a01b03838116911614155b15610aab57610aab836013805460ff191660011790556000611c3e826002611c81565b90506000611c4c8383611c8d565b905047611c5883611c99565b6000611c644783611c8d565b9050611c708382611e16565b50506013805460ff19169055505050565b6000610c438284612362565b6000610c438284612384565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611cce57611cce6121ba565b60200260200101906001600160a01b031690816001600160a01b031681525050601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d659190612397565b81600181518110611d7857611d786121ba565b6001600160a01b039283166020918202929092010152601554611da391309161010090041684611203565b60155460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611de09085906000908690309042906004016123b4565b600060405180830381600087803b158015611dfa57600080fd5b505af1158015611e0e573d6000803e3d6000fd5b505050505050565b601554611e3390309061010090046001600160a01b031684611203565b6015546001600160a01b036101009091041663f305d719823085600080611e6a6009546001600160a01b03600160281b9091041690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611ed2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef79190612425565b5050505050565b600060208083528351808285015260005b81811015611f2b57858101830151858201604001528201611f0f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461118257600080fd5b60008060408385031215611f7457600080fd5b8235611f7f81611f4c565b946020939093013593505050565b60008060208385031215611fa057600080fd5b823567ffffffffffffffff80821115611fb857600080fd5b818501915085601f830112611fcc57600080fd5b813581811115611fdb57600080fd5b8660208260051b8501011115611ff057600080fd5b60209290920196919550909350505050565b60006020828403121561201457600080fd5b5035919050565b60008060006060848603121561203057600080fd5b833561203b81611f4c565b9250602084013561204b81611f4c565b929592945050506040919091013590565b60006020828403121561206e57600080fd5b8135610c4381611f4c565b80358015158114610cbf57600080fd5b6000806040838503121561209c57600080fd5b82356120a781611f4c565b91506120b560208401612079565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156120f85783511515835292840192918401916001016120da565b50909695505050505050565b6000806040838503121561211757600080fd5b823561212281611f4c565b9150602083013561213281611f4c565b809150509250929050565b60008060006060848603121561215257600080fd5b61215b84612079565b925061216960208501612079565b915061217760408501612079565b90509250925092565b600181811c9082168061219457607f821691505b6020821081036121b457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016121f8576121f86121d0565b5060010190565b600181815b8085111561223a578160001904821115612220576122206121d0565b8085161561222d57918102915b93841c9390800290612204565b509250929050565b60008261225157506001610a2b565b8161225e57506000610a2b565b8160018114612274576002811461227e5761229a565b6001915050610a2b565b60ff84111561228f5761228f6121d0565b50506001821b610a2b565b5060208310610133831016604e8410600b84101617156122bd575081810a610a2b565b6122c783836121ff565b80600019048211156122db576122db6121d0565b029392505050565b6000610c4360ff841683612242565b8082028115828204841417610a2b57610a2b6121d0565b80820180821115610a2b57610a2b6121d0565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60008261237f57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610a2b57610a2b6121d0565b6000602082840312156123a957600080fd5b8151610c4381611f4c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124045784516001600160a01b0316835293830193918301916001016123df565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561243a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220670d829701d7981ff816d92dbe1100bbe0b9215b5b3479ae6a53fa47c4f7744a64736f6c63430008110033
Deployed Bytecode Sourcemap
34934:14916:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36640:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49680:130;;;;;;;;;;;;;:::i;:::-;;;732:14:1;;725:22;707:41;;695:2;680:18;49680:130:0;567:187:1;37961:193:0;;;;;;;;;;-1:-1:-1;37961:193:0;;;;;:::i;:::-;;:::i;34632:68::-;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;34632:68:0;1215:177:1;40347:225:0;;;;;;;;;;-1:-1:-1;40347:225:0;;;;;:::i;:::-;;:::i;:::-;;34550:75;;;;;;;;;;-1:-1:-1;34550:75:0;;;;-1:-1:-1;;;;;34550:75:0;;;;;;-1:-1:-1;;;;;2181:32:1;;;2163:51;;2151:2;2136:18;34550:75:0;2017:203:1;36917:100:0;;;;;;;;;;-1:-1:-1;36997:12:0;;36917:100;;49457:145;;;;;;;;;;-1:-1:-1;49457:145:0;;;;;:::i;:::-;;:::i;38208:121::-;;;;;;;;;;;;;:::i;49313:136::-;;;;;;;;;;-1:-1:-1;49313:136:0;;;;;:::i;:::-;;:::i;38337:1116::-;;;;;;;;;;-1:-1:-1;38337:1116:0;;;;;:::i;:::-;;:::i;35600:24::-;;;;;;;;;;-1:-1:-1;35600:24:0;;;;;;;;34856:29;;;;;;;;;;-1:-1:-1;34856:29:0;;;;;;;;;;;36826:83;;;;;;;;;;-1:-1:-1;36892:9:0;;;;36826:83;;;3043:4:1;3031:17;;;3013:36;;3001:2;2986:18;36826:83:0;2871:184:1;34143:27:0;;;;;;;;;;-1:-1:-1;34143:27:0;;;;;;;;35565:28;;;;;;;;;;;;;;;;39461:300;;;;;;;;;;-1:-1:-1;39461:300:0;;;;;:::i;:::-;;:::i;34177:53::-;;;;;;;;;;;;;;;;46151:113;;;;;;;;;;-1:-1:-1;46151:113:0;;;;;:::i;:::-;;:::i;34778:30::-;;;;;;;;;;-1:-1:-1;34778:30:0;;;;;;;;;;;35729:173;;;;;;;;;;-1:-1:-1;35729:173:0;;;;-1:-1:-1;;;;;35729:173:0;;;49084:221;;;;;;;;;;-1:-1:-1;49084:221:0;;;;;:::i;:::-;;:::i;46017:126::-;;;;;;;;;;-1:-1:-1;46017:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;46107:28:0;46083:4;46107:28;;;:18;:28;;;;;;;;;46017:126;35633:89;;;;;;;;;;-1:-1:-1;35633:89:0;;;;;;;-1:-1:-1;;;;;35633:89:0;;;34735:30;;;;;;;;;;-1:-1:-1;34735:30:0;;;;;;;;37025:121;;;;;;;;;;-1:-1:-1;37025:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;37118:20:0;37091:7;37118:20;;;:11;:20;;;;;;;37025:121;22758:103;;;;;;;;;;;;;:::i;35119:41::-;;;;;;;;;;-1:-1:-1;35119:41:0;;;;;;;;48842:154;;;;;;;;;;-1:-1:-1;48842:154:0;;;;;:::i;:::-;;:::i;46752:254::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22110:87::-;;;;;;;;;;-1:-1:-1;22183:6:0;;-1:-1:-1;;;22183:6:0;;-1:-1:-1;;;;;22183:6:0;22110:87;;34821:28;;;;;;;;;;-1:-1:-1;34821:28:0;;;;;;;;;;;40626:103;;;;;;;;;;-1:-1:-1;40626:103:0;;;;;:::i;:::-;;:::i;36731:87::-;;;;;;;;;;;;;:::i;35071:41::-;;;;;;;;;;-1:-1:-1;35071:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34892:34;;;;;;;;;;-1:-1:-1;34892:34:0;;;;;;;;;;;39769:400;;;;;;;;;;-1:-1:-1;39769:400:0;;;;;:::i;:::-;;:::i;37154:607::-;;;;;;;;;;-1:-1:-1;37154:607:0;;;;;:::i;:::-;;:::i;34107:29::-;;;;;;;;;;;;;:::i;41078:107::-;;;;;;;;;;-1:-1:-1;41078:107:0;;;;;:::i;:::-;;:::i;40790:229::-;;;;;;;;;;-1:-1:-1;40790:229:0;;;;;:::i;:::-;;:::i;34465:52::-;;;;;;;;;;;;;;;;34376:56;;;;;;;;;;;;;;;;34263:85;;;;;;;;;;-1:-1:-1;34263:85:0;;;;-1:-1:-1;;;;;34263:85:0;;;34067:33;;;;;;;;;;;;;:::i;46392:104::-;;;;;;;;;;-1:-1:-1;46392:104:0;;;;;:::i;:::-;;:::i;37769:184::-;;;;;;;;;;-1:-1:-1;37769:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;37918:18:0;;;37886:7;37918:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;37769:184;46504:240;;;;;;;;;;-1:-1:-1;46504:240:0;;;;;:::i;:::-;;:::i;46272:112::-;;;;;;;;;;-1:-1:-1;46272:112:0;;;;;:::i;:::-;;:::i;23016:238::-;;;;;;;;;;-1:-1:-1;23016:238:0;;;;;:::i;:::-;;:::i;40177:114::-;;;;;;;;;;;;;:::i;36640:83::-;36677:13;36710:5;36703:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36640:83;:::o;49680:130::-;49734:4;21996:13;:11;:13::i;:::-;-1:-1:-1;49751:7:0::1;:29:::0;;-1:-1:-1;;49751:29:0::1;::::0;;;49680:130;:::o;37961:193::-;38063:4;38085:39;20741:10;38108:7;38117:6;38085:8;:39::i;:::-;-1:-1:-1;38142:4:0;37961:193;;;;;:::o;40347:225::-;21996:13;:11;:13::i;:::-;40466:9:::1;40461:104;40481:20:::0;;::::1;40461:104;;;40549:4;40523:9;:23;40533:9;;40543:1;40533:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40523:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40523:23:0;:30;;-1:-1:-1;;40523:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40503:3;::::1;::::0;::::1;:::i;:::-;;;;40461:104;;;;40347:225:::0;;:::o;49457:145::-;21996:13;:11;:13::i;:::-;49584:9:::1;::::0;49580:13:::1;::::0;49584:9:::1;;49580:2;:13;:::i;:::-;49562:32;::::0;:14;:32:::1;:::i;:::-;49543:16;:51:::0;-1:-1:-1;49457:145:0:o;38208:121::-;21996:13;:11;:13::i;:::-;38263:12:::1;:19:::0;;-1:-1:-1;;38263:19:0::1;38278:4;38263:19;::::0;;38309:12:::1;38293:13;:28:::0;38208:121::o;49313:136::-;21996:13;:11;:13::i;:::-;49431:9:::1;::::0;49427:13:::1;::::0;49431:9:::1;;49427:2;:13;:::i;:::-;49416:25;::::0;:7;:25:::1;:::i;:::-;49393:20;:48:::0;-1:-1:-1;49313:136:0:o;38337:1116::-;38494:21;;38469:8;;38494:21;;:29;;:21;:29;38490:552;;-1:-1:-1;;;;;38567:17:0;;;;;;:9;:17;;;;;;;;:25;;:17;:25;:57;;;;-1:-1:-1;;;;;;38596:20:0;;;;;;:9;:20;;;;;;;;:28;;:20;:28;38567:57;38540:144;;;;-1:-1:-1;;;38540:144:0;;7939:2:1;38540:144:0;;;7921:21:1;7978:2;7958:18;;;7951:30;-1:-1:-1;;;7997:18:1;;;7990:53;8060:18;;38540:144:0;;;;;;;;;38699:36;38709:6;38717:9;38728:6;38699:9;:36::i;:::-;38750:248;38777:6;20741:10;38833:150;38893:6;38833:150;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38833:19:0;;;;;;:11;:19;;;;;;;;20741:10;38833:33;;;;;;;;;;:37;:150::i;:::-;38750:8;:248::i;:::-;-1:-1:-1;39026:4:0;39013:17;;38490:552;39056:21;;;;:30;;:21;:30;39052:394;;39103:36;39113:6;39121:9;39132:6;39103:9;:36::i;39052:394::-;38337:1116;;;;;:::o;39461:300::-;20741:10;39576:4;39670:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;39670:34:0;;;;;;;;;;39576:4;;39598:133;;39648:7;;39670:50;;39709:10;39670:38;:50::i;46151:113::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;46221:28:0::1;;::::0;;;:18:::1;:28;::::0;;;;:35;;-1:-1:-1;;46221:35:0::1;46252:4;46221:35;::::0;;46151:113::o;49084:221::-;49209:4;21996:13;:11;:13::i;:::-;-1:-1:-1;49231:31:0::1;:44:::0;;;49293:4:::1;22020:1;49084:221:::0;;;:::o;22758:103::-;21996:13;:11;:13::i;:::-;22823:30:::1;22850:1;22823:18;:30::i;:::-;22758:103::o:0;48842:154::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;48927:34:0;;;::::1;;::::0;;;:25;:34:::1;::::0;;;;:44;;-1:-1:-1;;48927:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48842:154::o;46752:254::-;46810:13;21996;:11;:13::i;:::-;46859::::1;::::0;;46870:1:::1;46859:13:::0;;;;;::::1;::::0;;;46836:20:::1;::::0;46859:13:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;46859:13:0::1;46836:36;;46895:9;;;;;;;;;;;46883:6;46890:1;46883:9;;;;;;;;:::i;:::-;;;;;;:21;;;;;;;;;::::0;::::1;46927:10;;;;;;;;;;;46915:6;46922:1;46915:9;;;;;;;;:::i;:::-;;;;;;:22;;;;;;;;;::::0;::::1;46960:14;;;;;;;;;;;46948:6;46955:1;46948:9;;;;;;;;:::i;:::-;:26:::0;::::1;;:9;::::0;;::::1;::::0;;;;;;;:26;46992:6;-1:-1:-1;46752:254:0;:::o;40626:103::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;40699:15:0::1;;::::0;;;:9:::1;:15;::::0;;;;:22;;-1:-1:-1;;40699:22:0::1;40717:4;40699:22;::::0;;40626:103::o;36731:87::-;36770:13;36803:7;36796:14;;;;;:::i;39769:400::-;39889:4;39911:228;20741:10;39961:7;39983:145;40040:15;39983:145;;;;;;;;;;;;;;;;;20741:10;39983:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;39983:34:0;;;;;;;;;;;;:38;:145::i;37154:607::-;37289:21;;37259:8;;37289:21;;:29;;:21;:29;37285:322;;20741:10;37362:23;;;;:9;:23;;;;;;;;:31;;:23;:31;:84;;;;-1:-1:-1;;;;;;37418:20:0;;;;;;:9;:20;;;;;;;;:28;;:20;:28;37362:84;37335:171;;;;-1:-1:-1;;;37335:171:0;;7939:2:1;37335:171:0;;;7921:21:1;7978:2;7958:18;;;7951:30;-1:-1:-1;;;7997:18:1;;;7990:53;8060:18;;37335:171:0;7737:347:1;37335:171:0;37521:42;20741:10;37531:12;37545:9;37556:6;37521:9;:42::i;:::-;-1:-1:-1;37591:4:0;37578:17;;37285:322;37621:21;;;;:30;;:21;:30;37617:137;;37668:42;20741:10;37678:12;20661:98;34107:29;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41078:107::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;41154:15:0::1;41172:5;41154:15:::0;;;:9:::1;:15;::::0;;;;:23;;-1:-1:-1;;41154:23:0::1;::::0;;41078:107::o;40790:229::-;21996:13;:11;:13::i;:::-;40912:9:::1;40907:105;40927:20:::0;;::::1;40907:105;;;40995:5;40969:9;:23;40979:9;;40989:1;40979:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40969:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40969:23:0;:31;;-1:-1:-1;;40969:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40949:3;::::1;::::0;::::1;:::i;:::-;;;;40907:105;;34067:33:::0;;;;;;;:::i;46392:104::-;21996:13;:11;:13::i;:::-;46465:16:::1;:23:::0;;-1:-1:-1;;;;;;46465:23:0::1;-1:-1:-1::0;;;;;46465:23:0;;;::::1;::::0;;;::::1;::::0;;46392:104::o;46504:240::-;21996:13;:11;:13::i;:::-;46642:9:::1;:20:::0;;46706:30;::::1;;::::0;::::1;-1:-1:-1::0;;46673:22:0;::::1;;::::0;::::1;-1:-1:-1::0;;46642:20:0;::::1;;::::0;::::1;46673:22:::0;;;;-1:-1:-1;;46673:22:0;;;;;;;;;;::::1;46706:30:::0;;;::::1;;::::0;;46504:240::o;46272:112::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;46340:28:0::1;46371:5;46340:28:::0;;;:18:::1;:28;::::0;;;;:36;;-1:-1:-1;;46340:36:0::1;::::0;;46272:112::o;23016:238::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;23119:22:0;::::1;23097:110;;;::::0;-1:-1:-1;;;23097:110:0;;8423:2:1;23097:110:0::1;::::0;::::1;8405:21:1::0;8462:2;8442:18;;;8435:30;8501:34;8481:18;;;8474:62;-1:-1:-1;;;8552:18:1;;;8545:36;8598:19;;23097:110:0::1;8221:402:1::0;23097:110:0::1;23218:28;23237:8;23218:18;:28::i;:::-;23016:238:::0;:::o;40177:114::-;21996:13;:11;:13::i;:::-;40262:21:::1;::::0;;-1:-1:-1;;40237:46:0;::::1;40262:21;::::0;;::::1;40261:22;40237:46;::::0;;40177:114::o;22275:132::-;22183:6;;-1:-1:-1;;;;;;;;22183:6:0;;;;20741:10;22339:23;22331:68;;;;-1:-1:-1;;;22331:68:0;;8830:2:1;22331:68:0;;;8812:21:1;;;8849:18;;;8842:30;8908:34;8888:18;;;8881:62;8960:18;;22331:68:0;8628:356:1;41193:371:0;-1:-1:-1;;;;;41320:19:0;;41312:68;;;;-1:-1:-1;;;41312:68:0;;9191:2:1;41312:68:0;;;9173:21:1;9230:2;9210:18;;;9203:30;9269:34;9249:18;;;9242:62;-1:-1:-1;;;9320:18:1;;;9313:34;9364:19;;41312:68:0;8989:400:1;41312:68:0;-1:-1:-1;;;;;41399:21:0;;41391:68;;;;-1:-1:-1;;;41391:68:0;;9596:2:1;41391:68:0;;;9578:21:1;9635:2;9615:18;;;9608:30;9674:34;9654:18;;;9647:62;-1:-1:-1;;;9725:18:1;;;9718:32;9767:19;;41391:68:0;9394:398:1;41391:68:0;-1:-1:-1;;;;;41472:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41524:32;;1361:25:1;;;41524:32:0;;1334:18:1;41524:32:0;;;;;;;41193:371;;;:::o;41572:2273::-;41694:12;;;;41686:50;;;;-1:-1:-1;;;41686:50:0;;9999:2:1;41686:50:0;;;9981:21:1;10038:2;10018:18;;;10011:30;10077:27;10057:18;;;10050:55;10122:18;;41686:50:0;9797:349:1;41686:50:0;-1:-1:-1;;;;;41755:18:0;;41747:68;;;;-1:-1:-1;;;41747:68:0;;10353:2:1;41747:68:0;;;10335:21:1;10392:2;10372:18;;;10365:30;10431:34;10411:18;;;10404:62;-1:-1:-1;;;10482:18:1;;;10475:35;10527:19;;41747:68:0;10151:401:1;41747:68:0;-1:-1:-1;;;;;41834:16:0;;41826:64;;;;-1:-1:-1;;;41826:64:0;;10759:2:1;41826:64:0;;;10741:21:1;10798:2;10778:18;;;10771:30;10837:34;10817:18;;;10810:62;-1:-1:-1;;;10888:18:1;;;10881:33;10931:19;;41826:64:0;10557:399:1;41826:64:0;41918:1;41909:6;:10;41901:64;;;;-1:-1:-1;;;41901:64:0;;11163:2:1;41901:64:0;;;11145:21:1;11202:2;11182:18;;;11175:30;11241:34;11221:18;;;11214:62;-1:-1:-1;;;11292:18:1;;;11285:39;11341:19;;41901:64:0;10961:405:1;41901:64:0;-1:-1:-1;;;;;41999:29:0;;;;;;:25;:29;;;;;;;;41998:30;:66;;;;-1:-1:-1;;;;;;42033:31:0;;;;;;:25;:31;;;;;;;;42032:32;41998:66;41976:135;;;;-1:-1:-1;;;41976:135:0;;11573:2:1;41976:135:0;;;11555:21:1;11612:2;11592:18;;;11585:30;-1:-1:-1;;;11631:18:1;;;11624:49;11690:18;;41976:135:0;11371:343:1;41976:135:0;42151:20;;42142:6;:29;:71;;;;-1:-1:-1;;;;;;42189:24:0;;;;;;:18;:24;;;;;;;;42188:25;42142:71;:111;;;;-1:-1:-1;;;;;;42231:22:0;;;;;;:18;:22;;;;;;;;42230:23;42142:111;42124:215;;;42280:47;;-1:-1:-1;;;42280:47:0;;11921:2:1;42280:47:0;;;11903:21:1;11960:2;11940:18;;;11933:30;11999:34;11979:18;;;11972:62;-1:-1:-1;;;12050:18:1;;;12043:35;12095:19;;42280:47:0;11719:401:1;42124:215:0;42386:1;42367:16;;:20;:62;;;;-1:-1:-1;;;;;;42405:24:0;;;;;;:18;:24;;;;;;;;42404:25;42367:62;:102;;;;-1:-1:-1;;;;;;42447:22:0;;;;;;:18;:22;;;;;;;;42446:23;42367:102;:138;;;;-1:-1:-1;42492:13:0;;-1:-1:-1;;;;;42486:19:0;;;42492:13;;42486:19;;42367:138;42349:381;;;-1:-1:-1;;;;;37118:20:0;;42532:24;37118:20;;;:11;:20;;;;;;42642:16;;42613:25;42632:6;37118:20;42613:25;:::i;:::-;:45;;42587:131;;;;-1:-1:-1;;;42587:131:0;;12457:2:1;42587:131:0;;;12439:21:1;12496:2;12476:18;;;12469:30;12535:26;12515:18;;;12508:54;12579:18;;42587:131:0;12255:348:1;42587:131:0;42517:213;42349:381;42744:7;:21;;;:29;;:21;:29;42740:471;;22183:6;;-1:-1:-1;;;;;42812:13:0;;;-1:-1:-1;;;22183:6:0;;;;42812:13;;;;:65;;-1:-1:-1;42860:16:0;;-1:-1:-1;;;;;42846:31:0;;;42860:16;;;;;42846:31;;42812:65;:105;;;;-1:-1:-1;42904:13:0;;-1:-1:-1;;;;;42898:19:0;;;42904:13;;42898:19;;42812:105;42790:410;;;43003:9;42982:31;;;;:20;:31;;;;;;43016:12;-1:-1:-1;42952:167:0;;;;-1:-1:-1;;;42952:167:0;;12810:2:1;42952:167:0;;;12792:21:1;12849:2;12829:18;;;12822:30;12888:34;12868:18;;;12861:62;-1:-1:-1;;;12939:18:1;;;12932:45;12994:19;;42952:167:0;12608:411:1;42952:167:0;43159:9;43138:31;;;;:20;:31;;;;;43172:12;43138:46;;42790:410;43256:13;;:17;;43272:1;43256:17;:::i;:::-;43239:12;:35;;:83;;;;-1:-1:-1;43305:16:0;;-1:-1:-1;;;;;43291:31:0;;;43305:16;;;;;43291:31;;43239:83;:119;;;;-1:-1:-1;43345:13:0;;-1:-1:-1;;;;;43339:19:0;;;43345:13;;43339:19;;43239:119;43221:212;;;-1:-1:-1;;;;;43385:29:0;;;;;;:25;:29;;;;;:36;;-1:-1:-1;;43385:36:0;43417:4;43385:36;;;43221:212;43460:14;;-1:-1:-1;;;;;43491:24:0;;43445:12;43491:24;;;:18;:24;;;;;;43460:14;;;;;;;;43491:24;;:50;;-1:-1:-1;;;;;;43519:22:0;;;;;;:18;:22;;;;;;;;43491:50;43487:297;;;-1:-1:-1;43568:5:0;43487:297;;;43618:13;;-1:-1:-1;;;;;43618:13:0;;;43610:21;;;;43606:167;;-1:-1:-1;43662:9:0;;;;;;;43606:167;;;43703:13;;-1:-1:-1;;;;;43703:13:0;;;43697:19;;;;43693:80;;-1:-1:-1;43747:10:0;;;;;;;43693:80;43796:41;43811:4;43817:2;43821:6;43829:7;43796:14;:41::i;:::-;41675:2170;41572:2273;;;:::o;28900:240::-;29020:7;29081:12;29073:6;;;;29065:29;;;;-1:-1:-1;;;29065:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;29116:5:0;;;28900:240::o;26621:98::-;26679:7;26706:5;26710:1;26706;:5;:::i;23414:191::-;23507:6;;;-1:-1:-1;;;;;23524:17:0;;;-1:-1:-1;;;23524:17:0;;;-1:-1:-1;;;;;;23524:17:0;;;;;;23557:40;;23507:6;;;;;;;;23557:40;;23488:16;;23557:40;23477:128;23414:191;:::o;44037:399::-;44193:7;44188:241;;44217:23;44233:6;44217:15;:23::i;:::-;44257:44;44275:6;44283:9;44294:6;44257:17;:44::i;:::-;44188:241;;;44334:23;44350:6;44334:15;:23::i;:::-;44374:43;44391:6;44399:9;44410:6;44374:16;:43::i;43853:176::-;43963:4;43914:28;37118:20;;;:11;:20;;;;;;43980:41;37118:20;44014:6;43980:11;:41::i;:::-;43903:126;43853:176;:::o;45373:494::-;-1:-1:-1;;;;;45527:19:0;;45505;45527;;;:11;:19;;;;;;45579:22;;;;45557:110;;;;-1:-1:-1;;;45557:110:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45703:19:0;;;;;;;:11;:19;;;;;;45725:21;;;45703:43;;45761:22;;;;;;;;;;:33;;;;;;45823:36;;-1:-1:-1;;;;;;;;;;;45823:36:0;;;45739:7;1361:25:1;;1349:2;1334:18;;1215:177;45823:36:0;;;;;;;;45494:373;45373:494;;;:::o;44444:921::-;-1:-1:-1;;;;;44597:19:0;;44575;44597;;;:11;:19;;;;;;44649:22;;;;44627:110;;;;-1:-1:-1;;;44627:110:0;;;;;;;:::i;:::-;44778:13;;44750:14;;44795:3;;44768:23;;44778:13;;;;;44768:7;:23;:::i;:::-;44767:31;;;;:::i;:::-;44837:13;;44750:48;;-1:-1:-1;44809:14:0;;44854:3;;44827:23;;44837:13;;44827:7;:23;:::i;:::-;44826:31;;;;:::i;:::-;44809:48;-1:-1:-1;44870:23:0;44809:48;44896:16;44906:6;44896:7;:16;:::i;:::-;:25;;;;:::i;:::-;-1:-1:-1;;;;;44959:19:0;;;;;;;:11;:19;;;;;;44981:29;;;44959:51;;45025:22;;;;;;;;;:41;;;;;;45101:4;45081:26;;;;;:36;;;;;;45144:16;;;;;45132:29;;;;;;:39;;;;;;45200:44;44870:51;;-1:-1:-1;45025:22:0;;-1:-1:-1;;;;;;;;;;;45200:44:0;;;44870:51;1361:25:1;;1349:2;1334:18;;1215:177;45200:44:0;;;;;;;;45277:16;;45260:42;;1361:25:1;;;-1:-1:-1;;;;;45277:16:0;;;;45260:42;;;-1:-1:-1;;;;;;;;;;;45260:42:0;1349:2:1;1334:18;45260:42:0;;;;;;;45318:39;;1361:25:1;;;45343:4:0;;-1:-1:-1;;;;;45318:39:0;;;-1:-1:-1;;;;;;;;;;;45318:39:0;1349:2:1;1334:18;45318:39:0;;;;;;;44564:801;;;;44444:921;;;:::o;47014:586::-;47143:20;;47119;:44;47115:106;;47201:20;;47178:43;;47115:106;47306:31;;47269:68;;;;;;;47367:64;;-1:-1:-1;47410:21:0;;;;;;;47367:64;:98;;;;-1:-1:-1;47449:16:0;;;;47448:17;47367:98;:140;;;;-1:-1:-1;47493:13:0;;-1:-1:-1;;;;;47483:23:0;;;47493:13;;47483:23;;47367:140;47349:244;;;47534:47;47560:20;35479:16;:23;;-1:-1:-1;;35479:23:0;35498:4;35479:23;;;:16;47705:13:::1;:6:::0;47716:1:::1;47705:10;:13::i;:::-;47690:28:::0;-1:-1:-1;47729:17:0::1;47749:16;:6:::0;47690:28;47749:10:::1;:16::i;:::-;47729:36:::0;-1:-1:-1;47801:21:0::1;47833:17;47845:4:::0;47833:11:::1;:17::i;:::-;47861:18;47882:41;:21;47908:14:::0;47882:25:::1;:41::i;:::-;47861:62;;47934:39;47951:9;47962:10;47934:16;:39::i;:::-;-1:-1:-1::0;;35525:16:0;:24;;-1:-1:-1;;35525:24:0;;;-1:-1:-1;;;47608:373:0:o;27758:98::-;27816:7;27843:5;27847:1;27843;:5;:::i;27002:98::-;27060:7;27087:5;27091:1;27087;:5;:::i;47989:469::-;48074:16;;;48088:1;48074:16;;;;;;;;48050:21;;48074:16;;;;;;;;;;-1:-1:-1;48074:16:0;48050:40;;48119:4;48101;48106:1;48101:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;48101:23:0;;;-1:-1:-1;;;;;48101:23:0;;;;;48145:16;;;;;;;;;-1:-1:-1;;;;;48145:16:0;-1:-1:-1;;;;;48145:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48135:4;48140:1;48135:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48135:33:0;;;:7;;;;;;;;;:33;48211:16;;48179:63;;48196:4;;48211:16;;;;48230:11;48179:8;:63::i;:::-;48253:16;;:197;;-1:-1:-1;;;48253:197:0;;:16;;;;-1:-1:-1;;;;;48253:16:0;;:67;;:197;;48335:11;;48361:1;;48377:4;;48404;;48424:15;;48253:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48039:419;47989:469;:::o;48466:368::-;48583:16;;48551:63;;48568:4;;48583:16;;;-1:-1:-1;;;;;48583:16:0;48602:11;48551:8;:63::i;:::-;48627:16;;-1:-1:-1;;;;;48627:16:0;;;;;:32;48667:9;48700:4;48720:11;48746:1;;48778:7;22183:6;;-1:-1:-1;;;;;;;;22183:6:0;;;;;22110:87;48778:7;48627:199;;;;;;-1:-1:-1;;;;;;48627:199:0;;;-1:-1:-1;;;;;15386:15:1;;;48627:199:0;;;15368:34:1;15418:18;;;15411:34;;;;15461:18;;;15454:34;;;;15504:18;;;15497:34;15568:15;;;15547:19;;;15540:44;48800:15:0;15600:19:1;;;15593:35;15302:19;;48627:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48466:368;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1397:615::-;1483:6;1491;1544:2;1532:9;1523:7;1519:23;1515:32;1512:52;;;1560:1;1557;1550:12;1512:52;1600:9;1587:23;1629:18;1670:2;1662:6;1659:14;1656:34;;;1686:1;1683;1676:12;1656:34;1724:6;1713:9;1709:22;1699:32;;1769:7;1762:4;1758:2;1754:13;1750:27;1740:55;;1791:1;1788;1781:12;1740:55;1831:2;1818:16;1857:2;1849:6;1846:14;1843:34;;;1873:1;1870;1863:12;1843:34;1926:7;1921:2;1911:6;1908:1;1904:14;1900:2;1896:23;1892:32;1889:45;1886:65;;;1947:1;1944;1937:12;1886:65;1978:2;1970:11;;;;;2000:6;;-1:-1:-1;1397:615:1;;-1:-1:-1;;;;1397:615:1:o;2225:180::-;2284:6;2337:2;2325:9;2316:7;2312:23;2308:32;2305:52;;;2353:1;2350;2343:12;2305:52;-1:-1:-1;2376:23:1;;2225:180;-1:-1:-1;2225:180:1:o;2410:456::-;2487:6;2495;2503;2556:2;2544:9;2535:7;2531:23;2527:32;2524:52;;;2572:1;2569;2562:12;2524:52;2611:9;2598:23;2630:31;2655:5;2630:31;:::i;:::-;2680:5;-1:-1:-1;2737:2:1;2722:18;;2709:32;2750:33;2709:32;2750:33;:::i;:::-;2410:456;;2802:7;;-1:-1:-1;;;2856:2:1;2841:18;;;;2828:32;;2410:456::o;3060:247::-;3119:6;3172:2;3160:9;3151:7;3147:23;3143:32;3140:52;;;3188:1;3185;3178:12;3140:52;3227:9;3214:23;3246:31;3271:5;3246:31;:::i;3546:160::-;3611:20;;3667:13;;3660:21;3650:32;;3640:60;;3696:1;3693;3686:12;3711:315;3776:6;3784;3837:2;3825:9;3816:7;3812:23;3808:32;3805:52;;;3853:1;3850;3843:12;3805:52;3892:9;3879:23;3911:31;3936:5;3911:31;:::i;:::-;3961:5;-1:-1:-1;3985:35:1;4016:2;4001:18;;3985:35;:::i;:::-;3975:45;;3711:315;;;;;:::o;4031:642::-;4196:2;4248:21;;;4318:13;;4221:18;;;4340:22;;;4167:4;;4196:2;4419:15;;;;4393:2;4378:18;;;4167:4;4462:185;4476:6;4473:1;4470:13;4462:185;;;4551:13;;4544:21;4537:29;4525:42;;4622:15;;;;4587:12;;;;4498:1;4491:9;4462:185;;;-1:-1:-1;4664:3:1;;4031:642;-1:-1:-1;;;;;;4031:642:1:o;4678:388::-;4746:6;4754;4807:2;4795:9;4786:7;4782:23;4778:32;4775:52;;;4823:1;4820;4813:12;4775:52;4862:9;4849:23;4881:31;4906:5;4881:31;:::i;:::-;4931:5;-1:-1:-1;4988:2:1;4973:18;;4960:32;5001:33;4960:32;5001:33;:::i;:::-;5053:7;5043:17;;;4678:388;;;;;:::o;5071:316::-;5139:6;5147;5155;5208:2;5196:9;5187:7;5183:23;5179:32;5176:52;;;5224:1;5221;5214:12;5176:52;5247:26;5263:9;5247:26;:::i;:::-;5237:36;;5292:35;5323:2;5312:9;5308:18;5292:35;:::i;:::-;5282:45;;5346:35;5377:2;5366:9;5362:18;5346:35;:::i;:::-;5336:45;;5071:316;;;;;:::o;5392:380::-;5471:1;5467:12;;;;5514;;;5535:61;;5589:4;5581:6;5577:17;5567:27;;5535:61;5642:2;5634:6;5631:14;5611:18;5608:38;5605:161;;5688:10;5683:3;5679:20;5676:1;5669:31;5723:4;5720:1;5713:15;5751:4;5748:1;5741:15;5605:161;;5392:380;;;:::o;5777:127::-;5838:10;5833:3;5829:20;5826:1;5819:31;5869:4;5866:1;5859:15;5893:4;5890:1;5883:15;5909:127;5970:10;5965:3;5961:20;5958:1;5951:31;6001:4;5998:1;5991:15;6025:4;6022:1;6015:15;6041:135;6080:3;6101:17;;;6098:43;;6121:18;;:::i;:::-;-1:-1:-1;6168:1:1;6157:13;;6041:135::o;6181:422::-;6270:1;6313:5;6270:1;6327:270;6348:7;6338:8;6335:21;6327:270;;;6407:4;6403:1;6399:6;6395:17;6389:4;6386:27;6383:53;;;6416:18;;:::i;:::-;6466:7;6456:8;6452:22;6449:55;;;6486:16;;;;6449:55;6565:22;;;;6525:15;;;;6327:270;;;6331:3;6181:422;;;;;:::o;6608:806::-;6657:5;6687:8;6677:80;;-1:-1:-1;6728:1:1;6742:5;;6677:80;6776:4;6766:76;;-1:-1:-1;6813:1:1;6827:5;;6766:76;6858:4;6876:1;6871:59;;;;6944:1;6939:130;;;;6851:218;;6871:59;6901:1;6892:10;;6915:5;;;6939:130;6976:3;6966:8;6963:17;6960:43;;;6983:18;;:::i;:::-;-1:-1:-1;;7039:1:1;7025:16;;7054:5;;6851:218;;7153:2;7143:8;7140:16;7134:3;7128:4;7125:13;7121:36;7115:2;7105:8;7102:16;7097:2;7091:4;7088:12;7084:35;7081:77;7078:159;;;-1:-1:-1;7190:19:1;;;7222:5;;7078:159;7269:34;7294:8;7288:4;7269:34;:::i;:::-;7339:6;7335:1;7331:6;7327:19;7318:7;7315:32;7312:58;;;7350:18;;:::i;:::-;7388:20;;6608:806;-1:-1:-1;;;6608:806:1:o;7419:140::-;7477:5;7506:47;7547:4;7537:8;7533:19;7527:4;7506:47;:::i;7564:168::-;7637:9;;;7668;;7685:15;;;7679:22;;7665:37;7655:71;;7706:18;;:::i;12125:125::-;12190:9;;;12211:10;;;12208:36;;;12224:18;;:::i;13024:402::-;13226:2;13208:21;;;13265:2;13245:18;;;13238:30;13304:34;13299:2;13284:18;;13277:62;-1:-1:-1;;;13370:2:1;13355:18;;13348:36;13416:3;13401:19;;13024:402::o;13431:217::-;13471:1;13497;13487:132;;13541:10;13536:3;13532:20;13529:1;13522:31;13576:4;13573:1;13566:15;13604:4;13601:1;13594:15;13487:132;-1:-1:-1;13633:9:1;;13431:217::o;13653:128::-;13720:9;;;13741:11;;;13738:37;;;13755:18;;:::i;13786:251::-;13856:6;13909:2;13897:9;13888:7;13884:23;13880:32;13877:52;;;13925:1;13922;13915:12;13877:52;13957:9;13951:16;13976:31;14001:5;13976:31;:::i;14042:980::-;14304:4;14352:3;14341:9;14337:19;14383:6;14372:9;14365:25;14409:2;14447:6;14442:2;14431:9;14427:18;14420:34;14490:3;14485:2;14474:9;14470:18;14463:31;14514:6;14549;14543:13;14580:6;14572;14565:22;14618:3;14607:9;14603:19;14596:26;;14657:2;14649:6;14645:15;14631:29;;14678:1;14688:195;14702:6;14699:1;14696:13;14688:195;;;14767:13;;-1:-1:-1;;;;;14763:39:1;14751:52;;14858:15;;;;14823:12;;;;14799:1;14717:9;14688:195;;;-1:-1:-1;;;;;;;14939:32:1;;;;14934:2;14919:18;;14912:60;-1:-1:-1;;;15003:3:1;14988:19;14981:35;14900:3;14042:980;-1:-1:-1;;;14042:980:1:o;15639:306::-;15727:6;15735;15743;15796:2;15784:9;15775:7;15771:23;15767:32;15764:52;;;15812:1;15809;15802:12;15764:52;15841:9;15835:16;15825:26;;15891:2;15880:9;15876:18;15870:25;15860:35;;15935:2;15924:9;15920:18;15914:25;15904:35;;15639:306;;;;;:::o
Swarm Source
ipfs://670d829701d7981ff816d92dbe1100bbe0b9215b5b3479ae6a53fa47c4f7744a
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.