Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
DAO
Overview
Max Total Supply
420,069,000 YEET
Holders
428 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
13,872.857838683225345975 YEETValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Yeet
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import "./dependencies/SafeMath.sol"; import "./dependencies/Clones.sol"; import "./dependencies/Address.sol"; import "./dependencies/IUniswapV2Factory.sol"; import "./dependencies/IUniswapV2Router02.sol"; import "./dependencies/IERC20Extended.sol"; import "./dependencies/Auth.sol"; import "./dependencies/BaseToken.sol"; contract Yeet is IERC20Extended, Auth, BaseToken { using SafeMath for uint256; using Address for address; using Address for address payable; uint256 public constant VERSION = 2; event taxSwapped(uint256 amountIn, uint256 amountOut); address private constant DEAD = address(0xdead); address private constant ZERO = address(0); address public treasuryAddress; uint256 private gracePeriod = 5 minutes; uint256 private gracePeriodEnd; uint8 private constant _decimals = 18; string public constant _name = "Yeet"; string public constant _symbol = "YEET"; uint256 public constant _totalSupply = 420_069_000 * 10**18; IUniswapV2Router02 public router; IUniswapV2Factory public factory; address public pair; // [69,69,10000] uint256 public buyingFee = 69; // 0.69% uint256 public sellingFee = 69; // 0.69% uint256 public feeDenominator; // default: 10000 bool public swapEnabled; uint256 public swapThreshold; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) public isFeeExempt; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor( address factory_, address router_, uint256[3] memory feeSettings_ ) payable Auth(msg.sender) { gracePeriodEnd = block.timestamp + gracePeriod; _initializeFees(feeSettings_); swapEnabled = true; swapThreshold = _totalSupply / 100000; // 0.001% of total supply (4_200 YEET) factory = IUniswapV2Factory(factory_); router = IUniswapV2Router02(router_); pair = factory.createPair(address(this), router.WETH()); isFeeExempt[msg.sender] = true; _allowances[address(this)][address(router)] = _totalSupply; _allowances[address(this)][address(pair)] = _totalSupply; treasuryAddress = msg.sender; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); emit TokenCreated( msg.sender, address(this), TokenType.antiBotStandard, VERSION ); } function _initializeFees(uint256[3] memory feeSettings_) internal { _setFees( feeSettings_[0], // buyingFee feeSettings_[1], // sellingFee feeSettings_[2] // feeDenominator ); } receive() external payable {} function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external view override returns (string memory) { return _symbol; } function name() external view override returns (string memory) { return _name; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, _totalSupply); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { if (_allowances[sender][msg.sender] != _totalSupply) { _allowances[sender][msg.sender] = _allowances[sender][msg.sender] .sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } function _transferFrom( address sender, address recipient, uint256 amount ) internal returns (bool) { if (inSwap) { return _basicTransfer(sender, recipient, amount); } if (shouldSwapToETH()) { swapToETH(); } _balances[sender] = _balances[sender].sub( amount, "Insufficient Balance" ); uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, recipient, amount) : amount; if(shouldTakeFee(sender) && onGracePeriod()){ // Holders Control during first hour if(recipient != pair && _balances[recipient].add(amount) >= (_totalSupply.mul(50).div(10000))){ revert("You cannot hold more than 0.50% of the supply during the grace period"); } } _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { _balances[sender] = _balances[sender].sub( amount, "Insufficient Balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender] && (sellingFee > 0 || buyingFee > 0); } function getTradingFee(bool selling) public view returns (uint256) { if(selling){ if(onGracePeriod()){ return 9000; // 90% of selling fee during grace period } return sellingFee; } return buyingFee; } function takeFee( address sender, address receiver, uint256 amount ) internal returns (uint256) { uint256 feeAmount = amount.mul(getTradingFee(receiver == pair)).div( feeDenominator ); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function shouldSwapToETH() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && !onGracePeriod() && _balances[address(this)] >= swapThreshold; } function onGracePeriod() internal view returns (bool) { return block.timestamp < gracePeriodEnd; } function swapToETH() internal swapping { uint256 amountToSwap = swapThreshold; if(_balances[address(this)] > (100 * swapThreshold)){ amountToSwap = swapThreshold * 50; }else { amountToSwap = _balances[address(this)]; } address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; payable(treasuryAddress).transfer(amountETH); emit taxSwapped(amountToSwap, amountETH); } function setFees( uint256 _buyFee, uint256 _sellFee, uint256 _feeDenominator ) public authorized { _setFees( _buyFee, _sellFee, _feeDenominator ); } function _setFees( uint256 _buyFee, uint256 _sellFee, uint256 _feeDenominator ) internal { buyingFee = _buyFee; sellingFee = _sellFee; feeDenominator = _feeDenominator; require(_buyFee <= 300 && _sellFee <= 300, "Fee should be less than 3%"); require( buyingFee <= feeDenominator / 4 && sellingFee <= feeDenominator / 4, "Total fee should not be greater than 1/4 of fee denominator" ); } function setFeeExempt(address wallet_, bool exempt) external authorized { isFeeExempt[wallet_] = exempt; } function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized { swapEnabled = _enabled; swapThreshold = _amount; } function setTreasuryAddress(address _treasuryAddress) external authorized { treasuryAddress = _treasuryAddress; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } }
/* ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ██ ██ ██ ██ █████ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██ ██████ ███████ ████ Find any smart contract, and build your project faster: https://www.cookbook.dev Twitter: https://twitter.com/cookbook_dev Discord: https://discord.gg/WzsfPcfHrk Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code */ // SPDX-License-Identifier: MIT // 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; } } }
/* ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ██ ██ ██ ██ █████ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██ ██████ ███████ ████ Find any smart contract, and build your project faster: https://www.cookbook.dev Twitter: https://twitter.com/cookbook_dev Discord: https://discord.gg/WzsfPcfHrk Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (proxy/Clones.sol) pragma solidity ^0.8.0; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. * * _Available since v3.4._ */ library Clones { /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create(0, ptr, 0x37) } require(instance != address(0), "ERC1167: create failed"); } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create2(0, ptr, 0x37, salt) } require(instance != address(0), "ERC1167: create2 failed"); } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000) mstore(add(ptr, 0x38), shl(0x60, deployer)) mstore(add(ptr, 0x4c), salt) mstore(add(ptr, 0x6c), keccak256(ptr, 0x37)) predicted := keccak256(add(ptr, 0x37), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress(address implementation, bytes32 salt) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } }
/* ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ██ ██ ██ ██ █████ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██ ██████ ███████ ████ Find any smart contract, and build your project faster: https://www.cookbook.dev Twitter: https://twitter.com/cookbook_dev Discord: https://discord.gg/WzsfPcfHrk Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.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 functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason 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 { // 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); } } } }
/* ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ██ ██ ██ ██ █████ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██ ██████ ███████ ████ Find any smart contract, and build your project faster: https://www.cookbook.dev Twitter: https://twitter.com/cookbook_dev Discord: https://discord.gg/WzsfPcfHrk Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code */ // SPDX-License-Identifier: MIT 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; }
/* ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ██ ██ ██ ██ █████ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██ ██████ ███████ ████ Find any smart contract, and build your project faster: https://www.cookbook.dev Twitter: https://twitter.com/cookbook_dev Discord: https://discord.gg/WzsfPcfHrk Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code */ // SPDX-License-Identifier: MIT 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); } 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; }
/* ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ██ ██ ██ ██ █████ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██ ██████ ███████ ████ Find any smart contract, and build your project faster: https://www.cookbook.dev Twitter: https://twitter.com/cookbook_dev Discord: https://discord.gg/WzsfPcfHrk Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; interface IERC20Extended { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); }
/* ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ██ ██ ██ ██ █████ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██ ██████ ███████ ████ Find any smart contract, and build your project faster: https://www.cookbook.dev Twitter: https://twitter.com/cookbook_dev Discord: https://discord.gg/WzsfPcfHrk Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; abstract contract Auth { address internal owner; mapping(address => bool) internal authorizations; constructor(address _owner) { owner = _owner; authorizations[_owner] = true; } /** * Function modifier to require caller to be contract owner */ modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } /** * Function modifier to require caller to be authorized */ modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } /** * Authorize address. Owner only */ function authorize(address adr) public onlyOwner { authorizations[adr] = true; } /** * Remove address' authorization. Owner only */ function unauthorize(address adr) public onlyOwner { authorizations[adr] = false; } /** * Check if address is owner */ function isOwner(address account) public view returns (bool) { return account == owner; } /** * Return address' authorization status */ function isAuthorized(address adr) public view returns (bool) { return authorizations[adr]; } /** * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized */ function transferOwnership(address payable adr) public onlyOwner { owner = adr; authorizations[adr] = true; emit OwnershipTransferred(adr); } event OwnershipTransferred(address owner); }
/* ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██████ ██ ██ ██ ██ █████ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██ ██████ ███████ ████ Find any smart contract, and build your project faster: https://www.cookbook.dev Twitter: https://twitter.com/cookbook_dev Discord: https://discord.gg/WzsfPcfHrk Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; enum TokenType { standard, antiBotStandard, liquidityGenerator, antiBotLiquidityGenerator, baby, antiBotBaby, buybackBaby, antiBotBuybackBaby } abstract contract BaseToken { event TokenCreated( address indexed owner, address indexed token, TokenType tokenType, uint256 version ); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"factory_","type":"address"},{"internalType":"address","name":"router_","type":"address"},{"internalType":"uint256[3]","name":"feeSettings_","type":"uint256[3]"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"version","type":"uint256"}],"name":"TokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"taxSwapped","type":"event"},{"inputs":[],"name":"VERSION","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":"_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":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTradingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet_","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405261012c6003556045600855604560095560405162003abb38038062003abb8339818101604052810190620000399190620009c1565b33806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505060035442620000e2919062000a4c565b600481905550620000f9816200066060201b60201c565b6001600b60006101000a81548160ff021916908315150217905550620186a06b015b79121ea40c312520000062000131919062000ab6565b600c8190555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c919062000aee565b6040518363ffffffff1660e01b8152600401620002ab92919062000b31565b6020604051808303816000875af1158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000aee565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506b015b79121ea40c3125200000600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506b015b79121ea40c3125200000600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b015b79121ea40c3125200000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b015b79121ea40c3125200000604051620005e4919062000b6f565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f56358b41df5fa59f5639228f0930994cbdde383c8a8fd74e06c04e1deebe3562600160026040516200064f92919062000c0c565b60405180910390a350505062000d83565b620006c4816000600381106200067b576200067a62000c39565b5b60200201518260016003811062000697576200069662000c39565b5b602002015183600260038110620006b357620006b262000c39565b5b6020020151620006c760201b60201c565b50565b826008819055508160098190555080600a8190555061012c8311158015620006f1575061012c8211155b62000733576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072a9062000cc9565b60405180910390fd5b6004600a5462000744919062000ab6565b600854111580156200076857506004600a5462000762919062000ab6565b60095411155b620007aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a19062000d61565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007eb82620007be565b9050919050565b620007fd81620007de565b81146200080957600080fd5b50565b6000815190506200081d81620007f2565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620008738262000828565b810181811067ffffffffffffffff8211171562000895576200089462000839565b5b80604052505050565b6000620008aa620007af565b9050620008b8828262000868565b919050565b600067ffffffffffffffff821115620008db57620008da62000839565b5b602082029050919050565b600080fd5b6000819050919050565b6200090081620008eb565b81146200090c57600080fd5b50565b6000815190506200092081620008f5565b92915050565b60006200093d6200093784620008bd565b6200089e565b905080602084028301858111156200095a5762000959620008e6565b5b835b818110156200098757806200097288826200090f565b8452602084019350506020810190506200095c565b5050509392505050565b600082601f830112620009a957620009a862000823565b5b6003620009b884828562000926565b91505092915050565b600080600060a08486031215620009dd57620009dc620007b9565b5b6000620009ed868287016200080c565b935050602062000a00868287016200080c565b925050604062000a138682870162000991565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a5982620008eb565b915062000a6683620008eb565b925082820190508082111562000a815762000a8062000a1d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ac382620008eb565b915062000ad083620008eb565b92508262000ae35762000ae262000a87565b5b828204905092915050565b60006020828403121562000b075762000b06620007b9565b5b600062000b17848285016200080c565b91505092915050565b62000b2b81620007de565b82525050565b600060408201905062000b48600083018562000b20565b62000b57602083018462000b20565b9392505050565b62000b6981620008eb565b82525050565b600060208201905062000b86600083018462000b5e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6008811062000bcf5762000bce62000b8c565b5b50565b600081905062000be28262000bbb565b919050565b600062000bf48262000bd2565b9050919050565b62000c068162000be7565b82525050565b600060408201905062000c23600083018562000bfb565b62000c32602083018462000b5e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4665652073686f756c64206265206c657373207468616e203325000000000000600082015250565b600062000cb1601a8362000c68565b915062000cbe8262000c79565b602082019050919050565b6000602082019050818103600083015262000ce48162000ca2565b9050919050565b7f546f74616c206665652073686f756c64206e6f7420626520677265617465722060008201527f7468616e20312f34206f66206665652064656e6f6d696e61746f720000000000602082015250565b600062000d49603b8362000c68565b915062000d568262000ceb565b604082019050919050565b6000602082019050818103600083015262000d7c8162000d3a565b9050919050565b612d288062000d936000396000f3fe6080604052600436106102085760003560e01c806395d89b4111610118578063d28d8852116100a0578063f0b37c041161006f578063f0b37c04146107b6578063f2fde38b146107df578063f887ea4014610808578063fe9fbb8014610833578063ffa1ad74146108705761020f565b8063d28d8852146106e8578063d98b196514610713578063dd62ed3e14610750578063df20fd491461078d5761020f565b8063b6a5d7de116100e7578063b6a5d7de14610615578063c45a01551461063e578063c5f956af14610669578063cbd8dc0a14610694578063cec10c11146106bf5761020f565b806395d89b4114610557578063a8aa1b3114610582578063a9059cbb146105ad578063b09f1266146105ea5761020f565b80632f54bf6e1161019b578063571ac8b01161016a578063571ac8b0146104605780636605bfda1461049d5780636ddd1713146104c657806370a08231146104f15780638ebfc7961461052e5761020f565b80632f54bf6e14610390578063313ce567146103cd5780633eaaf86b146103f85780633f4218e0146104235761020f565b806318160ddd116101d757806318160ddd146102d25780631891201e146102fd57806323b872dd146103285780632b112e49146103655761020f565b80630445b6671461021457806306fdde031461023f578063095ea7b31461026a578063180b0d7e146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961089b565b6040516102369190612193565b60405180910390f35b34801561024b57600080fd5b506102546108a1565b604051610261919061223e565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906122ef565b6108de565b60405161029e919061234a565b60405180910390f35b3480156102b357600080fd5b506102bc6109d0565b6040516102c99190612193565b60405180910390f35b3480156102de57600080fd5b506102e76109d6565b6040516102f49190612193565b60405180910390f35b34801561030957600080fd5b506103126109ea565b60405161031f9190612193565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612365565b6109f0565b60405161035c919061234a565b60405180910390f35b34801561037157600080fd5b5061037a610bdc565b6040516103879190612193565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b291906123b8565b610c27565b6040516103c4919061234a565b60405180910390f35b3480156103d957600080fd5b506103e2610c80565b6040516103ef9190612401565b60405180910390f35b34801561040457600080fd5b5061040d610c89565b60405161041a9190612193565b60405180910390f35b34801561042f57600080fd5b5061044a600480360381019061044591906123b8565b610c99565b604051610457919061234a565b60405180910390f35b34801561046c57600080fd5b50610487600480360381019061048291906123b8565b610cb9565b604051610494919061234a565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906123b8565b610cd8565b005b3480156104d257600080fd5b506104db610d64565b6040516104e8919061234a565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906123b8565b610d77565b6040516105259190612193565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612448565b610dc0565b005b34801561056357600080fd5b5061056c610e63565b604051610579919061223e565b60405180910390f35b34801561058e57600080fd5b50610597610ea0565b6040516105a49190612497565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906122ef565b610ec6565b6040516105e1919061234a565b60405180910390f35b3480156105f657600080fd5b506105ff610edb565b60405161060c919061223e565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906123b8565b610f14565b005b34801561064a57600080fd5b50610653610fb6565b6040516106609190612511565b60405180910390f35b34801561067557600080fd5b5061067e610fdc565b60405161068b9190612497565b60405180910390f35b3480156106a057600080fd5b506106a9611002565b6040516106b69190612193565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e1919061252c565b611008565b005b3480156106f457600080fd5b506106fd611060565b60405161070a919061223e565b60405180910390f35b34801561071f57600080fd5b5061073a6004803603810190610735919061257f565b611099565b6040516107479190612193565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906125ac565b6110cd565b6040516107849190612193565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af91906125ec565b611154565b005b3480156107c257600080fd5b506107dd60048036038101906107d891906123b8565b6111c1565b005b3480156107eb57600080fd5b506108066004803603810190610801919061266a565b611264565b005b34801561081457600080fd5b5061081d61137d565b60405161082a91906126b8565b60405180910390f35b34801561083f57600080fd5b5061085a600480360381019061085591906123b8565b6113a3565b604051610867919061234a565b60405180910390f35b34801561087c57600080fd5b506108856113f9565b6040516108929190612193565b60405180910390f35b600c5481565b60606040518060400160405280600481526020017f5965657400000000000000000000000000000000000000000000000000000000815250905090565b600081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109be9190612193565b60405180910390a36001905092915050565b600a5481565b60006b015b79121ea40c3125200000905090565b60095481565b60006b015b79121ea40c3125200000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bc857610b47826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610bd3848484611453565b90509392505050565b6000610c22610beb6000610d77565b610c14610bf961dead610d77565b6b015b79121ea40c31252000006117c990919063ffffffff16565b6117c990919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6b015b79121ea40c312520000081565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610cd1826b015b79121ea40c31252000006108de565b9050919050565b610ce1336113a3565b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d179061271f565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc9336113a3565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061271f565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600481526020017f5945455400000000000000000000000000000000000000000000000000000000815250905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ed3338484611453565b905092915050565b6040518060400160405280600481526020017f594545540000000000000000000000000000000000000000000000000000000081525081565b610f1d33610c27565b610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f539061278b565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b611011336113a3565b611050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110479061271f565b60405180910390fd5b61105b8383836117df565b505050565b6040518060400160405280600481526020017f596565740000000000000000000000000000000000000000000000000000000081525081565b600081156110c2576110a96118bb565b156110b85761232890506110c8565b60095490506110c8565b60085490505b919050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61115d336113a3565b61119c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111939061271f565b60405180910390fd5b81600b60006101000a81548160ff02191690831515021790555080600c819055505050565b6111ca33610c27565b611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061278b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61126d33610c27565b6112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a39061278b565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161137291906127cc565b60405180910390a150565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600281565b6000838311158290611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d919061223e565b60405180910390fd5b5082840390509392505050565b6000601060009054906101000a900460ff161561147c576114758484846118c7565b90506117c2565b611484611a9a565b1561149257611491611b82565b5b61151b826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061156985611f2b565b611573578261157f565b61157e858585611f9d565b5b905061158a85611f2b565b801561159a57506115996118bb565b5b156116c257600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611681575061162c61271061161e60326b015b79121ea40c312520000061213890919063ffffffff16565b61214e90919063ffffffff16565b61167e84600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b10155b156116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b89061287f565b60405180910390fd5b5b61171481600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117b49190612193565b60405180910390a360019150505b9392505050565b600081836117d791906128ce565b905092915050565b826008819055508160098190555080600a8190555061012c8311158015611808575061012c8211155b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e9061294e565b60405180910390fd5b6004600a54611856919061299d565b6008541115801561187757506004600a54611871919061299d565b60095411155b6118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90612a40565b60405180910390fd5b505050565b60006004544210905090565b6000611952826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119e782600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a879190612193565b60405180910390a3600190509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611b075750601060009054906101000a900460ff16155b8015611b1f5750600b60009054906101000a900460ff165b8015611b305750611b2e6118bb565b155b8015611b7d5750600c54600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601060006101000a81548160ff0219169083151502179055506000600c549050600c546064611bb39190612a60565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c0f576032600c54611c089190612a60565b9050611c52565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b6000600267ffffffffffffffff811115611c6f57611c6e612aa2565b5b604051908082528060200260200182016040528015611c9d5781602001602082028036833780820191505090505b5090503081600081518110611cb557611cb4612ad1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d809190612b15565b81600181518110611d9457611d93612ad1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611e32959493929190612c3b565b600060405180830381600087803b158015611e4c57600080fd5b505af1158015611e60573d6000803e3d6000fd5b505050506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ed1573d6000803e3d6000fd5b507f8f83591d0f3c2cf14dc05a3a4b6264589821f3afea40d24aa88c95c16d1f3d018382604051611f03929190612c95565b60405180910390a15050506000601060006101000a81548160ff021916908315150217905550565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f96575060006009541180611f9557506000600854115b5b9050919050565b60008061201f600a54612011612002600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611099565b8661213890919063ffffffff16565b61214e90919063ffffffff16565b905061207381600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121139190612193565b60405180910390a361212e81846117c990919063ffffffff16565b9150509392505050565b600081836121469190612a60565b905092915050565b6000818361215c919061299d565b905092915050565b600081836121729190612cbe565b905092915050565b6000819050919050565b61218d8161217a565b82525050565b60006020820190506121a86000830184612184565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121e85780820151818401526020810190506121cd565b60008484015250505050565b6000601f19601f8301169050919050565b6000612210826121ae565b61221a81856121b9565b935061222a8185602086016121ca565b612233816121f4565b840191505092915050565b600060208201905081810360008301526122588184612205565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061229082612265565b9050919050565b6122a081612285565b81146122ab57600080fd5b50565b6000813590506122bd81612297565b92915050565b6122cc8161217a565b81146122d757600080fd5b50565b6000813590506122e9816122c3565b92915050565b6000806040838503121561230657612305612260565b5b6000612314858286016122ae565b9250506020612325858286016122da565b9150509250929050565b60008115159050919050565b6123448161232f565b82525050565b600060208201905061235f600083018461233b565b92915050565b60008060006060848603121561237e5761237d612260565b5b600061238c868287016122ae565b935050602061239d868287016122ae565b92505060406123ae868287016122da565b9150509250925092565b6000602082840312156123ce576123cd612260565b5b60006123dc848285016122ae565b91505092915050565b600060ff82169050919050565b6123fb816123e5565b82525050565b600060208201905061241660008301846123f2565b92915050565b6124258161232f565b811461243057600080fd5b50565b6000813590506124428161241c565b92915050565b6000806040838503121561245f5761245e612260565b5b600061246d858286016122ae565b925050602061247e85828601612433565b9150509250929050565b61249181612285565b82525050565b60006020820190506124ac6000830184612488565b92915050565b6000819050919050565b60006124d76124d26124cd84612265565b6124b2565b612265565b9050919050565b60006124e9826124bc565b9050919050565b60006124fb826124de565b9050919050565b61250b816124f0565b82525050565b60006020820190506125266000830184612502565b92915050565b60008060006060848603121561254557612544612260565b5b6000612553868287016122da565b9350506020612564868287016122da565b9250506040612575868287016122da565b9150509250925092565b60006020828403121561259557612594612260565b5b60006125a384828501612433565b91505092915050565b600080604083850312156125c3576125c2612260565b5b60006125d1858286016122ae565b92505060206125e2858286016122ae565b9150509250929050565b6000806040838503121561260357612602612260565b5b600061261185828601612433565b9250506020612622858286016122da565b9150509250929050565b600061263782612265565b9050919050565b6126478161262c565b811461265257600080fd5b50565b6000813590506126648161263e565b92915050565b6000602082840312156126805761267f612260565b5b600061268e84828501612655565b91505092915050565b60006126a2826124de565b9050919050565b6126b281612697565b82525050565b60006020820190506126cd60008301846126a9565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000612709600b836121b9565b9150612714826126d3565b602082019050919050565b60006020820190508181036000830152612738816126fc565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006127756006836121b9565b91506127808261273f565b602082019050919050565b600060208201905081810360008301526127a481612768565b9050919050565b60006127b6826124de565b9050919050565b6127c6816127ab565b82525050565b60006020820190506127e160008301846127bd565b92915050565b7f596f752063616e6e6f7420686f6c64206d6f7265207468616e20302e3530252060008201527f6f662074686520737570706c7920647572696e6720746865206772616365207060208201527f6572696f64000000000000000000000000000000000000000000000000000000604082015250565b60006128696045836121b9565b9150612874826127e7565b606082019050919050565b600060208201905081810360008301526128988161285c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128d98261217a565b91506128e48361217a565b92508282039050818111156128fc576128fb61289f565b5b92915050565b7f4665652073686f756c64206265206c657373207468616e203325000000000000600082015250565b6000612938601a836121b9565b915061294382612902565b602082019050919050565b600060208201905081810360008301526129678161292b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006129a88261217a565b91506129b38361217a565b9250826129c3576129c261296e565b5b828204905092915050565b7f546f74616c206665652073686f756c64206e6f7420626520677265617465722060008201527f7468616e20312f34206f66206665652064656e6f6d696e61746f720000000000602082015250565b6000612a2a603b836121b9565b9150612a35826129ce565b604082019050919050565b60006020820190508181036000830152612a5981612a1d565b9050919050565b6000612a6b8261217a565b9150612a768361217a565b9250828202612a848161217a565b91508282048414831517612a9b57612a9a61289f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612b0f81612297565b92915050565b600060208284031215612b2b57612b2a612260565b5b6000612b3984828501612b00565b91505092915050565b6000819050919050565b6000612b67612b62612b5d84612b42565b6124b2565b61217a565b9050919050565b612b7781612b4c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612bb281612285565b82525050565b6000612bc48383612ba9565b60208301905092915050565b6000602082019050919050565b6000612be882612b7d565b612bf28185612b88565b9350612bfd83612b99565b8060005b83811015612c2e578151612c158882612bb8565b9750612c2083612bd0565b925050600181019050612c01565b5085935050505092915050565b600060a082019050612c506000830188612184565b612c5d6020830187612b6e565b8181036040830152612c6f8186612bdd565b9050612c7e6060830185612488565b612c8b6080830184612184565b9695505050505050565b6000604082019050612caa6000830185612184565b612cb76020830184612184565b9392505050565b6000612cc98261217a565b9150612cd48361217a565b9250828201905080821115612cec57612ceb61289f565b5b9291505056fea26469706673582212205f3e930fc638c41f3591e2d9eaabe31a7830e2c8534bf76a356e0d93feaaccdb64736f6c634300081100330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000045000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000003e8
Deployed Bytecode
0x6080604052600436106102085760003560e01c806395d89b4111610118578063d28d8852116100a0578063f0b37c041161006f578063f0b37c04146107b6578063f2fde38b146107df578063f887ea4014610808578063fe9fbb8014610833578063ffa1ad74146108705761020f565b8063d28d8852146106e8578063d98b196514610713578063dd62ed3e14610750578063df20fd491461078d5761020f565b8063b6a5d7de116100e7578063b6a5d7de14610615578063c45a01551461063e578063c5f956af14610669578063cbd8dc0a14610694578063cec10c11146106bf5761020f565b806395d89b4114610557578063a8aa1b3114610582578063a9059cbb146105ad578063b09f1266146105ea5761020f565b80632f54bf6e1161019b578063571ac8b01161016a578063571ac8b0146104605780636605bfda1461049d5780636ddd1713146104c657806370a08231146104f15780638ebfc7961461052e5761020f565b80632f54bf6e14610390578063313ce567146103cd5780633eaaf86b146103f85780633f4218e0146104235761020f565b806318160ddd116101d757806318160ddd146102d25780631891201e146102fd57806323b872dd146103285780632b112e49146103655761020f565b80630445b6671461021457806306fdde031461023f578063095ea7b31461026a578063180b0d7e146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961089b565b6040516102369190612193565b60405180910390f35b34801561024b57600080fd5b506102546108a1565b604051610261919061223e565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906122ef565b6108de565b60405161029e919061234a565b60405180910390f35b3480156102b357600080fd5b506102bc6109d0565b6040516102c99190612193565b60405180910390f35b3480156102de57600080fd5b506102e76109d6565b6040516102f49190612193565b60405180910390f35b34801561030957600080fd5b506103126109ea565b60405161031f9190612193565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612365565b6109f0565b60405161035c919061234a565b60405180910390f35b34801561037157600080fd5b5061037a610bdc565b6040516103879190612193565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b291906123b8565b610c27565b6040516103c4919061234a565b60405180910390f35b3480156103d957600080fd5b506103e2610c80565b6040516103ef9190612401565b60405180910390f35b34801561040457600080fd5b5061040d610c89565b60405161041a9190612193565b60405180910390f35b34801561042f57600080fd5b5061044a600480360381019061044591906123b8565b610c99565b604051610457919061234a565b60405180910390f35b34801561046c57600080fd5b50610487600480360381019061048291906123b8565b610cb9565b604051610494919061234a565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906123b8565b610cd8565b005b3480156104d257600080fd5b506104db610d64565b6040516104e8919061234a565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906123b8565b610d77565b6040516105259190612193565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612448565b610dc0565b005b34801561056357600080fd5b5061056c610e63565b604051610579919061223e565b60405180910390f35b34801561058e57600080fd5b50610597610ea0565b6040516105a49190612497565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906122ef565b610ec6565b6040516105e1919061234a565b60405180910390f35b3480156105f657600080fd5b506105ff610edb565b60405161060c919061223e565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906123b8565b610f14565b005b34801561064a57600080fd5b50610653610fb6565b6040516106609190612511565b60405180910390f35b34801561067557600080fd5b5061067e610fdc565b60405161068b9190612497565b60405180910390f35b3480156106a057600080fd5b506106a9611002565b6040516106b69190612193565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e1919061252c565b611008565b005b3480156106f457600080fd5b506106fd611060565b60405161070a919061223e565b60405180910390f35b34801561071f57600080fd5b5061073a6004803603810190610735919061257f565b611099565b6040516107479190612193565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906125ac565b6110cd565b6040516107849190612193565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af91906125ec565b611154565b005b3480156107c257600080fd5b506107dd60048036038101906107d891906123b8565b6111c1565b005b3480156107eb57600080fd5b506108066004803603810190610801919061266a565b611264565b005b34801561081457600080fd5b5061081d61137d565b60405161082a91906126b8565b60405180910390f35b34801561083f57600080fd5b5061085a600480360381019061085591906123b8565b6113a3565b604051610867919061234a565b60405180910390f35b34801561087c57600080fd5b506108856113f9565b6040516108929190612193565b60405180910390f35b600c5481565b60606040518060400160405280600481526020017f5965657400000000000000000000000000000000000000000000000000000000815250905090565b600081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109be9190612193565b60405180910390a36001905092915050565b600a5481565b60006b015b79121ea40c3125200000905090565b60095481565b60006b015b79121ea40c3125200000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bc857610b47826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610bd3848484611453565b90509392505050565b6000610c22610beb6000610d77565b610c14610bf961dead610d77565b6b015b79121ea40c31252000006117c990919063ffffffff16565b6117c990919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6b015b79121ea40c312520000081565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610cd1826b015b79121ea40c31252000006108de565b9050919050565b610ce1336113a3565b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d179061271f565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc9336113a3565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061271f565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600481526020017f5945455400000000000000000000000000000000000000000000000000000000815250905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ed3338484611453565b905092915050565b6040518060400160405280600481526020017f594545540000000000000000000000000000000000000000000000000000000081525081565b610f1d33610c27565b610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f539061278b565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b611011336113a3565b611050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110479061271f565b60405180910390fd5b61105b8383836117df565b505050565b6040518060400160405280600481526020017f596565740000000000000000000000000000000000000000000000000000000081525081565b600081156110c2576110a96118bb565b156110b85761232890506110c8565b60095490506110c8565b60085490505b919050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61115d336113a3565b61119c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111939061271f565b60405180910390fd5b81600b60006101000a81548160ff02191690831515021790555080600c819055505050565b6111ca33610c27565b611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061278b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61126d33610c27565b6112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a39061278b565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161137291906127cc565b60405180910390a150565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600281565b6000838311158290611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d919061223e565b60405180910390fd5b5082840390509392505050565b6000601060009054906101000a900460ff161561147c576114758484846118c7565b90506117c2565b611484611a9a565b1561149257611491611b82565b5b61151b826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061156985611f2b565b611573578261157f565b61157e858585611f9d565b5b905061158a85611f2b565b801561159a57506115996118bb565b5b156116c257600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611681575061162c61271061161e60326b015b79121ea40c312520000061213890919063ffffffff16565b61214e90919063ffffffff16565b61167e84600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b10155b156116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b89061287f565b60405180910390fd5b5b61171481600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117b49190612193565b60405180910390a360019150505b9392505050565b600081836117d791906128ce565b905092915050565b826008819055508160098190555080600a8190555061012c8311158015611808575061012c8211155b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e9061294e565b60405180910390fd5b6004600a54611856919061299d565b6008541115801561187757506004600a54611871919061299d565b60095411155b6118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90612a40565b60405180910390fd5b505050565b60006004544210905090565b6000611952826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119e782600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a879190612193565b60405180910390a3600190509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611b075750601060009054906101000a900460ff16155b8015611b1f5750600b60009054906101000a900460ff165b8015611b305750611b2e6118bb565b155b8015611b7d5750600c54600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601060006101000a81548160ff0219169083151502179055506000600c549050600c546064611bb39190612a60565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c0f576032600c54611c089190612a60565b9050611c52565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b6000600267ffffffffffffffff811115611c6f57611c6e612aa2565b5b604051908082528060200260200182016040528015611c9d5781602001602082028036833780820191505090505b5090503081600081518110611cb557611cb4612ad1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d809190612b15565b81600181518110611d9457611d93612ad1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611e32959493929190612c3b565b600060405180830381600087803b158015611e4c57600080fd5b505af1158015611e60573d6000803e3d6000fd5b505050506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ed1573d6000803e3d6000fd5b507f8f83591d0f3c2cf14dc05a3a4b6264589821f3afea40d24aa88c95c16d1f3d018382604051611f03929190612c95565b60405180910390a15050506000601060006101000a81548160ff021916908315150217905550565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f96575060006009541180611f9557506000600854115b5b9050919050565b60008061201f600a54612011612002600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611099565b8661213890919063ffffffff16565b61214e90919063ffffffff16565b905061207381600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121139190612193565b60405180910390a361212e81846117c990919063ffffffff16565b9150509392505050565b600081836121469190612a60565b905092915050565b6000818361215c919061299d565b905092915050565b600081836121729190612cbe565b905092915050565b6000819050919050565b61218d8161217a565b82525050565b60006020820190506121a86000830184612184565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121e85780820151818401526020810190506121cd565b60008484015250505050565b6000601f19601f8301169050919050565b6000612210826121ae565b61221a81856121b9565b935061222a8185602086016121ca565b612233816121f4565b840191505092915050565b600060208201905081810360008301526122588184612205565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061229082612265565b9050919050565b6122a081612285565b81146122ab57600080fd5b50565b6000813590506122bd81612297565b92915050565b6122cc8161217a565b81146122d757600080fd5b50565b6000813590506122e9816122c3565b92915050565b6000806040838503121561230657612305612260565b5b6000612314858286016122ae565b9250506020612325858286016122da565b9150509250929050565b60008115159050919050565b6123448161232f565b82525050565b600060208201905061235f600083018461233b565b92915050565b60008060006060848603121561237e5761237d612260565b5b600061238c868287016122ae565b935050602061239d868287016122ae565b92505060406123ae868287016122da565b9150509250925092565b6000602082840312156123ce576123cd612260565b5b60006123dc848285016122ae565b91505092915050565b600060ff82169050919050565b6123fb816123e5565b82525050565b600060208201905061241660008301846123f2565b92915050565b6124258161232f565b811461243057600080fd5b50565b6000813590506124428161241c565b92915050565b6000806040838503121561245f5761245e612260565b5b600061246d858286016122ae565b925050602061247e85828601612433565b9150509250929050565b61249181612285565b82525050565b60006020820190506124ac6000830184612488565b92915050565b6000819050919050565b60006124d76124d26124cd84612265565b6124b2565b612265565b9050919050565b60006124e9826124bc565b9050919050565b60006124fb826124de565b9050919050565b61250b816124f0565b82525050565b60006020820190506125266000830184612502565b92915050565b60008060006060848603121561254557612544612260565b5b6000612553868287016122da565b9350506020612564868287016122da565b9250506040612575868287016122da565b9150509250925092565b60006020828403121561259557612594612260565b5b60006125a384828501612433565b91505092915050565b600080604083850312156125c3576125c2612260565b5b60006125d1858286016122ae565b92505060206125e2858286016122ae565b9150509250929050565b6000806040838503121561260357612602612260565b5b600061261185828601612433565b9250506020612622858286016122da565b9150509250929050565b600061263782612265565b9050919050565b6126478161262c565b811461265257600080fd5b50565b6000813590506126648161263e565b92915050565b6000602082840312156126805761267f612260565b5b600061268e84828501612655565b91505092915050565b60006126a2826124de565b9050919050565b6126b281612697565b82525050565b60006020820190506126cd60008301846126a9565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000612709600b836121b9565b9150612714826126d3565b602082019050919050565b60006020820190508181036000830152612738816126fc565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006127756006836121b9565b91506127808261273f565b602082019050919050565b600060208201905081810360008301526127a481612768565b9050919050565b60006127b6826124de565b9050919050565b6127c6816127ab565b82525050565b60006020820190506127e160008301846127bd565b92915050565b7f596f752063616e6e6f7420686f6c64206d6f7265207468616e20302e3530252060008201527f6f662074686520737570706c7920647572696e6720746865206772616365207060208201527f6572696f64000000000000000000000000000000000000000000000000000000604082015250565b60006128696045836121b9565b9150612874826127e7565b606082019050919050565b600060208201905081810360008301526128988161285c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128d98261217a565b91506128e48361217a565b92508282039050818111156128fc576128fb61289f565b5b92915050565b7f4665652073686f756c64206265206c657373207468616e203325000000000000600082015250565b6000612938601a836121b9565b915061294382612902565b602082019050919050565b600060208201905081810360008301526129678161292b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006129a88261217a565b91506129b38361217a565b9250826129c3576129c261296e565b5b828204905092915050565b7f546f74616c206665652073686f756c64206e6f7420626520677265617465722060008201527f7468616e20312f34206f66206665652064656e6f6d696e61746f720000000000602082015250565b6000612a2a603b836121b9565b9150612a35826129ce565b604082019050919050565b60006020820190508181036000830152612a5981612a1d565b9050919050565b6000612a6b8261217a565b9150612a768361217a565b9250828202612a848161217a565b91508282048414831517612a9b57612a9a61289f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612b0f81612297565b92915050565b600060208284031215612b2b57612b2a612260565b5b6000612b3984828501612b00565b91505092915050565b6000819050919050565b6000612b67612b62612b5d84612b42565b6124b2565b61217a565b9050919050565b612b7781612b4c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612bb281612285565b82525050565b6000612bc48383612ba9565b60208301905092915050565b6000602082019050919050565b6000612be882612b7d565b612bf28185612b88565b9350612bfd83612b99565b8060005b83811015612c2e578151612c158882612bb8565b9750612c2083612bd0565b925050600181019050612c01565b5085935050505092915050565b600060a082019050612c506000830188612184565b612c5d6020830187612b6e565b8181036040830152612c6f8186612bdd565b9050612c7e6060830185612488565b612c8b6080830184612184565b9695505050505050565b6000604082019050612caa6000830185612184565b612cb76020830184612184565b9392505050565b6000612cc98261217a565b9150612cd48361217a565b9250828201905080821115612cec57612ceb61289f565b5b9291505056fea26469706673582212205f3e930fc638c41f3591e2d9eaabe31a7830e2c8534bf76a356e0d93feaaccdb64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000045000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000003e8
-----Decoded View---------------
Arg [0] : factory_ (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [1] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : feeSettings_ (uint256[3]): 69,69,1000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [4] : 00000000000000000000000000000000000000000000000000000000000003e8
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.