ETH Price: $3,480.76 (+1.82%)

Token

Dark Brandon (BRANDON)
 

Overview

Max Total Supply

75,757,757,757,757 BRANDON

Holders

288

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
140,140,728,319.80356903049010501 BRANDON

Value
$0.00
0xef8b2709ff7f5c96db6eafa62f00cab70604e970
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:
DarkBrandon

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 8 : DarkBrandon.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;         

import "@openzeppelin/contracts/access/Ownable.sol";         
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";         
import "@openzeppelin/contracts/utils/math/SafeMath.sol";         
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";         
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";         

interface IUSDCReceiver {
    function initialize(address) external;
    function withdraw() external;
    function withdrawUnsupportedAsset(address, uint256) external;
}

contract USDCReceiver is IUSDCReceiver, Ownable {
    address public usdc;
    address public token;

    constructor() Ownable() {
        token = msg.sender;
    }

    function initialize(address _usdc) public onlyOwner {
        require(usdc == address(0x0), "Already initialized");
        usdc = _usdc;
    }

    function withdraw() public {
        require(msg.sender == token, "Caller is not token");
        IERC20(usdc).transfer(token, IERC20(usdc).balanceOf(address(this)));
    }

    function withdrawUnsupportedAsset(address _token, uint256 _amount) public onlyOwner {
        if(_token == address(0x0))
            payable(owner()).transfer(_amount);
        else
            IERC20(_token).transfer(owner(), _amount);
    }
}

contract DarkBrandon is Context, IERC20, Ownable {         
    using SafeMath for uint256;         

    IUniswapV2Router02 private _uniswapV2Router;

    USDCReceiver private _receiver;         

    mapping (address => uint) private _antiMEV;         

    mapping (address => uint256) private _balances;         

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

    mapping (address => bool) private _isExcludedFromFees;         
    mapping (address => bool) private _isExcludedMaxTransactionAmount;         

    bool public tradingOpen;         
    bool private _swapping;         
    bool public swapEnabled;         
    bool public antiMEVEnabled;         

    string private constant _name = "Dark Brandon";         
    string private constant _symbol = "BRANDON";         

    uint8 private constant _decimals = 18;         

    uint256 private constant _totalSupply = 75_757_757_757_757 * (10**_decimals);         

    uint256 public buyThreshold = _totalSupply.mul(15).div(1000);         
    uint256 public sellThreshold = _totalSupply.mul(15).div(1000);         
    uint256 public walletThreshold = _totalSupply.mul(15).div(1000);         

    uint256 public fee = 50; // 5%         
    uint256 private _previousFee = fee;         

    uint256 private _tokensForFee;         
    uint256 private _swapTokensAtAmount = _totalSupply.mul(7).div(10000);                  

    address payable private feeCollector;         
    address private _uniswapV2Pair;         
    address private DEAD = 0x000000000000000000000000000000000000dEaD;         
    address private ZERO = 0x0000000000000000000000000000000000000000;         
    address private USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    
    constructor () {         
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);         
        _approve(address(this), address(_uniswapV2Router), _totalSupply);         
        IERC20(USDC).approve(address(_uniswapV2Router), IERC20(USDC).balanceOf(address(this)));         
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), USDC);         
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);         

        _receiver = new USDCReceiver();
        _receiver.initialize(USDC);
        _receiver.transferOwnership(msg.sender);

        feeCollector = payable(_msgSender());         
        _balances[_msgSender()] = _totalSupply;         

        _isExcludedFromFees[owner()] = true;         
        _isExcludedFromFees[address(this)] = true;         
        _isExcludedFromFees[address(_receiver)] = true;         
        _isExcludedFromFees[DEAD] = true;         

        _isExcludedMaxTransactionAmount[owner()] = true;         
        _isExcludedMaxTransactionAmount[address(this)] = true;         
        _isExcludedMaxTransactionAmount[address(_receiver)] = true;         
        _isExcludedMaxTransactionAmount[DEAD] = true;         

        emit Transfer(ZERO, _msgSender(), _totalSupply);         
    }         

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

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

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

    function totalSupply() public pure override returns (uint256) {         
        return _totalSupply;         
    }         

    function balanceOf(address account) public view override returns (uint256) {         
        return _balances[account];         
    }         

    function transfer(address to, uint256 amount) public override returns (bool) {         
        _transfer(_msgSender(), to, 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) {         
        address owner = _msgSender();         
        _approve(owner, spender, amount);         
        return true;         
    }         

    function transferFrom(address from, address to, uint256 amount) public override returns (bool) {         
        address spender = _msgSender();         
        _spendAllowance(from, spender, amount);         
        _transfer(from, to, amount);         
        return true;         
    }         

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {         
        address owner = _msgSender();         
        _approve(owner, spender, allowance(owner, spender) + addedValue);         
        return true;         
    }         

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {         
        address owner = _msgSender();         
        uint256 currentAllowance = allowance(owner, spender);         
        require(currentAllowance >= subtractedValue, "BRANDON: decreased allowance below zero");         
        unchecked {         
            _approve(owner, spender, currentAllowance - subtractedValue);         
        }         

        return true;         
    }         

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

        bool takeFee = true;         
        bool shouldSwap = false;         
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !_swapping) {         
            if(!tradingOpen) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "BRANDON: Trading is not allowed yet.");         

            if (antiMEVEnabled) {         
                if (to != address(_uniswapV2Router) && to != address(_uniswapV2Pair)) {         
                    require(_antiMEV[tx.origin] < block.number - 1 && _antiMEV[to] < block.number - 1, "BRANDON: Transfer delay enabled. Try again later.");         
                    _antiMEV[tx.origin] = block.number;         
                    _antiMEV[to] = block.number;         
                }         
            }         

            if (from == _uniswapV2Pair && to != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[to]) {         
                require(amount <= buyThreshold, "BRANDON: Transfer amount exceeds the buyThreshold.");         
                require(balanceOf(to) + amount <= walletThreshold, "BRANDON: Exceeds maximum wallet token amount.");         
            }         
            
            if (to == _uniswapV2Pair && from != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[from]) {         
                require(amount <= sellThreshold, "BRANDON: Transfer amount exceeds the sellThreshold.");         
                
                shouldSwap = true;         
            }         
        }         

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) takeFee = false;         

        uint256 contractBalance = balanceOf(address(this));         
        bool canSwap = (contractBalance > _swapTokensAtAmount) && shouldSwap;         

        if (canSwap && swapEnabled && !_swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {         
            _swapping = true;         
            _swapBack(contractBalance);         
            _swapping = false;         
        }         

        _tokenTransfer(from, to, amount, takeFee);         
    }         

    function _approve(address owner, address spender, uint256 amount) internal {         
        require(owner != ZERO, "BRANDON: approve from the zero address");         
        require(spender != ZERO, "BRANDON: approve to the zero address");         

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

    function _spendAllowance(address owner, address spender, uint256 amount) internal {         
        uint256 currentAllowance = allowance(owner, spender);         
        if (currentAllowance != type(uint256).max) {         
            require(currentAllowance >= amount, "BRANDON: insufficient allowance");         
            unchecked {         
                _approve(owner, spender, currentAllowance - amount);         
            }         
        }         
    }         

    function _swapBack(uint256 contractBalance) internal {         
        if (contractBalance == 0 || _tokensForFee == 0) return;         

        if (contractBalance > _swapTokensAtAmount * 5) contractBalance = _swapTokensAtAmount * 5;         

        _swapTokensForTokens(contractBalance);          

        _receiver.withdraw();
        
        _tokensForFee = 0;         

        IERC20(USDC).transfer(feeCollector, IERC20(USDC).balanceOf(address(this)));
    }         

    function _swapTokensForTokens(uint256 tokenAmount) internal {         
        address[] memory path = new address[](2);         
        path[0] = address(this);         
        path[1] = USDC;         
        _approve(address(this), address(_uniswapV2Router), tokenAmount);         
        _uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(_receiver),
            block.timestamp
        );         
    }         

    function _removeFee() internal {         
        if (fee == 0) return;         
        _previousFee = fee;         
        fee = 0;         
    }         
    
    function _restoreFee() internal {         
        fee = _previousFee;         
    }         
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) internal {         
        if (!takeFee) _removeFee();         
        else amount = _takeFees(sender, amount);         

        _transferStandard(sender, recipient, amount);         
        
        if (!takeFee) _restoreFee();         
    }         

    function _transferStandard(address sender, address recipient, uint256 tAmount) internal {         
        _balances[sender] = _balances[sender].sub(tAmount);         
        _balances[recipient] = _balances[recipient].add(tAmount);         
        emit Transfer(sender, recipient, tAmount);         
    }         

    function _takeFees(address sender, uint256 amount) internal returns (uint256) {         
        if (fee > 0) {         
            uint256 fees = amount.mul(fee).div(1000);         
            _tokensForFee += fees * fee / fee;         

            if (fees > 0) _transferStandard(sender, address(this), fees);         

            amount -= fees;         
        }         

        return amount;         
    }         

    function usdcReceiverAddress() external view returns (address) {
        return address(_receiver);
    }
    
    function openTrading() public onlyOwner {         
        require(!tradingOpen,"BRANDON: Trading is already open");         
        IERC20(USDC).approve(address(_uniswapV2Router), IERC20(USDC).balanceOf(address(this)));         
        _uniswapV2Router.addLiquidity(address(this), USDC, balanceOf(address(this)), IERC20(USDC).balanceOf(address(this)), 0, 0, owner(), block.timestamp);         
        swapEnabled = true;               
        antiMEVEnabled = true;               
        tradingOpen = true;         
    }         

    function setBuyThreshold(uint256 _buyTreshold) public onlyOwner {         
        require(_buyTreshold >= (totalSupply().mul(1).div(1000)), "BRANDON: Max buy amount cannot be lower than 0.1% total supply.");         
        buyThreshold = _buyTreshold;         
    }         

    function setSellThreshold(uint256 _sellThreshold) public onlyOwner {         
        require(_sellThreshold >= (totalSupply().mul(1).div(1000)), "BRANDON: Max sell amount cannot be lower than 0.1% total supply.");         
        sellThreshold = _sellThreshold;         
    }         
    
    function setWalletThreshold(uint256 _walletThreshold) public onlyOwner {         
        require(_walletThreshold >= (totalSupply().mul(1).div(100)), "BRANDON: Max wallet amount cannot be lower than 1% total supply.");         
        walletThreshold = _walletThreshold;         
    }         
    
    function setSwapTokensAtAmount(uint256 _swapAmountThreshold) public onlyOwner {         
        require(_swapAmountThreshold >= (totalSupply().mul(1).div(100000)), "BRANDON: Swap amount cannot be lower than 0.001% total supply.");         
        require(_swapAmountThreshold <= (totalSupply().mul(5).div(1000)), "BRANDON: Swap amount cannot be higher than 0.5% total supply.");         
        _swapTokensAtAmount = _swapAmountThreshold;         
    }         

    function setSwapEnabled(bool onoff) public onlyOwner {         
        swapEnabled = onoff;         
    }         

    function setAntiMEVEnabled(bool onoff) public onlyOwner {         
        antiMEVEnabled = onoff;         
    }         

    function setFeeCollector(address feeCollectorAddy) public onlyOwner {         
        require(feeCollectorAddy != ZERO, "BRANDON: feeCollector address cannot be 0");         
        feeCollector = payable(feeCollectorAddy);         
        _isExcludedFromFees[feeCollectorAddy] = true;         
        _isExcludedMaxTransactionAmount[feeCollectorAddy] = true;         
    }         

    function excludeFromFees(address[] memory accounts, bool isEx) public onlyOwner {         
        for (uint i = 0; i < accounts.length; i++) _isExcludedFromFees[accounts[i]] = isEx;         
    }         
    
    function excludeFromMaxTransaction(address[] memory accounts, bool isEx) public onlyOwner {         
        for (uint i = 0; i < accounts.length; i++) _isExcludedMaxTransactionAmount[accounts[i]] = isEx;         
    }         

    function rescueETH() public onlyOwner {         
        bool success;         
        (success,) = address(msg.sender).call{value: address(this).balance}("");         
    }         

    function rescueTokens(address tokenAddy) public onlyOwner {         
        require(tokenAddy != address(this), "Cannot withdraw this token");         
        require(IERC20(tokenAddy).balanceOf(address(this)) > 0, "No tokens");         
        uint amount = IERC20(tokenAddy).balanceOf(address(this));         
        IERC20(tokenAddy).transfer(msg.sender, amount);         
    }         

    function removeThresholds() public onlyOwner {         
        buyThreshold = _totalSupply;         
        sellThreshold = _totalSupply;         
        walletThreshold = _totalSupply;         
    }         

    receive() external payable {
    }         
    fallback() external payable {
    }         

}

File 2 of 8 : IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    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;
}

File 3 of 8 : IUniswapV2Factory.sol
pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    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;
}

File 4 of 8 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 5 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 6 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 7 of 8 : IUniswapV2Router01.sol
pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        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);
}

File 8 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"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":[],"name":"antiMEVEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddy","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setAntiMEVEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTreshold","type":"uint256"}],"name":"setBuyThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeCollectorAddy","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellThreshold","type":"uint256"}],"name":"setSellThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmountThreshold","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletThreshold","type":"uint256"}],"name":"setWalletThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcReceiverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200005c6103e862000048600f6012600a62000021919062001272565b6544e6ba3d793d620000349190620012c3565b62000d9260201b62001ede1790919060201c565b62000daa60201b62001ef41790919060201c565b600955620000b76103e8620000a3600f6012600a6200007c919062001272565b6544e6ba3d793d6200008f9190620012c3565b62000d9260201b62001ede1790919060201c565b62000daa60201b62001ef41790919060201c565b600a55620001126103e8620000fe600f6012600a620000d7919062001272565b6544e6ba3d793d620000ea9190620012c3565b62000d9260201b62001ede1790919060201c565b62000daa60201b62001ef41790919060201c565b600b556032600c55600c54600d55620001786127106200016460076012600a6200013d919062001272565b6544e6ba3d793d620001509190620012c3565b62000d9260201b62001ede1790919060201c565b62000daa60201b62001ef41790919060201c565b600f5561dead601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200026257600080fd5b50620002836200027762000dc260201b60201c565b62000dca60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200032f30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600a62000310919062001272565b6544e6ba3d793d620003239190620012c3565b62000e8e60201b60201c565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401620003ed919062001353565b602060405180830381865afa1580156200040b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004319190620013a6565b6040518363ffffffff1660e01b815260040162000450929190620013e9565b6020604051808303816000875af115801562000470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000496919062001453565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052b9190620014b6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000589929190620014e8565b6020604051808303816000875af1158015620005a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005cf9190620014b6565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620006b0929190620013e9565b6020604051808303816000875af1158015620006d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006f6919062001453565b506040516200070590620010ca565b604051809103906000f08015801562000722573d6000803e3d6000fd5b50600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4d66de8601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401620007e2919062001353565b600060405180830381600087803b158015620007fd57600080fd5b505af115801562000812573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b336040518263ffffffff1660e01b815260040162000873919062001353565b600060405180830381600087803b1580156200088e57600080fd5b505af1158015620008a3573d6000803e3d6000fd5b50505050620008b762000dc260201b60201c565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000907919062001272565b6544e6ba3d793d6200091a9190620012c3565b600460006200092e62000dc260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016006600062000982620010a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600062000b35620010a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000ce262000dc260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a62000d62919062001272565b6544e6ba3d793d62000d759190620012c3565b60405162000d84919062001515565b60405180910390a3620016da565b6000818362000da29190620012c3565b905092915050565b6000818362000dba919062001561565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000f21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f189062001620565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000fb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fab90620016b8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162001094919062001515565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e5880620063bc83390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001166578086048111156200113e576200113d620010d8565b5b60018516156200114e5780820291505b80810290506200115e8562001107565b94506200111e565b94509492505050565b60008262001181576001905062001254565b8162001191576000905062001254565b8160018114620011aa5760028114620011b557620011eb565b600191505062001254565b60ff841115620011ca57620011c9620010d8565b5b8360020a915084821115620011e457620011e3620010d8565b5b5062001254565b5060208310610133831016604e8410600b8410161715620012255782820a9050838111156200121f576200121e620010d8565b5b62001254565b62001234848484600162001114565b925090508184048111156200124e576200124d620010d8565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200127f826200125b565b91506200128c8362001265565b9250620012bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200116f565b905092915050565b6000620012d0826200125b565b9150620012dd836200125b565b9250828202620012ed816200125b565b91508282048414831517620013075762001306620010d8565b5b5092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200133b826200130e565b9050919050565b6200134d816200132e565b82525050565b60006020820190506200136a600083018462001342565b92915050565b600080fd5b62001380816200125b565b81146200138c57600080fd5b50565b600081519050620013a08162001375565b92915050565b600060208284031215620013bf57620013be62001370565b5b6000620013cf848285016200138f565b91505092915050565b620013e3816200125b565b82525050565b600060408201905062001400600083018562001342565b6200140f6020830184620013d8565b9392505050565b60008115159050919050565b6200142d8162001416565b81146200143957600080fd5b50565b6000815190506200144d8162001422565b92915050565b6000602082840312156200146c576200146b62001370565b5b60006200147c848285016200143c565b91505092915050565b62001490816200132e565b81146200149c57600080fd5b50565b600081519050620014b08162001485565b92915050565b600060208284031215620014cf57620014ce62001370565b5b6000620014df848285016200149f565b91505092915050565b6000604082019050620014ff600083018562001342565b6200150e602083018462001342565b9392505050565b60006020820190506200152c6000830184620013d8565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200156e826200125b565b91506200157b836200125b565b9250826200158e576200158d62001532565b5b828204905092915050565b600082825260208201905092915050565b7f4252414e444f4e3a20617070726f76652066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200160860268362001599565b91506200161582620015aa565b604082019050919050565b600060208201905081810360008301526200163b81620015f9565b9050919050565b7f4252414e444f4e3a20617070726f766520746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620016a060248362001599565b9150620016ad8262001642565b604082019050919050565b60006020820190508181036000830152620016d38162001691565b9050919050565b614cd280620016ea6000396000f3fe6080604052600436106102075760003560e01c80638edaa94211610118578063afa4f3b2116100a0578063ddca3f431161006f578063ddca3f4314610736578063e01af92c14610761578063f13cff411461078a578063f2fde38b146107b5578063ffb54a99146107de5761020e565b8063afa4f3b21461068e578063b744223a146106b7578063c9567bf9146106e2578063dd62ed3e146106f95761020e565b8063a42dce80116100e7578063a42dce80146105ab578063a457c2d7146105d4578063a9059cbb14610611578063aacabe641461064e578063ad29ffde146106655761020e565b80638edaa942146105055780639016cd971461052e57806395d89b41146105575780639c01bc33146105825761020e565b80632d4310c01161019b5780636ddd17131161016a5780636ddd1713146104325780636f4fd18e1461045d57806370a0823114610486578063715018a6146104c35780638da5cb5b146104da5761020e565b80632d4310c014610376578063313ce567146103a157806339509351146103cc578063512b466a146104095761020e565b806318160ddd116101d757806318160ddd146102cc57806320800a00146102f757806323b872dd1461030e57806323f68d871461034b5761020e565b8062ae3bf814610210578063041138901461023957806306fdde0314610264578063095ea7b31461028f5761020e565b3661020e57005b005b34801561021c57600080fd5b506102376004803603810190610232919061349c565b610809565b005b34801561024557600080fd5b5061024e610ab0565b60405161025b91906134e4565b60405180910390f35b34801561027057600080fd5b50610279610ac3565b604051610286919061358f565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b191906135e7565b610b00565b6040516102c391906134e4565b60405180910390f35b3480156102d857600080fd5b506102e1610b23565b6040516102ee9190613636565b60405180910390f35b34801561030357600080fd5b5061030c610b49565b005b34801561031a57600080fd5b5061033560048036038101906103309190613651565b610c36565b60405161034291906134e4565b60405180910390f35b34801561035757600080fd5b50610360610c65565b60405161036d9190613636565b60405180910390f35b34801561038257600080fd5b5061038b610c6b565b6040516103989190613636565b60405180910390f35b3480156103ad57600080fd5b506103b6610c71565b6040516103c391906136c0565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee91906135e7565b610c7a565b60405161040091906134e4565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906136db565b610cb1565b005b34801561043e57600080fd5b50610447610da8565b60405161045491906134e4565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f919061387c565b610dbb565b005b34801561049257600080fd5b506104ad60048036038101906104a8919061349c565b610ecc565b6040516104ba9190613636565b60405180910390f35b3480156104cf57600080fd5b506104d8610f15565b005b3480156104e657600080fd5b506104ef610f9d565b6040516104fc91906138e7565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906136db565b610fc6565b005b34801561053a57600080fd5b5061055560048036038101906105509190613902565b6110bc565b005b34801561056357600080fd5b5061056c611155565b604051610579919061358f565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a491906136db565b611192565b005b3480156105b757600080fd5b506105d260048036038101906105cd919061349c565b611289565b005b3480156105e057600080fd5b506105fb60048036038101906105f691906135e7565b611489565b60405161060891906134e4565b60405180910390f35b34801561061d57600080fd5b50610638600480360381019061063391906135e7565b611500565b60405161064591906134e4565b60405180910390f35b34801561065a57600080fd5b5061066361151e565b005b34801561067157600080fd5b5061068c6004803603810190610687919061387c565b61160b565b005b34801561069a57600080fd5b506106b560048036038101906106b091906136db565b61171c565b005b3480156106c357600080fd5b506106cc611885565b6040516106d991906138e7565b60405180910390f35b3480156106ee57600080fd5b506106f76118af565b005b34801561070557600080fd5b50610720600480360381019061071b919061392f565b611ca8565b60405161072d9190613636565b60405180910390f35b34801561074257600080fd5b5061074b611d2f565b6040516107589190613636565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613902565b611d35565b005b34801561079657600080fd5b5061079f611dce565b6040516107ac9190613636565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d7919061349c565b611dd4565b005b3480156107ea57600080fd5b506107f3611ecb565b60405161080091906134e4565b60405180910390f35b610811611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661082f610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c906139bb565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea90613a27565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161092e91906138e7565b602060405180830381865afa15801561094b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096f9190613a5c565b116109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690613ad5565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109ea91906138e7565b602060405180830381865afa158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b9190613a5c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610a68929190613af5565b6020604051808303816000875af1158015610a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aab9190613b33565b505050565b600860039054906101000a900460ff1681565b60606040518060400160405280600c81526020017f4461726b204272616e646f6e0000000000000000000000000000000000000000815250905090565b600080610b0b611f0a565b9050610b18818585611f12565b600191505092915050565b60006012600a610b339190613cc2565b6544e6ba3d793d610b449190613d0d565b905090565b610b51611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610b6f610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc906139bb565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610beb90613d80565b60006040518083038185875af1925050503d8060008114610c28576040519150601f19603f3d011682016040523d82523d6000602084013e610c2d565b606091505b50508091505050565b600080610c41611f0a565b9050610c4e85828561211d565b610c598585856121a9565b60019150509392505050565b600b5481565b600a5481565b60006012905090565b600080610c85611f0a565b9050610ca6818585610c978589611ca8565b610ca19190613d95565b611f12565b600191505092915050565b610cb9611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610cd7610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d24906139bb565b60405180910390fd5b610d5c6103e8610d4e6001610d40610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b811015610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e3b565b60405180910390fd5b8060098190555050565b600860029054906101000a900460ff1681565b610dc3611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610de1610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e906139bb565b60405180910390fd5b60005b8251811015610ec7578160076000858481518110610e5b57610e5a613e5b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ebf90613e8a565b915050610e3a565b505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f1d611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610f3b610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f88906139bb565b60405180910390fd5b610f9b6000612c7b565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fce611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610fec610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611039906139bb565b60405180910390fd5b61107060646110626001611054610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b8110156110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a990613f44565b60405180910390fd5b80600b8190555050565b6110c4611f0a565b73ffffffffffffffffffffffffffffffffffffffff166110e2610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f906139bb565b60405180910390fd5b80600860036101000a81548160ff02191690831515021790555050565b60606040518060400160405280600781526020017f4252414e444f4e00000000000000000000000000000000000000000000000000815250905090565b61119a611f0a565b73ffffffffffffffffffffffffffffffffffffffff166111b8610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461120e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611205906139bb565b60405180910390fd5b61123d6103e861122f6001611221610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b81101561127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690613fd6565b60405180910390fd5b80600a8190555050565b611291611f0a565b73ffffffffffffffffffffffffffffffffffffffff166112af610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc906139bb565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c90614068565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080611494611f0a565b905060006114a28286611ca8565b9050838110156114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906140fa565b60405180910390fd5b6114f48286868403611f12565b60019250505092915050565b600061151461150d611f0a565b84846121a9565b6001905092915050565b611526611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611544610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461159a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611591906139bb565b60405180910390fd5b6012600a6115a89190613cc2565b6544e6ba3d793d6115b99190613d0d565b6009819055506012600a6115cd9190613cc2565b6544e6ba3d793d6115de9190613d0d565b600a819055506012600a6115f29190613cc2565b6544e6ba3d793d6116039190613d0d565b600b81905550565b611613611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611631610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e906139bb565b60405180910390fd5b60005b82518110156117175781600660008584815181106116ab576116aa613e5b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061170f90613e8a565b91505061168a565b505050565b611724611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611742610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f906139bb565b60405180910390fd5b6117c8620186a06117ba60016117ac610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b81101561180a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118019061418c565b60405180910390fd5b6118396103e861182b600561181d610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b81111561187b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118729061421e565b60405180910390fd5b80600f8190555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118b7611f0a565b73ffffffffffffffffffffffffffffffffffffffff166118d5610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611922906139bb565b60405180910390fd5b600860009054906101000a900460ff161561197b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119729061428a565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a3791906138e7565b602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190613a5c565b6040518363ffffffff1660e01b8152600401611a95929190613af5565b6020604051808303816000875af1158015611ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad89190613b33565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b4430610ecc565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b9f91906138e7565b602060405180830381865afa158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190613a5c565b600080611beb610f9d565b426040518963ffffffff1660e01b8152600401611c0f9897969594939291906142ef565b6060604051808303816000875af1158015611c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c52919061436d565b5050506001600860026101000a81548160ff0219169083151502179055506001600860036101000a81548160ff0219169083151502179055506001600860006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b611d3d611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611d5b610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da8906139bb565b60405180910390fd5b80600860026101000a81548160ff02191690831515021790555050565b60095481565b611ddc611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611dfa610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e47906139bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614432565b60405180910390fd5b611ec881612c7b565b50565b600860009054906101000a900460ff1681565b60008183611eec9190613d0d565b905092915050565b60008183611f029190614481565b905092915050565b600033905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614524565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612032576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612029906145b6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121109190613636565b60405180910390a3505050565b60006121298484611ca8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121a35781811015612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614622565b60405180910390fd5b6121a28484848403611f12565b5b50505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612230906146b4565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c090614746565b60405180910390fd5b6000811161230c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612303906147d8565b60405180910390fd5b600060019050600061231c610f9d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561238a575061235a610f9d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123e45750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561243e5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156124575750600860019054906101000a900460ff16155b15612a7957600860009054906101000a900460ff1661255157600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125115750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125479061486a565b60405180910390fd5b5b600860039054906101000a900460ff161561278457600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156126125750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561278357600143612624919061488a565b600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541080156126bb5750600143612679919061488a565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b6126fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f190614930565b60405180910390fd5b43600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561282f5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156128855750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612928576009548311156128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c6906149c2565b60405180910390fd5b600b54836128dc86610ecc565b6128e69190613d95565b1115612927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291e90614a54565b60405180910390fd5b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156129d35750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612a295750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a7857600a54831115612a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6a90614ae6565b60405180910390fd5b600190505b5b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b1a5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b2457600091505b6000612b2f30610ecc565b90506000600f5482118015612b415750825b9050808015612b5c5750600860029054906101000a900460ff165b8015612b755750600860019054906101000a900460ff16155b8015612bcb5750600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c215750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c66576001600860016101000a81548160ff021916908315150217905550612c4a82612d3f565b6000600860016101000a81548160ff0219169083151502179055505b612c7287878787612f71565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000811480612d5057506000600e54145b612f6e576005600f54612d639190613d0d565b811115612d7c576005600f54612d799190613d0d565b90505b612d8581612faf565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612def57600080fd5b505af1158015612e03573d6000803e3d6000fd5b505050506000600e81905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ecb91906138e7565b602060405180830381865afa158015612ee8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0c9190613a5c565b6040518363ffffffff1660e01b8152600401612f29929190614b5b565b6020604051808303816000875af1158015612f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6c9190613b33565b505b50565b80612f8357612f7e6131a6565b612f90565b612f8d84836131c5565b91505b612f9b84848461325f565b80612fa957612fa86133f3565b5b50505050565b6000600267ffffffffffffffff811115612fcc57612fcb61370d565b5b604051908082528060200260200182016040528015612ffa5781602001602082028036833780820191505090505b509050308160008151811061301257613011613e5b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061308357613082613e5b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130ea30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f12565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613170959493929190614c42565b600060405180830381600087803b15801561318a57600080fd5b505af115801561319e573d6000803e3d6000fd5b505050505050565b6000600c5403156131c357600c54600d819055506000600c819055505b565b600080600c5411156132565760006131fc6103e86131ee600c5486611ede90919063ffffffff16565b611ef490919063ffffffff16565b9050600c54600c548261320f9190613d0d565b6132199190614481565b600e600082825461322a9190613d95565b9250508190555060008111156132465761324584308361325f565b5b8083613252919061488a565b9250505b81905092915050565b6132b181600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133fe90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334681600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341490919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133e69190613636565b60405180910390a3505050565b600d54600c81905550565b6000818361340c919061488a565b905092915050565b600081836134229190613d95565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134698261343e565b9050919050565b6134798161345e565b811461348457600080fd5b50565b60008135905061349681613470565b92915050565b6000602082840312156134b2576134b1613434565b5b60006134c084828501613487565b91505092915050565b60008115159050919050565b6134de816134c9565b82525050565b60006020820190506134f960008301846134d5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561353957808201518184015260208101905061351e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613561826134ff565b61356b818561350a565b935061357b81856020860161351b565b61358481613545565b840191505092915050565b600060208201905081810360008301526135a98184613556565b905092915050565b6000819050919050565b6135c4816135b1565b81146135cf57600080fd5b50565b6000813590506135e1816135bb565b92915050565b600080604083850312156135fe576135fd613434565b5b600061360c85828601613487565b925050602061361d858286016135d2565b9150509250929050565b613630816135b1565b82525050565b600060208201905061364b6000830184613627565b92915050565b60008060006060848603121561366a57613669613434565b5b600061367886828701613487565b935050602061368986828701613487565b925050604061369a868287016135d2565b9150509250925092565b600060ff82169050919050565b6136ba816136a4565b82525050565b60006020820190506136d560008301846136b1565b92915050565b6000602082840312156136f1576136f0613434565b5b60006136ff848285016135d2565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61374582613545565b810181811067ffffffffffffffff821117156137645761376361370d565b5b80604052505050565b600061377761342a565b9050613783828261373c565b919050565b600067ffffffffffffffff8211156137a3576137a261370d565b5b602082029050602081019050919050565b600080fd5b60006137cc6137c784613788565b61376d565b905080838252602082019050602084028301858111156137ef576137ee6137b4565b5b835b8181101561381857806138048882613487565b8452602084019350506020810190506137f1565b5050509392505050565b600082601f83011261383757613836613708565b5b81356138478482602086016137b9565b91505092915050565b613859816134c9565b811461386457600080fd5b50565b60008135905061387681613850565b92915050565b6000806040838503121561389357613892613434565b5b600083013567ffffffffffffffff8111156138b1576138b0613439565b5b6138bd85828601613822565b92505060206138ce85828601613867565b9150509250929050565b6138e18161345e565b82525050565b60006020820190506138fc60008301846138d8565b92915050565b60006020828403121561391857613917613434565b5b600061392684828501613867565b91505092915050565b6000806040838503121561394657613945613434565b5b600061395485828601613487565b925050602061396585828601613487565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139a560208361350a565b91506139b08261396f565b602082019050919050565b600060208201905081810360008301526139d481613998565b9050919050565b7f43616e6e6f74207769746864726177207468697320746f6b656e000000000000600082015250565b6000613a11601a8361350a565b9150613a1c826139db565b602082019050919050565b60006020820190508181036000830152613a4081613a04565b9050919050565b600081519050613a56816135bb565b92915050565b600060208284031215613a7257613a71613434565b5b6000613a8084828501613a47565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000613abf60098361350a565b9150613aca82613a89565b602082019050919050565b60006020820190508181036000830152613aee81613ab2565b9050919050565b6000604082019050613b0a60008301856138d8565b613b176020830184613627565b9392505050565b600081519050613b2d81613850565b92915050565b600060208284031215613b4957613b48613434565b5b6000613b5784828501613b1e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613be657808604811115613bc257613bc1613b60565b5b6001851615613bd15780820291505b8081029050613bdf85613b8f565b9450613ba6565b94509492505050565b600082613bff5760019050613cbb565b81613c0d5760009050613cbb565b8160018114613c235760028114613c2d57613c5c565b6001915050613cbb565b60ff841115613c3f57613c3e613b60565b5b8360020a915084821115613c5657613c55613b60565b5b50613cbb565b5060208310610133831016604e8410600b8410161715613c915782820a905083811115613c8c57613c8b613b60565b5b613cbb565b613c9e8484846001613b9c565b92509050818404811115613cb557613cb4613b60565b5b81810290505b9392505050565b6000613ccd826135b1565b9150613cd8836136a4565b9250613d057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613bef565b905092915050565b6000613d18826135b1565b9150613d23836135b1565b9250828202613d31816135b1565b91508282048414831517613d4857613d47613b60565b5b5092915050565b600081905092915050565b50565b6000613d6a600083613d4f565b9150613d7582613d5a565b600082019050919050565b6000613d8b82613d5d565b9150819050919050565b6000613da0826135b1565b9150613dab836135b1565b9250828201905080821115613dc357613dc2613b60565b5b92915050565b7f4252414e444f4e3a204d61782062757920616d6f756e742063616e6e6f74206260008201527f65206c6f776572207468616e20302e312520746f74616c20737570706c792e00602082015250565b6000613e25603f8361350a565b9150613e3082613dc9565b604082019050919050565b60006020820190508181036000830152613e5481613e18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613e95826135b1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ec757613ec6613b60565b5b600182019050919050565b7f4252414e444f4e3a204d61782077616c6c657420616d6f756e742063616e6e6f60008201527f74206265206c6f776572207468616e20312520746f74616c20737570706c792e602082015250565b6000613f2e60408361350a565b9150613f3982613ed2565b604082019050919050565b60006020820190508181036000830152613f5d81613f21565b9050919050565b7f4252414e444f4e3a204d61782073656c6c20616d6f756e742063616e6e6f742060008201527f6265206c6f776572207468616e20302e312520746f74616c20737570706c792e602082015250565b6000613fc060408361350a565b9150613fcb82613f64565b604082019050919050565b60006020820190508181036000830152613fef81613fb3565b9050919050565b7f4252414e444f4e3a20666565436f6c6c6563746f72206164647265737320636160008201527f6e6e6f7420626520300000000000000000000000000000000000000000000000602082015250565b600061405260298361350a565b915061405d82613ff6565b604082019050919050565b6000602082019050818103600083015261408181614045565b9050919050565b7f4252414e444f4e3a2064656372656173656420616c6c6f77616e63652062656c60008201527f6f77207a65726f00000000000000000000000000000000000000000000000000602082015250565b60006140e460278361350a565b91506140ef82614088565b604082019050919050565b60006020820190508181036000830152614113816140d7565b9050919050565b7f4252414e444f4e3a205377617020616d6f756e742063616e6e6f74206265206c60008201527f6f776572207468616e20302e3030312520746f74616c20737570706c792e0000602082015250565b6000614176603e8361350a565b91506141818261411a565b604082019050919050565b600060208201905081810360008301526141a581614169565b9050919050565b7f4252414e444f4e3a205377617020616d6f756e742063616e6e6f74206265206860008201527f6967686572207468616e20302e352520746f74616c20737570706c792e000000602082015250565b6000614208603d8361350a565b9150614213826141ac565b604082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b7f4252414e444f4e3a2054726164696e6720697320616c7265616479206f70656e600082015250565b600061427460208361350a565b915061427f8261423e565b602082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b6000819050919050565b6000819050919050565b60006142d96142d46142cf846142aa565b6142b4565b6135b1565b9050919050565b6142e9816142be565b82525050565b600061010082019050614305600083018b6138d8565b614312602083018a6138d8565b61431f6040830189613627565b61432c6060830188613627565b61433960808301876142e0565b61434660a08301866142e0565b61435360c08301856138d8565b61436060e0830184613627565b9998505050505050505050565b60008060006060848603121561438657614385613434565b5b600061439486828701613a47565b93505060206143a586828701613a47565b92505060406143b686828701613a47565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061441c60268361350a565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061448c826135b1565b9150614497836135b1565b9250826144a7576144a6614452565b5b828204905092915050565b7f4252414e444f4e3a20617070726f76652066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061450e60268361350a565b9150614519826144b2565b604082019050919050565b6000602082019050818103600083015261453d81614501565b9050919050565b7f4252414e444f4e3a20617070726f766520746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145a060248361350a565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f4252414e444f4e3a20696e73756666696369656e7420616c6c6f77616e636500600082015250565b600061460c601f8361350a565b9150614617826145d6565b602082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f4252414e444f4e3a207472616e736665722066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b600061469e60278361350a565b91506146a982614642565b604082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f4252414e444f4e3a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061473060258361350a565b915061473b826146d4565b604082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b7f4252414e444f4e3a205472616e7366657220616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b60006147c260328361350a565b91506147cd82614766565b604082019050919050565b600060208201905081810360008301526147f1816147b5565b9050919050565b7f4252414e444f4e3a2054726164696e67206973206e6f7420616c6c6f7765642060008201527f7965742e00000000000000000000000000000000000000000000000000000000602082015250565b600061485460248361350a565b915061485f826147f8565b604082019050919050565b6000602082019050818103600083015261488381614847565b9050919050565b6000614895826135b1565b91506148a0836135b1565b92508282039050818111156148b8576148b7613b60565b5b92915050565b7f4252414e444f4e3a205472616e736665722064656c617920656e61626c65642e60008201527f2054727920616761696e206c617465722e000000000000000000000000000000602082015250565b600061491a60318361350a565b9150614925826148be565b604082019050919050565b600060208201905081810360008301526149498161490d565b9050919050565b7f4252414e444f4e3a205472616e7366657220616d6f756e74206578636565647360008201527f20746865206275795468726573686f6c642e0000000000000000000000000000602082015250565b60006149ac60328361350a565b91506149b782614950565b604082019050919050565b600060208201905081810360008301526149db8161499f565b9050919050565b7f4252414e444f4e3a2045786365656473206d6178696d756d2077616c6c65742060008201527f746f6b656e20616d6f756e742e00000000000000000000000000000000000000602082015250565b6000614a3e602d8361350a565b9150614a49826149e2565b604082019050919050565b60006020820190508181036000830152614a6d81614a31565b9050919050565b7f4252414e444f4e3a205472616e7366657220616d6f756e74206578636565647360008201527f207468652073656c6c5468726573686f6c642e00000000000000000000000000602082015250565b6000614ad060338361350a565b9150614adb82614a74565b604082019050919050565b60006020820190508181036000830152614aff81614ac3565b9050919050565b6000614b21614b1c614b178461343e565b6142b4565b61343e565b9050919050565b6000614b3382614b06565b9050919050565b6000614b4582614b28565b9050919050565b614b5581614b3a565b82525050565b6000604082019050614b706000830185614b4c565b614b7d6020830184613627565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bb98161345e565b82525050565b6000614bcb8383614bb0565b60208301905092915050565b6000602082019050919050565b6000614bef82614b84565b614bf98185614b8f565b9350614c0483614ba0565b8060005b83811015614c35578151614c1c8882614bbf565b9750614c2783614bd7565b925050600181019050614c08565b5085935050505092915050565b600060a082019050614c576000830188613627565b614c6460208301876142e0565b8181036040830152614c768186614be4565b9050614c8560608301856138d8565b614c926080830184613627565b969550505050505056fea2646970667358221220406b569c7d5dc34cb47cc420ddf8dc0944b09e83eaef4069dcd1c3acea2e9da264736f6c63430008110033608060405234801561001057600080fd5b5061002d61002261007360201b60201c565b61007b60201b60201c565b33600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061013f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610d0a8061014e6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100db578063c4d66de8146100f9578063f2fde38b14610115578063fc0c546a1461013157610088565b80633ccfd60b1461008d5780633e413bee1461009757806370c8b173146100b5578063715018a6146100d1575b600080fd5b61009561014f565b005b61009f61033f565b6040516100ac919061091f565b60405180910390f35b6100cf60048036038101906100ca91906109a1565b610365565b005b6100d96104f3565b005b6100e361057b565b6040516100f0919061091f565b60405180910390f35b610113600480360381019061010e91906109e1565b6105a4565b005b61012f600480360381019061012a91906109e1565b6106f5565b005b6101396107ec565b604051610146919061091f565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d690610a6b565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161029b919061091f565b602060405180830381865afa1580156102b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102dc9190610aa0565b6040518363ffffffff1660e01b81526004016102f9929190610adc565b6020604051808303816000875af1158015610318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033c9190610b3d565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61036d610812565b73ffffffffffffffffffffffffffffffffffffffff1661038b61057b565b73ffffffffffffffffffffffffffffffffffffffff16146103e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d890610bb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104685761041d61057b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610462573d6000803e3d6000fd5b506104ef565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61048c61057b565b836040518363ffffffff1660e01b81526004016104aa929190610adc565b6020604051808303816000875af11580156104c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ed9190610b3d565b505b5050565b6104fb610812565b73ffffffffffffffffffffffffffffffffffffffff1661051961057b565b73ffffffffffffffffffffffffffffffffffffffff161461056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056690610bb6565b60405180910390fd5b610579600061081a565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6105ac610812565b73ffffffffffffffffffffffffffffffffffffffff166105ca61057b565b73ffffffffffffffffffffffffffffffffffffffff1614610620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061790610bb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a890610c22565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6106fd610812565b73ffffffffffffffffffffffffffffffffffffffff1661071b61057b565b73ffffffffffffffffffffffffffffffffffffffff1614610771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076890610bb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d790610cb4565b60405180910390fd5b6107e98161081a565b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610909826108de565b9050919050565b610919816108fe565b82525050565b60006020820190506109346000830184610910565b92915050565b600080fd5b610948816108fe565b811461095357600080fd5b50565b6000813590506109658161093f565b92915050565b6000819050919050565b61097e8161096b565b811461098957600080fd5b50565b60008135905061099b81610975565b92915050565b600080604083850312156109b8576109b761093a565b5b60006109c685828601610956565b92505060206109d78582860161098c565b9150509250929050565b6000602082840312156109f7576109f661093a565b5b6000610a0584828501610956565b91505092915050565b600082825260208201905092915050565b7f43616c6c6572206973206e6f7420746f6b656e00000000000000000000000000600082015250565b6000610a55601383610a0e565b9150610a6082610a1f565b602082019050919050565b60006020820190508181036000830152610a8481610a48565b9050919050565b600081519050610a9a81610975565b92915050565b600060208284031215610ab657610ab561093a565b5b6000610ac484828501610a8b565b91505092915050565b610ad68161096b565b82525050565b6000604082019050610af16000830185610910565b610afe6020830184610acd565b9392505050565b60008115159050919050565b610b1a81610b05565b8114610b2557600080fd5b50565b600081519050610b3781610b11565b92915050565b600060208284031215610b5357610b5261093a565b5b6000610b6184828501610b28565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610ba0602083610a0e565b9150610bab82610b6a565b602082019050919050565b60006020820190508181036000830152610bcf81610b93565b9050919050565b7f416c726561647920696e697469616c697a656400000000000000000000000000600082015250565b6000610c0c601383610a0e565b9150610c1782610bd6565b602082019050919050565b60006020820190508181036000830152610c3b81610bff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610c9e602683610a0e565b9150610ca982610c42565b604082019050919050565b60006020820190508181036000830152610ccd81610c91565b905091905056fea26469706673582212206247c1ce6ded2bb848c030efb7ee27caa323154540894cad8418f9c3086120b964736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102075760003560e01c80638edaa94211610118578063afa4f3b2116100a0578063ddca3f431161006f578063ddca3f4314610736578063e01af92c14610761578063f13cff411461078a578063f2fde38b146107b5578063ffb54a99146107de5761020e565b8063afa4f3b21461068e578063b744223a146106b7578063c9567bf9146106e2578063dd62ed3e146106f95761020e565b8063a42dce80116100e7578063a42dce80146105ab578063a457c2d7146105d4578063a9059cbb14610611578063aacabe641461064e578063ad29ffde146106655761020e565b80638edaa942146105055780639016cd971461052e57806395d89b41146105575780639c01bc33146105825761020e565b80632d4310c01161019b5780636ddd17131161016a5780636ddd1713146104325780636f4fd18e1461045d57806370a0823114610486578063715018a6146104c35780638da5cb5b146104da5761020e565b80632d4310c014610376578063313ce567146103a157806339509351146103cc578063512b466a146104095761020e565b806318160ddd116101d757806318160ddd146102cc57806320800a00146102f757806323b872dd1461030e57806323f68d871461034b5761020e565b8062ae3bf814610210578063041138901461023957806306fdde0314610264578063095ea7b31461028f5761020e565b3661020e57005b005b34801561021c57600080fd5b506102376004803603810190610232919061349c565b610809565b005b34801561024557600080fd5b5061024e610ab0565b60405161025b91906134e4565b60405180910390f35b34801561027057600080fd5b50610279610ac3565b604051610286919061358f565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b191906135e7565b610b00565b6040516102c391906134e4565b60405180910390f35b3480156102d857600080fd5b506102e1610b23565b6040516102ee9190613636565b60405180910390f35b34801561030357600080fd5b5061030c610b49565b005b34801561031a57600080fd5b5061033560048036038101906103309190613651565b610c36565b60405161034291906134e4565b60405180910390f35b34801561035757600080fd5b50610360610c65565b60405161036d9190613636565b60405180910390f35b34801561038257600080fd5b5061038b610c6b565b6040516103989190613636565b60405180910390f35b3480156103ad57600080fd5b506103b6610c71565b6040516103c391906136c0565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee91906135e7565b610c7a565b60405161040091906134e4565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906136db565b610cb1565b005b34801561043e57600080fd5b50610447610da8565b60405161045491906134e4565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f919061387c565b610dbb565b005b34801561049257600080fd5b506104ad60048036038101906104a8919061349c565b610ecc565b6040516104ba9190613636565b60405180910390f35b3480156104cf57600080fd5b506104d8610f15565b005b3480156104e657600080fd5b506104ef610f9d565b6040516104fc91906138e7565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906136db565b610fc6565b005b34801561053a57600080fd5b5061055560048036038101906105509190613902565b6110bc565b005b34801561056357600080fd5b5061056c611155565b604051610579919061358f565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a491906136db565b611192565b005b3480156105b757600080fd5b506105d260048036038101906105cd919061349c565b611289565b005b3480156105e057600080fd5b506105fb60048036038101906105f691906135e7565b611489565b60405161060891906134e4565b60405180910390f35b34801561061d57600080fd5b50610638600480360381019061063391906135e7565b611500565b60405161064591906134e4565b60405180910390f35b34801561065a57600080fd5b5061066361151e565b005b34801561067157600080fd5b5061068c6004803603810190610687919061387c565b61160b565b005b34801561069a57600080fd5b506106b560048036038101906106b091906136db565b61171c565b005b3480156106c357600080fd5b506106cc611885565b6040516106d991906138e7565b60405180910390f35b3480156106ee57600080fd5b506106f76118af565b005b34801561070557600080fd5b50610720600480360381019061071b919061392f565b611ca8565b60405161072d9190613636565b60405180910390f35b34801561074257600080fd5b5061074b611d2f565b6040516107589190613636565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613902565b611d35565b005b34801561079657600080fd5b5061079f611dce565b6040516107ac9190613636565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d7919061349c565b611dd4565b005b3480156107ea57600080fd5b506107f3611ecb565b60405161080091906134e4565b60405180910390f35b610811611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661082f610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c906139bb565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea90613a27565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161092e91906138e7565b602060405180830381865afa15801561094b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096f9190613a5c565b116109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690613ad5565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109ea91906138e7565b602060405180830381865afa158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b9190613a5c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610a68929190613af5565b6020604051808303816000875af1158015610a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aab9190613b33565b505050565b600860039054906101000a900460ff1681565b60606040518060400160405280600c81526020017f4461726b204272616e646f6e0000000000000000000000000000000000000000815250905090565b600080610b0b611f0a565b9050610b18818585611f12565b600191505092915050565b60006012600a610b339190613cc2565b6544e6ba3d793d610b449190613d0d565b905090565b610b51611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610b6f610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc906139bb565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610beb90613d80565b60006040518083038185875af1925050503d8060008114610c28576040519150601f19603f3d011682016040523d82523d6000602084013e610c2d565b606091505b50508091505050565b600080610c41611f0a565b9050610c4e85828561211d565b610c598585856121a9565b60019150509392505050565b600b5481565b600a5481565b60006012905090565b600080610c85611f0a565b9050610ca6818585610c978589611ca8565b610ca19190613d95565b611f12565b600191505092915050565b610cb9611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610cd7610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d24906139bb565b60405180910390fd5b610d5c6103e8610d4e6001610d40610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b811015610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e3b565b60405180910390fd5b8060098190555050565b600860029054906101000a900460ff1681565b610dc3611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610de1610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e906139bb565b60405180910390fd5b60005b8251811015610ec7578160076000858481518110610e5b57610e5a613e5b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ebf90613e8a565b915050610e3a565b505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f1d611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610f3b610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f88906139bb565b60405180910390fd5b610f9b6000612c7b565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fce611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610fec610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611039906139bb565b60405180910390fd5b61107060646110626001611054610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b8110156110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a990613f44565b60405180910390fd5b80600b8190555050565b6110c4611f0a565b73ffffffffffffffffffffffffffffffffffffffff166110e2610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f906139bb565b60405180910390fd5b80600860036101000a81548160ff02191690831515021790555050565b60606040518060400160405280600781526020017f4252414e444f4e00000000000000000000000000000000000000000000000000815250905090565b61119a611f0a565b73ffffffffffffffffffffffffffffffffffffffff166111b8610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461120e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611205906139bb565b60405180910390fd5b61123d6103e861122f6001611221610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b81101561127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690613fd6565b60405180910390fd5b80600a8190555050565b611291611f0a565b73ffffffffffffffffffffffffffffffffffffffff166112af610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc906139bb565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c90614068565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080611494611f0a565b905060006114a28286611ca8565b9050838110156114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906140fa565b60405180910390fd5b6114f48286868403611f12565b60019250505092915050565b600061151461150d611f0a565b84846121a9565b6001905092915050565b611526611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611544610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461159a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611591906139bb565b60405180910390fd5b6012600a6115a89190613cc2565b6544e6ba3d793d6115b99190613d0d565b6009819055506012600a6115cd9190613cc2565b6544e6ba3d793d6115de9190613d0d565b600a819055506012600a6115f29190613cc2565b6544e6ba3d793d6116039190613d0d565b600b81905550565b611613611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611631610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e906139bb565b60405180910390fd5b60005b82518110156117175781600660008584815181106116ab576116aa613e5b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061170f90613e8a565b91505061168a565b505050565b611724611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611742610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f906139bb565b60405180910390fd5b6117c8620186a06117ba60016117ac610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b81101561180a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118019061418c565b60405180910390fd5b6118396103e861182b600561181d610b23565b611ede90919063ffffffff16565b611ef490919063ffffffff16565b81111561187b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118729061421e565b60405180910390fd5b80600f8190555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118b7611f0a565b73ffffffffffffffffffffffffffffffffffffffff166118d5610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611922906139bb565b60405180910390fd5b600860009054906101000a900460ff161561197b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119729061428a565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a3791906138e7565b602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190613a5c565b6040518363ffffffff1660e01b8152600401611a95929190613af5565b6020604051808303816000875af1158015611ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad89190613b33565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b4430610ecc565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b9f91906138e7565b602060405180830381865afa158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190613a5c565b600080611beb610f9d565b426040518963ffffffff1660e01b8152600401611c0f9897969594939291906142ef565b6060604051808303816000875af1158015611c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c52919061436d565b5050506001600860026101000a81548160ff0219169083151502179055506001600860036101000a81548160ff0219169083151502179055506001600860006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b611d3d611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611d5b610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da8906139bb565b60405180910390fd5b80600860026101000a81548160ff02191690831515021790555050565b60095481565b611ddc611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611dfa610f9d565b73ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e47906139bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614432565b60405180910390fd5b611ec881612c7b565b50565b600860009054906101000a900460ff1681565b60008183611eec9190613d0d565b905092915050565b60008183611f029190614481565b905092915050565b600033905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614524565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612032576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612029906145b6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121109190613636565b60405180910390a3505050565b60006121298484611ca8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121a35781811015612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614622565b60405180910390fd5b6121a28484848403611f12565b5b50505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612230906146b4565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c090614746565b60405180910390fd5b6000811161230c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612303906147d8565b60405180910390fd5b600060019050600061231c610f9d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561238a575061235a610f9d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123e45750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561243e5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156124575750600860019054906101000a900460ff16155b15612a7957600860009054906101000a900460ff1661255157600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125115750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125479061486a565b60405180910390fd5b5b600860039054906101000a900460ff161561278457600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156126125750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561278357600143612624919061488a565b600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541080156126bb5750600143612679919061488a565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b6126fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f190614930565b60405180910390fd5b43600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561282f5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156128855750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612928576009548311156128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c6906149c2565b60405180910390fd5b600b54836128dc86610ecc565b6128e69190613d95565b1115612927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291e90614a54565b60405180910390fd5b5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156129d35750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612a295750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a7857600a54831115612a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6a90614ae6565b60405180910390fd5b600190505b5b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b1a5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b2457600091505b6000612b2f30610ecc565b90506000600f5482118015612b415750825b9050808015612b5c5750600860029054906101000a900460ff165b8015612b755750600860019054906101000a900460ff16155b8015612bcb5750600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c215750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c66576001600860016101000a81548160ff021916908315150217905550612c4a82612d3f565b6000600860016101000a81548160ff0219169083151502179055505b612c7287878787612f71565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000811480612d5057506000600e54145b612f6e576005600f54612d639190613d0d565b811115612d7c576005600f54612d799190613d0d565b90505b612d8581612faf565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612def57600080fd5b505af1158015612e03573d6000803e3d6000fd5b505050506000600e81905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ecb91906138e7565b602060405180830381865afa158015612ee8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0c9190613a5c565b6040518363ffffffff1660e01b8152600401612f29929190614b5b565b6020604051808303816000875af1158015612f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6c9190613b33565b505b50565b80612f8357612f7e6131a6565b612f90565b612f8d84836131c5565b91505b612f9b84848461325f565b80612fa957612fa86133f3565b5b50505050565b6000600267ffffffffffffffff811115612fcc57612fcb61370d565b5b604051908082528060200260200182016040528015612ffa5781602001602082028036833780820191505090505b509050308160008151811061301257613011613e5b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061308357613082613e5b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130ea30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f12565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613170959493929190614c42565b600060405180830381600087803b15801561318a57600080fd5b505af115801561319e573d6000803e3d6000fd5b505050505050565b6000600c5403156131c357600c54600d819055506000600c819055505b565b600080600c5411156132565760006131fc6103e86131ee600c5486611ede90919063ffffffff16565b611ef490919063ffffffff16565b9050600c54600c548261320f9190613d0d565b6132199190614481565b600e600082825461322a9190613d95565b9250508190555060008111156132465761324584308361325f565b5b8083613252919061488a565b9250505b81905092915050565b6132b181600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133fe90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334681600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341490919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133e69190613636565b60405180910390a3505050565b600d54600c81905550565b6000818361340c919061488a565b905092915050565b600081836134229190613d95565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134698261343e565b9050919050565b6134798161345e565b811461348457600080fd5b50565b60008135905061349681613470565b92915050565b6000602082840312156134b2576134b1613434565b5b60006134c084828501613487565b91505092915050565b60008115159050919050565b6134de816134c9565b82525050565b60006020820190506134f960008301846134d5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561353957808201518184015260208101905061351e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613561826134ff565b61356b818561350a565b935061357b81856020860161351b565b61358481613545565b840191505092915050565b600060208201905081810360008301526135a98184613556565b905092915050565b6000819050919050565b6135c4816135b1565b81146135cf57600080fd5b50565b6000813590506135e1816135bb565b92915050565b600080604083850312156135fe576135fd613434565b5b600061360c85828601613487565b925050602061361d858286016135d2565b9150509250929050565b613630816135b1565b82525050565b600060208201905061364b6000830184613627565b92915050565b60008060006060848603121561366a57613669613434565b5b600061367886828701613487565b935050602061368986828701613487565b925050604061369a868287016135d2565b9150509250925092565b600060ff82169050919050565b6136ba816136a4565b82525050565b60006020820190506136d560008301846136b1565b92915050565b6000602082840312156136f1576136f0613434565b5b60006136ff848285016135d2565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61374582613545565b810181811067ffffffffffffffff821117156137645761376361370d565b5b80604052505050565b600061377761342a565b9050613783828261373c565b919050565b600067ffffffffffffffff8211156137a3576137a261370d565b5b602082029050602081019050919050565b600080fd5b60006137cc6137c784613788565b61376d565b905080838252602082019050602084028301858111156137ef576137ee6137b4565b5b835b8181101561381857806138048882613487565b8452602084019350506020810190506137f1565b5050509392505050565b600082601f83011261383757613836613708565b5b81356138478482602086016137b9565b91505092915050565b613859816134c9565b811461386457600080fd5b50565b60008135905061387681613850565b92915050565b6000806040838503121561389357613892613434565b5b600083013567ffffffffffffffff8111156138b1576138b0613439565b5b6138bd85828601613822565b92505060206138ce85828601613867565b9150509250929050565b6138e18161345e565b82525050565b60006020820190506138fc60008301846138d8565b92915050565b60006020828403121561391857613917613434565b5b600061392684828501613867565b91505092915050565b6000806040838503121561394657613945613434565b5b600061395485828601613487565b925050602061396585828601613487565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139a560208361350a565b91506139b08261396f565b602082019050919050565b600060208201905081810360008301526139d481613998565b9050919050565b7f43616e6e6f74207769746864726177207468697320746f6b656e000000000000600082015250565b6000613a11601a8361350a565b9150613a1c826139db565b602082019050919050565b60006020820190508181036000830152613a4081613a04565b9050919050565b600081519050613a56816135bb565b92915050565b600060208284031215613a7257613a71613434565b5b6000613a8084828501613a47565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000613abf60098361350a565b9150613aca82613a89565b602082019050919050565b60006020820190508181036000830152613aee81613ab2565b9050919050565b6000604082019050613b0a60008301856138d8565b613b176020830184613627565b9392505050565b600081519050613b2d81613850565b92915050565b600060208284031215613b4957613b48613434565b5b6000613b5784828501613b1e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613be657808604811115613bc257613bc1613b60565b5b6001851615613bd15780820291505b8081029050613bdf85613b8f565b9450613ba6565b94509492505050565b600082613bff5760019050613cbb565b81613c0d5760009050613cbb565b8160018114613c235760028114613c2d57613c5c565b6001915050613cbb565b60ff841115613c3f57613c3e613b60565b5b8360020a915084821115613c5657613c55613b60565b5b50613cbb565b5060208310610133831016604e8410600b8410161715613c915782820a905083811115613c8c57613c8b613b60565b5b613cbb565b613c9e8484846001613b9c565b92509050818404811115613cb557613cb4613b60565b5b81810290505b9392505050565b6000613ccd826135b1565b9150613cd8836136a4565b9250613d057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613bef565b905092915050565b6000613d18826135b1565b9150613d23836135b1565b9250828202613d31816135b1565b91508282048414831517613d4857613d47613b60565b5b5092915050565b600081905092915050565b50565b6000613d6a600083613d4f565b9150613d7582613d5a565b600082019050919050565b6000613d8b82613d5d565b9150819050919050565b6000613da0826135b1565b9150613dab836135b1565b9250828201905080821115613dc357613dc2613b60565b5b92915050565b7f4252414e444f4e3a204d61782062757920616d6f756e742063616e6e6f74206260008201527f65206c6f776572207468616e20302e312520746f74616c20737570706c792e00602082015250565b6000613e25603f8361350a565b9150613e3082613dc9565b604082019050919050565b60006020820190508181036000830152613e5481613e18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613e95826135b1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ec757613ec6613b60565b5b600182019050919050565b7f4252414e444f4e3a204d61782077616c6c657420616d6f756e742063616e6e6f60008201527f74206265206c6f776572207468616e20312520746f74616c20737570706c792e602082015250565b6000613f2e60408361350a565b9150613f3982613ed2565b604082019050919050565b60006020820190508181036000830152613f5d81613f21565b9050919050565b7f4252414e444f4e3a204d61782073656c6c20616d6f756e742063616e6e6f742060008201527f6265206c6f776572207468616e20302e312520746f74616c20737570706c792e602082015250565b6000613fc060408361350a565b9150613fcb82613f64565b604082019050919050565b60006020820190508181036000830152613fef81613fb3565b9050919050565b7f4252414e444f4e3a20666565436f6c6c6563746f72206164647265737320636160008201527f6e6e6f7420626520300000000000000000000000000000000000000000000000602082015250565b600061405260298361350a565b915061405d82613ff6565b604082019050919050565b6000602082019050818103600083015261408181614045565b9050919050565b7f4252414e444f4e3a2064656372656173656420616c6c6f77616e63652062656c60008201527f6f77207a65726f00000000000000000000000000000000000000000000000000602082015250565b60006140e460278361350a565b91506140ef82614088565b604082019050919050565b60006020820190508181036000830152614113816140d7565b9050919050565b7f4252414e444f4e3a205377617020616d6f756e742063616e6e6f74206265206c60008201527f6f776572207468616e20302e3030312520746f74616c20737570706c792e0000602082015250565b6000614176603e8361350a565b91506141818261411a565b604082019050919050565b600060208201905081810360008301526141a581614169565b9050919050565b7f4252414e444f4e3a205377617020616d6f756e742063616e6e6f74206265206860008201527f6967686572207468616e20302e352520746f74616c20737570706c792e000000602082015250565b6000614208603d8361350a565b9150614213826141ac565b604082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b7f4252414e444f4e3a2054726164696e6720697320616c7265616479206f70656e600082015250565b600061427460208361350a565b915061427f8261423e565b602082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b6000819050919050565b6000819050919050565b60006142d96142d46142cf846142aa565b6142b4565b6135b1565b9050919050565b6142e9816142be565b82525050565b600061010082019050614305600083018b6138d8565b614312602083018a6138d8565b61431f6040830189613627565b61432c6060830188613627565b61433960808301876142e0565b61434660a08301866142e0565b61435360c08301856138d8565b61436060e0830184613627565b9998505050505050505050565b60008060006060848603121561438657614385613434565b5b600061439486828701613a47565b93505060206143a586828701613a47565b92505060406143b686828701613a47565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061441c60268361350a565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061448c826135b1565b9150614497836135b1565b9250826144a7576144a6614452565b5b828204905092915050565b7f4252414e444f4e3a20617070726f76652066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061450e60268361350a565b9150614519826144b2565b604082019050919050565b6000602082019050818103600083015261453d81614501565b9050919050565b7f4252414e444f4e3a20617070726f766520746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145a060248361350a565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f4252414e444f4e3a20696e73756666696369656e7420616c6c6f77616e636500600082015250565b600061460c601f8361350a565b9150614617826145d6565b602082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f4252414e444f4e3a207472616e736665722066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b600061469e60278361350a565b91506146a982614642565b604082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f4252414e444f4e3a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061473060258361350a565b915061473b826146d4565b604082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b7f4252414e444f4e3a205472616e7366657220616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b60006147c260328361350a565b91506147cd82614766565b604082019050919050565b600060208201905081810360008301526147f1816147b5565b9050919050565b7f4252414e444f4e3a2054726164696e67206973206e6f7420616c6c6f7765642060008201527f7965742e00000000000000000000000000000000000000000000000000000000602082015250565b600061485460248361350a565b915061485f826147f8565b604082019050919050565b6000602082019050818103600083015261488381614847565b9050919050565b6000614895826135b1565b91506148a0836135b1565b92508282039050818111156148b8576148b7613b60565b5b92915050565b7f4252414e444f4e3a205472616e736665722064656c617920656e61626c65642e60008201527f2054727920616761696e206c617465722e000000000000000000000000000000602082015250565b600061491a60318361350a565b9150614925826148be565b604082019050919050565b600060208201905081810360008301526149498161490d565b9050919050565b7f4252414e444f4e3a205472616e7366657220616d6f756e74206578636565647360008201527f20746865206275795468726573686f6c642e0000000000000000000000000000602082015250565b60006149ac60328361350a565b91506149b782614950565b604082019050919050565b600060208201905081810360008301526149db8161499f565b9050919050565b7f4252414e444f4e3a2045786365656473206d6178696d756d2077616c6c65742060008201527f746f6b656e20616d6f756e742e00000000000000000000000000000000000000602082015250565b6000614a3e602d8361350a565b9150614a49826149e2565b604082019050919050565b60006020820190508181036000830152614a6d81614a31565b9050919050565b7f4252414e444f4e3a205472616e7366657220616d6f756e74206578636565647360008201527f207468652073656c6c5468726573686f6c642e00000000000000000000000000602082015250565b6000614ad060338361350a565b9150614adb82614a74565b604082019050919050565b60006020820190508181036000830152614aff81614ac3565b9050919050565b6000614b21614b1c614b178461343e565b6142b4565b61343e565b9050919050565b6000614b3382614b06565b9050919050565b6000614b4582614b28565b9050919050565b614b5581614b3a565b82525050565b6000604082019050614b706000830185614b4c565b614b7d6020830184613627565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bb98161345e565b82525050565b6000614bcb8383614bb0565b60208301905092915050565b6000602082019050919050565b6000614bef82614b84565b614bf98185614b8f565b9350614c0483614ba0565b8060005b83811015614c35578151614c1c8882614bbf565b9750614c2783614bd7565b925050600181019050614c08565b5085935050505092915050565b600060a082019050614c576000830188613627565b614c6460208301876142e0565b8181036040830152614c768186614be4565b9050614c8560608301856138d8565b614c926080830184613627565b969550505050505056fea2646970667358221220406b569c7d5dc34cb47cc420ddf8dc0944b09e83eaef4069dcd1c3acea2e9da264736f6c63430008110033

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.