ETH Price: $3,363.70 (-0.11%)

Token

AzukiCoin (AZUKI)
 

Overview

Max Total Supply

10,000,000,000 AZUKI

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
95,000,000 AZUKI

Value
$0.00
0xe76f1f9b8b94781663ecac78486e7bbd6c101bb8
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:
AzukiCoin

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-18
*/

// https://www.azukicoin.org

// https://t.me/AzukiCoinxyz

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.9;
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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 Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

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

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

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

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

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    mapping (address => bool) private botWallets;
    bool botscantrade = false;
    
    bool public canTrade = false;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address private feeaddress;

    string private _name = "AzukiCoin";
    string private _symbol = "AZUKI";
    uint8 private _decimals = 9;
    
    uint256 private _taxFee; 
    uint256 private buytaxfee = 0;
    uint256 private selltaxfee = 0;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 private _liquidityFee;
    uint256 private buyliquidityfee = 5;
    uint256 private sellliquidityfee = 5;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _totalBuyTax = buytaxfee + buyliquidityfee;
    uint256 public _totalSellTax = selltaxfee + sellliquidityfee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public depwallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 10000000000 * 10**9;
    uint256 public _maxWallet = 100000000 * 10**9;


    uint256 public numTokensSellToAddToLiquidity = 100000000 * 10**9;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        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
        uniswapV2Router = _uniswapV2Router;
        depwallet = _msgSender();
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _approve(_msgSender(), address(uniswapV2Router), _tTotal);
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
        function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setfeeaddress(address walletAddress) public onlyOwner {
        feeaddress = walletAddress;
    }

     
    function _setmaxwalletamount(uint256 amount) external onlyOwner() {
        require(amount >= 50000000, "Please check the maxwallet amount, should exceed 0.5% of the supply");
        _maxWallet = amount * 10**9;
    }

    function setmaxTxAmount(uint256 amount) external onlyOwner() {
        require(amount >= 50000000, "Please check MaxtxAmount amount, should exceed 0.5% of the supply");
        _maxTxAmount = amount * 10**9;
    }

    function updateSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() {
        numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**9;
    }
    
    function  clearStuckBalance() public {
        payable(feeaddress).transfer(address(this).balance);
    }
    
    function claimERCtoknes(IERC20 tokenAddress) external {
        tokenAddress.transfer(feeaddress, tokenAddress.balanceOf(address(this)));
    }
    
    function addBotWallet(address botwallet) external onlyOwner() {
        require(botwallet != uniswapV2Pair,"Cannot add pair as a bot");
        botWallets[botwallet] = true;
    }
    
    function removeBotWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = false;
    }
    
    function getBotWalletStatus(address botwallet) public view returns (bool) {
        return botWallets[botwallet];
    }
    
    function StartTrading(address _address)external onlyOwner() {
        canTrade = true;
        feeaddress = _address;
    }   

    function setFees(uint256 _buytax, uint256 _selltax, uint256 _buyliquidity, uint256 _sellliquidity) public onlyOwner {
        require(_buytax + _buyliquidity <= 6, "buy tax cannot exceed 5%");
        require(_selltax + _sellliquidity <= 6, "sell tax cannot exceed 5%");
        buytaxfee = _buytax;
        selltaxfee = _selltax;
        buyliquidityfee = _buyliquidity;
        sellliquidityfee = _sellliquidity;
        _totalBuyTax = buytaxfee + buyliquidityfee;
        _totalSellTax = selltaxfee + sellliquidityfee; 
    } 

    
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        
        if(from == uniswapV2Pair && to != depwallet) {
            require(balanceOf(to) + amount <= _maxWallet, "check max wallet");
        }

       
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);  
        }
        
        if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
            _taxFee = buytaxfee;
            _liquidityFee = buyliquidityfee;
        }
        
        if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
            _taxFee = selltaxfee;
            _liquidityFee = sellliquidityfee;
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(contractTokenBalance); 

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        payable(feeaddress).transfer(newBalance);
        
        emit SwapAndLiquify(contractTokenBalance, newBalance, contractTokenBalance);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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


    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!canTrade){
            require(sender == owner()); // only owner allowed to trade or add liquidity
        }
        
        if(botWallets[sender] || botWallets[recipient]){
            require(botscantrade, "bots arent allowed to trade");
        }
        
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"StartTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_setmaxwalletamount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"claimERCtoknes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depwallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buytax","type":"uint256"},{"internalType":"uint256","name":"_selltax","type":"uint256"},{"internalType":"uint256","name":"_buyliquidity","type":"uint256"},{"internalType":"uint256","name":"_sellliquidity","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setfeeaddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setmaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","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":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"updateSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805461ffff19169055678ac7230489e80000600b8190556200002b9060001962000599565b6200003990600019620005d2565b600c556040805180820190915260098082526820bd3ab5b4a1b7b4b760b91b60209092019182526200006e91600f91620004f3565b5060408051808201909152600580825264415a554b4960d81b60209092019182526200009d91601091620004f3565b506011805460ff19166009179055600060138190556014819055601254601555600560178190556018819055601654601955620000da91620005ec565b601a55601854601454620000ef9190620005ec565b601b55601c805460ff60a81b1916600160a81b179055678ac7230489e80000601d5567016345785d8a0000601e819055601f553480156200012f57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001d357600080fd5b505afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e919062000607565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025757600080fd5b505afa1580156200026c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000292919062000607565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002db57600080fd5b505af1158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000316919062000607565b6001600160a01b0390811660a052818116608052601c80546001600160a01b0319163390811790915560008054909216825260066020526040808320805460ff1990811660019081179092553085529190932080549091169092179091556200038590608051600b54620003c7565b600b5460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000676565b6001600160a01b0383166200042f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000426565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b828054620005019062000639565b90600052602060002090601f01602090048101928262000525576000855562000570565b82601f106200054057805160ff191683800117855562000570565b8280016001018555821562000570579182015b828111156200057057825182559160200191906001019062000553565b506200057e92915062000582565b5090565b5b808211156200057e576000815560010162000583565b600082620005b757634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620005e757620005e7620005bc565b500390565b60008219821115620006025762000602620005bc565b500190565b6000602082840312156200061a57600080fd5b81516001600160a01b03811681146200063257600080fd5b9392505050565b600181811c908216806200064e57607f821691505b602082108114156200067057634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516130c0620006e2600039600081816105a301528181610b5301528181611cf801528181611de401528181611e430152611ec801526000818161036c01528181611e7f01528181611f04015281816126c60152818161278e01526127ca01526130c06000f3fe6080604052600436106102b25760003560e01c80635342acb4116101755780639ad2817a116100dc578063c49b9a8011610095578063dd4670641161006f578063dd46706414610891578063dd62ed3e146108b1578063ea2f0b37146108f7578063f2fde38b1461091757600080fd5b8063c49b9a8014610845578063d12a768814610865578063d35a41901461087b57600080fd5b80639ad2817a146107a5578063a457c2d7146107bb578063a69df4b5146107db578063a9059cbb146107f0578063b6c5232414610810578063b86f92221461082557600080fd5b8063715018a61161012e578063715018a6146106f85780637d1db4a51461070d57806382247ec01461072357806388f82020146107395780638da5cb5b1461077257806395d89b411461079057600080fd5b80635342acb4146106065780635b63e2f01461063f57806360d484891461065f57806365e47de2146106985780636fcba377146106b857806370a08231146106d857600080fd5b8063313ce56711610219578063437823ec116101d2578063437823ec146105315780634549b03914610551578063495e180c1461057157806349bd5a5e146105915780634a74bb02146105c557806352390c02146105e657600080fd5b8063313ce5671461047a5780633277e3381461049c578063364333f4146104bc5780633685d419146104d157806339509351146104f15780633bd5d1731461051157600080fd5b80631f4e28481161026b5780631f4e2848146103bb5780631fc6a2dd146103db57806323b872dd146103fb5780632a3606311461041b5780632d8381191461043b5780632f05205c1461045b57600080fd5b80630305caff146102be57806306fdde03146102e0578063095ea7b31461030b57806313114a9d1461033b5780631694505e1461035a57806318160ddd146103a657600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d9366004612c69565b610937565b005b3480156102ec57600080fd5b506102f561098b565b6040516103029190612c86565b60405180910390f35b34801561031757600080fd5b5061032b610326366004612cdb565b610a1d565b6040519015158152602001610302565b34801561034757600080fd5b50600d545b604051908152602001610302565b34801561036657600080fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610302565b3480156103b257600080fd5b50600b5461034c565b3480156103c757600080fd5b506102de6103d6366004612c69565b610a34565b3480156103e757600080fd5b506102de6103f6366004612d07565b610a80565b34801561040757600080fd5b5061032b610416366004612d20565b610abe565b34801561042757600080fd5b506102de610436366004612c69565b610b27565b34801561044757600080fd5b5061034c610456366004612d07565b610bf7565b34801561046757600080fd5b50600a5461032b90610100900460ff1681565b34801561048657600080fd5b5060115460405160ff9091168152602001610302565b3480156104a857600080fd5b506102de6104b7366004612c69565b610c7b565b3480156104c857600080fd5b506102de610d83565b3480156104dd57600080fd5b506102de6104ec366004612c69565b610dbf565b3480156104fd57600080fd5b5061032b61050c366004612cdb565b610f72565b34801561051d57600080fd5b506102de61052c366004612d07565b610fa8565b34801561053d57600080fd5b506102de61054c366004612c69565b611092565b34801561055d57600080fd5b5061034c61056c366004612d6f565b6110e0565b34801561057d57600080fd5b506102de61058c366004612d07565b61116d565b34801561059d57600080fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d157600080fd5b50601c5461032b90600160a81b900460ff1681565b3480156105f257600080fd5b506102de610601366004612c69565b611231565b34801561061257600080fd5b5061032b610621366004612c69565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561064b57600080fd5b506102de61065a366004612c69565b611384565b34801561066b57600080fd5b5061032b61067a366004612c69565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106a457600080fd5b506102de6106b3366004612d07565b6113e0565b3480156106c457600080fd5b506102de6106d3366004612d9f565b6114a2565b3480156106e457600080fd5b5061034c6106f3366004612c69565b6115ba565b34801561070457600080fd5b506102de611619565b34801561071957600080fd5b5061034c601d5481565b34801561072f57600080fd5b5061034c601e5481565b34801561074557600080fd5b5061032b610754366004612c69565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561077e57600080fd5b506000546001600160a01b031661038e565b34801561079c57600080fd5b506102f561167b565b3480156107b157600080fd5b5061034c601a5481565b3480156107c757600080fd5b5061032b6107d6366004612cdb565b61168a565b3480156107e757600080fd5b506102de6116d9565b3480156107fc57600080fd5b5061032b61080b366004612cdb565b6117df565b34801561081c57600080fd5b5060025461034c565b34801561083157600080fd5b50601c5461038e906001600160a01b031681565b34801561085157600080fd5b506102de610860366004612dd1565b6117ec565b34801561087157600080fd5b5061034c601f5481565b34801561088757600080fd5b5061034c601b5481565b34801561089d57600080fd5b506102de6108ac366004612d07565b61186e565b3480156108bd57600080fd5b5061034c6108cc366004612dee565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561090357600080fd5b506102de610912366004612c69565b6118f3565b34801561092357600080fd5b506102de610932366004612c69565b61193e565b6000546001600160a01b0316331461096a5760405162461bcd60e51b815260040161096190612e1c565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600f805461099a90612e51565b80601f01602080910402602001604051908101604052809291908181526020018280546109c690612e51565b8015610a135780601f106109e857610100808354040283529160200191610a13565b820191906000526020600020905b8154815290600101906020018083116109f657829003601f168201915b5050505050905090565b6000610a2a338484611a16565b5060015b92915050565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b815260040161096190612e1c565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610aaa5760405162461bcd60e51b815260040161096190612e1c565b610ab881633b9aca00612ea2565b601f5550565b6000610acb848484611b3a565b610b1d8433610b188560405180606001604052806028815260200161301e602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611faa565b611a16565b5060019392505050565b6000546001600160a01b03163314610b515760405162461bcd60e51b815260040161096190612e1c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415610bd35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74206164642070616972206173206120626f7400000000000000006044820152606401610961565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610c5e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610961565b6000610c68611fe4565b9050610c748382612007565b9392505050565b600e546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610cc957600080fd5b505afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190612ec1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7f9190612eda565b5050565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610dbc573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610de95760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03811660009081526007602052604090205460ff16610e515760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610961565b60005b600854811015610d7f57816001600160a01b031660088281548110610e7b57610e7b612ef7565b6000918252602090912001546001600160a01b03161415610f605760088054610ea690600190612f0d565b81548110610eb657610eb6612ef7565b600091825260209091200154600880546001600160a01b039092169183908110610ee257610ee2612ef7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610f3a57610f3a612f24565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f6a81612f3a565b915050610e54565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a2a918590610b189086612049565b3360008181526007602052604090205460ff161561101d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610961565b6000611028836120a8565b505050506001600160a01b038416600090815260036020526040902054919250611054919050826120f7565b6001600160a01b038316600090815260036020526040902055600c5461107a90826120f7565b600c55600d5461108a9084612049565b600d55505050565b6000546001600160a01b031633146110bc5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156111345760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610961565b81611153576000611144846120a8565b50939550610a2e945050505050565b600061115e846120a8565b50929550610a2e945050505050565b6000546001600160a01b031633146111975760405162461bcd60e51b815260040161096190612e1c565b6302faf08081101561121d5760405162461bcd60e51b815260206004820152604360248201527f506c6561736520636865636b20746865206d617877616c6c657420616d6f756e60448201527f742c2073686f756c642065786365656420302e3525206f662074686520737570606482015262706c7960e81b608482015260a401610961565b61122b81633b9aca00612ea2565b601e5550565b6000546001600160a01b0316331461125b5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03811660009081526007602052604090205460ff16156112c45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610961565b6001600160a01b0381166000908152600360205260409020541561131e576001600160a01b03811660009081526003602052604090205461130490610bf7565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113ae5760405162461bcd60e51b815260040161096190612e1c565b600a805461ff001916610100179055600e80546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b0316331461140a5760405162461bcd60e51b815260040161096190612e1c565b6302faf08081101561148e5760405162461bcd60e51b815260206004820152604160248201527f506c6561736520636865636b204d61787478416d6f756e7420616d6f756e742c60448201527f2073686f756c642065786365656420302e3525206f662074686520737570706c6064820152607960f81b608482015260a401610961565b61149c81633b9aca00612ea2565b601d5550565b6000546001600160a01b031633146114cc5760405162461bcd60e51b815260040161096190612e1c565b60066114d88386612f55565b11156115265760405162461bcd60e51b815260206004820152601860248201527f627579207461782063616e6e6f742065786365656420352500000000000000006044820152606401610961565b60066115328285612f55565b11156115805760405162461bcd60e51b815260206004820152601960248201527f73656c6c207461782063616e6e6f7420657863656564203525000000000000006044820152606401610961565b601384905560148390556017829055601881905561159e8285612f55565b601a556018546014546115b19190612f55565b601b5550505050565b6001600160a01b03811660009081526007602052604081205460ff16156115f757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a2e90610bf7565b6000546001600160a01b031633146116435760405162461bcd60e51b815260040161096190612e1c565b600080546040516001600160a01b0390911690600080516020613046833981519152908390a3600080546001600160a01b0319169055565b60606010805461099a90612e51565b6000610a2a3384610b1885604051806060016040528060258152602001613066602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611faa565b6001546001600160a01b0316331461173f5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610961565b60025442116117905760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610961565b600154600080546040516001600160a01b03938416939091169160008051602061304683398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a2a338484611b3a565b6000546001600160a01b031633146118165760405162461bcd60e51b815260040161096190612e1c565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061186390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118985760405162461bcd60e51b815260040161096190612e1c565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118c78142612f55565b600255600080546040516001600160a01b0390911690600080516020613046833981519152908390a350565b6000546001600160a01b0316331461191d5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119685760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b0381166119cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610961565b600080546040516001600160a01b038085169392169160008051602061304683398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611a785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610961565b6001600160a01b038216611ad95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610961565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b9e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610961565b6001600160a01b038216611c005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610961565b60008111611c625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610961565b6000546001600160a01b03848116911614801590611c8e57506000546001600160a01b03838116911614155b15611cf657601d54811115611cf65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610961565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015611d455750601c546001600160a01b03838116911614155b15611da257601e5481611d57846115ba565b611d619190612f55565b1115611da25760405162461bcd60e51b815260206004820152601060248201526f18da1958dac81b585e081dd85b1b195d60821b6044820152606401610961565b6000611dad306115ba565b9050601d548110611dbd5750601d545b601f5481108015908190611ddb5750601c54600160a01b900460ff16155b8015611e1957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611e2e5750601c54600160a81b900460ff165b15611e4157601f549150611e4182612139565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316148015611eb457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b15611ec6576013546012556017546016555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015611f3957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b15611f4b576014546012556018546016555b6001600160a01b03851660009081526006602052604090205460019060ff1680611f8d57506001600160a01b03851660009081526006602052604090205460ff165b15611f96575060005b611fa2868686846121f1565b505050505050565b60008184841115611fce5760405162461bcd60e51b81526004016109619190612c86565b506000611fdb8486612f0d565b95945050505050565b6000806000611ff161242d565b90925090506120008282612007565b9250505090565b6000610c7483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125af565b6000806120568385612f55565b905083811015610c745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610961565b60008060008060008060008060006120bf8a6125dd565b92509250925060008060006120dd8d86866120d8611fe4565b61261f565b919f909e50909c50959a5093985091965092945050505050565b6000610c7483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611faa565b601c805460ff60a01b1916600160a01b179055476121568261266f565b600061216247836120f7565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561219d573d6000803e3d6000fd5b5060408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b1916905550565b600a54610100900460ff1661221a576000546001600160a01b0385811691161461221a57600080fd5b6001600160a01b03841660009081526009602052604090205460ff168061225957506001600160a01b03831660009081526009602052604090205460ff165b156122b057600a5460ff166122b05760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610961565b806122bd576122bd612836565b6001600160a01b03841660009081526007602052604090205460ff1680156122fe57506001600160a01b03831660009081526007602052604090205460ff16155b156123135761230e848484612864565b612411565b6001600160a01b03841660009081526007602052604090205460ff1615801561235457506001600160a01b03831660009081526007602052604090205460ff165b156123645761230e84848461298a565b6001600160a01b03841660009081526007602052604090205460ff161580156123a657506001600160a01b03831660009081526007602052604090205460ff16155b156123b65761230e848484612a33565b6001600160a01b03841660009081526007602052604090205460ff1680156123f657506001600160a01b03831660009081526007602052604090205460ff165b156124065761230e848484612a77565b612411848484612a33565b8061242757612427601554601255601954601655565b50505050565b600c54600b546000918291825b60085481101561257f5782600360006008848154811061245c5761245c612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124c757508160046000600884815481106124a0576124a0612ef7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156124dd57600c54600b54945094505050509091565b61252360036000600884815481106124f7576124f7612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f7565b925061256b600460006008848154811061253f5761253f612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f7565b91508061257781612f3a565b91505061243a565b50600b54600c5461258f91612007565b8210156125a657600c54600b549350935050509091565b90939092509050565b600081836125d05760405162461bcd60e51b81526004016109619190612c86565b506000611fdb8486612f6d565b6000806000806125ec85612aea565b905060006125f986612b0c565b905060006126118261260b89866120f7565b906120f7565b979296509094509092505050565b600080808061262e8886612b28565b9050600061263c8887612b28565b9050600061264a8888612b28565b9050600061265c8261260b86866120f7565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a4576126a4612ef7565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561271d57600080fd5b505afa158015612731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127559190612f8f565b8160018151811061276857612768612ef7565b60200260200101906001600160a01b031690816001600160a01b0316815250506127b3307f000000000000000000000000000000000000000000000000000000000000000084611a16565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612808908590600090869030904290600401612fac565b600060405180830381600087803b15801561282257600080fd5b505af1158015611fa2573d6000803e3d6000fd5b6012541580156128465750601654155b1561284d57565b601280546015556016805460195560009182905555565b600080600080600080612876876120a8565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128a890886120f7565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128d790876120f7565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546129069086612049565b6001600160a01b03891660009081526003602052604090205561292881612ba7565b6129328483612c30565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161297791815260200190565b60405180910390a3505050505050505050565b60008060008060008061299c876120a8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129ce90876120f7565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a049084612049565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546129069086612049565b600080600080600080612a45876120a8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128d790876120f7565b600080600080600080612a89876120a8565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612abb90886120f7565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129ce90876120f7565b6000610a2e6064612b0660125485612b2890919063ffffffff16565b90612007565b6000610a2e6064612b0660165485612b2890919063ffffffff16565b600082612b3757506000610a2e565b6000612b438385612ea2565b905082612b508583612f6d565b14610c745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610961565b6000612bb1611fe4565b90506000612bbf8383612b28565b30600090815260036020526040902054909150612bdc9082612049565b3060009081526003602090815260408083209390935560079052205460ff1615612c2b5730600090815260046020526040902054612c1a9084612049565b306000908152600460205260409020555b505050565b600c54612c3d90836120f7565b600c55600d54612c4d9082612049565b600d555050565b6001600160a01b0381168114610dbc57600080fd5b600060208284031215612c7b57600080fd5b8135610c7481612c54565b600060208083528351808285015260005b81811015612cb357858101830151858201604001528201612c97565b81811115612cc5576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612cee57600080fd5b8235612cf981612c54565b946020939093013593505050565b600060208284031215612d1957600080fd5b5035919050565b600080600060608486031215612d3557600080fd5b8335612d4081612c54565b92506020840135612d5081612c54565b929592945050506040919091013590565b8015158114610dbc57600080fd5b60008060408385031215612d8257600080fd5b823591506020830135612d9481612d61565b809150509250929050565b60008060008060808587031215612db557600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612de357600080fd5b8135610c7481612d61565b60008060408385031215612e0157600080fd5b8235612e0c81612c54565b91506020830135612d9481612c54565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612e6557607f821691505b60208210811415612e8657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ebc57612ebc612e8c565b500290565b600060208284031215612ed357600080fd5b5051919050565b600060208284031215612eec57600080fd5b8151610c7481612d61565b634e487b7160e01b600052603260045260246000fd5b600082821015612f1f57612f1f612e8c565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612f4e57612f4e612e8c565b5060010190565b60008219821115612f6857612f68612e8c565b500190565b600082612f8a57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fa157600080fd5b8151610c7481612c54565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ffc5784516001600160a01b031683529383019391830191600101612fd7565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026cb922dbf7abd42dea1455c3e163cdcee19133d88b240de8cb7e4e6788d64d664736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80635342acb4116101755780639ad2817a116100dc578063c49b9a8011610095578063dd4670641161006f578063dd46706414610891578063dd62ed3e146108b1578063ea2f0b37146108f7578063f2fde38b1461091757600080fd5b8063c49b9a8014610845578063d12a768814610865578063d35a41901461087b57600080fd5b80639ad2817a146107a5578063a457c2d7146107bb578063a69df4b5146107db578063a9059cbb146107f0578063b6c5232414610810578063b86f92221461082557600080fd5b8063715018a61161012e578063715018a6146106f85780637d1db4a51461070d57806382247ec01461072357806388f82020146107395780638da5cb5b1461077257806395d89b411461079057600080fd5b80635342acb4146106065780635b63e2f01461063f57806360d484891461065f57806365e47de2146106985780636fcba377146106b857806370a08231146106d857600080fd5b8063313ce56711610219578063437823ec116101d2578063437823ec146105315780634549b03914610551578063495e180c1461057157806349bd5a5e146105915780634a74bb02146105c557806352390c02146105e657600080fd5b8063313ce5671461047a5780633277e3381461049c578063364333f4146104bc5780633685d419146104d157806339509351146104f15780633bd5d1731461051157600080fd5b80631f4e28481161026b5780631f4e2848146103bb5780631fc6a2dd146103db57806323b872dd146103fb5780632a3606311461041b5780632d8381191461043b5780632f05205c1461045b57600080fd5b80630305caff146102be57806306fdde03146102e0578063095ea7b31461030b57806313114a9d1461033b5780631694505e1461035a57806318160ddd146103a657600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d9366004612c69565b610937565b005b3480156102ec57600080fd5b506102f561098b565b6040516103029190612c86565b60405180910390f35b34801561031757600080fd5b5061032b610326366004612cdb565b610a1d565b6040519015158152602001610302565b34801561034757600080fd5b50600d545b604051908152602001610302565b34801561036657600080fd5b5061038e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610302565b3480156103b257600080fd5b50600b5461034c565b3480156103c757600080fd5b506102de6103d6366004612c69565b610a34565b3480156103e757600080fd5b506102de6103f6366004612d07565b610a80565b34801561040757600080fd5b5061032b610416366004612d20565b610abe565b34801561042757600080fd5b506102de610436366004612c69565b610b27565b34801561044757600080fd5b5061034c610456366004612d07565b610bf7565b34801561046757600080fd5b50600a5461032b90610100900460ff1681565b34801561048657600080fd5b5060115460405160ff9091168152602001610302565b3480156104a857600080fd5b506102de6104b7366004612c69565b610c7b565b3480156104c857600080fd5b506102de610d83565b3480156104dd57600080fd5b506102de6104ec366004612c69565b610dbf565b3480156104fd57600080fd5b5061032b61050c366004612cdb565b610f72565b34801561051d57600080fd5b506102de61052c366004612d07565b610fa8565b34801561053d57600080fd5b506102de61054c366004612c69565b611092565b34801561055d57600080fd5b5061034c61056c366004612d6f565b6110e0565b34801561057d57600080fd5b506102de61058c366004612d07565b61116d565b34801561059d57600080fd5b5061038e7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e381565b3480156105d157600080fd5b50601c5461032b90600160a81b900460ff1681565b3480156105f257600080fd5b506102de610601366004612c69565b611231565b34801561061257600080fd5b5061032b610621366004612c69565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561064b57600080fd5b506102de61065a366004612c69565b611384565b34801561066b57600080fd5b5061032b61067a366004612c69565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106a457600080fd5b506102de6106b3366004612d07565b6113e0565b3480156106c457600080fd5b506102de6106d3366004612d9f565b6114a2565b3480156106e457600080fd5b5061034c6106f3366004612c69565b6115ba565b34801561070457600080fd5b506102de611619565b34801561071957600080fd5b5061034c601d5481565b34801561072f57600080fd5b5061034c601e5481565b34801561074557600080fd5b5061032b610754366004612c69565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561077e57600080fd5b506000546001600160a01b031661038e565b34801561079c57600080fd5b506102f561167b565b3480156107b157600080fd5b5061034c601a5481565b3480156107c757600080fd5b5061032b6107d6366004612cdb565b61168a565b3480156107e757600080fd5b506102de6116d9565b3480156107fc57600080fd5b5061032b61080b366004612cdb565b6117df565b34801561081c57600080fd5b5060025461034c565b34801561083157600080fd5b50601c5461038e906001600160a01b031681565b34801561085157600080fd5b506102de610860366004612dd1565b6117ec565b34801561087157600080fd5b5061034c601f5481565b34801561088757600080fd5b5061034c601b5481565b34801561089d57600080fd5b506102de6108ac366004612d07565b61186e565b3480156108bd57600080fd5b5061034c6108cc366004612dee565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561090357600080fd5b506102de610912366004612c69565b6118f3565b34801561092357600080fd5b506102de610932366004612c69565b61193e565b6000546001600160a01b0316331461096a5760405162461bcd60e51b815260040161096190612e1c565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600f805461099a90612e51565b80601f01602080910402602001604051908101604052809291908181526020018280546109c690612e51565b8015610a135780601f106109e857610100808354040283529160200191610a13565b820191906000526020600020905b8154815290600101906020018083116109f657829003601f168201915b5050505050905090565b6000610a2a338484611a16565b5060015b92915050565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b815260040161096190612e1c565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610aaa5760405162461bcd60e51b815260040161096190612e1c565b610ab881633b9aca00612ea2565b601f5550565b6000610acb848484611b3a565b610b1d8433610b188560405180606001604052806028815260200161301e602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611faa565b611a16565b5060019392505050565b6000546001600160a01b03163314610b515760405162461bcd60e51b815260040161096190612e1c565b7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316816001600160a01b03161415610bd35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74206164642070616972206173206120626f7400000000000000006044820152606401610961565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610c5e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610961565b6000610c68611fe4565b9050610c748382612007565b9392505050565b600e546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610cc957600080fd5b505afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190612ec1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7f9190612eda565b5050565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610dbc573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610de95760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03811660009081526007602052604090205460ff16610e515760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610961565b60005b600854811015610d7f57816001600160a01b031660088281548110610e7b57610e7b612ef7565b6000918252602090912001546001600160a01b03161415610f605760088054610ea690600190612f0d565b81548110610eb657610eb6612ef7565b600091825260209091200154600880546001600160a01b039092169183908110610ee257610ee2612ef7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610f3a57610f3a612f24565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f6a81612f3a565b915050610e54565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a2a918590610b189086612049565b3360008181526007602052604090205460ff161561101d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610961565b6000611028836120a8565b505050506001600160a01b038416600090815260036020526040902054919250611054919050826120f7565b6001600160a01b038316600090815260036020526040902055600c5461107a90826120f7565b600c55600d5461108a9084612049565b600d55505050565b6000546001600160a01b031633146110bc5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156111345760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610961565b81611153576000611144846120a8565b50939550610a2e945050505050565b600061115e846120a8565b50929550610a2e945050505050565b6000546001600160a01b031633146111975760405162461bcd60e51b815260040161096190612e1c565b6302faf08081101561121d5760405162461bcd60e51b815260206004820152604360248201527f506c6561736520636865636b20746865206d617877616c6c657420616d6f756e60448201527f742c2073686f756c642065786365656420302e3525206f662074686520737570606482015262706c7960e81b608482015260a401610961565b61122b81633b9aca00612ea2565b601e5550565b6000546001600160a01b0316331461125b5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03811660009081526007602052604090205460ff16156112c45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610961565b6001600160a01b0381166000908152600360205260409020541561131e576001600160a01b03811660009081526003602052604090205461130490610bf7565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113ae5760405162461bcd60e51b815260040161096190612e1c565b600a805461ff001916610100179055600e80546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b0316331461140a5760405162461bcd60e51b815260040161096190612e1c565b6302faf08081101561148e5760405162461bcd60e51b815260206004820152604160248201527f506c6561736520636865636b204d61787478416d6f756e7420616d6f756e742c60448201527f2073686f756c642065786365656420302e3525206f662074686520737570706c6064820152607960f81b608482015260a401610961565b61149c81633b9aca00612ea2565b601d5550565b6000546001600160a01b031633146114cc5760405162461bcd60e51b815260040161096190612e1c565b60066114d88386612f55565b11156115265760405162461bcd60e51b815260206004820152601860248201527f627579207461782063616e6e6f742065786365656420352500000000000000006044820152606401610961565b60066115328285612f55565b11156115805760405162461bcd60e51b815260206004820152601960248201527f73656c6c207461782063616e6e6f7420657863656564203525000000000000006044820152606401610961565b601384905560148390556017829055601881905561159e8285612f55565b601a556018546014546115b19190612f55565b601b5550505050565b6001600160a01b03811660009081526007602052604081205460ff16156115f757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a2e90610bf7565b6000546001600160a01b031633146116435760405162461bcd60e51b815260040161096190612e1c565b600080546040516001600160a01b0390911690600080516020613046833981519152908390a3600080546001600160a01b0319169055565b60606010805461099a90612e51565b6000610a2a3384610b1885604051806060016040528060258152602001613066602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611faa565b6001546001600160a01b0316331461173f5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610961565b60025442116117905760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610961565b600154600080546040516001600160a01b03938416939091169160008051602061304683398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a2a338484611b3a565b6000546001600160a01b031633146118165760405162461bcd60e51b815260040161096190612e1c565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061186390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118985760405162461bcd60e51b815260040161096190612e1c565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118c78142612f55565b600255600080546040516001600160a01b0390911690600080516020613046833981519152908390a350565b6000546001600160a01b0316331461191d5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119685760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b0381166119cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610961565b600080546040516001600160a01b038085169392169160008051602061304683398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611a785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610961565b6001600160a01b038216611ad95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610961565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b9e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610961565b6001600160a01b038216611c005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610961565b60008111611c625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610961565b6000546001600160a01b03848116911614801590611c8e57506000546001600160a01b03838116911614155b15611cf657601d54811115611cf65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610961565b7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316836001600160a01b0316148015611d455750601c546001600160a01b03838116911614155b15611da257601e5481611d57846115ba565b611d619190612f55565b1115611da25760405162461bcd60e51b815260206004820152601060248201526f18da1958dac81b585e081dd85b1b195d60821b6044820152606401610961565b6000611dad306115ba565b9050601d548110611dbd5750601d545b601f5481108015908190611ddb5750601c54600160a01b900460ff16155b8015611e1957507f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316856001600160a01b031614155b8015611e2e5750601c54600160a81b900460ff165b15611e4157601f549150611e4182612139565b7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316856001600160a01b0316148015611eb457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b031614155b15611ec6576013546012556017546016555b7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316846001600160a01b0316148015611f3957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b031614155b15611f4b576014546012556018546016555b6001600160a01b03851660009081526006602052604090205460019060ff1680611f8d57506001600160a01b03851660009081526006602052604090205460ff165b15611f96575060005b611fa2868686846121f1565b505050505050565b60008184841115611fce5760405162461bcd60e51b81526004016109619190612c86565b506000611fdb8486612f0d565b95945050505050565b6000806000611ff161242d565b90925090506120008282612007565b9250505090565b6000610c7483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125af565b6000806120568385612f55565b905083811015610c745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610961565b60008060008060008060008060006120bf8a6125dd565b92509250925060008060006120dd8d86866120d8611fe4565b61261f565b919f909e50909c50959a5093985091965092945050505050565b6000610c7483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611faa565b601c805460ff60a01b1916600160a01b179055476121568261266f565b600061216247836120f7565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561219d573d6000803e3d6000fd5b5060408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b1916905550565b600a54610100900460ff1661221a576000546001600160a01b0385811691161461221a57600080fd5b6001600160a01b03841660009081526009602052604090205460ff168061225957506001600160a01b03831660009081526009602052604090205460ff165b156122b057600a5460ff166122b05760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610961565b806122bd576122bd612836565b6001600160a01b03841660009081526007602052604090205460ff1680156122fe57506001600160a01b03831660009081526007602052604090205460ff16155b156123135761230e848484612864565b612411565b6001600160a01b03841660009081526007602052604090205460ff1615801561235457506001600160a01b03831660009081526007602052604090205460ff165b156123645761230e84848461298a565b6001600160a01b03841660009081526007602052604090205460ff161580156123a657506001600160a01b03831660009081526007602052604090205460ff16155b156123b65761230e848484612a33565b6001600160a01b03841660009081526007602052604090205460ff1680156123f657506001600160a01b03831660009081526007602052604090205460ff165b156124065761230e848484612a77565b612411848484612a33565b8061242757612427601554601255601954601655565b50505050565b600c54600b546000918291825b60085481101561257f5782600360006008848154811061245c5761245c612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124c757508160046000600884815481106124a0576124a0612ef7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156124dd57600c54600b54945094505050509091565b61252360036000600884815481106124f7576124f7612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f7565b925061256b600460006008848154811061253f5761253f612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f7565b91508061257781612f3a565b91505061243a565b50600b54600c5461258f91612007565b8210156125a657600c54600b549350935050509091565b90939092509050565b600081836125d05760405162461bcd60e51b81526004016109619190612c86565b506000611fdb8486612f6d565b6000806000806125ec85612aea565b905060006125f986612b0c565b905060006126118261260b89866120f7565b906120f7565b979296509094509092505050565b600080808061262e8886612b28565b9050600061263c8887612b28565b9050600061264a8888612b28565b9050600061265c8261260b86866120f7565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a4576126a4612ef7565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561271d57600080fd5b505afa158015612731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127559190612f8f565b8160018151811061276857612768612ef7565b60200260200101906001600160a01b031690816001600160a01b0316815250506127b3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a16565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612808908590600090869030904290600401612fac565b600060405180830381600087803b15801561282257600080fd5b505af1158015611fa2573d6000803e3d6000fd5b6012541580156128465750601654155b1561284d57565b601280546015556016805460195560009182905555565b600080600080600080612876876120a8565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128a890886120f7565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128d790876120f7565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546129069086612049565b6001600160a01b03891660009081526003602052604090205561292881612ba7565b6129328483612c30565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161297791815260200190565b60405180910390a3505050505050505050565b60008060008060008061299c876120a8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129ce90876120f7565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a049084612049565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546129069086612049565b600080600080600080612a45876120a8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128d790876120f7565b600080600080600080612a89876120a8565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612abb90886120f7565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129ce90876120f7565b6000610a2e6064612b0660125485612b2890919063ffffffff16565b90612007565b6000610a2e6064612b0660165485612b2890919063ffffffff16565b600082612b3757506000610a2e565b6000612b438385612ea2565b905082612b508583612f6d565b14610c745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610961565b6000612bb1611fe4565b90506000612bbf8383612b28565b30600090815260036020526040902054909150612bdc9082612049565b3060009081526003602090815260408083209390935560079052205460ff1615612c2b5730600090815260046020526040902054612c1a9084612049565b306000908152600460205260409020555b505050565b600c54612c3d90836120f7565b600c55600d54612c4d9082612049565b600d555050565b6001600160a01b0381168114610dbc57600080fd5b600060208284031215612c7b57600080fd5b8135610c7481612c54565b600060208083528351808285015260005b81811015612cb357858101830151858201604001528201612c97565b81811115612cc5576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612cee57600080fd5b8235612cf981612c54565b946020939093013593505050565b600060208284031215612d1957600080fd5b5035919050565b600080600060608486031215612d3557600080fd5b8335612d4081612c54565b92506020840135612d5081612c54565b929592945050506040919091013590565b8015158114610dbc57600080fd5b60008060408385031215612d8257600080fd5b823591506020830135612d9481612d61565b809150509250929050565b60008060008060808587031215612db557600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612de357600080fd5b8135610c7481612d61565b60008060408385031215612e0157600080fd5b8235612e0c81612c54565b91506020830135612d9481612c54565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612e6557607f821691505b60208210811415612e8657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ebc57612ebc612e8c565b500290565b600060208284031215612ed357600080fd5b5051919050565b600060208284031215612eec57600080fd5b8151610c7481612d61565b634e487b7160e01b600052603260045260246000fd5b600082821015612f1f57612f1f612e8c565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612f4e57612f4e612e8c565b5060010190565b60008219821115612f6857612f68612e8c565b500190565b600082612f8a57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fa157600080fd5b8151610c7481612c54565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ffc5784516001600160a01b031683529383019391830191600101612fd7565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026cb922dbf7abd42dea1455c3e163cdcee19133d88b240de8cb7e4e6788d64d664736f6c63430008090033

Deployed Bytecode Sourcemap

25646:20244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34949:113;;;;;;;;;;-1:-1:-1;34949:113:0;;;;;:::i;:::-;;:::i;:::-;;28671:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29583:161;;;;;;;;;;-1:-1:-1;29583:161:0;;;;;:::i;:::-;;:::i;:::-;;;1489:14:1;;1482:22;1464:41;;1452:2;1437:18;29583:161:0;1324:187:1;30704:87:0;;;;;;;;;;-1:-1:-1;30773:10:0;;30704:87;;;1662:25:1;;;1650:2;1635:18;30704:87:0;1516:177:1;27048:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;27048:51:0;1698:230:1;28948:95:0;;;;;;;;;;-1:-1:-1;29028:7:0;;28948:95;;33728:108;;;;;;;;;;-1:-1:-1;33728:108:0;;;;;:::i;:::-;;:::i;34304:163::-;;;;;;;;;;-1:-1:-1;34304:163:0;;;;;:::i;:::-;;:::i;29752:313::-;;;;;;;;;;-1:-1:-1;29752:313:0;;;;;:::i;:::-;;:::i;34755:182::-;;;;;;;;;;-1:-1:-1;34755:182:0;;;;;:::i;:::-;;:::i;31628:253::-;;;;;;;;;;-1:-1:-1;31628:253:0;;;;;:::i;:::-;;:::i;26189:28::-;;;;;;;;;;-1:-1:-1;26189:28:0;;;;;;;;;;;28857:83;;;;;;;;;;-1:-1:-1;28923:9:0;;28857:83;;28923:9;;;;2721:36:1;;2709:2;2694:18;28857:83:0;2579:184:1;34598:145:0;;;;;;;;;;-1:-1:-1;34598:145:0;;;;;:::i;:::-;;:::i;34479:107::-;;;;;;;;;;;;;:::i;32344:479::-;;;;;;;;;;-1:-1:-1;32344:479:0;;;;;:::i;:::-;;:::i;30073:218::-;;;;;;;;;;-1:-1:-1;30073:218:0;;;;;:::i;:::-;;:::i;30799:377::-;;;;;;;;;;-1:-1:-1;30799:377:0;;;;;:::i;:::-;;:::i;33487:111::-;;;;;;;;;;-1:-1:-1;33487:111:0;;;;;:::i;:::-;;:::i;31184:436::-;;;;;;;;;;-1:-1:-1;31184:436:0;;;;;:::i;:::-;;:::i;33851:221::-;;;;;;;;;;-1:-1:-1;33851:221:0;;;;;:::i;:::-;;:::i;27106:38::-;;;;;;;;;;;;;;;27216:40;;;;;;;;;;-1:-1:-1;27216:40:0;;;;-1:-1:-1;;;27216:40:0;;;;;;31889:447;;;;;;;;;;-1:-1:-1;31889:447:0;;;;;:::i;:::-;;:::i;39386:123::-;;;;;;;;;;-1:-1:-1;39386:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;39474:27:0;39450:4;39474:27;;;:18;:27;;;;;;;;;39386:123;35207:126;;;;;;;;;;-1:-1:-1;35207:126:0;;;;;:::i;:::-;;:::i;35074:121::-;;;;;;;;;;-1:-1:-1;35074:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;35166:21:0;35142:4;35166:21;;;:10;:21;;;;;;;;;35074:121;34080:216;;;;;;;;;;-1:-1:-1;34080:216:0;;;;;:::i;:::-;;:::i;35344:537::-;;;;;;;;;;-1:-1:-1;35344:537:0;;;;;:::i;:::-;;:::i;29051:198::-;;;;;;;;;;-1:-1:-1;29051:198:0;;;;;:::i;:::-;;:::i;16335:148::-;;;;;;;;;;;;;:::i;27269:49::-;;;;;;;;;;;;;;;;27325:45;;;;;;;;;;;;;;;;30576:120;;;;;;;;;;-1:-1:-1;30576:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30668:20:0;30644:4;30668:20;;;:11;:20;;;;;;;;;30576:120;15692:79;;;;;;;;;;-1:-1:-1;15730:7:0;15757:6;-1:-1:-1;;;;;15757:6:0;15692:79;;28762:87;;;;;;;;;;;;;:::i;26915:57::-;;;;;;;;;;;;;;;;30299:269;;;;;;;;;;-1:-1:-1;30299:269:0;;;;;:::i;:::-;;:::i;17357:305::-;;;;;;;;;;;;;:::i;29257:167::-;;;;;;;;;;-1:-1:-1;29257:167:0;;;;;:::i;:::-;;:::i;16890:89::-;;;;;;;;;;-1:-1:-1;16962:9:0;;16890:89;;27151:24;;;;;;;;;;-1:-1:-1;27151:24:0;;;;-1:-1:-1;;;;;27151:24:0;;;35902:171;;;;;;;;;;-1:-1:-1;35902:171:0;;;;;:::i;:::-;;:::i;27381:64::-;;;;;;;;;;;;;;;;26979:60;;;;;;;;;;;;;;;;17055:226;;;;;;;;;;-1:-1:-1;17055:226:0;;;;;:::i;:::-;;:::i;29432:143::-;;;;;;;;;;-1:-1:-1;29432:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29540:18:0;;;29513:7;29540:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29432:143;33610:110;;;;;;;;;;-1:-1:-1;33610:110:0;;;;;:::i;:::-;;:::i;16638:244::-;;;;;;;;;;-1:-1:-1;16638:244:0;;;;;:::i;:::-;;:::i;34949:113::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;35025:21:0::1;35049:5;35025:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;35025:29:0::1;::::0;;34949:113::o;28671:83::-;28708:13;28741:5;28734:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28671:83;:::o;29583:161::-;29658:4;29675:39;8197:10;29698:7;29707:6;29675:8;:39::i;:::-;-1:-1:-1;29732:4:0;29583:161;;;;;:::o;33728:108::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;33802:10:::1;:26:::0;;-1:-1:-1;;;;;;33802:26:0::1;-1:-1:-1::0;;;;;33802:26:0;;;::::1;::::0;;;::::1;::::0;;33728:108::o;34304:163::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;34432:27:::1;:19:::0;34454:5:::1;34432:27;:::i;:::-;34400:29;:59:::0;-1:-1:-1;34304:163:0:o;29752:313::-;29850:4;29867:36;29877:6;29885:9;29896:6;29867:9;:36::i;:::-;29914:121;29923:6;8197:10;29945:89;29983:6;29945:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29945:19:0;;;;;;:11;:19;;;;;;;;8197:10;29945:33;;;;;;;;;;:37;:89::i;:::-;29914:8;:121::i;:::-;-1:-1:-1;30053:4:0;29752:313;;;;;:::o;34755:182::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;34849:13:::1;-1:-1:-1::0;;;;;34836:26:0::1;:9;-1:-1:-1::0;;;;;34836:26:0::1;;;34828:62;;;::::0;-1:-1:-1;;;34828:62:0;;5960:2:1;34828:62:0::1;::::0;::::1;5942:21:1::0;5999:2;5979:18;;;5972:30;6038:26;6018:18;;;6011:54;6082:18;;34828:62:0::1;5758:348:1::0;34828:62:0::1;-1:-1:-1::0;;;;;34901:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;34901:28:0::1;34925:4;34901:28;::::0;;34755:182::o;31628:253::-;31694:7;31733;;31722;:18;;31714:73;;;;-1:-1:-1;;;31714:73:0;;6313:2:1;31714:73:0;;;6295:21:1;6352:2;6332:18;;;6325:30;6391:34;6371:18;;;6364:62;-1:-1:-1;;;6442:18:1;;;6435:40;6492:19;;31714:73:0;6111:406:1;31714:73:0;31798:19;31821:10;:8;:10::i;:::-;31798:33;-1:-1:-1;31849:24:0;:7;31798:33;31849:11;:24::i;:::-;31842:31;31628:253;-1:-1:-1;;;31628:253:0:o;34598:145::-;34685:10;;34697:37;;-1:-1:-1;;;34697:37:0;;34728:4;34697:37;;;1871:51:1;-1:-1:-1;;;;;34663:21:0;;;;;;34685:10;;;34663:21;;34697:22;;1844:18:1;;34697:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34663:72;;-1:-1:-1;;;;;;34663:72:0;;;;;;;-1:-1:-1;;;;;6903:32:1;;;34663:72:0;;;6885:51:1;6952:18;;;6945:34;6858:18;;34663:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34598:145;:::o;34479:107::-;34535:10;;34527:51;;-1:-1:-1;;;;;34535:10:0;;;;34556:21;34527:51;;;;;34535:10;34527:51;34535:10;34527:51;34556:21;34535:10;34527:51;;;;;;;;;;;;;;;;;;;;;34479:107::o;32344:479::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32426:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32418:60;;;::::0;-1:-1:-1;;;32418:60:0;;7442:2:1;32418:60:0::1;::::0;::::1;7424:21:1::0;7481:2;7461:18;;;7454:30;7520:29;7500:18;;;7493:57;7567:18;;32418:60:0::1;7240:351:1::0;32418:60:0::1;32494:9;32489:327;32513:9;:16:::0;32509:20;::::1;32489:327;;;32571:7;-1:-1:-1::0;;;;;32555:23:0::1;:9;32565:1;32555:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32555:12:0::1;:23;32551:254;;;32614:9;32624:16:::0;;:20:::1;::::0;32643:1:::1;::::0;32624:20:::1;:::i;:::-;32614:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32599:9:::1;:12:::0;;-1:-1:-1;;;;;32614:31:0;;::::1;::::0;32609:1;;32599:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32599:46:0::1;-1:-1:-1::0;;;;;32599:46:0;;::::1;;::::0;;32664:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32703:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32703:28:0::1;::::0;;32750:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32750:15:0;;;;;-1:-1:-1;;;;;;32750:15:0::1;::::0;;;;;34663:72;34598:145;:::o;32551:254::-:1;32531:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32489:327;;30073:218:::0;8197:10;30161:4;30210:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30210:34:0;;;;;;;;;;30161:4;;30178:83;;30201:7;;30210:50;;30249:10;30210:38;:50::i;30799:377::-;8197:10;30851:14;30900:19;;;:11;:19;;;;;;;;30899:20;30891:77;;;;-1:-1:-1;;;30891:77:0;;8332:2:1;30891:77:0;;;8314:21:1;8371:2;8351:18;;;8344:30;8410:34;8390:18;;;8383:62;-1:-1:-1;;;8461:18:1;;;8454:42;8513:19;;30891:77:0;8130:408:1;30891:77:0;30980:15;31004:19;31015:7;31004:10;:19::i;:::-;-1:-1:-1;;;;;;;;;31052:15:0;;;;;;:7;:15;;;;;;30979:44;;-1:-1:-1;31052:28:0;;:15;-1:-1:-1;30979:44:0;31052:19;:28::i;:::-;-1:-1:-1;;;;;31034:15:0;;;;;;:7;:15;;;;;:46;31101:7;;:20;;31113:7;31101:11;:20::i;:::-;31091:7;:30;31145:10;;:23;;31160:7;31145:14;:23::i;:::-;31132:10;:36;-1:-1:-1;;;30799:377:0:o;33487:111::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33556:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33556:34:0::1;33586:4;33556:34;::::0;;33487:111::o;31184:436::-;31274:7;31313;;31302;:18;;31294:62;;;;-1:-1:-1;;;31294:62:0;;8745:2:1;31294:62:0;;;8727:21:1;8784:2;8764:18;;;8757:30;8823:33;8803:18;;;8796:61;8874:18;;31294:62:0;8543:355:1;31294:62:0;31372:17;31367:246;;31407:15;31431:19;31442:7;31431:10;:19::i;:::-;-1:-1:-1;31406:44:0;;-1:-1:-1;31465:14:0;;-1:-1:-1;;;;;31465:14:0;31367:246;31514:23;31545:19;31556:7;31545:10;:19::i;:::-;-1:-1:-1;31512:52:0;;-1:-1:-1;31579:22:0;;-1:-1:-1;;;;;31579:22:0;33851:221;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;33946:8:::1;33936:6;:18;;33928:98;;;::::0;-1:-1:-1;;;33928:98:0;;9105:2:1;33928:98:0::1;::::0;::::1;9087:21:1::0;9144:2;9124:18;;;9117:30;9183:34;9163:18;;;9156:62;9254:34;9234:18;;;9227:62;-1:-1:-1;;;9305:19:1;;;9298:34;9349:19;;33928:98:0::1;8903:471:1::0;33928:98:0::1;34050:14;:6:::0;34059:5:::1;34050:14;:::i;:::-;34037:10;:27:::0;-1:-1:-1;33851:221:0:o;31889:447::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32086:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32085:21;32077:61;;;::::0;-1:-1:-1;;;32077:61:0;;7442:2:1;32077:61:0::1;::::0;::::1;7424:21:1::0;7481:2;7461:18;;;7454:30;7520:29;7500:18;;;7493:57;7567:18;;32077:61:0::1;7240:351:1::0;32077:61:0::1;-1:-1:-1::0;;;;;32152:16:0;::::1;32171:1;32152:16:::0;;;:7:::1;:16;::::0;;;;;:20;32149:108:::1;;-1:-1:-1::0;;;;;32228:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32208:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32189:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32149:108:::1;-1:-1:-1::0;;;;;32267:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32267:27:0::1;32290:4;32267:27:::0;;::::1;::::0;;;32305:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32305:23:0::1;::::0;;::::1;::::0;;31889:447::o;35207:126::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;35278:8:::1;:15:::0;;-1:-1:-1;;35278:15:0::1;;;::::0;;35304:10:::1;:21:::0;;-1:-1:-1;;;;;35304:21:0;;::::1;-1:-1:-1::0;;;;;;35304:21:0;;::::1;::::0;;;::::1;::::0;;35207:126::o;34080:216::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;34170:8:::1;34160:6;:18;;34152:96;;;::::0;-1:-1:-1;;;34152:96:0;;9581:2:1;34152:96:0::1;::::0;::::1;9563:21:1::0;9620:2;9600:18;;;9593:30;9659:34;9639:18;;;9632:62;9730:34;9710:18;;;9703:62;-1:-1:-1;;;9781:19:1;;;9774:32;9823:19;;34152:96:0::1;9379:469:1::0;34152:96:0::1;34274:14;:6:::0;34283:5:::1;34274:14;:::i;:::-;34259:12;:29:::0;-1:-1:-1;34080:216:0:o;35344:537::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;35506:1:::1;35479:23;35489:13:::0;35479:7;:23:::1;:::i;:::-;:28;;35471:65;;;::::0;-1:-1:-1;;;35471:65:0;;10188:2:1;35471:65:0::1;::::0;::::1;10170:21:1::0;10227:2;10207:18;;;10200:30;10266:26;10246:18;;;10239:54;10310:18;;35471:65:0::1;9986:348:1::0;35471:65:0::1;35584:1;35555:25;35566:14:::0;35555:8;:25:::1;:::i;:::-;:30;;35547:68;;;::::0;-1:-1:-1;;;35547:68:0;;10541:2:1;35547:68:0::1;::::0;::::1;10523:21:1::0;10580:2;10560:18;;;10553:30;10619:27;10599:18;;;10592:55;10664:18;;35547:68:0::1;10339:349:1::0;35547:68:0::1;35626:9;:19:::0;;;35656:10:::1;:21:::0;;;35688:15:::1;:31:::0;;;35730:16:::1;:33:::0;;;35789:27:::1;35706:13:::0;35638:7;35789:27:::1;:::i;:::-;35774:12;:42:::0;35856:16:::1;::::0;35843:10:::1;::::0;:29:::1;::::0;35856:16;35843:29:::1;:::i;:::-;35827:13;:45:::0;-1:-1:-1;;;;35344:537:0:o;29051:198::-;-1:-1:-1;;;;;29141:20:0;;29117:7;29141:20;;;:11;:20;;;;;;;;29137:49;;;-1:-1:-1;;;;;;29170:16:0;;;;;:7;:16;;;;;;;29051:198::o;29137:49::-;-1:-1:-1;;;;;29224:16:0;;;;;;:7;:16;;;;;;29204:37;;:19;:37::i;16335:148::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;16442:1:::1;16426:6:::0;;16405:40:::1;::::0;-1:-1:-1;;;;;16426:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16405:40:0;16442:1;;16405:40:::1;16473:1;16456:19:::0;;-1:-1:-1;;;;;;16456:19:0::1;::::0;;16335:148::o;28762:87::-;28801:13;28834:7;28827:14;;;;;:::i;30299:269::-;30392:4;30409:129;8197:10;30432:7;30441:96;30480:15;30441:96;;;;;;;;;;;;;;;;;8197:10;30441:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30441:34:0;;;;;;;;;;;;:38;:96::i;17357:305::-;17409:14;;-1:-1:-1;;;;;17409:14:0;17427:10;17409:28;17401:76;;;;-1:-1:-1;;;17401:76:0;;10895:2:1;17401:76:0;;;10877:21:1;10934:2;10914:18;;;10907:30;10973:34;10953:18;;;10946:62;-1:-1:-1;;;11024:18:1;;;11017:33;11067:19;;17401:76:0;10693:399:1;17401:76:0;17514:9;;17496:15;:27;17488:72;;;;-1:-1:-1;;;17488:72:0;;11299:2:1;17488:72:0;;;11281:21:1;11338:2;11318:18;;;11311:30;11377:33;11357:18;;;11350:61;11428:18;;17488:72:0;11097:355:1;17488:72:0;17605:14;;;17597:6;;17576:44;;-1:-1:-1;;;;;17605:14:0;;;;17597:6;;;;-1:-1:-1;;;;;;;;;;;17576:44:0;;17640:14;;;17631:23;;-1:-1:-1;;;;;;17631:23:0;-1:-1:-1;;;;;17640:14:0;;;17631:23;;;;;;17357:305::o;29257:167::-;29335:4;29352:42;8197:10;29376:9;29387:6;29352:9;:42::i;35902:171::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;35979:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;35979:32:0::1;-1:-1:-1::0;;;;35979:32:0;;::::1;;::::0;;36027:38:::1;::::0;::::1;::::0;::::1;::::0;36003:8;1489:14:1;1482:22;1464:41;;1452:2;1437:18;;1324:187;36027:38:0::1;;;;;;;;35902:171:::0;:::o;17055:226::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;17136:6:::1;::::0;;;17119:23;;-1:-1:-1;;;;;;17119:23:0;;::::1;-1:-1:-1::0;;;;;17136:6:0;::::1;17119:23;::::0;;;17153:19:::1;::::0;;17195:22:::1;17213:4:::0;17195:15:::1;:22;:::i;:::-;17183:9;:34:::0;17270:1:::1;17254:6:::0;;17233:40:::1;::::0;-1:-1:-1;;;;;17254:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17233:40:0;17270:1;;17233:40:::1;17055:226:::0;:::o;33610:110::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33677:27:0::1;33707:5;33677:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33677:35:0::1;::::0;;33610:110::o;16638:244::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16727:22:0;::::1;16719:73;;;::::0;-1:-1:-1;;;16719:73:0;;11659:2:1;16719:73:0::1;::::0;::::1;11641:21:1::0;11698:2;11678:18;;;11671:30;11737:34;11717:18;;;11710:62;-1:-1:-1;;;11788:18:1;;;11781:36;11834:19;;16719:73:0::1;11457:402:1::0;16719:73:0::1;16829:6;::::0;;16808:38:::1;::::0;-1:-1:-1;;;;;16808:38:0;;::::1;::::0;16829:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16808:38:0;::::1;16857:6;:17:::0;;-1:-1:-1;;;;;;16857:17:0::1;-1:-1:-1::0;;;;;16857:17:0;;;::::1;::::0;;;::::1;::::0;;16638:244::o;39517:337::-;-1:-1:-1;;;;;39610:19:0;;39602:68;;;;-1:-1:-1;;;39602:68:0;;12066:2:1;39602:68:0;;;12048:21:1;12105:2;12085:18;;;12078:30;12144:34;12124:18;;;12117:62;-1:-1:-1;;;12195:18:1;;;12188:34;12239:19;;39602:68:0;11864:400:1;39602:68:0;-1:-1:-1;;;;;39689:21:0;;39681:68;;;;-1:-1:-1;;;39681:68:0;;12471:2:1;39681:68:0;;;12453:21:1;12510:2;12490:18;;;12483:30;12549:34;12529:18;;;12522:62;-1:-1:-1;;;12600:18:1;;;12593:32;12642:19;;39681:68:0;12269:398:1;39681:68:0;-1:-1:-1;;;;;39762:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39814:32;;1662:25:1;;;39814:32:0;;1635:18:1;39814:32:0;;;;;;;39517:337;;;:::o;39862:2038::-;-1:-1:-1;;;;;39984:18:0;;39976:68;;;;-1:-1:-1;;;39976:68:0;;12874:2:1;39976:68:0;;;12856:21:1;12913:2;12893:18;;;12886:30;12952:34;12932:18;;;12925:62;-1:-1:-1;;;13003:18:1;;;12996:35;13048:19;;39976:68:0;12672:401:1;39976:68:0;-1:-1:-1;;;;;40063:16:0;;40055:64;;;;-1:-1:-1;;;40055:64:0;;13280:2:1;40055:64:0;;;13262:21:1;13319:2;13299:18;;;13292:30;13358:34;13338:18;;;13331:62;-1:-1:-1;;;13409:18:1;;;13402:33;13452:19;;40055:64:0;13078:399:1;40055:64:0;40147:1;40138:6;:10;40130:64;;;;-1:-1:-1;;;40130:64:0;;13684:2:1;40130:64:0;;;13666:21:1;13723:2;13703:18;;;13696:30;13762:34;13742:18;;;13735:62;-1:-1:-1;;;13813:18:1;;;13806:39;13862:19;;40130:64:0;13482:405:1;40130:64:0;15730:7;15757:6;-1:-1:-1;;;;;40208:15:0;;;15757:6;;40208:15;;;;:32;;-1:-1:-1;15730:7:0;15757:6;-1:-1:-1;;;;;40227:13:0;;;15757:6;;40227:13;;40208:32;40205:125;;;40273:12;;40263:6;:22;;40255:75;;;;-1:-1:-1;;;40255:75:0;;14094:2:1;40255:75:0;;;14076:21:1;14133:2;14113:18;;;14106:30;14172:34;14152:18;;;14145:62;-1:-1:-1;;;14223:18:1;;;14216:38;14271:19;;40255:75:0;13892:404:1;40255:75:0;40362:13;-1:-1:-1;;;;;40354:21:0;:4;-1:-1:-1;;;;;40354:21:0;;:40;;;;-1:-1:-1;40385:9:0;;-1:-1:-1;;;;;40379:15:0;;;40385:9;;40379:15;;40354:40;40351:137;;;40445:10;;40435:6;40419:13;40429:2;40419:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;40411:65;;;;-1:-1:-1;;;40411:65:0;;14503:2:1;40411:65:0;;;14485:21:1;14542:2;14522:18;;;14515:30;-1:-1:-1;;;14561:18:1;;;14554:46;14617:18;;40411:65:0;14301:340:1;40411:65:0;40509:28;40540:24;40558:4;40540:9;:24::i;:::-;40509:55;;40612:12;;40588:20;:36;40585:112;;-1:-1:-1;40673:12:0;;40585:112;40768:29;;40744:53;;;;;;;40826;;-1:-1:-1;40863:16:0;;-1:-1:-1;;;40863:16:0;;;;40862:17;40826:53;:91;;;;;40904:13;-1:-1:-1;;;;;40896:21:0;:4;-1:-1:-1;;;;;40896:21:0;;;40826:91;:129;;;;-1:-1:-1;40934:21:0;;-1:-1:-1;;;40934:21:0;;;;40826:129;40808:320;;;41005:29;;40982:52;;41078:36;41093:20;41078:14;:36::i;:::-;41159:13;-1:-1:-1;;;;;41151:21:0;:4;-1:-1:-1;;;;;41151:21:0;;:55;;;;;41190:15;-1:-1:-1;;;;;41176:30:0;:2;-1:-1:-1;;;;;41176:30:0;;;41151:55;41148:152;;;41233:9;;41223:7;:19;41273:15;;41257:13;:31;41148:152;41330:13;-1:-1:-1;;;;;41324:19:0;:2;-1:-1:-1;;;;;41324:19:0;;:55;;;;;41363:15;-1:-1:-1;;;;;41347:32:0;:4;-1:-1:-1;;;;;41347:32:0;;;41324:55;41320:155;;;41406:10;;41396:7;:20;41447:16;;41431:13;:32;41320:155;-1:-1:-1;;;;;41675:24:0;;41548:12;41675:24;;;:18;:24;;;;;;41563:4;;41675:24;;;:50;;-1:-1:-1;;;;;;41703:22:0;;;;;;:18;:22;;;;;;;;41675:50;41672:96;;;-1:-1:-1;41751:5:0;41672:96;41854:38;41869:4;41874:2;41877:6;41884:7;41854:14;:38::i;:::-;39965:1935;;;39862:2038;;;:::o;4448:192::-;4534:7;4570:12;4562:6;;;;4554:29;;;;-1:-1:-1;;;4554:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4594:9:0;4606:5;4610:1;4606;:5;:::i;:::-;4594:17;4448:192;-1:-1:-1;;;;;4448:192:0:o;37536:163::-;37577:7;37598:15;37615;37634:19;:17;:19::i;:::-;37597:56;;-1:-1:-1;37597:56:0;-1:-1:-1;37671:20:0;37597:56;;37671:11;:20::i;:::-;37664:27;;;;37536:163;:::o;5846:132::-;5904:7;5931:39;5935:1;5938;5931:39;;;;;;;;;;;;;;;;;:3;:39::i;3545:181::-;3603:7;;3635:5;3639:1;3635;:5;:::i;:::-;3623:17;;3664:1;3659;:6;;3651:46;;;;-1:-1:-1;;;3651:46:0;;14848:2:1;3651:46:0;;;14830:21:1;14887:2;14867:18;;;14860:30;14926:29;14906:18;;;14899:57;14973:18;;3651:46:0;14646:351:1;36334:419:0;36393:7;36402;36411;36420;36429;36438;36459:23;36484:12;36498:18;36520:20;36532:7;36520:11;:20::i;:::-;36458:82;;;;;;36552:15;36569:23;36594:12;36610:50;36622:7;36631:4;36637:10;36649;:8;:10::i;:::-;36610:11;:50::i;:::-;36551:109;;;;-1:-1:-1;36551:109:0;;-1:-1:-1;36711:15:0;;-1:-1:-1;36728:4:0;;-1:-1:-1;36734:10:0;;-1:-1:-1;36334:419:0;;-1:-1:-1;;;;;36334:419:0:o;4009:136::-;4067:7;4094:43;4098:1;4101;4094:43;;;;;;;;;;;;;;;;;:3;:43::i;41908:505::-;27752:16;:23;;-1:-1:-1;;;;27752:23:0;-1:-1:-1;;;27752:23:0;;;42028:21:::1;42094:38;42111:20:::0;42094:16:::1;:38::i;:::-;42194:18;42215:41;:21;42241:14:::0;42215:25:::1;:41::i;:::-;42277:10;::::0;42269:40:::1;::::0;42194:62;;-1:-1:-1;;;;;;42277:10:0::1;::::0;42269:40;::::1;;;::::0;42194:62;;42277:10:::1;42269:40:::0;42277:10;42269:40;42194:62;42277:10;42269:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;42335:70:0::1;::::0;;15204:25:1;;;15260:2;15245:18;;15238:34;;;15288:18;;;15281:34;;;42335:70:0::1;::::0;15192:2:1;15177:18;42335:70:0::1;;;;;;;-1:-1:-1::0;;27798:16:0;:24;;-1:-1:-1;;;;27798:24:0;;;-1:-1:-1;41908:505:0:o;43093:1114::-;43204:8;;;;;;;43200:114;;15730:7;15757:6;-1:-1:-1;;;;;43236:17:0;;;15757:6;;43236:17;43228:26;;;;;;-1:-1:-1;;;;;43337:18:0;;;;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;43359:21:0;;;;;;:10;:21;;;;;;;;43337:43;43334:126;;;43404:12;;;;43396:52;;;;-1:-1:-1;;;43396:52:0;;15528:2:1;43396:52:0;;;15510:21:1;15567:2;15547:18;;;15540:30;15606:29;15586:18;;;15579:57;15653:18;;43396:52:0;15326:351:1;43396:52:0;43484:7;43480:40;;43506:14;:12;:14::i;:::-;-1:-1:-1;;;;;43545:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;43569:22:0;;;;;;:11;:22;;;;;;;;43568:23;43545:46;43541:597;;;43608:48;43630:6;43638:9;43649:6;43608:21;:48::i;:::-;43541:597;;;-1:-1:-1;;;;;43679:19:0;;;;;;:11;:19;;;;;;;;43678:20;:46;;;;-1:-1:-1;;;;;;43702:22:0;;;;;;:11;:22;;;;;;;;43678:46;43674:464;;;43741:46;43761:6;43769:9;43780:6;43741:19;:46::i;43674:464::-;-1:-1:-1;;;;;43810:19:0;;;;;;:11;:19;;;;;;;;43809:20;:47;;;;-1:-1:-1;;;;;;43834:22:0;;;;;;:11;:22;;;;;;;;43833:23;43809:47;43805:333;;;43873:44;43891:6;43899:9;43910:6;43873:17;:44::i;43805:333::-;-1:-1:-1;;;;;43939:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;43962:22:0;;;;;;:11;:22;;;;;;;;43939:45;43935:203;;;44001:48;44023:6;44031:9;44042:6;44001:21;:48::i;43935:203::-;44082:44;44100:6;44108:9;44119:6;44082:17;:44::i;:::-;44162:7;44158:41;;44184:15;39303;;39293:7;:25;39345:21;;39329:13;:37;39249:125;44184:15;43093:1114;;;;:::o;37707:561::-;37804:7;;37840;;37757;;;;;37864:289;37888:9;:16;37884:20;;37864:289;;;37954:7;37930;:21;37938:9;37948:1;37938:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37938:12:0;37930:21;;;;;;;;;;;;;:31;;:66;;;37989:7;37965;:21;37973:9;37983:1;37973:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37973:12:0;37965:21;;;;;;;;;;;;;:31;37930:66;37926:97;;;38006:7;;38015;;37998:25;;;;;;;37707:561;;:::o;37926:97::-;38048:34;38060:7;:21;38068:9;38078:1;38068:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38068:12:0;38060:21;;;;;;;;;;;;;38048:7;;:11;:34::i;:::-;38038:44;;38107:34;38119:7;:21;38127:9;38137:1;38127:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38127:12:0;38119:21;;;;;;;;;;;;;38107:7;;:11;:34::i;:::-;38097:44;-1:-1:-1;37906:3:0;;;;:::i;:::-;;;;37864:289;;;-1:-1:-1;38189:7:0;;38177;;:20;;:11;:20::i;:::-;38167:7;:30;38163:61;;;38207:7;;38216;;38199:25;;;;;;37707:561;;:::o;38163:61::-;38243:7;;38252;;-1:-1:-1;37707:561:0;-1:-1:-1;37707:561:0:o;6474:278::-;6560:7;6595:12;6588:5;6580:28;;;;-1:-1:-1;;;6580:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6619:9:0;6631:5;6635:1;6631;:5;:::i;36761:330::-;36821:7;36830;36839;36859:12;36874:24;36890:7;36874:15;:24::i;:::-;36859:39;;36909:18;36930:30;36952:7;36930:21;:30::i;:::-;36909:51;-1:-1:-1;36971:23:0;36997:33;36909:51;36997:17;:7;37009:4;36997:11;:17::i;:::-;:21;;:33::i;:::-;36971:59;37066:4;;-1:-1:-1;37072:10:0;;-1:-1:-1;36761:330:0;;-1:-1:-1;;;36761:330:0:o;37099:429::-;37214:7;;;;37270:24;:7;37282:11;37270;:24::i;:::-;37252:42;-1:-1:-1;37305:12:0;37320:21;:4;37329:11;37320:8;:21::i;:::-;37305:36;-1:-1:-1;37352:18:0;37373:27;:10;37388:11;37373:14;:27::i;:::-;37352:48;-1:-1:-1;37411:23:0;37437:33;37352:48;37437:17;:7;37449:4;37437:11;:17::i;:33::-;37489:7;;;;-1:-1:-1;37515:4:0;;-1:-1:-1;37099:429:0;;-1:-1:-1;;;;;;;37099:429:0:o;42421:589::-;42571:16;;;42585:1;42571:16;;;;;;;;42547:21;;42571:16;;;;;;;;;;-1:-1:-1;42571:16:0;42547:40;;42616:4;42598;42603:1;42598:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42598:23:0;;;-1:-1:-1;;;;;42598:23:0;;;;;42642:15;-1:-1:-1;;;;;42642:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42632:4;42637:1;42632:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;42632:32:0;;;-1:-1:-1;;;;;42632:32:0;;;;;42677:62;42694:4;42709:15;42727:11;42677:8;:62::i;:::-;42778:224;;-1:-1:-1;;;42778:224:0;;-1:-1:-1;;;;;42778:15:0;:66;;;;:224;;42859:11;;42885:1;;42929:4;;42956;;42976:15;;42778:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38987:250;39033:7;;:12;:34;;;;-1:-1:-1;39049:13:0;;:18;39033:34;39030:46;;;38987:250::o;39030:46::-;39114:7;;;39096:15;:25;39156:13;;;39132:21;:37;-1:-1:-1;39190:11:0;;;;39212:17;38987:250::o;45319:566::-;45422:15;45439:23;45464:12;45478:23;45503:12;45517:18;45539:19;45550:7;45539:10;:19::i;:::-;-1:-1:-1;;;;;45587:15:0;;;;;;:7;:15;;;;;;45421:137;;-1:-1:-1;45421:137:0;;-1:-1:-1;45421:137:0;;-1:-1:-1;45421:137:0;-1:-1:-1;45421:137:0;-1:-1:-1;45421:137:0;-1:-1:-1;45587:28:0;;45607:7;45587:19;:28::i;:::-;-1:-1:-1;;;;;45569:15:0;;;;;;:7;:15;;;;;;;;:46;;;;45644:7;:15;;;;:28;;45664:7;45644:19;:28::i;:::-;-1:-1:-1;;;;;45626:15:0;;;;;;;:7;:15;;;;;;:46;;;;45704:18;;;;;;;:39;;45727:15;45704:22;:39::i;:::-;-1:-1:-1;;;;;45683:18:0;;;;;;:7;:18;;;;;:60;45757:26;45772:10;45757:14;:26::i;:::-;45794:23;45806:4;45812;45794:11;:23::i;:::-;45850:9;-1:-1:-1;;;;;45833:44:0;45842:6;-1:-1:-1;;;;;45833:44:0;;45861:15;45833:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;45833:44:0;;;;;;;;45410:475;;;;;;45319:566;;;:::o;44725:586::-;44826:15;44843:23;44868:12;44882:23;44907:12;44921:18;44943:19;44954:7;44943:10;:19::i;:::-;-1:-1:-1;;;;;44991:15:0;;;;;;:7;:15;;;;;;44825:137;;-1:-1:-1;44825:137:0;;-1:-1:-1;44825:137:0;;-1:-1:-1;44825:137:0;-1:-1:-1;44825:137:0;-1:-1:-1;44825:137:0;-1:-1:-1;44991:28:0;;44825:137;44991:19;:28::i;:::-;-1:-1:-1;;;;;44973:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;45051:18;;;;;:7;:18;;;;;:39;;45074:15;45051:22;:39::i;:::-;-1:-1:-1;;;;;45030:18:0;;;;;;:7;:18;;;;;;;;:60;;;;45122:7;:18;;;;:39;;45145:15;45122:22;:39::i;44215:502::-;44314:15;44331:23;44356:12;44370:23;44395:12;44409:18;44431:19;44442:7;44431:10;:19::i;:::-;-1:-1:-1;;;;;44479:15:0;;;;;;:7;:15;;;;;;44313:137;;-1:-1:-1;44313:137:0;;-1:-1:-1;44313:137:0;;-1:-1:-1;44313:137:0;-1:-1:-1;44313:137:0;-1:-1:-1;44313:137:0;-1:-1:-1;44479:28:0;;44313:137;44479:19;:28::i;32833:642::-;32936:15;32953:23;32978:12;32992:23;33017:12;33031:18;33053:19;33064:7;33053:10;:19::i;:::-;-1:-1:-1;;;;;33101:15:0;;;;;;:7;:15;;;;;;32935:137;;-1:-1:-1;32935:137:0;;-1:-1:-1;32935:137:0;;-1:-1:-1;32935:137:0;-1:-1:-1;32935:137:0;-1:-1:-1;32935:137:0;-1:-1:-1;33101:28:0;;33121:7;33101:19;:28::i;:::-;-1:-1:-1;;;;;33083:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33158:7;:15;;;;:28;;33178:7;33158:19;:28::i;38647:154::-;38711:7;38738:55;38777:5;38738:20;38750:7;;38738;:11;;:20;;;;:::i;:::-;:24;;:55::i;38809:166::-;38879:7;38906:61;38951:5;38906:26;38918:13;;38906:7;:11;;:26;;;;:::i;4899:471::-;4957:7;5202:6;5198:47;;-1:-1:-1;5232:1:0;5225:8;;5198:47;5257:9;5269:5;5273:1;5269;:5;:::i;:::-;5257:17;-1:-1:-1;5302:1:0;5293:5;5297:1;5257:17;5293:5;:::i;:::-;:10;5285:56;;;;-1:-1:-1;;;5285:56:0;;17479:2:1;5285:56:0;;;17461:21:1;17518:2;17498:18;;;17491:30;17557:34;17537:18;;;17530:62;-1:-1:-1;;;17608:18:1;;;17601:31;17649:19;;5285:56:0;17277:397:1;38280:355:0;38343:19;38366:10;:8;:10::i;:::-;38343:33;-1:-1:-1;38387:18:0;38408:27;:10;38343:33;38408:14;:27::i;:::-;38487:4;38471:22;;;;:7;:22;;;;;;38387:48;;-1:-1:-1;38471:38:0;;38387:48;38471:26;:38::i;:::-;38462:4;38446:22;;;;:7;:22;;;;;;;;:63;;;;38523:11;:26;;;;;;38520:107;;;38605:4;38589:22;;;;:7;:22;;;;;;:38;;38616:10;38589:26;:38::i;:::-;38580:4;38564:22;;;;:7;:22;;;;;:63;38520:107;38332:303;;38280:355;:::o;36179:147::-;36257:7;;:17;;36269:4;36257:11;:17::i;:::-;36247:7;:27;36298:10;;:20;;36313:4;36298:14;:20::i;:::-;36285:10;:33;-1:-1:-1;;36179:147:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:597::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;840:6;837:1;834:13;831:91;;;910:1;905:2;896:6;885:9;881:22;877:31;870:42;831:91;-1:-1:-1;983:2:1;962:15;-1:-1:-1;;958:29:1;943:45;;;;990:2;939:54;;402:597;-1:-1:-1;;;402:597:1:o;1004:315::-;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1188:9;1175:23;1207:31;1232:5;1207:31;:::i;:::-;1257:5;1309:2;1294:18;;;;1281:32;;-1:-1:-1;;;1004:315:1:o;1933:180::-;1992:6;2045:2;2033:9;2024:7;2020:23;2016:32;2013:52;;;2061:1;2058;2051:12;2013:52;-1:-1:-1;2084:23:1;;1933:180;-1:-1:-1;1933:180:1:o;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;3033:118::-;3119:5;3112:13;3105:21;3098:5;3095:32;3085:60;;3141:1;3138;3131:12;3156:309;3221:6;3229;3282:2;3270:9;3261:7;3257:23;3253:32;3250:52;;;3298:1;3295;3288:12;3250:52;3334:9;3321:23;3311:33;;3394:2;3383:9;3379:18;3366:32;3407:28;3429:5;3407:28;:::i;:::-;3454:5;3444:15;;;3156:309;;;;;:::o;3678:385::-;3764:6;3772;3780;3788;3841:3;3829:9;3820:7;3816:23;3812:33;3809:53;;;3858:1;3855;3848:12;3809:53;-1:-1:-1;;3881:23:1;;;3951:2;3936:18;;3923:32;;-1:-1:-1;4002:2:1;3987:18;;3974:32;;4053:2;4038:18;4025:32;;-1:-1:-1;3678:385:1;-1:-1:-1;3678:385:1:o;4068:241::-;4124:6;4177:2;4165:9;4156:7;4152:23;4148:32;4145:52;;;4193:1;4190;4183:12;4145:52;4232:9;4219:23;4251:28;4273:5;4251:28;:::i;4314:388::-;4382:6;4390;4443:2;4431:9;4422:7;4418:23;4414:32;4411:52;;;4459:1;4456;4449:12;4411:52;4498:9;4485:23;4517:31;4542:5;4517:31;:::i;:::-;4567:5;-1:-1:-1;4624:2:1;4609:18;;4596:32;4637:33;4596:32;4637:33;:::i;4707:356::-;4909:2;4891:21;;;4928:18;;;4921:30;4987:34;4982:2;4967:18;;4960:62;5054:2;5039:18;;4707:356::o;5068:380::-;5147:1;5143:12;;;;5190;;;5211:61;;5265:4;5257:6;5253:17;5243:27;;5211:61;5318:2;5310:6;5307:14;5287:18;5284:38;5281:161;;;5364:10;5359:3;5355:20;5352:1;5345:31;5399:4;5396:1;5389:15;5427:4;5424:1;5417:15;5281:161;;5068:380;;;:::o;5453:127::-;5514:10;5509:3;5505:20;5502:1;5495:31;5545:4;5542:1;5535:15;5569:4;5566:1;5559:15;5585:168;5625:7;5691:1;5687;5683:6;5679:14;5676:1;5673:21;5668:1;5661:9;5654:17;5650:45;5647:71;;;5698:18;;:::i;:::-;-1:-1:-1;5738:9:1;;5585:168::o;6522:184::-;6592:6;6645:2;6633:9;6624:7;6620:23;6616:32;6613:52;;;6661:1;6658;6651:12;6613:52;-1:-1:-1;6684:16:1;;6522:184;-1:-1:-1;6522:184:1:o;6990:245::-;7057:6;7110:2;7098:9;7089:7;7085:23;7081:32;7078:52;;;7126:1;7123;7116:12;7078:52;7158:9;7152:16;7177:28;7199:5;7177:28;:::i;7596:127::-;7657:10;7652:3;7648:20;7645:1;7638:31;7688:4;7685:1;7678:15;7712:4;7709:1;7702:15;7728:125;7768:4;7796:1;7793;7790:8;7787:34;;;7801:18;;:::i;:::-;-1:-1:-1;7838:9:1;;7728:125::o;7858:127::-;7919:10;7914:3;7910:20;7907:1;7900:31;7950:4;7947:1;7940:15;7974:4;7971:1;7964:15;7990:135;8029:3;-1:-1:-1;;8050:17:1;;8047:43;;;8070:18;;:::i;:::-;-1:-1:-1;8117:1:1;8106:13;;7990:135::o;9853:128::-;9893:3;9924:1;9920:6;9917:1;9914:13;9911:39;;;9930:18;;:::i;:::-;-1:-1:-1;9966:9:1;;9853:128::o;15682:217::-;15722:1;15748;15738:132;;15792:10;15787:3;15783:20;15780:1;15773:31;15827:4;15824:1;15817:15;15855:4;15852:1;15845:15;15738:132;-1:-1:-1;15884:9:1;;15682:217::o;16036:251::-;16106:6;16159:2;16147:9;16138:7;16134:23;16130:32;16127:52;;;16175:1;16172;16165:12;16127:52;16207:9;16201:16;16226:31;16251:5;16226:31;:::i;16292:980::-;16554:4;16602:3;16591:9;16587:19;16633:6;16622:9;16615:25;16659:2;16697:6;16692:2;16681:9;16677:18;16670:34;16740:3;16735:2;16724:9;16720:18;16713:31;16764:6;16799;16793:13;16830:6;16822;16815:22;16868:3;16857:9;16853:19;16846:26;;16907:2;16899:6;16895:15;16881:29;;16928:1;16938:195;16952:6;16949:1;16946:13;16938:195;;;17017:13;;-1:-1:-1;;;;;17013:39:1;17001:52;;17108:15;;;;17073:12;;;;17049:1;16967:9;16938:195;;;-1:-1:-1;;;;;;;17189:32:1;;;;17184:2;17169:18;;17162:60;-1:-1:-1;;;17253:3:1;17238:19;17231:35;17150:3;16292:980;-1:-1:-1;;;16292:980:1:o

Swarm Source

ipfs://26cb922dbf7abd42dea1455c3e163cdcee19133d88b240de8cb7e4e6788d64d6
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.