ETH Price: $2,635.22 (-1.05%)

Token

AMMONITE (AMMO)
 

Overview

Max Total Supply

1,000,000,000 AMMO

Holders

56

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
94,905 AMMO

Value
$0.00
0x13B614a099a09F47b1307B395839C5B86F332113
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AMMONITE

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : AMMONITE.sol
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT

interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address payable private _owner;
    address payable private _previousOwner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor (address payable ownerAddress) {
        _owner = ownerAddress;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = payable(address(0));
    }

    function transferOwnership(address payable newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniSwapRouter02 is IUniswapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

library Utils {
    
    using SafeMath for uint256;

    function swapTokensForEth(
        address routerAddress,
        uint256 tokenAmount
    ) internal {
        IUniSwapRouter02 uniSwapRouter = IUniSwapRouter02(routerAddress);

        // generate the pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniSwapRouter.WETH();

        // make the swap
        uniSwapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapETHForTokens(
        address routerAddress,
        address recipient,
        uint256 ethAmount
    ) internal {
        IUniSwapRouter02 uniSwapRouter = IUniSwapRouter02(routerAddress);

        // generate the pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniSwapRouter.WETH();
        path[1] = address(this);

        // make the swap
        uniSwapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0, // accept any amount of ETH
            path,
            address(recipient),
            block.timestamp + 360
        );
    }

    function addLiquidity(
        address routerAddress,
        address owner,
        uint256 tokenAmount,
        uint256 ethAmount
    ) internal {
        IUniSwapRouter02 uniSwapRouter = IUniSwapRouter02(routerAddress);

        // add the liquidity
        uniSwapRouter.addLiquidityETH{value : ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner,
            block.timestamp + 360
        );
    }
}


contract AMMONITE is Context, IERC20, Ownable{
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isExcludedFromMaxTx;

    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 1e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "AMMONITE";
    string private _symbol = "AMMO";
    uint8 private _decimals = 9;

    IUniSwapRouter02 public uniSwapRouter;
    address public immutable uniSwapPair;
    address payable public marketWallet;
    address payable public devWallet;
    
    uint256 _taxFee;
    uint256 public _taxFeeForBuying = 0; // 0% will be distributed among holder
    uint256 public _taxFeeForSelling = 0; // 0% will be distributed among holder

    uint256 _liquidityFee;
    uint256 public _liquidityFeeForBuying = 20; // 2% will be added to the liquidity pool on each buy
    uint256 public _liquidityFeeForSelling = 40; // 1% will be added to the liquidity pool on each sell
    
    uint256 _marketFee;
    uint256 public _marketFeeForBuying = 20; 
    uint256 public _marketFeeForSelling = 20;  
    
    uint256 _devFee;
    uint256 public _devFeeForBuying = 10;  
    uint256 public _devFeeForSelling = 20;

    bool public swapAndLiquifyEnabled = false; // should be true to turn on to liquidate the pool
    bool public reflectionFeesdiabled = false;
    bool inSwapAndLiquify = false;

    uint256 public maxTxAmount = _tTotal.mul(1).div(100); // 1% of total suppy
    uint256 public minTokenNumberToSell = 1000000 * 1e9;
    uint256 public maxHoldingAmount = _tTotal.mul(2).div(100); // 2% of total supply by default
    uint256 public sellCoolDownTriggeredAt = block.timestamp;
    uint256 public sellCoolDownDuration = 1 seconds;
    uint256 public buyCoolDownTriggeredAt = block.timestamp;
    uint256 public buyCoolDownDuration = 45 seconds;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event ClaimETHSuccessfully(
        address recipient,
        uint256 ethReceived,
        uint256 nextAvailableClaimDate
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor (
        address payable _marketWallet,
        address payable _devWallet
    ) Ownable(payable(msg.sender)) {
        _rOwned[owner()] = _rTotal;

        marketWallet = _marketWallet;
        devWallet = _devWallet;

        IUniSwapRouter02 _uniSwapRouter = IUniSwapRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a pair for this new token
        uniSwapPair = IUniswapFactory(_uniSwapRouter.factory())
        .createPair(address(this), _uniSwapRouter.WETH());

        // set the rest of the contract variables
        uniSwapRouter = _uniSwapRouter;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        // exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;

        emit Transfer(address(0), owner(), _tTotal);
    }

    
    //to receive ETH from uniSwapRouter when swapping
    receive() external payable {}

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BUT: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BUT: decreased allowance below zero"));
        return true;
    }

    function getContractBalance() public view returns(uint256) {
        return address(this).balance;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    // setter functions for Owner
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setAmountLimits(uint256 _maxTxAmount, uint256 _maxHoldAmount) public onlyOwner {
        maxTxAmount = _maxTxAmount;
        maxHoldingAmount = _maxHoldAmount;
    }

    function setReflectionFees(uint256 _btaxFee, uint256 _staxFee) external onlyOwner {
        _taxFeeForBuying = _btaxFee;
        _taxFeeForSelling =_staxFee;
    }
    
    function setAllBuyFees(uint256 _bliquidityFee, uint256 _bmarketFee,  uint256 _bdevFee) external onlyOwner {
        _liquidityFeeForBuying = _bliquidityFee;
        _marketFeeForBuying = _bmarketFee;
        _devFeeForBuying = _bdevFee;
    }

    function setSllSellFees(uint256 _sliquidityFee, uint256 _smarketFee,  uint256 _sdevFee) external onlyOwner {
        _liquidityFeeForSelling = _sliquidityFee;
        _marketFeeForSelling = _smarketFee;
        _devFeeForSelling = _sdevFee;
    }
    
    function setMinTokenNumberToSell(uint256 _amount) public onlyOwner {
        minTokenNumberToSell = _amount;
    }

    function setExcludeFromMaxTx(address _address, bool _state) public onlyOwner {
        _isExcludedFromMaxTx[_address] = _state;
    }

    function setSwapAndLiquifyEnabled(bool _state) public onlyOwner {
        swapAndLiquifyEnabled = _state;
        emit SwapAndLiquifyEnabledUpdated(_state);
    }
    
    function setMarketAddress(address payable _marketAddress) external onlyOwner {
        marketWallet = _marketAddress;
    }
    
    function setDevAddress(address payable _devAddress) external onlyOwner {
        devWallet = _devAddress;
    }
    
    function enableCoolDown() external onlyOwner {
        buyCoolDownDuration = 45 seconds;
    }
    
    function diableCoolDown() external onlyOwner {
        buyCoolDownDuration = 0 seconds;
    }
    
    function removeMaxTxLimit() external onlyOwner {
        maxTxAmount = _tTotal;
    }
    
    function setMaxTxLimit(uint256 _percentageOfSuppy) external onlyOwner {
        maxTxAmount = _tTotal.mul(_percentageOfSuppy).div(100);
    }
    
    function setUniswapRouter(IUniSwapRouter02 _uniSwapRouter) external onlyOwner {
        uniSwapRouter = _uniSwapRouter;
    }

    // internal functions for contract
    
    function totalFeePerTx(uint256 tAmount) internal view returns(uint256) {
        uint256 percentage = tAmount.mul(_taxFee.add(_liquidityFee).add(_marketFee).add(_devFee)).div(1e3);
        return percentage;
    }

    function _reflectFee(uint256 tAmount) private {
        uint256 tFee = tAmount.mul(_taxFee).div(1e3);
        uint256 rFee = tFee.mul(_getRate());
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeAllFee(uint256 tAmount, uint256 currentRate) internal {
        uint256 tFee = tAmount.mul(_liquidityFee.add(_marketFee).add(_devFee)).div(1e3);
        uint256 rFee = tFee.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rFee);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tFee);
        emit Transfer(_msgSender(), address(this), tFee);
    }

    function removeAllFee() private {
        _taxFee = 0;
        _liquidityFee = 0;
        _marketFee = 0;
        _devFee = 0;
    }

    function takeBuyFee() private {
        _taxFee = _taxFeeForBuying;
        _liquidityFee = _liquidityFeeForBuying;
        _marketFee = _marketFeeForBuying;
        _devFee = _devFeeForBuying;
    }

    function takeSellFee() private {
        _taxFee = _taxFeeForSelling;
        _liquidityFee = _liquidityFeeForSelling;
        _marketFee = _marketFeeForSelling;
        _devFee = _devFeeForSelling;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "TOKEN: approve from the zero address");
        require(spender != address(0), "TOKEN: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "TOKEN: transfer from the zero address");
        require(to != address(0), "TOKEN: transfer to the zero address");
        require(amount > 0, "TOKEN: Transfer amount must be greater than zero");

        if(!_isExcludedFromMaxTx[from] && 
            !_isExcludedFromMaxTx[to]   // by default false
        ){
            require(amount <= maxTxAmount,"TOKEN: Amount exceed max limit");

            if(to != uniSwapPair){
                require(balanceOf(to).add(amount) <= maxHoldingAmount,"TOKEN: max holding limit exceeds");
            }

            if(from == uniSwapPair){
                require(buyCoolDownTriggeredAt.add(buyCoolDownDuration) < block.timestamp,
                "TOKEN: wait for buying cool down"
                );
                buyCoolDownTriggeredAt = block.timestamp;
            }

            if(to == uniSwapPair){
                require(sellCoolDownTriggeredAt.add(sellCoolDownDuration) < block.timestamp,
                "TOKEN: wait for selling cool down"
                );
                sellCoolDownTriggeredAt = block.timestamp;
            }
        }

        // swap and liquify
        swapAndLiquify(from, to);

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || reflectionFeesdiabled) {
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee)
            removeAllFee();
        else if(sender == uniSwapPair)
            takeBuyFee();
        else
            takeSellFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(totalFeePerTx(tAmount).mul(currentRate));
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllFee(tAmount, currentRate);
        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(totalFeePerTx(tAmount).mul(currentRate));
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllFee(tAmount, currentRate);
        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(totalFeePerTx(tAmount).mul(currentRate));
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllFee(tAmount, currentRate);
        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(totalFeePerTx(tAmount).mul(currentRate));
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllFee(tAmount, currentRate);
        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function manualSwap() external onlyOwner {
        uint256 contractTokenBalance = balanceOf(address(this));
         _approve(address(this), address(uniSwapRouter), contractTokenBalance);
        Utils.swapTokensForEth(address(uniSwapRouter), contractTokenBalance);
    }

    function manualSend() external onlyOwner {
        takeSellFee();
        uint256 deltaBalance = getContractBalance();
        uint256 totalPercent = _liquidityFee.add(_marketFee);

        uint256 dvPercent = _devFee.mul(1e4).div(totalPercent);

        // devfee transfer
        devWallet.transfer(deltaBalance.mul(dvPercent).div(totalPercent));
        // market fee transfer
        marketWallet.transfer(getContractBalance());
    }

    function swapAndLiquify(address from, address to) private {
        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= maxTxAmount) {
            contractTokenBalance = maxTxAmount;
        }

        bool shouldSell = contractTokenBalance >= minTokenNumberToSell;

        if (
            !inSwapAndLiquify &&
            shouldSell &&
            from != uniSwapPair &&
            swapAndLiquifyEnabled &&
            !(from == address(this) && to == address(uniSwapPair)) 
        ) {
            
            contractTokenBalance = minTokenNumberToSell;
            // approve contract
            _approve(address(this), address(uniSwapRouter), contractTokenBalance);

            takeSellFee();
            uint256 totalPercent = _liquidityFee.add(_marketFee);
            uint256 lpPercent = _liquidityFee.mul(1e4).div(totalPercent).div(2);
            uint256 mwPercent = _marketFee.mul(1e4).div(totalPercent);
            uint256 dvPercent = _devFee.mul(1e4).div(totalPercent);
            
            uint256 otherPiece = contractTokenBalance.mul(lpPercent).div(1e4);
            uint256 tokenAmountToBeSwapped = contractTokenBalance.sub(otherPiece);
            
            Utils.swapTokensForEth(address(uniSwapRouter), tokenAmountToBeSwapped);

            uint256 deltaBalance = getContractBalance();
            
            totalPercent = lpPercent.add(mwPercent).add(dvPercent);

            uint256 ETHToBeAddedToLiquidity = deltaBalance.mul(lpPercent).div(totalPercent);

            Utils.addLiquidity(address(uniSwapRouter), owner(), otherPiece, ETHToBeAddedToLiquidity);
            
            // devfee transfer
            devWallet.transfer(deltaBalance.mul(dvPercent).div(totalPercent));
            // market fee transfer
            marketWallet.transfer(getContractBalance());
            
            emit SwapAndLiquify(tokenAmountToBeSwapped, deltaBalance, otherPiece);
        }
    }
     
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, TOKEN the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_marketWallet","type":"address"},{"internalType":"address payable","name":"_devWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextAvailableClaimDate","type":"uint256"}],"name":"ClaimETHSuccessfully","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_devFeeForBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFeeForSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeForBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeForSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketFeeForBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketFeeForSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeForBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeForSelling","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":"buyCoolDownDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCoolDownTriggeredAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"diableCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenNumberToSell","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeesdiabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCoolDownDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellCoolDownTriggeredAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bliquidityFee","type":"uint256"},{"internalType":"uint256","name":"_bmarketFee","type":"uint256"},{"internalType":"uint256","name":"_bdevFee","type":"uint256"}],"name":"setAllBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"_maxHoldAmount","type":"uint256"}],"name":"setAmountLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketAddress","type":"address"}],"name":"setMarketAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentageOfSuppy","type":"uint256"}],"name":"setMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinTokenNumberToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_btaxFee","type":"uint256"},{"internalType":"uint256","name":"_staxFee","type":"uint256"}],"name":"setReflectionFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sliquidityFee","type":"uint256"},{"internalType":"uint256","name":"_smarketFee","type":"uint256"},{"internalType":"uint256","name":"_sdevFee","type":"uint256"}],"name":"setSllSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniSwapRouter02","name":"_uniSwapRouter","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniSwapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniSwapRouter","outputs":[{"internalType":"contract IUniSwapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052670de0b6b3a76400006009819055620000209060001962000802565b6200002e90600019620007ab565b600a5560408051808201909152600880825267414d4d4f4e49544560c01b60209092019182526200006291600c9162000619565b5060408051808201909152600480825263414d4d4f60e01b60209092019182526200009091600d9162000619565b50600e8054600960ff1990911681179091556000601281905560135560146015819055602860165560188190556019819055600a601b55601c55601d805462ffffff19169055546200010c90606490620000f8906001620004ff602090811b620013d917901c565b6200059360201b620014581790919060201c565b601e5566038d7ea4c68000601f556200013d6064620000f86002600954620004ff60201b620013d91790919060201c565b60205542602155600160225542602355602d6024553480156200015f57600080fd5b50604051620034f6380380620034f68339810160408190526200018291620006de565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a5460026000620001dd6000546001600160a01b031690565b6001600160a01b039081168252602080830193909352604091820160002093909355600f80546001600160a01b0319908116878616179091556010805490911693851693909317909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480840193829003018186803b1580156200026e57600080fd5b505afa15801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a99190620006bf565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f257600080fd5b505afa15801562000307573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032d9190620006bf565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200037657600080fd5b505af11580156200038b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b19190620006bf565b60601b6001600160601b031916608052600e8054610100600160a81b0319166101006001600160a01b03841602179055600160056000620003fa6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080549092166001908117909255600790620004536000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526007909252902080549091166001179055620004a66000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620004ee91815260200190565b60405180910390a35050506200085e565b60008262000510575060006200058d565b60006200051e838562000789565b9050826200052d858362000772565b146200058a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200058a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620005dd60201b60201c565b60008183620006015760405162461bcd60e51b81526004016200058191906200071c565b50600062000610848662000772565b95945050505050565b8280546200062790620007c5565b90600052602060002090601f0160209004810192826200064b576000855562000696565b82601f106200066657805160ff191683800117855562000696565b8280016001018555821562000696579182015b828111156200069657825182559160200191906001019062000679565b50620006a4929150620006a8565b5090565b5b80821115620006a45760008155600101620006a9565b600060208284031215620006d1578081fd5b81516200058a8162000845565b60008060408385031215620006f1578081fd5b8251620006fe8162000845565b6020840151909250620007118162000845565b809150509250929050565b6000602080835283518082850152825b818110156200074a578581018301518582016040015282016200072c565b818111156200075c5783604083870101525b50601f01601f1916929092016040019392505050565b6000826200078457620007846200082f565b500490565b6000816000190483118215151615620007a657620007a662000819565b500290565b600082821015620007c057620007c062000819565b500390565b600181811c90821680620007da57607f821691505b60208210811415620007fc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200081457620008146200082f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146200085b57600080fd5b50565b60805160601c612c4f620008a7600039600081816108a90152818161178801528181611825015281816118c901528181611c8901528181611ce80152611f660152612c4f6000f3fe60806040526004361061037a5760003560e01c806389f9a1d3116101d1578063c8b11dee11610102578063ea2f0b37116100a0578063f42938901161006f578063f4293890146109bc578063fae92612146109d1578063fb271bab146109f1578063fc6f4cbb14610a1157600080fd5b8063ea2f0b3714610947578063f1dabdde14610967578063f21097f414610987578063f2fde38b1461099c57600080fd5b8063d837df05116100dc578063d837df0514610897578063dd62ed3e146108cb578063de3be53514610911578063e4440a861461092757600080fd5b8063c8b11dee1461084b578063d0d41fe114610861578063d6ba9f501461088157600080fd5b8063a1e45b811161016f578063be23322911610149578063be233229146107df578063bea9849e146107f5578063c05ebfaa14610815578063c49b9a801461082b57600080fd5b8063a1e45b8114610789578063a457c2d71461079f578063a9059cbb146107bf57600080fd5b80638d780233116101ab5780638d780233146107205780638da5cb5b146107365780638ea5220f1461075457806395d89b411461077457600080fd5b806389f9a1d3146106de5780638b591a01146106f45780638c0b5e221461070a57600080fd5b80634a74bb02116102ab57806364f5a5bb1161024957806370a082311161022357806370a082311461067d578063715018a61461069d5780637a091849146106b2578063879d2bf9146106c857600080fd5b806364f5a5bb146106345780636f9fb98a146106545780637055835e1461066757600080fd5b806351bc3c851161028557806351bc3c85146105895780635342acb41461059e5780635b89029c146105d75780635d01ff3d146105f757600080fd5b80634a74bb021461053a5780634bcc26161461055457806350402f4e1461057457600080fd5b80632b123ba11161031857806339509351116102f257806339509351146104c5578063437823ec146104e55780634415fb611461050557806348914c991461051a57600080fd5b80632b123ba11461046d5780632d83811914610483578063313ce567146104a357600080fd5b806313114a9d1161035457806313114a9d1461040157806318160ddd1461041657806323b872dd1461042b57806324719e9e1461044b57600080fd5b80630558583b1461038657806306fdde03146103af578063095ea7b3146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60215481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610a30565b6040516103a691906129e9565b3480156103dd57600080fd5b506103f16103ec366004612913565b610ac2565b60405190151581526020016103a6565b34801561040d57600080fd5b50600b5461039c565b34801561042257600080fd5b5060095461039c565b34801561043757600080fd5b506103f161044636600461289f565b610ad9565b34801561045757600080fd5b5061046b610466366004612970565b610b42565b005b34801561047957600080fd5b5061039c60225481565b34801561048f57600080fd5b5061039c61049e366004612958565b610b80565b3480156104af57600080fd5b50600e5460405160ff90911681526020016103a6565b3480156104d157600080fd5b506103f16104e0366004612913565b610c04565b3480156104f157600080fd5b5061046b61050036600461282f565b610c3a565b34801561051157600080fd5b5061046b610c88565b34801561052657600080fd5b5061046b610535366004612991565b610cba565b34801561054657600080fd5b50601d546103f19060ff1681565b34801561056057600080fd5b5061046b61056f366004612958565b610cf2565b34801561058057600080fd5b5061046b610d21565b34801561059557600080fd5b5061046b610d52565b3480156105aa57600080fd5b506103f16105b936600461282f565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105e357600080fd5b5061046b6105f23660046128df565b610dc7565b34801561060357600080fd5b50600e5461061c9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b34801561064057600080fd5b5061046b61064f366004612958565b610e1c565b34801561066057600080fd5b504761039c565b34801561067357600080fd5b5061039c60155481565b34801561068957600080fd5b5061039c61069836600461282f565b610e6c565b3480156106a957600080fd5b5061046b610ecb565b3480156106be57600080fd5b5061039c601f5481565b3480156106d457600080fd5b5061039c601b5481565b3480156106ea57600080fd5b5061039c60205481565b34801561070057600080fd5b5061039c60235481565b34801561071657600080fd5b5061039c601e5481565b34801561072c57600080fd5b5061039c60165481565b34801561074257600080fd5b506000546001600160a01b031661061c565b34801561076057600080fd5b5060105461061c906001600160a01b031681565b34801561078057600080fd5b506103c4610f3f565b34801561079557600080fd5b5061039c60185481565b3480156107ab57600080fd5b506103f16107ba366004612913565b610f4e565b3480156107cb57600080fd5b506103f16107da366004612913565b610f9d565b3480156107eb57600080fd5b5061039c60125481565b34801561080157600080fd5b5061046b61081036600461282f565b610faa565b34801561082157600080fd5b5061039c601c5481565b34801561083757600080fd5b5061046b61084636600461293e565b610ffc565b34801561085757600080fd5b5061039c60135481565b34801561086d57600080fd5b5061046b61087c36600461282f565b61106d565b34801561088d57600080fd5b5061039c60195481565b3480156108a357600080fd5b5061061c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108d757600080fd5b5061039c6108e6366004612867565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091d57600080fd5b5061039c60245481565b34801561093357600080fd5b50600f5461061c906001600160a01b031681565b34801561095357600080fd5b5061046b61096236600461282f565b6110b9565b34801561097357600080fd5b5061046b610982366004612991565b611104565b34801561099357600080fd5b5061046b61113c565b3480156109a857600080fd5b5061046b6109b736600461282f565b61116d565b3480156109c857600080fd5b5061046b611257565b3480156109dd57600080fd5b5061046b6109ec36600461282f565b611358565b3480156109fd57600080fd5b5061046b610a0c366004612970565b6113a4565b348015610a1d57600080fd5b50601d546103f190610100900460ff1681565b6060600c8054610a3f90612b4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6b90612b4f565b8015610ab85780601f10610a8d57610100808354040283529160200191610ab8565b820191906000526020600020905b815481529060010190602001808311610a9b57829003601f168201915b5050505050905090565b6000610acf33848461149a565b5060015b92915050565b6000610ae68484846115be565b610b388433610b3385604051806060016040528060268152602001612bd1602691396001600160a01b038a16600090815260046020908152604080832033845290915290205491906119e8565b61149a565b5060019392505050565b6000546001600160a01b03163314610b755760405162461bcd60e51b8152600401610b6c90612a3c565b60405180910390fd5b601291909155601355565b6000600a54821115610be75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b6c565b6000610bf1611a22565b9050610bfd8382611458565b9392505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610acf918590610b339086611a45565b6000546001600160a01b03163314610c645760405162461bcd60e51b8152600401610b6c90612a3c565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314610cb25760405162461bcd60e51b8152600401610b6c90612a3c565b600954601e55565b6000546001600160a01b03163314610ce45760405162461bcd60e51b8152600401610b6c90612a3c565b601592909255601855601b55565b6000546001600160a01b03163314610d1c5760405162461bcd60e51b8152600401610b6c90612a3c565b601f55565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610b6c90612a3c565b6000602455565b6000546001600160a01b03163314610d7c5760405162461bcd60e51b8152600401610b6c90612a3c565b6000610d8730610e6c565b9050610da930600e60019054906101000a90046001600160a01b03168361149a565b600e54610dc49061010090046001600160a01b031682611aa4565b50565b6000546001600160a01b03163314610df15760405162461bcd60e51b8152600401610b6c90612a3c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e465760405162461bcd60e51b8152600401610b6c90612a3c565b610e666064610e60836009546113d990919063ffffffff16565b90611458565b601e5550565b6001600160a01b03811660009081526006602052604081205460ff1615610ea957506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610ad390610b80565b6000546001600160a01b03163314610ef55760405162461bcd60e51b8152600401610b6c90612a3c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600d8054610a3f90612b4f565b6000610acf3384610b3385604051806060016040528060238152602001612bf7602391393360009081526004602090815260408083206001600160a01b038d16845290915290205491906119e8565b6000610acf3384846115be565b6000546001600160a01b03163314610fd45760405162461bcd60e51b8152600401610b6c90612a3c565b600e80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146110265760405162461bcd60e51b8152600401610b6c90612a3c565b601d805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6000546001600160a01b031633146110975760405162461bcd60e51b8152600401610b6c90612a3c565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110e35760405162461bcd60e51b8152600401610b6c90612a3c565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610b6c90612a3c565b601692909255601955601c55565b6000546001600160a01b031633146111665760405162461bcd60e51b8152600401610b6c90612a3c565b602d602455565b6000546001600160a01b031633146111975760405162461bcd60e51b8152600401610b6c90612a3c565b6001600160a01b0381166111fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b6c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112815760405162461bcd60e51b8152600401610b6c90612a3c565b61129e601354601155601654601455601954601755601c54601a55565b60175460145447916000916112b291611a45565b905060006112d182610e60612710601a546113d990919063ffffffff16565b6010549091506001600160a01b03166108fc6112f184610e6087866113d9565b6040518115909202916000818181858888f19350505050158015611319573d6000803e3d6000fd5b50600f546001600160a01b03166108fc476040518115909202916000818181858888f19350505050158015611352573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146113825760405162461bcd60e51b8152600401610b6c90612a3c565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610b6c90612a3c565b601e91909155602055565b6000826113e857506000610ad3565b60006113f48385612b19565b9050826114018583612af9565b14610bfd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b6c565b6000610bfd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c19565b6001600160a01b0383166114fc5760405162461bcd60e51b8152602060048201526024808201527f544f4b454e3a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b6c565b6001600160a01b03821661155d5760405162461bcd60e51b815260206004820152602260248201527f544f4b454e3a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b6c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116225760405162461bcd60e51b815260206004820152602560248201527f544f4b454e3a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b6c565b6001600160a01b0382166116845760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b6c565b600081116116ed5760405162461bcd60e51b815260206004820152603060248201527f544f4b454e3a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610b6c565b6001600160a01b03831660009081526007602052604090205460ff1615801561172f57506001600160a01b03821660009081526007602052604090205460ff16155b1561197557601e548111156117865760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e3a20416d6f756e7420657863656564206d6178206c696d697400006044820152606401610b6c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611823576020546117d5826117cf85610e6c565b90611a45565b11156118235760405162461bcd60e51b815260206004820181905260248201527f544f4b454e3a206d617820686f6c64696e67206c696d697420657863656564736044820152606401610b6c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614156118c75742611875602454602354611a4590919063ffffffff16565b106118c25760405162461bcd60e51b815260206004820181905260248201527f544f4b454e3a207761697420666f7220627579696e6720636f6f6c20646f776e6044820152606401610b6c565b426023555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156119755742611919602254602154611a4590919063ffffffff16565b106119705760405162461bcd60e51b815260206004820152602160248201527f544f4b454e3a207761697420666f722073656c6c696e6720636f6f6c20646f776044820152603760f91b6064820152608401610b6c565b426021555b61197f8383611c47565b6001600160a01b03831660009081526005602052604090205460019060ff16806119c157506001600160a01b03831660009081526005602052604090205460ff165b806119d35750601d54610100900460ff165b156119dc575060005b61135284848484611f41565b60008184841115611a0c5760405162461bcd60e51b8152600401610b6c91906129e9565b506000611a198486612b38565b95945050505050565b6000806000611a2f6120da565b9092509050611a3e8282611458565b9250505090565b600080611a528385612ae1565b905083811015610bfd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b6c565b604080516002808252606082018352849260009291906020830190803683370190505090503081600081518110611aeb57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b4457600080fd5b505afa158015611b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7c919061284b565b81600181518110611b9d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81529083169063791ac94790611be1908690600090869030904290600401612a71565b600060405180830381600087803b158015611bfb57600080fd5b505af1158015611c0f573d6000803e3d6000fd5b5050505050505050565b60008183611c3a5760405162461bcd60e51b8152600401610b6c91906129e9565b506000611a198486612af9565b6000611c5230610e6c565b9050601e548110611c625750601e545b601f54601d54908210159062010000900460ff16158015611c805750805b8015611cbe57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b8015611ccc5750601d5460ff165b8015611d1e57506001600160a01b03841630148015611d1c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b155b1561135257601f549150611d4830600e60019054906101000a90046001600160a01b03168461149a565b611d65601354601155601654601455601954601755601c54601a55565b6000611d7e601754601454611a4590919063ffffffff16565b90506000611da26002610e6084610e606127106014546113d990919063ffffffff16565b90506000611dc183610e606127106017546113d990919063ffffffff16565b90506000611de084610e60612710601a546113d990919063ffffffff16565b90506000611df4612710610e6089876113d9565b90506000611e028883612294565b600e54909150611e209061010090046001600160a01b031682611aa4565b47611e2f846117cf8888611a45565b96506000611e4188610e60848a6113d9565b600e54909150611e73906001600160a01b0361010090910416611e6c6000546001600160a01b031690565b86846122d6565b6010546001600160a01b03166108fc611e908a610e60868a6113d9565b6040518115909202916000818181858888f19350505050158015611eb8573d6000803e3d6000fd5b50600f546001600160a01b03166108fc476040518115909202916000818181858888f19350505050158015611ef1573d6000803e3d6000fd5b5060408051848152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505050505050505050505050565b80611f6457611f5f6000601181905560148190556017819055601a55565b611fd8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415611fbb57611f5f601254601155601554601455601854601755601b54601a55565b611fd8601354601155601654601455601954601755601c54601a55565b6001600160a01b03841660009081526006602052604090205460ff16801561201957506001600160a01b03831660009081526006602052604090205460ff16155b1561202e5761202984848461239a565b611352565b6001600160a01b03841660009081526006602052604090205460ff1615801561206f57506001600160a01b03831660009081526006602052604090205460ff165b1561207f576120298484846124f0565b6001600160a01b03841660009081526006602052604090205460ff1680156120bf57506001600160a01b03831660009081526006602052604090205460ff165b156120cf576120298484846125b7565b611352848484612648565b600a546009546000918291825b6008548110156122645782600260006008848154811061211757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612190575081600360006008848154811061216957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121a657600a54600954945094505050509091565b6121fa60026000600884815481106121ce57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612294565b9250612250600360006008848154811061222457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612294565b91508061225c81612b8a565b9150506120e7565b50600954600a5461227491611458565b82101561228b57600a546009549350935050509091565b90939092509050565b6000610bfd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119e8565b836001600160a01b03811663f305d7198330866000808a6122f942610168612ae1565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b15801561236157600080fd5b505af1158015612375573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c0f91906129bc565b60006123a4611a22565b905060006123bb6123b4846126aa565b8490612294565b905060006123c984846113d9565b905060006123ea6123e3856123dd886126aa565b906113d9565b8390612294565b6001600160a01b0388166000908152600360205260409020549091506124109086612294565b6001600160a01b03881660009081526003602090815260408083209390935560029052205461243f9083612294565b6001600160a01b03808916600090815260026020526040808220939093559088168152205461246e9082611a45565b6001600160a01b03871660009081526002602052604090205561249185856126e0565b61249a856127bf565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124df91815260200190565b60405180910390a350505050505050565b60006124fa611a22565b9050600061250a6123b4846126aa565b9050600061251884846113d9565b9050600061252c6123e3856123dd886126aa565b6001600160a01b0388166000908152600260205260409020549091506125529083612294565b6001600160a01b038089166000908152600260209081526040808320949094559189168152600390915220546125889084611a45565b6001600160a01b03871660009081526003602090815260408083209390935560029052205461246e9082611a45565b60006125c1611a22565b905060006125d16123b4846126aa565b905060006125df84846113d9565b905060006125f36123e3856123dd886126aa565b6001600160a01b0388166000908152600360205260409020549091506126199086612294565b6001600160a01b0388166000908152600360209081526040808320939093556002905220546125529083612294565b6000612652611a22565b905060006126626123b4846126aa565b9050600061267084846113d9565b905060006126846123e3856123dd886126aa565b6001600160a01b03881660009081526002602052604090205490915061243f9083612294565b600080610bfd6103e8610e606126d9601a546117cf6017546117cf601454601154611a4590919063ffffffff16565b86906113d9565b60006127086103e8610e606126d9601a546117cf601754601454611a4590919063ffffffff16565b9050600061271682846113d9565b306000908152600260205260409020549091506127339082611a45565b3060009081526002602090815260408083209390935560069052205460ff161561278257306000908152600360205260409020546127719083611a45565b306000908152600360205260409020555b604051828152309033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b60006127dc6103e8610e60601154856113d990919063ffffffff16565b905060006127f26127eb611a22565b83906113d9565b600a549091506128029082612294565b600a55600b546128129083611a45565b600b55505050565b8035801515811461282a57600080fd5b919050565b600060208284031215612840578081fd5b8135610bfd81612bbb565b60006020828403121561285c578081fd5b8151610bfd81612bbb565b60008060408385031215612879578081fd5b823561288481612bbb565b9150602083013561289481612bbb565b809150509250929050565b6000806000606084860312156128b3578081fd5b83356128be81612bbb565b925060208401356128ce81612bbb565b929592945050506040919091013590565b600080604083850312156128f1578182fd5b82356128fc81612bbb565b915061290a6020840161281a565b90509250929050565b60008060408385031215612925578182fd5b823561293081612bbb565b946020939093013593505050565b60006020828403121561294f578081fd5b610bfd8261281a565b600060208284031215612969578081fd5b5035919050565b60008060408385031215612982578182fd5b50508035926020909101359150565b6000806000606084860312156129a5578283fd5b505081359360208301359350604090920135919050565b6000806000606084860312156129d0578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612a15578581018301518582016040015282016129f9565b81811115612a265783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612ac05784516001600160a01b031683529383019391830191600101612a9b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612af457612af4612ba5565b500190565b600082612b1457634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612b3357612b33612ba5565b500290565b600082821015612b4a57612b4a612ba5565b500390565b600181811c90821680612b6357607f821691505b60208210811415612b8457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b9e57612b9e612ba5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610dc457600080fdfe4255543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654255543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122074a284fc2fc2133cd9d90d192983f8d7119a4cbd82c56a2225a2a8b7e59a6ed064736f6c63430008040033000000000000000000000000403726f8391138ca808417797c2f12c497f1fda9000000000000000000000000791a7fb6ee7537e62801241d56d93beb9dab65bc

Deployed Bytecode

0x60806040526004361061037a5760003560e01c806389f9a1d3116101d1578063c8b11dee11610102578063ea2f0b37116100a0578063f42938901161006f578063f4293890146109bc578063fae92612146109d1578063fb271bab146109f1578063fc6f4cbb14610a1157600080fd5b8063ea2f0b3714610947578063f1dabdde14610967578063f21097f414610987578063f2fde38b1461099c57600080fd5b8063d837df05116100dc578063d837df0514610897578063dd62ed3e146108cb578063de3be53514610911578063e4440a861461092757600080fd5b8063c8b11dee1461084b578063d0d41fe114610861578063d6ba9f501461088157600080fd5b8063a1e45b811161016f578063be23322911610149578063be233229146107df578063bea9849e146107f5578063c05ebfaa14610815578063c49b9a801461082b57600080fd5b8063a1e45b8114610789578063a457c2d71461079f578063a9059cbb146107bf57600080fd5b80638d780233116101ab5780638d780233146107205780638da5cb5b146107365780638ea5220f1461075457806395d89b411461077457600080fd5b806389f9a1d3146106de5780638b591a01146106f45780638c0b5e221461070a57600080fd5b80634a74bb02116102ab57806364f5a5bb1161024957806370a082311161022357806370a082311461067d578063715018a61461069d5780637a091849146106b2578063879d2bf9146106c857600080fd5b806364f5a5bb146106345780636f9fb98a146106545780637055835e1461066757600080fd5b806351bc3c851161028557806351bc3c85146105895780635342acb41461059e5780635b89029c146105d75780635d01ff3d146105f757600080fd5b80634a74bb021461053a5780634bcc26161461055457806350402f4e1461057457600080fd5b80632b123ba11161031857806339509351116102f257806339509351146104c5578063437823ec146104e55780634415fb611461050557806348914c991461051a57600080fd5b80632b123ba11461046d5780632d83811914610483578063313ce567146104a357600080fd5b806313114a9d1161035457806313114a9d1461040157806318160ddd1461041657806323b872dd1461042b57806324719e9e1461044b57600080fd5b80630558583b1461038657806306fdde03146103af578063095ea7b3146103d157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60215481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b506103c4610a30565b6040516103a691906129e9565b3480156103dd57600080fd5b506103f16103ec366004612913565b610ac2565b60405190151581526020016103a6565b34801561040d57600080fd5b50600b5461039c565b34801561042257600080fd5b5060095461039c565b34801561043757600080fd5b506103f161044636600461289f565b610ad9565b34801561045757600080fd5b5061046b610466366004612970565b610b42565b005b34801561047957600080fd5b5061039c60225481565b34801561048f57600080fd5b5061039c61049e366004612958565b610b80565b3480156104af57600080fd5b50600e5460405160ff90911681526020016103a6565b3480156104d157600080fd5b506103f16104e0366004612913565b610c04565b3480156104f157600080fd5b5061046b61050036600461282f565b610c3a565b34801561051157600080fd5b5061046b610c88565b34801561052657600080fd5b5061046b610535366004612991565b610cba565b34801561054657600080fd5b50601d546103f19060ff1681565b34801561056057600080fd5b5061046b61056f366004612958565b610cf2565b34801561058057600080fd5b5061046b610d21565b34801561059557600080fd5b5061046b610d52565b3480156105aa57600080fd5b506103f16105b936600461282f565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105e357600080fd5b5061046b6105f23660046128df565b610dc7565b34801561060357600080fd5b50600e5461061c9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016103a6565b34801561064057600080fd5b5061046b61064f366004612958565b610e1c565b34801561066057600080fd5b504761039c565b34801561067357600080fd5b5061039c60155481565b34801561068957600080fd5b5061039c61069836600461282f565b610e6c565b3480156106a957600080fd5b5061046b610ecb565b3480156106be57600080fd5b5061039c601f5481565b3480156106d457600080fd5b5061039c601b5481565b3480156106ea57600080fd5b5061039c60205481565b34801561070057600080fd5b5061039c60235481565b34801561071657600080fd5b5061039c601e5481565b34801561072c57600080fd5b5061039c60165481565b34801561074257600080fd5b506000546001600160a01b031661061c565b34801561076057600080fd5b5060105461061c906001600160a01b031681565b34801561078057600080fd5b506103c4610f3f565b34801561079557600080fd5b5061039c60185481565b3480156107ab57600080fd5b506103f16107ba366004612913565b610f4e565b3480156107cb57600080fd5b506103f16107da366004612913565b610f9d565b3480156107eb57600080fd5b5061039c60125481565b34801561080157600080fd5b5061046b61081036600461282f565b610faa565b34801561082157600080fd5b5061039c601c5481565b34801561083757600080fd5b5061046b61084636600461293e565b610ffc565b34801561085757600080fd5b5061039c60135481565b34801561086d57600080fd5b5061046b61087c36600461282f565b61106d565b34801561088d57600080fd5b5061039c60195481565b3480156108a357600080fd5b5061061c7f000000000000000000000000eebd8b748663b779df7b193f7d5797138ecc945081565b3480156108d757600080fd5b5061039c6108e6366004612867565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561091d57600080fd5b5061039c60245481565b34801561093357600080fd5b50600f5461061c906001600160a01b031681565b34801561095357600080fd5b5061046b61096236600461282f565b6110b9565b34801561097357600080fd5b5061046b610982366004612991565b611104565b34801561099357600080fd5b5061046b61113c565b3480156109a857600080fd5b5061046b6109b736600461282f565b61116d565b3480156109c857600080fd5b5061046b611257565b3480156109dd57600080fd5b5061046b6109ec36600461282f565b611358565b3480156109fd57600080fd5b5061046b610a0c366004612970565b6113a4565b348015610a1d57600080fd5b50601d546103f190610100900460ff1681565b6060600c8054610a3f90612b4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6b90612b4f565b8015610ab85780601f10610a8d57610100808354040283529160200191610ab8565b820191906000526020600020905b815481529060010190602001808311610a9b57829003601f168201915b5050505050905090565b6000610acf33848461149a565b5060015b92915050565b6000610ae68484846115be565b610b388433610b3385604051806060016040528060268152602001612bd1602691396001600160a01b038a16600090815260046020908152604080832033845290915290205491906119e8565b61149a565b5060019392505050565b6000546001600160a01b03163314610b755760405162461bcd60e51b8152600401610b6c90612a3c565b60405180910390fd5b601291909155601355565b6000600a54821115610be75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b6c565b6000610bf1611a22565b9050610bfd8382611458565b9392505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610acf918590610b339086611a45565b6000546001600160a01b03163314610c645760405162461bcd60e51b8152600401610b6c90612a3c565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314610cb25760405162461bcd60e51b8152600401610b6c90612a3c565b600954601e55565b6000546001600160a01b03163314610ce45760405162461bcd60e51b8152600401610b6c90612a3c565b601592909255601855601b55565b6000546001600160a01b03163314610d1c5760405162461bcd60e51b8152600401610b6c90612a3c565b601f55565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610b6c90612a3c565b6000602455565b6000546001600160a01b03163314610d7c5760405162461bcd60e51b8152600401610b6c90612a3c565b6000610d8730610e6c565b9050610da930600e60019054906101000a90046001600160a01b03168361149a565b600e54610dc49061010090046001600160a01b031682611aa4565b50565b6000546001600160a01b03163314610df15760405162461bcd60e51b8152600401610b6c90612a3c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e465760405162461bcd60e51b8152600401610b6c90612a3c565b610e666064610e60836009546113d990919063ffffffff16565b90611458565b601e5550565b6001600160a01b03811660009081526006602052604081205460ff1615610ea957506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610ad390610b80565b6000546001600160a01b03163314610ef55760405162461bcd60e51b8152600401610b6c90612a3c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600d8054610a3f90612b4f565b6000610acf3384610b3385604051806060016040528060238152602001612bf7602391393360009081526004602090815260408083206001600160a01b038d16845290915290205491906119e8565b6000610acf3384846115be565b6000546001600160a01b03163314610fd45760405162461bcd60e51b8152600401610b6c90612a3c565b600e80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146110265760405162461bcd60e51b8152600401610b6c90612a3c565b601d805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6000546001600160a01b031633146110975760405162461bcd60e51b8152600401610b6c90612a3c565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110e35760405162461bcd60e51b8152600401610b6c90612a3c565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461112e5760405162461bcd60e51b8152600401610b6c90612a3c565b601692909255601955601c55565b6000546001600160a01b031633146111665760405162461bcd60e51b8152600401610b6c90612a3c565b602d602455565b6000546001600160a01b031633146111975760405162461bcd60e51b8152600401610b6c90612a3c565b6001600160a01b0381166111fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b6c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112815760405162461bcd60e51b8152600401610b6c90612a3c565b61129e601354601155601654601455601954601755601c54601a55565b60175460145447916000916112b291611a45565b905060006112d182610e60612710601a546113d990919063ffffffff16565b6010549091506001600160a01b03166108fc6112f184610e6087866113d9565b6040518115909202916000818181858888f19350505050158015611319573d6000803e3d6000fd5b50600f546001600160a01b03166108fc476040518115909202916000818181858888f19350505050158015611352573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146113825760405162461bcd60e51b8152600401610b6c90612a3c565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610b6c90612a3c565b601e91909155602055565b6000826113e857506000610ad3565b60006113f48385612b19565b9050826114018583612af9565b14610bfd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b6c565b6000610bfd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c19565b6001600160a01b0383166114fc5760405162461bcd60e51b8152602060048201526024808201527f544f4b454e3a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b6c565b6001600160a01b03821661155d5760405162461bcd60e51b815260206004820152602260248201527f544f4b454e3a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b6c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116225760405162461bcd60e51b815260206004820152602560248201527f544f4b454e3a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b6c565b6001600160a01b0382166116845760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b6c565b600081116116ed5760405162461bcd60e51b815260206004820152603060248201527f544f4b454e3a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610b6c565b6001600160a01b03831660009081526007602052604090205460ff1615801561172f57506001600160a01b03821660009081526007602052604090205460ff16155b1561197557601e548111156117865760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e3a20416d6f756e7420657863656564206d6178206c696d697400006044820152606401610b6c565b7f000000000000000000000000eebd8b748663b779df7b193f7d5797138ecc94506001600160a01b0316826001600160a01b031614611823576020546117d5826117cf85610e6c565b90611a45565b11156118235760405162461bcd60e51b815260206004820181905260248201527f544f4b454e3a206d617820686f6c64696e67206c696d697420657863656564736044820152606401610b6c565b7f000000000000000000000000eebd8b748663b779df7b193f7d5797138ecc94506001600160a01b0316836001600160a01b031614156118c75742611875602454602354611a4590919063ffffffff16565b106118c25760405162461bcd60e51b815260206004820181905260248201527f544f4b454e3a207761697420666f7220627579696e6720636f6f6c20646f776e6044820152606401610b6c565b426023555b7f000000000000000000000000eebd8b748663b779df7b193f7d5797138ecc94506001600160a01b0316826001600160a01b031614156119755742611919602254602154611a4590919063ffffffff16565b106119705760405162461bcd60e51b815260206004820152602160248201527f544f4b454e3a207761697420666f722073656c6c696e6720636f6f6c20646f776044820152603760f91b6064820152608401610b6c565b426021555b61197f8383611c47565b6001600160a01b03831660009081526005602052604090205460019060ff16806119c157506001600160a01b03831660009081526005602052604090205460ff165b806119d35750601d54610100900460ff165b156119dc575060005b61135284848484611f41565b60008184841115611a0c5760405162461bcd60e51b8152600401610b6c91906129e9565b506000611a198486612b38565b95945050505050565b6000806000611a2f6120da565b9092509050611a3e8282611458565b9250505090565b600080611a528385612ae1565b905083811015610bfd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b6c565b604080516002808252606082018352849260009291906020830190803683370190505090503081600081518110611aeb57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b4457600080fd5b505afa158015611b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7c919061284b565b81600181518110611b9d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81529083169063791ac94790611be1908690600090869030904290600401612a71565b600060405180830381600087803b158015611bfb57600080fd5b505af1158015611c0f573d6000803e3d6000fd5b5050505050505050565b60008183611c3a5760405162461bcd60e51b8152600401610b6c91906129e9565b506000611a198486612af9565b6000611c5230610e6c565b9050601e548110611c625750601e545b601f54601d54908210159062010000900460ff16158015611c805750805b8015611cbe57507f000000000000000000000000eebd8b748663b779df7b193f7d5797138ecc94506001600160a01b0316846001600160a01b031614155b8015611ccc5750601d5460ff165b8015611d1e57506001600160a01b03841630148015611d1c57507f000000000000000000000000eebd8b748663b779df7b193f7d5797138ecc94506001600160a01b0316836001600160a01b0316145b155b1561135257601f549150611d4830600e60019054906101000a90046001600160a01b03168461149a565b611d65601354601155601654601455601954601755601c54601a55565b6000611d7e601754601454611a4590919063ffffffff16565b90506000611da26002610e6084610e606127106014546113d990919063ffffffff16565b90506000611dc183610e606127106017546113d990919063ffffffff16565b90506000611de084610e60612710601a546113d990919063ffffffff16565b90506000611df4612710610e6089876113d9565b90506000611e028883612294565b600e54909150611e209061010090046001600160a01b031682611aa4565b47611e2f846117cf8888611a45565b96506000611e4188610e60848a6113d9565b600e54909150611e73906001600160a01b0361010090910416611e6c6000546001600160a01b031690565b86846122d6565b6010546001600160a01b03166108fc611e908a610e60868a6113d9565b6040518115909202916000818181858888f19350505050158015611eb8573d6000803e3d6000fd5b50600f546001600160a01b03166108fc476040518115909202916000818181858888f19350505050158015611ef1573d6000803e3d6000fd5b5060408051848152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505050505050505050505050565b80611f6457611f5f6000601181905560148190556017819055601a55565b611fd8565b7f000000000000000000000000eebd8b748663b779df7b193f7d5797138ecc94506001600160a01b0316846001600160a01b03161415611fbb57611f5f601254601155601554601455601854601755601b54601a55565b611fd8601354601155601654601455601954601755601c54601a55565b6001600160a01b03841660009081526006602052604090205460ff16801561201957506001600160a01b03831660009081526006602052604090205460ff16155b1561202e5761202984848461239a565b611352565b6001600160a01b03841660009081526006602052604090205460ff1615801561206f57506001600160a01b03831660009081526006602052604090205460ff165b1561207f576120298484846124f0565b6001600160a01b03841660009081526006602052604090205460ff1680156120bf57506001600160a01b03831660009081526006602052604090205460ff165b156120cf576120298484846125b7565b611352848484612648565b600a546009546000918291825b6008548110156122645782600260006008848154811061211757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612190575081600360006008848154811061216957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121a657600a54600954945094505050509091565b6121fa60026000600884815481106121ce57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612294565b9250612250600360006008848154811061222457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612294565b91508061225c81612b8a565b9150506120e7565b50600954600a5461227491611458565b82101561228b57600a546009549350935050509091565b90939092509050565b6000610bfd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119e8565b836001600160a01b03811663f305d7198330866000808a6122f942610168612ae1565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b15801561236157600080fd5b505af1158015612375573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c0f91906129bc565b60006123a4611a22565b905060006123bb6123b4846126aa565b8490612294565b905060006123c984846113d9565b905060006123ea6123e3856123dd886126aa565b906113d9565b8390612294565b6001600160a01b0388166000908152600360205260409020549091506124109086612294565b6001600160a01b03881660009081526003602090815260408083209390935560029052205461243f9083612294565b6001600160a01b03808916600090815260026020526040808220939093559088168152205461246e9082611a45565b6001600160a01b03871660009081526002602052604090205561249185856126e0565b61249a856127bf565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124df91815260200190565b60405180910390a350505050505050565b60006124fa611a22565b9050600061250a6123b4846126aa565b9050600061251884846113d9565b9050600061252c6123e3856123dd886126aa565b6001600160a01b0388166000908152600260205260409020549091506125529083612294565b6001600160a01b038089166000908152600260209081526040808320949094559189168152600390915220546125889084611a45565b6001600160a01b03871660009081526003602090815260408083209390935560029052205461246e9082611a45565b60006125c1611a22565b905060006125d16123b4846126aa565b905060006125df84846113d9565b905060006125f36123e3856123dd886126aa565b6001600160a01b0388166000908152600360205260409020549091506126199086612294565b6001600160a01b0388166000908152600360209081526040808320939093556002905220546125529083612294565b6000612652611a22565b905060006126626123b4846126aa565b9050600061267084846113d9565b905060006126846123e3856123dd886126aa565b6001600160a01b03881660009081526002602052604090205490915061243f9083612294565b600080610bfd6103e8610e606126d9601a546117cf6017546117cf601454601154611a4590919063ffffffff16565b86906113d9565b60006127086103e8610e606126d9601a546117cf601754601454611a4590919063ffffffff16565b9050600061271682846113d9565b306000908152600260205260409020549091506127339082611a45565b3060009081526002602090815260408083209390935560069052205460ff161561278257306000908152600360205260409020546127719083611a45565b306000908152600360205260409020555b604051828152309033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b60006127dc6103e8610e60601154856113d990919063ffffffff16565b905060006127f26127eb611a22565b83906113d9565b600a549091506128029082612294565b600a55600b546128129083611a45565b600b55505050565b8035801515811461282a57600080fd5b919050565b600060208284031215612840578081fd5b8135610bfd81612bbb565b60006020828403121561285c578081fd5b8151610bfd81612bbb565b60008060408385031215612879578081fd5b823561288481612bbb565b9150602083013561289481612bbb565b809150509250929050565b6000806000606084860312156128b3578081fd5b83356128be81612bbb565b925060208401356128ce81612bbb565b929592945050506040919091013590565b600080604083850312156128f1578182fd5b82356128fc81612bbb565b915061290a6020840161281a565b90509250929050565b60008060408385031215612925578182fd5b823561293081612bbb565b946020939093013593505050565b60006020828403121561294f578081fd5b610bfd8261281a565b600060208284031215612969578081fd5b5035919050565b60008060408385031215612982578182fd5b50508035926020909101359150565b6000806000606084860312156129a5578283fd5b505081359360208301359350604090920135919050565b6000806000606084860312156129d0578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612a15578581018301518582016040015282016129f9565b81811115612a265783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612ac05784516001600160a01b031683529383019391830191600101612a9b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612af457612af4612ba5565b500190565b600082612b1457634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612b3357612b33612ba5565b500290565b600082821015612b4a57612b4a612ba5565b500390565b600181811c90821680612b6357607f821691505b60208210811415612b8457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b9e57612b9e612ba5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610dc457600080fdfe4255543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654255543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122074a284fc2fc2133cd9d90d192983f8d7119a4cbd82c56a2225a2a8b7e59a6ed064736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000403726f8391138ca808417797c2f12c497f1fda9000000000000000000000000791a7fb6ee7537e62801241d56d93beb9dab65bc

-----Decoded View---------------
Arg [0] : _marketWallet (address): 0x403726f8391138CA808417797C2F12C497F1FdA9
Arg [1] : _devWallet (address): 0x791a7FB6eE7537E62801241d56d93beB9dab65Bc

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000403726f8391138ca808417797c2f12c497f1fda9
Arg [1] : 000000000000000000000000791a7fb6ee7537e62801241d56d93beb9dab65bc


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.