Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000 8BTC
Holders
135
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,729.218399017 8BTCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ProofFactoryTokenCutter
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: None pragma solidity = 0.8.17; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../libraries/Ownable.sol"; import "../libraries/Context.sol"; import "../libraries/ProofFactoryFees.sol"; import "../interfaces/IFACTORY.sol"; import "../interfaces/IDividendDistributor.sol"; import "../interfaces/IUniswapV2Router02.sol"; import "../DividendDistributor.sol"; contract ProofFactoryTokenCutter is Context, IERC20, IERC20Metadata { //This token was created with PROOF, and audited by Solidity Finance — https://proofplatform.io/projects IDividendDistributor public dividendDistributor; uint256 distributorGas = 500000; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address constant DEAD = 0x000000000000000000000000000000000000dEaD; address constant ZERO = 0x0000000000000000000000000000000000000000; address public proofAdmin; bool public restrictWhales = true; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isTxLimitExempt; mapping(address => bool) public isDividendExempt; uint256 public launchedAt; uint256 public revenueFee = 2; uint256 public reflectionFee; uint256 public lpFee; uint256 public devFee; uint256 public reflectionFeeOnSell; uint256 public lpFeeOnSell; uint256 public devFeeOnSell; uint256 public totalFee; uint256 public totalFeeIfSelling; IUniswapV2Router02 public router; address public pair; address payable public factory; address public tokenOwner; address payable public devWallet; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public tradingStatus = true; mapping(address => bool) private bots; uint256 public _maxTxAmount; uint256 public _walletMax; uint256 public swapThreshold; constructor() { factory = payable(msg.sender); } modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyProofAdmin() { require( proofAdmin == _msgSender(), "Ownable: caller is not the proofAdmin" ); _; } modifier onlyOwner() { require(tokenOwner == _msgSender(), "Ownable: caller is not the owner"); _; } modifier onlyFactory() { require(factory == _msgSender(), "Ownable: caller is not the factory"); _; } function setBasicData( string memory tokenName, string memory tokenSymbol, uint256 initialSupply, uint percentToLP, address owner, address reflectionToken, address routerAddress, address initialProofAdmin, ProofFactoryFees.allFees memory fees ) external onlyFactory { _name = tokenName; _symbol = tokenSymbol; _totalSupply += initialSupply; //Initial supply require (percentToLP >= 70, "low lp percent"); uint256 forLP = (initialSupply * percentToLP) / 100; //95% uint256 forOwner = initialSupply - forLP; //5% _balances[msg.sender] += forLP; _balances[owner] += forOwner; emit Transfer(address(0), msg.sender, forLP); emit Transfer(address(0), owner, forOwner); _maxTxAmount = (initialSupply * 5) / 1000; _walletMax = (initialSupply * 1) / 100; swapThreshold = (initialSupply * 5) / 4000; router = IUniswapV2Router02(routerAddress); pair = IUniswapV2Factory(router.factory()).createPair( router.WETH(), address(this) ); _allowances[address(this)][address(router)] = type(uint256).max; dividendDistributor = new DividendDistributor( routerAddress, reflectionToken, address(this) ); isFeeExempt[address(this)] = true; isFeeExempt[factory] = true; isTxLimitExempt[owner] = true; isTxLimitExempt[pair] = true; isTxLimitExempt[factory] = true; isTxLimitExempt[DEAD] = true; isTxLimitExempt[ZERO] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; isDividendExempt[ZERO] = true; reflectionFee = fees.reflectionFee; lpFee = fees.lpFee; devFee = fees.devFee; reflectionFeeOnSell = fees.reflectionFeeOnSell; lpFeeOnSell = fees.lpFeeOnSell; devFeeOnSell = fees.devFeeOnSell; _calcTotalFee(); tokenOwner = owner; devWallet = payable(owner); proofAdmin = initialProofAdmin; } //proofAdmin functions function updateProofAdmin(address newAdmin) external virtual onlyProofAdmin { proofAdmin = newAdmin; } function setBots(address[] memory bots_) external onlyProofAdmin { for (uint256 i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } //Factory functions function swapTradingStatus() external onlyFactory { tradingStatus = !tradingStatus; } function setLaunchedAt() external onlyFactory { require(launchedAt == 0, "already launched"); launchedAt = block.timestamp; } function cancelToken() external onlyFactory { isFeeExempt[address(router)] = true; isTxLimitExempt[address(router)] = true; isTxLimitExempt[tokenOwner] = true; tradingStatus = true; } //Owner functions function changeFees( uint256 initialReflectionFee, uint256 initialReflectionFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell, uint256 initialDevFee, uint256 initialDevFeeOnSell ) external onlyOwner { reflectionFee = initialReflectionFee; lpFee = initialLpFee; devFee = initialDevFee; reflectionFeeOnSell = initialReflectionFeeOnSell; lpFeeOnSell = initialLpFeeOnSell; devFeeOnSell = initialDevFeeOnSell; _calcTotalFee(); } function changeTxLimit(uint256 newLimit) external onlyOwner { _checkLimit(newLimit); _maxTxAmount = newLimit; } function changeWalletLimit(uint256 newLimit) external onlyOwner { _checkLimit(newLimit); _walletMax = newLimit; } function changeRestrictWhales(bool newValue) external onlyOwner { restrictWhales = newValue; } function changeIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function changeIsTxLimitExempt(address holder, bool exempt) external onlyOwner { require(launchedAt != 0, "!launched"); require(block.timestamp >= launchedAt + 24 hours, "too soon"); isTxLimitExempt[holder] = exempt; } function changeDistributorGas(uint256 _distributorGas) external onlyOwner { distributorGas = _distributorGas; } function changeMinDistSettings(uint256 _minPeriod, uint256 _minDistLimit) external onlyOwner { dividendDistributor.setMinPeriod(_minPeriod); dividendDistributor.setMinDistribution(_minDistLimit); } function reduceProofFee() external onlyOwner { require(revenueFee == 2, "!already reduced"); _checkTimestamp(); revenueFee = 1; _calcTotalFee(); } function formatProofFee() external onlyProofAdmin { require (revenueFee > 0, "already reduced"); _checkTimestamp(); totalFee -= revenueFee; totalFeeIfSelling -= revenueFee; revenueFee = 0; } function setDevWallet(address payable newDevWallet) external onlyOwner { devWallet = payable(newDevWallet); } function setOwnerWallet(address payable newOwnerWallet) external onlyOwner { tokenOwner = newOwnerWallet; } function changeSwapBackSettings( bool enableSwapBack, uint256 newSwapBackLimit ) external onlyOwner { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; } function setDistributionCriteria( uint256 newMinPeriod_, uint256 newMinDistribution_ ) external onlyOwner { dividendDistributor.setDistributionCriteria( newMinPeriod_, newMinDistribution_ ); } function delBot(address notbot) external { address sender = _msgSender(); require (sender == proofAdmin || sender == tokenOwner, "Owanble: caller doesn't have permission"); bots[notbot] = false; } function getCirculatingSupply() external view returns (uint256) { return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO); } /** * @dev Returns the name of the token. */ function name() external view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() external view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() external view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) external virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) external virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) external virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal returns (bool) { require(tradingStatus, "!trading"); require(!bots[sender] && !bots[recipient]); if (inSwapAndLiquify) { return _basicTransfer(sender, recipient, amount); } /// MaxTx is applied for only sell and wallet transfer. if (sender != pair) { require( amount <= _maxTxAmount || isTxLimitExempt[sender], "Max TX Amount" ); } if (!isTxLimitExempt[recipient] && restrictWhales) { require( _balances[recipient] + amount <= _walletMax + (10*10**9), "Max Wallet Amount" ); } if ( msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold ) { swapBack(); } _balances[sender] = _balances[sender] - amount; uint256 finalAmount = amount; if (sender == pair || recipient == pair) { finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount; } _balances[recipient] = _balances[recipient] + finalAmount; // Dividend tracker if (!isDividendExempt[sender]) { dividendDistributor.setShare(sender, _balances[sender]); } if (!isDividendExempt[recipient]) { dividendDistributor.setShare(recipient, _balances[recipient]); } dividendDistributor.process(distributorGas); emit Transfer(sender, recipient, finalAmount); return true; } function _basicTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { _balances[sender] = _balances[sender] - amount; _balances[recipient] = _balances[recipient] + amount; emit Transfer(sender, recipient, amount); return true; } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function takeFee( address sender, address recipient, uint256 amount ) internal returns (uint256) { uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee; uint256 feeAmount = amount * feeApplicable / 100; _balances[address(this)] = _balances[address(this)] + feeAmount; emit Transfer(sender, address(this), feeAmount); return amount - feeAmount; } function swapBack() internal lockTheSwap { uint256 tokensToLiquify = _balances[address(this)]; uint256 amountToLiquify = tokensToLiquify * lpFee / totalFee / 2; uint256 amountToSwap = tokensToLiquify - amountToLiquify; if (amountToSwap == 0 || amountToLiquify == 0) return; address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; uint256 devBalance = amountETH * devFee / totalFee; uint256 revenueBalance = amountETH * revenueFee / totalFee; uint256 amountEthLiquidity = amountETH * lpFee / totalFee / 2; uint256 amountEthReflection = amountETH - devBalance - revenueBalance - amountEthLiquidity; if (amountETH > 0) { if (revenueBalance > 0) { IFACTORY(factory).factoryRevenue{value: revenueBalance}(); } if (devBalance > 0) { (bool sent,)=devWallet.call{value:devBalance}(""); require (sent, "ETH transfer failed"); } } dividendDistributor.deposit{value: amountEthReflection}(); if (amountToLiquify > 0) { router.addLiquidityETH{value: amountEthLiquidity}( address(this), amountToLiquify, 0, 0, 0x000000000000000000000000000000000000dEaD, block.timestamp ); } } function _checkLimit(uint256 _newLimit) internal view { require(launchedAt != 0, "!launched"); require(_newLimit >= (_totalSupply * 5) / 1000, "Mmin 0.5% limit"); require(_newLimit <= (_totalSupply * 3) / 100, "Max 3% limit"); } function _checkTimestamp() internal view { require(launchedAt != 0, "!launched"); require(block.timestamp >= launchedAt + 72 hours, "too soon"); } function _calcTotalFee() internal { totalFee = devFee + lpFee + reflectionFee + revenueFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + reflectionFeeOnSell + revenueFee; require(totalFee <= 12, "Too high fee"); require(totalFeeIfSelling <= 17, "Too high fee"); } receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../token/ERC20/extensions/IERC20Metadata.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: None pragma solidity = 0.8.17; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./libraries/TokenUtils.sol"; import "./interfaces/IDividendDistributor.sol"; import "./interfaces/IUniswapV2Router02.sol"; import "./interfaces/IUniswapV2Factory.sol"; import "hardhat/console.sol"; contract DividendDistributor is IDividendDistributor { address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IUniswapV2Router02 router; IERC20 public RewardToken; address[] shareholders; mapping(address => uint256) public shareholderIndexes; mapping(address => uint256) public shareholderClaims; mapping(address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10**36; uint256 public minPeriod = 30 minutes; uint256 public minDistribution = 1 * (10**18); uint256 currentIndex; bool initialized; modifier onlyToken() { require(msg.sender == _token); _; } constructor( address _router, address _reflectionToken, address token ) { router = IUniswapV2Router02(_router); RewardToken = IERC20(_reflectionToken); _token = token; uint8 rewardTokenDecimals = TokenUtils.expectDecimals(token); uint256 fixedPoint = 10**rewardTokenDecimals; minDistribution = 1 * fixedPoint; } function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external override onlyToken { minPeriod = _minPeriod; minDistribution = _minDistribution; } function getShareHolders() external view returns (address[] memory) { return shareholders; } function setMinPeriod(uint256 _minPeriod) external onlyToken override { minPeriod = _minPeriod; } function setMinDistribution(uint256 _minDistribution) external onlyToken override { minDistribution = _minDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if (shares[shareholder].amount > 0) { distributeDividend(shareholder); } if (amount > 0 && shares[shareholder].amount == 0) { addShareholder(shareholder); } else if (amount == 0 && shares[shareholder].amount > 0) { removeShareholder(shareholder); } totalShares = totalShares - shares[shareholder].amount + amount; shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends( shares[shareholder].amount ); } function deposit() external payable override onlyToken { uint256 balanceBefore = RewardToken.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(RewardToken); router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: msg.value }(0, path, address(this), block.timestamp); uint256 amount = RewardToken.balanceOf(address(this)) - balanceBefore; totalDividends = totalDividends + amount; dividendsPerShare = dividendsPerShare + dividendsPerShareAccuracyFactor * amount / totalShares; } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if (shareholderCount == 0) { return; } uint256 iterations = 0; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); while (gasUsed < gas && iterations < shareholderCount) { if (currentIndex >= shareholderCount) { currentIndex = 0; } if (shouldDistribute(shareholders[currentIndex])) { distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed + gasLeft - gasleft(); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod <= block.timestamp && getUnpaidEarnings(shareholder) >= minDistribution; } function distributeDividend(address shareholder) internal { if (shares[shareholder].amount == 0) { return; } uint256 amount = getUnpaidEarnings(shareholder); if (amount > 0) { totalDistributed = totalDistributed + amount; shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised + amount; shares[shareholder].totalExcluded = getCumulativeDividends( shares[shareholder].amount ); RewardToken.transfer(shareholder, amount); } } function claimDividend() external { require(shouldDistribute(msg.sender), "Too soon. Need to wait!"); distributeDividend(msg.sender); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if (shares[shareholder].amount == 0) { return 0; } uint256 shareholderTotalDividends = getCumulativeDividends( shares[shareholder].amount ); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if (shareholderTotalDividends <= shareholderTotalExcluded) { return 0; } return shareholderTotalDividends - shareholderTotalExcluded; } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share * dividendsPerShare / dividendsPerShareAccuracyFactor; } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[ shareholders.length - 1 ]; shareholderIndexes[ shareholders[shareholders.length - 1] ] = shareholderIndexes[shareholder]; shareholders.pop(); } }
// SPDX-License-Identifier: None pragma solidity = 0.8.17; interface IDividendDistributor { function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; function setMinPeriod(uint256 _minPeriod) external; function setMinDistribution(uint256 _minDistribution) external; }
// SPDX-License-Identifier: None pragma solidity = 0.8.17; interface IFACTORY { function factoryRevenue() external payable; }
// SPDX-License-Identifier: None pragma solidity = 0.8.17; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); }
// SPDX-License-Identifier: None pragma solidity = 0.8.17; interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); }
// SPDX-License-Identifier: None pragma solidity = 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: None pragma solidity = 0.8.17; import "./Context.sol"; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: None pragma solidity = 0.8.17; library ProofFactoryFees { struct allFees { uint256 reflectionFee; uint256 reflectionFeeOnSell; uint256 lpFee; uint256 lpFeeOnSell; uint256 devFee; uint256 devFeeOnSell; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.17; import "@openzeppelin/contracts/interfaces/IERC20Metadata.sol"; /// @title TokenUtils /// @author Savvy DeFi library TokenUtils { /// @dev A safe function to get the decimals of an ERC20 token. /// /// @dev Reverts with a {CallFailed} error if execution of the query fails or returns an unexpected value. /// /// @param token The target token. /// /// @return The amount of decimals of the token. function expectDecimals(address token) internal view returns (uint8) { (bool success, bytes memory data) = token.staticcall( abi.encodeWithSelector(IERC20Metadata.decimals.selector) ); require (success, "invalid decimals"); return abi.decode(data, (uint8)); } }
// SPDX-License-Identifier: MIT pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); } function logUint(uint256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint256 p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1)); } function log(uint256 p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1)); } function log(uint256 p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1)); } function log(uint256 p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1)); } function log(string memory p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint256 p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2)); } function log(uint256 p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2)); } function log(uint256 p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2)); } function log(uint256 p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2)); } function log(uint256 p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2)); } function log(uint256 p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2)); } function log(uint256 p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2)); } function log(uint256 p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2)); } function log(uint256 p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2)); } function log(uint256 p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2)); } function log(uint256 p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2)); } function log(uint256 p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2)); } function log(uint256 p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2)); } function log(string memory p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2)); } function log(string memory p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2)); } function log(string memory p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2)); } function log(string memory p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2)); } function log(bool p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2)); } function log(bool p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2)); } function log(bool p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2)); } function log(address p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2)); } function log(address p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2)); } function log(address p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"changeDistributorGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialReflectionFee","type":"uint256"},{"internalType":"uint256","name":"initialReflectionFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFeeOnSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistLimit","type":"uint256"}],"name":"changeMinDistSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract IDividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"formatProofFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reduceProofFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revenueFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"uint256","name":"percentToLP","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"reflectionToken","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"initialProofAdmin","type":"address"},{"components":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"reflectionFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"lpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"devFeeOnSell","type":"uint256"}],"internalType":"struct ProofFactoryFees.allFees","name":"fees","type":"tuple"}],"name":"setBasicData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod_","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution_","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLaunchedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"updateProofAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526207a1206001556007805460ff60a01b1916600160a01b1790556002600c556019805461010160a81b61ffff60a81b1990911617905534801561004657600080fd5b50601780546001600160a01b03191633179055614a68806100686000396000f3fe608060405260043610620003db5760003560e01c8063807c2d9c1162000203578063bf56b3711162000117578063dd62ed3e11620000ad578063f16fd78d1162000078578063f16fd78d1462000b5f578063f887ea401462000b84578063fabe62831462000ba6578063fbd757531462000bcb57600080fd5b8063dd62ed3e1462000ab3578063e4cbd6b31462000afd578063e66b1d1e1462000b22578063ef92e2221462000b4757600080fd5b8063cb29813c11620000ee578063cb29813c1462000a2e578063cc6badb31462000a53578063d4fb9a011462000a6b578063d920334e1462000a8e57600080fd5b8063bf56b37114620009dc578063c45a015514620009f4578063ca987b0e1462000a1657600080fd5b8063a3a2e89e1162000199578063a9059cbb1162000164578063a9059cbb146200094b578063b515566a1462000970578063bad3ea6a1462000995578063bb542ef014620009b757600080fd5b8063a3a2e89e14620008bd578063a3e6761014620008e2578063a457c2d71462000904578063a8aa1b31146200092957600080fd5b80638b42507f11620001da5780638b42507f14620008375780638ea5220f146200086b5780639502c426146200088d57806395d89b4114620008a557600080fd5b8063807c2d9c14620007ef57806383ad799414620008075780638760d539146200081f57600080fd5b806336e4ec6411620002fb578063546a8811116200029157806370a08231116200025c57806370a0823114620007605780637c0ff205146200079a5780637d1db4a514620007b25780637db1342c14620007ca57600080fd5b8063546a881114620006dd57806359a51c3414620006f55780636827e7641462000730578063704ce43e146200074857600080fd5b80633f4218e011620002d25780633f4218e0146200062f5780634355855a146200066357806344de2e4c14620006975780634a74bb0214620006ba57600080fd5b806336e4ec6414620005cd5780633950935114620005e55780633dab5269146200060a57600080fd5b806323b872dd11620003715780632b112e4911620003485780632b112e49146200054d5780632d48e89614620005655780632de22cf8146200058a578063313ce56714620005af57600080fd5b806323b872dd14620004eb57806327193bc41462000510578063273123b7146200052857600080fd5b806316d9962b11620003b257806316d9962b146200047057806318160ddd14620004975780631df4ccfc14620004ae5780631f53ac0214620004c657600080fd5b80630445b66714620003e857806306fdde031462000413578063095ea7b3146200043a57600080fd5b36620003e357005b600080fd5b348015620003f557600080fd5b5062000400601d5481565b6040519081526020015b60405180910390f35b3480156200042057600080fd5b506200042b62000be3565b6040516200040a919062002c80565b3480156200044757600080fd5b506200045f6200045936600462002cf8565b62000c7d565b60405190151581526020016200040a565b3480156200047d57600080fd5b50620004956200048f36600462002d27565b62000c99565b005b348015620004a457600080fd5b5060045462000400565b348015620004bb57600080fd5b506200040060135481565b348015620004d357600080fd5b5062000495620004e536600462002d41565b62000cd4565b348015620004f857600080fd5b506200045f6200050a36600462002d61565b62000d23565b3480156200051d57600080fd5b506200049562000d4e565b3480156200053557600080fd5b50620004956200054736600462002d41565b62000dc6565b3480156200055a57600080fd5b506200040062000e6f565b3480156200057257600080fd5b50620004956200058436600462002da7565b62000ee3565b3480156200059757600080fd5b5062000495620005a936600462002f09565b62000f7c565b348015620005bc57600080fd5b50604051600981526020016200040a565b348015620005da57600080fd5b5062000400600c5481565b348015620005f257600080fd5b506200045f6200060436600462002cf8565b62001537565b3480156200061757600080fd5b50620004956200062936600462002ffb565b6200157a565b3480156200063c57600080fd5b506200045f6200064e36600462002d41565b60086020526000908152604090205460ff1681565b3480156200067057600080fd5b506200045f6200068236600462002d41565b600a6020526000908152604090205460ff1681565b348015620006a457600080fd5b506007546200045f90600160a01b900460ff1681565b348015620006c757600080fd5b506019546200045f90600160a81b900460ff1681565b348015620006ea57600080fd5b5062000495620015c9565b3480156200070257600080fd5b5060075462000717906001600160a01b031681565b6040516001600160a01b0390911681526020016200040a565b3480156200073d57600080fd5b5062000400600f5481565b3480156200075557600080fd5b5062000400600e5481565b3480156200076d57600080fd5b50620004006200077f36600462002d41565b6001600160a01b031660009081526002602052604090205490565b348015620007a757600080fd5b506200040060115481565b348015620007bf57600080fd5b5062000400601b5481565b348015620007d757600080fd5b5062000495620007e936600462002d27565b62001664565b348015620007fc57600080fd5b5062000400601c5481565b3480156200081457600080fd5b5062000400600d5481565b3480156200082c57600080fd5b5062000495620016a1565b3480156200084457600080fd5b506200045f6200085636600462002d41565b60096020526000908152604090205460ff1681565b3480156200087857600080fd5b5060195462000717906001600160a01b031681565b3480156200089a57600080fd5b506200040060125481565b348015620008b257600080fd5b506200042b6200175c565b348015620008ca57600080fd5b5062000495620008dc3660046200301a565b6200176d565b348015620008ef57600080fd5b5060185462000717906001600160a01b031681565b3480156200091157600080fd5b506200045f6200092336600462002cf8565b620017c5565b3480156200093657600080fd5b5060165462000717906001600160a01b031681565b3480156200095857600080fd5b506200045f6200096a36600462002cf8565b62001866565b3480156200097d57600080fd5b50620004956200098f36600462003054565b62001876565b348015620009a257600080fd5b5060005462000717906001600160a01b031681565b348015620009c457600080fd5b5062000495620009d636600462002d41565b62001916565b348015620009e957600080fd5b5062000400600b5481565b34801562000a0157600080fd5b5060175462000717906001600160a01b031681565b34801562000a2357600080fd5b506200040060145481565b34801562000a3b57600080fd5b506200049562000a4d36600462003113565b62001965565b34801562000a6057600080fd5b506200040060105481565b34801562000a7857600080fd5b506019546200045f90600160b01b900460ff1681565b34801562000a9b57600080fd5b506200049562000aad36600462002d27565b620019ba565b34801562000ac057600080fd5b506200040062000ad236600462003157565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801562000b0a57600080fd5b506200049562000b1c36600462002da7565b620019f7565b34801562000b2f57600080fd5b506200049562000b4136600462003195565b62001ab6565b34801562000b5457600080fd5b506200049562001b01565b34801562000b6c57600080fd5b506200049562000b7e36600462002d41565b62001b90565b34801562000b9157600080fd5b5060155462000717906001600160a01b031681565b34801562000bb357600080fd5b506200049562000bc53660046200301a565b62001bdf565b34801562000bd857600080fd5b506200049562001caa565b60606005805462000bf490620031b3565b80601f016020809104026020016040519081016040528092919081815260200182805462000c2290620031b3565b801562000c735780601f1062000c475761010080835404028352916020019162000c73565b820191906000526020600020905b81548152906001019060200180831162000c5557829003601f168201915b5050505050905090565b60003362000c8d81858562001cf8565b60019150505b92915050565b6018546001600160a01b0316331462000ccf5760405162461bcd60e51b815260040162000cc690620031ef565b60405180910390fd5b600155565b6018546001600160a01b0316331462000d015760405162461bcd60e51b815260040162000cc690620031ef565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b60003362000d3385828562001e20565b62000d4085858562001eb7565b5060019150505b9392505050565b6017546001600160a01b0316331462000d7b5760405162461bcd60e51b815260040162000cc69062003224565b600b541562000dc05760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b604482015260640162000cc6565b42600b55565b60075433906001600160a01b031681148062000def57506018546001600160a01b038281169116145b62000e4d5760405162461bcd60e51b815260206004820152602760248201527f4f77616e626c653a2063616c6c657220646f65736e277420686176652070657260448201526636b4b9b9b4b7b760c91b606482015260840162000cc6565b506001600160a01b03166000908152601a60205260409020805460ff19169055565b60026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5461dead60009081527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5460045491929162000ed291906200327c565b62000ede91906200327c565b905090565b6018546001600160a01b0316331462000f105760405162461bcd60e51b815260040162000cc690620031ef565b6000546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801562000f5f57600080fd5b505af115801562000f74573d6000803e3d6000fd5b505050505050565b6017546001600160a01b0316331462000fa95760405162461bcd60e51b815260040162000cc69062003224565b600562000fb78a82620032e1565b50600662000fc68982620032e1565b50866004600082825462000fdb9190620033ae565b90915550506046861015620010245760405162461bcd60e51b815260206004820152600e60248201526d1b1bddc81b1c081c195c98d95b9d60921b604482015260640162000cc6565b6000606462001034888a620033c4565b620010409190620033de565b9050600062001050828a6200327c565b3360009081526002602052604081208054929350849290919062001076908490620033ae565b90915550506001600160a01b03871660009081526002602052604081208054839290620010a5908490620033ae565b9091555050604051828152339060009060008051602062004a138339815191529060200160405180910390a36040518181526001600160a01b0388169060009060008051602062004a138339815191529060200160405180910390a36103e8620011118a6005620033c4565b6200111d9190620033de565b601b5560646200112f8a6001620033c4565b6200113b9190620033de565b601c55610fa06200114e8a6005620033c4565b6200115a9190620033de565b601d55601580546001600160a01b0319166001600160a01b0387169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd919062003401565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001265919062003401565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620012b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012d8919062003401565b601680546001600160a01b0319166001600160a01b03928316179055306000818152600360209081526040808320601554909516835293905282902060001990559051869188916200132a9062002c72565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801562001367573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392831617815530808252600860209081526040808420805460ff199081166001908117909255601780548816875283872080548316841790558e881687526009855283872080548316841790556016805489168852848820805484168517905590548816875283872080548316841790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548316841790557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054831684179055549096168552600a8352818520805487168217905592845280842080548616841790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80548616841790559280527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380549094169091179092558451600d55840151600e556080840151600f55830151601055606083015160115560a0830151601255620014ef62002401565b5050601880546001600160a01b039687166001600160a01b03199182168117909255601980548216909217909155600780549390961692169190911790935550505050505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490919062000c8d908290869062001574908790620033ae565b62001cf8565b6018546001600160a01b03163314620015a75760405162461bcd60e51b815260040162000cc690620031ef565b60198054921515600160a81b0260ff60a81b1990931692909217909155601d55565b6017546001600160a01b03163314620015f65760405162461bcd60e51b815260040162000cc69062003224565b601580546001600160a01b039081166000908152600860209081526040808320805460ff19908116600190811790925595548516845260099092528083208054861683179055601854909316825291902080549092161790556019805460ff60b01b1916600160b01b179055565b6018546001600160a01b03163314620016915760405162461bcd60e51b815260040162000cc690620031ef565b6200169c81620024ef565b601c55565b6007546001600160a01b03163314620016ce5760405162461bcd60e51b815260040162000cc69062003421565b6000600c5411620017145760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c99591d58d959608a1b604482015260640162000cc6565b6200171e620025d9565b600c54601360008282546200173491906200327c565b9091555050600c5460148054600090620017509084906200327c565b90915550506000600c55565b60606006805462000bf490620031b3565b6018546001600160a01b031633146200179a5760405162461bcd60e51b815260040162000cc690620031ef565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909190838110156200184c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840162000cc6565b6200185b828686840362001cf8565b506001949350505050565b6000336200185b81858562001eb7565b6007546001600160a01b03163314620018a35760405162461bcd60e51b815260040162000cc69062003421565b60005b815181101562001912576001601a6000848481518110620018cb57620018cb62003466565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558062001909816200347c565b915050620018a6565b5050565b6018546001600160a01b03163314620019435760405162461bcd60e51b815260040162000cc690620031ef565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620019925760405162461bcd60e51b815260040162000cc690620031ef565b600d869055600e849055600f82905560108590556011839055601281905562000f7462002401565b6018546001600160a01b03163314620019e75760405162461bcd60e51b815260040162000cc690620031ef565b620019f281620024ef565b601b55565b6018546001600160a01b0316331462001a245760405162461bcd60e51b815260040162000cc690620031ef565b60005460405163f821076960e01b8152600481018490526001600160a01b039091169063f821076990602401600060405180830381600087803b15801562001a6b57600080fd5b505af115801562001a80573d6000803e3d6000fd5b5050600054604051635117196160e01b8152600481018590526001600160a01b0390911692506351171961915060240162000f44565b6018546001600160a01b0316331462001ae35760405162461bcd60e51b815260040162000cc690620031ef565b60078054911515600160a01b0260ff60a01b19909216919091179055565b6018546001600160a01b0316331462001b2e5760405162461bcd60e51b815260040162000cc690620031ef565b600c5460021462001b755760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b604482015260640162000cc6565b62001b7f620025d9565b6001600c5562001b8e62002401565b565b6007546001600160a01b0316331462001bbd5760405162461bcd60e51b815260040162000cc69062003421565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b0316331462001c0c5760405162461bcd60e51b815260040162000cc690620031ef565b600b5460000362001c315760405162461bcd60e51b815260040162000cc69062003498565b600b5462001c439062015180620033ae565b42101562001c7f5760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015260640162000cc6565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6017546001600160a01b0316331462001cd75760405162461bcd60e51b815260040162000cc69062003224565b6019805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b03831662001d5c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000cc6565b6001600160a01b03821662001dbf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000cc6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260036020908152604080832093861683529290522054600019811462001eb1578181101562001ea25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640162000cc6565b62001eb1848484840362001cf8565b50505050565b601954600090600160b01b900460ff1662001f005760405162461bcd60e51b81526020600482015260086024820152672174726164696e6760c01b604482015260640162000cc6565b6001600160a01b0384166000908152601a602052604090205460ff1615801562001f4357506001600160a01b0383166000908152601a602052604090205460ff16155b62001f4d57600080fd5b601954600160a01b900460ff161562001f755762001f6d8484846200264c565b905062000d47565b6016546001600160a01b0385811691161462001ff357601b548211158062001fb557506001600160a01b03841660009081526009602052604090205460ff165b62001ff35760405162461bcd60e51b815260206004820152600d60248201526c13585e08151608105b5bdd5b9d609a1b604482015260640162000cc6565b6001600160a01b03831660009081526009602052604090205460ff16158015620020265750600754600160a01b900460ff165b15620020aa57601c5462002040906402540be400620033ae565b6001600160a01b03841660009081526002602052604090205462002066908490620033ae565b1115620020aa5760405162461bcd60e51b815260206004820152601160248201527013585e0815d85b1b195d08105b5bdd5b9d607a1b604482015260640162000cc6565b6016546001600160a01b03163314801590620020d05750601954600160a01b900460ff16155b8015620020e65750601954600160a81b900460ff165b8015620021045750601d543060009081526002602052604090205410155b15620021145762002114620026fa565b6001600160a01b0384166000908152600260205260409020546200213a9083906200327c565b6001600160a01b038086166000818152600260205260409020929092556016548492911614806200217857506016546001600160a01b038581169116145b15620021dd576001600160a01b03851660009081526008602052604090205460ff16158015620021c157506001600160a01b03841660009081526008602052604090205460ff16155b620021cd5782620021da565b620021da85858562002bad565b90505b6001600160a01b03841660009081526002602052604090205462002203908290620033ae565b6001600160a01b038086166000908152600260209081526040808320949094559188168152600a909152205460ff16620022b157600080546001600160a01b038781168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b1580156200229757600080fd5b505af1158015620022ac573d6000803e3d6000fd5b505050505b6001600160a01b0384166000908152600a602052604090205460ff166200234c57600080546001600160a01b038681168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b1580156200233257600080fd5b505af115801562002347573d6000803e3d6000fd5b505050505b6000546001546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991620023859160040190815260200190565b600060405180830381600087803b158015620023a057600080fd5b505af1158015620023b5573d6000803e3d6000fd5b50505050836001600160a01b0316856001600160a01b031660008051602062004a1383398151915283604051620023ee91815260200190565b60405180910390a3506001949350505050565b600c54600d54600e54600f54620024199190620033ae565b620024259190620033ae565b620024319190620033ae565b601355600c546010546011546012546200244c9190620033ae565b620024589190620033ae565b620024649190620033ae565b601455601354600c1015620024ab5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b604482015260640162000cc6565b6011601454111562001b8e5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b604482015260640162000cc6565b600b54600003620025145760405162461bcd60e51b815260040162000cc69062003498565b6103e86004546005620025289190620033c4565b620025349190620033de565b811015620025775760405162461bcd60e51b815260206004820152600f60248201526e135b5a5b880c0b8d49481b1a5b5a5d608a1b604482015260640162000cc6565b606460045460036200258a9190620033c4565b620025969190620033de565b811115620025d65760405162461bcd60e51b815260206004820152600c60248201526b13585e080cc9481b1a5b5a5d60a21b604482015260640162000cc6565b50565b600b54600003620025fe5760405162461bcd60e51b815260040162000cc69062003498565b600b5462002610906203f480620033ae565b42101562001b8e5760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015260640162000cc6565b6001600160a01b038316600090815260026020526040812054620026729083906200327c565b6001600160a01b038086166000908152600260205260408082209390935590851681522054620026a4908390620033ae565b6001600160a01b03808516600081815260026020526040908190209390935591519086169060008051602062004a1383398151915290620026e89086815260200190565b60405180910390a35060019392505050565b6019805460ff60a01b1916600160a01b179055306000908152600260208190526040822054601354600e5491939291620027359085620033c4565b620027419190620033de565b6200274d9190620033de565b905060006200275d82846200327c565b90508015806200276b575081155b156200277a5750505062002b9e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110620027b257620027b262003466565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156200280c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002832919062003401565b8160018151811062002848576200284862003466565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac9479062002890908590600090869030904290600401620034bb565b600060405180830381600087803b158015620028ab57600080fd5b505af1158015620028c0573d6000803e3d6000fd5b5050601354600f5447935060009250620028db9084620033c4565b620028e79190620033de565b90506000601354600c5484620028fe9190620033c4565b6200290a9190620033de565b905060006002601354600e5486620029239190620033c4565b6200292f9190620033de565b6200293b9190620033de565b9050600081836200294d86886200327c565b6200295991906200327c565b6200296591906200327c565b9050841562002a87578215620029e157601760009054906101000a90046001600160a01b03166001600160a01b0316639ee25ae4846040518263ffffffff1660e01b81526004016000604051808303818588803b158015620029c657600080fd5b505af1158015620029db573d6000803e3d6000fd5b50505050505b831562002a87576019546040516000916001600160a01b03169086908381818185875af1925050503d806000811462002a37576040519150601f19603f3d011682016040523d82523d6000602084013e62002a3c565b606091505b505090508062002a855760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640162000cc6565b505b60008054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562002ad657600080fd5b505af115801562002aeb573d6000803e3d6000fd5b5050505050600088111562002b945760155460405163f305d71960e01b8152306004820152602481018a9052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990849060c40160606040518083038185885af115801562002b69573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062002b9091906200352e565b5050505b5050505050505050505b6019805460ff60a01b19169055565b60165460009081906001600160a01b0385811691161462002bd15760135462002bd5565b6014545b90506000606462002be78386620033c4565b62002bf39190620033de565b3060009081526002602052604090205490915062002c13908290620033ae565b30600081815260026020526040908190209290925590516001600160a01b0388169060008051602062004a138339815191529062002c549085815260200190565b60405180910390a362002c6881856200327c565b9695505050505050565b6114b5806200355e83390190565b600060208083528351808285015260005b8181101562002caf5785810183015185820160400152820162002c91565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114620025d657600080fd5b803562002cf38162002cd0565b919050565b6000806040838503121562002d0c57600080fd5b823562002d198162002cd0565b946020939093013593505050565b60006020828403121562002d3a57600080fd5b5035919050565b60006020828403121562002d5457600080fd5b813562000d478162002cd0565b60008060006060848603121562002d7757600080fd5b833562002d848162002cd0565b9250602084013562002d968162002cd0565b929592945050506040919091013590565b6000806040838503121562002dbb57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562002e0c5762002e0c62002dca565b604052919050565b600082601f83011262002e2657600080fd5b813567ffffffffffffffff81111562002e435762002e4362002dca565b62002e58601f8201601f191660200162002de0565b81815284602083860101111562002e6e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121562002e9e57600080fd5b60405160c0810181811067ffffffffffffffff8211171562002ec45762002ec462002dca565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060008060008060008060006101c08a8c03121562002f2957600080fd5b893567ffffffffffffffff8082111562002f4257600080fd5b62002f508d838e0162002e14565b9a5060208c013591508082111562002f6757600080fd5b5062002f768c828d0162002e14565b98505060408a0135965060608a0135955060808a013562002f978162002cd0565b945060a08a013562002fa98162002cd0565b935062002fb960c08b0162002ce6565b925062002fc960e08b0162002ce6565b915062002fdb8b6101008c0162002e8b565b90509295985092959850929598565b8035801515811462002cf357600080fd5b600080604083850312156200300f57600080fd5b62002d198362002fea565b600080604083850312156200302e57600080fd5b82356200303b8162002cd0565b91506200304b6020840162002fea565b90509250929050565b600060208083850312156200306857600080fd5b823567ffffffffffffffff808211156200308157600080fd5b818501915085601f8301126200309657600080fd5b813581811115620030ab57620030ab62002dca565b8060051b9150620030be84830162002de0565b8181529183018401918481019088841115620030d957600080fd5b938501935b83851015620031075784359250620030f68362002cd0565b8282529385019390850190620030de565b98975050505050505050565b60008060008060008060c087890312156200312d57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156200316b57600080fd5b8235620031788162002cd0565b915060208301356200318a8162002cd0565b809150509250929050565b600060208284031215620031a857600080fd5b62000d478262002fea565b600181811c90821680620031c857607f821691505b602082108103620031e957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000c935762000c9362003266565b601f821115620032dc57600081815260208120601f850160051c81016020861015620032bb5750805b601f850160051c820191505b8181101562000f7457828155600101620032c7565b505050565b815167ffffffffffffffff811115620032fe57620032fe62002dca565b62003316816200330f8454620031b3565b8462003292565b602080601f8311600181146200334e5760008415620033355750858301515b600019600386901b1c1916600185901b17855562000f74565b600085815260208120601f198616915b828110156200337f578886015182559484019460019091019084016200335e565b50858210156200339e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111562000c935762000c9362003266565b808202811582820484141762000c935762000c9362003266565b600082620033fc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200341457600080fd5b815162000d478162002cd0565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820162003491576200349162003266565b5060010190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156200350d5784516001600160a01b031683529383019391830191600101620034e6565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156200354457600080fd5b835192506020840151915060408401519050925092509256fe60806040526ec097ce7bc90715b34b9f1000000000600b55610708600c55670de0b6b3a7640000600d553480156200003657600080fd5b50604051620014b5380380620014b58339810160408190526200005991620001ec565b600180546001600160a01b03199081166001600160a01b038681169190911790925560028054821685841617905560008054909116918316919091178155620000ae82620000dd602090811b62000a7517901c565b90506000620000bf82600a6200034b565b9050620000ce81600162000363565b600d5550620003d39350505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1790529051600091829182916001600160a01b038616916200012591906200037d565b600060405180830381855afa9150503d806000811462000162576040519150601f19603f3d011682016040523d82523d6000602084013e62000167565b606091505b509150915081620001b15760405162461bcd60e51b815260206004820152601060248201526f696e76616c696420646563696d616c7360801b604482015260640160405180910390fd5b80806020019051810190620001c79190620003ae565b949350505050565b80516001600160a01b0381168114620001e757600080fd5b919050565b6000806000606084860312156200020257600080fd5b6200020d84620001cf565b92506200021d60208501620001cf565b91506200022d60408501620001cf565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200028d57816000190482111562000271576200027162000236565b808516156200027f57918102915b93841c939080029062000251565b509250929050565b600082620002a65750600162000345565b81620002b55750600062000345565b8160018114620002ce5760028114620002d957620002f9565b600191505062000345565b60ff841115620002ed57620002ed62000236565b50506001821b62000345565b5060208310610133831016604e8410600b84101617156200031e575081810a62000345565b6200032a83836200024c565b806000190482111562000341576200034162000236565b0290505b92915050565b60006200035c60ff84168362000295565b9392505050565b808202811582820484141762000345576200034562000236565b6000825160005b81811015620003a0576020818601810151858301520162000384565b506000920191825250919050565b600060208284031215620003c157600080fd5b815160ff811681146200035c57600080fd5b6110d280620003e36000396000f3fe60806040526004361061011f5760003560e01c8063ce7c2ac2116100a0578063f0fc6bca11610064578063f0fc6bca14610318578063f1e9f1e51461032d578063f821076914610365578063ffb2c47914610385578063ffd49c84146103a557600080fd5b8063ce7c2ac214610260578063d0e30db0146102b7578063d4fda1f2146102bf578063e2d2e219146102ec578063efca2eed1461030257600080fd5b80634fab0ae8116100e75780634fab0ae8146101c557806351171961146101db57806366817df5146101fb5780638477d9f314610228578063997664d71461024a57600080fd5b806311ce023d1461012457806314b6ca961461014d57806328fd31981461016f5780632d48e8961461018f5780633a98ef39146101af575b600080fd5b34801561013057600080fd5b5061013a600b5481565b6040519081526020015b60405180910390f35b34801561015957600080fd5b5061016d610168366004610e21565b6103bb565b005b34801561017b57600080fd5b5061013a61018a366004610e4d565b610533565b34801561019b57600080fd5b5061016d6101aa366004610e71565b6105be565b3480156101bb57600080fd5b5061013a60075481565b3480156101d157600080fd5b5061013a600d5481565b3480156101e757600080fd5b5061016d6101f6366004610e93565b6105e0565b34801561020757600080fd5b5061013a610216366004610e4d565b60056020526000908152604090205481565b34801561023457600080fd5b5061023d6105fc565b6040516101449190610ef0565b34801561025657600080fd5b5061013a60085481565b34801561026c57600080fd5b5061029c61027b366004610e4d565b60066020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610144565b61016d61065e565b3480156102cb57600080fd5b5061013a6102da366004610e4d565b60046020526000908152604090205481565b3480156102f857600080fd5b5061013a600a5481565b34801561030e57600080fd5b5061013a60095481565b34801561032457600080fd5b5061016d6108ef565b34801561033957600080fd5b5060025461034d906001600160a01b031681565b6040516001600160a01b039091168152602001610144565b34801561037157600080fd5b5061016d610380366004610e93565b610954565b34801561039157600080fd5b5061016d6103a0366004610e93565b610970565b3480156103b157600080fd5b5061013a600c5481565b6000546001600160a01b031633146103d257600080fd5b6001600160a01b038216600090815260066020526040902054156103f9576103f982610b54565b60008111801561041f57506001600160a01b038216600090815260066020526040902054155b1561048557600380546001600160a01b0384166000818152600460205260408120839055600183018455929092527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03191690911790556104b8565b801580156104aa57506001600160a01b03821660009081526006602052604090205415155b156104b8576104b882610c8d565b6001600160a01b03821660009081526006602052604090205460075482916104df91610f19565b6104e99190610f2c565b6007556001600160a01b038216600090815260066020526040902081905561051081610da2565b6001600160a01b0390921660009081526006602052604090206001019190915550565b6001600160a01b038116600090815260066020526040812054810361055a57506000919050565b6001600160a01b03821660009081526006602052604081205461057c90610da2565b6001600160a01b0384166000908152600660205260409020600101549091508082116105ac575060009392505050565b6105b68183610f19565b949350505050565b6000546001600160a01b031633146105d557600080fd5b600c91909155600d55565b6000546001600160a01b031633146105f757600080fd5b600d55565b6060600380548060200260200160405190810160405280929190818152602001828054801561065457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610636575b5050505050905090565b6000546001600160a01b0316331461067557600080fd5b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190610f3f565b60408051600280825260608201835292935060009290916020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190610f58565b8160008151811061078857610788610f75565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106107b9576107b9610f75565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de959034906107ff90600090869030904290600401610f8b565b6000604051808303818588803b15801561081857600080fd5b505af115801561082c573d6000803e3d6000fd5b50506002546040516370a0823160e01b8152306004820152600094508693506001600160a01b0390911691506370a0823190602401602060405180830381865afa15801561087e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a29190610f3f565b6108ac9190610f19565b9050806008546108bc9190610f2c565b600855600754600b546108d0908390610fc0565b6108da9190610fd7565b600a546108e79190610f2c565b600a55505050565b6108f833610dc5565b6109495760405162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f20776169742100000000000000000060448201526064015b60405180910390fd5b61095233610b54565b565b6000546001600160a01b0316331461096b57600080fd5b600c55565b6000546001600160a01b0316331461098757600080fd5b6003546000819003610997575050565b60008060005a90505b84821080156109ae57508383105b15610a6d5783600e54106109c2576000600e555b6109f46003600e54815481106109da576109da610f75565b6000918252602090912001546001600160a01b0316610dc5565b15610a2b57610a2b6003600e5481548110610a1157610a11610f75565b6000918252602090912001546001600160a01b0316610b54565b5a610a368284610f2c565b610a409190610f19565b91505a600e80549192506000610a5583610ff9565b91905055508280610a6590610ff9565b9350506109a0565b505050505b50565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1790529051600091829182916001600160a01b03861691610abb9190611012565b600060405180830381855afa9150503d8060008114610af6576040519150601f19603f3d011682016040523d82523d6000602084013e610afb565b606091505b509150915081610b405760405162461bcd60e51b815260206004820152601060248201526f696e76616c696420646563696d616c7360801b6044820152606401610940565b808060200190518101906105b69190611041565b6001600160a01b0381166000908152600660205260408120549003610b765750565b6000610b8182610533565b90508015610c895780600954610b979190610f2c565b6009556001600160a01b03821660009081526005602090815260408083204290556006909152902060020154610bce908290610f2c565b6001600160a01b0383166000908152600660205260409020600281019190915554610bf890610da2565b6001600160a01b038381166000818152600660205260409081902060010193909355600254925163a9059cbb60e01b815260048101919091526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c879190611064565b505b5050565b60038054610c9d90600190610f19565b81548110610cad57610cad610f75565b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610ceb57610ceb610f75565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260049182905260408120546003805491939291610d3790600190610f19565b81548110610d4757610d47610f75565b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610d7d57610d7d611086565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600b54600a5483610db59190610fc0565b610dbf9190610fd7565b92915050565b600c546001600160a01b03821660009081526005602052604081205490914291610def9190610f2c565b11158015610dbf5750600d54610e0483610533565b101592915050565b6001600160a01b0381168114610a7257600080fd5b60008060408385031215610e3457600080fd5b8235610e3f81610e0c565b946020939093013593505050565b600060208284031215610e5f57600080fd5b8135610e6a81610e0c565b9392505050565b60008060408385031215610e8457600080fd5b50508035926020909101359150565b600060208284031215610ea557600080fd5b5035919050565b600081518084526020808501945080840160005b83811015610ee55781516001600160a01b031687529582019590820190600101610ec0565b509495945050505050565b602081526000610e6a6020830184610eac565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dbf57610dbf610f03565b80820180821115610dbf57610dbf610f03565b600060208284031215610f5157600080fd5b5051919050565b600060208284031215610f6a57600080fd5b8151610e6a81610e0c565b634e487b7160e01b600052603260045260246000fd5b848152608060208201526000610fa46080830186610eac565b6001600160a01b03949094166040830152506060015292915050565b8082028115828204841417610dbf57610dbf610f03565b600082610ff457634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161100b5761100b610f03565b5060010190565b6000825160005b818110156110335760208186018101518583015201611019565b506000920191825250919050565b60006020828403121561105357600080fd5b815160ff81168114610e6a57600080fd5b60006020828403121561107657600080fd5b81518015158114610e6a57600080fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212201cf5dee46f94badc7f6af66de6bb93c3bd84df2a94f8cae5e9389c4c3797b7c064736f6c63430008110033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202250d34f9012943f8e082511b2c6fe03ed9b9800aa9b10c087dbb92ca5edd39564736f6c63430008110033
Deployed Bytecode
0x608060405260043610620003db5760003560e01c8063807c2d9c1162000203578063bf56b3711162000117578063dd62ed3e11620000ad578063f16fd78d1162000078578063f16fd78d1462000b5f578063f887ea401462000b84578063fabe62831462000ba6578063fbd757531462000bcb57600080fd5b8063dd62ed3e1462000ab3578063e4cbd6b31462000afd578063e66b1d1e1462000b22578063ef92e2221462000b4757600080fd5b8063cb29813c11620000ee578063cb29813c1462000a2e578063cc6badb31462000a53578063d4fb9a011462000a6b578063d920334e1462000a8e57600080fd5b8063bf56b37114620009dc578063c45a015514620009f4578063ca987b0e1462000a1657600080fd5b8063a3a2e89e1162000199578063a9059cbb1162000164578063a9059cbb146200094b578063b515566a1462000970578063bad3ea6a1462000995578063bb542ef014620009b757600080fd5b8063a3a2e89e14620008bd578063a3e6761014620008e2578063a457c2d71462000904578063a8aa1b31146200092957600080fd5b80638b42507f11620001da5780638b42507f14620008375780638ea5220f146200086b5780639502c426146200088d57806395d89b4114620008a557600080fd5b8063807c2d9c14620007ef57806383ad799414620008075780638760d539146200081f57600080fd5b806336e4ec6411620002fb578063546a8811116200029157806370a08231116200025c57806370a0823114620007605780637c0ff205146200079a5780637d1db4a514620007b25780637db1342c14620007ca57600080fd5b8063546a881114620006dd57806359a51c3414620006f55780636827e7641462000730578063704ce43e146200074857600080fd5b80633f4218e011620002d25780633f4218e0146200062f5780634355855a146200066357806344de2e4c14620006975780634a74bb0214620006ba57600080fd5b806336e4ec6414620005cd5780633950935114620005e55780633dab5269146200060a57600080fd5b806323b872dd11620003715780632b112e4911620003485780632b112e49146200054d5780632d48e89614620005655780632de22cf8146200058a578063313ce56714620005af57600080fd5b806323b872dd14620004eb57806327193bc41462000510578063273123b7146200052857600080fd5b806316d9962b11620003b257806316d9962b146200047057806318160ddd14620004975780631df4ccfc14620004ae5780631f53ac0214620004c657600080fd5b80630445b66714620003e857806306fdde031462000413578063095ea7b3146200043a57600080fd5b36620003e357005b600080fd5b348015620003f557600080fd5b5062000400601d5481565b6040519081526020015b60405180910390f35b3480156200042057600080fd5b506200042b62000be3565b6040516200040a919062002c80565b3480156200044757600080fd5b506200045f6200045936600462002cf8565b62000c7d565b60405190151581526020016200040a565b3480156200047d57600080fd5b50620004956200048f36600462002d27565b62000c99565b005b348015620004a457600080fd5b5060045462000400565b348015620004bb57600080fd5b506200040060135481565b348015620004d357600080fd5b5062000495620004e536600462002d41565b62000cd4565b348015620004f857600080fd5b506200045f6200050a36600462002d61565b62000d23565b3480156200051d57600080fd5b506200049562000d4e565b3480156200053557600080fd5b50620004956200054736600462002d41565b62000dc6565b3480156200055a57600080fd5b506200040062000e6f565b3480156200057257600080fd5b50620004956200058436600462002da7565b62000ee3565b3480156200059757600080fd5b5062000495620005a936600462002f09565b62000f7c565b348015620005bc57600080fd5b50604051600981526020016200040a565b348015620005da57600080fd5b5062000400600c5481565b348015620005f257600080fd5b506200045f6200060436600462002cf8565b62001537565b3480156200061757600080fd5b50620004956200062936600462002ffb565b6200157a565b3480156200063c57600080fd5b506200045f6200064e36600462002d41565b60086020526000908152604090205460ff1681565b3480156200067057600080fd5b506200045f6200068236600462002d41565b600a6020526000908152604090205460ff1681565b348015620006a457600080fd5b506007546200045f90600160a01b900460ff1681565b348015620006c757600080fd5b506019546200045f90600160a81b900460ff1681565b348015620006ea57600080fd5b5062000495620015c9565b3480156200070257600080fd5b5060075462000717906001600160a01b031681565b6040516001600160a01b0390911681526020016200040a565b3480156200073d57600080fd5b5062000400600f5481565b3480156200075557600080fd5b5062000400600e5481565b3480156200076d57600080fd5b50620004006200077f36600462002d41565b6001600160a01b031660009081526002602052604090205490565b348015620007a757600080fd5b506200040060115481565b348015620007bf57600080fd5b5062000400601b5481565b348015620007d757600080fd5b5062000495620007e936600462002d27565b62001664565b348015620007fc57600080fd5b5062000400601c5481565b3480156200081457600080fd5b5062000400600d5481565b3480156200082c57600080fd5b5062000495620016a1565b3480156200084457600080fd5b506200045f6200085636600462002d41565b60096020526000908152604090205460ff1681565b3480156200087857600080fd5b5060195462000717906001600160a01b031681565b3480156200089a57600080fd5b506200040060125481565b348015620008b257600080fd5b506200042b6200175c565b348015620008ca57600080fd5b5062000495620008dc3660046200301a565b6200176d565b348015620008ef57600080fd5b5060185462000717906001600160a01b031681565b3480156200091157600080fd5b506200045f6200092336600462002cf8565b620017c5565b3480156200093657600080fd5b5060165462000717906001600160a01b031681565b3480156200095857600080fd5b506200045f6200096a36600462002cf8565b62001866565b3480156200097d57600080fd5b50620004956200098f36600462003054565b62001876565b348015620009a257600080fd5b5060005462000717906001600160a01b031681565b348015620009c457600080fd5b5062000495620009d636600462002d41565b62001916565b348015620009e957600080fd5b5062000400600b5481565b34801562000a0157600080fd5b5060175462000717906001600160a01b031681565b34801562000a2357600080fd5b506200040060145481565b34801562000a3b57600080fd5b506200049562000a4d36600462003113565b62001965565b34801562000a6057600080fd5b506200040060105481565b34801562000a7857600080fd5b506019546200045f90600160b01b900460ff1681565b34801562000a9b57600080fd5b506200049562000aad36600462002d27565b620019ba565b34801562000ac057600080fd5b506200040062000ad236600462003157565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801562000b0a57600080fd5b506200049562000b1c36600462002da7565b620019f7565b34801562000b2f57600080fd5b506200049562000b4136600462003195565b62001ab6565b34801562000b5457600080fd5b506200049562001b01565b34801562000b6c57600080fd5b506200049562000b7e36600462002d41565b62001b90565b34801562000b9157600080fd5b5060155462000717906001600160a01b031681565b34801562000bb357600080fd5b506200049562000bc53660046200301a565b62001bdf565b34801562000bd857600080fd5b506200049562001caa565b60606005805462000bf490620031b3565b80601f016020809104026020016040519081016040528092919081815260200182805462000c2290620031b3565b801562000c735780601f1062000c475761010080835404028352916020019162000c73565b820191906000526020600020905b81548152906001019060200180831162000c5557829003601f168201915b5050505050905090565b60003362000c8d81858562001cf8565b60019150505b92915050565b6018546001600160a01b0316331462000ccf5760405162461bcd60e51b815260040162000cc690620031ef565b60405180910390fd5b600155565b6018546001600160a01b0316331462000d015760405162461bcd60e51b815260040162000cc690620031ef565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b60003362000d3385828562001e20565b62000d4085858562001eb7565b5060019150505b9392505050565b6017546001600160a01b0316331462000d7b5760405162461bcd60e51b815260040162000cc69062003224565b600b541562000dc05760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b604482015260640162000cc6565b42600b55565b60075433906001600160a01b031681148062000def57506018546001600160a01b038281169116145b62000e4d5760405162461bcd60e51b815260206004820152602760248201527f4f77616e626c653a2063616c6c657220646f65736e277420686176652070657260448201526636b4b9b9b4b7b760c91b606482015260840162000cc6565b506001600160a01b03166000908152601a60205260409020805460ff19169055565b60026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5461dead60009081527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5460045491929162000ed291906200327c565b62000ede91906200327c565b905090565b6018546001600160a01b0316331462000f105760405162461bcd60e51b815260040162000cc690620031ef565b6000546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801562000f5f57600080fd5b505af115801562000f74573d6000803e3d6000fd5b505050505050565b6017546001600160a01b0316331462000fa95760405162461bcd60e51b815260040162000cc69062003224565b600562000fb78a82620032e1565b50600662000fc68982620032e1565b50866004600082825462000fdb9190620033ae565b90915550506046861015620010245760405162461bcd60e51b815260206004820152600e60248201526d1b1bddc81b1c081c195c98d95b9d60921b604482015260640162000cc6565b6000606462001034888a620033c4565b620010409190620033de565b9050600062001050828a6200327c565b3360009081526002602052604081208054929350849290919062001076908490620033ae565b90915550506001600160a01b03871660009081526002602052604081208054839290620010a5908490620033ae565b9091555050604051828152339060009060008051602062004a138339815191529060200160405180910390a36040518181526001600160a01b0388169060009060008051602062004a138339815191529060200160405180910390a36103e8620011118a6005620033c4565b6200111d9190620033de565b601b5560646200112f8a6001620033c4565b6200113b9190620033de565b601c55610fa06200114e8a6005620033c4565b6200115a9190620033de565b601d55601580546001600160a01b0319166001600160a01b0387169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd919062003401565b6001600160a01b031663c9c65396601560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001265919062003401565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620012b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012d8919062003401565b601680546001600160a01b0319166001600160a01b03928316179055306000818152600360209081526040808320601554909516835293905282902060001990559051869188916200132a9062002c72565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801562001367573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392831617815530808252600860209081526040808420805460ff199081166001908117909255601780548816875283872080548316841790558e881687526009855283872080548316841790556016805489168852848820805484168517905590548816875283872080548316841790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548316841790557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054831684179055549096168552600a8352818520805487168217905592845280842080548616841790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80548616841790559280527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380549094169091179092558451600d55840151600e556080840151600f55830151601055606083015160115560a0830151601255620014ef62002401565b5050601880546001600160a01b039687166001600160a01b03199182168117909255601980548216909217909155600780549390961692169190911790935550505050505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490919062000c8d908290869062001574908790620033ae565b62001cf8565b6018546001600160a01b03163314620015a75760405162461bcd60e51b815260040162000cc690620031ef565b60198054921515600160a81b0260ff60a81b1990931692909217909155601d55565b6017546001600160a01b03163314620015f65760405162461bcd60e51b815260040162000cc69062003224565b601580546001600160a01b039081166000908152600860209081526040808320805460ff19908116600190811790925595548516845260099092528083208054861683179055601854909316825291902080549092161790556019805460ff60b01b1916600160b01b179055565b6018546001600160a01b03163314620016915760405162461bcd60e51b815260040162000cc690620031ef565b6200169c81620024ef565b601c55565b6007546001600160a01b03163314620016ce5760405162461bcd60e51b815260040162000cc69062003421565b6000600c5411620017145760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c99591d58d959608a1b604482015260640162000cc6565b6200171e620025d9565b600c54601360008282546200173491906200327c565b9091555050600c5460148054600090620017509084906200327c565b90915550506000600c55565b60606006805462000bf490620031b3565b6018546001600160a01b031633146200179a5760405162461bcd60e51b815260040162000cc690620031ef565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909190838110156200184c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840162000cc6565b6200185b828686840362001cf8565b506001949350505050565b6000336200185b81858562001eb7565b6007546001600160a01b03163314620018a35760405162461bcd60e51b815260040162000cc69062003421565b60005b815181101562001912576001601a6000848481518110620018cb57620018cb62003466565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558062001909816200347c565b915050620018a6565b5050565b6018546001600160a01b03163314620019435760405162461bcd60e51b815260040162000cc690620031ef565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314620019925760405162461bcd60e51b815260040162000cc690620031ef565b600d869055600e849055600f82905560108590556011839055601281905562000f7462002401565b6018546001600160a01b03163314620019e75760405162461bcd60e51b815260040162000cc690620031ef565b620019f281620024ef565b601b55565b6018546001600160a01b0316331462001a245760405162461bcd60e51b815260040162000cc690620031ef565b60005460405163f821076960e01b8152600481018490526001600160a01b039091169063f821076990602401600060405180830381600087803b15801562001a6b57600080fd5b505af115801562001a80573d6000803e3d6000fd5b5050600054604051635117196160e01b8152600481018590526001600160a01b0390911692506351171961915060240162000f44565b6018546001600160a01b0316331462001ae35760405162461bcd60e51b815260040162000cc690620031ef565b60078054911515600160a01b0260ff60a01b19909216919091179055565b6018546001600160a01b0316331462001b2e5760405162461bcd60e51b815260040162000cc690620031ef565b600c5460021462001b755760405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b604482015260640162000cc6565b62001b7f620025d9565b6001600c5562001b8e62002401565b565b6007546001600160a01b0316331462001bbd5760405162461bcd60e51b815260040162000cc69062003421565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b0316331462001c0c5760405162461bcd60e51b815260040162000cc690620031ef565b600b5460000362001c315760405162461bcd60e51b815260040162000cc69062003498565b600b5462001c439062015180620033ae565b42101562001c7f5760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015260640162000cc6565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6017546001600160a01b0316331462001cd75760405162461bcd60e51b815260040162000cc69062003224565b6019805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b03831662001d5c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000cc6565b6001600160a01b03821662001dbf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000cc6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260036020908152604080832093861683529290522054600019811462001eb1578181101562001ea25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640162000cc6565b62001eb1848484840362001cf8565b50505050565b601954600090600160b01b900460ff1662001f005760405162461bcd60e51b81526020600482015260086024820152672174726164696e6760c01b604482015260640162000cc6565b6001600160a01b0384166000908152601a602052604090205460ff1615801562001f4357506001600160a01b0383166000908152601a602052604090205460ff16155b62001f4d57600080fd5b601954600160a01b900460ff161562001f755762001f6d8484846200264c565b905062000d47565b6016546001600160a01b0385811691161462001ff357601b548211158062001fb557506001600160a01b03841660009081526009602052604090205460ff165b62001ff35760405162461bcd60e51b815260206004820152600d60248201526c13585e08151608105b5bdd5b9d609a1b604482015260640162000cc6565b6001600160a01b03831660009081526009602052604090205460ff16158015620020265750600754600160a01b900460ff165b15620020aa57601c5462002040906402540be400620033ae565b6001600160a01b03841660009081526002602052604090205462002066908490620033ae565b1115620020aa5760405162461bcd60e51b815260206004820152601160248201527013585e0815d85b1b195d08105b5bdd5b9d607a1b604482015260640162000cc6565b6016546001600160a01b03163314801590620020d05750601954600160a01b900460ff16155b8015620020e65750601954600160a81b900460ff165b8015620021045750601d543060009081526002602052604090205410155b15620021145762002114620026fa565b6001600160a01b0384166000908152600260205260409020546200213a9083906200327c565b6001600160a01b038086166000818152600260205260409020929092556016548492911614806200217857506016546001600160a01b038581169116145b15620021dd576001600160a01b03851660009081526008602052604090205460ff16158015620021c157506001600160a01b03841660009081526008602052604090205460ff16155b620021cd5782620021da565b620021da85858562002bad565b90505b6001600160a01b03841660009081526002602052604090205462002203908290620033ae565b6001600160a01b038086166000908152600260209081526040808320949094559188168152600a909152205460ff16620022b157600080546001600160a01b038781168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b1580156200229757600080fd5b505af1158015620022ac573d6000803e3d6000fd5b505050505b6001600160a01b0384166000908152600a602052604090205460ff166200234c57600080546001600160a01b038681168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b1580156200233257600080fd5b505af115801562002347573d6000803e3d6000fd5b505050505b6000546001546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991620023859160040190815260200190565b600060405180830381600087803b158015620023a057600080fd5b505af1158015620023b5573d6000803e3d6000fd5b50505050836001600160a01b0316856001600160a01b031660008051602062004a1383398151915283604051620023ee91815260200190565b60405180910390a3506001949350505050565b600c54600d54600e54600f54620024199190620033ae565b620024259190620033ae565b620024319190620033ae565b601355600c546010546011546012546200244c9190620033ae565b620024589190620033ae565b620024649190620033ae565b601455601354600c1015620024ab5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b604482015260640162000cc6565b6011601454111562001b8e5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b604482015260640162000cc6565b600b54600003620025145760405162461bcd60e51b815260040162000cc69062003498565b6103e86004546005620025289190620033c4565b620025349190620033de565b811015620025775760405162461bcd60e51b815260206004820152600f60248201526e135b5a5b880c0b8d49481b1a5b5a5d608a1b604482015260640162000cc6565b606460045460036200258a9190620033c4565b620025969190620033de565b811115620025d65760405162461bcd60e51b815260206004820152600c60248201526b13585e080cc9481b1a5b5a5d60a21b604482015260640162000cc6565b50565b600b54600003620025fe5760405162461bcd60e51b815260040162000cc69062003498565b600b5462002610906203f480620033ae565b42101562001b8e5760405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015260640162000cc6565b6001600160a01b038316600090815260026020526040812054620026729083906200327c565b6001600160a01b038086166000908152600260205260408082209390935590851681522054620026a4908390620033ae565b6001600160a01b03808516600081815260026020526040908190209390935591519086169060008051602062004a1383398151915290620026e89086815260200190565b60405180910390a35060019392505050565b6019805460ff60a01b1916600160a01b179055306000908152600260208190526040822054601354600e5491939291620027359085620033c4565b620027419190620033de565b6200274d9190620033de565b905060006200275d82846200327c565b90508015806200276b575081155b156200277a5750505062002b9e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110620027b257620027b262003466565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156200280c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002832919062003401565b8160018151811062002848576200284862003466565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b815291169063791ac9479062002890908590600090869030904290600401620034bb565b600060405180830381600087803b158015620028ab57600080fd5b505af1158015620028c0573d6000803e3d6000fd5b5050601354600f5447935060009250620028db9084620033c4565b620028e79190620033de565b90506000601354600c5484620028fe9190620033c4565b6200290a9190620033de565b905060006002601354600e5486620029239190620033c4565b6200292f9190620033de565b6200293b9190620033de565b9050600081836200294d86886200327c565b6200295991906200327c565b6200296591906200327c565b9050841562002a87578215620029e157601760009054906101000a90046001600160a01b03166001600160a01b0316639ee25ae4846040518263ffffffff1660e01b81526004016000604051808303818588803b158015620029c657600080fd5b505af1158015620029db573d6000803e3d6000fd5b50505050505b831562002a87576019546040516000916001600160a01b03169086908381818185875af1925050503d806000811462002a37576040519150601f19603f3d011682016040523d82523d6000602084013e62002a3c565b606091505b505090508062002a855760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640162000cc6565b505b60008054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562002ad657600080fd5b505af115801562002aeb573d6000803e3d6000fd5b5050505050600088111562002b945760155460405163f305d71960e01b8152306004820152602481018a9052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990849060c40160606040518083038185885af115801562002b69573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062002b9091906200352e565b5050505b5050505050505050505b6019805460ff60a01b19169055565b60165460009081906001600160a01b0385811691161462002bd15760135462002bd5565b6014545b90506000606462002be78386620033c4565b62002bf39190620033de565b3060009081526002602052604090205490915062002c13908290620033ae565b30600081815260026020526040908190209290925590516001600160a01b0388169060008051602062004a138339815191529062002c549085815260200190565b60405180910390a362002c6881856200327c565b9695505050505050565b6114b5806200355e83390190565b600060208083528351808285015260005b8181101562002caf5785810183015185820160400152820162002c91565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114620025d657600080fd5b803562002cf38162002cd0565b919050565b6000806040838503121562002d0c57600080fd5b823562002d198162002cd0565b946020939093013593505050565b60006020828403121562002d3a57600080fd5b5035919050565b60006020828403121562002d5457600080fd5b813562000d478162002cd0565b60008060006060848603121562002d7757600080fd5b833562002d848162002cd0565b9250602084013562002d968162002cd0565b929592945050506040919091013590565b6000806040838503121562002dbb57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562002e0c5762002e0c62002dca565b604052919050565b600082601f83011262002e2657600080fd5b813567ffffffffffffffff81111562002e435762002e4362002dca565b62002e58601f8201601f191660200162002de0565b81815284602083860101111562002e6e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121562002e9e57600080fd5b60405160c0810181811067ffffffffffffffff8211171562002ec45762002ec462002dca565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060008060008060008060006101c08a8c03121562002f2957600080fd5b893567ffffffffffffffff8082111562002f4257600080fd5b62002f508d838e0162002e14565b9a5060208c013591508082111562002f6757600080fd5b5062002f768c828d0162002e14565b98505060408a0135965060608a0135955060808a013562002f978162002cd0565b945060a08a013562002fa98162002cd0565b935062002fb960c08b0162002ce6565b925062002fc960e08b0162002ce6565b915062002fdb8b6101008c0162002e8b565b90509295985092959850929598565b8035801515811462002cf357600080fd5b600080604083850312156200300f57600080fd5b62002d198362002fea565b600080604083850312156200302e57600080fd5b82356200303b8162002cd0565b91506200304b6020840162002fea565b90509250929050565b600060208083850312156200306857600080fd5b823567ffffffffffffffff808211156200308157600080fd5b818501915085601f8301126200309657600080fd5b813581811115620030ab57620030ab62002dca565b8060051b9150620030be84830162002de0565b8181529183018401918481019088841115620030d957600080fd5b938501935b83851015620031075784359250620030f68362002cd0565b8282529385019390850190620030de565b98975050505050505050565b60008060008060008060c087890312156200312d57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156200316b57600080fd5b8235620031788162002cd0565b915060208301356200318a8162002cd0565b809150509250929050565b600060208284031215620031a857600080fd5b62000d478262002fea565b600181811c90821680620031c857607f821691505b602082108103620031e957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000c935762000c9362003266565b601f821115620032dc57600081815260208120601f850160051c81016020861015620032bb5750805b601f850160051c820191505b8181101562000f7457828155600101620032c7565b505050565b815167ffffffffffffffff811115620032fe57620032fe62002dca565b62003316816200330f8454620031b3565b8462003292565b602080601f8311600181146200334e5760008415620033355750858301515b600019600386901b1c1916600185901b17855562000f74565b600085815260208120601f198616915b828110156200337f578886015182559484019460019091019084016200335e565b50858210156200339e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111562000c935762000c9362003266565b808202811582820484141762000c935762000c9362003266565b600082620033fc57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200341457600080fd5b815162000d478162002cd0565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820162003491576200349162003266565b5060010190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156200350d5784516001600160a01b031683529383019391830191600101620034e6565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156200354457600080fd5b835192506020840151915060408401519050925092509256fe60806040526ec097ce7bc90715b34b9f1000000000600b55610708600c55670de0b6b3a7640000600d553480156200003657600080fd5b50604051620014b5380380620014b58339810160408190526200005991620001ec565b600180546001600160a01b03199081166001600160a01b038681169190911790925560028054821685841617905560008054909116918316919091178155620000ae82620000dd602090811b62000a7517901c565b90506000620000bf82600a6200034b565b9050620000ce81600162000363565b600d5550620003d39350505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1790529051600091829182916001600160a01b038616916200012591906200037d565b600060405180830381855afa9150503d806000811462000162576040519150601f19603f3d011682016040523d82523d6000602084013e62000167565b606091505b509150915081620001b15760405162461bcd60e51b815260206004820152601060248201526f696e76616c696420646563696d616c7360801b604482015260640160405180910390fd5b80806020019051810190620001c79190620003ae565b949350505050565b80516001600160a01b0381168114620001e757600080fd5b919050565b6000806000606084860312156200020257600080fd5b6200020d84620001cf565b92506200021d60208501620001cf565b91506200022d60408501620001cf565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200028d57816000190482111562000271576200027162000236565b808516156200027f57918102915b93841c939080029062000251565b509250929050565b600082620002a65750600162000345565b81620002b55750600062000345565b8160018114620002ce5760028114620002d957620002f9565b600191505062000345565b60ff841115620002ed57620002ed62000236565b50506001821b62000345565b5060208310610133831016604e8410600b84101617156200031e575081810a62000345565b6200032a83836200024c565b806000190482111562000341576200034162000236565b0290505b92915050565b60006200035c60ff84168362000295565b9392505050565b808202811582820484141762000345576200034562000236565b6000825160005b81811015620003a0576020818601810151858301520162000384565b506000920191825250919050565b600060208284031215620003c157600080fd5b815160ff811681146200035c57600080fd5b6110d280620003e36000396000f3fe60806040526004361061011f5760003560e01c8063ce7c2ac2116100a0578063f0fc6bca11610064578063f0fc6bca14610318578063f1e9f1e51461032d578063f821076914610365578063ffb2c47914610385578063ffd49c84146103a557600080fd5b8063ce7c2ac214610260578063d0e30db0146102b7578063d4fda1f2146102bf578063e2d2e219146102ec578063efca2eed1461030257600080fd5b80634fab0ae8116100e75780634fab0ae8146101c557806351171961146101db57806366817df5146101fb5780638477d9f314610228578063997664d71461024a57600080fd5b806311ce023d1461012457806314b6ca961461014d57806328fd31981461016f5780632d48e8961461018f5780633a98ef39146101af575b600080fd5b34801561013057600080fd5b5061013a600b5481565b6040519081526020015b60405180910390f35b34801561015957600080fd5b5061016d610168366004610e21565b6103bb565b005b34801561017b57600080fd5b5061013a61018a366004610e4d565b610533565b34801561019b57600080fd5b5061016d6101aa366004610e71565b6105be565b3480156101bb57600080fd5b5061013a60075481565b3480156101d157600080fd5b5061013a600d5481565b3480156101e757600080fd5b5061016d6101f6366004610e93565b6105e0565b34801561020757600080fd5b5061013a610216366004610e4d565b60056020526000908152604090205481565b34801561023457600080fd5b5061023d6105fc565b6040516101449190610ef0565b34801561025657600080fd5b5061013a60085481565b34801561026c57600080fd5b5061029c61027b366004610e4d565b60066020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610144565b61016d61065e565b3480156102cb57600080fd5b5061013a6102da366004610e4d565b60046020526000908152604090205481565b3480156102f857600080fd5b5061013a600a5481565b34801561030e57600080fd5b5061013a60095481565b34801561032457600080fd5b5061016d6108ef565b34801561033957600080fd5b5060025461034d906001600160a01b031681565b6040516001600160a01b039091168152602001610144565b34801561037157600080fd5b5061016d610380366004610e93565b610954565b34801561039157600080fd5b5061016d6103a0366004610e93565b610970565b3480156103b157600080fd5b5061013a600c5481565b6000546001600160a01b031633146103d257600080fd5b6001600160a01b038216600090815260066020526040902054156103f9576103f982610b54565b60008111801561041f57506001600160a01b038216600090815260066020526040902054155b1561048557600380546001600160a01b0384166000818152600460205260408120839055600183018455929092527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b03191690911790556104b8565b801580156104aa57506001600160a01b03821660009081526006602052604090205415155b156104b8576104b882610c8d565b6001600160a01b03821660009081526006602052604090205460075482916104df91610f19565b6104e99190610f2c565b6007556001600160a01b038216600090815260066020526040902081905561051081610da2565b6001600160a01b0390921660009081526006602052604090206001019190915550565b6001600160a01b038116600090815260066020526040812054810361055a57506000919050565b6001600160a01b03821660009081526006602052604081205461057c90610da2565b6001600160a01b0384166000908152600660205260409020600101549091508082116105ac575060009392505050565b6105b68183610f19565b949350505050565b6000546001600160a01b031633146105d557600080fd5b600c91909155600d55565b6000546001600160a01b031633146105f757600080fd5b600d55565b6060600380548060200260200160405190810160405280929190818152602001828054801561065457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610636575b5050505050905090565b6000546001600160a01b0316331461067557600080fd5b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190610f3f565b60408051600280825260608201835292935060009290916020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190610f58565b8160008151811061078857610788610f75565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106107b9576107b9610f75565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de959034906107ff90600090869030904290600401610f8b565b6000604051808303818588803b15801561081857600080fd5b505af115801561082c573d6000803e3d6000fd5b50506002546040516370a0823160e01b8152306004820152600094508693506001600160a01b0390911691506370a0823190602401602060405180830381865afa15801561087e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a29190610f3f565b6108ac9190610f19565b9050806008546108bc9190610f2c565b600855600754600b546108d0908390610fc0565b6108da9190610fd7565b600a546108e79190610f2c565b600a55505050565b6108f833610dc5565b6109495760405162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f20776169742100000000000000000060448201526064015b60405180910390fd5b61095233610b54565b565b6000546001600160a01b0316331461096b57600080fd5b600c55565b6000546001600160a01b0316331461098757600080fd5b6003546000819003610997575050565b60008060005a90505b84821080156109ae57508383105b15610a6d5783600e54106109c2576000600e555b6109f46003600e54815481106109da576109da610f75565b6000918252602090912001546001600160a01b0316610dc5565b15610a2b57610a2b6003600e5481548110610a1157610a11610f75565b6000918252602090912001546001600160a01b0316610b54565b5a610a368284610f2c565b610a409190610f19565b91505a600e80549192506000610a5583610ff9565b91905055508280610a6590610ff9565b9350506109a0565b505050505b50565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1790529051600091829182916001600160a01b03861691610abb9190611012565b600060405180830381855afa9150503d8060008114610af6576040519150601f19603f3d011682016040523d82523d6000602084013e610afb565b606091505b509150915081610b405760405162461bcd60e51b815260206004820152601060248201526f696e76616c696420646563696d616c7360801b6044820152606401610940565b808060200190518101906105b69190611041565b6001600160a01b0381166000908152600660205260408120549003610b765750565b6000610b8182610533565b90508015610c895780600954610b979190610f2c565b6009556001600160a01b03821660009081526005602090815260408083204290556006909152902060020154610bce908290610f2c565b6001600160a01b0383166000908152600660205260409020600281019190915554610bf890610da2565b6001600160a01b038381166000818152600660205260409081902060010193909355600254925163a9059cbb60e01b815260048101919091526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c879190611064565b505b5050565b60038054610c9d90600190610f19565b81548110610cad57610cad610f75565b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610ceb57610ceb610f75565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260049182905260408120546003805491939291610d3790600190610f19565b81548110610d4757610d47610f75565b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610d7d57610d7d611086565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600b54600a5483610db59190610fc0565b610dbf9190610fd7565b92915050565b600c546001600160a01b03821660009081526005602052604081205490914291610def9190610f2c565b11158015610dbf5750600d54610e0483610533565b101592915050565b6001600160a01b0381168114610a7257600080fd5b60008060408385031215610e3457600080fd5b8235610e3f81610e0c565b946020939093013593505050565b600060208284031215610e5f57600080fd5b8135610e6a81610e0c565b9392505050565b60008060408385031215610e8457600080fd5b50508035926020909101359150565b600060208284031215610ea557600080fd5b5035919050565b600081518084526020808501945080840160005b83811015610ee55781516001600160a01b031687529582019590820190600101610ec0565b509495945050505050565b602081526000610e6a6020830184610eac565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dbf57610dbf610f03565b80820180821115610dbf57610dbf610f03565b600060208284031215610f5157600080fd5b5051919050565b600060208284031215610f6a57600080fd5b8151610e6a81610e0c565b634e487b7160e01b600052603260045260246000fd5b848152608060208201526000610fa46080830186610eac565b6001600160a01b03949094166040830152506060015292915050565b8082028115828204841417610dbf57610dbf610f03565b600082610ff457634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161100b5761100b610f03565b5060010190565b6000825160005b818110156110335760208186018101518583015201611019565b506000920191825250919050565b60006020828403121561105357600080fd5b815160ff81168114610e6a57600080fd5b60006020828403121561107657600080fd5b81518015158114610e6a57600080fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212201cf5dee46f94badc7f6af66de6bb93c3bd84df2a94f8cae5e9389c4c3797b7c064736f6c63430008110033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212202250d34f9012943f8e082511b2c6fe03ed9b9800aa9b10c087dbb92ca5edd39564736f6c63430008110033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.