ETH Price: $2,662.00 (+1.94%)

Token

$LUCKY ($LKY)
 

Overview

Max Total Supply

420,420,420,420 $LKY

Holders

62

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.980761923 $LKY

Value
$0.00
0x1293b1da070e4af0a775fc8a66dfe2cc6c44ef27
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:
smokepepeContract

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : smokepepeContract (4).sol
/**
 *Submitted for verification at Etherscan.io on 2023-01-11
*/

/**



*/

// SPDX-License-Identifier: MIT

/**
 
*/


pragma solidity ^0.8.17;

/**
 * Abstract contract to easily change things when deploying new projects. Saves me having to find it everywhere.
 */
abstract contract Project {
    address public marketingWallet = 0xfffF45874b7c6825fD3B3aB5a382aAc2e3514cd1;
    address public devWallet = 0xfffF45874b7c6825fD3B3aB5a382aAc2e3514cd1;

    string constant _name = "$LUCKY";
    string constant _symbol = "$LKY";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 420420420420 * 10**_decimals;

    uint256 public _maxTxAmount = (_totalSupply * 10) / 1000; // (_totalSupply * 10) / 1000 [this equals 1%]
    uint256 public _maxWalletToken = (_totalSupply * 10) / 1000; //

    uint256 public buyFee             = 5;
    uint256 public buyTotalFee        = buyFee;

    uint256 public swapLpFee          = 2;
    uint256 public swapMarketing      = 2;
    uint256 public swapTreasuryFee    = 1;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee;

    uint256 public transFee           = 5;

    uint256 public feeDenominator     = 100;

}

/**
 * @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, 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;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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


/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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;
}



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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


interface 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);
}




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;
}


/**
 * MainContract
 */
contract smokepepeContract is Project, IERC20, Ownable {
    using SafeMath for uint256;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isMaxExempt;
    mapping (address => bool) isTimelockExempt;

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IUniswapV2Router02 public immutable contractRouter;
    address public immutable uniswapV2Pair;

    bool public tradingOpen = false;

    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 30 / 10000;
    uint256 public swapAmount = _totalSupply * 30 / 10000;

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        contractRouter = _uniswapV2Router;

        _allowances[address(this)][address(contractRouter)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isFeeExempt[marketingWallet] = true;
        isMaxExempt[marketingWallet] = true;
        isTxLimitExempt[marketingWallet] = true;

        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }
    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function setTxLimit(uint256 amount) external onlyOwner() {
        _maxTxAmount = amount;
    }

// *** 
// Functions for the burning mechanism 
// *** 

    /**
    * Burn an amount of tokens for the current wallet (if they have enough)
    */
    function burnTokens(uint256 amount) external {
        // does this user have enough tokens to perform the burn
        if(_balances[msg.sender] > amount) {
            _basicTransfer(msg.sender, DEAD, amount);
        }
    }


// *** 
// End functions for the burning mechanism 
// *** 

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(sender != owner() && recipient != owner()){
            require(tradingOpen,"Trading not open yet");
        }

        bool inSell = (recipient == uniswapV2Pair);
        bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair);

        if (recipient != address(this) && 
            recipient != address(DEAD) && 
            recipient != uniswapV2Pair && 
            recipient != marketingWallet && 
            recipient != devWallet && 
            recipient != autoLiquidityReceiver
        ){
            uint256 heldTokens = balanceOf(recipient);
            if(!isMaxExempt[recipient]) {
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }
        }

        if (sender == uniswapV2Pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]
        ){
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        // Checks max transaction limit
        // but no point if the recipient is exempt
        // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount
        if(!isTxLimitExempt[recipient]) {
            checkTxLimit(sender, amount);
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = amount;

        // Do NOT take a fee if sender AND recipient are NOT the contract
        // i.e. you are doing a transfer
        if(inTransfer) {
            if(transFee > 0) {
                amountReceived = takeTransferFee(sender, amount);
            }
        } else {
            amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount;
            
            if(shouldSwapBack()){ swapBack(); }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

// *** 
// Handle Fees
// *** 

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256) {

        uint256 feeToTake = transFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {

        uint256 feeToTake = isSell ? swapTotalFee : buyTotalFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

// *** 
// End Handle Fees
// *** 

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != uniswapV2Pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(amountETH * amountPercentage / 100);
    }

    function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee;
        uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(swapTotalFee).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = contractRouter.WETH();

        uint256 balanceBefore = address(this).balance;

        contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee);
        uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(devWallet).call{value: amountETHTreasury, gas: 30000}("");

        // Supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            contractRouter.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

// *** 
// Various exempt functions
// *** 

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner() {
        isFeeExempt[holder] = exempt;
    }

    function setIsMaxExempt(address holder, bool exempt) external onlyOwner() {
        isMaxExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner() {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsTimelockExempt(address holder, bool exempt) external onlyOwner() {
        isTimelockExempt[holder] = exempt;
    }

// *** 
// End various exempt functions
// *** 


// ***
// Start fee things
// ***

    function setTransFee(uint256 fee) external onlyOwner() {
        transFee = fee;
    }

    function setSwapFees(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() {
        swapLpFee = _newSwapLpFee;
        swapMarketing = _newSwapMarketingFee;
        swapTreasuryFee = _newSwapTreasuryFee;
        swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee);
        feeDenominator = _feeDenominator;
        require(swapTotalFee < 90, "Fees cannot be that high");
    }

    function setBuyFees(uint256 buyTax) external onlyOwner() {
        buyTotalFee = buyTax;
    }

// ***
// end fee stuff§2e sw. 
// ***



    function setTreasuryFeeReceiver(address _newWallet) external onlyOwner() {
        isFeeExempt[devWallet] = false;
        isFeeExempt[_newWallet] = true;
        devWallet = _newWallet;
    }

    function setMarketingWallet(address _newWallet) external onlyOwner() {
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newWallet] = true;

        isMaxExempt[_newWallet] = true;

        marketingWallet = _newWallet;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newdevWallet ) external onlyOwner() {

        isFeeExempt[devWallet] = false;
        isFeeExempt[_newdevWallet] = true;
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newMarketingWallet] = true;

        isMaxExempt[_newMarketingWallet] = true;

        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingWallet = _newMarketingWallet;
        devWallet = _newdevWallet;
    }

// ***
// Swap settings
// ***

    function setSwapThresholdAmount(uint256 _amount) external onlyOwner() {
        swapThreshold = _amount;
    }

    function setSwapAmount(uint256 _amount) external onlyOwner() {
        if(_amount > swapThreshold) {
            swapAmount = swapThreshold;
        } else {
            swapAmount = _amount;
        }        
    }

// ***
// End Swap settings
// ***

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    /* Airdrop */
    function airDropCustom(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses");
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + tokens[i];
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens[i]);
        }
        
    }

    function airDropFixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 800 addresses");

        uint256 SCCC = tokens * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens);
        }
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

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":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","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"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airDropCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airDropFixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newdevWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setTreasuryFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273ffff45874b7c6825fd3b3ab5a382aac2e3514cd16000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ffff45874b7c6825fd3b3ab5a382aac2e3514cd1600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000bd919062000c1f565b6461e3028344620000cf919062000c70565b6002556103e8600a600254620000e6919062000c70565b620000f2919062000cea565b6003556103e8600a60025462000109919062000c70565b62000115919062000cea565b6004556005805560055460065560026007556002600855600160095560095460075460085462000146919062000d22565b62000152919062000d22565b600a556005600b556064600c5561dead601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060146019556064601a556000601b60006101000a81548160ff0219169083151502179055506001601b60016101000a81548160ff021916908315150217905550600a601b60026101000a81548160ff021916908360ff1602179055506001601d60006101000a81548160ff021916908315150217905550612710601e6002546200026f919062000c70565b6200027b919062000cea565b601e55612710601e60025462000292919062000c70565b6200029e919062000cea565b601f55348015620002ae57600080fd5b506000620002c162000a7d60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003eb919062000dc7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000479919062000dc7565b6040518363ffffffff1660e01b81526004016200049892919062000e0a565b6020604051808303816000875af1158015620004b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004de919062000dc7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600254601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60025460405162000a6e919062000e48565b60405180910390a35062000e65565b600033905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b135780860481111562000aeb5762000aea62000a85565b5b600185161562000afb5780820291505b808102905062000b0b8562000ab4565b945062000acb565b94509492505050565b60008262000b2e576001905062000c01565b8162000b3e576000905062000c01565b816001811462000b57576002811462000b625762000b98565b600191505062000c01565b60ff84111562000b775762000b7662000a85565b5b8360020a91508482111562000b915762000b9062000a85565b5b5062000c01565b5060208310610133831016604e8410600b841016171562000bd25782820a90508381111562000bcc5762000bcb62000a85565b5b62000c01565b62000be1848484600162000ac1565b9250905081840481111562000bfb5762000bfa62000a85565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c2c8262000c08565b915062000c398362000c12565b925062000c687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b1c565b905092915050565b600062000c7d8262000c08565b915062000c8a8362000c08565b925082820262000c9a8162000c08565b9150828204841483151762000cb45762000cb362000a85565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cf78262000c08565b915062000d048362000c08565b92508262000d175762000d1662000cbb565b5b828204905092915050565b600062000d2f8262000c08565b915062000d3c8362000c08565b925082820190508082111562000d575762000d5662000a85565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d8f8262000d62565b9050919050565b62000da18162000d82565b811462000dad57600080fd5b50565b60008151905062000dc18162000d96565b92915050565b60006020828403121562000de05762000ddf62000d5d565b5b600062000df08482850162000db0565b91505092915050565b62000e048162000d82565b82525050565b600060408201905062000e21600083018562000df9565b62000e30602083018462000df9565b9392505050565b62000e428162000c08565b82525050565b600060208201905062000e5f600083018462000e37565b92915050565b60805160a051615eb462000ed160003960008181611bbe01528181612a29015281816137470152818161379a015281816137f1015281816138d501528181613ae801526145200152600081816120b001528181614725015281816148070152614aa40152615eb46000f3fe6080604052600436106103c75760003560e01c80636d1b229d116101f2578063b6c523241161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e21578063f53fd58414610e4a578063f84ba65d14610e75578063ffb54a9914610e9e576103ce565b8063dd62ed3e14610d67578063e53c30b014610da4578063e632313c14610dcf578063ee9ef29e14610df8576103ce565b8063d7c01032116100dc578063d7c0103214610cc3578063dcf7aef314610cec578063dd395c6314610d15578063dd46706414610d3e576103ce565b8063b6c5232414610c07578063bd9ab53714610c32578063ca33e64c14610c5b578063d51ed1c814610c86576103ce565b80637d1db4a5116101855780638ea5220f116101545780638ea5220f14610b5d57806395d89b4114610b88578063a69df4b514610bb3578063a9059cbb14610bca576103ce565b80637d1db4a514610ab35780638038cbd314610ade578063893d20e814610b075780638da5cb5b14610b32576103ce565b8063715018a6116101c1578063715018a614610a1b578063722b62ad14610a3257806375f0a87414610a5d57806378109e5414610a88576103ce565b80636d1b229d146109615780636ddd17131461098a57806370a08231146109b5578063713e4ae5146109f2576103ce565b80632d594567116102e257806349bd5a5e116102755780635d098b38116102445780635d098b38146108b9578063617fe0ed146108e2578063658d4b7f1461090d57806367ac77b414610936576103ce565b806349bd5a5e146107ff57806350db71fb1461082a578063571ac8b0146108535780635c85974f14610890576103ce565b8063442a583d116102b1578063442a583d1461075757806344a33fd21461078057806346e421a2146107a957806347062402146107d4576103ce565b80632d594567146106ad5780632e8fa821146106d6578063313ce567146107015780633705b3921461072c576103ce565b806318160ddd1161035a578063201e799111610329578063201e7991146105f357806323b872dd1461061c57806329e04b4a146106595780632b112e4914610682576103ce565b806318160ddd1461054b5780631ad017b9146105765780631da1db5e1461059f5780631e25dc54146105c8576103ce565b8063095ea7b311610396578063095ea7b31461047d5780630d295980146104ba5780631161ae39146104e3578063180b0d7e14610520576103ce565b8063026f7d15146103d35780630445b667146103fe57806306fdde031461042957806309302dc614610454576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610ec9565b6040516103f59190614bea565b60405180910390f35b34801561040a57600080fd5b50610413610ecf565b6040516104209190614bea565b60405180910390f35b34801561043557600080fd5b5061043e610ed5565b60405161044b9190614c95565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190614ced565b610f12565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614d78565b610fcd565b6040516104b19190614dd3565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190614e1a565b6110bf565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190614e47565b611173565b6040516105179190614dd3565b60405180910390f35b34801561052c57600080fd5b50610535611188565b6040516105429190614bea565b60405180910390f35b34801561055757600080fd5b5061056061118e565b60405161056d9190614bea565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190614e87565b611198565b005b3480156105ab57600080fd5b506105c660048036038101906105c19190614ced565b611345565b005b3480156105d457600080fd5b506105dd611463565b6040516105ea9190614bea565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190614e47565b611469565b005b34801561062857600080fd5b50610643600480360381019061063e9190614eb4565b611512565b6040516106509190614dd3565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190614ced565b611712565b005b34801561068e57600080fd5b506106976117b3565b6040516106a49190614bea565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614f40565b611835565b005b3480156106e257600080fd5b506106eb611905565b6040516106f89190614bea565b60405180910390f35b34801561070d57600080fd5b5061071661190b565b6040516107239190614f8f565b60405180910390f35b34801561073857600080fd5b50610741611914565b60405161074e9190614bea565b60405180910390f35b34801561076357600080fd5b5061077e6004803603810190610779919061500f565b61191a565b005b34801561078c57600080fd5b506107a760048036038101906107a29190614ced565b611ab2565b005b3480156107b557600080fd5b506107be611bb0565b6040516107cb9190614bea565b60405180910390f35b3480156107e057600080fd5b506107e9611bb6565b6040516107f69190614bea565b60405180910390f35b34801561080b57600080fd5b50610814611bbc565b6040516108219190615092565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906150ad565b611be0565b005b34801561085f57600080fd5b5061087a60048036038101906108759190614e87565b611cd2565b6040516108879190614dd3565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190614ced565b611d05565b005b3480156108c557600080fd5b506108e060048036038101906108db9190614e87565b611da6565b005b3480156108ee57600080fd5b506108f7611fa9565b6040516109049190614dd3565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f91906150ad565b611fbc565b005b34801561094257600080fd5b5061094b6120ae565b604051610958919061514c565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614ced565b6120d2565b005b34801561099657600080fd5b5061099f61214b565b6040516109ac9190614dd3565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190614e87565b61215e565b6040516109e99190614bea565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a1491906151bd565b6121a7565b005b348015610a2757600080fd5b50610a306123d8565b005b348015610a3e57600080fd5b50610a47612530565b604051610a549190614f8f565b60405180910390f35b348015610a6957600080fd5b50610a72612543565b604051610a7f9190615092565b60405180910390f35b348015610a9457600080fd5b50610a9d612567565b604051610aaa9190614bea565b60405180910390f35b348015610abf57600080fd5b50610ac861256d565b604051610ad59190614bea565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b009190615252565b612573565b005b348015610b1357600080fd5b50610b1c61269c565b604051610b299190615092565b60405180910390f35b348015610b3e57600080fd5b50610b476126ab565b604051610b549190615092565b60405180910390f35b348015610b6957600080fd5b50610b726126d5565b604051610b7f9190615092565b60405180910390f35b348015610b9457600080fd5b50610b9d6126fb565b604051610baa9190614c95565b60405180910390f35b348015610bbf57600080fd5b50610bc8612738565b005b348015610bd657600080fd5b50610bf16004803603810190610bec9190614d78565b61290f565b604051610bfe9190614dd3565b60405180910390f35b348015610c1357600080fd5b50610c1c612924565b604051610c299190614bea565b60405180910390f35b348015610c3e57600080fd5b50610c596004803603810190610c549190614ced565b61292e565b005b348015610c6757600080fd5b50610c706129e9565b604051610c7d9190615092565b60405180910390f35b348015610c9257600080fd5b50610cad6004803603810190610ca89190614ced565b612a0f565b604051610cba9190614bea565b60405180910390f35b348015610ccf57600080fd5b50610cea6004803603810190610ce591906152b9565b612a7f565b005b348015610cf857600080fd5b50610d136004803603810190610d0e9190614ced565b612dd8565b005b348015610d2157600080fd5b50610d3c6004803603810190610d3791906150ad565b612e79565b005b348015610d4a57600080fd5b50610d656004803603810190610d609190614ced565b612f6b565b005b348015610d7357600080fd5b50610d8e6004803603810190610d89919061530c565b613139565b604051610d9b9190614bea565b60405180910390f35b348015610db057600080fd5b50610db96131c0565b604051610dc69190614bea565b60405180910390f35b348015610ddb57600080fd5b50610df66004803603810190610df19190614ced565b6131c6565b005b348015610e0457600080fd5b50610e1f6004803603810190610e1a9190614ced565b613280565b005b348015610e2d57600080fd5b50610e486004803603810190610e439190614e87565b613321565b005b348015610e5657600080fd5b50610e5f6134e7565b604051610e6c9190614bea565b60405180910390f35b348015610e8157600080fd5b50610e9c6004803603810190610e9791906150ad565b6134ed565b005b348015610eaa57600080fd5b50610eb36135df565b604051610ec09190614dd3565b60405180910390f35b60085481565b601e5481565b60606040518060400160405280600681526020017f244c55434b590000000000000000000000000000000000000000000000000000815250905090565b610f1a6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090615398565b60405180910390fd5b6103e881600254610fba91906153e7565b610fc49190615458565b60048190555050565b600081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110ad9190614bea565b60405180910390a36001905092915050565b6110c76135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90615398565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b60008261117f83612a0f565b11905092915050565b600c5481565b6000600254905090565b6111a06135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690615398565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61134d6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390615398565b60405180910390fd5b600047905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064848461142991906153e7565b6114339190615458565b9081150290604051600060405180830381858888f1935050505015801561145e573d6000803e3d6000fd5b505050565b600b5481565b6114716135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790615398565b60405180910390fd5b8160198190555080601a819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146116fe5761167d826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135fa9092919063ffffffff16565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61170984848461364f565b90509392505050565b61171a6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090615398565b60405180910390fd5b80601e8190555050565b60006118306117e3601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661215e565b611822611811601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661215e565b600254613f1c90919063ffffffff16565b613f1c90919063ffffffff16565b905090565b61183d6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c390615398565b60405180910390fd5b81601b60016101000a81548160ff02191690831515021790555080601b60026101000a81548160ff021916908360ff1602179055505050565b601f5481565b60006009905090565b60065481565b6119226135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890615398565b60405180910390fd5b61032183839050106119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef906154fb565b60405180910390fd5b60008383905082611a0991906153e7565b905080611a158661215e565b1015611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90615567565b60405180910390fd5b60005b84849050811015611aaa57611a9686868684818110611a7b57611a7a615587565b5b9050602002016020810190611a909190614e87565b85613f32565b508080611aa2906155b6565b915050611a59565b505050505050565b611aba6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4090615398565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484611b7691906153e7565b611b809190615458565b9081150290604051600060405180830381858888f19350505050158015611bab573d6000803e3d6000fd5b505050565b60075481565b60055481565b7f000000000000000000000000000000000000000000000000000000000000000081565b611be86135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90615398565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611cfe827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fcd565b9050919050565b611d0d6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390615398565b60405180910390fd5b8060038190555050565b611dae6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3490615398565b60405180910390fd5b6000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60019054906101000a900460ff1681565b611fc46135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90615398565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156121485761214633601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613f32565b505b50565b601d60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121af6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590615398565b60405180910390fd5b6101f58484905010612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90615670565b60405180910390fd5b8181905084849050146122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c490615702565b60405180910390fd5b6000805b85859050811015612316578383828181106122ef576122ee615587565b5b90506020020135826123019190615722565b9150808061230e906155b6565b9150506122d1565b50806123218761215e565b1015612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990615567565b60405180910390fd5b60005b858590508110156123cf576123bb8787878481811061238757612386615587565b5b905060200201602081019061239c9190614e87565b8686858181106123af576123ae615587565b5b90506020020135613f32565b5080806123c7906155b6565b915050612365565b50505050505050565b6123e06135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461246f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246690615398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b61257b6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461260a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260190615398565b60405180910390fd5b83600781905550826008819055508160098190555061264482612636858761410590919063ffffffff16565b61410590919063ffffffff16565b600a8190555080600c81905550605a600a5410612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d906157a2565b60405180910390fd5b50505050565b60006126a66126ab565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f244c4b5900000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf90615834565b60405180910390fd5b600f54421161280c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612803906158a0565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061291c33848461364f565b905092915050565b6000600f54905090565b6129366135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90615398565b60405180910390fd5b6103e8816002546129d691906153e7565b6129e09190615458565b60038190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612a78612a1c6117b3565b612a6a612a5b6002612a4d7f000000000000000000000000000000000000000000000000000000000000000061215e565b61411b90919063ffffffff16565b8561411b90919063ffffffff16565b61413190919063ffffffff16565b9050919050565b612a876135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90615398565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612de06135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6690615398565b60405180910390fd5b8060068190555050565b612e816135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0790615398565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612f736135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff990615398565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426130b39190615722565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6131ce6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461325d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325490615398565b60405180910390fd5b601e5481111561327557601e54601f8190555061327d565b80601f819055505b50565b6132886135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330e90615398565b60405180910390fd5b80600b8190555050565b6133296135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133af90615398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341e90615932565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6134f56135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357b90615398565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b600033905090565b6000838311158290613642576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136399190614c95565b60405180910390fd5b5082840390509392505050565b6000602060009054906101000a900460ff161561367857613671848484613f32565b9050613f15565b6136806126ab565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156136ee57506136be6126ab565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561374357601b60009054906101000a900460ff16613742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137399061599e565b60405180910390fd5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561384057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156138cc5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561392457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561397c575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156139d65750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613a305750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613ae6576000613a408661215e565b9050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613ae4576004548582613aa29190615722565b1115613ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ada90615a30565b60405180910390fd5b5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015613b4d5750601b60019054906101000a900460ff165b8015613ba35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c8b5742601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2090615ac2565b60405180910390fd5b601b60029054906101000a900460ff1660ff1642613c479190615722565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613ce757613ce68685614147565b5b613d70846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135fa9092919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008490508115613ddb576000600b541115613dd657613dd387866141e4565b90505b613e13565b613de48761434d565b613dee5784613dfa565b613df98786856143a4565b5b9050613e0461451c565b15613e1257613e116145f1565b5b5b613e6581601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410590919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f059190614bea565b60405180910390a3600193505050505b9392505050565b60008183613f2a9190615ae2565b905092915050565b6000613fbd826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135fa9092919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061405282601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410590919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516140f29190614bea565b60405180910390a3600190509392505050565b600081836141139190615722565b905092915050565b6000818361412991906153e7565b905092915050565b6000818361413f9190615458565b905092915050565b600354811115806141a15750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d790615b62565b60405180910390fd5b5050565b600080600b54905060006142346064600c5461420091906153e7565b6142266064614218868961411b90919063ffffffff16565b61411b90919063ffffffff16565b61413190919063ffffffff16565b905061428881601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410590919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143289190614bea565b60405180910390a36143438185613f1c90919063ffffffff16565b9250505092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080826143b4576006546143b8565b600a545b905060006144026064600c546143ce91906153e7565b6143f460646143e6868a61411b90919063ffffffff16565b61411b90919063ffffffff16565b61413190919063ffffffff16565b905061445681601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410590919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144f69190614bea565b60405180910390a36145118186613f1c90919063ffffffff16565b925050509392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156145875750602060009054906101000a900460ff16155b801561459f5750601d60009054906101000a900460ff165b80156145ec5750601e54601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff021916908315150217905550600061461c601954601a54611173565b6146285760075461462b565b60005b9050600061466b600261465d600a5461464f86601f5461411b90919063ffffffff16565b61413190919063ffffffff16565b61413190919063ffffffff16565b9050600061468482601f54613f1c90919063ffffffff16565b90506000600267ffffffffffffffff8111156146a3576146a2615b82565b5b6040519080825280602002602001820160405280156146d15781602001602082028036833780820191505090505b50905030816000815181106146e9576146e8615587565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561478e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147b29190615bc6565b816001815181106147c6576147c5615587565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401614867959493929190615cec565b600060405180830381600087803b15801561488157600080fd5b505af1158015614895573d6000803e3d6000fd5b5050505060006148ae8247613f1c90919063ffffffff16565b905060006148da6148c960028961413190919063ffffffff16565b600a54613f1c90919063ffffffff16565b90506000614918600261490a846148fc6007548861411b90919063ffffffff16565b61413190919063ffffffff16565b61413190919063ffffffff16565b90506000614943836149356008548761411b90919063ffffffff16565b61413190919063ffffffff16565b9050600061496e846149606009548861411b90919063ffffffff16565b61413190919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516149bb90615d77565b600060405180830381858888f193505050503d80600081146149f9576040519150601f19603f3d011682016040523d82523d6000602084013e6149fe565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051614a4c90615d77565b600060405180830381858888f193505050503d8060008114614a8a576040519150601f19603f3d011682016040523d82523d6000602084013e614a8f565b606091505b5050809150506000905060008a1115614ba9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614b2996959493929190615d8c565b60606040518083038185885af1158015614b47573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614b6c9190615e02565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b604051614ba0929190615e55565b60405180910390a15b50505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000819050919050565b614be481614bd1565b82525050565b6000602082019050614bff6000830184614bdb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614c3f578082015181840152602081019050614c24565b60008484015250505050565b6000601f19601f8301169050919050565b6000614c6782614c05565b614c718185614c10565b9350614c81818560208601614c21565b614c8a81614c4b565b840191505092915050565b60006020820190508181036000830152614caf8184614c5c565b905092915050565b600080fd5b600080fd5b614cca81614bd1565b8114614cd557600080fd5b50565b600081359050614ce781614cc1565b92915050565b600060208284031215614d0357614d02614cb7565b5b6000614d1184828501614cd8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614d4582614d1a565b9050919050565b614d5581614d3a565b8114614d6057600080fd5b50565b600081359050614d7281614d4c565b92915050565b60008060408385031215614d8f57614d8e614cb7565b5b6000614d9d85828601614d63565b9250506020614dae85828601614cd8565b9150509250929050565b60008115159050919050565b614dcd81614db8565b82525050565b6000602082019050614de86000830184614dc4565b92915050565b614df781614db8565b8114614e0257600080fd5b50565b600081359050614e1481614dee565b92915050565b600060208284031215614e3057614e2f614cb7565b5b6000614e3e84828501614e05565b91505092915050565b60008060408385031215614e5e57614e5d614cb7565b5b6000614e6c85828601614cd8565b9250506020614e7d85828601614cd8565b9150509250929050565b600060208284031215614e9d57614e9c614cb7565b5b6000614eab84828501614d63565b91505092915050565b600080600060608486031215614ecd57614ecc614cb7565b5b6000614edb86828701614d63565b9350506020614eec86828701614d63565b9250506040614efd86828701614cd8565b9150509250925092565b600060ff82169050919050565b614f1d81614f07565b8114614f2857600080fd5b50565b600081359050614f3a81614f14565b92915050565b60008060408385031215614f5757614f56614cb7565b5b6000614f6585828601614e05565b9250506020614f7685828601614f2b565b9150509250929050565b614f8981614f07565b82525050565b6000602082019050614fa46000830184614f80565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614fcf57614fce614faa565b5b8235905067ffffffffffffffff811115614fec57614feb614faf565b5b60208301915083602082028301111561500857615007614fb4565b5b9250929050565b6000806000806060858703121561502957615028614cb7565b5b600061503787828801614d63565b945050602085013567ffffffffffffffff81111561505857615057614cbc565b5b61506487828801614fb9565b9350935050604061507787828801614cd8565b91505092959194509250565b61508c81614d3a565b82525050565b60006020820190506150a76000830184615083565b92915050565b600080604083850312156150c4576150c3614cb7565b5b60006150d285828601614d63565b92505060206150e385828601614e05565b9150509250929050565b6000819050919050565b600061511261510d61510884614d1a565b6150ed565b614d1a565b9050919050565b6000615124826150f7565b9050919050565b600061513682615119565b9050919050565b6151468161512b565b82525050565b6000602082019050615161600083018461513d565b92915050565b60008083601f84011261517d5761517c614faa565b5b8235905067ffffffffffffffff81111561519a57615199614faf565b5b6020830191508360208202830111156151b6576151b5614fb4565b5b9250929050565b6000806000806000606086880312156151d9576151d8614cb7565b5b60006151e788828901614d63565b955050602086013567ffffffffffffffff81111561520857615207614cbc565b5b61521488828901614fb9565b9450945050604086013567ffffffffffffffff81111561523757615236614cbc565b5b61524388828901615167565b92509250509295509295909350565b6000806000806080858703121561526c5761526b614cb7565b5b600061527a87828801614cd8565b945050602061528b87828801614cd8565b935050604061529c87828801614cd8565b92505060606152ad87828801614cd8565b91505092959194509250565b6000806000606084860312156152d2576152d1614cb7565b5b60006152e086828701614d63565b93505060206152f186828701614d63565b925050604061530286828701614d63565b9150509250925092565b6000806040838503121561532357615322614cb7565b5b600061533185828601614d63565b925050602061534285828601614d63565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615382602083614c10565b915061538d8261534c565b602082019050919050565b600060208201905081810360008301526153b181615375565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153f282614bd1565b91506153fd83614bd1565b925082820261540b81614bd1565b91508282048414831517615422576154216153b8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061546382614bd1565b915061546e83614bd1565b92508261547e5761547d615429565b5b828204905092915050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3830302061646472657373657300000000000000000000000000000000000000602082015250565b60006154e5602d83614c10565b91506154f082615489565b604082019050919050565b60006020820190508181036000830152615514816154d8565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b6000615551601b83614c10565b915061555c8261551b565b602082019050919050565b6000602082019050818103600083015261558081615544565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006155c182614bd1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155f3576155f26153b8565b5b600182019050919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b600061565a602d83614c10565b9150615665826155fe565b604082019050919050565b600060208201905081810360008301526156898161564d565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b60006156ec602883614c10565b91506156f782615690565b604082019050919050565b6000602082019050818103600083015261571b816156df565b9050919050565b600061572d82614bd1565b915061573883614bd1565b92508282019050808211156157505761574f6153b8565b5b92915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b600061578c601883614c10565b915061579782615756565b602082019050919050565b600060208201905081810360008301526157bb8161577f565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061581e602383614c10565b9150615829826157c2565b604082019050919050565b6000602082019050818103600083015261584d81615811565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b600061588a601f83614c10565b915061589582615854565b602082019050919050565b600060208201905081810360008301526158b98161587d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061591c602683614c10565b9150615927826158c0565b604082019050919050565b6000602082019050818103600083015261594b8161590f565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000615988601483614c10565b915061599382615952565b602082019050919050565b600060208201905081810360008301526159b78161597b565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615a1a603e83614c10565b9150615a25826159be565b604082019050919050565b60006020820190508181036000830152615a4981615a0d565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000615aac602583614c10565b9150615ab782615a50565b604082019050919050565b60006020820190508181036000830152615adb81615a9f565b9050919050565b6000615aed82614bd1565b9150615af883614bd1565b9250828203905081811115615b1057615b0f6153b8565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000615b4c601183614c10565b9150615b5782615b16565b602082019050919050565b60006020820190508181036000830152615b7b81615b3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615bc081614d4c565b92915050565b600060208284031215615bdc57615bdb614cb7565b5b6000615bea84828501615bb1565b91505092915050565b6000819050919050565b6000615c18615c13615c0e84615bf3565b6150ed565b614bd1565b9050919050565b615c2881615bfd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c6381614d3a565b82525050565b6000615c758383615c5a565b60208301905092915050565b6000602082019050919050565b6000615c9982615c2e565b615ca38185615c39565b9350615cae83615c4a565b8060005b83811015615cdf578151615cc68882615c69565b9750615cd183615c81565b925050600181019050615cb2565b5085935050505092915050565b600060a082019050615d016000830188614bdb565b615d0e6020830187615c1f565b8181036040830152615d208186615c8e565b9050615d2f6060830185615083565b615d3c6080830184614bdb565b9695505050505050565b600081905092915050565b50565b6000615d61600083615d46565b9150615d6c82615d51565b600082019050919050565b6000615d8282615d54565b9150819050919050565b600060c082019050615da16000830189615083565b615dae6020830188614bdb565b615dbb6040830187615c1f565b615dc86060830186615c1f565b615dd56080830185615083565b615de260a0830184614bdb565b979650505050505050565b600081519050615dfc81614cc1565b92915050565b600080600060608486031215615e1b57615e1a614cb7565b5b6000615e2986828701615ded565b9350506020615e3a86828701615ded565b9250506040615e4b86828701615ded565b9150509250925092565b6000604082019050615e6a6000830185614bdb565b615e776020830184614bdb565b939250505056fea264697066735822122059aa52de9a936e9e374e7f5c52809c79b23ea9540c5aa6d0342bf576d4febcb964736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80636d1b229d116101f2578063b6c523241161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e21578063f53fd58414610e4a578063f84ba65d14610e75578063ffb54a9914610e9e576103ce565b8063dd62ed3e14610d67578063e53c30b014610da4578063e632313c14610dcf578063ee9ef29e14610df8576103ce565b8063d7c01032116100dc578063d7c0103214610cc3578063dcf7aef314610cec578063dd395c6314610d15578063dd46706414610d3e576103ce565b8063b6c5232414610c07578063bd9ab53714610c32578063ca33e64c14610c5b578063d51ed1c814610c86576103ce565b80637d1db4a5116101855780638ea5220f116101545780638ea5220f14610b5d57806395d89b4114610b88578063a69df4b514610bb3578063a9059cbb14610bca576103ce565b80637d1db4a514610ab35780638038cbd314610ade578063893d20e814610b075780638da5cb5b14610b32576103ce565b8063715018a6116101c1578063715018a614610a1b578063722b62ad14610a3257806375f0a87414610a5d57806378109e5414610a88576103ce565b80636d1b229d146109615780636ddd17131461098a57806370a08231146109b5578063713e4ae5146109f2576103ce565b80632d594567116102e257806349bd5a5e116102755780635d098b38116102445780635d098b38146108b9578063617fe0ed146108e2578063658d4b7f1461090d57806367ac77b414610936576103ce565b806349bd5a5e146107ff57806350db71fb1461082a578063571ac8b0146108535780635c85974f14610890576103ce565b8063442a583d116102b1578063442a583d1461075757806344a33fd21461078057806346e421a2146107a957806347062402146107d4576103ce565b80632d594567146106ad5780632e8fa821146106d6578063313ce567146107015780633705b3921461072c576103ce565b806318160ddd1161035a578063201e799111610329578063201e7991146105f357806323b872dd1461061c57806329e04b4a146106595780632b112e4914610682576103ce565b806318160ddd1461054b5780631ad017b9146105765780631da1db5e1461059f5780631e25dc54146105c8576103ce565b8063095ea7b311610396578063095ea7b31461047d5780630d295980146104ba5780631161ae39146104e3578063180b0d7e14610520576103ce565b8063026f7d15146103d35780630445b667146103fe57806306fdde031461042957806309302dc614610454576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610ec9565b6040516103f59190614bea565b60405180910390f35b34801561040a57600080fd5b50610413610ecf565b6040516104209190614bea565b60405180910390f35b34801561043557600080fd5b5061043e610ed5565b60405161044b9190614c95565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190614ced565b610f12565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614d78565b610fcd565b6040516104b19190614dd3565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190614e1a565b6110bf565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190614e47565b611173565b6040516105179190614dd3565b60405180910390f35b34801561052c57600080fd5b50610535611188565b6040516105429190614bea565b60405180910390f35b34801561055757600080fd5b5061056061118e565b60405161056d9190614bea565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190614e87565b611198565b005b3480156105ab57600080fd5b506105c660048036038101906105c19190614ced565b611345565b005b3480156105d457600080fd5b506105dd611463565b6040516105ea9190614bea565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190614e47565b611469565b005b34801561062857600080fd5b50610643600480360381019061063e9190614eb4565b611512565b6040516106509190614dd3565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190614ced565b611712565b005b34801561068e57600080fd5b506106976117b3565b6040516106a49190614bea565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190614f40565b611835565b005b3480156106e257600080fd5b506106eb611905565b6040516106f89190614bea565b60405180910390f35b34801561070d57600080fd5b5061071661190b565b6040516107239190614f8f565b60405180910390f35b34801561073857600080fd5b50610741611914565b60405161074e9190614bea565b60405180910390f35b34801561076357600080fd5b5061077e6004803603810190610779919061500f565b61191a565b005b34801561078c57600080fd5b506107a760048036038101906107a29190614ced565b611ab2565b005b3480156107b557600080fd5b506107be611bb0565b6040516107cb9190614bea565b60405180910390f35b3480156107e057600080fd5b506107e9611bb6565b6040516107f69190614bea565b60405180910390f35b34801561080b57600080fd5b50610814611bbc565b6040516108219190615092565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c91906150ad565b611be0565b005b34801561085f57600080fd5b5061087a60048036038101906108759190614e87565b611cd2565b6040516108879190614dd3565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190614ced565b611d05565b005b3480156108c557600080fd5b506108e060048036038101906108db9190614e87565b611da6565b005b3480156108ee57600080fd5b506108f7611fa9565b6040516109049190614dd3565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f91906150ad565b611fbc565b005b34801561094257600080fd5b5061094b6120ae565b604051610958919061514c565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614ced565b6120d2565b005b34801561099657600080fd5b5061099f61214b565b6040516109ac9190614dd3565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190614e87565b61215e565b6040516109e99190614bea565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a1491906151bd565b6121a7565b005b348015610a2757600080fd5b50610a306123d8565b005b348015610a3e57600080fd5b50610a47612530565b604051610a549190614f8f565b60405180910390f35b348015610a6957600080fd5b50610a72612543565b604051610a7f9190615092565b60405180910390f35b348015610a9457600080fd5b50610a9d612567565b604051610aaa9190614bea565b60405180910390f35b348015610abf57600080fd5b50610ac861256d565b604051610ad59190614bea565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b009190615252565b612573565b005b348015610b1357600080fd5b50610b1c61269c565b604051610b299190615092565b60405180910390f35b348015610b3e57600080fd5b50610b476126ab565b604051610b549190615092565b60405180910390f35b348015610b6957600080fd5b50610b726126d5565b604051610b7f9190615092565b60405180910390f35b348015610b9457600080fd5b50610b9d6126fb565b604051610baa9190614c95565b60405180910390f35b348015610bbf57600080fd5b50610bc8612738565b005b348015610bd657600080fd5b50610bf16004803603810190610bec9190614d78565b61290f565b604051610bfe9190614dd3565b60405180910390f35b348015610c1357600080fd5b50610c1c612924565b604051610c299190614bea565b60405180910390f35b348015610c3e57600080fd5b50610c596004803603810190610c549190614ced565b61292e565b005b348015610c6757600080fd5b50610c706129e9565b604051610c7d9190615092565b60405180910390f35b348015610c9257600080fd5b50610cad6004803603810190610ca89190614ced565b612a0f565b604051610cba9190614bea565b60405180910390f35b348015610ccf57600080fd5b50610cea6004803603810190610ce591906152b9565b612a7f565b005b348015610cf857600080fd5b50610d136004803603810190610d0e9190614ced565b612dd8565b005b348015610d2157600080fd5b50610d3c6004803603810190610d3791906150ad565b612e79565b005b348015610d4a57600080fd5b50610d656004803603810190610d609190614ced565b612f6b565b005b348015610d7357600080fd5b50610d8e6004803603810190610d89919061530c565b613139565b604051610d9b9190614bea565b60405180910390f35b348015610db057600080fd5b50610db96131c0565b604051610dc69190614bea565b60405180910390f35b348015610ddb57600080fd5b50610df66004803603810190610df19190614ced565b6131c6565b005b348015610e0457600080fd5b50610e1f6004803603810190610e1a9190614ced565b613280565b005b348015610e2d57600080fd5b50610e486004803603810190610e439190614e87565b613321565b005b348015610e5657600080fd5b50610e5f6134e7565b604051610e6c9190614bea565b60405180910390f35b348015610e8157600080fd5b50610e9c6004803603810190610e9791906150ad565b6134ed565b005b348015610eaa57600080fd5b50610eb36135df565b604051610ec09190614dd3565b60405180910390f35b60085481565b601e5481565b60606040518060400160405280600681526020017f244c55434b590000000000000000000000000000000000000000000000000000815250905090565b610f1a6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090615398565b60405180910390fd5b6103e881600254610fba91906153e7565b610fc49190615458565b60048190555050565b600081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110ad9190614bea565b60405180910390a36001905092915050565b6110c76135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90615398565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b60008261117f83612a0f565b11905092915050565b600c5481565b6000600254905090565b6111a06135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690615398565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61134d6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390615398565b60405180910390fd5b600047905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064848461142991906153e7565b6114339190615458565b9081150290604051600060405180830381858888f1935050505015801561145e573d6000803e3d6000fd5b505050565b600b5481565b6114716135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790615398565b60405180910390fd5b8160198190555080601a819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146116fe5761167d826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135fa9092919063ffffffff16565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61170984848461364f565b90509392505050565b61171a6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090615398565b60405180910390fd5b80601e8190555050565b60006118306117e3601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661215e565b611822611811601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661215e565b600254613f1c90919063ffffffff16565b613f1c90919063ffffffff16565b905090565b61183d6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c390615398565b60405180910390fd5b81601b60016101000a81548160ff02191690831515021790555080601b60026101000a81548160ff021916908360ff1602179055505050565b601f5481565b60006009905090565b60065481565b6119226135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a890615398565b60405180910390fd5b61032183839050106119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef906154fb565b60405180910390fd5b60008383905082611a0991906153e7565b905080611a158661215e565b1015611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90615567565b60405180910390fd5b60005b84849050811015611aaa57611a9686868684818110611a7b57611a7a615587565b5b9050602002016020810190611a909190614e87565b85613f32565b508080611aa2906155b6565b915050611a59565b505050505050565b611aba6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4090615398565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484611b7691906153e7565b611b809190615458565b9081150290604051600060405180830381858888f19350505050158015611bab573d6000803e3d6000fd5b505050565b60075481565b60055481565b7f00000000000000000000000071fd46280cf96021d30eb11ef516b22781b2499181565b611be86135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90615398565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611cfe827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fcd565b9050919050565b611d0d6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390615398565b60405180910390fd5b8060038190555050565b611dae6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3490615398565b60405180910390fd5b6000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60019054906101000a900460ff1681565b611fc46135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90615398565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156121485761214633601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613f32565b505b50565b601d60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6121af6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590615398565b60405180910390fd5b6101f58484905010612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90615670565b60405180910390fd5b8181905084849050146122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c490615702565b60405180910390fd5b6000805b85859050811015612316578383828181106122ef576122ee615587565b5b90506020020135826123019190615722565b9150808061230e906155b6565b9150506122d1565b50806123218761215e565b1015612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990615567565b60405180910390fd5b60005b858590508110156123cf576123bb8787878481811061238757612386615587565b5b905060200201602081019061239c9190614e87565b8686858181106123af576123ae615587565b5b90506020020135613f32565b5080806123c7906155b6565b915050612365565b50505050505050565b6123e06135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461246f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246690615398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b61257b6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461260a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260190615398565b60405180910390fd5b83600781905550826008819055508160098190555061264482612636858761410590919063ffffffff16565b61410590919063ffffffff16565b600a8190555080600c81905550605a600a5410612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d906157a2565b60405180910390fd5b50505050565b60006126a66126ab565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f244c4b5900000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf90615834565b60405180910390fd5b600f54421161280c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612803906158a0565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061291c33848461364f565b905092915050565b6000600f54905090565b6129366135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90615398565b60405180910390fd5b6103e8816002546129d691906153e7565b6129e09190615458565b60038190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612a78612a1c6117b3565b612a6a612a5b6002612a4d7f00000000000000000000000071fd46280cf96021d30eb11ef516b22781b2499161215e565b61411b90919063ffffffff16565b8561411b90919063ffffffff16565b61413190919063ffffffff16565b9050919050565b612a876135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90615398565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612de06135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6690615398565b60405180910390fd5b8060068190555050565b612e816135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0790615398565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612f736135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff990615398565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426130b39190615722565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6131ce6135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461325d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325490615398565b60405180910390fd5b601e5481111561327557601e54601f8190555061327d565b80601f819055505b50565b6132886135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330e90615398565b60405180910390fd5b80600b8190555050565b6133296135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133af90615398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341e90615932565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6134f56135f2565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357b90615398565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b600033905090565b6000838311158290613642576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136399190614c95565b60405180910390fd5b5082840390509392505050565b6000602060009054906101000a900460ff161561367857613671848484613f32565b9050613f15565b6136806126ab565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156136ee57506136be6126ab565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561374357601b60009054906101000a900460ff16613742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137399061599e565b60405180910390fd5b5b60007f00000000000000000000000071fd46280cf96021d30eb11ef516b22781b2499173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f00000000000000000000000071fd46280cf96021d30eb11ef516b22781b2499173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561384057507f00000000000000000000000071fd46280cf96021d30eb11ef516b22781b2499173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156138cc5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561392457507f00000000000000000000000071fd46280cf96021d30eb11ef516b22781b2499173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561397c575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156139d65750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613a305750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613ae6576000613a408661215e565b9050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613ae4576004548582613aa29190615722565b1115613ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ada90615a30565b60405180910390fd5b5b505b7f00000000000000000000000071fd46280cf96021d30eb11ef516b22781b2499173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015613b4d5750601b60019054906101000a900460ff165b8015613ba35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c8b5742601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2090615ac2565b60405180910390fd5b601b60029054906101000a900460ff1660ff1642613c479190615722565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613ce757613ce68685614147565b5b613d70846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135fa9092919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008490508115613ddb576000600b541115613dd657613dd387866141e4565b90505b613e13565b613de48761434d565b613dee5784613dfa565b613df98786856143a4565b5b9050613e0461451c565b15613e1257613e116145f1565b5b5b613e6581601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410590919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f059190614bea565b60405180910390a3600193505050505b9392505050565b60008183613f2a9190615ae2565b905092915050565b6000613fbd826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135fa9092919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061405282601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410590919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516140f29190614bea565b60405180910390a3600190509392505050565b600081836141139190615722565b905092915050565b6000818361412991906153e7565b905092915050565b6000818361413f9190615458565b905092915050565b600354811115806141a15750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d790615b62565b60405180910390fd5b5050565b600080600b54905060006142346064600c5461420091906153e7565b6142266064614218868961411b90919063ffffffff16565b61411b90919063ffffffff16565b61413190919063ffffffff16565b905061428881601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410590919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143289190614bea565b60405180910390a36143438185613f1c90919063ffffffff16565b9250505092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080826143b4576006546143b8565b600a545b905060006144026064600c546143ce91906153e7565b6143f460646143e6868a61411b90919063ffffffff16565b61411b90919063ffffffff16565b61413190919063ffffffff16565b905061445681601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410590919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144f69190614bea565b60405180910390a36145118186613f1c90919063ffffffff16565b925050509392505050565b60007f00000000000000000000000071fd46280cf96021d30eb11ef516b22781b2499173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156145875750602060009054906101000a900460ff16155b801561459f5750601d60009054906101000a900460ff165b80156145ec5750601e54601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff021916908315150217905550600061461c601954601a54611173565b6146285760075461462b565b60005b9050600061466b600261465d600a5461464f86601f5461411b90919063ffffffff16565b61413190919063ffffffff16565b61413190919063ffffffff16565b9050600061468482601f54613f1c90919063ffffffff16565b90506000600267ffffffffffffffff8111156146a3576146a2615b82565b5b6040519080825280602002602001820160405280156146d15781602001602082028036833780820191505090505b50905030816000815181106146e9576146e8615587565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561478e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147b29190615bc6565b816001815181106147c6576147c5615587565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401614867959493929190615cec565b600060405180830381600087803b15801561488157600080fd5b505af1158015614895573d6000803e3d6000fd5b5050505060006148ae8247613f1c90919063ffffffff16565b905060006148da6148c960028961413190919063ffffffff16565b600a54613f1c90919063ffffffff16565b90506000614918600261490a846148fc6007548861411b90919063ffffffff16565b61413190919063ffffffff16565b61413190919063ffffffff16565b90506000614943836149356008548761411b90919063ffffffff16565b61413190919063ffffffff16565b9050600061496e846149606009548861411b90919063ffffffff16565b61413190919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516149bb90615d77565b600060405180830381858888f193505050503d80600081146149f9576040519150601f19603f3d011682016040523d82523d6000602084013e6149fe565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051614a4c90615d77565b600060405180830381858888f193505050503d8060008114614a8a576040519150601f19603f3d011682016040523d82523d6000602084013e614a8f565b606091505b5050809150506000905060008a1115614ba9577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614b2996959493929190615d8c565b60606040518083038185885af1158015614b47573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614b6c9190615e02565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b604051614ba0929190615e55565b60405180910390a15b50505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000819050919050565b614be481614bd1565b82525050565b6000602082019050614bff6000830184614bdb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614c3f578082015181840152602081019050614c24565b60008484015250505050565b6000601f19601f8301169050919050565b6000614c6782614c05565b614c718185614c10565b9350614c81818560208601614c21565b614c8a81614c4b565b840191505092915050565b60006020820190508181036000830152614caf8184614c5c565b905092915050565b600080fd5b600080fd5b614cca81614bd1565b8114614cd557600080fd5b50565b600081359050614ce781614cc1565b92915050565b600060208284031215614d0357614d02614cb7565b5b6000614d1184828501614cd8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614d4582614d1a565b9050919050565b614d5581614d3a565b8114614d6057600080fd5b50565b600081359050614d7281614d4c565b92915050565b60008060408385031215614d8f57614d8e614cb7565b5b6000614d9d85828601614d63565b9250506020614dae85828601614cd8565b9150509250929050565b60008115159050919050565b614dcd81614db8565b82525050565b6000602082019050614de86000830184614dc4565b92915050565b614df781614db8565b8114614e0257600080fd5b50565b600081359050614e1481614dee565b92915050565b600060208284031215614e3057614e2f614cb7565b5b6000614e3e84828501614e05565b91505092915050565b60008060408385031215614e5e57614e5d614cb7565b5b6000614e6c85828601614cd8565b9250506020614e7d85828601614cd8565b9150509250929050565b600060208284031215614e9d57614e9c614cb7565b5b6000614eab84828501614d63565b91505092915050565b600080600060608486031215614ecd57614ecc614cb7565b5b6000614edb86828701614d63565b9350506020614eec86828701614d63565b9250506040614efd86828701614cd8565b9150509250925092565b600060ff82169050919050565b614f1d81614f07565b8114614f2857600080fd5b50565b600081359050614f3a81614f14565b92915050565b60008060408385031215614f5757614f56614cb7565b5b6000614f6585828601614e05565b9250506020614f7685828601614f2b565b9150509250929050565b614f8981614f07565b82525050565b6000602082019050614fa46000830184614f80565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614fcf57614fce614faa565b5b8235905067ffffffffffffffff811115614fec57614feb614faf565b5b60208301915083602082028301111561500857615007614fb4565b5b9250929050565b6000806000806060858703121561502957615028614cb7565b5b600061503787828801614d63565b945050602085013567ffffffffffffffff81111561505857615057614cbc565b5b61506487828801614fb9565b9350935050604061507787828801614cd8565b91505092959194509250565b61508c81614d3a565b82525050565b60006020820190506150a76000830184615083565b92915050565b600080604083850312156150c4576150c3614cb7565b5b60006150d285828601614d63565b92505060206150e385828601614e05565b9150509250929050565b6000819050919050565b600061511261510d61510884614d1a565b6150ed565b614d1a565b9050919050565b6000615124826150f7565b9050919050565b600061513682615119565b9050919050565b6151468161512b565b82525050565b6000602082019050615161600083018461513d565b92915050565b60008083601f84011261517d5761517c614faa565b5b8235905067ffffffffffffffff81111561519a57615199614faf565b5b6020830191508360208202830111156151b6576151b5614fb4565b5b9250929050565b6000806000806000606086880312156151d9576151d8614cb7565b5b60006151e788828901614d63565b955050602086013567ffffffffffffffff81111561520857615207614cbc565b5b61521488828901614fb9565b9450945050604086013567ffffffffffffffff81111561523757615236614cbc565b5b61524388828901615167565b92509250509295509295909350565b6000806000806080858703121561526c5761526b614cb7565b5b600061527a87828801614cd8565b945050602061528b87828801614cd8565b935050604061529c87828801614cd8565b92505060606152ad87828801614cd8565b91505092959194509250565b6000806000606084860312156152d2576152d1614cb7565b5b60006152e086828701614d63565b93505060206152f186828701614d63565b925050604061530286828701614d63565b9150509250925092565b6000806040838503121561532357615322614cb7565b5b600061533185828601614d63565b925050602061534285828601614d63565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615382602083614c10565b915061538d8261534c565b602082019050919050565b600060208201905081810360008301526153b181615375565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153f282614bd1565b91506153fd83614bd1565b925082820261540b81614bd1565b91508282048414831517615422576154216153b8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061546382614bd1565b915061546e83614bd1565b92508261547e5761547d615429565b5b828204905092915050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3830302061646472657373657300000000000000000000000000000000000000602082015250565b60006154e5602d83614c10565b91506154f082615489565b604082019050919050565b60006020820190508181036000830152615514816154d8565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b6000615551601b83614c10565b915061555c8261551b565b602082019050919050565b6000602082019050818103600083015261558081615544565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006155c182614bd1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155f3576155f26153b8565b5b600182019050919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b600061565a602d83614c10565b9150615665826155fe565b604082019050919050565b600060208201905081810360008301526156898161564d565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b60006156ec602883614c10565b91506156f782615690565b604082019050919050565b6000602082019050818103600083015261571b816156df565b9050919050565b600061572d82614bd1565b915061573883614bd1565b92508282019050808211156157505761574f6153b8565b5b92915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b600061578c601883614c10565b915061579782615756565b602082019050919050565b600060208201905081810360008301526157bb8161577f565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061581e602383614c10565b9150615829826157c2565b604082019050919050565b6000602082019050818103600083015261584d81615811565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b600061588a601f83614c10565b915061589582615854565b602082019050919050565b600060208201905081810360008301526158b98161587d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061591c602683614c10565b9150615927826158c0565b604082019050919050565b6000602082019050818103600083015261594b8161590f565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000615988601483614c10565b915061599382615952565b602082019050919050565b600060208201905081810360008301526159b78161597b565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615a1a603e83614c10565b9150615a25826159be565b604082019050919050565b60006020820190508181036000830152615a4981615a0d565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000615aac602583614c10565b9150615ab782615a50565b604082019050919050565b60006020820190508181036000830152615adb81615a9f565b9050919050565b6000615aed82614bd1565b9150615af883614bd1565b9250828203905081811115615b1057615b0f6153b8565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000615b4c601183614c10565b9150615b5782615b16565b602082019050919050565b60006020820190508181036000830152615b7b81615b3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615bc081614d4c565b92915050565b600060208284031215615bdc57615bdb614cb7565b5b6000615bea84828501615bb1565b91505092915050565b6000819050919050565b6000615c18615c13615c0e84615bf3565b6150ed565b614bd1565b9050919050565b615c2881615bfd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c6381614d3a565b82525050565b6000615c758383615c5a565b60208301905092915050565b6000602082019050919050565b6000615c9982615c2e565b615ca38185615c39565b9350615cae83615c4a565b8060005b83811015615cdf578151615cc68882615c69565b9750615cd183615c81565b925050600181019050615cb2565b5085935050505092915050565b600060a082019050615d016000830188614bdb565b615d0e6020830187615c1f565b8181036040830152615d208186615c8e565b9050615d2f6060830185615083565b615d3c6080830184614bdb565b9695505050505050565b600081905092915050565b50565b6000615d61600083615d46565b9150615d6c82615d51565b600082019050919050565b6000615d8282615d54565b9150819050919050565b600060c082019050615da16000830189615083565b615dae6020830188614bdb565b615dbb6040830187615c1f565b615dc86060830186615c1f565b615dd56080830185615083565b615de260a0830184614bdb565b979650505050505050565b600081519050615dfc81614cc1565b92915050565b600080600060608486031215615e1b57615e1a614cb7565b5b6000615e2986828701615ded565b9350506020615e3a86828701615ded565b9250506040615e4b86828701615ded565b9150509250925092565b6000604082019050615e6a6000830185614bdb565b615e776020830184614bdb565b939250505056fea264697066735822122059aa52de9a936e9e374e7f5c52809c79b23ea9540c5aa6d0342bf576d4febcb964736f6c63430008130033

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.