ETH Price: $2,669.63 (+2.24%)

Token

BING BONG (BINGBONG)
 

Overview

Max Total Supply

1,000,000,000 BINGBONG

Holders

86

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,254,264.743400361 BINGBONG

Value
$0.00
0x6180441027cc27f63d3d25c43618199839f3570e
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:
BINGBONG

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-04
*/

pragma solidity ^0.6.12;

//SPDX-License-Identifier: MIT

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

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


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

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

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

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

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

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

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

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






















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

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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


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

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

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

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

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

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

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

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

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

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


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () 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;
    }
    
    /**
    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }*/
}


interface IFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);
    
    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(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    
    function createPair(address tokenA, address tokenB) external returns (address pair);
    
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    
    function migrator() external view returns (address);
    function setMigrator(address) external;
}

interface IPair {
    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 IRouter01 {
    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 IRouter02 is IRouter01 {
    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 BINGBONG is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isTxLimitExempt;
    mapping (address => bool) public _isBlacklisted;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 10**9 * (10 ** 9); //1 billion
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    
    string private constant _name = "BING BONG";
    string private constant _symbol = "BINGBONG";
    uint8 private constant _decimals = 9;
    
    uint256 public _taxFee = 4;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 2;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public _marketingFee = 6;
    uint256 private _previousMarketingFee = _marketingFee;

    uint256 private _extraFee = 0;
    uint256 private _previousextraFee = _extraFee;

    bool _isseller = false;
    
    //map token holders
    address [] public tokenHolder;
    uint256 public numberOfTokenHolders = 0;
    mapping(address => bool) public exist;
    address public marketingWallet;
    address private liquidityWallet;
    
    IRouter02 public router;
    address public pair;
    address private constant _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    uint256 public _maxWalletAmount = 30 * 10**6 * (10 ** 9); //3% of total supply
    uint256 public _maxTxAmount = 10 * 10**6 * (10 ** 9); //1% of total supply

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public minTokensBeforeSwap = 2 * 10**5 * (10 ** 9); //0.2%% of total supply;
    modifier lockTheSwap {inSwapAndLiquify = true; _; inSwapAndLiquify = false;}
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IRouter02 _router = IRouter02(_routerAddress);
        pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        
        marketingWallet = msg.sender;
        liquidityWallet= msg.sender;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isTxLimitExempt[owner()] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //view//////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    function name() public pure returns (string memory) {
        return _name;
    }

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

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

    function totalSupply() public 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 allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0));
        require(spender != address(0));

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function expectedRewards(address _sender) external view returns (uint256){
        uint256 _balance = address(this).balance;
        address sender = _sender;
        uint256 holdersBal = balanceOf(sender);
        uint totalExcludedBal;
        for(uint256 i = 0; i<_excluded.length; i++){
         totalExcludedBal = balanceOf(_excluded[i]).add(totalExcludedBal);   
        }
        uint256 rewards = holdersBal.mul(_balance).div(_tTotal.sub(balanceOf(pair)).sub(totalExcludedBal));
        return rewards;
    }
    
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    
    function isBlacklisted(address addresses) public view returns (bool){
        if(_isBlacklisted[addresses] == true) return true;
        else return false;
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Fonction//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    // @dev set Pair
    function setPair(address _newpair) external onlyOwner {
        require(_newpair != address(0), "ERC20: _newpair cannot be the zero address");
        pair = _newpair;
    }
    
    // @dev set Router
    function setRouter(address _newrouter) external onlyOwner {
        IRouter02 _router = IRouter02(_newrouter);
        router = _router;
    }
    
    function blacklistSingleWallet(address addresses, bool value) public onlyOwner(){
        _isBlacklisted[addresses] = value;
    }

    function blacklistMultipleWallets(address[] calldata addresses, bool value) public onlyOwner() {
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = value;
        }
    }
    
    function setFee(uint256 _newtaxFee, uint256 _newliquidityFee, uint256 _newmarketingFee, uint256 _newextraFee) public onlyOwner() {
        require(_newtaxFee.add(_newliquidityFee).add(_newmarketingFee) <= 20, "Total Fees can not be more than 20"); //the team cannot set the fees to more than 20%
        _taxFee = _newtaxFee;
        _liquidityFee = _newliquidityFee;
        _marketingFee = _newmarketingFee;
        _extraFee = _newextraFee;
    }
    
    function setMaxTxAmount(uint256 _newTxamount) external onlyOwner {
        _maxTxAmount = _newTxamount;
    }
    
    function setMaxWalletAmount(uint256 _newMaxWalletAmount) external onlyOwner() {
        _maxWalletAmount = _newMaxWalletAmount;
    }
    
    function setWallet(address _newmarketingWallet, address _newliquidityWallet) external onlyOwner {
        require(_newmarketingWallet != address(0), "ERC20: _newmarketingWallet cannot be the zero address");
        require(_newliquidityWallet != address(0), "ERC20: _newliquidityWallet cannot be the zero address");
        marketingWallet = _newmarketingWallet;
        liquidityWallet = _newliquidityWallet;
    }
    
    function clearstucktoken(address _token_address, uint256 _amount_percentage_token, uint256 _amount_percentage_eth) external onlyOwner() returns (bool) {
        bool ret = false;
        if (_amount_percentage_token > 0) {
            require(_amount_percentage_token <= 100, "Percentage amount must be lower or equal to 100");
            IERC20 token = IERC20(_token_address);
            uint256 amounttoken = token.balanceOf(address(this));
            require(amounttoken > 0, "Transfer amount must be greater than zero");
            ret = token.transfer(liquidityWallet, (amounttoken * _amount_percentage_token/100));
        }
        if (_amount_percentage_eth > 0) {
            require(_amount_percentage_eth <= 100, "Percentage amount must be lower or equal to 100");
            uint256 amounteth = address(this).balance;
            require(amounteth > 0, "Transfer amount must be greater than zero");
            payable(liquidityWallet).transfer(amounteth * _amount_percentage_eth/100);
            ret = true;
        }
        return ret;
    }
    
    function setSwapAndLiquifyEnabled(bool _status, uint256 _swapamount) public onlyOwner {
        swapAndLiquifyEnabled = _status;
        minTokensBeforeSwap = _swapamount;
        emit SwapAndLiquifyEnabledUpdated(_status);
    }
    
    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude 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 included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _rOwned[account] = _tOwned[account].mul(_getRate()); // update _rOwned[account]
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function excludeFromFee(address account, bool status) public onlyOwner {
        _isExcludedFromFee[account] = status;
    }
    
    function setIsTxLimitExempt(address account, bool status) external onlyOwner() {
        _isTxLimitExempt[account] = status;
    }
    
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }
    
    function 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);
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //transfer//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, 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 _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");
        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], 'Blacklisted address');
        
        // max wallet
        if (!_isTxLimitExempt[recipient] && recipient != address(this) && recipient != address(DEAD) && recipient != pair) {
            uint256 walletAmount = balanceOf(recipient);
            require((walletAmount + amount) <= _maxWalletAmount, "wallet limit exceeded");
        }
        
        // max tx
        if(!_isTxLimitExempt[sender] && !_isTxLimitExempt[recipient] && recipient != address(this) && recipient != address(DEAD)) {
            require(amount <= _maxTxAmount, "transaction limit exceeded");
        }
        
        // map history of holders
        if(!exist[recipient]) {
            tokenHolder.push(recipient);
            numberOfTokenHolders++;
            exist[recipient] = true;
        }
        
        // 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 pancake pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance >= _maxTxAmount) {contractTokenBalance = _maxTxAmount;}
        bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap;
        if (overMinTokenBalance && !inSwapAndLiquify && sender != pair && swapAndLiquifyEnabled) { // recipient != pair (swap for buys)
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //indicates if the transaction is a sell
        //if the transaction is a sell the _extraFee will be added
        _isseller = pair == recipient ? true : false;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(sender, recipient, amount, takeFee);
    }
    
    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        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 _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

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

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

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

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

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

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        uint256 _take_amount = _amount.mul((_liquidityFee).add(_marketingFee)).div(100);

        if (_isseller) {
            _take_amount = _amount.mul((_liquidityFee).add(_marketingFee).add(_extraFee)).div(100);
        }

        return _take_amount;
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _marketingFee == 0 && _liquidityFee == 0 && _extraFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        _previousextraFee = _extraFee;
        
        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
        _extraFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
        _extraFee = _previousextraFee;
    }
    
     //to recieve ETH from pancakeRouter when swaping
    receive() external payable {}
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //swap//////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        
        // split the contract balance into marketing and liquidity
        uint256 forMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 forLiquidity = contractTokenBalance.sub(forMarketing);
        
        //split the liquidity
        uint256 half = forLiquidity.div(2);
        uint256 otherHalf = forLiquidity.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(forMarketing);
        swapTokensForEth(toSwapForEth);
        
        // how much ETH did we just swap into?
        uint256 fromSwap = address(this).balance.sub(initialBalance);
        uint256 liquidityBalance = (fromSwap.mul(half)).div(toSwapForEth);
        
        payable(marketingWallet).transfer(fromSwap.sub(liquidityBalance));
        
        // add liquidity to uniswap
        addLiquidity(otherHalf, liquidityBalance);
        
        emit SwapAndLiquify(half, liquidityBalance, otherHalf);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the pancake pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        _approve(address(this), address(router), tokenAmount);
        
        // make the swap
        router.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(router), tokenAmount);

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token_address","type":"address"},{"internalType":"uint256","name":"_amount_percentage_token","type":"uint256"},{"internalType":"uint256","name":"_amount_percentage_eth","type":"uint256"}],"name":"clearstucktoken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"expectedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newtaxFee","type":"uint256"},{"internalType":"uint256","name":"_newliquidityFee","type":"uint256"},{"internalType":"uint256","name":"_newmarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newextraFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTxamount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newpair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newrouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_swapamount","type":"uint256"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newmarketingWallet","type":"address"},{"internalType":"address","name":"_newliquidityWallet","type":"address"}],"name":"setWallet","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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenHolder","outputs":[{"internalType":"address","name":"","type":"address"}],"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"},{"stateMutability":"payable","type":"receive"}]

608060405267081ad01a501bffff19600b556004600d819055600e556002600f819055601055600660118190556012556000601381905560148190556015805460ff19169055601755666a94d74f430000601d55662386f26fc10000601e55601f805461ff00191661010017905565b5e620f480006020553480156200008457600080fd5b50600062000091620003ca565b90506200009d620003ca565b600080546001600160a01b0319166001600160a01b03928316178155604051918316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b5460036000620000f7620003ca565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200016e57600080fd5b505afa15801562000183573d6000803e3d6000fd5b505050506040513d60208110156200019a57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620001eb57600080fd5b505afa15801562000200573d6000803e3d6000fd5b505050506040513d60208110156200021757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200026a57600080fd5b505af11580156200027f573d6000803e3d6000fd5b505050506040513d60208110156200029657600080fd5b5051601c80546001600160a01b03199081166001600160a01b0393841617909155601b805482169284169290921790915560198054339083168117909155601a8054909216179055600160066000620002ee620003ce565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260069092528120805490921660019081179092556008906200033e620003ce565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000370620003ca565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a76400006040518082815260200191505060405180910390a350620003dd565b3390565b6000546001600160a01b031690565b6135ff80620003ed6000396000f3fe6080604052600436106102cd5760003560e01c8063715018a611610175578063a9059cbb116100dc578063e5d41c6b11610095578063f2fde38b1161006f578063f2fde38b14610b4e578063f84ba65d14610b81578063f887ea4014610bbc578063fe575a8714610bd1576102d4565b8063e5d41c6b14610ad4578063ec28438a14610ae9578063f1b234ad14610b13576102d4565b8063a9059cbb14610934578063aebc98ef1461096d578063c0d78655146109ac578063c7bc06e5146109df578063dd62ed3e14610a5e578063df8408fe14610a99576102d4565b806388f820201161012e57806388f820201461084d5780638da5cb5b1461088057806395d89b4114610895578063a2a957bb146108aa578063a457c2d7146108e6578063a8aa1b311461091f576102d4565b8063715018a61461076257806375f0a8741461077757806377e5006f146107a85780637d1db4a5146107db5780638187f516146107f0578063862a4bf214610823576102d4565b80633685d419116102345780634dfefc4b116101ed5780636bc87c3a116101c75780636bc87c3a146106d35780636c0a24eb146106e85780636f60efbc146106fd57806370a082311461072f576102d4565b80634dfefc4b1461063a57806352390c021461066d5780635342acb4146106a0576102d4565b80633685d41914610548578063395093511461057b5780633b124fe7146105b45780633bd5d173146105c95780634549b039146105f35780634a74bb0214610625576102d4565b806322976e0d1161028657806322976e0d1461043457806323b872dd1461044957806325a51e0c1461048c57806327a14fc2146104c95780632d838119146104f3578063313ce5671461051d576102d4565b806306fdde03146102d9578063095ea7b31461036357806313114a9d146103b0578063178ef307146103d757806318160ddd146103ec5780631cdd3be314610401576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610c04565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610328578181015183820152602001610310565b50505050905090810190601f1680156103555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036f57600080fd5b5061039c6004803603604081101561038657600080fd5b506001600160a01b038135169060200135610c27565b604080519115158252519081900360200190f35b3480156103bc57600080fd5b506103c5610c45565b60408051918252519081900360200190f35b3480156103e357600080fd5b506103c5610c4b565b3480156103f857600080fd5b506103c5610c51565b34801561040d57600080fd5b5061039c6004803603602081101561042457600080fd5b50356001600160a01b0316610c5d565b34801561044057600080fd5b506103c5610c72565b34801561045557600080fd5b5061039c6004803603606081101561046c57600080fd5b506001600160a01b03813581169160208101359091169060400135610c78565b34801561049857600080fd5b506104c7600480360360408110156104af57600080fd5b506001600160a01b0381351690602001351515610cff565b005b3480156104d557600080fd5b506104c7600480360360208110156104ec57600080fd5b5035610d82565b3480156104ff57600080fd5b506103c56004803603602081101561051657600080fd5b5035610ddf565b34801561052957600080fd5b50610532610e41565b6040805160ff9092168252519081900360200190f35b34801561055457600080fd5b506104c76004803603602081101561056b57600080fd5b50356001600160a01b0316610e46565b34801561058757600080fd5b5061039c6004803603604081101561059e57600080fd5b506001600160a01b03813516906020013561104e565b3480156105c057600080fd5b506103c561109c565b3480156105d557600080fd5b506104c7600480360360208110156105ec57600080fd5b50356110a2565b3480156105ff57600080fd5b506103c56004803603604081101561061657600080fd5b5080359060200135151561117c565b34801561063157600080fd5b5061039c611214565b34801561064657600080fd5b5061039c6004803603602081101561065d57600080fd5b50356001600160a01b0316611222565b34801561067957600080fd5b506104c76004803603602081101561069057600080fd5b50356001600160a01b0316611237565b3480156106ac57600080fd5b5061039c600480360360208110156106c357600080fd5b50356001600160a01b03166113bd565b3480156106df57600080fd5b506103c56113db565b3480156106f457600080fd5b506103c56113e1565b34801561070957600080fd5b506104c76004803603604081101561072057600080fd5b508035151590602001356113e7565b34801561073b57600080fd5b506103c56004803603602081101561075257600080fd5b50356001600160a01b0316611493565b34801561076e57600080fd5b506104c76114f5565b34801561078357600080fd5b5061078c611597565b604080516001600160a01b039092168252519081900360200190f35b3480156107b457600080fd5b506103c5600480360360208110156107cb57600080fd5b50356001600160a01b03166115a6565b3480156107e757600080fd5b506103c5611659565b3480156107fc57600080fd5b506104c76004803603602081101561081357600080fd5b50356001600160a01b031661165f565b34801561082f57600080fd5b5061078c6004803603602081101561084657600080fd5b503561171e565b34801561085957600080fd5b5061039c6004803603602081101561087057600080fd5b50356001600160a01b0316611745565b34801561088c57600080fd5b5061078c611763565b3480156108a157600080fd5b506102ee611772565b3480156108b657600080fd5b506104c7600480360360808110156108cd57600080fd5b5080359060208101359060408101359060600135611794565b3480156108f257600080fd5b5061039c6004803603604081101561090957600080fd5b506001600160a01b03813516906020013561184d565b34801561092b57600080fd5b5061078c6118b5565b34801561094057600080fd5b5061039c6004803603604081101561095757600080fd5b506001600160a01b0381351690602001356118c4565b34801561097957600080fd5b5061039c6004803603606081101561099057600080fd5b506001600160a01b0381351690602081013590604001356118d8565b3480156109b857600080fd5b506104c7600480360360208110156109cf57600080fd5b50356001600160a01b0316611b8a565b3480156109eb57600080fd5b506104c760048036036040811015610a0257600080fd5b810190602081018135640100000000811115610a1d57600080fd5b820183602082011115610a2f57600080fd5b80359060200191846020830284011164010000000083111715610a5157600080fd5b9193509150351515611c04565b348015610a6a57600080fd5b506103c560048036036040811015610a8157600080fd5b506001600160a01b0381358116916020013516611cb7565b348015610aa557600080fd5b506104c760048036036040811015610abc57600080fd5b506001600160a01b0381351690602001351515611ce2565b348015610ae057600080fd5b506103c5611d65565b348015610af557600080fd5b506104c760048036036020811015610b0c57600080fd5b5035611d6b565b348015610b1f57600080fd5b506104c760048036036040811015610b3657600080fd5b506001600160a01b0381358116916020013516611dc8565b348015610b5a57600080fd5b506104c760048036036020811015610b7157600080fd5b50356001600160a01b0316611ed8565b348015610b8d57600080fd5b506104c760048036036040811015610ba457600080fd5b506001600160a01b0381351690602001351515611fd0565b348015610bc857600080fd5b5061078c612053565b348015610bdd57600080fd5b5061039c60048036036020811015610bf457600080fd5b50356001600160a01b0316612062565b60408051808201909152600981526842494e4720424f4e4760b81b602082015290565b6000610c3b610c34612098565b848461209c565b5060015b92915050565b600c5490565b60175481565b670de0b6b3a764000090565b60096020526000908152604090205460ff1681565b60115481565b6000610c85848484612124565b610cf584610c91612098565b610cf085604051806060016040528060288152602001613484602891396001600160a01b038a16600090815260056020526040812090610ccf612098565b6001600160a01b031681526020810191909152604001600020549190612590565b61209c565b5060019392505050565b610d07612098565b6000546001600160a01b03908116911614610d57576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b610d8a612098565b6000546001600160a01b03908116911614610dda576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b601d55565b6000600b54821115610e225760405162461bcd60e51b815260040180806020018281038252602a81526020018061338d602a913960400191505060405180910390fd5b6000610e2c612627565b9050610e38838261264a565b9150505b919050565b600990565b610e4e612098565b6000546001600160a01b03908116911614610e9e576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610f0b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b600a5481101561104a57816001600160a01b0316600a8281548110610f2f57fe5b6000918252602090912001546001600160a01b0316141561104257600a80546000198101908110610f5c57fe5b600091825260209091200154600a80546001600160a01b039092169183908110610f8257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610fda610fbb612627565b6001600160a01b03841660009081526004602052604090205490612693565b6001600160a01b038316600090815260036020908152604080832093909355600481528282208290556007905220805460ff19169055600a80548061101b57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561104a565b600101610f0e565b5050565b6000610c3b61105b612098565b84610cf0856005600061106c612098565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906126ec565b600d5481565b60006110ac612098565b6001600160a01b03811660009081526007602052604090205490915060ff16156111075760405162461bcd60e51b815260040180806020018281038252602c815260200180613579602c913960400191505060405180910390fd5b600061111283612746565b505050506001600160a01b03841660009081526003602052604090205491925061113e91905082612795565b6001600160a01b038316600090815260036020526040902055600b546111649082612795565b600b55600c5461117490846126ec565b600c55505050565b6000670de0b6b3a76400008311156111db576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816111fa5760006111eb84612746565b50939550610c3f945050505050565b600061120584612746565b50929550610c3f945050505050565b601f54610100900460ff1681565b60186020526000908152604090205460ff1681565b61123f612098565b6000546001600160a01b0390811691161461128f576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156112fd576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611357576001600160a01b03811660009081526003602052604090205461133d90610ddf565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b600f5481565b601d5481565b6113ef612098565b6000546001600160a01b0390811691161461143f576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b601f805461ff00191661010084151590810291909117909155602082815560408051928352517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599281900390910190a15050565b6001600160a01b03811660009081526007602052604081205460ff16156114d357506001600160a01b038116600090815260046020526040902054610e3c565b6001600160a01b038216600090815260036020526040902054610c3f90610ddf565b6114fd612098565b6000546001600160a01b0390811691161461154d576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6019546001600160a01b031681565b60004782826115b482611493565b90506000805b600a54811015611602576115f8826115f2600a84815481106115d857fe5b6000918252602090912001546001600160a01b0316611493565b906126ec565b91506001016115ba565b50601c5460009061164e9061163e90849061163890611629906001600160a01b0316611493565b670de0b6b3a764000090612795565b90612795565b6116488588612693565b9061264a565b979650505050505050565b601e5481565b611667612098565b6000546001600160a01b039081169116146116b7576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b0381166116fc5760405162461bcd60e51b815260040180806020018281038252602a81526020018061351a602a913960400191505060405180910390fd5b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6016818154811061172b57fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b60408051808201909152600881526742494e47424f4e4760c01b602082015290565b61179c612098565b6000546001600160a01b039081169116146117ec576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b60146117fc836115f287876126ec565b11156118395760405162461bcd60e51b81526004018080602001828103825260228152602001806133dd6022913960400191505060405180910390fd5b600d93909355600f91909155601155601355565b6000610c3b61185a612098565b84610cf0856040518060600160405280602581526020016135a56025913960056000611884612098565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612590565b601c546001600160a01b031681565b6000610c3b6118d1612098565b8484612124565b60006118e2612098565b6000546001600160a01b03908116911614611932576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b60008315611aba57606484111561197a5760405162461bcd60e51b815260040180806020018281038252602f815260200180613455602f913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905186916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156119c557600080fd5b505afa1580156119d9573d6000803e3d6000fd5b505050506040513d60208110156119ef57600080fd5b5051905080611a2f5760405162461bcd60e51b81526004018080602001828103825260298152602001806134cc6029913960400191505060405180910390fd5b601a546040805163a9059cbb60e01b81526001600160a01b039283166004820152606489850204602482015290519184169163a9059cbb916044808201926020929091908290030181600087803b158015611a8957600080fd5b505af1158015611a9d573d6000803e3d6000fd5b505050506040513d6020811015611ab357600080fd5b5051925050505b8215611b82576064831115611b005760405162461bcd60e51b815260040180806020018281038252602f815260200180613455602f913960400191505060405180910390fd5b4780611b3d5760405162461bcd60e51b81526004018080602001828103825260298152602001806134cc6029913960400191505060405180910390fd5b601a546040516001600160a01b039091169060648684020480156108fc02916000818181858888f19350505050158015611b7b573d6000803e3d6000fd5b5060019150505b949350505050565b611b92612098565b6000546001600160a01b03908116911614611be2576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b611c0c612098565b6000546001600160a01b03908116911614611c5c576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b60005b82811015611cb1578160096000868685818110611c7857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611c5f565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611cea612098565b6000546001600160a01b03908116911614611d3a576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60205481565b611d73612098565b6000546001600160a01b03908116911614611dc3576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b601e55565b611dd0612098565b6000546001600160a01b03908116911614611e20576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b038216611e655760405162461bcd60e51b81526004018080602001828103825260358152602001806133ff6035913960400191505060405180910390fd5b6001600160a01b038116611eaa5760405162461bcd60e51b81526004018080602001828103825260358152602001806135446035913960400191505060405180910390fd5b601980546001600160a01b039384166001600160a01b031991821617909155601a8054929093169116179055565b611ee0612098565b6000546001600160a01b03908116911614611f30576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b038116611f755760405162461bcd60e51b81526004018080602001828103825260268152602001806133b76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611fd8612098565b6000546001600160a01b03908116911614612028576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b601b546001600160a01b031681565b6001600160a01b03811660009081526009602052604081205460ff1615156001141561209057506001610e3c565b506000610e3c565b3390565b6001600160a01b0383166120af57600080fd5b6001600160a01b0382166120c257600080fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166121695760405162461bcd60e51b81526004018080602001828103825260258152602001806134f56025913960400191505060405180910390fd5b6001600160a01b0382166121ae5760405162461bcd60e51b815260040180806020018281038252602381526020018061336a6023913960400191505060405180910390fd5b600081116121ed5760405162461bcd60e51b81526004018080602001828103825260298152602001806134cc6029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff1615801561222f57506001600160a01b03821660009081526009602052604090205460ff16155b612276576040805162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015290519081900360640190fd5b6001600160a01b03821660009081526008602052604090205460ff161580156122a857506001600160a01b0382163014155b80156122bf57506001600160a01b03821661dead14155b80156122d95750601c546001600160a01b03838116911614155b1561233e5760006122e983611493565b9050601d54828201111561233c576040805162461bcd60e51b81526020600482015260156024820152741dd85b1b195d081b1a5b5a5d08195e18d959591959605a1b604482015290519081900360640190fd5b505b6001600160a01b03831660009081526008602052604090205460ff1615801561238057506001600160a01b03821660009081526008602052604090205460ff16155b801561239557506001600160a01b0382163014155b80156123ac57506001600160a01b03821661dead14155b1561240857601e54811115612408576040805162461bcd60e51b815260206004820152601a60248201527f7472616e73616374696f6e206c696d6974206578636565646564000000000000604482015290519081900360640190fd5b6001600160a01b03821660009081526018602052604090205460ff16612494576016805460018082019092557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319166001600160a01b03851690811790915560178054830190556000908152601860205260409020805460ff191690911790555b600061249f30611493565b9050601e5481106124af5750601e545b602054811080159081906124c65750601f5460ff16155b80156124e05750601c546001600160a01b03868116911614155b80156124f35750601f54610100900460ff165b1561250157612501826127d7565b601c546001906001600160a01b03868116911614612520576000612523565b60015b6015805460ff19169115159190911790556001600160a01b03861660009081526006602052604090205460ff168061257357506001600160a01b03851660009081526006602052604090205460ff165b1561257c575060005b6125888686868461290f565b505050505050565b6000818484111561261f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125e45781810151838201526020016125cc565b50505050905090810190601f1680156126115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000612634612a7d565b9092509050612643828261264a565b9250505090565b600061268c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf8565b9392505050565b6000826126a257506000610c3f565b828202828482816126af57fe5b041461268c5760405162461bcd60e51b81526004018080602001828103825260218152602001806134346021913960400191505060405180910390fd5b60008282018381101561268c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080600080600080600080600061275d8a612c5d565b925092509250600080600061277b8d8686612776612627565b612c99565b919f909e50909c50959a5093985091965092945050505050565b600061268c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612590565b601f805460ff19166001179055600f54601154600091612808916127fa916126ec565b601154611648908590612693565b905060006128168383612795565b9050600061282582600261264a565b905060006128338383612795565b905047600061284284876126ec565b905061284d81612ce9565b60006128594784612795565b9050600061286b836116488489612693565b6019549091506001600160a01b03166108fc6128878484612795565b6040518115909202916000818181858888f193505050501580156128af573d6000803e3d6000fd5b506128ba8582612e8f565b604080518781526020810183905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050601f805460ff1916905550505050505050565b8061291c5761291c612f47565b6001600160a01b03841660009081526007602052604090205460ff16801561295d57506001600160a01b03831660009081526007602052604090205460ff16155b156129725761296d848484612fa6565b612a70565b6001600160a01b03841660009081526007602052604090205460ff161580156129b357506001600160a01b03831660009081526007602052604090205460ff165b156129c35761296d8484846130ca565b6001600160a01b03841660009081526007602052604090205460ff16158015612a0557506001600160a01b03831660009081526007602052604090205460ff16155b15612a155761296d848484613173565b6001600160a01b03841660009081526007602052604090205460ff168015612a5557506001600160a01b03831660009081526007602052604090205460ff165b15612a655761296d8484846131b7565b612a70848484613173565b80611cb157611cb161322a565b600b546000908190670de0b6b3a7640000825b600a54811015612bba578260036000600a8481548110612aac57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b1157508160046000600a8481548110612aea57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b2e57600b54670de0b6b3a764000094509450505050612bf4565b612b6e60036000600a8481548110612b4257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612795565b9250612bb060046000600a8481548110612b8457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612795565b9150600101612a90565b50600b54612bd090670de0b6b3a764000061264a565b821015612bee57600b54670de0b6b3a7640000935093505050612bf4565b90925090505b9091565b60008183612c475760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125e45781810151838201526020016125cc565b506000838581612c5357fe5b0495945050505050565b600080600080612c6c85613244565b90506000612c7986613260565b90506000612c8b826116388986612795565b979296509094509092505050565b6000808080612ca88886612693565b90506000612cb68887612693565b90506000612cc48888612693565b90506000612cd6826116388686612795565b939b939a50919850919650505050505050565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612d1757fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d6b57600080fd5b505afa158015612d7f573d6000803e3d6000fd5b505050506040513d6020811015612d9557600080fd5b5051815182906001908110612da657fe5b6001600160a01b039283166020918202929092010152601b54612dcc913091168461209c565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612e52578181015183820152602001612e3a565b505050509050019650505050505050600060405180830381600087803b158015612e7b57600080fd5b505af1158015612588573d6000803e3d6000fd5b601b54612ea79030906001600160a01b03168461209c565b601b54601a546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612f1c57600080fd5b505af1158015612f30573d6000803e3d6000fd5b50505050506040513d6060811015611cb157600080fd5b600d54158015612f575750601154155b8015612f635750600f54155b8015612f6f5750601354155b15612f7957612fa4565b600d8054600e5560118054601255600f80546010556013805460145560009384905591839055829055555b565b600080600080600080612fb887612746565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fea9088612795565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130199087612795565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461304890866126ec565b6001600160a01b03891660009081526003602052604090205561306a816132bc565b6130748483613345565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806130dc87612746565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061310e9087612795565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461314490846126ec565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461304890866126ec565b60008060008060008061318587612746565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130199087612795565b6000806000806000806131c987612746565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506131fb9088612795565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461310e9087612795565b600e54600d55601254601155601054600f55601454601355565b6000610c3f6064611648600d548561269390919063ffffffff16565b6000806132896064611648613282601154600f546126ec90919063ffffffff16565b8690612693565b60155490915060ff1615610c3f5761268c60646116486132826013546115f2601154600f546126ec90919063ffffffff16565b60006132c6612627565b905060006132d48383612693565b306000908152600360205260409020549091506132f190826126ec565b3060009081526003602090815260408083209390935560079052205460ff1615613340573060009081526004602052604090205461332f90846126ec565b306000908152600460205260409020555b505050565b600b546133529083612795565b600b55600c5461336290826126ec565b600c55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373546f74616c20466565732063616e206e6f74206265206d6f7265207468616e20323045524332303a205f6e65776d61726b6574696e6757616c6c65742063616e6e6f7420626520746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7750657263656e7461676520616d6f756e74206d757374206265206c6f776572206f7220657175616c20746f2031303045524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a205f6e6577706169722063616e6e6f7420626520746865207a65726f206164647265737345524332303a205f6e65776c697175696469747957616c6c65742063616e6e6f7420626520746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1ebe1167a82568c53668079afa6b5c25ae22a0ccdb2cb1e7c6cfb860d7f7c5b64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c8063715018a611610175578063a9059cbb116100dc578063e5d41c6b11610095578063f2fde38b1161006f578063f2fde38b14610b4e578063f84ba65d14610b81578063f887ea4014610bbc578063fe575a8714610bd1576102d4565b8063e5d41c6b14610ad4578063ec28438a14610ae9578063f1b234ad14610b13576102d4565b8063a9059cbb14610934578063aebc98ef1461096d578063c0d78655146109ac578063c7bc06e5146109df578063dd62ed3e14610a5e578063df8408fe14610a99576102d4565b806388f820201161012e57806388f820201461084d5780638da5cb5b1461088057806395d89b4114610895578063a2a957bb146108aa578063a457c2d7146108e6578063a8aa1b311461091f576102d4565b8063715018a61461076257806375f0a8741461077757806377e5006f146107a85780637d1db4a5146107db5780638187f516146107f0578063862a4bf214610823576102d4565b80633685d419116102345780634dfefc4b116101ed5780636bc87c3a116101c75780636bc87c3a146106d35780636c0a24eb146106e85780636f60efbc146106fd57806370a082311461072f576102d4565b80634dfefc4b1461063a57806352390c021461066d5780635342acb4146106a0576102d4565b80633685d41914610548578063395093511461057b5780633b124fe7146105b45780633bd5d173146105c95780634549b039146105f35780634a74bb0214610625576102d4565b806322976e0d1161028657806322976e0d1461043457806323b872dd1461044957806325a51e0c1461048c57806327a14fc2146104c95780632d838119146104f3578063313ce5671461051d576102d4565b806306fdde03146102d9578063095ea7b31461036357806313114a9d146103b0578063178ef307146103d757806318160ddd146103ec5780631cdd3be314610401576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610c04565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610328578181015183820152602001610310565b50505050905090810190601f1680156103555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036f57600080fd5b5061039c6004803603604081101561038657600080fd5b506001600160a01b038135169060200135610c27565b604080519115158252519081900360200190f35b3480156103bc57600080fd5b506103c5610c45565b60408051918252519081900360200190f35b3480156103e357600080fd5b506103c5610c4b565b3480156103f857600080fd5b506103c5610c51565b34801561040d57600080fd5b5061039c6004803603602081101561042457600080fd5b50356001600160a01b0316610c5d565b34801561044057600080fd5b506103c5610c72565b34801561045557600080fd5b5061039c6004803603606081101561046c57600080fd5b506001600160a01b03813581169160208101359091169060400135610c78565b34801561049857600080fd5b506104c7600480360360408110156104af57600080fd5b506001600160a01b0381351690602001351515610cff565b005b3480156104d557600080fd5b506104c7600480360360208110156104ec57600080fd5b5035610d82565b3480156104ff57600080fd5b506103c56004803603602081101561051657600080fd5b5035610ddf565b34801561052957600080fd5b50610532610e41565b6040805160ff9092168252519081900360200190f35b34801561055457600080fd5b506104c76004803603602081101561056b57600080fd5b50356001600160a01b0316610e46565b34801561058757600080fd5b5061039c6004803603604081101561059e57600080fd5b506001600160a01b03813516906020013561104e565b3480156105c057600080fd5b506103c561109c565b3480156105d557600080fd5b506104c7600480360360208110156105ec57600080fd5b50356110a2565b3480156105ff57600080fd5b506103c56004803603604081101561061657600080fd5b5080359060200135151561117c565b34801561063157600080fd5b5061039c611214565b34801561064657600080fd5b5061039c6004803603602081101561065d57600080fd5b50356001600160a01b0316611222565b34801561067957600080fd5b506104c76004803603602081101561069057600080fd5b50356001600160a01b0316611237565b3480156106ac57600080fd5b5061039c600480360360208110156106c357600080fd5b50356001600160a01b03166113bd565b3480156106df57600080fd5b506103c56113db565b3480156106f457600080fd5b506103c56113e1565b34801561070957600080fd5b506104c76004803603604081101561072057600080fd5b508035151590602001356113e7565b34801561073b57600080fd5b506103c56004803603602081101561075257600080fd5b50356001600160a01b0316611493565b34801561076e57600080fd5b506104c76114f5565b34801561078357600080fd5b5061078c611597565b604080516001600160a01b039092168252519081900360200190f35b3480156107b457600080fd5b506103c5600480360360208110156107cb57600080fd5b50356001600160a01b03166115a6565b3480156107e757600080fd5b506103c5611659565b3480156107fc57600080fd5b506104c76004803603602081101561081357600080fd5b50356001600160a01b031661165f565b34801561082f57600080fd5b5061078c6004803603602081101561084657600080fd5b503561171e565b34801561085957600080fd5b5061039c6004803603602081101561087057600080fd5b50356001600160a01b0316611745565b34801561088c57600080fd5b5061078c611763565b3480156108a157600080fd5b506102ee611772565b3480156108b657600080fd5b506104c7600480360360808110156108cd57600080fd5b5080359060208101359060408101359060600135611794565b3480156108f257600080fd5b5061039c6004803603604081101561090957600080fd5b506001600160a01b03813516906020013561184d565b34801561092b57600080fd5b5061078c6118b5565b34801561094057600080fd5b5061039c6004803603604081101561095757600080fd5b506001600160a01b0381351690602001356118c4565b34801561097957600080fd5b5061039c6004803603606081101561099057600080fd5b506001600160a01b0381351690602081013590604001356118d8565b3480156109b857600080fd5b506104c7600480360360208110156109cf57600080fd5b50356001600160a01b0316611b8a565b3480156109eb57600080fd5b506104c760048036036040811015610a0257600080fd5b810190602081018135640100000000811115610a1d57600080fd5b820183602082011115610a2f57600080fd5b80359060200191846020830284011164010000000083111715610a5157600080fd5b9193509150351515611c04565b348015610a6a57600080fd5b506103c560048036036040811015610a8157600080fd5b506001600160a01b0381358116916020013516611cb7565b348015610aa557600080fd5b506104c760048036036040811015610abc57600080fd5b506001600160a01b0381351690602001351515611ce2565b348015610ae057600080fd5b506103c5611d65565b348015610af557600080fd5b506104c760048036036020811015610b0c57600080fd5b5035611d6b565b348015610b1f57600080fd5b506104c760048036036040811015610b3657600080fd5b506001600160a01b0381358116916020013516611dc8565b348015610b5a57600080fd5b506104c760048036036020811015610b7157600080fd5b50356001600160a01b0316611ed8565b348015610b8d57600080fd5b506104c760048036036040811015610ba457600080fd5b506001600160a01b0381351690602001351515611fd0565b348015610bc857600080fd5b5061078c612053565b348015610bdd57600080fd5b5061039c60048036036020811015610bf457600080fd5b50356001600160a01b0316612062565b60408051808201909152600981526842494e4720424f4e4760b81b602082015290565b6000610c3b610c34612098565b848461209c565b5060015b92915050565b600c5490565b60175481565b670de0b6b3a764000090565b60096020526000908152604090205460ff1681565b60115481565b6000610c85848484612124565b610cf584610c91612098565b610cf085604051806060016040528060288152602001613484602891396001600160a01b038a16600090815260056020526040812090610ccf612098565b6001600160a01b031681526020810191909152604001600020549190612590565b61209c565b5060019392505050565b610d07612098565b6000546001600160a01b03908116911614610d57576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b610d8a612098565b6000546001600160a01b03908116911614610dda576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b601d55565b6000600b54821115610e225760405162461bcd60e51b815260040180806020018281038252602a81526020018061338d602a913960400191505060405180910390fd5b6000610e2c612627565b9050610e38838261264a565b9150505b919050565b600990565b610e4e612098565b6000546001600160a01b03908116911614610e9e576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610f0b576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015290519081900360640190fd5b60005b600a5481101561104a57816001600160a01b0316600a8281548110610f2f57fe5b6000918252602090912001546001600160a01b0316141561104257600a80546000198101908110610f5c57fe5b600091825260209091200154600a80546001600160a01b039092169183908110610f8257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610fda610fbb612627565b6001600160a01b03841660009081526004602052604090205490612693565b6001600160a01b038316600090815260036020908152604080832093909355600481528282208290556007905220805460ff19169055600a80548061101b57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561104a565b600101610f0e565b5050565b6000610c3b61105b612098565b84610cf0856005600061106c612098565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906126ec565b600d5481565b60006110ac612098565b6001600160a01b03811660009081526007602052604090205490915060ff16156111075760405162461bcd60e51b815260040180806020018281038252602c815260200180613579602c913960400191505060405180910390fd5b600061111283612746565b505050506001600160a01b03841660009081526003602052604090205491925061113e91905082612795565b6001600160a01b038316600090815260036020526040902055600b546111649082612795565b600b55600c5461117490846126ec565b600c55505050565b6000670de0b6b3a76400008311156111db576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816111fa5760006111eb84612746565b50939550610c3f945050505050565b600061120584612746565b50929550610c3f945050505050565b601f54610100900460ff1681565b60186020526000908152604090205460ff1681565b61123f612098565b6000546001600160a01b0390811691161461128f576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156112fd576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611357576001600160a01b03811660009081526003602052604090205461133d90610ddf565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b600f5481565b601d5481565b6113ef612098565b6000546001600160a01b0390811691161461143f576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b601f805461ff00191661010084151590810291909117909155602082815560408051928352517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599281900390910190a15050565b6001600160a01b03811660009081526007602052604081205460ff16156114d357506001600160a01b038116600090815260046020526040902054610e3c565b6001600160a01b038216600090815260036020526040902054610c3f90610ddf565b6114fd612098565b6000546001600160a01b0390811691161461154d576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6019546001600160a01b031681565b60004782826115b482611493565b90506000805b600a54811015611602576115f8826115f2600a84815481106115d857fe5b6000918252602090912001546001600160a01b0316611493565b906126ec565b91506001016115ba565b50601c5460009061164e9061163e90849061163890611629906001600160a01b0316611493565b670de0b6b3a764000090612795565b90612795565b6116488588612693565b9061264a565b979650505050505050565b601e5481565b611667612098565b6000546001600160a01b039081169116146116b7576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b0381166116fc5760405162461bcd60e51b815260040180806020018281038252602a81526020018061351a602a913960400191505060405180910390fd5b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6016818154811061172b57fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b60408051808201909152600881526742494e47424f4e4760c01b602082015290565b61179c612098565b6000546001600160a01b039081169116146117ec576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b60146117fc836115f287876126ec565b11156118395760405162461bcd60e51b81526004018080602001828103825260228152602001806133dd6022913960400191505060405180910390fd5b600d93909355600f91909155601155601355565b6000610c3b61185a612098565b84610cf0856040518060600160405280602581526020016135a56025913960056000611884612098565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612590565b601c546001600160a01b031681565b6000610c3b6118d1612098565b8484612124565b60006118e2612098565b6000546001600160a01b03908116911614611932576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b60008315611aba57606484111561197a5760405162461bcd60e51b815260040180806020018281038252602f815260200180613455602f913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905186916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156119c557600080fd5b505afa1580156119d9573d6000803e3d6000fd5b505050506040513d60208110156119ef57600080fd5b5051905080611a2f5760405162461bcd60e51b81526004018080602001828103825260298152602001806134cc6029913960400191505060405180910390fd5b601a546040805163a9059cbb60e01b81526001600160a01b039283166004820152606489850204602482015290519184169163a9059cbb916044808201926020929091908290030181600087803b158015611a8957600080fd5b505af1158015611a9d573d6000803e3d6000fd5b505050506040513d6020811015611ab357600080fd5b5051925050505b8215611b82576064831115611b005760405162461bcd60e51b815260040180806020018281038252602f815260200180613455602f913960400191505060405180910390fd5b4780611b3d5760405162461bcd60e51b81526004018080602001828103825260298152602001806134cc6029913960400191505060405180910390fd5b601a546040516001600160a01b039091169060648684020480156108fc02916000818181858888f19350505050158015611b7b573d6000803e3d6000fd5b5060019150505b949350505050565b611b92612098565b6000546001600160a01b03908116911614611be2576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b611c0c612098565b6000546001600160a01b03908116911614611c5c576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b60005b82811015611cb1578160096000868685818110611c7857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611c5f565b50505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611cea612098565b6000546001600160a01b03908116911614611d3a576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60205481565b611d73612098565b6000546001600160a01b03908116911614611dc3576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b601e55565b611dd0612098565b6000546001600160a01b03908116911614611e20576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b038216611e655760405162461bcd60e51b81526004018080602001828103825260358152602001806133ff6035913960400191505060405180910390fd5b6001600160a01b038116611eaa5760405162461bcd60e51b81526004018080602001828103825260358152602001806135446035913960400191505060405180910390fd5b601980546001600160a01b039384166001600160a01b031991821617909155601a8054929093169116179055565b611ee0612098565b6000546001600160a01b03908116911614611f30576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b038116611f755760405162461bcd60e51b81526004018080602001828103825260268152602001806133b76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611fd8612098565b6000546001600160a01b03908116911614612028576040805162461bcd60e51b815260206004820181905260248201526000805160206134ac833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b601b546001600160a01b031681565b6001600160a01b03811660009081526009602052604081205460ff1615156001141561209057506001610e3c565b506000610e3c565b3390565b6001600160a01b0383166120af57600080fd5b6001600160a01b0382166120c257600080fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166121695760405162461bcd60e51b81526004018080602001828103825260258152602001806134f56025913960400191505060405180910390fd5b6001600160a01b0382166121ae5760405162461bcd60e51b815260040180806020018281038252602381526020018061336a6023913960400191505060405180910390fd5b600081116121ed5760405162461bcd60e51b81526004018080602001828103825260298152602001806134cc6029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff1615801561222f57506001600160a01b03821660009081526009602052604090205460ff16155b612276576040805162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015290519081900360640190fd5b6001600160a01b03821660009081526008602052604090205460ff161580156122a857506001600160a01b0382163014155b80156122bf57506001600160a01b03821661dead14155b80156122d95750601c546001600160a01b03838116911614155b1561233e5760006122e983611493565b9050601d54828201111561233c576040805162461bcd60e51b81526020600482015260156024820152741dd85b1b195d081b1a5b5a5d08195e18d959591959605a1b604482015290519081900360640190fd5b505b6001600160a01b03831660009081526008602052604090205460ff1615801561238057506001600160a01b03821660009081526008602052604090205460ff16155b801561239557506001600160a01b0382163014155b80156123ac57506001600160a01b03821661dead14155b1561240857601e54811115612408576040805162461bcd60e51b815260206004820152601a60248201527f7472616e73616374696f6e206c696d6974206578636565646564000000000000604482015290519081900360640190fd5b6001600160a01b03821660009081526018602052604090205460ff16612494576016805460018082019092557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319166001600160a01b03851690811790915560178054830190556000908152601860205260409020805460ff191690911790555b600061249f30611493565b9050601e5481106124af5750601e545b602054811080159081906124c65750601f5460ff16155b80156124e05750601c546001600160a01b03868116911614155b80156124f35750601f54610100900460ff165b1561250157612501826127d7565b601c546001906001600160a01b03868116911614612520576000612523565b60015b6015805460ff19169115159190911790556001600160a01b03861660009081526006602052604090205460ff168061257357506001600160a01b03851660009081526006602052604090205460ff165b1561257c575060005b6125888686868461290f565b505050505050565b6000818484111561261f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125e45781810151838201526020016125cc565b50505050905090810190601f1680156126115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000612634612a7d565b9092509050612643828261264a565b9250505090565b600061268c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bf8565b9392505050565b6000826126a257506000610c3f565b828202828482816126af57fe5b041461268c5760405162461bcd60e51b81526004018080602001828103825260218152602001806134346021913960400191505060405180910390fd5b60008282018381101561268c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080600080600080600080600061275d8a612c5d565b925092509250600080600061277b8d8686612776612627565b612c99565b919f909e50909c50959a5093985091965092945050505050565b600061268c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612590565b601f805460ff19166001179055600f54601154600091612808916127fa916126ec565b601154611648908590612693565b905060006128168383612795565b9050600061282582600261264a565b905060006128338383612795565b905047600061284284876126ec565b905061284d81612ce9565b60006128594784612795565b9050600061286b836116488489612693565b6019549091506001600160a01b03166108fc6128878484612795565b6040518115909202916000818181858888f193505050501580156128af573d6000803e3d6000fd5b506128ba8582612e8f565b604080518781526020810183905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050601f805460ff1916905550505050505050565b8061291c5761291c612f47565b6001600160a01b03841660009081526007602052604090205460ff16801561295d57506001600160a01b03831660009081526007602052604090205460ff16155b156129725761296d848484612fa6565b612a70565b6001600160a01b03841660009081526007602052604090205460ff161580156129b357506001600160a01b03831660009081526007602052604090205460ff165b156129c35761296d8484846130ca565b6001600160a01b03841660009081526007602052604090205460ff16158015612a0557506001600160a01b03831660009081526007602052604090205460ff16155b15612a155761296d848484613173565b6001600160a01b03841660009081526007602052604090205460ff168015612a5557506001600160a01b03831660009081526007602052604090205460ff165b15612a655761296d8484846131b7565b612a70848484613173565b80611cb157611cb161322a565b600b546000908190670de0b6b3a7640000825b600a54811015612bba578260036000600a8481548110612aac57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b1157508160046000600a8481548110612aea57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b2e57600b54670de0b6b3a764000094509450505050612bf4565b612b6e60036000600a8481548110612b4257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612795565b9250612bb060046000600a8481548110612b8457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612795565b9150600101612a90565b50600b54612bd090670de0b6b3a764000061264a565b821015612bee57600b54670de0b6b3a7640000935093505050612bf4565b90925090505b9091565b60008183612c475760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125e45781810151838201526020016125cc565b506000838581612c5357fe5b0495945050505050565b600080600080612c6c85613244565b90506000612c7986613260565b90506000612c8b826116388986612795565b979296509094509092505050565b6000808080612ca88886612693565b90506000612cb68887612693565b90506000612cc48888612693565b90506000612cd6826116388686612795565b939b939a50919850919650505050505050565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612d1757fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d6b57600080fd5b505afa158015612d7f573d6000803e3d6000fd5b505050506040513d6020811015612d9557600080fd5b5051815182906001908110612da657fe5b6001600160a01b039283166020918202929092010152601b54612dcc913091168461209c565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612e52578181015183820152602001612e3a565b505050509050019650505050505050600060405180830381600087803b158015612e7b57600080fd5b505af1158015612588573d6000803e3d6000fd5b601b54612ea79030906001600160a01b03168461209c565b601b54601a546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612f1c57600080fd5b505af1158015612f30573d6000803e3d6000fd5b50505050506040513d6060811015611cb157600080fd5b600d54158015612f575750601154155b8015612f635750600f54155b8015612f6f5750601354155b15612f7957612fa4565b600d8054600e5560118054601255600f80546010556013805460145560009384905591839055829055555b565b600080600080600080612fb887612746565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fea9088612795565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130199087612795565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461304890866126ec565b6001600160a01b03891660009081526003602052604090205561306a816132bc565b6130748483613345565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806130dc87612746565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061310e9087612795565b6001600160a01b03808b16600090815260036020908152604080832094909455918b1681526004909152205461314490846126ec565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461304890866126ec565b60008060008060008061318587612746565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130199087612795565b6000806000806000806131c987612746565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506131fb9088612795565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461310e9087612795565b600e54600d55601254601155601054600f55601454601355565b6000610c3f6064611648600d548561269390919063ffffffff16565b6000806132896064611648613282601154600f546126ec90919063ffffffff16565b8690612693565b60155490915060ff1615610c3f5761268c60646116486132826013546115f2601154600f546126ec90919063ffffffff16565b60006132c6612627565b905060006132d48383612693565b306000908152600360205260409020549091506132f190826126ec565b3060009081526003602090815260408083209390935560079052205460ff1615613340573060009081526004602052604090205461332f90846126ec565b306000908152600460205260409020555b505050565b600b546133529083612795565b600b55600c5461336290826126ec565b600c55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373546f74616c20466565732063616e206e6f74206265206d6f7265207468616e20323045524332303a205f6e65776d61726b6574696e6757616c6c65742063616e6e6f7420626520746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7750657263656e7461676520616d6f756e74206d757374206265206c6f776572206f7220657175616c20746f2031303045524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a205f6e6577706169722063616e6e6f7420626520746865207a65726f206164647265737345524332303a205f6e65776c697175696469747957616c6c65742063616e6e6f7420626520746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1ebe1167a82568c53668079afa6b5c25ae22a0ccdb2cb1e7c6cfb860d7f7c5b64736f6c634300060c0033

Deployed Bytecode Sourcemap

25818:25494:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29244:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30500:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30500:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;30944:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27322:39;;;;;;;;;;;;;:::i;29521:95::-;;;;;;;;;;;;;:::i;26381:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26381:47:0;-1:-1:-1;;;;;26381:47:0;;:::i;27035:32::-;;;;;;;;;;;;;:::i;38560:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38560:313:0;;;;;;;;;;;;;;;;;:::i;32752:132::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32752:132:0;;;;;;;;;;:::i;:::-;;33713:135;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33713:135:0;;:::i;37397:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37397:253:0;;:::i;29430:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36079:576;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36079:576:0;-1:-1:-1;;;;;36079:576:0;;:::i;30274:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30274:218:0;;;;;;;;:::i;26843:26::-;;;;;;;;;;;;;:::i;37662:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37662:377:0;;:::i;36949:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36949:436:0;;;;;;;;;:::i;27840:40::-;;;;;;;;;;;;;:::i;27368:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27368:37:0;-1:-1:-1;;;;;27368:37:0;;:::i;35628:439::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35628:439:0;-1:-1:-1;;;;;35628:439:0;;:::i;31581:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31581:124:0;-1:-1:-1;;;;;31581:124:0;;:::i;26930:32::-;;;;;;;;;;;;;:::i;27646:56::-;;;;;;;;;;;;;:::i;35383:233::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35383:233:0;;;;;;;;;:::i;29628:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29628:198:0;-1:-1:-1;;;;;29628:198:0;;:::i;16404:148::-;;;;;;;;;;;;;:::i;27412:30::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27412:30:0;;;;;;;;;;;;;;31043:526;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31043:526:0;-1:-1:-1;;;;;31043:526:0;;:::i;27730:52::-;;;;;;;;;;;;;:::i;32383:176::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32383:176:0;-1:-1:-1;;;;;32383:176:0;;:::i;27286:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27286:29:0;;:::i;31717:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31717:120:0;-1:-1:-1;;;;;31717:120:0;;:::i;15761:79::-;;;;;;;;;;;;;:::i;29335:87::-;;;;;;;;;;;;;:::i;33123:455::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33123:455:0;;;;;;;;;;;;;;;;;:::i;29993:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29993:269:0;;;;;;;;:::i;27523:19::-;;;;;;;;;;;;;:::i;38381:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38381:167:0;;;;;;;;:::i;34292:1079::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34292:1079:0;;;;;;;;;;;;;:::i;32595:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32595:145:0;-1:-1:-1;;;;;32595:145:0;;:::i;32892:219::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32892:219:0;-1:-1:-1;32892:219:0;;;;:::i;29838:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29838:143:0;;;;;;;;;;:::i;36667:126::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36667:126:0;;;;;;;;;;:::i;27887:58::-;;;;;;;;;;;;;:::i;33590:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33590:111:0;;:::i;33860:420::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33860:420:0;;;;;;;;;;:::i;16707:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16707:244:0;-1:-1:-1;;;;;16707:244:0;;:::i;36805:132::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36805:132:0;;;;;;;;;;:::i;27493:23::-;;;;;;;;;;;;;:::i;31849:164::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31849:164:0;-1:-1:-1;;;;;31849:164:0;;:::i;29244:83::-;29314:5;;;;;;;;;;;;-1:-1:-1;;;29314:5:0;;;;29244:83;:::o;30500:161::-;30575:4;30592:39;30601:12;:10;:12::i;:::-;30615:7;30624:6;30592:8;:39::i;:::-;-1:-1:-1;30649:4:0;30500:161;;;;;:::o;30944:87::-;31013:10;;30944:87;:::o;27322:39::-;;;;:::o;29521:95::-;26558:21;29521:95;:::o;26381:47::-;;;;;;;;;;;;;;;:::o;27035:32::-;;;;:::o;38560:313::-;38658:4;38675:36;38685:6;38693:9;38704:6;38675:9;:36::i;:::-;38722:121;38731:6;38739:12;:10;:12::i;:::-;38753:89;38791:6;38753:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38753:19:0;;;;;;:11;:19;;;;;;38773:12;:10;:12::i;:::-;-1:-1:-1;;;;;38753:33:0;;;;;;;;;;;;-1:-1:-1;38753:33:0;;;:89;:37;:89::i;:::-;38722:8;:121::i;:::-;-1:-1:-1;38861:4:0;38560:313;;;;;:::o;32752:132::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32843:25:0;;;::::1;;::::0;;;:14:::1;:25;::::0;;;;:33;;-1:-1:-1;;32843:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32752:132::o;33713:135::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;33802:16:::1;:38:::0;33713:135::o;37397:253::-;37463:7;37502;;37491;:18;;37483:73;;;;-1:-1:-1;;;37483:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37567:19;37590:10;:8;:10::i;:::-;37567:33;-1:-1:-1;37618:24:0;:7;37567:33;37618:11;:24::i;:::-;37611:31;;;37397:253;;;;:::o;29430:83::-;26829:1;29430:83;:::o;36079:576::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36161:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;36153:60;;;::::0;;-1:-1:-1;;;36153:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36229:9;36224:424;36248:9;:16:::0;36244:20;::::1;36224:424;;;36306:7;-1:-1:-1::0;;;;;36290:23:0::1;:9;36300:1;36290:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36290:12:0::1;:23;36286:351;;;36349:9;36359:16:::0;;-1:-1:-1;;36359:20:0;;;36349:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;36334:9:::1;:12:::0;;-1:-1:-1;;;;;36349:31:0;;::::1;::::0;36344:1;;36334:12;::::1;;;;;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;36334:46:0::1;;;;;-1:-1:-1::0;;;;;36334:46:0::1;;;;;;36418:32;36439:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;36418:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;:20:::1;:32::i;:::-;-1:-1:-1::0;;;;;36399:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:51;;;;36496:7:::1;:16:::0;;;;;:20;;;36535:11:::1;:20:::0;;;:28;;-1:-1:-1;;36535:28:0::1;::::0;;36582:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;36582:15:0;;;;;-1:-1:-1;;;;;;36582:15:0::1;::::0;;;;;36616:5:::1;;36286:351;36266:3;;36224:424;;;;36079:576:::0;:::o;30274:218::-;30362:4;30379:83;30388:12;:10;:12::i;:::-;30402:7;30411:50;30450:10;30411:11;:25;30423:12;:10;:12::i;:::-;-1:-1:-1;;;;;30411:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30411:25:0;;;:34;;;;;;;;;;;:38;:50::i;26843:26::-;;;;:::o;37662:377::-;37714:14;37731:12;:10;:12::i;:::-;-1:-1:-1;;;;;37763:19:0;;;;;;:11;:19;;;;;;37714:29;;-1:-1:-1;37763:19:0;;37762:20;37754:77;;;;-1:-1:-1;;;37754:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37843:15;37867:19;37878:7;37867:10;:19::i;:::-;-1:-1:-1;;;;;;;;;37915:15:0;;;;;;:7;:15;;;;;;37842:44;;-1:-1:-1;37915:28:0;;:15;-1:-1:-1;37842:44:0;37915:19;:28::i;:::-;-1:-1:-1;;;;;37897:15:0;;;;;;:7;:15;;;;;:46;37964:7;;:20;;37976:7;37964:11;:20::i;:::-;37954:7;:30;38008:10;;:23;;38023:7;38008:14;:23::i;:::-;37995:10;:36;-1:-1:-1;;;37662:377:0:o;36949:436::-;37039:7;26558:21;37067:7;:18;;37059:62;;;;;-1:-1:-1;;;37059:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37137:17;37132:246;;37172:15;37196:19;37207:7;37196:10;:19::i;:::-;-1:-1:-1;37171:44:0;;-1:-1:-1;37230:14:0;;-1:-1:-1;;;;;37230:14:0;37132:246;37279:23;37310:19;37321:7;37310:10;:19::i;:::-;-1:-1:-1;37277:52:0;;-1:-1:-1;37344:22:0;;-1:-1:-1;;;;;37344:22:0;27840:40;;;;;;;;;:::o;27368:37::-;;;;;;;;;;;;;;;:::o;35628:439::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35817:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;35816:21;35808:61;;;::::0;;-1:-1:-1;;;35808:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;35883:16:0;::::1;35902:1;35883:16:::0;;;:7:::1;:16;::::0;;;;;:20;35880:108:::1;;-1:-1:-1::0;;;;;35959:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;35939:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;35920:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;35880:108:::1;-1:-1:-1::0;;;;;35998:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;35998:27:0::1;36021:4;35998:27:::0;;::::1;::::0;;;36036:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;36036:23:0::1;::::0;;::::1;::::0;;35628:439::o;31581:124::-;-1:-1:-1;;;;;31670:27:0;31646:4;31670:27;;;:18;:27;;;;;;;;;31581:124::o;26930:32::-;;;;:::o;27646:56::-;;;;:::o;35383:233::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;35480:21:::1;:31:::0;;-1:-1:-1;;35480:31:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;35522:19:::1;:33:::0;;;35571:37:::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;35383:233:::0;;:::o;29628:198::-;-1:-1:-1;;;;;29718:20:0;;29694:7;29718:20;;;:11;:20;;;;;;;;29714:49;;;-1:-1:-1;;;;;;29747:16:0;;;;;;:7;:16;;;;;;29740:23;;29714:49;-1:-1:-1;;;;;29801:16:0;;;;;;:7;:16;;;;;;29781:37;;:19;:37::i;16404:148::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;16511:1:::1;16495:6:::0;;16474:40:::1;::::0;-1:-1:-1;;;;;16495:6:0;;::::1;::::0;16474:40:::1;::::0;16511:1;;16474:40:::1;16542:1;16525:19:::0;;-1:-1:-1;;;;;;16525:19:0::1;::::0;;16404:148::o;27412:30::-;;;-1:-1:-1;;;;;27412:30:0;;:::o;31043:526::-;31108:7;31146:21;31195:7;31108;31234:17;31195:7;31234:9;:17::i;:::-;31213:38;-1:-1:-1;31262:21:0;;31294:134;31315:9;:16;31313:18;;31294:134;;;31368:45;31396:16;31368:23;31378:9;31388:1;31378:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31378:12:0;31368:9;:23::i;:::-;:27;;:45::i;:::-;31349:64;-1:-1:-1;31333:3:0;;31294:134;;;-1:-1:-1;31507:4:0;;31438:15;;31456:80;;31485:50;;31518:16;;31485:28;;31497:15;;-1:-1:-1;;;;;31507:4:0;31497:9;:15::i;:::-;26558:21;;31485:11;:28::i;:::-;:32;;:50::i;:::-;31456:24;:10;31471:8;31456:14;:24::i;:::-;:28;;:80::i;:::-;31438:98;31043:526;-1:-1:-1;;;;;;;31043:526:0:o;27730:52::-;;;;:::o;32383:176::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32456:22:0;::::1;32448:77;;;;-1:-1:-1::0;;;32448:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32536:4;:15:::0;;-1:-1:-1;;;;;;32536:15:0::1;-1:-1:-1::0;;;;;32536:15:0;;;::::1;::::0;;;::::1;::::0;;32383:176::o;27286:29::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27286:29:0;;-1:-1:-1;27286:29:0;:::o;31717:120::-;-1:-1:-1;;;;;31809:20:0;31785:4;31809:20;;;:11;:20;;;;;;;;;31717:120::o;15761:79::-;15799:7;15826:6;-1:-1:-1;;;;;15826:6:0;15761:79;:::o;29335:87::-;29407:7;;;;;;;;;;;;-1:-1:-1;;;29407:7:0;;;;29335:87;:::o;33123:455::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;33329:2:::1;33271:54;33308:16:::0;33271:32:::1;:10:::0;33286:16;33271:14:::1;:32::i;:54::-;:60;;33263:107;;;;-1:-1:-1::0;;;33263:107:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33429:7;:20:::0;;;;33460:13:::1;:32:::0;;;;33503:13:::1;:32:::0;33546:9:::1;:24:::0;33123:455::o;29993:269::-;30086:4;30103:129;30112:12;:10;:12::i;:::-;30126:7;30135:96;30174:15;30135:96;;;;;;;;;;;;;;;;;:11;:25;30147:12;:10;:12::i;:::-;-1:-1:-1;;;;;30135:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30135:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;27523:19::-;;;-1:-1:-1;;;;;27523:19:0;;:::o;38381:167::-;38459:4;38476:42;38486:12;:10;:12::i;:::-;38500:9;38511:6;38476:9;:42::i;34292:1079::-;34437:4;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;34454:8:::1;34485:28:::0;;34481:453:::1;;34566:3;34538:24;:31;;34530:91;;;;-1:-1:-1::0;;;34530:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34710:30;::::0;;-1:-1:-1;;;34710:30:0;;34734:4:::1;34710:30;::::0;::::1;::::0;;;34658:14;;34636:12:::1;::::0;-1:-1:-1;;;;;34710:15:0;::::1;::::0;::::1;::::0;:30;;;;;::::1;::::0;;;;;;;;:15;:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34710:30:0;;-1:-1:-1;34763:15:0;34755:69:::1;;;;-1:-1:-1::0;;;34755:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34860:15;::::0;34845:77:::1;::::0;;-1:-1:-1;;;34845:77:0;;-1:-1:-1;;;;;34860:15:0;;::::1;34845:77;::::0;::::1;::::0;34917:3:::1;34878:38:::0;;::::1;:42;34845:77:::0;;;;;;:14;;::::1;::::0;::::1;::::0;:77;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;34845:14:0;:77;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34845:77:0;;-1:-1:-1;;;34481:453:0::1;34948:26:::0;;34944:399:::1;;35025:3;34999:22;:29;;34991:89;;;;-1:-1:-1::0;;;34991:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35115:21;35159:13:::0;35151:67:::1;;;;-1:-1:-1::0;;;35151:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35241:15;::::0;35233:73:::1;::::0;-1:-1:-1;;;;;35241:15:0;;::::1;::::0;35302:3:::1;35267:34:::0;;::::1;:38;35233:73:::0;::::1;;;::::0;::::1;::::0;;;35267:38;35241:15;35233:73;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35327:4;35321:10;;34944:399;;35360:3:::0;34292:1079;-1:-1:-1;;;;34292:1079:0:o;32595:145::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;32716:6:::1;:16:::0;;-1:-1:-1;;;;;;32716:16:0::1;-1:-1:-1::0;;;;;32716:16:0;;;::::1;::::0;;;::::1;::::0;;32595:145::o;32892:219::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;33003:9:::1;32998:106;33014:20:::0;;::::1;32998:106;;;33087:5;33056:14;:28;33071:9;;33081:1;33071:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;33071:12:0::1;33056:28:::0;;-1:-1:-1;33056:28:0;::::1;::::0;;;;;;-1:-1:-1;33056:28:0;:36;;-1:-1:-1;;33056:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;33036:3:0::1;32998:106;;;;32892:219:::0;;;:::o;29838:143::-;-1:-1:-1;;;;;29946:18:0;;;29919:7;29946:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29838:143::o;36667:126::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36749:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;36749:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36667:126::o;27887:58::-;;;;:::o;33590:111::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;33666:12:::1;:27:::0;33590:111::o;33860:420::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33975:33:0;::::1;33967:99;;;;-1:-1:-1::0;;;33967:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;34085:33:0;::::1;34077:99;;;;-1:-1:-1::0;;;34077:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34187:15;:37:::0;;-1:-1:-1;;;;;34187:37:0;;::::1;-1:-1:-1::0;;;;;;34187:37:0;;::::1;;::::0;;;34235:15:::1;:37:::0;;;;;::::1;::::0;::::1;;::::0;;33860:420::o;16707:244::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16796:22:0;::::1;16788:73;;;;-1:-1:-1::0;;;16788:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16898:6;::::0;;16877:38:::1;::::0;-1:-1:-1;;;;;16877:38:0;;::::1;::::0;16898:6;::::1;::::0;16877:38:::1;::::0;::::1;16926:6;:17:::0;;-1:-1:-1;;;;;;16926:17:0::1;-1:-1:-1::0;;;;;16926:17:0;;;::::1;::::0;;;::::1;::::0;;16707:244::o;36805:132::-;15983:12;:10;:12::i;:::-;15973:6;;-1:-1:-1;;;;;15973:6:0;;;:22;;;15965:67;;;;;-1:-1:-1;;;15965:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15965:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36895:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:34;;-1:-1:-1;;36895:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36805:132::o;27493:23::-;;;-1:-1:-1;;;;;27493:23:0;;:::o;31849:164::-;-1:-1:-1;;;;;31931:25:0;;31912:4;31931:25;;;:14;:25;;;;;;;;:33;;:25;:33;31928:77;;;-1:-1:-1;31973:4:0;31966:11;;31928:77;-1:-1:-1;32000:5:0;31993:12;;95:115;191:10;95:115;:::o;30673:259::-;-1:-1:-1;;;;;30766:19:0;;30758:28;;;;;;-1:-1:-1;;;;;30805:21:0;;30797:30;;;;;;-1:-1:-1;;;;;30840:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30892:32;;;;;;;;;;;;;;;;;30673:259;;;:::o;38885:2573::-;-1:-1:-1;;;;;38982:20:0;;38974:70;;;;-1:-1:-1;;;38974:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39063:23:0;;39055:71;;;;-1:-1:-1;;;39055:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39154:1;39145:6;:10;39137:64;;;;-1:-1:-1;;;39137:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39221:22:0;;;;;;:14;:22;;;;;;;;39220:23;:53;;;;-1:-1:-1;;;;;;39248:25:0;;;;;;:14;:25;;;;;;;;39247:26;39220:53;39212:85;;;;;-1:-1:-1;;;39212:85:0;;;;;;;;;;;;-1:-1:-1;;;39212:85:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;39346:27:0;;;;;;:16;:27;;;;;;;;39345:28;:58;;;;-1:-1:-1;;;;;;39377:26:0;;39398:4;39377:26;;39345:58;:88;;;;-1:-1:-1;;;;;;39407:26:0;;25974:42;39407:26;;39345:88;:109;;;;-1:-1:-1;39450:4:0;;-1:-1:-1;;;;;39437:17:0;;;39450:4;;39437:17;;39345:109;39341:277;;;39471:20;39494;39504:9;39494;:20::i;:::-;39471:43;;39564:16;;39553:6;39538:12;:21;39537:43;;39529:77;;;;;-1:-1:-1;;;39529:77:0;;;;;;;;;;;;-1:-1:-1;;;39529:77:0;;;;;;;;;;;;;;;39341:277;;-1:-1:-1;;;;;39661:24:0;;;;;;:16;:24;;;;;;;;39660:25;:57;;;;-1:-1:-1;;;;;;39690:27:0;;;;;;:16;:27;;;;;;;;39689:28;39660:57;:87;;;;-1:-1:-1;;;;;;39721:26:0;;39742:4;39721:26;;39660:87;:117;;;;-1:-1:-1;;;;;;39751:26:0;;25974:42;39751:26;;39660:117;39657:210;;;39812:12;;39802:6;:22;;39794:61;;;;;-1:-1:-1;;;39794:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39926:16:0;;;;;;:5;:16;;;;;;;;39922:151;;39959:11;:27;;;;;;;;;;;;;-1:-1:-1;;;;;;39959:27:0;-1:-1:-1;;;;;39959:27:0;;;;;;;;40001:20;:22;;;;;;-1:-1:-1;40038:16:0;;;:5;39959:27;40038:16;;;;:23;;-1:-1:-1;;40038:23:0;;;;;;39922:151;40375:28;40406:24;40424:4;40406:9;:24::i;:::-;40375:55;;40468:12;;40444:20;:36;40441:79;;-1:-1:-1;40506:12:0;;40441:79;40581:19;;40557:43;;;;;;;40615:40;;-1:-1:-1;40639:16:0;;;;40638:17;40615:40;:58;;;;-1:-1:-1;40669:4:0;;-1:-1:-1;;;;;40659:14:0;;;40669:4;;40659:14;;40615:58;:83;;;;-1:-1:-1;40677:21:0;;;;;;;40615:83;40611:218;;;40781:36;40796:20;40781:14;:36::i;:::-;41072:4;;40925;;-1:-1:-1;;;;;41072:17:0;;;:4;;:17;:32;;41099:5;41072:32;;;41092:4;41072:32;41060:9;:44;;-1:-1:-1;;41060:44:0;;;;;;;;;;-1:-1:-1;;;;;41212:26:0;;-1:-1:-1;41212:26:0;;;:18;:26;;;;;;41060:44;41212:26;;:59;;-1:-1:-1;;;;;;41242:29:0;;;;;;:18;:29;;;;;;;;41212:59;41209:105;;;-1:-1:-1;41297:5:0;41209:105;41400:50;41415:6;41423:9;41434:6;41442:7;41400:14;:50::i;:::-;38885:2573;;;;;;:::o;4961:192::-;5047:7;5083:12;5075:6;;;;5067:29;;;;-1:-1:-1;;;5067:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5119:5:0;;;4961:192::o;45920:163::-;45961:7;45982:15;45999;46018:19;:17;:19::i;:::-;45981:56;;-1:-1:-1;45981:56:0;-1:-1:-1;46055:20:0;45981:56;;46055:11;:20::i;:::-;46048:27;;;;45920:163;:::o;6359:132::-;6417:7;6444:39;6448:1;6451;6444:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6437:46;6359:132;-1:-1:-1;;;6359:132:0:o;5412:471::-;5470:7;5715:6;5711:47;;-1:-1:-1;5745:1:0;5738:8;;5711:47;5782:5;;;5786:1;5782;:5;:1;5806:5;;;;;:10;5798:56;;;;-1:-1:-1;;;5798:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4058:181;4116:7;4148:5;;;4172:6;;;;4164:46;;;;;-1:-1:-1;;;4164:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;44718:419;44777:7;44786;44795;44804;44813;44822;44843:23;44868:12;44882:18;44904:20;44916:7;44904:11;:20::i;:::-;44842:82;;;;;;44936:15;44953:23;44978:12;44994:50;45006:7;45015:4;45021:10;45033;:8;:10::i;:::-;44994:11;:50::i;:::-;44935:109;;;;-1:-1:-1;44935:109:0;;-1:-1:-1;45095:15:0;;-1:-1:-1;45112:4:0;;-1:-1:-1;45118:10:0;;-1:-1:-1;44718:419:0;;-1:-1:-1;;;;;44718:419:0:o;4522:136::-;4580:7;4607:43;4611:1;4614;4607:43;;;;;;;;;;;;;;;;;:3;:43::i;48780:1418::-;27999:16;:23;;-1:-1:-1;;27999:23:0;28018:4;27999:23;;;49028:13:::1;::::0;49010::::1;::::0;27999:16;;48966:77:::1;::::0;49010:32:::1;::::0;:17:::1;:32::i;:::-;48991:13;::::0;48966:39:::1;::::0;:20;;:24:::1;:39::i;:77::-;48943:100:::0;-1:-1:-1;49054:20:0::1;49077:38;:20:::0;48943:100;49077:24:::1;:38::i;:::-;49054:61:::0;-1:-1:-1;49167:12:0::1;49182:19;49054:61:::0;49199:1:::1;49182:16;:19::i;:::-;49167:34:::0;-1:-1:-1;49212:17:0::1;49232:22;:12:::0;49167:34;49232:16:::1;:22::i;:::-;49212:42:::0;-1:-1:-1;49565:21:0::1;49540:22;49662;:4:::0;49671:12;49662:8:::1;:22::i;:::-;49639:45;;49695:30;49712:12;49695:16;:30::i;:::-;49794:16;49813:41;:21;49839:14:::0;49813:25:::1;:41::i;:::-;49794:60:::0;-1:-1:-1;49865:24:0::1;49892:38;49917:12:::0;49893:18:::1;49794:60:::0;49906:4;49893:12:::1;:18::i;49892:38::-;49959:15;::::0;49865:65;;-1:-1:-1;;;;;;49959:15:0::1;49951:65;49985:30;:8:::0;49865:65;49985:12:::1;:30::i;:::-;49951:65;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;50074:41;50087:9;50098:16;50074:12;:41::i;:::-;50141:49;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;28027:16:0;:24;;-1:-1:-1;;28027:24:0;;;-1:-1:-1;;;;;;;48780:1418:0:o;41543:835::-;41655:7;41651:40;;41677:14;:12;:14::i;:::-;-1:-1:-1;;;;;41716:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;41740:22:0;;;;;;:11;:22;;;;;;;;41739:23;41716:46;41712:597;;;41779:48;41801:6;41809:9;41820:6;41779:21;:48::i;:::-;41712:597;;;-1:-1:-1;;;;;41850:19:0;;;;;;:11;:19;;;;;;;;41849:20;:46;;;;-1:-1:-1;;;;;;41873:22:0;;;;;;:11;:22;;;;;;;;41849:46;41845:464;;;41912:46;41932:6;41940:9;41951:6;41912:19;:46::i;41845:464::-;-1:-1:-1;;;;;41981:19:0;;;;;;:11;:19;;;;;;;;41980:20;:47;;;;-1:-1:-1;;;;;;42005:22:0;;;;;;:11;:22;;;;;;;;42004:23;41980:47;41976:333;;;42044:44;42062:6;42070:9;42081:6;42044:17;:44::i;41976:333::-;-1:-1:-1;;;;;42110:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42133:22:0;;;;;;:11;:22;;;;;;;;42110:45;42106:203;;;42172:48;42194:6;42202:9;42213:6;42172:21;:48::i;42106:203::-;42253:44;42271:6;42279:9;42290:6;42253:17;:44::i;:::-;42333:7;42329:41;;42355:15;:13;:15::i;46091:561::-;46188:7;;46141;;;;26558:21;46141:7;46248:289;46272:9;:16;46268:20;;46248:289;;;46338:7;46314;:21;46322:9;46332:1;46322:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46322:12:0;46314:21;;;;;;;;;;;;;:31;;:66;;;46373:7;46349;:21;46357:9;46367:1;46357:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46357:12:0;46349:21;;;;;;;;;;;;;:31;46314:66;46310:97;;;46390:7;;26558:21;46382:25;;;;;;;;;46310:97;46432:34;46444:7;:21;46452:9;46462:1;46452:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46452:12:0;46444:21;;;;;;;;;;;;;46432:7;;:11;:34::i;:::-;46422:44;;46491:34;46503:7;:21;46511:9;46521:1;46511:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46511:12:0;46503:21;;;;;;;;;;;;;46491:7;;:11;:34::i;:::-;46481:44;-1:-1:-1;46290:3:0;;46248:289;;;-1:-1:-1;46561:7:0;;:20;;26558:21;46561:11;:20::i;:::-;46551:7;:30;46547:61;;;46591:7;;26558:21;46583:25;;;;;;;;46547:61;46627:7;;-1:-1:-1;46636:7:0;-1:-1:-1;46091:561:0;;;:::o;6987:278::-;7073:7;7108:12;7101:5;7093:28;;;;-1:-1:-1;;;7093:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7132:9;7148:1;7144;:5;;;;;;;6987:278;-1:-1:-1;;;;;6987:278:0:o;45145:330::-;45205:7;45214;45223;45243:12;45258:24;45274:7;45258:15;:24::i;:::-;45243:39;;45293:18;45314:30;45336:7;45314:21;:30::i;:::-;45293:51;-1:-1:-1;45355:23:0;45381:33;45293:51;45381:17;:7;45393:4;45381:11;:17::i;:33::-;45355:59;45450:4;;-1:-1:-1;45456:10:0;;-1:-1:-1;45145:330:0;;-1:-1:-1;;;45145:330:0:o;45483:429::-;45598:7;;;;45654:24;:7;45666:11;45654;:24::i;:::-;45636:42;-1:-1:-1;45689:12:0;45704:21;:4;45713:11;45704:8;:21::i;:::-;45689:36;-1:-1:-1;45736:18:0;45757:27;:10;45772:11;45757:14;:27::i;:::-;45736:48;-1:-1:-1;45795:23:0;45821:33;45736:48;45821:17;:7;45833:4;45821:11;:17::i;:33::-;45873:7;;;;-1:-1:-1;45899:4:0;;-1:-1:-1;45483:429:0;;-1:-1:-1;;;;;;;45483:429:0:o;50210:578::-;50360:16;;;50374:1;50360:16;;;50336:21;50360:16;;;;;50336:21;50360:16;;;;;;;;;;-1:-1:-1;50360:16:0;50336:40;;50405:4;50387;50392:1;50387:7;;;;;;;;-1:-1:-1;;;;;50387:23:0;;;:7;;;;;;;;;;:23;;;;50431:6;;:13;;;-1:-1:-1;;;50431:13:0;;;;:6;;;;;:11;;:13;;;;;50387:7;;50431:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50431:13:0;50421:7;;:4;;50426:1;;50421:7;;;;;;-1:-1:-1;;;;;50421:23:0;;;:7;;;;;;;;;:23;50497:6;;50465:53;;50482:4;;50497:6;50506:11;50465:8;:53::i;:::-;50565:6;;:215;;-1:-1:-1;;;50565:215:0;;;;;;;;:6;:215;;;;;;50734:4;50565:215;;;;;;50754:15;50565:215;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50565:6:0;;;;:57;;50637:11;;50707:4;;50734;50754:15;50565:215;;;;;;;;;;;;;;;;:6;:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50800:503;50980:6;;50948:53;;50965:4;;-1:-1:-1;;;;;50980:6:0;50989:11;50948:8;:53::i;:::-;51044:6;;51239:15;;51044:251;;;-1:-1:-1;;;51044:251:0;;51107:4;51044:251;;;;;;;;;;:6;:251;;;;;;;;;;-1:-1:-1;;;;;51239:15:0;;;51044:251;;;;51269:15;51044:251;;;;;;:6;;;;;:22;;51074:9;;51044:251;;;;;;;;;;;;;;;51074:9;51044:6;:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47687:430;47733:7;;:12;:34;;;;-1:-1:-1;47749:13:0;;:18;47733:34;:56;;;;-1:-1:-1;47771:13:0;;:18;47733:56;:74;;;;-1:-1:-1;47793:9:0;;:14;47733:74;47730:86;;;47809:7;;47730:86;47854:7;;;47836:15;:25;47896:13;;;47872:21;:37;47944:13;;;47920:21;:37;47988:9;;;47968:17;:29;-1:-1:-1;48018:11:0;;;;48040:17;;;;48068;;;48096:13;47687:430;:::o;42980:566::-;43083:15;43100:23;43125:12;43139:23;43164:12;43178:18;43200:19;43211:7;43200:10;:19::i;:::-;-1:-1:-1;;;;;43248:15:0;;;;;;:7;:15;;;;;;43082:137;;-1:-1:-1;43082:137:0;;-1:-1:-1;43082:137:0;;-1:-1:-1;43082:137:0;-1:-1:-1;43082:137:0;-1:-1:-1;43082:137:0;-1:-1:-1;43248:28:0;;43268:7;43248:19;:28::i;:::-;-1:-1:-1;;;;;43230:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43305:7;:15;;;;:28;;43325:7;43305:19;:28::i;:::-;-1:-1:-1;;;;;43287:15:0;;;;;;;:7;:15;;;;;;:46;;;;43365:18;;;;;;;:39;;43388:15;43365:22;:39::i;:::-;-1:-1:-1;;;;;43344:18:0;;;;;;:7;:18;;;;;:60;43418:26;43433:10;43418:14;:26::i;:::-;43455:23;43467:4;43473;43455:11;:23::i;:::-;43511:9;-1:-1:-1;;;;;43494:44:0;43503:6;-1:-1:-1;;;;;43494:44:0;;43522:15;43494:44;;;;;;;;;;;;;;;;;;42980:566;;;;;;;;;:::o;42386:586::-;42487:15;42504:23;42529:12;42543:23;42568:12;42582:18;42604:19;42615:7;42604:10;:19::i;:::-;-1:-1:-1;;;;;42652:15:0;;;;;;:7;:15;;;;;;42486:137;;-1:-1:-1;42486:137:0;;-1:-1:-1;42486:137:0;;-1:-1:-1;42486:137:0;-1:-1:-1;42486:137:0;-1:-1:-1;42486:137:0;-1:-1:-1;42652:28:0;;42486:137;42652:19;:28::i;:::-;-1:-1:-1;;;;;42634:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42712:18;;;;;:7;:18;;;;;:39;;42735:15;42712:22;:39::i;:::-;-1:-1:-1;;;;;42691:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42783:7;:18;;;;:39;;42806:15;42783:22;:39::i;44208:502::-;44307:15;44324:23;44349:12;44363:23;44388:12;44402:18;44424:19;44435:7;44424:10;:19::i;:::-;-1:-1:-1;;;;;44472:15:0;;;;;;:7;:15;;;;;;44306:137;;-1:-1:-1;44306:137:0;;-1:-1:-1;44306:137:0;;-1:-1:-1;44306:137:0;-1:-1:-1;44306:137:0;-1:-1:-1;44306:137:0;-1:-1:-1;44472:28:0;;44306:137;44472:19;:28::i;43554:642::-;43657:15;43674:23;43699:12;43713:23;43738:12;43752:18;43774:19;43785:7;43774:10;:19::i;:::-;-1:-1:-1;;;;;43822:15:0;;;;;;:7;:15;;;;;;43656:137;;-1:-1:-1;43656:137:0;;-1:-1:-1;43656:137:0;;-1:-1:-1;43656:137:0;-1:-1:-1;43656:137:0;-1:-1:-1;43656:137:0;-1:-1:-1;43822:28:0;;43842:7;43822:19;:28::i;:::-;-1:-1:-1;;;;;43804:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43879:7;:15;;;;:28;;43899:7;43879:19;:28::i;48129:213::-;48183:15;;48173:7;:25;48225:21;;48209:13;:37;48273:21;;48257:13;:37;48317:17;;48305:9;:29;48129:213::o;47190:128::-;47254:7;47281:29;47306:3;47281:20;47293:7;;47281;:11;;:20;;;;:::i;47326:349::-;47396:7;47416:20;47439:56;47491:3;47439:47;47451:34;47471:13;;47452;;47451:19;;:34;;;;:::i;:::-;47439:7;;:11;:47::i;:56::-;47512:9;;47416:79;;-1:-1:-1;47512:9:0;;47508:128;;;47553:71;47620:3;47553:62;47565:49;47604:9;;47565:34;47585:13;;47566;;47565:19;;:34;;;;:::i;46823:355::-;46886:19;46909:10;:8;:10::i;:::-;46886:33;-1:-1:-1;46930:18:0;46951:27;:10;46886:33;46951:14;:27::i;:::-;47030:4;47014:22;;;;:7;:22;;;;;;46930:48;;-1:-1:-1;47014:38:0;;46930:48;47014:26;:38::i;:::-;47005:4;46989:22;;;;:7;:22;;;;;;;;:63;;;;47066:11;:26;;;;;;47063:107;;;47148:4;47132:22;;;;:7;:22;;;;;;:38;;47159:10;47132:26;:38::i;:::-;47123:4;47107:22;;;;:7;:22;;;;;:63;47063:107;46823:355;;;:::o;46664:147::-;46742:7;;:17;;46754:4;46742:11;:17::i;:::-;46732:7;:27;46783:10;;:20;;46798:4;46783:14;:20::i;:::-;46770:10;:33;-1:-1:-1;;46664:147:0:o

Swarm Source

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