More Info
Private Name Tags
ContractCreator
Latest 10 from a total of 10 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy Tokens | 5941124 | 7 hrs ago | IN | 2 S | 0.00626272 | ||||
Buy Tokens | 5940796 | 7 hrs ago | IN | 1 S | 0.00626272 | ||||
Buy Tokens | 5940697 | 7 hrs ago | IN | 2 S | 0.00626272 | ||||
Buy Tokens | 5940647 | 7 hrs ago | IN | 0.1 S | 0.00626272 | ||||
Buy Tokens | 5940577 | 7 hrs ago | IN | 1 S | 0.00626272 | ||||
Buy Tokens | 5940513 | 7 hrs ago | IN | 0.5 S | 0.00626272 | ||||
Buy Tokens | 5940449 | 7 hrs ago | IN | 0.1 S | 0.00626272 | ||||
Buy Tokens | 5940404 | 7 hrs ago | IN | 0.1 S | 0.00626272 | ||||
Sell Tokens | 5929972 | 9 hrs ago | IN | 0 S | 0.0202305 | ||||
Add Deployer | 5786550 | 37 hrs ago | IN | 0 S | 0.00255854 |
Latest 16 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5941124 | 7 hrs ago | 0.01 S | ||||
5940796 | 7 hrs ago | 0.005 S | ||||
5940697 | 7 hrs ago | 0.01 S | ||||
5940647 | 7 hrs ago | 0.0005 S | ||||
5940577 | 7 hrs ago | 0.005 S | ||||
5940513 | 7 hrs ago | 0.0025 S | ||||
5940449 | 7 hrs ago | 0.0005 S | ||||
5940404 | 7 hrs ago | 0.0005 S | ||||
5940303 | 7 hrs ago | 0.01 S | ||||
5940303 | 7 hrs ago | 2 S | ||||
5940303 | 7 hrs ago | Contract Creation | 0 S | |||
5929972 | 9 hrs ago | 0.0990025 S | ||||
5929972 | 9 hrs ago | 0.00049749 S | ||||
5929911 | 9 hrs ago | 0.0005 S | ||||
5929911 | 9 hrs ago | 0.1 S | ||||
5929911 | 9 hrs ago | Contract Creation | 0 S |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
SonicxPool
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; // @title Sonicx.fun - Decentralized Launchpad // @notice Powered by SonicXSwap.com, enabling fast and secure transactions // @author SuryaprakashMalgo import "@openzeppelin/contracts/proxy/Clones.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; // Protects against reentrancy attacks import "@openzeppelin/contracts/access/Ownable.sol"; // Provides ownership functionality import "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, uint256 amount ) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function allowance( address owner, address spender ) external returns (uint256); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); function decimals() external returns (uint8); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface SonicxswapRouter { 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 swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); 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 SonicxswapFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function getPair( address tokenA, address tokenB ) external view returns (address pair); function createPair( address tokenA, address tokenB ) external returns (address pair); } interface LPToken { function sync() external; } interface IFunDeployerInterface { function getOwnerPer() external view returns (uint256); function emitRoyal( address funContract, address tokenAddress, address router, address baseAddress, uint256 liquidityAmount, uint256 tokenAmount, uint256 _time, uint256 totalVolume ) external; } interface IFunToken { function initialize( uint256 initialSupply, string memory _name, string memory _symbol, address _midDeployer, address _deployer ) external; function initiateDex() external; } contract SonicxPool is Ownable, ReentrancyGuard { address public constant DEAD = 0x000000000000000000000000000000000000dEaD; uint256 public constant HUNDRED = 100; uint256 public constant BASIS_POINTS = 10000; AggregatorV3Interface internal dataFeed; struct FunTokenPoolData { uint256 reserveTokens; uint256 reserveETH; uint256 volume; uint256 listThreshold; uint256 initialReserveEth; uint8 nativePer; bool tradeActive; bool lpBurn; bool royalemitted; } struct FunTokenPool { address creator; address token; address baseToken; address router; address lockerAddress; address storedLPAddress; address deployer; FunTokenPoolData pool; } // deployer allowed to create fun tokens mapping(address => bool) public allowedDeployers; // user => array of fun tokens mapping(address => address[]) public userFunTokens; // fun token => fun token details mapping(address => FunTokenPool) public tokenPools; address public implementation; uint16 public feePer; uint16 public lpfee = 3; event LiquidityAdded( address indexed provider, uint256 tokenAmount, uint256 ethAmount ); event sold( address indexed user, uint256 amountIn, uint256 amountOut, uint256 _time, uint256 reserveEth, uint256 reserveTokens, uint256 totalVolume ); event bought( address indexed user, uint256 amountIn, uint256 amountOut, uint256 _time, uint256 reserveEth, uint256 reserveTokens, uint256 totalVolume ); event funTradeCall( address indexed user, uint256 amountIn, uint256 amountOut, uint256 _time, uint256 reserveEth, uint256 reserveTokens, string tradeType, uint256 totalVolume ); event listed( address indexed user, address indexed tokenAddress, address indexed router, uint256 liquidityAmount, uint256 tokenAmount, uint256 _time, uint256 totalVolume ); constructor( address _implementation, uint16 _feePer ) payable Ownable(msg.sender) { implementation = _implementation; feePer = _feePer; dataFeed = AggregatorV3Interface( 0xc76dFb89fF298145b417d221B2c747d84952e01d ); } function getChainlinkDataFeedLatestAnswer() public view returns (int256) { ( , /* uint80 roundID */ int answer /*uint startedAt*/ /*uint timeStamp*/ /*uint80 answeredInRound*/, , , ) = dataFeed.latestRoundData(); return answer; } function createFun( string[2] memory _name_symbol, uint256 _totalSupply, address _creator, address _baseToken, address _router, uint256[2] memory listThreshold_initReserveEth, bool lpBurn ) public payable returns (address funtoken) { require(allowedDeployers[msg.sender], "not deployer"); address funToken = Clones.clone(implementation); IFunToken(funToken).initialize( _totalSupply, _name_symbol[0], _name_symbol[1], address(this), msg.sender ); userFunTokens[_creator].push(funToken); FunTokenPool memory pool; pool.creator = _creator; pool.token = funToken; pool.baseToken = _baseToken; pool.router = _router; pool.deployer = msg.sender; if (_baseToken == SonicxswapRouter(_router).WETH()) { pool.pool.nativePer = 100; } else { pool.pool.nativePer = 50; } pool.pool.tradeActive = true; pool.pool.lpBurn = lpBurn; pool.pool.reserveTokens += _totalSupply; pool.pool.reserveETH += (listThreshold_initReserveEth[1] + msg.value); pool.pool.listThreshold = listThreshold_initReserveEth[0]; pool.pool.initialReserveEth = listThreshold_initReserveEth[1]; tokenPools[funToken] = pool; emit LiquidityAdded(address(this), _totalSupply, msg.value); return address(funToken); } function getAmountOutTokens( address funToken, uint256 amountIn ) public view returns (uint256 amountOut) { require(amountIn > 0, "Invalid input amount"); FunTokenPool storage token = tokenPools[funToken]; require( token.pool.reserveTokens > 0 && token.pool.reserveETH > 0, "Invalid reserves" ); uint256 numerator = amountIn * token.pool.reserveTokens; uint256 denominator = (token.pool.reserveETH) + amountIn; amountOut = numerator / denominator; } function getAmountOutETH( address funToken, uint256 amountIn ) public view returns (uint256 amountOut) { require(amountIn > 0, "Invalid input amount"); FunTokenPool storage token = tokenPools[funToken]; require( token.pool.reserveTokens > 0 && token.pool.reserveETH > 0, "Invalid reserves" ); uint256 numerator = amountIn * token.pool.reserveETH; uint256 denominator = (token.pool.reserveTokens) + amountIn; amountOut = numerator / denominator; } function getBaseToken(address funToken) public view returns (address) { FunTokenPool storage token = tokenPools[funToken]; return address(token.baseToken); } function getWrapAddr(address funToken) public view returns (address) { return SonicxswapRouter(tokenPools[funToken].router).WETH(); } function getLatestPrice() public view returns (uint256) { (, int256 price, , , ) = dataFeed.latestRoundData(); require(price >= 0, "Price cannot be negative"); return uint256(price * 10 ** 10); } function getCurrentCap(address funToken) public view returns (uint256) { FunTokenPool storage token = tokenPools[funToken]; return (((getLatestPrice() * token.pool.reserveETH) / 10 ** 18) * IERC20(funToken).totalSupply()) / token.pool.reserveTokens; } function getFuntokenPool( address funToken ) public view returns (FunTokenPool memory) { return tokenPools[funToken]; } function getFuntokenPools( address[] memory funTokens ) public view returns (FunTokenPool[] memory) { uint256 length = funTokens.length; FunTokenPool[] memory pools = new FunTokenPool[](length); for (uint256 i = 0; i < length; ) { pools[i] = tokenPools[funTokens[i]]; unchecked { i++; } } return pools; } function getUserFuntokens( address user ) public view returns (address[] memory) { return userFunTokens[user]; } function sellTokens( address funToken, uint256 tokenAmount, uint256 minEth ) public nonReentrant returns (bool, bool) { FunTokenPool storage token = tokenPools[funToken]; require(token.pool.tradeActive, "Trading not active"); uint256 tokenToSell = tokenAmount; uint256 ethAmount = getAmountOutETH(funToken, tokenToSell); uint256 ethAmountFee = (ethAmount * feePer) / 10000; require(ethAmount > 0 && ethAmount >= minEth, "Slippage too high"); token.pool.reserveTokens += tokenAmount; token.pool.reserveETH -= ethAmount; token.pool.volume += ethAmount; IERC20(funToken).transferFrom(msg.sender, address(this), tokenToSell); (bool success, ) = owner().call{value: ethAmountFee}(""); require(success, "ownr ETH transfer failed"); (success, ) = msg.sender.call{value: ethAmount - ethAmountFee}(""); require(success, "seller ETH transfer failed"); emit sold( msg.sender, tokenAmount, ethAmount, block.timestamp, token.pool.reserveETH, token.pool.reserveTokens, token.pool.volume ); emit funTradeCall( msg.sender, tokenAmount, ethAmount, block.timestamp, token.pool.reserveETH, token.pool.reserveTokens, "sell", token.pool.volume ); return (true, true); } function buyTokens( address funToken, uint256 minTokens ) public payable nonReentrant { require(msg.value > 0, "Invalid buy value"); FunTokenPool storage token = tokenPools[funToken]; require(token.pool.tradeActive, "Trading not active"); { uint256 ethAmount = msg.value; uint256 ethAmountFee = (ethAmount * feePer) / 10000; uint256 tokenAmount = getAmountOutTokens( funToken, ethAmount - ethAmountFee ); require(tokenAmount >= minTokens, "Slippage too high"); token.pool.reserveETH += (ethAmount - ethAmountFee); token.pool.reserveTokens -= tokenAmount; token.pool.volume += ethAmount; (bool success, ) = owner().call{value: ethAmountFee}(""); require(success, "fee ETH transfer failed"); IERC20(funToken).transfer(msg.sender, tokenAmount); emit bought( msg.sender, msg.value, tokenAmount, block.timestamp, token.pool.reserveETH, token.pool.reserveTokens, token.pool.volume ); emit funTradeCall( msg.sender, msg.value, tokenAmount, block.timestamp, token.pool.reserveETH, token.pool.reserveTokens, "buy", token.pool.volume ); } uint256 currentMarketCap = getCurrentCap(funToken); uint256 listThresholdCap = token.pool.listThreshold * 10 ** 18; if ( currentMarketCap >= (listThresholdCap / 2) && !token.pool.royalemitted ) { IFunDeployerInterface(token.deployer).emitRoyal( funToken, funToken, token.router, token.baseToken, token.pool.reserveETH, token.pool.reserveTokens, block.timestamp, token.pool.volume ); token.pool.royalemitted = true; } if (currentMarketCap >= listThresholdCap) { token.pool.tradeActive = false; IFunToken(funToken).initiateDex(); token.pool.reserveETH -= token.pool.initialReserveEth; _addLiquidityETH( funToken, IERC20(funToken).balanceOf(address(this)), token.pool.reserveETH ); token.pool.reserveETH -= token.pool.reserveETH; } } function changeNativePer(address funToken, uint8 _newNativePer) public { require(_isUserFunToken(funToken), "Unauthorized"); FunTokenPool storage token = tokenPools[funToken]; require( token.baseToken != getWrapAddr(funToken), "no custom base selected" ); require(_newNativePer >= 0 && _newNativePer <= 100, "invalid per"); token.pool.nativePer = _newNativePer; } function _addLiquidityETH( address funToken, uint256 amountTokenDesired, uint256 nativeForDex // bool lpBurn ) internal { uint256 amountETH = nativeForDex; uint256 amountETHMin = (amountETH * 90) / HUNDRED; uint256 amountTokenToAddLiq = amountTokenDesired; uint256 amountTokenMin = (amountTokenToAddLiq * 90) / HUNDRED; FunTokenPool storage token = tokenPools[funToken]; address wrapperAddress = getWrapAddr(funToken); token.storedLPAddress = _getpair(funToken, funToken, wrapperAddress); address storedLPAddress = token.storedLPAddress; _approve(funToken, false); SonicxswapRouter(token.router).addLiquidityETH{value: amountETH}( funToken, amountTokenToAddLiq, amountTokenMin, amountETHMin, address(this), block.timestamp + (300) ); uint256 lpBalance = IERC20(storedLPAddress).balanceOf(address(this)); // Calculate LP fee distribution uint256 ownerLPFee = (lpBalance * lpfee) / 100; // Owner's LP fee uint256 deadLPAmount = lpBalance - ownerLPFee; // Remaining sent to DEAD address //3% Transfer LP tokens IERC20(storedLPAddress).transfer(owner(), ownerLPFee); // Send LP fee to owner //97% IERC20(storedLPAddress).transfer(DEAD, deadLPAmount); // Send the rest to DEAD address emit listed( msg.sender, funToken, token.router, amountETH, amountTokenToAddLiq, block.timestamp, token.pool.volume ); } function _approve( address funToken, bool isBaseToken ) internal returns (bool) { FunTokenPool storage token = tokenPools[funToken]; IERC20 token_ = IERC20(funToken); if (isBaseToken) { token_ = IERC20(token.baseToken); } if (token_.allowance(address(this), token.router) == 0) { token_.approve(token.router, type(uint256).max); } return true; } function _approveLock( address _lp, address _lockDeployer ) internal returns (bool) { IERC20 lp_ = IERC20(_lp); if (lp_.allowance(address(this), _lockDeployer) == 0) { lp_.approve(_lockDeployer, type(uint256).max); } return true; } function _getpair( address funToken, address _token1, address _token2 ) internal returns (address) { address router = tokenPools[funToken].router; address factory = SonicxswapRouter(router).factory(); address pair = SonicxswapFactory(factory).getPair(_token1, _token2); if (pair != address(0)) { return pair; } else { return SonicxswapFactory(factory).createPair(_token1, _token2); } } function _isUserFunToken(address funToken) internal view returns (bool) { for (uint256 i = 0; i < userFunTokens[msg.sender].length; ) { if (funToken == userFunTokens[msg.sender][i]) { return true; } unchecked { i++; } } return false; } function addDeployer(address _deployer) public onlyOwner { allowedDeployers[_deployer] = true; } function removeDeployer(address _deployer) public onlyOwner { allowedDeployers[_deployer] = false; } function updateImplementation(address _implementation) public onlyOwner { require(_implementation != address(0)); implementation = _implementation; } function updateteamFeeper(uint16 _newFeePer) public onlyOwner { feePer = _newFeePer; } function updateLpfee(uint16 _lpfee) public onlyOwner { lpfee = _lpfee; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // solhint-disable-next-line interface-starts-with-i interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.2.0) (proxy/Clones.sol) pragma solidity ^0.8.20; import {Create2} from "../utils/Create2.sol"; import {Errors} from "../utils/Errors.sol"; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[ERC-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. */ library Clones { error CloneArgumentsTooLong(); /** * @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) { return clone(implementation, 0); } /** * @dev Same as {xref-Clones-clone-address-}[clone], but with a `value` parameter to send native currency * to the new contract. * * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory) * to always have enough balance for new deployments. Consider exposing this function under a payable method. */ function clone(address implementation, uint256 value) internal returns (address instance) { if (address(this).balance < value) { revert Errors.InsufficientBalance(address(this).balance, value); } assembly ("memory-safe") { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create(value, 0x09, 0x37) } if (instance == address(0)) { revert Errors.FailedDeployment(); } } /** * @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 times will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { return cloneDeterministic(implementation, salt, 0); } /** * @dev Same as {xref-Clones-cloneDeterministic-address-bytes32-}[cloneDeterministic], but with * a `value` parameter to send native currency to the new contract. * * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory) * to always have enough balance for new deployments. Consider exposing this function under a payable method. */ function cloneDeterministic( address implementation, bytes32 salt, uint256 value ) internal returns (address instance) { if (address(this).balance < value) { revert Errors.InsufficientBalance(address(this).balance, value); } assembly ("memory-safe") { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create2(value, 0x09, 0x37, salt) } if (instance == address(0)) { revert Errors.FailedDeployment(); } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { assembly ("memory-safe") { let ptr := mload(0x40) mstore(add(ptr, 0x38), deployer) mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff) mstore(add(ptr, 0x14), implementation) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73) mstore(add(ptr, 0x58), salt) mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37)) predicted := and(keccak256(add(ptr, 0x43), 0x55), 0xffffffffffffffffffffffffffffffffffffffff) } } /** * @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)); } /** * @dev Deploys and returns the address of a clone that mimics the behavior of `implementation` with custom * immutable arguments. These are provided through `args` and cannot be changed after deployment. To * access the arguments within the implementation, use {fetchCloneArgs}. * * This function uses the create opcode, which should never revert. */ function cloneWithImmutableArgs(address implementation, bytes memory args) internal returns (address instance) { return cloneWithImmutableArgs(implementation, args, 0); } /** * @dev Same as {xref-Clones-cloneWithImmutableArgs-address-bytes-}[cloneWithImmutableArgs], but with a `value` * parameter to send native currency to the new contract. * * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory) * to always have enough balance for new deployments. Consider exposing this function under a payable method. */ function cloneWithImmutableArgs( address implementation, bytes memory args, uint256 value ) internal returns (address instance) { if (address(this).balance < value) { revert Errors.InsufficientBalance(address(this).balance, value); } bytes memory bytecode = _cloneCodeWithImmutableArgs(implementation, args); assembly ("memory-safe") { instance := create(value, add(bytecode, 0x20), mload(bytecode)) } if (instance == address(0)) { revert Errors.FailedDeployment(); } } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation` with custom * immutable arguments. These are provided through `args` and cannot be changed after deployment. To * access the arguments within the implementation, use {fetchCloneArgs}. * * This function uses the create2 opcode and a `salt` to deterministically deploy the clone. Using the same * `implementation`, `args` and `salt` multiple times will revert, since the clones cannot be deployed twice * at the same address. */ function cloneDeterministicWithImmutableArgs( address implementation, bytes memory args, bytes32 salt ) internal returns (address instance) { return cloneDeterministicWithImmutableArgs(implementation, args, salt, 0); } /** * @dev Same as {xref-Clones-cloneDeterministicWithImmutableArgs-address-bytes-bytes32-}[cloneDeterministicWithImmutableArgs], * but with a `value` parameter to send native currency to the new contract. * * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory) * to always have enough balance for new deployments. Consider exposing this function under a payable method. */ function cloneDeterministicWithImmutableArgs( address implementation, bytes memory args, bytes32 salt, uint256 value ) internal returns (address instance) { bytes memory bytecode = _cloneCodeWithImmutableArgs(implementation, args); return Create2.deploy(value, salt, bytecode); } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministicWithImmutableArgs}. */ function predictDeterministicAddressWithImmutableArgs( address implementation, bytes memory args, bytes32 salt, address deployer ) internal pure returns (address predicted) { bytes memory bytecode = _cloneCodeWithImmutableArgs(implementation, args); return Create2.computeAddress(salt, keccak256(bytecode), deployer); } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministicWithImmutableArgs}. */ function predictDeterministicAddressWithImmutableArgs( address implementation, bytes memory args, bytes32 salt ) internal view returns (address predicted) { return predictDeterministicAddressWithImmutableArgs(implementation, args, salt, address(this)); } /** * @dev Get the immutable args attached to a clone. * * - If `instance` is a clone that was deployed using `clone` or `cloneDeterministic`, this * function will return an empty array. * - If `instance` is a clone that was deployed using `cloneWithImmutableArgs` or * `cloneDeterministicWithImmutableArgs`, this function will return the args array used at * creation. * - If `instance` is NOT a clone deployed using this library, the behavior is undefined. This * function should only be used to check addresses that are known to be clones. */ function fetchCloneArgs(address instance) internal view returns (bytes memory) { bytes memory result = new bytes(instance.code.length - 45); // revert if length is too short assembly ("memory-safe") { extcodecopy(instance, add(result, 32), 45, mload(result)) } return result; } /** * @dev Helper that prepares the initcode of the proxy with immutable args. * * An assembly variant of this function requires copying the `args` array, which can be efficiently done using * `mcopy`. Unfortunately, that opcode is not available before cancun. A pure solidity implementation using * abi.encodePacked is more expensive but also more portable and easier to review. * * NOTE: https://eips.ethereum.org/EIPS/eip-170[EIP-170] limits the length of the contract code to 24576 bytes. * With the proxy code taking 45 bytes, that limits the length of the immutable args to 24531 bytes. */ function _cloneCodeWithImmutableArgs( address implementation, bytes memory args ) private pure returns (bytes memory) { if (args.length > 24531) revert CloneArgumentsTooLong(); return abi.encodePacked( hex"61", uint16(args.length + 45), hex"3d81600a3d39f3363d3d373d3d3d363d73", implementation, hex"5af43d82803e903d91602b57fd5bf3", args ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/Create2.sol) pragma solidity ^0.8.20; import {Errors} from "./Errors.sol"; /** * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer. * `CREATE2` can be used to compute in advance the address where a smart * contract will be deployed, which allows for interesting new mechanisms known * as 'counterfactual interactions'. * * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more * information. */ library Create2 { /** * @dev There's no code to deploy. */ error Create2EmptyBytecode(); /** * @dev Deploys a contract using `CREATE2`. The address where the contract * will be deployed can be known in advance via {computeAddress}. * * The bytecode for a contract can be obtained from Solidity with * `type(contractName).creationCode`. * * Requirements: * * - `bytecode` must not be empty. * - `salt` must have not been used for `bytecode` already. * - the factory must have a balance of at least `amount`. * - if `amount` is non-zero, `bytecode` must have a `payable` constructor. */ function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address addr) { if (address(this).balance < amount) { revert Errors.InsufficientBalance(address(this).balance, amount); } if (bytecode.length == 0) { revert Create2EmptyBytecode(); } assembly ("memory-safe") { addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt) // if no address was created, and returndata is not empty, bubble revert if and(iszero(addr), not(iszero(returndatasize()))) { let p := mload(0x40) returndatacopy(p, 0, returndatasize()) revert(p, returndatasize()) } } if (addr == address(0)) { revert Errors.FailedDeployment(); } } /** * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the * `bytecodeHash` or `salt` will result in a new destination address. */ function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) { return computeAddress(salt, bytecodeHash, address(this)); } /** * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}. */ function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address addr) { assembly ("memory-safe") { let ptr := mload(0x40) // Get free memory pointer // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... | // |-------------------|---------------------------------------------------------------------------| // | bytecodeHash | CCCCCCCCCCCCC...CC | // | salt | BBBBBBBBBBBBB...BB | // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA | // | 0xFF | FF | // |-------------------|---------------------------------------------------------------------------| // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC | // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ | mstore(add(ptr, 0x40), bytecodeHash) mstore(add(ptr, 0x20), salt) mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff mstore8(start, 0xff) addr := and(keccak256(start, 85), 0xffffffffffffffffffffffffffffffffffffffff) } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol) pragma solidity ^0.8.20; /** * @dev Collection of common custom errors used in multiple contracts * * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. * It is recommended to avoid relying on the error API for critical functionality. * * _Available since v5.1._ */ library Errors { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error InsufficientBalance(uint256 balance, uint256 needed); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedCall(); /** * @dev The deployment failed. */ error FailedDeployment(); /** * @dev A necessary precompile is missing. */ error MissingPrecompile(address); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } }
{ "evmVersion": "paris", "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":"_implementation","type":"address"},{"internalType":"uint16","name":"_feePer","type":"uint16"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalVolume","type":"uint256"}],"name":"bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"indexed":false,"internalType":"string","name":"tradeType","type":"string"},{"indexed":false,"internalType":"uint256","name":"totalVolume","type":"uint256"}],"name":"funTradeCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalVolume","type":"uint256"}],"name":"listed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalVolume","type":"uint256"}],"name":"sold","type":"event"},{"inputs":[],"name":"BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HUNDRED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_deployer","type":"address"}],"name":"addDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedDeployers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"uint256","name":"minTokens","type":"uint256"}],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"uint8","name":"_newNativePer","type":"uint8"}],"name":"changeNativePer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[2]","name":"_name_symbol","type":"string[2]"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"address","name":"_baseToken","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"uint256[2]","name":"listThreshold_initReserveEth","type":"uint256[2]"},{"internalType":"bool","name":"lpBurn","type":"bool"}],"name":"createFun","outputs":[{"internalType":"address","name":"funtoken","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feePer","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getAmountOutETH","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getAmountOutTokens","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"}],"name":"getBaseToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainlinkDataFeedLatestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"}],"name":"getCurrentCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"}],"name":"getFuntokenPool","outputs":[{"components":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"lockerAddress","type":"address"},{"internalType":"address","name":"storedLPAddress","type":"address"},{"internalType":"address","name":"deployer","type":"address"},{"components":[{"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"internalType":"uint256","name":"reserveETH","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"},{"internalType":"uint256","name":"listThreshold","type":"uint256"},{"internalType":"uint256","name":"initialReserveEth","type":"uint256"},{"internalType":"uint8","name":"nativePer","type":"uint8"},{"internalType":"bool","name":"tradeActive","type":"bool"},{"internalType":"bool","name":"lpBurn","type":"bool"},{"internalType":"bool","name":"royalemitted","type":"bool"}],"internalType":"struct SonicxPool.FunTokenPoolData","name":"pool","type":"tuple"}],"internalType":"struct SonicxPool.FunTokenPool","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"funTokens","type":"address[]"}],"name":"getFuntokenPools","outputs":[{"components":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"lockerAddress","type":"address"},{"internalType":"address","name":"storedLPAddress","type":"address"},{"internalType":"address","name":"deployer","type":"address"},{"components":[{"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"internalType":"uint256","name":"reserveETH","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"},{"internalType":"uint256","name":"listThreshold","type":"uint256"},{"internalType":"uint256","name":"initialReserveEth","type":"uint256"},{"internalType":"uint8","name":"nativePer","type":"uint8"},{"internalType":"bool","name":"tradeActive","type":"bool"},{"internalType":"bool","name":"lpBurn","type":"bool"},{"internalType":"bool","name":"royalemitted","type":"bool"}],"internalType":"struct SonicxPool.FunTokenPoolData","name":"pool","type":"tuple"}],"internalType":"struct SonicxPool.FunTokenPool[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserFuntokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"}],"name":"getWrapAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpfee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_deployer","type":"address"}],"name":"removeDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"funToken","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"minEth","type":"uint256"}],"name":"sellTokens","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPools","outputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"lockerAddress","type":"address"},{"internalType":"address","name":"storedLPAddress","type":"address"},{"internalType":"address","name":"deployer","type":"address"},{"components":[{"internalType":"uint256","name":"reserveTokens","type":"uint256"},{"internalType":"uint256","name":"reserveETH","type":"uint256"},{"internalType":"uint256","name":"volume","type":"uint256"},{"internalType":"uint256","name":"listThreshold","type":"uint256"},{"internalType":"uint256","name":"initialReserveEth","type":"uint256"},{"internalType":"uint8","name":"nativePer","type":"uint8"},{"internalType":"bool","name":"tradeActive","type":"bool"},{"internalType":"bool","name":"lpBurn","type":"bool"},{"internalType":"bool","name":"royalemitted","type":"bool"}],"internalType":"struct SonicxPool.FunTokenPoolData","name":"pool","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"name":"updateImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_lpfee","type":"uint16"}],"name":"updateLpfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newFeePer","type":"uint16"}],"name":"updateteamFeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userFunTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526003600660166101000a81548161ffff021916908361ffff16021790555060405162005ceb38038062005ceb8339818101604052810190620000479190620002fe565b33600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000bd5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000b4919062000356565b60405180910390fd5b620000ce816200019160201b60201c565b506001808190555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660146101000a81548161ffff021916908361ffff16021790555073c76dfb89ff298145b417d221b2c747d84952e01d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000373565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000287826200025a565b9050919050565b62000299816200027a565b8114620002a557600080fd5b50565b600081519050620002b9816200028e565b92915050565b600061ffff82169050919050565b620002d881620002bf565b8114620002e457600080fd5b50565b600081519050620002f881620002cd565b92915050565b6000806040838503121562000318576200031762000255565b5b60006200032885828601620002a8565b92505060206200033b85828601620002e7565b9150509250929050565b62000350816200027a565b82525050565b60006020820190506200036d600083018462000345565b92915050565b61596880620003836000396000f3fe6080604052600436106101d85760003560e01c80638da5cb5b11610102578063c3d2c3c111610095578063f2fde38b11610064578063f2fde38b1461071e578063f315df8614610747578063f85fc0ab14610770578063fa7e03651461079b576101d8565b8063c3d2c3c114610648578063ceeee9df1461068c578063e1f1c4a7146106b5578063e4e57b9e146106e0576101d8565b8063b536b78e116100d1578063b536b78e14610578578063bea4dfb5146105b5578063c2e4d08f146105e0578063c34223fb1461060b576101d8565b80638da5cb5b146104a85780638e15f473146104d35780639c8c3648146104fe578063a1e1fbc21461053b576101d8565b80635c60da1b1161017a578063715018a611610149578063715018a61461040f57806372521cc3146104265780637fec435314610456578063880f40391461047f576101d8565b80635c60da1b1461032d5780636832e5de146103585780636d090218146103955780636f3eebae146103d2576101d8565b80630c10fd0f116101b65780630c10fd0f1461024d578063172083ce1461028a5780632c612832146102b35780634d6dcae1146102f0576101d8565b8063025b22bc146101dd57806303fd2a45146102065780630752881a14610231575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190613e23565b6107c6565b005b34801561021257600080fd5b5061021b61084b565b6040516102289190613e5f565b60405180910390f35b61024b60048036038101906102469190613eb0565b610851565b005b34801561025957600080fd5b50610274600480360381019061026f9190613e23565b610f20565b6040516102819190613e5f565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190613f29565b610f91565b005b3480156102bf57600080fd5b506102da60048036038101906102d59190613e23565b611132565b6040516102e79190613f78565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613eb0565b611236565b6040516103249190613f78565b60405180910390f35b34801561033957600080fd5b5061034261135f565b60405161034f9190613e5f565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613eb0565b611385565b60405161038c9190613f78565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613e23565b6114ae565b6040516103c99190613fae565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613e23565b6114ce565b6040516104069190613e5f565b60405180910390f35b34801561041b57600080fd5b506104246115a8565b005b610440600480360381019061043b91906142c0565b6115bc565b60405161044d9190613e5f565b60405180910390f35b34801561046257600080fd5b5061047d600480360381019061047891906143b9565b611dd6565b005b34801561048b57600080fd5b506104a660048036038101906104a19190613e23565b611dfe565b005b3480156104b457600080fd5b506104bd611e61565b6040516104ca9190613e5f565b60405180910390f35b3480156104df57600080fd5b506104e8611e8a565b6040516104f59190613f78565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190613e23565b611f7f565b60405161053291906144a4565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190614589565b61204c565b60405161056f9190614808565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613e23565b612461565b6040516105ac91906148cc565b60405180910390f35b3480156105c157600080fd5b506105ca6127ca565b6040516105d79190614901565b60405180910390f35b3480156105ec57600080fd5b506105f561286b565b604051610602919061492b565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613eb0565b61287f565b60405161063f9190613e5f565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190613e23565b6128cd565b6040516106839897969594939291906149fd565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae91906143b9565b612aa0565b005b3480156106c157600080fd5b506106ca612ac8565b6040516106d79190613f78565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190614a7b565b612ace565b604051610715929190614ace565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190613e23565b612f3e565b005b34801561075357600080fd5b5061076e60048036038101906107699190613e23565b612fc4565b005b34801561077c57600080fd5b50610785613027565b6040516107929190613f78565b60405180910390f35b3480156107a757600080fd5b506107b061302c565b6040516107bd919061492b565b60405180910390f35b6107ce613040565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361080757600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b6108596130c7565b6000341161089c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089390614b54565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060070160050160019054906101000a900460ff16610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90614bc0565b60405180910390fd5b60003490506000612710600660149054906101000a900461ffff1661ffff168361095d9190614c0f565b6109679190614c80565b9050600061098086838561097b9190614cb1565b611236565b9050848110156109c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bc90614d31565b60405180910390fd5b81836109d19190614cb1565b8460070160010160008282546109e79190614d51565b9250508190555080846007016000016000828254610a059190614cb1565b9250508190555082846007016002016000828254610a239190614d51565b925050819055506000610a34611e61565b73ffffffffffffffffffffffffffffffffffffffff1683604051610a5790614db6565b60006040518083038185875af1925050503d8060008114610a94576040519150601f19603f3d011682016040523d82523d6000602084013e610a99565b606091505b5050905080610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490614e17565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610b18929190614e37565b6020604051808303816000875af1158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b9190614e75565b503373ffffffffffffffffffffffffffffffffffffffff167f2ab932704044a97dfcb4c1cbd1ddfd869c7d10bc1e42daac2e1056cbb05449b334844289600701600101548a600701600001548b60070160020154604051610bc196959493929190614ea2565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff167fb66c0615d3b6ef6e11182c9630d64a5f82fd527023c2017652c002d982ed0e1134844289600701600101548a600701600001548b60070160020154604051610c2e96959493929190614f4f565b60405180910390a2505050506000610c4584611132565b90506000670de0b6b3a76400008360070160030154610c649190614c0f565b9050600281610c739190614c80565b8210158015610c9457508260070160050160039054906101000a900460ff16155b15610db4578260060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663886f5e8e86878660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600701600101548960070160000154428b600701600201546040518963ffffffff1660e01b8152600401610d61989796959493929190614fc3565b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b5050505060018360070160050160036101000a81548160ff0219169083151502179055505b808210610f115760008360070160050160016101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff1663d51669946040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e2357600080fd5b505af1158015610e37573d6000803e3d6000fd5b505050508260070160040154836007016001016000828254610e599190614cb1565b92505081905550610eeb858673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e9d9190613e5f565b602060405180830381865afa158015610eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ede9190615056565b856007016001015461310d565b8260070160010154836007016001016000828254610f099190614cb1565b925050819055505b505050610f1c61355f565b5050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b610f9a82613568565b610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd0906150cf565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611025836114ce565b73ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad9061513b565b60405180910390fd5b60008260ff16101580156110ce575060648260ff1611155b61110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906151a7565b60405180910390fd5b818160070160050160006101000a81548160ff021916908360ff160217905550505050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600701600001548373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ed9190615056565b670de0b6b3a76400008360070160010154611206611e8a565b6112109190614c0f565b61121a9190614c80565b6112249190614c0f565b61122e9190614c80565b915050919050565b600080821161127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127190615213565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600701600001541180156112db575060008160070160010154115b61131a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113119061527f565b60405180910390fd5b600081600701600001548461132f9190614c0f565b905060008483600701600101546113469190614d51565b905080826113549190614c80565b935050505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082116113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090615213565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816007016000015411801561142a575060008160070160010154115b611469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114609061527f565b60405180910390fd5b600081600701600101548461147e9190614c0f565b905060008483600701600001546114959190614d51565b905080826114a39190614c80565b935050505092915050565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561157d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a191906152b4565b9050919050565b6115b0613040565b6115ba600061368a565b565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661164a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116419061532d565b60405180910390fd5b6000611677600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661374e565b90508073ffffffffffffffffffffffffffffffffffffffff166366faaae3898b6000600281106116aa576116a961534d565b5b60200201518c6001600281106116c3576116c261534d565b5b602002015130336040518663ffffffff1660e01b81526004016116ea9594939291906153ea565b600060405180830381600087803b15801561170457600080fd5b505af1158015611718573d6000803e3d6000fd5b50505050600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117c4613c77565b87816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505086816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505085816060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050338160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b91906152b4565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036119995760648160e0015160a0019060ff16908160ff16815250506119b1565b60328160e0015160a0019060ff16908160ff16815250505b60018160e0015160c0019015159081151581525050838160e0015160e0019015159081151581525050888160e001516000018181516119f09190614d51565b915081815250503485600160028110611a0c57611a0b61534d565b5b6020020151611a1b9190614d51565b8160e00151602001818151611a309190614d51565b9150818152505084600060028110611a4b57611a4a61534d565b5b60200201518160e00151606001818152505084600160028110611a7157611a7061534d565b5b60200201518160e00151608001818152505080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e082015181600701600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff021916908360ff16021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e08201518160050160026101000a81548160ff0219169083151502179055506101008201518160050160036101000a81548160ff02191690831515021790555050509050503073ffffffffffffffffffffffffffffffffffffffff167fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee458a34604051611dbe92919061544b565b60405180910390a28192505050979650505050505050565b611dde613040565b80600660146101000a81548161ffff021916908361ffff16021790555050565b611e06613040565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1e91906154e2565b5050509150506000811215611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f906155a9565b60405180910390fd5b6402540be40081611f7991906155c9565b91505090565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561204057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611ff6575b50505050509050919050565b606060008251905060008167ffffffffffffffff8111156120705761206f613fdf565b5b6040519080825280602002602001820160405280156120a957816020015b612096613c77565b81526020019060019003908161208e5790505b50905060005b8281101561245657600560008683815181106120ce576120cd61534d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782016040518061012001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1660ff1660ff1681526020016005820160019054906101000a900460ff161515151581526020016005820160029054906101000a900460ff161515151581526020016005820160039054906101000a900460ff1615151515815250508152505082828151811061243e5761243d61534d565b5b602002602001018190525080806001019150506120af565b508092505050919050565b612469613c77565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782016040518061012001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1660ff1660ff1681526020016005820160019054906101000a900460ff161515151581526020016005820160029054906101000a900460ff161515151581526020016005820160039054906101000a900460ff161515151581525050815250509050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285e91906154e2565b5050509150508091505090565b600660149054906101000a900461ffff1681565b6004602052816000526040600020818154811061289b57600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806007016040518061012001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1660ff1660ff1681526020016005820160019054906101000a900460ff161515151581526020016005820160029054906101000a900460ff161515151581526020016005820160039054906101000a900460ff161515151581525050905088565b612aa8613040565b80600660166101000a81548161ffff021916908361ffff16021790555050565b61271081565b600080612ad96130c7565b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060070160050160019054906101000a900460ff16612b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6790614bc0565b60405180910390fd5b60008590506000612b818883611385565b90506000612710600660149054906101000a900461ffff1661ffff1683612ba89190614c0f565b612bb29190614c80565b9050600082118015612bc45750868210155b612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90614d31565b60405180910390fd5b87846007016000016000828254612c1a9190614d51565b9250508190555081846007016001016000828254612c389190614cb1565b9250508190555081846007016002016000828254612c569190614d51565b925050819055508873ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401612c9a93929190615641565b6020604051808303816000875af1158015612cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdd9190614e75565b506000612ce8611e61565b73ffffffffffffffffffffffffffffffffffffffff1682604051612d0b90614db6565b60006040518083038185875af1925050503d8060008114612d48576040519150601f19603f3d011682016040523d82523d6000602084013e612d4d565b606091505b5050905080612d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d88906156c4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168284612db49190614cb1565b604051612dc090614db6565b60006040518083038185875af1925050503d8060008114612dfd576040519150601f19603f3d011682016040523d82523d6000602084013e612e02565b606091505b50508091505080612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f90615730565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167fb5c4deeb00ec61f7509ac91d1423c0125ef5de64d15d79c41b3cb6ef7e7daca88a854289600701600101548a600701600001548b60070160020154604051612ead96959493929190614ea2565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff167fb66c0615d3b6ef6e11182c9630d64a5f82fd527023c2017652c002d982ed0e118a854289600701600101548a600701600001548b60070160020154604051612f1a9695949392919061579c565b60405180910390a2600180965096505050505050612f3661355f565b935093915050565b612f46613040565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612fb85760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612faf9190613e5f565b60405180910390fd5b612fc18161368a565b50565b612fcc613040565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606481565b600660169054906101000a900461ffff1681565b613048613762565b73ffffffffffffffffffffffffffffffffffffffff16613066611e61565b73ffffffffffffffffffffffffffffffffffffffff16146130c557613089613762565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016130bc9190613e5f565b60405180910390fd5b565b600260015403613103576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b600081905060006064605a836131239190614c0f565b61312d9190614c80565b9050600084905060006064605a836131459190614c0f565b61314f9190614c80565b90506000600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061319f896114ce565b90506131ac898a8361376a565b8260050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506132228a600061398f565b508260030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719888c88888b3061012c426132779190614d51565b6040518863ffffffff1660e01b815260040161329896959493929190615810565b60606040518083038185885af11580156132b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132db9190615871565b50505060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016133199190613e5f565b602060405180830381865afa158015613336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335a9190615056565b905060006064600660169054906101000a900461ffff1661ffff16836133809190614c0f565b61338a9190614c80565b90506000818361339a9190614cb1565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6133c0611e61565b846040518363ffffffff1660e01b81526004016133de929190614e37565b6020604051808303816000875af11580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134219190614e75565b508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61dead836040518363ffffffff1660e01b815260040161345f929190614e37565b6020604051808303816000875af115801561347e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a29190614e75565b508560030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f630616749c0aa3ac2b8943843261fd2d07d0045dde6fe2a8b25381b8e6dc0f278d8c428c6007016002015460405161354894939291906158c4565b60405180910390a450505050505050505050505050565b60018081905550565b600080600090505b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561367f57600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061360b5761360a61534d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613672576001915050613685565b8080600101915050613570565b50600090505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061375b826000613b7f565b9050919050565b600033905090565b600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561381f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384391906152b4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390587876040518363ffffffff1660e01b8152600401613882929190615909565b602060405180830381865afa15801561389f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c391906152b4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461390457809350505050613988565b8173ffffffffffffffffffffffffffffffffffffffff1663c9c6539687876040518363ffffffff1660e01b815260040161393f929190615909565b6020604051808303816000875af115801561395e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398291906152b4565b93505050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008490508315613a06578160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b60008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e308560030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401613a67929190615909565b6020604051808303816000875af1158015613a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aaa9190615056565b03613b73578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401613b2e929190614e37565b6020604051808303816000875af1158015613b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b719190614e75565b505b60019250505092915050565b600081471015613bc85747826040517fcf479181000000000000000000000000000000000000000000000000000000008152600401613bbf92919061544b565b60405180910390fd5b763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b176020526037600983f09050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613c71576040517fb06ebf3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b92915050565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001613d56613d5c565b81525090565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600060ff1681526020016000151581526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613df082613dc5565b9050919050565b613e0081613de5565b8114613e0b57600080fd5b50565b600081359050613e1d81613df7565b92915050565b600060208284031215613e3957613e38613dbb565b5b6000613e4784828501613e0e565b91505092915050565b613e5981613de5565b82525050565b6000602082019050613e746000830184613e50565b92915050565b6000819050919050565b613e8d81613e7a565b8114613e9857600080fd5b50565b600081359050613eaa81613e84565b92915050565b60008060408385031215613ec757613ec6613dbb565b5b6000613ed585828601613e0e565b9250506020613ee685828601613e9b565b9150509250929050565b600060ff82169050919050565b613f0681613ef0565b8114613f1157600080fd5b50565b600081359050613f2381613efd565b92915050565b60008060408385031215613f4057613f3f613dbb565b5b6000613f4e85828601613e0e565b9250506020613f5f85828601613f14565b9150509250929050565b613f7281613e7a565b82525050565b6000602082019050613f8d6000830184613f69565b92915050565b60008115159050919050565b613fa881613f93565b82525050565b6000602082019050613fc36000830184613f9f565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61401782613fce565b810181811067ffffffffffffffff8211171561403657614035613fdf565b5b80604052505050565b6000614049613db1565b9050614055828261400e565b919050565b600067ffffffffffffffff82111561407557614074613fdf565b5b602082029050919050565b600080fd5b600080fd5b600067ffffffffffffffff8211156140a5576140a4613fdf565b5b6140ae82613fce565b9050602081019050919050565b82818337600083830152505050565b60006140dd6140d88461408a565b61403f565b9050828152602081018484840111156140f9576140f8614085565b5b6141048482856140bb565b509392505050565b600082601f83011261412157614120613fc9565b5b81356141318482602086016140ca565b91505092915050565b600061414d6141488461405a565b61403f565b9050806020840283018581111561416757614166614080565b5b835b818110156141ae57803567ffffffffffffffff81111561418c5761418b613fc9565b5b808601614199898261410c565b85526020850194505050602081019050614169565b5050509392505050565b600082601f8301126141cd576141cc613fc9565b5b60026141da84828561413a565b91505092915050565b600067ffffffffffffffff8211156141fe576141fd613fdf565b5b602082029050919050565b600061421c614217846141e3565b61403f565b9050806020840283018581111561423657614235614080565b5b835b8181101561425f578061424b8882613e9b565b845260208401935050602081019050614238565b5050509392505050565b600082601f83011261427e5761427d613fc9565b5b600261428b848285614209565b91505092915050565b61429d81613f93565b81146142a857600080fd5b50565b6000813590506142ba81614294565b92915050565b6000806000806000806000610100888a0312156142e0576142df613dbb565b5b600088013567ffffffffffffffff8111156142fe576142fd613dc0565b5b61430a8a828b016141b8565b975050602061431b8a828b01613e9b565b965050604061432c8a828b01613e0e565b955050606061433d8a828b01613e0e565b945050608061434e8a828b01613e0e565b93505060a061435f8a828b01614269565b92505060e06143708a828b016142ab565b91505092959891949750929550565b600061ffff82169050919050565b6143968161437f565b81146143a157600080fd5b50565b6000813590506143b38161438d565b92915050565b6000602082840312156143cf576143ce613dbb565b5b60006143dd848285016143a4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61441b81613de5565b82525050565b600061442d8383614412565b60208301905092915050565b6000602082019050919050565b6000614451826143e6565b61445b81856143f1565b935061446683614402565b8060005b8381101561449757815161447e8882614421565b975061448983614439565b92505060018101905061446a565b5085935050505092915050565b600060208201905081810360008301526144be8184614446565b905092915050565b600067ffffffffffffffff8211156144e1576144e0613fdf565b5b602082029050602081019050919050565b6000614505614500846144c6565b61403f565b9050808382526020820190506020840283018581111561452857614527614080565b5b835b81811015614551578061453d8882613e0e565b84526020840193505060208101905061452a565b5050509392505050565b600082601f8301126145705761456f613fc9565b5b81356145808482602086016144f2565b91505092915050565b60006020828403121561459f5761459e613dbb565b5b600082013567ffffffffffffffff8111156145bd576145bc613dc0565b5b6145c98482850161455b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61460781613e7a565b82525050565b61461681613ef0565b82525050565b61462581613f93565b82525050565b6101208201600082015161464260008501826145fe565b50602082015161465560208501826145fe565b50604082015161466860408501826145fe565b50606082015161467b60608501826145fe565b50608082015161468e60808501826145fe565b5060a08201516146a160a085018261460d565b5060c08201516146b460c085018261461c565b5060e08201516146c760e085018261461c565b506101008201516146dc61010085018261461c565b50505050565b610200820160008201516146f96000850182614412565b50602082015161470c6020850182614412565b50604082015161471f6040850182614412565b5060608201516147326060850182614412565b5060808201516147456080850182614412565b5060a082015161475860a0850182614412565b5060c082015161476b60c0850182614412565b5060e082015161477e60e085018261462b565b50505050565b600061479083836146e2565b6102008301905092915050565b6000602082019050919050565b60006147b5826145d2565b6147bf81856145dd565b93506147ca836145ee565b8060005b838110156147fb5781516147e28882614784565b97506147ed8361479d565b9250506001810190506147ce565b5085935050505092915050565b6000602082019050818103600083015261482281846147aa565b905092915050565b610200820160008201516148416000850182614412565b5060208201516148546020850182614412565b5060408201516148676040850182614412565b50606082015161487a6060850182614412565b50608082015161488d6080850182614412565b5060a08201516148a060a0850182614412565b5060c08201516148b360c0850182614412565b5060e08201516148c660e085018261462b565b50505050565b6000610200820190506148e2600083018461482a565b92915050565b6000819050919050565b6148fb816148e8565b82525050565b600060208201905061491660008301846148f2565b92915050565b6149258161437f565b82525050565b6000602082019050614940600083018461491c565b92915050565b6101208201600082015161495d60008501826145fe565b50602082015161497060208501826145fe565b50604082015161498360408501826145fe565b50606082015161499660608501826145fe565b5060808201516149a960808501826145fe565b5060a08201516149bc60a085018261460d565b5060c08201516149cf60c085018261461c565b5060e08201516149e260e085018261461c565b506101008201516149f761010085018261461c565b50505050565b600061020082019050614a13600083018b613e50565b614a20602083018a613e50565b614a2d6040830189613e50565b614a3a6060830188613e50565b614a476080830187613e50565b614a5460a0830186613e50565b614a6160c0830185613e50565b614a6e60e0830184614946565b9998505050505050505050565b600080600060608486031215614a9457614a93613dbb565b5b6000614aa286828701613e0e565b9350506020614ab386828701613e9b565b9250506040614ac486828701613e9b565b9150509250925092565b6000604082019050614ae36000830185613f9f565b614af06020830184613f9f565b9392505050565b600082825260208201905092915050565b7f496e76616c6964206275792076616c7565000000000000000000000000000000600082015250565b6000614b3e601183614af7565b9150614b4982614b08565b602082019050919050565b60006020820190508181036000830152614b6d81614b31565b9050919050565b7f54726164696e67206e6f74206163746976650000000000000000000000000000600082015250565b6000614baa601283614af7565b9150614bb582614b74565b602082019050919050565b60006020820190508181036000830152614bd981614b9d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c1a82613e7a565b9150614c2583613e7a565b9250828202614c3381613e7a565b91508282048414831517614c4a57614c49614be0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c8b82613e7a565b9150614c9683613e7a565b925082614ca657614ca5614c51565b5b828204905092915050565b6000614cbc82613e7a565b9150614cc783613e7a565b9250828203905081811115614cdf57614cde614be0565b5b92915050565b7f536c69707061676520746f6f2068696768000000000000000000000000000000600082015250565b6000614d1b601183614af7565b9150614d2682614ce5565b602082019050919050565b60006020820190508181036000830152614d4a81614d0e565b9050919050565b6000614d5c82613e7a565b9150614d6783613e7a565b9250828201905080821115614d7f57614d7e614be0565b5b92915050565b600081905092915050565b50565b6000614da0600083614d85565b9150614dab82614d90565b600082019050919050565b6000614dc182614d93565b9150819050919050565b7f66656520455448207472616e73666572206661696c6564000000000000000000600082015250565b6000614e01601783614af7565b9150614e0c82614dcb565b602082019050919050565b60006020820190508181036000830152614e3081614df4565b9050919050565b6000604082019050614e4c6000830185613e50565b614e596020830184613f69565b9392505050565b600081519050614e6f81614294565b92915050565b600060208284031215614e8b57614e8a613dbb565b5b6000614e9984828501614e60565b91505092915050565b600060c082019050614eb76000830189613f69565b614ec46020830188613f69565b614ed16040830187613f69565b614ede6060830186613f69565b614eeb6080830185613f69565b614ef860a0830184613f69565b979650505050505050565b7f6275790000000000000000000000000000000000000000000000000000000000600082015250565b6000614f39600383614af7565b9150614f4482614f03565b602082019050919050565b600060e082019050614f646000830189613f69565b614f716020830188613f69565b614f7e6040830187613f69565b614f8b6060830186613f69565b614f986080830185613f69565b81810360a0830152614fa981614f2c565b9050614fb860c0830184613f69565b979650505050505050565b600061010082019050614fd9600083018b613e50565b614fe6602083018a613e50565b614ff36040830189613e50565b6150006060830188613e50565b61500d6080830187613f69565b61501a60a0830186613f69565b61502760c0830185613f69565b61503460e0830184613f69565b9998505050505050505050565b60008151905061505081613e84565b92915050565b60006020828403121561506c5761506b613dbb565b5b600061507a84828501615041565b91505092915050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b60006150b9600c83614af7565b91506150c482615083565b602082019050919050565b600060208201905081810360008301526150e8816150ac565b9050919050565b7f6e6f20637573746f6d20626173652073656c6563746564000000000000000000600082015250565b6000615125601783614af7565b9150615130826150ef565b602082019050919050565b6000602082019050818103600083015261515481615118565b9050919050565b7f696e76616c696420706572000000000000000000000000000000000000000000600082015250565b6000615191600b83614af7565b915061519c8261515b565b602082019050919050565b600060208201905081810360008301526151c081615184565b9050919050565b7f496e76616c696420696e70757420616d6f756e74000000000000000000000000600082015250565b60006151fd601483614af7565b9150615208826151c7565b602082019050919050565b6000602082019050818103600083015261522c816151f0565b9050919050565b7f496e76616c696420726573657276657300000000000000000000000000000000600082015250565b6000615269601083614af7565b915061527482615233565b602082019050919050565b600060208201905081810360008301526152988161525c565b9050919050565b6000815190506152ae81613df7565b92915050565b6000602082840312156152ca576152c9613dbb565b5b60006152d88482850161529f565b91505092915050565b7f6e6f74206465706c6f7965720000000000000000000000000000000000000000600082015250565b6000615317600c83614af7565b9150615322826152e1565b602082019050919050565b600060208201905081810360008301526153468161530a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b60005b838110156153a557808201518184015260208101905061538a565b60008484015250505050565b60006153bc8261537c565b6153c68185614af7565b93506153d6818560208601615387565b6153df81613fce565b840191505092915050565b600060a0820190506153ff6000830188613f69565b818103602083015261541181876153b1565b9050818103604083015261542581866153b1565b90506154346060830185613e50565b6154416080830184613e50565b9695505050505050565b60006040820190506154606000830185613f69565b61546d6020830184613f69565b9392505050565b600069ffffffffffffffffffff82169050919050565b61549381615474565b811461549e57600080fd5b50565b6000815190506154b08161548a565b92915050565b6154bf816148e8565b81146154ca57600080fd5b50565b6000815190506154dc816154b6565b92915050565b600080600080600060a086880312156154fe576154fd613dbb565b5b600061550c888289016154a1565b955050602061551d888289016154cd565b945050604061552e88828901615041565b935050606061553f88828901615041565b9250506080615550888289016154a1565b9150509295509295909350565b7f50726963652063616e6e6f74206265206e656761746976650000000000000000600082015250565b6000615593601883614af7565b915061559e8261555d565b602082019050919050565b600060208201905081810360008301526155c281615586565b9050919050565b60006155d4826148e8565b91506155df836148e8565b92508282026155ed816148e8565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561562557615624614be0565b5b828205841483151761563a57615639614be0565b5b5092915050565b60006060820190506156566000830186613e50565b6156636020830185613e50565b6156706040830184613f69565b949350505050565b7f6f776e7220455448207472616e73666572206661696c65640000000000000000600082015250565b60006156ae601883614af7565b91506156b982615678565b602082019050919050565b600060208201905081810360008301526156dd816156a1565b9050919050565b7f73656c6c657220455448207472616e73666572206661696c6564000000000000600082015250565b600061571a601a83614af7565b9150615725826156e4565b602082019050919050565b600060208201905081810360008301526157498161570d565b9050919050565b7f73656c6c00000000000000000000000000000000000000000000000000000000600082015250565b6000615786600483614af7565b915061579182615750565b602082019050919050565b600060e0820190506157b16000830189613f69565b6157be6020830188613f69565b6157cb6040830187613f69565b6157d86060830186613f69565b6157e56080830185613f69565b81810360a08301526157f681615779565b905061580560c0830184613f69565b979650505050505050565b600060c0820190506158256000830189613e50565b6158326020830188613f69565b61583f6040830187613f69565b61584c6060830186613f69565b6158596080830185613e50565b61586660a0830184613f69565b979650505050505050565b60008060006060848603121561588a57615889613dbb565b5b600061589886828701615041565b93505060206158a986828701615041565b92505060406158ba86828701615041565b9150509250925092565b60006080820190506158d96000830187613f69565b6158e66020830186613f69565b6158f36040830185613f69565b6159006060830184613f69565b95945050505050565b600060408201905061591e6000830185613e50565b61592b6020830184613e50565b939250505056fea264697066735822122020e14f8fadf9e27339a316bdb1ee58682474847deae8e98d387440223801d60c64736f6c63430008140033000000000000000000000000be97f14f11f97f7299fefc82926bfa8e339badf80000000000000000000000000000000000000000000000000000000000000032
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80638da5cb5b11610102578063c3d2c3c111610095578063f2fde38b11610064578063f2fde38b1461071e578063f315df8614610747578063f85fc0ab14610770578063fa7e03651461079b576101d8565b8063c3d2c3c114610648578063ceeee9df1461068c578063e1f1c4a7146106b5578063e4e57b9e146106e0576101d8565b8063b536b78e116100d1578063b536b78e14610578578063bea4dfb5146105b5578063c2e4d08f146105e0578063c34223fb1461060b576101d8565b80638da5cb5b146104a85780638e15f473146104d35780639c8c3648146104fe578063a1e1fbc21461053b576101d8565b80635c60da1b1161017a578063715018a611610149578063715018a61461040f57806372521cc3146104265780637fec435314610456578063880f40391461047f576101d8565b80635c60da1b1461032d5780636832e5de146103585780636d090218146103955780636f3eebae146103d2576101d8565b80630c10fd0f116101b65780630c10fd0f1461024d578063172083ce1461028a5780632c612832146102b35780634d6dcae1146102f0576101d8565b8063025b22bc146101dd57806303fd2a45146102065780630752881a14610231575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190613e23565b6107c6565b005b34801561021257600080fd5b5061021b61084b565b6040516102289190613e5f565b60405180910390f35b61024b60048036038101906102469190613eb0565b610851565b005b34801561025957600080fd5b50610274600480360381019061026f9190613e23565b610f20565b6040516102819190613e5f565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190613f29565b610f91565b005b3480156102bf57600080fd5b506102da60048036038101906102d59190613e23565b611132565b6040516102e79190613f78565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613eb0565b611236565b6040516103249190613f78565b60405180910390f35b34801561033957600080fd5b5061034261135f565b60405161034f9190613e5f565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613eb0565b611385565b60405161038c9190613f78565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b79190613e23565b6114ae565b6040516103c99190613fae565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613e23565b6114ce565b6040516104069190613e5f565b60405180910390f35b34801561041b57600080fd5b506104246115a8565b005b610440600480360381019061043b91906142c0565b6115bc565b60405161044d9190613e5f565b60405180910390f35b34801561046257600080fd5b5061047d600480360381019061047891906143b9565b611dd6565b005b34801561048b57600080fd5b506104a660048036038101906104a19190613e23565b611dfe565b005b3480156104b457600080fd5b506104bd611e61565b6040516104ca9190613e5f565b60405180910390f35b3480156104df57600080fd5b506104e8611e8a565b6040516104f59190613f78565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190613e23565b611f7f565b60405161053291906144a4565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190614589565b61204c565b60405161056f9190614808565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613e23565b612461565b6040516105ac91906148cc565b60405180910390f35b3480156105c157600080fd5b506105ca6127ca565b6040516105d79190614901565b60405180910390f35b3480156105ec57600080fd5b506105f561286b565b604051610602919061492b565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613eb0565b61287f565b60405161063f9190613e5f565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190613e23565b6128cd565b6040516106839897969594939291906149fd565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae91906143b9565b612aa0565b005b3480156106c157600080fd5b506106ca612ac8565b6040516106d79190613f78565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190614a7b565b612ace565b604051610715929190614ace565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190613e23565b612f3e565b005b34801561075357600080fd5b5061076e60048036038101906107699190613e23565b612fc4565b005b34801561077c57600080fd5b50610785613027565b6040516107929190613f78565b60405180910390f35b3480156107a757600080fd5b506107b061302c565b6040516107bd919061492b565b60405180910390f35b6107ce613040565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361080757600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b6108596130c7565b6000341161089c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089390614b54565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060070160050160019054906101000a900460ff16610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90614bc0565b60405180910390fd5b60003490506000612710600660149054906101000a900461ffff1661ffff168361095d9190614c0f565b6109679190614c80565b9050600061098086838561097b9190614cb1565b611236565b9050848110156109c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bc90614d31565b60405180910390fd5b81836109d19190614cb1565b8460070160010160008282546109e79190614d51565b9250508190555080846007016000016000828254610a059190614cb1565b9250508190555082846007016002016000828254610a239190614d51565b925050819055506000610a34611e61565b73ffffffffffffffffffffffffffffffffffffffff1683604051610a5790614db6565b60006040518083038185875af1925050503d8060008114610a94576040519150601f19603f3d011682016040523d82523d6000602084013e610a99565b606091505b5050905080610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490614e17565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610b18929190614e37565b6020604051808303816000875af1158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b9190614e75565b503373ffffffffffffffffffffffffffffffffffffffff167f2ab932704044a97dfcb4c1cbd1ddfd869c7d10bc1e42daac2e1056cbb05449b334844289600701600101548a600701600001548b60070160020154604051610bc196959493929190614ea2565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff167fb66c0615d3b6ef6e11182c9630d64a5f82fd527023c2017652c002d982ed0e1134844289600701600101548a600701600001548b60070160020154604051610c2e96959493929190614f4f565b60405180910390a2505050506000610c4584611132565b90506000670de0b6b3a76400008360070160030154610c649190614c0f565b9050600281610c739190614c80565b8210158015610c9457508260070160050160039054906101000a900460ff16155b15610db4578260060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663886f5e8e86878660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600701600101548960070160000154428b600701600201546040518963ffffffff1660e01b8152600401610d61989796959493929190614fc3565b600060405180830381600087803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b5050505060018360070160050160036101000a81548160ff0219169083151502179055505b808210610f115760008360070160050160016101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff1663d51669946040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e2357600080fd5b505af1158015610e37573d6000803e3d6000fd5b505050508260070160040154836007016001016000828254610e599190614cb1565b92505081905550610eeb858673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e9d9190613e5f565b602060405180830381865afa158015610eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ede9190615056565b856007016001015461310d565b8260070160010154836007016001016000828254610f099190614cb1565b925050819055505b505050610f1c61355f565b5050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b610f9a82613568565b610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd0906150cf565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611025836114ce565b73ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad9061513b565b60405180910390fd5b60008260ff16101580156110ce575060648260ff1611155b61110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906151a7565b60405180910390fd5b818160070160050160006101000a81548160ff021916908360ff160217905550505050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600701600001548373ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ed9190615056565b670de0b6b3a76400008360070160010154611206611e8a565b6112109190614c0f565b61121a9190614c80565b6112249190614c0f565b61122e9190614c80565b915050919050565b600080821161127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127190615213565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600701600001541180156112db575060008160070160010154115b61131a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113119061527f565b60405180910390fd5b600081600701600001548461132f9190614c0f565b905060008483600701600101546113469190614d51565b905080826113549190614c80565b935050505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082116113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090615213565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816007016000015411801561142a575060008160070160010154115b611469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114609061527f565b60405180910390fd5b600081600701600101548461147e9190614c0f565b905060008483600701600001546114959190614d51565b905080826114a39190614c80565b935050505092915050565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561157d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a191906152b4565b9050919050565b6115b0613040565b6115ba600061368a565b565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661164a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116419061532d565b60405180910390fd5b6000611677600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661374e565b90508073ffffffffffffffffffffffffffffffffffffffff166366faaae3898b6000600281106116aa576116a961534d565b5b60200201518c6001600281106116c3576116c261534d565b5b602002015130336040518663ffffffff1660e01b81526004016116ea9594939291906153ea565b600060405180830381600087803b15801561170457600080fd5b505af1158015611718573d6000803e3d6000fd5b50505050600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117c4613c77565b87816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505086816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505085816060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050338160c0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194b91906152b4565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036119995760648160e0015160a0019060ff16908160ff16815250506119b1565b60328160e0015160a0019060ff16908160ff16815250505b60018160e0015160c0019015159081151581525050838160e0015160e0019015159081151581525050888160e001516000018181516119f09190614d51565b915081815250503485600160028110611a0c57611a0b61534d565b5b6020020151611a1b9190614d51565b8160e00151602001818151611a309190614d51565b9150818152505084600060028110611a4b57611a4a61534d565b5b60200201518160e00151606001818152505084600160028110611a7157611a7061534d565b5b60200201518160e00151608001818152505080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e082015181600701600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff021916908360ff16021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e08201518160050160026101000a81548160ff0219169083151502179055506101008201518160050160036101000a81548160ff02191690831515021790555050509050503073ffffffffffffffffffffffffffffffffffffffff167fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee458a34604051611dbe92919061544b565b60405180910390a28192505050979650505050505050565b611dde613040565b80600660146101000a81548161ffff021916908361ffff16021790555050565b611e06613040565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1e91906154e2565b5050509150506000811215611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f906155a9565b60405180910390fd5b6402540be40081611f7991906155c9565b91505090565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561204057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611ff6575b50505050509050919050565b606060008251905060008167ffffffffffffffff8111156120705761206f613fdf565b5b6040519080825280602002602001820160405280156120a957816020015b612096613c77565b81526020019060019003908161208e5790505b50905060005b8281101561245657600560008683815181106120ce576120cd61534d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782016040518061012001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1660ff1660ff1681526020016005820160019054906101000a900460ff161515151581526020016005820160029054906101000a900460ff161515151581526020016005820160039054906101000a900460ff1615151515815250508152505082828151811061243e5761243d61534d565b5b602002602001018190525080806001019150506120af565b508092505050919050565b612469613c77565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782016040518061012001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1660ff1660ff1681526020016005820160019054906101000a900460ff161515151581526020016005820160029054906101000a900460ff161515151581526020016005820160039054906101000a900460ff161515151581525050815250509050919050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285e91906154e2565b5050509150508091505090565b600660149054906101000a900461ffff1681565b6004602052816000526040600020818154811061289b57600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806007016040518061012001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1660ff1660ff1681526020016005820160019054906101000a900460ff161515151581526020016005820160029054906101000a900460ff161515151581526020016005820160039054906101000a900460ff161515151581525050905088565b612aa8613040565b80600660166101000a81548161ffff021916908361ffff16021790555050565b61271081565b600080612ad96130c7565b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060070160050160019054906101000a900460ff16612b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6790614bc0565b60405180910390fd5b60008590506000612b818883611385565b90506000612710600660149054906101000a900461ffff1661ffff1683612ba89190614c0f565b612bb29190614c80565b9050600082118015612bc45750868210155b612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90614d31565b60405180910390fd5b87846007016000016000828254612c1a9190614d51565b9250508190555081846007016001016000828254612c389190614cb1565b9250508190555081846007016002016000828254612c569190614d51565b925050819055508873ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401612c9a93929190615641565b6020604051808303816000875af1158015612cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdd9190614e75565b506000612ce8611e61565b73ffffffffffffffffffffffffffffffffffffffff1682604051612d0b90614db6565b60006040518083038185875af1925050503d8060008114612d48576040519150601f19603f3d011682016040523d82523d6000602084013e612d4d565b606091505b5050905080612d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d88906156c4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168284612db49190614cb1565b604051612dc090614db6565b60006040518083038185875af1925050503d8060008114612dfd576040519150601f19603f3d011682016040523d82523d6000602084013e612e02565b606091505b50508091505080612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f90615730565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167fb5c4deeb00ec61f7509ac91d1423c0125ef5de64d15d79c41b3cb6ef7e7daca88a854289600701600101548a600701600001548b60070160020154604051612ead96959493929190614ea2565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff167fb66c0615d3b6ef6e11182c9630d64a5f82fd527023c2017652c002d982ed0e118a854289600701600101548a600701600001548b60070160020154604051612f1a9695949392919061579c565b60405180910390a2600180965096505050505050612f3661355f565b935093915050565b612f46613040565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612fb85760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612faf9190613e5f565b60405180910390fd5b612fc18161368a565b50565b612fcc613040565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606481565b600660169054906101000a900461ffff1681565b613048613762565b73ffffffffffffffffffffffffffffffffffffffff16613066611e61565b73ffffffffffffffffffffffffffffffffffffffff16146130c557613089613762565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016130bc9190613e5f565b60405180910390fd5b565b600260015403613103576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b600081905060006064605a836131239190614c0f565b61312d9190614c80565b9050600084905060006064605a836131459190614c0f565b61314f9190614c80565b90506000600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600061319f896114ce565b90506131ac898a8361376a565b8260050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506132228a600061398f565b508260030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719888c88888b3061012c426132779190614d51565b6040518863ffffffff1660e01b815260040161329896959493929190615810565b60606040518083038185885af11580156132b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132db9190615871565b50505060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016133199190613e5f565b602060405180830381865afa158015613336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335a9190615056565b905060006064600660169054906101000a900461ffff1661ffff16836133809190614c0f565b61338a9190614c80565b90506000818361339a9190614cb1565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6133c0611e61565b846040518363ffffffff1660e01b81526004016133de929190614e37565b6020604051808303816000875af11580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134219190614e75565b508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61dead836040518363ffffffff1660e01b815260040161345f929190614e37565b6020604051808303816000875af115801561347e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a29190614e75565b508560030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f630616749c0aa3ac2b8943843261fd2d07d0045dde6fe2a8b25381b8e6dc0f278d8c428c6007016002015460405161354894939291906158c4565b60405180910390a450505050505050505050505050565b60018081905550565b600080600090505b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561367f57600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061360b5761360a61534d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613672576001915050613685565b8080600101915050613570565b50600090505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061375b826000613b7f565b9050919050565b600033905090565b600080600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561381f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384391906152b4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390587876040518363ffffffff1660e01b8152600401613882929190615909565b602060405180830381865afa15801561389f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c391906152b4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461390457809350505050613988565b8173ffffffffffffffffffffffffffffffffffffffff1663c9c6539687876040518363ffffffff1660e01b815260040161393f929190615909565b6020604051808303816000875af115801561395e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398291906152b4565b93505050505b9392505050565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008490508315613a06578160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b60008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e308560030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401613a67929190615909565b6020604051808303816000875af1158015613a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aaa9190615056565b03613b73578073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401613b2e929190614e37565b6020604051808303816000875af1158015613b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b719190614e75565b505b60019250505092915050565b600081471015613bc85747826040517fcf479181000000000000000000000000000000000000000000000000000000008152600401613bbf92919061544b565b60405180910390fd5b763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b176020526037600983f09050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613c71576040517fb06ebf3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b92915050565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001613d56613d5c565b81525090565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600060ff1681526020016000151581526020016000151581526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613df082613dc5565b9050919050565b613e0081613de5565b8114613e0b57600080fd5b50565b600081359050613e1d81613df7565b92915050565b600060208284031215613e3957613e38613dbb565b5b6000613e4784828501613e0e565b91505092915050565b613e5981613de5565b82525050565b6000602082019050613e746000830184613e50565b92915050565b6000819050919050565b613e8d81613e7a565b8114613e9857600080fd5b50565b600081359050613eaa81613e84565b92915050565b60008060408385031215613ec757613ec6613dbb565b5b6000613ed585828601613e0e565b9250506020613ee685828601613e9b565b9150509250929050565b600060ff82169050919050565b613f0681613ef0565b8114613f1157600080fd5b50565b600081359050613f2381613efd565b92915050565b60008060408385031215613f4057613f3f613dbb565b5b6000613f4e85828601613e0e565b9250506020613f5f85828601613f14565b9150509250929050565b613f7281613e7a565b82525050565b6000602082019050613f8d6000830184613f69565b92915050565b60008115159050919050565b613fa881613f93565b82525050565b6000602082019050613fc36000830184613f9f565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61401782613fce565b810181811067ffffffffffffffff8211171561403657614035613fdf565b5b80604052505050565b6000614049613db1565b9050614055828261400e565b919050565b600067ffffffffffffffff82111561407557614074613fdf565b5b602082029050919050565b600080fd5b600080fd5b600067ffffffffffffffff8211156140a5576140a4613fdf565b5b6140ae82613fce565b9050602081019050919050565b82818337600083830152505050565b60006140dd6140d88461408a565b61403f565b9050828152602081018484840111156140f9576140f8614085565b5b6141048482856140bb565b509392505050565b600082601f83011261412157614120613fc9565b5b81356141318482602086016140ca565b91505092915050565b600061414d6141488461405a565b61403f565b9050806020840283018581111561416757614166614080565b5b835b818110156141ae57803567ffffffffffffffff81111561418c5761418b613fc9565b5b808601614199898261410c565b85526020850194505050602081019050614169565b5050509392505050565b600082601f8301126141cd576141cc613fc9565b5b60026141da84828561413a565b91505092915050565b600067ffffffffffffffff8211156141fe576141fd613fdf565b5b602082029050919050565b600061421c614217846141e3565b61403f565b9050806020840283018581111561423657614235614080565b5b835b8181101561425f578061424b8882613e9b565b845260208401935050602081019050614238565b5050509392505050565b600082601f83011261427e5761427d613fc9565b5b600261428b848285614209565b91505092915050565b61429d81613f93565b81146142a857600080fd5b50565b6000813590506142ba81614294565b92915050565b6000806000806000806000610100888a0312156142e0576142df613dbb565b5b600088013567ffffffffffffffff8111156142fe576142fd613dc0565b5b61430a8a828b016141b8565b975050602061431b8a828b01613e9b565b965050604061432c8a828b01613e0e565b955050606061433d8a828b01613e0e565b945050608061434e8a828b01613e0e565b93505060a061435f8a828b01614269565b92505060e06143708a828b016142ab565b91505092959891949750929550565b600061ffff82169050919050565b6143968161437f565b81146143a157600080fd5b50565b6000813590506143b38161438d565b92915050565b6000602082840312156143cf576143ce613dbb565b5b60006143dd848285016143a4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61441b81613de5565b82525050565b600061442d8383614412565b60208301905092915050565b6000602082019050919050565b6000614451826143e6565b61445b81856143f1565b935061446683614402565b8060005b8381101561449757815161447e8882614421565b975061448983614439565b92505060018101905061446a565b5085935050505092915050565b600060208201905081810360008301526144be8184614446565b905092915050565b600067ffffffffffffffff8211156144e1576144e0613fdf565b5b602082029050602081019050919050565b6000614505614500846144c6565b61403f565b9050808382526020820190506020840283018581111561452857614527614080565b5b835b81811015614551578061453d8882613e0e565b84526020840193505060208101905061452a565b5050509392505050565b600082601f8301126145705761456f613fc9565b5b81356145808482602086016144f2565b91505092915050565b60006020828403121561459f5761459e613dbb565b5b600082013567ffffffffffffffff8111156145bd576145bc613dc0565b5b6145c98482850161455b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61460781613e7a565b82525050565b61461681613ef0565b82525050565b61462581613f93565b82525050565b6101208201600082015161464260008501826145fe565b50602082015161465560208501826145fe565b50604082015161466860408501826145fe565b50606082015161467b60608501826145fe565b50608082015161468e60808501826145fe565b5060a08201516146a160a085018261460d565b5060c08201516146b460c085018261461c565b5060e08201516146c760e085018261461c565b506101008201516146dc61010085018261461c565b50505050565b610200820160008201516146f96000850182614412565b50602082015161470c6020850182614412565b50604082015161471f6040850182614412565b5060608201516147326060850182614412565b5060808201516147456080850182614412565b5060a082015161475860a0850182614412565b5060c082015161476b60c0850182614412565b5060e082015161477e60e085018261462b565b50505050565b600061479083836146e2565b6102008301905092915050565b6000602082019050919050565b60006147b5826145d2565b6147bf81856145dd565b93506147ca836145ee565b8060005b838110156147fb5781516147e28882614784565b97506147ed8361479d565b9250506001810190506147ce565b5085935050505092915050565b6000602082019050818103600083015261482281846147aa565b905092915050565b610200820160008201516148416000850182614412565b5060208201516148546020850182614412565b5060408201516148676040850182614412565b50606082015161487a6060850182614412565b50608082015161488d6080850182614412565b5060a08201516148a060a0850182614412565b5060c08201516148b360c0850182614412565b5060e08201516148c660e085018261462b565b50505050565b6000610200820190506148e2600083018461482a565b92915050565b6000819050919050565b6148fb816148e8565b82525050565b600060208201905061491660008301846148f2565b92915050565b6149258161437f565b82525050565b6000602082019050614940600083018461491c565b92915050565b6101208201600082015161495d60008501826145fe565b50602082015161497060208501826145fe565b50604082015161498360408501826145fe565b50606082015161499660608501826145fe565b5060808201516149a960808501826145fe565b5060a08201516149bc60a085018261460d565b5060c08201516149cf60c085018261461c565b5060e08201516149e260e085018261461c565b506101008201516149f761010085018261461c565b50505050565b600061020082019050614a13600083018b613e50565b614a20602083018a613e50565b614a2d6040830189613e50565b614a3a6060830188613e50565b614a476080830187613e50565b614a5460a0830186613e50565b614a6160c0830185613e50565b614a6e60e0830184614946565b9998505050505050505050565b600080600060608486031215614a9457614a93613dbb565b5b6000614aa286828701613e0e565b9350506020614ab386828701613e9b565b9250506040614ac486828701613e9b565b9150509250925092565b6000604082019050614ae36000830185613f9f565b614af06020830184613f9f565b9392505050565b600082825260208201905092915050565b7f496e76616c6964206275792076616c7565000000000000000000000000000000600082015250565b6000614b3e601183614af7565b9150614b4982614b08565b602082019050919050565b60006020820190508181036000830152614b6d81614b31565b9050919050565b7f54726164696e67206e6f74206163746976650000000000000000000000000000600082015250565b6000614baa601283614af7565b9150614bb582614b74565b602082019050919050565b60006020820190508181036000830152614bd981614b9d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c1a82613e7a565b9150614c2583613e7a565b9250828202614c3381613e7a565b91508282048414831517614c4a57614c49614be0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c8b82613e7a565b9150614c9683613e7a565b925082614ca657614ca5614c51565b5b828204905092915050565b6000614cbc82613e7a565b9150614cc783613e7a565b9250828203905081811115614cdf57614cde614be0565b5b92915050565b7f536c69707061676520746f6f2068696768000000000000000000000000000000600082015250565b6000614d1b601183614af7565b9150614d2682614ce5565b602082019050919050565b60006020820190508181036000830152614d4a81614d0e565b9050919050565b6000614d5c82613e7a565b9150614d6783613e7a565b9250828201905080821115614d7f57614d7e614be0565b5b92915050565b600081905092915050565b50565b6000614da0600083614d85565b9150614dab82614d90565b600082019050919050565b6000614dc182614d93565b9150819050919050565b7f66656520455448207472616e73666572206661696c6564000000000000000000600082015250565b6000614e01601783614af7565b9150614e0c82614dcb565b602082019050919050565b60006020820190508181036000830152614e3081614df4565b9050919050565b6000604082019050614e4c6000830185613e50565b614e596020830184613f69565b9392505050565b600081519050614e6f81614294565b92915050565b600060208284031215614e8b57614e8a613dbb565b5b6000614e9984828501614e60565b91505092915050565b600060c082019050614eb76000830189613f69565b614ec46020830188613f69565b614ed16040830187613f69565b614ede6060830186613f69565b614eeb6080830185613f69565b614ef860a0830184613f69565b979650505050505050565b7f6275790000000000000000000000000000000000000000000000000000000000600082015250565b6000614f39600383614af7565b9150614f4482614f03565b602082019050919050565b600060e082019050614f646000830189613f69565b614f716020830188613f69565b614f7e6040830187613f69565b614f8b6060830186613f69565b614f986080830185613f69565b81810360a0830152614fa981614f2c565b9050614fb860c0830184613f69565b979650505050505050565b600061010082019050614fd9600083018b613e50565b614fe6602083018a613e50565b614ff36040830189613e50565b6150006060830188613e50565b61500d6080830187613f69565b61501a60a0830186613f69565b61502760c0830185613f69565b61503460e0830184613f69565b9998505050505050505050565b60008151905061505081613e84565b92915050565b60006020828403121561506c5761506b613dbb565b5b600061507a84828501615041565b91505092915050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b60006150b9600c83614af7565b91506150c482615083565b602082019050919050565b600060208201905081810360008301526150e8816150ac565b9050919050565b7f6e6f20637573746f6d20626173652073656c6563746564000000000000000000600082015250565b6000615125601783614af7565b9150615130826150ef565b602082019050919050565b6000602082019050818103600083015261515481615118565b9050919050565b7f696e76616c696420706572000000000000000000000000000000000000000000600082015250565b6000615191600b83614af7565b915061519c8261515b565b602082019050919050565b600060208201905081810360008301526151c081615184565b9050919050565b7f496e76616c696420696e70757420616d6f756e74000000000000000000000000600082015250565b60006151fd601483614af7565b9150615208826151c7565b602082019050919050565b6000602082019050818103600083015261522c816151f0565b9050919050565b7f496e76616c696420726573657276657300000000000000000000000000000000600082015250565b6000615269601083614af7565b915061527482615233565b602082019050919050565b600060208201905081810360008301526152988161525c565b9050919050565b6000815190506152ae81613df7565b92915050565b6000602082840312156152ca576152c9613dbb565b5b60006152d88482850161529f565b91505092915050565b7f6e6f74206465706c6f7965720000000000000000000000000000000000000000600082015250565b6000615317600c83614af7565b9150615322826152e1565b602082019050919050565b600060208201905081810360008301526153468161530a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b60005b838110156153a557808201518184015260208101905061538a565b60008484015250505050565b60006153bc8261537c565b6153c68185614af7565b93506153d6818560208601615387565b6153df81613fce565b840191505092915050565b600060a0820190506153ff6000830188613f69565b818103602083015261541181876153b1565b9050818103604083015261542581866153b1565b90506154346060830185613e50565b6154416080830184613e50565b9695505050505050565b60006040820190506154606000830185613f69565b61546d6020830184613f69565b9392505050565b600069ffffffffffffffffffff82169050919050565b61549381615474565b811461549e57600080fd5b50565b6000815190506154b08161548a565b92915050565b6154bf816148e8565b81146154ca57600080fd5b50565b6000815190506154dc816154b6565b92915050565b600080600080600060a086880312156154fe576154fd613dbb565b5b600061550c888289016154a1565b955050602061551d888289016154cd565b945050604061552e88828901615041565b935050606061553f88828901615041565b9250506080615550888289016154a1565b9150509295509295909350565b7f50726963652063616e6e6f74206265206e656761746976650000000000000000600082015250565b6000615593601883614af7565b915061559e8261555d565b602082019050919050565b600060208201905081810360008301526155c281615586565b9050919050565b60006155d4826148e8565b91506155df836148e8565b92508282026155ed816148e8565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561562557615624614be0565b5b828205841483151761563a57615639614be0565b5b5092915050565b60006060820190506156566000830186613e50565b6156636020830185613e50565b6156706040830184613f69565b949350505050565b7f6f776e7220455448207472616e73666572206661696c65640000000000000000600082015250565b60006156ae601883614af7565b91506156b982615678565b602082019050919050565b600060208201905081810360008301526156dd816156a1565b9050919050565b7f73656c6c657220455448207472616e73666572206661696c6564000000000000600082015250565b600061571a601a83614af7565b9150615725826156e4565b602082019050919050565b600060208201905081810360008301526157498161570d565b9050919050565b7f73656c6c00000000000000000000000000000000000000000000000000000000600082015250565b6000615786600483614af7565b915061579182615750565b602082019050919050565b600060e0820190506157b16000830189613f69565b6157be6020830188613f69565b6157cb6040830187613f69565b6157d86060830186613f69565b6157e56080830185613f69565b81810360a08301526157f681615779565b905061580560c0830184613f69565b979650505050505050565b600060c0820190506158256000830189613e50565b6158326020830188613f69565b61583f6040830187613f69565b61584c6060830186613f69565b6158596080830185613e50565b61586660a0830184613f69565b979650505050505050565b60008060006060848603121561588a57615889613dbb565b5b600061589886828701615041565b93505060206158a986828701615041565b92505060406158ba86828701615041565b9150509250925092565b60006080820190506158d96000830187613f69565b6158e66020830186613f69565b6158f36040830185613f69565b6159006060830184613f69565b95945050505050565b600060408201905061591e6000830185613e50565b61592b6020830184613e50565b939250505056fea264697066735822122020e14f8fadf9e27339a316bdb1ee58682474847deae8e98d387440223801d60c64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000be97f14f11f97f7299fefc82926bfa8e339badf80000000000000000000000000000000000000000000000000000000000000032
-----Decoded View---------------
Arg [0] : _implementation (address): 0xbe97f14F11F97f7299feFc82926Bfa8e339BAdf8
Arg [1] : _feePer (uint16): 50
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000be97f14f11f97f7299fefc82926bfa8e339badf8
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000032
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.