ETH Price: $2,426.81 (+0.08%)

Token

RossUlbrichtInu (RUBI)
 

Overview

Max Total Supply

1,000,000,000,000,000 RUBI

Holders

10

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
RossUlbrichtInu

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-26
*/

/**
 *Submitted for verification at Etherscan.io on 2022-05-25
*/

/*
                                                
Total Supply: 100,000,000,000,000 RUI

Total fee: 7%
├ Reflected to holders: 3% of every transfer
├ Added to liquidity: 2% of every transfer
├ Marketing fee: 1% of every transfer
└ Burned: 1% of every transfer

*/

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.12;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        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;
    }
}

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

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

    /**
    * @dev Moves `amount` tokens from the caller's account to `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);
}

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

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

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 () internal {
        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;
    }
    
}

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 implementation
contract RossUlbrichtInu 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; // excluded from reward
    address[] private _excluded;
    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;

    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1000000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _maxTxAmount = 400000000000000 * 10**9;
    uint256 private _maxWalletSize = 400000000000000 * 10**9;
    string private _name = 'RossUlbrichtInu';
    string private _symbol = 'RUBI';
    uint8 private _decimals = 9;

    uint256 private _taxFee = 4; // 4% reflection fee for every holder (incl. burn address)
    uint256 private _marketingFee = 1; // 1% marketing
    uint256 private _liquidityFee = 2; // 2% into liquidity

    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    address payable private _marketingWalletAddress = payable(0xD2789EB8583f065aFDCdA6f3dD99683820A61F5e);

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify = false;
    bool public swapAndLiquifyEnabled = true;

    // We will set a minimum amount of tokens to be swapped
    uint256 private _numTokensSellToAddToLiquidity = 1000000000000 * 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 () public {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network
        // 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;

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

        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 setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

    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 doubleMaxLimits() external onlyOwner{
        _maxTxAmount = _maxTxAmount * 2;
        _maxWalletSize = _maxWalletSize * 2;
    }


    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) external 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 addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _marketingFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _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 sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (sender != owner() && recipient != owner()) {
            require(!_isBlackListedBot[recipient], "You have no power here!");
            if (sender == uniswapV2Pair && recipient != address(uniswapV2Router) && ! _isExcludedFromFee[recipient]) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(balanceOf(recipient) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
            }
        }


        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity;
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            contractTokenBalance = _numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

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

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

        //transfer amount, it will take tax and charity fee
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 toLiquify = contractTokenBalance.sub(toMarketing);

        // split the contract balance into halves
        uint256 half = toLiquify.div(2);
        uint256 otherHalf = toLiquify.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        uint256 toSwapForEth = half.add(toMarketing);
        swapTokensForEth(toSwapForEth); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

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

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);

        sendETHToMarketing(fromSwap.sub(newBalance));
    }

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function sendETHToMarketing(uint256 amount) private {
        _marketingWalletAddress.transfer(amount);
    }

    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() public onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToMarketing(contractETHBalance);
    }

    function setSwapAndLiquifyEnabled(bool _swapAndLiquifyEnabled) external onlyOwner(){
        swapAndLiquifyEnabled = _swapAndLiquifyEnabled;
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        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 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _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 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _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 tMarketingLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _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);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity);
    }

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

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee));
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 marketingLiquidityFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tMarketingLiquidityFee = tAmount.mul(marketingLiquidityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(marketingLiquidityFee);
        return (tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        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 _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

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

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 9, 'taxFee should be in 1 - 9');
        _taxFee = taxFee;
    }

    function _setMarketingFee(uint256 marketingFee) external onlyOwner() {
        require(marketingFee >= 1 && marketingFee <= 9, 'marketingFee should be in 1 - 9');
        _marketingFee = marketingFee;
    }

    function _setLiquidityFee(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee >= 1 && liquidityFee <= 9, 'liquidityFee should be in 1 - 9');
        _liquidityFee = liquidityFee;
    }

    function _setNumTokensSellToAddToLiquidity(uint256 numTokensSellToAddToLiquidity) external onlyOwner() {
        require(numTokensSellToAddToLiquidity >= 10**9 , 'numTokensSellToAddToLiquidity should be greater than total 1e9');
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
    }

    function recoverTokens(uint256 tokenAmount) public virtual onlyOwner() {
        _approve(address(this), owner(), tokenAmount);
        _transfer(address(this), owner(), tokenAmount);
    }
}

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":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"_setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"_setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","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":"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":"doubleMaxLimits","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":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapAndLiquifyEnabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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"},{"stateMutability":"payable","type":"receive"}]

60c060405269d3c21bcecceda1000000600b55600b54600019816200002057fe5b0660001903600c556954b40b1f852bda000000600e556954b40b1f852bda000000600f556040518060400160405280600f81526020017f526f7373556c627269636874496e750000000000000000000000000000000000815250601090805190602001906200009192919062000701565b506040518060400160405280600481526020017f525542490000000000000000000000000000000000000000000000000000000081525060119080519060200190620000df92919062000701565b506009601260006101000a81548160ff021916908360ff16021790555060046013556001601455600260155560135460165560145460175560155460185573d2789eb8583f065afdcda6f3dd99683820a61f5e601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601960146101000a81548160ff0219169083151502179055506001601960156101000a81548160ff021916908315150217905550683635c9adc5dea00000601a55348015620001c257600080fd5b506000620001d5620006d060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600360006200028a620006d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032857600080fd5b505afa1580156200033d573d6000803e3d6000fd5b505050506040513d60208110156200035457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c857600080fd5b505afa158015620003dd573d6000803e3d6000fd5b505050506040513d6020811015620003f457600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200046f57600080fd5b505af115801562000484573d6000803e3d6000fd5b505050506040513d60208110156200049b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600660006200052f620006d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000662620006d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a350620007a7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200074457805160ff191683800117855562000775565b8280016001018555821562000775579182015b828111156200077457825182559160200191906001019062000757565b5b50905062000784919062000788565b5090565b5b80821115620007a357600081600090555060010162000789565b5090565b60805160601c60a05160601c615169620007f9600039806117465280612f7452806131c2525080610dac5280612fca528061360252806136ee52806137155280614207528061422e52506151696000f3fe6080604052600436106102135760003560e01c80635880b87311610118578063a52fe9bb116100a0578063c49b9a801161006f578063c49b9a8014610b8b578063dd62ed3e14610bc8578063f2fde38b14610c4d578063f429389014610c9e578063f815a84214610cb55761021a565b8063a52fe9bb14610a47578063a9059cbb14610a82578063af9549e014610af3578063bcd6d44614610b505761021a565b8063822a05e3116100e7578063822a05e31461088757806388f820201461089e5780638da5cb5b1461090557806395d89b4114610946578063a457c2d7146109d65761021a565b80635880b8731461077f57806370a08231146107ba578063715018a61461081f5780637ded4d6a146108365761021a565b8063313ce5671161019b5780634549b0391161016a5780634549b0391461063857806349bd5a5e146106935780634a74bb02146106d457806351bc3c85146107015780635342acb4146107185761021a565b8063313ce5671461050d578063395093511461053b5780633bd5d173146105ac5780634303443d146105e75761021a565b806318160ddd116101e257806318160ddd1461038c5780631decaadc146103b757806323b872dd146103f25780632d8381191461048357806330599fc5146104d25761021a565b806306fdde031461021f578063095ea7b3146102af57806313114a9d146103205780631694505e1461034b5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610ce0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610274578082015181840152602081019050610259565b50505050905090810190601f1680156102a15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102bb57600080fd5b50610308600480360360408110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d82565b60405180821515815260200191505060405180910390f35b34801561032c57600080fd5b50610335610da0565b6040518082815260200191505060405180910390f35b34801561035757600080fd5b50610360610daa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039857600080fd5b506103a1610dce565b6040518082815260200191505060405180910390f35b3480156103c357600080fd5b506103f0600480360360208110156103da57600080fd5b8101908080359060200190929190505050610dd8565b005b3480156103fe57600080fd5b5061046b6004803603606081101561041557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f07565b60405180821515815260200191505060405180910390f35b34801561048f57600080fd5b506104bc600480360360208110156104a657600080fd5b8101908080359060200190929190505050610fe0565b6040518082815260200191505060405180910390f35b3480156104de57600080fd5b5061050b600480360360208110156104f557600080fd5b8101908080359060200190929190505050611064565b005b34801561051957600080fd5b50610522611153565b604051808260ff16815260200191505060405180910390f35b34801561054757600080fd5b506105946004803603604081101561055e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061116a565b60405180821515815260200191505060405180910390f35b3480156105b857600080fd5b506105e5600480360360208110156105cf57600080fd5b810190808035906020019092919050505061121d565b005b3480156105f357600080fd5b506106366004803603602081101561060a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113ae565b005b34801561064457600080fd5b5061067d6004803603604081101561065b57600080fd5b810190808035906020019092919080351515906020019092919050505061168d565b6040518082815260200191505060405180910390f35b34801561069f57600080fd5b506106a8611744565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106e057600080fd5b506106e9611768565b60405180821515815260200191505060405180910390f35b34801561070d57600080fd5b5061071661177b565b005b34801561072457600080fd5b506107676004803603602081101561073b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185c565b60405180821515815260200191505060405180910390f35b34801561078b57600080fd5b506107b8600480360360208110156107a257600080fd5b81019080803590602001909291905050506118b2565b005b3480156107c657600080fd5b50610809600480360360208110156107dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a08565b6040518082815260200191505060405180910390f35b34801561082b57600080fd5b50610834611af3565b005b34801561084257600080fd5b506108856004803603602081101561085957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c79565b005b34801561089357600080fd5b5061089c611fbe565b005b3480156108aa57600080fd5b506108ed600480360360208110156108c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120a0565b60405180821515815260200191505060405180910390f35b34801561091157600080fd5b5061091a6120f6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095257600080fd5b5061095b61211f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561099b578082015181840152602081019050610980565b50505050905090810190601f1680156109c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109e257600080fd5b50610a2f600480360360408110156109f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121c1565b60405180821515815260200191505060405180910390f35b348015610a5357600080fd5b50610a8060048036036020811015610a6a57600080fd5b810190808035906020019092919050505061228e565b005b348015610a8e57600080fd5b50610adb60048036036040811015610aa557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123e4565b60405180821515815260200191505060405180910390f35b348015610aff57600080fd5b50610b4e60048036036040811015610b1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612402565b005b348015610b5c57600080fd5b50610b8960048036036020811015610b7357600080fd5b8101908080359060200190929190505050612525565b005b348015610b9757600080fd5b50610bc660048036036020811015610bae57600080fd5b8101908080351515906020019092919050505061267b565b005b348015610bd457600080fd5b50610c3760048036036040811015610beb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612760565b6040518082815260200191505060405180910390f35b348015610c5957600080fd5b50610c9c60048036036020811015610c7057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127e7565b005b348015610caa57600080fd5b50610cb36129f2565b005b348015610cc157600080fd5b50610cca612acb565b6040518082815260200191505060405180910390f35b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d785780601f10610d4d57610100808354040283529160200191610d78565b820191906000526020600020905b815481529060010190602001808311610d5b57829003601f168201915b5050505050905090565b6000610d96610d8f612ad3565b8484612adb565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b610de0612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806150a5603e913960400191505060405180910390fd5b80601a8190555050565b6000610f14848484612cd2565b610fd584610f20612ad3565b610fd085604051806060016040528060288152602001614fe760289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f86612ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ea9092919063ffffffff16565b612adb565b600190509392505050565b6000600c5482111561103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614f54602a913960400191505060405180910390fd5b60006110476133aa565b905061105c81846133d590919063ffffffff16565b915050919050565b61106c612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61113e306111386120f6565b83612adb565b6111503061114a6120f6565b83612cd2565b50565b6000601260009054906101000a900460ff16905090565b6000611213611177612ad3565b8461120e8560056000611188612ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b612adb565b6001905092915050565b6000611227612ad3565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806150e3602c913960400191505060405180910390fd5b60006112d7836134a7565b5050505050905061133081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061138881600c5461352290919063ffffffff16565b600c819055506113a383600d5461341f90919063ffffffff16565b600d81905550505050565b6113b6612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561150f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806150386024913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b54831115611707576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611727576000611717846134a7565b505050505090508091505061173e565b6000611732846134a7565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601960159054906101000a900460ff1681565b611783612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061184e30611a08565b90506118598161356c565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118ba612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561198c575060098111155b6119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7461784665652073686f756c6420626520696e2031202d20390000000000000081525060200191505060405180910390fd5b8060138190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aa357600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611aee565b611aeb600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fe0565b90505b919050565b611afb612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c81612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a80549050811015611fba578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110611e3457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fad57600a6001600a805490500381548110611e9057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110611ec857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480611f7357fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611fba565b8080600101915050611e03565b5050565b611fc6612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612086576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6002600e5402600e819055506002600f5402600f81905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121b75780601f1061218c576101008083540402835291602001916121b7565b820191906000526020600020905b81548152906001019060200180831161219a57829003601f168201915b5050505050905090565b60006122846121ce612ad3565b8461227f8560405180606001604052806025815260200161510f60259139600560006121f8612ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ea9092919063ffffffff16565b612adb565b6001905092915050565b612296612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612368575060098111155b6123da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20390081525060200191505060405180910390fd5b8060148190555050565b60006123f86123f1612ad3565b8484612cd2565b6001905092915050565b61240a612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61252d612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156125ff575060098111155b612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20390081525060200191505060405180910390fd5b8060158190555050565b612683612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612743576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960156101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6127ef612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612935576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f7e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129fa612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050612ac88161381a565b50565b600047905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806150816024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614fa46022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061505c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614f316023913960400191505060405180910390fd5b60008111612e37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061500f6029913960400191505060405180910390fd5b612e3f6120f6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ead5750612e7d6120f6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561317057600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561301957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561306f5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561316f57600e548111156130ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4578636565647320746865205f6d61785478416d6f756e742e0000000000000081525060200191505060405180910390fd5b600f54816130f984611a08565b01111561316e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4578636565647320746865206d617857616c6c657453697a652e00000000000081525060200191505060405180910390fd5b5b5b600061317b30611a08565b90506000601a548210159050601960149054906101000a900460ff161580156131b05750601960159054906101000a900460ff165b80156131b95750805b801561321157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561322557601a54915061322482613886565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132cc5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132d657600090505b6132e286868684613a1f565b505050505050565b6000838311158290613397576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561335c578082015181840152602081019050613341565b50505050905090810190601f1680156133895780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006133b7613d30565b915091506133ce81836133d590919063ffffffff16565b9250505090565b600061341783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fc1565b905092915050565b60008082840190508381101561349d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006134d88a6013546134d360155460145461341f90919063ffffffff16565b614087565b92509250925060006134e86133aa565b905060008060006134fa8e878661411d565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061356483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132ea565b905092915050565b6060600267ffffffffffffffff8111801561358657600080fd5b506040519080825280602002602001820160405280156135b55781602001602082028036833780820191505090505b50905030816000815181106135c657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561366657600080fd5b505afa15801561367a573d6000803e3d6000fd5b505050506040513d602081101561369057600080fd5b8101908080519060200190929190505050816001815181106136ae57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613713307f000000000000000000000000000000000000000000000000000000000000000084612adb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156137d55780820151818401526020810190506137ba565b505050509050019650505050505050600060405180830381600087803b1580156137fe57600080fd5b505af1158015613812573d6000803e3d6000fd5b505050505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613882573d6000803e3d6000fd5b5050565b6001601960146101000a81548160ff02191690831515021790555060006138e06138bd60155460145461341f90919063ffffffff16565b6138d26014548561417b90919063ffffffff16565b6133d590919063ffffffff16565b905060006138f7828461352290919063ffffffff16565b9050600061390f6002836133d590919063ffffffff16565b90506000613926828461352290919063ffffffff16565b905060004790506000613942868561341f90919063ffffffff16565b905061394d8161356c565b6000613962834761352290919063ffffffff16565b9050600061398b8361397d888561417b90919063ffffffff16565b6133d590919063ffffffff16565b90506139978582614201565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a16139f96139f4828461352290919063ffffffff16565b61381a565b50505050505050506000601960146101000a81548160ff02191690831515021790555050565b80613a2d57613a2c614352565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ad05750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ae557613ae08484846143b4565b613d1c565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b885750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613b9d57613b98848484614614565b613d1b565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613c415750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c5657613c51848484614874565b613d1a565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613cf85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d0d57613d08848484614a3f565b613d19565b613d18848484614874565b5b5b5b5b80613d2a57613d29614d34565b5b50505050565b6000806000600c5490506000600b54905060005b600880549050811015613f8457826003600060088481548110613d6357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613e4a5750816004600060088481548110613de257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613e6157600c54600b5494509450505050613fbd565b613eea6003600060088481548110613e7557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461352290919063ffffffff16565b9250613f756004600060088481548110613f0057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361352290919063ffffffff16565b91508080600101915050613d44565b50613f9c600b54600c546133d590919063ffffffff16565b821015613fb457600c54600b54935093505050613fbd565b81819350935050505b9091565b6000808311829061406d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614032578082015181840152602081019050614017565b50505050905090810190601f16801561405f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161407957fe5b049050809150509392505050565b6000806000806140b360646140a5888a61417b90919063ffffffff16565b6133d590919063ffffffff16565b905060006140dd60646140cf888b61417b90919063ffffffff16565b6133d590919063ffffffff16565b90506000614106876140f8858c61352290919063ffffffff16565b61352290919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614136858861417b90919063ffffffff16565b9050600061414d868861417b90919063ffffffff16565b90506000614164828461352290919063ffffffff16565b905082818395509550955050505093509350939050565b60008083141561418e57600090506141fb565b600082840290508284828161419f57fe5b04146141f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614fc66021913960400191505060405180910390fd5b809150505b92915050565b61422c307f000000000000000000000000000000000000000000000000000000000000000084612adb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806142766120f6565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156142fb57600080fd5b505af115801561430f573d6000803e3d6000fd5b50505050506040513d606081101561432657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060135414801561436657506000601454145b801561437457506000601554145b1561437e576143b2565b6013546016819055506014546017819055506015546018819055506000601381905550600060148190555060006015819055505b565b6000806000806000806143c6876134a7565b95509550955095509550955061442487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144b986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061454e85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061459a81614d51565b6145a48483614ef6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614626876134a7565b95509550955095509550955061468486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061471983600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147ae85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147fa81614d51565b6148048483614ef6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614886876134a7565b9550955095509550955095506148e486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061497985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149c581614d51565b6149cf8483614ef6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614a51876134a7565b955095509550955095509550614aaf87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bd983600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c6e85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cba81614d51565b614cc48483614ef6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601654601381905550601754601481905550601854601581905550565b6000614d5b6133aa565b90506000614d72828461417b90919063ffffffff16565b9050614dc681600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614ef157614ead83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614f0b82600c5461352290919063ffffffff16565b600c81905550614f2681600d5461341f90919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c203165394578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a2f2ac23f02b1ef1805b0ce2ade42446c8f1a3dc832f01e2c15c0fef8e45226b64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80635880b87311610118578063a52fe9bb116100a0578063c49b9a801161006f578063c49b9a8014610b8b578063dd62ed3e14610bc8578063f2fde38b14610c4d578063f429389014610c9e578063f815a84214610cb55761021a565b8063a52fe9bb14610a47578063a9059cbb14610a82578063af9549e014610af3578063bcd6d44614610b505761021a565b8063822a05e3116100e7578063822a05e31461088757806388f820201461089e5780638da5cb5b1461090557806395d89b4114610946578063a457c2d7146109d65761021a565b80635880b8731461077f57806370a08231146107ba578063715018a61461081f5780637ded4d6a146108365761021a565b8063313ce5671161019b5780634549b0391161016a5780634549b0391461063857806349bd5a5e146106935780634a74bb02146106d457806351bc3c85146107015780635342acb4146107185761021a565b8063313ce5671461050d578063395093511461053b5780633bd5d173146105ac5780634303443d146105e75761021a565b806318160ddd116101e257806318160ddd1461038c5780631decaadc146103b757806323b872dd146103f25780632d8381191461048357806330599fc5146104d25761021a565b806306fdde031461021f578063095ea7b3146102af57806313114a9d146103205780631694505e1461034b5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610ce0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610274578082015181840152602081019050610259565b50505050905090810190601f1680156102a15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102bb57600080fd5b50610308600480360360408110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d82565b60405180821515815260200191505060405180910390f35b34801561032c57600080fd5b50610335610da0565b6040518082815260200191505060405180910390f35b34801561035757600080fd5b50610360610daa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039857600080fd5b506103a1610dce565b6040518082815260200191505060405180910390f35b3480156103c357600080fd5b506103f0600480360360208110156103da57600080fd5b8101908080359060200190929190505050610dd8565b005b3480156103fe57600080fd5b5061046b6004803603606081101561041557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f07565b60405180821515815260200191505060405180910390f35b34801561048f57600080fd5b506104bc600480360360208110156104a657600080fd5b8101908080359060200190929190505050610fe0565b6040518082815260200191505060405180910390f35b3480156104de57600080fd5b5061050b600480360360208110156104f557600080fd5b8101908080359060200190929190505050611064565b005b34801561051957600080fd5b50610522611153565b604051808260ff16815260200191505060405180910390f35b34801561054757600080fd5b506105946004803603604081101561055e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061116a565b60405180821515815260200191505060405180910390f35b3480156105b857600080fd5b506105e5600480360360208110156105cf57600080fd5b810190808035906020019092919050505061121d565b005b3480156105f357600080fd5b506106366004803603602081101561060a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113ae565b005b34801561064457600080fd5b5061067d6004803603604081101561065b57600080fd5b810190808035906020019092919080351515906020019092919050505061168d565b6040518082815260200191505060405180910390f35b34801561069f57600080fd5b506106a8611744565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106e057600080fd5b506106e9611768565b60405180821515815260200191505060405180910390f35b34801561070d57600080fd5b5061071661177b565b005b34801561072457600080fd5b506107676004803603602081101561073b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185c565b60405180821515815260200191505060405180910390f35b34801561078b57600080fd5b506107b8600480360360208110156107a257600080fd5b81019080803590602001909291905050506118b2565b005b3480156107c657600080fd5b50610809600480360360208110156107dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a08565b6040518082815260200191505060405180910390f35b34801561082b57600080fd5b50610834611af3565b005b34801561084257600080fd5b506108856004803603602081101561085957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c79565b005b34801561089357600080fd5b5061089c611fbe565b005b3480156108aa57600080fd5b506108ed600480360360208110156108c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120a0565b60405180821515815260200191505060405180910390f35b34801561091157600080fd5b5061091a6120f6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095257600080fd5b5061095b61211f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561099b578082015181840152602081019050610980565b50505050905090810190601f1680156109c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109e257600080fd5b50610a2f600480360360408110156109f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121c1565b60405180821515815260200191505060405180910390f35b348015610a5357600080fd5b50610a8060048036036020811015610a6a57600080fd5b810190808035906020019092919050505061228e565b005b348015610a8e57600080fd5b50610adb60048036036040811015610aa557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123e4565b60405180821515815260200191505060405180910390f35b348015610aff57600080fd5b50610b4e60048036036040811015610b1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612402565b005b348015610b5c57600080fd5b50610b8960048036036020811015610b7357600080fd5b8101908080359060200190929190505050612525565b005b348015610b9757600080fd5b50610bc660048036036020811015610bae57600080fd5b8101908080351515906020019092919050505061267b565b005b348015610bd457600080fd5b50610c3760048036036040811015610beb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612760565b6040518082815260200191505060405180910390f35b348015610c5957600080fd5b50610c9c60048036036020811015610c7057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127e7565b005b348015610caa57600080fd5b50610cb36129f2565b005b348015610cc157600080fd5b50610cca612acb565b6040518082815260200191505060405180910390f35b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d785780601f10610d4d57610100808354040283529160200191610d78565b820191906000526020600020905b815481529060010190602001808311610d5b57829003601f168201915b5050505050905090565b6000610d96610d8f612ad3565b8484612adb565b6001905092915050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b610de0612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806150a5603e913960400191505060405180910390fd5b80601a8190555050565b6000610f14848484612cd2565b610fd584610f20612ad3565b610fd085604051806060016040528060288152602001614fe760289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f86612ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ea9092919063ffffffff16565b612adb565b600190509392505050565b6000600c5482111561103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614f54602a913960400191505060405180910390fd5b60006110476133aa565b905061105c81846133d590919063ffffffff16565b915050919050565b61106c612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61113e306111386120f6565b83612adb565b6111503061114a6120f6565b83612cd2565b50565b6000601260009054906101000a900460ff16905090565b6000611213611177612ad3565b8461120e8560056000611188612ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b612adb565b6001905092915050565b6000611227612ad3565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806150e3602c913960400191505060405180910390fd5b60006112d7836134a7565b5050505050905061133081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061138881600c5461352290919063ffffffff16565b600c819055506113a383600d5461341f90919063ffffffff16565b600d81905550505050565b6113b6612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611476576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561150f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806150386024913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b54831115611707576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611727576000611717846134a7565b505050505090508091505061173e565b6000611732846134a7565b50505050915050809150505b92915050565b7f000000000000000000000000cc2794dc80cd8af4cad9740ec602abdf167ffaab81565b601960159054906101000a900460ff1681565b611783612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600061184e30611a08565b90506118598161356c565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118ba612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561198c575060098111155b6119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7461784665652073686f756c6420626520696e2031202d20390000000000000081525060200191505060405180910390fd5b8060138190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aa357600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611aee565b611aeb600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fe0565b90505b919050565b611afb612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c81612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a80549050811015611fba578173ffffffffffffffffffffffffffffffffffffffff16600a8281548110611e3457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fad57600a6001600a805490500381548110611e9057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110611ec857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480611f7357fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611fba565b8080600101915050611e03565b5050565b611fc6612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612086576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6002600e5402600e819055506002600f5402600f81905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121b75780601f1061218c576101008083540402835291602001916121b7565b820191906000526020600020905b81548152906001019060200180831161219a57829003601f168201915b5050505050905090565b60006122846121ce612ad3565b8461227f8560405180606001604052806025815260200161510f60259139600560006121f8612ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ea9092919063ffffffff16565b612adb565b6001905092915050565b612296612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612368575060098111155b6123da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20390081525060200191505060405180910390fd5b8060148190555050565b60006123f86123f1612ad3565b8484612cd2565b6001905092915050565b61240a612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61252d612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156125ff575060098111155b612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20390081525060200191505060405180910390fd5b8060158190555050565b612683612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612743576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960156101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6127ef612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612935576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f7e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129fa612ad3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050612ac88161381a565b50565b600047905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806150816024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614fa46022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061505c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614f316023913960400191505060405180910390fd5b60008111612e37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061500f6029913960400191505060405180910390fd5b612e3f6120f6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ead5750612e7d6120f6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561317057600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000cc2794dc80cd8af4cad9740ec602abdf167ffaab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561301957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561306f5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561316f57600e548111156130ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4578636565647320746865205f6d61785478416d6f756e742e0000000000000081525060200191505060405180910390fd5b600f54816130f984611a08565b01111561316e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4578636565647320746865206d617857616c6c657453697a652e00000000000081525060200191505060405180910390fd5b5b5b600061317b30611a08565b90506000601a548210159050601960149054906101000a900460ff161580156131b05750601960159054906101000a900460ff165b80156131b95750805b801561321157507f000000000000000000000000cc2794dc80cd8af4cad9740ec602abdf167ffaab73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561322557601a54915061322482613886565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132cc5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132d657600090505b6132e286868684613a1f565b505050505050565b6000838311158290613397576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561335c578082015181840152602081019050613341565b50505050905090810190601f1680156133895780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006133b7613d30565b915091506133ce81836133d590919063ffffffff16565b9250505090565b600061341783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fc1565b905092915050565b60008082840190508381101561349d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006134d88a6013546134d360155460145461341f90919063ffffffff16565b614087565b92509250925060006134e86133aa565b905060008060006134fa8e878661411d565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061356483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132ea565b905092915050565b6060600267ffffffffffffffff8111801561358657600080fd5b506040519080825280602002602001820160405280156135b55781602001602082028036833780820191505090505b50905030816000815181106135c657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561366657600080fd5b505afa15801561367a573d6000803e3d6000fd5b505050506040513d602081101561369057600080fd5b8101908080519060200190929190505050816001815181106136ae57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613713307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612adb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156137d55780820151818401526020810190506137ba565b505050509050019650505050505050600060405180830381600087803b1580156137fe57600080fd5b505af1158015613812573d6000803e3d6000fd5b505050505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613882573d6000803e3d6000fd5b5050565b6001601960146101000a81548160ff02191690831515021790555060006138e06138bd60155460145461341f90919063ffffffff16565b6138d26014548561417b90919063ffffffff16565b6133d590919063ffffffff16565b905060006138f7828461352290919063ffffffff16565b9050600061390f6002836133d590919063ffffffff16565b90506000613926828461352290919063ffffffff16565b905060004790506000613942868561341f90919063ffffffff16565b905061394d8161356c565b6000613962834761352290919063ffffffff16565b9050600061398b8361397d888561417b90919063ffffffff16565b6133d590919063ffffffff16565b90506139978582614201565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a16139f96139f4828461352290919063ffffffff16565b61381a565b50505050505050506000601960146101000a81548160ff02191690831515021790555050565b80613a2d57613a2c614352565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ad05750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ae557613ae08484846143b4565b613d1c565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b885750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613b9d57613b98848484614614565b613d1b565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613c415750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c5657613c51848484614874565b613d1a565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613cf85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d0d57613d08848484614a3f565b613d19565b613d18848484614874565b5b5b5b5b80613d2a57613d29614d34565b5b50505050565b6000806000600c5490506000600b54905060005b600880549050811015613f8457826003600060088481548110613d6357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613e4a5750816004600060088481548110613de257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613e6157600c54600b5494509450505050613fbd565b613eea6003600060088481548110613e7557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461352290919063ffffffff16565b9250613f756004600060088481548110613f0057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361352290919063ffffffff16565b91508080600101915050613d44565b50613f9c600b54600c546133d590919063ffffffff16565b821015613fb457600c54600b54935093505050613fbd565b81819350935050505b9091565b6000808311829061406d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614032578082015181840152602081019050614017565b50505050905090810190601f16801561405f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161407957fe5b049050809150509392505050565b6000806000806140b360646140a5888a61417b90919063ffffffff16565b6133d590919063ffffffff16565b905060006140dd60646140cf888b61417b90919063ffffffff16565b6133d590919063ffffffff16565b90506000614106876140f8858c61352290919063ffffffff16565b61352290919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614136858861417b90919063ffffffff16565b9050600061414d868861417b90919063ffffffff16565b90506000614164828461352290919063ffffffff16565b905082818395509550955050505093509350939050565b60008083141561418e57600090506141fb565b600082840290508284828161419f57fe5b04146141f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614fc66021913960400191505060405180910390fd5b809150505b92915050565b61422c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612adb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806142766120f6565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156142fb57600080fd5b505af115801561430f573d6000803e3d6000fd5b50505050506040513d606081101561432657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060135414801561436657506000601454145b801561437457506000601554145b1561437e576143b2565b6013546016819055506014546017819055506015546018819055506000601381905550600060148190555060006015819055505b565b6000806000806000806143c6876134a7565b95509550955095509550955061442487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144b986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061454e85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061459a81614d51565b6145a48483614ef6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614626876134a7565b95509550955095509550955061468486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061471983600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147ae85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147fa81614d51565b6148048483614ef6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614886876134a7565b9550955095509550955095506148e486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061497985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149c581614d51565b6149cf8483614ef6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614a51876134a7565b955095509550955095509550614aaf87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461352290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bd983600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c6e85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614cba81614d51565b614cc48483614ef6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601654601381905550601754601481905550601854601581905550565b6000614d5b6133aa565b90506000614d72828461417b90919063ffffffff16565b9050614dc681600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614ef157614ead83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614f0b82600c5461352290919063ffffffff16565b600c81905550614f2681600d5461341f90919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c203165394578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a2f2ac23f02b1ef1805b0ce2ade42446c8f1a3dc832f01e2c15c0fef8e45226b64736f6c634300060c0033

Deployed Bytecode Sourcemap

23779:21735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26782:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27694:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28960:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25292:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27059:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45002:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27863:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30037:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45319:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26968:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28184:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29055:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31245:352;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29440:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25350:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25433:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37750:156;;;;;;;;;;;;;:::i;:::-;;32634:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44393:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27162:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15271:148;;;;;;;;;;;;;:::i;:::-;;31605:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29886:141;;;;;;;;;;;;;:::i;:::-;;28687:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14637:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26873:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28410:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44568:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27368:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28815:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44785:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38081:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27543:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15571:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37914:159;;;;;;;;;;;;;:::i;:::-;;44275:110;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26782:83;26819:13;26852:5;26845:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26782:83;:::o;27694:161::-;27769:4;27786:39;27795:12;:10;:12::i;:::-;27809:7;27818:6;27786:8;:39::i;:::-;27843:4;27836:11;;27694:161;;;;:::o;28960:87::-;29002:7;29029:10;;29022:17;;28960:87;:::o;25292:51::-;;;:::o;27059:95::-;27112:7;27139;;27132:14;;27059:95;:::o;45002:309::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45157:5:::1;45124:29;:38;;45116:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45274:29;45241:30;:62;;;;45002:309:::0;:::o;27863:313::-;27961:4;27978:36;27988:6;27996:9;28007:6;27978:9;:36::i;:::-;28025:121;28034:6;28042:12;:10;:12::i;:::-;28056:89;28094:6;28056:89;;;;;;;;;;;;;;;;;:11;:19;28068:6;28056:19;;;;;;;;;;;;;;;:33;28076:12;:10;:12::i;:::-;28056:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28025:8;:121::i;:::-;28164:4;28157:11;;27863:313;;;;;:::o;30037:253::-;30103:7;30142;;30131;:18;;30123:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30207:19;30230:10;:8;:10::i;:::-;30207:33;;30258:24;30270:11;30258:7;:11;;:24;;;;:::i;:::-;30251:31;;;30037:253;;;:::o;45319:192::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45401:45:::1;45418:4;45425:7;:5;:7::i;:::-;45434:11;45401:8;:45::i;:::-;45457:46;45475:4;45482:7;:5;:7::i;:::-;45491:11;45457:9;:46::i;:::-;45319:192:::0;:::o;26968:83::-;27009:5;27034:9;;;;;;;;;;;27027:16;;26968:83;:::o;28184:218::-;28272:4;28289:83;28298:12;:10;:12::i;:::-;28312:7;28321:50;28360:10;28321:11;:25;28333:12;:10;:12::i;:::-;28321:25;;;;;;;;;;;;;;;:34;28347:7;28321:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28289:8;:83::i;:::-;28390:4;28383:11;;28184:218;;;;:::o;29055:377::-;29107:14;29124:12;:10;:12::i;:::-;29107:29;;29156:11;:19;29168:6;29156:19;;;;;;;;;;;;;;;;;;;;;;;;;29155:20;29147:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29236:15;29260:19;29271:7;29260:10;:19::i;:::-;29235:44;;;;;;;29308:28;29328:7;29308;:15;29316:6;29308:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29290:7;:15;29298:6;29290:15;;;;;;;;;;;;;;;:46;;;;29357:20;29369:7;29357;;:11;;:20;;;;:::i;:::-;29347:7;:30;;;;29401:23;29416:7;29401:10;;:14;;:23;;;;:::i;:::-;29388:10;:36;;;;29055:377;;;:::o;31245:352::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31340:42:::1;31329:53;;:7;:53;;;;31321:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31443:17;:26;31461:7;31443:26;;;;;;;;;;;;;;;;;;;;;;;;;31442:27;31434:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31544:4;31515:17;:26;31533:7;31515:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;31559:16;31581:7;31559:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31245:352:::0;:::o;29440:436::-;29530:7;29569;;29558;:18;;29550:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29628:17;29623:246;;29663:15;29687:19;29698:7;29687:10;:19::i;:::-;29662:44;;;;;;;29728:7;29721:14;;;;;29623:246;29770:23;29801:19;29812:7;29801:10;:19::i;:::-;29768:52;;;;;;;29842:15;29835:22;;;29440:436;;;;;:::o;25350:38::-;;;:::o;25433:40::-;;;;;;;;;;;;;:::o;37750:156::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37804:23:::1;37830:24;37848:4;37830:9;:24::i;:::-;37804:50;;37865:33;37882:15;37865:16;:33::i;:::-;14917:1;37750:156::o:0;32634:123::-;32698:4;32722:18;:27;32741:7;32722:27;;;;;;;;;;;;;;;;;;;;;;;;;32715:34;;32634:123;;;:::o;44393:167::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44479:1:::1;44469:6;:11;;:26;;;;;44494:1;44484:6;:11;;44469:26;44461:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;44546:6;44536:7;:16;;;;44393:167:::0;:::o;27162:198::-;27228:7;27252:11;:20;27264:7;27252:20;;;;;;;;;;;;;;;;;;;;;;;;;27248:49;;;27281:7;:16;27289:7;27281:16;;;;;;;;;;;;;;;;27274:23;;;;27248:49;27315:37;27335:7;:16;27343:7;27335:16;;;;;;;;;;;;;;;;27315:19;:37::i;:::-;27308:44;;27162:198;;;;:::o;15271:148::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15378:1:::1;15341:40;;15362:6;::::0;::::1;;;;;;;;15341:40;;;;;;;;;;;;15409:1;15392:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15271:148::o:0;31605:500::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31694:17:::1;:26;31712:7;31694:26;;;;;;;;;;;;;;;;;;;;;;;;;31686:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31767:9;31762:336;31786:16;:23;;;;31782:1;:27;31762:336;;;31858:7;31835:30;;:16;31852:1;31835:19;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;31831:256;;;31908:16;31951:1;31925:16;:23;;;;:27;31908:45;;;;;;;;;;;;;;;;;;;;;;;;;31886:16;31903:1;31886:19;;;;;;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;32001:5;31972:17;:26;31990:7;31972:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32025:16;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32066:5;;31831:256;31811:3;;;;;;;31762:336;;;;31605:500:::0;:::o;29886:141::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29972:1:::1;29957:12;;:16;29942:12;:31;;;;30018:1;30001:14;;:18;29984:14;:35;;;;29886:141::o:0;28687:120::-;28755:4;28779:11;:20;28791:7;28779:20;;;;;;;;;;;;;;;;;;;;;;;;;28772:27;;28687:120;;;:::o;14637:79::-;14675:7;14702:6;;;;;;;;;;;14695:13;;14637:79;:::o;26873:87::-;26912:13;26945:7;26938:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26873:87;:::o;28410:269::-;28503:4;28520:129;28529:12;:10;:12::i;:::-;28543:7;28552:96;28591:15;28552:96;;;;;;;;;;;;;;;;;:11;:25;28564:12;:10;:12::i;:::-;28552:25;;;;;;;;;;;;;;;:34;28578:7;28552:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;28520:8;:129::i;:::-;28667:4;28660:11;;28410:269;;;;:::o;44568:209::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44672:1:::1;44656:12;:17;;:38;;;;;44693:1;44677:12;:17;;44656:38;44648:82;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;44757:12;44741:13;:28;;;;44568:209:::0;:::o;27368:167::-;27446:4;27463:42;27473:12;:10;:12::i;:::-;27487:9;27498:6;27463:9;:42::i;:::-;27523:4;27516:11;;27368:167;;;;:::o;28815:137::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28936:8:::1;28906:18;:27;28925:7;28906:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;28815:137:::0;;:::o;44785:209::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44889:1:::1;44873:12;:17;;:38;;;;;44910:1;44894:12;:17;;44873:38;44865:82;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;44974:12;44958:13;:28;;;;44785:209:::0;:::o;38081:148::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38199:22:::1;38175:21;;:46;;;;;;;;;;;;;;;;;;38081:148:::0;:::o;27543:143::-;27624:7;27651:11;:18;27663:5;27651:18;;;;;;;;;;;;;;;:27;27670:7;27651:27;;;;;;;;;;;;;;;;27644:34;;27543:143;;;;:::o;15571:244::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15680:1:::1;15660:22;;:8;:22;;;;15652:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15770:8;15741:38;;15762:6;::::0;::::1;;;;;;;;15741:38;;;;;;;;;;;;15799:8;15790:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15571:244:::0;:::o;37914:159::-;14857:12;:10;:12::i;:::-;14847:22;;:6;;;;;;;;;;:22;;;14839:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37966:26:::1;37995:21;37966:50;;38027:38;38046:18;38027;:38::i;:::-;14917:1;37914:159::o:0;44275:110::-;44321:15;44356:21;44349:28;;44275:110;:::o;458:106::-;511:15;546:10;539:17;;458:106;:::o;32765:337::-;32875:1;32858:19;;:5;:19;;;;32850:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32956:1;32937:21;;:7;:21;;;;32929:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33040:6;33010:11;:18;33022:5;33010:18;;;;;;;;;;;;;;;:27;33029:7;33010:27;;;;;;;;;;;;;;;:36;;;;33078:7;33062:32;;33071:5;33062:32;;;33087:6;33062:32;;;;;;;;;;;;;;;;;;32765:337;;;:::o;33110:1924::-;33225:1;33207:20;;:6;:20;;;;33199:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33309:1;33288:23;;:9;:23;;;;33280:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33379:1;33370:6;:10;33362:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33451:7;:5;:7::i;:::-;33441:17;;:6;:17;;;;:41;;;;;33475:7;:5;:7::i;:::-;33462:20;;:9;:20;;;;33441:41;33437:458;;;33508:17;:28;33526:9;33508:28;;;;;;;;;;;;;;;;;;;;;;;;;33507:29;33499:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33593:13;33583:23;;:6;:23;;;:64;;;;;33631:15;33610:37;;:9;:37;;;;33583:64;:99;;;;;33653:18;:29;33672:9;33653:29;;;;;;;;;;;;;;;;;;;;;;;;;33651:31;33583:99;33579:305;;;33721:12;;33711:6;:22;;33703:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33823:14;;33813:6;33790:20;33800:9;33790;:20::i;:::-;:29;:47;;33782:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33579:305;33437:458;34191:28;34222:24;34240:4;34222:9;:24::i;:::-;34191:55;;34259:24;34310:30;;34286:20;:54;;34259:81;;34356:16;;;;;;;;;;;34355:17;:42;;;;;34376:21;;;;;;;;;;;34355:42;:65;;;;;34401:19;34355:65;:92;;;;;34434:13;34424:23;;:6;:23;;;;34355:92;34351:258;;;34487:30;;34464:53;;34561:36;34576:20;34561:14;:36::i;:::-;34351:258;34682:12;34697:4;34682:19;;34801:18;:26;34820:6;34801:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;34831:18;:29;34850:9;34831:29;;;;;;;;;;;;;;;;;;;;;;;;;34801:59;34798:105;;;34886:5;34876:15;;34798:105;34976:50;34991:6;34999:9;35010:6;35018:7;34976:14;:50::i;:::-;33110:1924;;;;;;:::o;4545:192::-;4631:7;4664:1;4659;:6;;4667:12;4651:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4691:9;4707:1;4703;:5;4691:17;;4728:1;4721:8;;;4545:192;;;;;:::o;43448:163::-;43489:7;43510:15;43527;43546:19;:17;:19::i;:::-;43509:56;;;;43583:20;43595:7;43583;:11;;:20;;;;:::i;:::-;43576:27;;;;43448:163;:::o;5923:132::-;5981:7;6008:39;6012:1;6015;6008:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6001:46;;5923:132;;;;:::o;3660:181::-;3718:7;3738:9;3754:1;3750;:5;3738:17;;3779:1;3774;:6;;3766:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3832:1;3825:8;;;3660:181;;;;:::o;42143:518::-;42202:7;42211;42220;42229;42238;42247;42268:23;42293:12;42307:30;42341:63;42353:7;42362;;42371:32;42389:13;;42371;;:17;;:32;;;;:::i;:::-;42341:11;:63::i;:::-;42267:137;;;;;;42415:19;42437:10;:8;:10::i;:::-;42415:32;;42459:15;42476:23;42501:12;42517:39;42529:7;42538:4;42544:11;42517;:39::i;:::-;42458:98;;;;;;42575:7;42584:15;42601:4;42607:15;42624:4;42630:22;42567:86;;;;;;;;;;;;;;;;;;;42143:518;;;;;;;:::o;4115:136::-;4173:7;4200:43;4204:1;4207;4200:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4193:50;;4115:136;;;;:::o;36371:589::-;36497:21;36535:1;36521:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36497:40;;36566:4;36548;36553:1;36548:7;;;;;;;;;;;;;:23;;;;;;;;;;;36592:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36582:4;36587:1;36582:7;;;;;;;;;;;;;:32;;;;;;;;;;;36627:62;36644:4;36659:15;36677:11;36627:8;:62::i;:::-;36728:15;:66;;;36809:11;36835:1;36879:4;36906;36926:15;36728:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36371:589;;:::o;37489:111::-;37552:23;;;;;;;;;;;:32;;:40;37585:6;37552:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37489:111;:::o;35042:1321::-;25931:4;25912:16;;:23;;;;;;;;;;;;;;;;;;35127:19:::1;35149:77;35193:32;35211:13;;35193;;:17;;:32;;;;:::i;:::-;35149:39;35174:13;;35149:20;:24;;:39;;;;:::i;:::-;:43;;:77;;;;:::i;:::-;35127:99;;35237:17;35257:37;35282:11;35257:20;:24;;:37;;;;:::i;:::-;35237:57;;35358:12;35373:16;35387:1;35373:9;:13;;:16;;;;:::i;:::-;35358:31;;35400:17;35420:19;35434:4;35420:9;:13;;:19;;;;:::i;:::-;35400:39;;35717:22;35742:21;35717:46;;35808:20;35831:21;35840:11;35831:4;:8;;:21;;;;:::i;:::-;35808:44;;35863:30;35880:12;35863:16;:30::i;:::-;36024:16;36043:41;36069:14;36043:21;:25;;:41;;;;:::i;:::-;36024:60;;36095:18;36116:36;36139:12;36116:18;36129:4;36116:8;:12;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;36095:57;;36202:35;36215:9;36226:10;36202:12;:35::i;:::-;36255:43;36270:4;36276:10;36288:9;36255:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36311:44;36330:24;36343:10;36330:8;:12;;:24;;;;:::i;:::-;36311:18;:44::i;:::-;25946:1;;;;;;;;25977:5:::0;25958:16;;:24;;;;;;;;;;;;;;;;;;35042:1321;:::o;38237:819::-;38349:7;38345:40;;38371:14;:12;:14::i;:::-;38345:40;38402:11;:19;38414:6;38402:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;38426:11;:22;38438:9;38426:22;;;;;;;;;;;;;;;;;;;;;;;;;38425:23;38402:46;38398:597;;;38465:48;38487:6;38495:9;38506:6;38465:21;:48::i;:::-;38398:597;;;38536:11;:19;38548:6;38536:19;;;;;;;;;;;;;;;;;;;;;;;;;38535:20;:46;;;;;38559:11;:22;38571:9;38559:22;;;;;;;;;;;;;;;;;;;;;;;;;38535:46;38531:464;;;38598:46;38618:6;38626:9;38637:6;38598:19;:46::i;:::-;38531:464;;;38667:11;:19;38679:6;38667:19;;;;;;;;;;;;;;;;;;;;;;;;;38666:20;:47;;;;;38691:11;:22;38703:9;38691:22;;;;;;;;;;;;;;;;;;;;;;;;;38690:23;38666:47;38662:333;;;38730:44;38748:6;38756:9;38767:6;38730:17;:44::i;:::-;38662:333;;;38796:11;:19;38808:6;38796:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;38819:11;:22;38831:9;38819:22;;;;;;;;;;;;;;;;;;;;;;;;;38796:45;38792:203;;;38858:48;38880:6;38888:9;38899:6;38858:21;:48::i;:::-;38792:203;;;38939:44;38957:6;38965:9;38976:6;38939:17;:44::i;:::-;38792:203;38662:333;38531:464;38398:597;39011:7;39007:41;;39033:15;:13;:15::i;:::-;39007:41;38237:819;;;;:::o;43619:555::-;43669:7;43678;43698:15;43716:7;;43698:25;;43734:15;43752:7;;43734:25;;43775:9;43770:289;43794:9;:16;;;;43790:1;:20;43770:289;;;43860:7;43836;:21;43844:9;43854:1;43844:12;;;;;;;;;;;;;;;;;;;;;;;;;43836:21;;;;;;;;;;;;;;;;:31;:66;;;;43895:7;43871;:21;43879:9;43889:1;43879:12;;;;;;;;;;;;;;;;;;;;;;;;;43871:21;;;;;;;;;;;;;;;;:31;43836:66;43832:97;;;43912:7;;43921;;43904:25;;;;;;;;;43832:97;43954:34;43966:7;:21;43974:9;43984:1;43974:12;;;;;;;;;;;;;;;;;;;;;;;;;43966:21;;;;;;;;;;;;;;;;43954:7;:11;;:34;;;;:::i;:::-;43944:44;;44013:34;44025:7;:21;44033:9;44043:1;44033:12;;;;;;;;;;;;;;;;;;;;;;;;;44025:21;;;;;;;;;;;;;;;;44013:7;:11;;:34;;;;:::i;:::-;44003:44;;43812:3;;;;;;;43770:289;;;;44083:20;44095:7;;44083;;:11;;:20;;;;:::i;:::-;44073:7;:30;44069:61;;;44113:7;;44122;;44105:25;;;;;;;;44069:61;44149:7;44158;44141:25;;;;;;43619:555;;;:::o;6540:278::-;6626:7;6658:1;6654;:5;6661:12;6646:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6685:9;6701:1;6697;:5;;;;;;6685:17;;6809:1;6802:8;;;6540:278;;;;;:::o;42669:429::-;42776:7;42785;42794;42814:12;42829:28;42853:3;42829:19;42841:6;42829:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;42814:43;;42868:30;42901:43;42940:3;42901:34;42913:21;42901:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;42868:76;;42955:23;42981:44;43003:21;42981:17;42993:4;42981:7;:11;;:17;;;;:::i;:::-;:21;;:44;;;;:::i;:::-;42955:70;;43044:15;43061:4;43067:22;43036:54;;;;;;;;;42669:429;;;;;;;:::o;43106:334::-;43201:7;43210;43219;43239:15;43257:24;43269:11;43257:7;:11;;:24;;;;:::i;:::-;43239:42;;43292:12;43307:21;43316:11;43307:4;:8;;:21;;;;:::i;:::-;43292:36;;43339:23;43365:17;43377:4;43365:7;:11;;:17;;;;:::i;:::-;43339:43;;43401:7;43410:15;43427:4;43393:39;;;;;;;;;43106:334;;;;;;;:::o;4987:471::-;5045:7;5295:1;5290;:6;5286:47;;;5320:1;5313:8;;;;5286:47;5345:9;5361:1;5357;:5;5345:17;;5390:1;5385;5381;:5;;;;;;:10;5373:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5449:1;5442:8;;;4987:471;;;;;:::o;36968:513::-;37116:62;37133:4;37148:15;37166:11;37116:8;:62::i;:::-;37221:15;:31;;;37260:9;37293:4;37313:11;37339:1;37382;37425:7;:5;:7::i;:::-;37447:15;37221:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36968:513;;:::o;32113:332::-;32170:1;32159:7;;:12;:34;;;;;32192:1;32175:13;;:18;32159:34;:56;;;;;32214:1;32197:13;;:18;32159:56;32156:68;;;32217:7;;32156:68;32254:7;;32236:15;:25;;;;32296:13;;32272:21;:37;;;;32344:13;;32320:21;:37;;;;32380:1;32370:7;:11;;;;32408:1;32392:13;:17;;;;32436:1;32420:13;:17;;;;32113:332;:::o;40211:590::-;40314:15;40331:23;40356:12;40370:23;40395:12;40409:27;40440:19;40451:7;40440:10;:19::i;:::-;40313:146;;;;;;;;;;;;40488:28;40508:7;40488;:15;40496:6;40488:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40470:7;:15;40478:6;40470:15;;;;;;;;;;;;;;;:46;;;;40545:28;40565:7;40545;:15;40553:6;40545:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40527:7;:15;40535:6;40527:15;;;;;;;;;;;;;;;:46;;;;40605:39;40628:15;40605:7;:18;40613:9;40605:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;40584:7;:18;40592:9;40584:18;;;;;;;;;;;;;;;:60;;;;40655:44;40679:19;40655:23;:44::i;:::-;40710:23;40722:4;40728;40710:11;:23::i;:::-;40766:9;40749:44;;40758:6;40749:44;;;40777:15;40749:44;;;;;;;;;;;;;;;;;;40211:590;;;;;;;;;:::o;39601:602::-;39702:15;39719:23;39744:12;39758:23;39783:12;39797:27;39828:19;39839:7;39828:10;:19::i;:::-;39701:146;;;;;;;;;;;;39876:28;39896:7;39876;:15;39884:6;39876:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39858:7;:15;39866:6;39858:15;;;;;;;;;;;;;;;:46;;;;39936:39;39959:15;39936:7;:18;39944:9;39936:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39915:7;:18;39923:9;39915:18;;;;;;;;;;;;;;;:60;;;;40007:39;40030:15;40007:7;:18;40015:9;40007:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39986:7;:18;39994:9;39986:18;;;;;;;;;;;;;;;:60;;;;40057:44;40081:19;40057:23;:44::i;:::-;40112:23;40124:4;40130;40112:11;:23::i;:::-;40168:9;40151:44;;40160:6;40151:44;;;40179:15;40151:44;;;;;;;;;;;;;;;;;;39601:602;;;;;;;;;:::o;39064:529::-;39163:15;39180:23;39205:12;39219:23;39244:12;39258:27;39289:19;39300:7;39289:10;:19::i;:::-;39162:146;;;;;;;;;;;;39337:28;39357:7;39337;:15;39345:6;39337:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39319:7;:15;39327:6;39319:15;;;;;;;;;;;;;;;:46;;;;39397:39;39420:15;39397:7;:18;39405:9;39397:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39376:7;:18;39384:9;39376:18;;;;;;;;;;;;;;;:60;;;;39447:44;39471:19;39447:23;:44::i;:::-;39502:23;39514:4;39520;39502:11;:23::i;:::-;39558:9;39541:44;;39550:6;39541:44;;;39569:15;39541:44;;;;;;;;;;;;;;;;;;39064:529;;;;;;;;;:::o;40809:661::-;40912:15;40929:23;40954:12;40968:23;40993:12;41007:27;41038:19;41049:7;41038:10;:19::i;:::-;40911:146;;;;;;;;;;;;41086:28;41106:7;41086;:15;41094:6;41086:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41068:7;:15;41076:6;41068:15;;;;;;;;;;;;;;;:46;;;;41143:28;41163:7;41143;:15;41151:6;41143:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41125:7;:15;41133:6;41125:15;;;;;;;;;;;;;;;:46;;;;41203:39;41226:15;41203:7;:18;41211:9;41203:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41182:7;:18;41190:9;41182:18;;;;;;;;;;;;;;;:60;;;;41274:39;41297:15;41274:7;:18;41282:9;41274:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41253:7;:18;41261:9;41253:18;;;;;;;;;;;;;;;:60;;;;41324:44;41348:19;41324:23;:44::i;:::-;41379:23;41391:4;41397;41379:11;:23::i;:::-;41435:9;41418:44;;41427:6;41418:44;;;41446:15;41418:44;;;;;;;;;;;;;;;;;;40809:661;;;;;;;;;:::o;32453:173::-;32507:15;;32497:7;:25;;;;32549:21;;32533:13;:37;;;;32597:21;;32581:13;:37;;;;32453:173::o;41478:408::-;41559:19;41581:10;:8;:10::i;:::-;41559:32;;41602:27;41632:36;41656:11;41632:19;:23;;:36;;;;:::i;:::-;41602:66;;41704:47;41731:19;41704:7;:22;41720:4;41704:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;41679:7;:22;41695:4;41679:22;;;;;;;;;;;;;;;:72;;;;41765:11;:26;41785:4;41765:26;;;;;;;;;;;;;;;;;;;;;;;;;41762:116;;;41831:47;41858:19;41831:7;:22;41847:4;41831:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;41806:7;:22;41822:4;41806:22;;;;;;;;;;;;;;;:72;;;;41762:116;41478:408;;;:::o;41894:147::-;41972:17;41984:4;41972:7;;:11;;:17;;;;:::i;:::-;41962:7;:27;;;;42013:20;42028:4;42013:10;;:14;;:20;;;;:::i;:::-;42000:10;:33;;;;41894:147;;:::o

Swarm Source

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