Token Random

Overview ERC-20

Total Supply:
1,000,000,000,000 RNDM

Holders:
3 addresses

Profile Summary

 
Contract:
0x7af67e747a89c4fbb20f83f1dc23a445d835417e0x7Af67e747a89c4Fbb20F83F1dc23a445D835417E

Decimals:
18
Balance
93,000 RNDM
0x728cd627456942f4691a2bbde1d6d04cca639e82
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x55618a8EEE5E4c15fb1C289846581B4839031821

Contract Name:
ghostofrandom

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-15
*/

pragma solidity 0.8.6;

// SPDX-License-Identifier: MIT

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


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

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Random";
    string private _symbol = "RNDM";
    uint8 private _decimals = 18;
    
    uint256 public _taxFee = 10 ;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 20;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public _contestFee = 10;
    uint256 private _previousContestFee = _contestFee;
    address public contestAddress = 0x564e9155Ff9268B4B7dA4F7b5fCa000Ea0f46Ebb;

    uint256 public _marketingFee = 10;
    uint256 private _previousMarketingFee = _marketingFee;
    address public marketingWallet = 0x564e9155Ff9268B4B7dA4F7b5fCa000Ea0f46Ebb;
    
    uint256 public _charityFee = 20;
    uint256 private _previousCharityFee = _charityFee;
    address public charityAddress = 0x564e9155Ff9268B4B7dA4F7b5fCa000Ea0f46Ebb;
    
    uint256 public _sustainableFee = 20;
    uint256 private _previousSustainableFee = _sustainableFee;
    address public sustainableAddress = 0x564e9155Ff9268B4B7dA4F7b5fCa000Ea0f46Ebb;
    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 20000000000 * 10**18;	
    uint256 private numTokensSellToAddToLiquidity = 2000*10**18;
    
    uint256 constant public MAX_FEE = 100;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x3b4A8e306D9d444053E569FC61a44b3b6eC71239); //pancakeV2
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.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
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

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

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            removeAllFee();
        }
        else{
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        
        //Calculate burn amount and marketing amount
        uint256 marketingAmt = amount.mul(10).div(1000);
        uint256 charityAmt = amount.mul(20).div(1000);
        uint256 contestAmt = amount.mul(20).div(1000);
        uint256 sustainableAmt = amount.mul(20).div(1000);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, (amount.sub(marketingAmt).sub(charityAmt).sub(contestAmt).sub(sustainableAmt)));
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, (amount.sub(marketingAmt).sub(charityAmt).sub(contestAmt).sub(sustainableAmt)));
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, (amount.sub(marketingAmt).sub(charityAmt).sub(contestAmt).sub(sustainableAmt)));
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, (amount.sub(marketingAmt).sub(charityAmt).sub(contestAmt).sub(sustainableAmt)));
        } else {
            _transferStandard(sender, recipient, (amount.sub(marketingAmt).sub(charityAmt).sub(contestAmt).sub(sustainableAmt)));
        }
        
        //Temporarily remove fees to transfer to burn address and marketing wallet
        _taxFee = 0;
        _liquidityFee = 0;

        _transferStandard(sender, sustainableAddress, sustainableAmt);
        _transferStandard(sender, marketingWallet, marketingAmt);
        _transferStandard(sender, charityAddress, charityAmt);
        _transferStandard(sender, contestAddress, contestAmt);

        //Restore tax and liquidity fees
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;


        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
            restoreAllFee();
    }

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

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

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

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    //Call this function after finalizing the presale
    function enableAllFees() external onlyOwner() {
        _taxFee = 20;
        _previousTaxFee = _taxFee;
        _liquidityFee = 35;
        _previousLiquidityFee = _liquidityFee;
        inSwapAndLiquify = true;
        emit SwapAndLiquifyEnabledUpdated(true);
    }

    function disableAllFees() external onlyOwner() {
        _taxFee = 0;
        _previousTaxFee = _taxFee;
        _liquidityFee = 0;
        _previousLiquidityFee = _liquidityFee;
        inSwapAndLiquify = false;
        emit SwapAndLiquifyEnabledUpdated(false);
    }
    
    function setMarketingWallet(address newWallet) external onlyOwner() {
        marketingWallet = newWallet;
    }
    
    function setCharityAddress(address newCharity) external onlyOwner(){
        charityAddress = newCharity;
    }
    
    function setSustainableWallet(address newSustainable) external onlyOwner(){
        sustainableAddress = newSustainable;
    }

    
    //New Pancakeswap router version
    function setRouterAddress(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newPancakeRouter = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
        uniswapV2Router = _newPancakeRouter;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(_liquidityFee <= MAX_FEE, "Fee Too High");
        _liquidityFee = liquidityFee;
    }
    
    function setMarketFeePercent(uint256 marketingFee) external onlyOwner() {
        require(_marketingFee <= MAX_FEE, "Fee Too High");
        _marketingFee = marketingFee;
    }
    function setCharityFeePercent(uint256 charityFee) external onlyOwner() {
       require(_charityFee <= MAX_FEE, "Fee Too High");
       _charityFee = charityFee;
    }
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        require(_taxFee <= MAX_FEE, "Fee Too High");
        _taxFee = taxFee;
    }
    function setContestFeePercent(uint256 contestFee) external onlyOwner() {
        require(_contestFee <= MAX_FEE, "Fee Too High");
        _contestFee = contestFee;
    }
    function setSustainableFeePercent(uint256 sustainableFee) external onlyOwner() {
        require(_sustainableFee <= MAX_FEE, "Fee Too High");
        _sustainableFee = sustainableFee;
    }
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        require(maxTxPercent > 10, "Cannot set transaction amount less than 10 percent!");
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contestFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_sustainableFee","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":[],"name":"charityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contestAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"internalType":"address","name":"newCharity","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contestFee","type":"uint256"}],"name":"setContestFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sustainableFee","type":"uint256"}],"name":"setSustainableFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSustainable","type":"address"}],"name":"setSustainableWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sustainableAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526c0c9f2c9cd04674edea400000006009819055620000259060001962000574565b620000339060001962000511565b600a556040805180820190915260068082526552616e646f6d60d01b60209092019182526200006591600c9162000439565b5060408051808201909152600480825263524e444d60e01b60209092019182526200009391600d9162000439565b50600e805460ff19166012908117909155600a600f819055601081905560146011819055918290556013819055808255601580546001600160a01b031990811673564e9155ff9268b4b7da4f7b5fca000ea0f46ebb9081179092556016839055601792909255601880548316821790556019839055601a839055601b8054831682179055601c839055601d92909255601e805490911690911790556020805460ff60a81b1916600160a81b1790556b409f9cbc7c4a04c220000000602155686c6b935b8bbd4000006022553480156200016b57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a543360009081526003602090815260409182902092909255805163c45a015560e01b81529051733b4a8e306d9d444053e569fc61a44b3b6ec7123992839263c45a01559260048083019392829003018186803b1580156200020f57600080fd5b505afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a9190620004df565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029357600080fd5b505afa158015620002a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ce9190620004df565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003529190620004df565b602080546001600160a01b03199081166001600160a01b0393841617909155601f80549091169183169190911790556001600660006200039a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620003e23390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200042a91815260200190565b60405180910390a35062000597565b828054620004479062000537565b90600052602060002090601f0160209004810192826200046b5760008555620004b6565b82601f106200048657805160ff1916838001178555620004b6565b82800160010185558215620004b6579182015b82811115620004b657825182559160200191906001019062000499565b50620004c4929150620004c8565b5090565b5b80821115620004c45760008155600101620004c9565b600060208284031215620004f257600080fd5b81516001600160a01b03811681146200050a57600080fd5b9392505050565b6000828210156200053257634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200054c57607f821691505b602082108114156200056e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200059257634e487b7160e01b600052601260045260246000fd5b500690565b61319e80620005a76000396000f3fe60806040526004361061036f5760003560e01c806370a08231116101c6578063b6c52324116100f7578063dd46706411610095578063ea2f0b371161006f578063ea2f0b37146109ff578063eae641b014610a1f578063f2fde38b14610a35578063ffc7863514610a5557600080fd5b8063dd46706414610979578063dd62ed3e14610999578063e51231ff146109df57600080fd5b8063c8f43c3c116100d1578063c8f43c3c146108f9578063d04e7f3114610919578063d1bf006f14610939578063d543dbeb1461095957600080fd5b8063b6c52324146108af578063bc063e1a146108c4578063c49b9a80146108d957600080fd5b80638ee88c5311610164578063a69df4b51161013e578063a69df4b51461083a578063a9059cbb1461084f578063af41063b1461086f578063afcf2fc41461088f57600080fd5b80638ee88c53146107e557806395d89b4114610805578063a457c2d71461081a57600080fd5b806375f0a874116101a057806375f0a874146107585780637d1db4a51461077857806388f820201461078e5780638da5cb5b146107c757600080fd5b806370a082311461070e578063715018a61461072e578063741af87f1461074357600080fd5b806339265989116102a05780634549b0391161023e57806352390c021161021857806352390c021461067f5780635342acb41461069f5780635d098b38146106d85780636bc87c3a146106f857600080fd5b80634549b0391461061e57806349bd5a5e1461063e5780634a74bb021461065e57600080fd5b80633bd5d1731161027a5780633bd5d173146105a857806340f8007a146105c857806341cb87fc146105de578063437823ec146105fe57600080fd5b8063392659891461055257806339509351146105725780633b124fe71461059257600080fd5b806318160ddd1161030d5780632aa0317f116102e75780632aa0317f146104da5780632d838119146104f0578063313ce567146105105780633685d4191461053257600080fd5b806318160ddd1461048f57806322976e0d146104a457806323b872dd146104ba57600080fd5b80630a208a4d116103495780630a208a4d146103f85780630c9be46d1461043057806313114a9d146104505780631694505e1461046f57600080fd5b8063061c82d01461037b57806306fdde031461039d578063095ea7b3146103c857600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004612e47565b610a6a565b005b3480156103a957600080fd5b506103b2610ac5565b6040516103bf9190612eba565b60405180910390f35b3480156103d457600080fd5b506103e86103e3366004612e00565b610b57565b60405190151581526020016103bf565b34801561040457600080fd5b50601e54610418906001600160a01b031681565b6040516001600160a01b0390911681526020016103bf565b34801561043c57600080fd5b5061039b61044b366004612d4c565b610b6e565b34801561045c57600080fd5b50600b545b6040519081526020016103bf565b34801561047b57600080fd5b50601f54610418906001600160a01b031681565b34801561049b57600080fd5b50600954610461565b3480156104b057600080fd5b5061046160165481565b3480156104c657600080fd5b506103e86104d5366004612dbf565b610bba565b3480156104e657600080fd5b5061046160135481565b3480156104fc57600080fd5b5061046161050b366004612e47565b610c23565b34801561051c57600080fd5b50600e5460405160ff90911681526020016103bf565b34801561053e57600080fd5b5061039b61054d366004612d4c565b610ca7565b34801561055e57600080fd5b5061039b61056d366004612e47565b610e5e565b34801561057e57600080fd5b506103e861058d366004612e00565b610eb0565b34801561059e57600080fd5b50610461600f5481565b3480156105b457600080fd5b5061039b6105c3366004612e47565b610ee6565b3480156105d457600080fd5b5061046160195481565b3480156105ea57600080fd5b5061039b6105f9366004612d4c565b610fd0565b34801561060a57600080fd5b5061039b610619366004612d4c565b6111a2565b34801561062a57600080fd5b50610461610639366004612e60565b6111f0565b34801561064a57600080fd5b50602054610418906001600160a01b031681565b34801561066a57600080fd5b506020546103e890600160a81b900460ff1681565b34801561068b57600080fd5b5061039b61069a366004612d4c565b61127d565b3480156106ab57600080fd5b506103e86106ba366004612d4c565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106e457600080fd5b5061039b6106f3366004612d4c565b611448565b34801561070457600080fd5b5061046160115481565b34801561071a57600080fd5b50610461610729366004612d4c565b611494565b34801561073a57600080fd5b5061039b6114f3565b34801561074f57600080fd5b5061039b611555565b34801561076457600080fd5b50601854610418906001600160a01b031681565b34801561078457600080fd5b5061046160215481565b34801561079a57600080fd5b506103e86107a9366004612d4c565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107d357600080fd5b506000546001600160a01b0316610418565b3480156107f157600080fd5b5061039b610800366004612e47565b6115d6565b34801561081157600080fd5b506103b2611628565b34801561082657600080fd5b506103e8610835366004612e00565b611637565b34801561084657600080fd5b5061039b611686565b34801561085b57600080fd5b506103e861086a366004612e00565b61178c565b34801561087b57600080fd5b5061039b61088a366004612e47565b611799565b34801561089b57600080fd5b50601b54610418906001600160a01b031681565b3480156108bb57600080fd5b50600254610461565b3480156108d057600080fd5b50610461606481565b3480156108e557600080fd5b5061039b6108f4366004612e2c565b6117eb565b34801561090557600080fd5b5061039b610914366004612e47565b611865565b34801561092557600080fd5b5061039b610934366004612d4c565b6118b7565b34801561094557600080fd5b50601554610418906001600160a01b031681565b34801561096557600080fd5b5061039b610974366004612e47565b611903565b34801561098557600080fd5b5061039b610994366004612e47565b6119bf565b3480156109a557600080fd5b506104616109b4366004612d86565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109eb57600080fd5b5061039b6109fa366004612e47565b611a44565b348015610a0b57600080fd5b5061039b610a1a366004612d4c565b611a96565b348015610a2b57600080fd5b50610461601c5481565b348015610a4157600080fd5b5061039b610a50366004612d4c565b611ae1565b348015610a6157600080fd5b5061039b611bb9565b6000546001600160a01b03163314610a9d5760405162461bcd60e51b8152600401610a9490612f0f565b60405180910390fd5b6064600f541115610ac05760405162461bcd60e51b8152600401610a9490612f44565b600f55565b6060600c8054610ad49061304b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b009061304b565b8015610b4d5780601f10610b2257610100808354040283529160200191610b4d565b820191906000526020600020905b815481529060010190602001808311610b3057829003601f168201915b5050505050905090565b6000610b64338484611c39565b5060015b92915050565b6000546001600160a01b03163314610b985760405162461bcd60e51b8152600401610a9490612f0f565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610bc7848484611d5d565b610c198433610c14856040518060600160405280602881526020016130fc602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611f05565b611c39565b5060019392505050565b6000600a54821115610c8a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a94565b6000610c94611f3f565b9050610ca08382611f62565b9392505050565b6000546001600160a01b03163314610cd15760405162461bcd60e51b8152600401610a9490612f0f565b6001600160a01b03811660009081526007602052604090205460ff16610d395760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a94565b60005b600854811015610e5a57816001600160a01b031660088281548110610d6357610d636130cd565b6000918252602090912001546001600160a01b03161415610e485760088054610d8e90600190613034565b81548110610d9e57610d9e6130cd565b600091825260209091200154600880546001600160a01b039092169183908110610dca57610dca6130cd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610e2257610e226130b7565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5281613086565b915050610d3c565b5050565b6000546001600160a01b03163314610e885760405162461bcd60e51b8152600401610a9490612f0f565b60646016541115610eab5760405162461bcd60e51b8152600401610a9490612f44565b601655565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b64918590610c149086611fa4565b3360008181526007602052604090205460ff1615610f5b5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610a94565b6000610f6683612003565b505050506001600160a01b038416600090815260036020526040902054919250610f9291905082612052565b6001600160a01b038316600090815260036020526040902055600a54610fb89082612052565b600a55600b54610fc89084611fa4565b600b55505050565b6000546001600160a01b03163314610ffa5760405162461bcd60e51b8152600401610a9490612f0f565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561103857600080fd5b505afa15801561104c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110709190612d69565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156110b857600080fd5b505afa1580156110cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f09190612d69565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561113857600080fd5b505af115801561114c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111709190612d69565b602080546001600160a01b039283166001600160a01b031991821617909155601f805493909216921691909117905550565b6000546001600160a01b031633146111cc5760405162461bcd60e51b8152600401610a9490612f0f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006009548311156112445760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a94565b8161126357600061125484612003565b50939550610b68945050505050565b600061126e84612003565b50929550610b68945050505050565b6000546001600160a01b031633146112a75760405162461bcd60e51b8152600401610a9490612f0f565b7305ff2b0db69458a0750badebc4f9e13add608c7f6001600160a01b038216141561131f5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c7564652050616e63616b6520726f757465604482015261391760f11b6064820152608401610a94565b6001600160a01b03811660009081526007602052604090205460ff16156113885760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a94565b6001600160a01b038116600090815260036020526040902054156113e2576001600160a01b0381166000908152600360205260409020546113c890610c23565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146114725760405162461bcd60e51b8152600401610a9490612f0f565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156114d157506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610b6890610c23565b6000546001600160a01b0316331461151d5760405162461bcd60e51b8152600401610a9490612f0f565b600080546040516001600160a01b0390911690600080516020613124833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461157f5760405162461bcd60e51b8152600401610a9490612f0f565b6000600f8190556010819055601181905560128190556020805460ff60a01b191681556040519182527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991015b60405180910390a1565b6000546001600160a01b031633146116005760405162461bcd60e51b8152600401610a9490612f0f565b606460115411156116235760405162461bcd60e51b8152600401610a9490612f44565b601155565b6060600d8054610ad49061304b565b6000610b643384610c1485604051806060016040528060258152602001613144602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611f05565b6001546001600160a01b031633146116ec5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a94565b600254421161173d5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a94565b600154600080546040516001600160a01b03938416939091169160008051602061312483398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b64338484611d5d565b6000546001600160a01b031633146117c35760405162461bcd60e51b8152600401610a9490612f0f565b606460195411156117e65760405162461bcd60e51b8152600401610a9490612f44565b601955565b6000546001600160a01b031633146118155760405162461bcd60e51b8152600401610a9490612f0f565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a150565b6000546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610a9490612f0f565b6064601c5411156118b25760405162461bcd60e51b8152600401610a9490612f44565b601c55565b6000546001600160a01b031633146118e15760405162461bcd60e51b8152600401610a9490612f0f565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461192d5760405162461bcd60e51b8152600401610a9490612f0f565b600a81116119995760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c656044820152727373207468616e2031302070657263656e742160681b6064820152608401610a94565b6119b960646119b38360095461209490919063ffffffff16565b90611f62565b60215550565b6000546001600160a01b031633146119e95760405162461bcd60e51b8152600401610a9490612f0f565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611a188142612fdb565b600255600080546040516001600160a01b0390911690600080516020613124833981519152908390a350565b6000546001600160a01b03163314611a6e5760405162461bcd60e51b8152600401610a9490612f0f565b60646013541115611a915760405162461bcd60e51b8152600401610a9490612f44565b601355565b6000546001600160a01b03163314611ac05760405162461bcd60e51b8152600401610a9490612f0f565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611b0b5760405162461bcd60e51b8152600401610a9490612f0f565b6001600160a01b038116611b705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a94565b600080546040516001600160a01b038085169392169160008051602061312483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611be35760405162461bcd60e51b8152600401610a9490612f0f565b6014600f819055601055602360118190556012556020805460ff60a01b1916600160a01b178155604051600181527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991016115cc565b6001600160a01b038316611c9b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a94565b6001600160a01b038216611cfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a94565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611dc15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a94565b6001600160a01b038216611e235760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a94565b60008111611e855760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a94565b6000611e9030611494565b60225490915081108015908190611eb15750602054600160a01b900460ff16155b8015611ecb57506020546001600160a01b03868116911614155b8015611ee05750602054600160a81b900460ff165b15611ef3576022549150611ef382612113565b611efe8585856121ba565b5050505050565b60008184841115611f295760405162461bcd60e51b8152600401610a949190612eba565b506000611f368486613034565b95945050505050565b6000806000611f4c612548565b9092509050611f5b8282611f62565b9250505090565b6000610ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126ca565b600080611fb18385612fdb565b905083811015610ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a94565b600080600080600080600080600061201a8a6126f8565b92509250925060008060006120388d8686612033611f3f565b612734565b919f909e50909c50959a5093985091965092945050505050565b6000610ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f05565b6000826120a357506000610b68565b60006120af8385613015565b9050826120bc8583612ff3565b14610ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a94565b6020805460ff60a01b1916600160a01b1790556000612133826002611f62565b905060006121418383612052565b90504761214d83612784565b60006121594783612052565b905061216583826128ed565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506020805460ff60a01b19169055505050565b6001600160a01b03831660009081526006602052604090205460ff16806121f957506001600160a01b03821660009081526006602052604090205460ff165b156122125761220d6000600f819055601155565b612275565b6021548111156122755760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a94565b60006122886103e86119b384600a612094565b9050600061229d6103e86119b3856014612094565b905060006122b26103e86119b3866014612094565b905060006122c76103e86119b3876014612094565b6001600160a01b03881660009081526007602052604090205490915060ff16801561230b57506001600160a01b03861660009081526007602052604090205460ff16155b1561233757612332878761232d8461232787818a818e8e612052565b90612052565b6129ca565b612474565b6001600160a01b03871660009081526007602052604090205460ff1615801561237857506001600160a01b03861660009081526007602052604090205460ff165b156123995761233287876123948461232787818a818e8e612052565b612af0565b6001600160a01b03871660009081526007602052604090205460ff161580156123db57506001600160a01b03861660009081526007602052604090205460ff16155b156123fc5761233287876123f78461232787818a818e8e612052565b612b99565b6001600160a01b03871660009081526007602052604090205460ff16801561243c57506001600160a01b03861660009081526007602052604090205460ff165b1561245d5761233287876124588461232787818a818e8e612052565b612bdd565b61247487876123f78461232787818a818e8e612052565b6000600f819055601155601e546124969088906001600160a01b031683612b99565b6018546124ae9088906001600160a01b031686612b99565b601b546124c69088906001600160a01b031685612b99565b6015546124de9088906001600160a01b031684612b99565b601054600f556012546011556001600160a01b03871660009081526006602052604090205460ff168061252957506001600160a01b03861660009081526006602052604090205460ff165b1561253f5761253f601054600f55601254601155565b50505050505050565b600a546009546000918291825b60085481101561269a57826003600060088481548110612577576125776130cd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806125e257508160046000600884815481106125bb576125bb6130cd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156125f857600a54600954945094505050509091565b61263e6003600060088481548110612612576126126130cd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612052565b9250612686600460006008848154811061265a5761265a6130cd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612052565b91508061269281613086565b915050612555565b50600954600a546126aa91611f62565b8210156126c157600a546009549350935050509091565b90939092509050565b600081836126eb5760405162461bcd60e51b8152600401610a949190612eba565b506000611f368486612ff3565b60008060008061270785612c50565b9050600061271486612c6d565b90506000612726826123278986612052565b979296509094509092505050565b60008080806127438886612094565b905060006127518887612094565b9050600061275f8888612094565b90506000612771826123278686612052565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127b9576127b96130cd565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561280d57600080fd5b505afa158015612821573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128459190612d69565b81600181518110612858576128586130cd565b6001600160a01b039283166020918202929092010152601f5461287e9130911684611c39565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac947906128b7908590600090869030904290600401612f6a565b600060405180830381600087803b1580156128d157600080fd5b505af11580156128e5573d6000803e3d6000fd5b505050505050565b601f546129059030906001600160a01b031684611c39565b601f546001600160a01b031663f305d71982308560008061292e6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561299157600080fd5b505af11580156129a5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611efe9190612e8c565b6000806000806000806129dc87612003565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612a0e9088612052565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a3d9087612052565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612a6c9086611fa4565b6001600160a01b038916600090815260036020526040902055612a8e81612c8a565b612a988483612d13565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612add91815260200190565b60405180910390a3505050505050505050565b600080600080600080612b0287612003565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612b349087612052565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612b6a9084611fa4565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612a6c9086611fa4565b600080600080600080612bab87612003565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a3d9087612052565b600080600080600080612bef87612003565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612c219088612052565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612b349087612052565b6000610b686103e86119b3600f548561209490919063ffffffff16565b6000610b686103e86119b36011548561209490919063ffffffff16565b6000612c94611f3f565b90506000612ca28383612094565b30600090815260036020526040902054909150612cbf9082611fa4565b3060009081526003602090815260408083209390935560079052205460ff1615612d0e5730600090815260046020526040902054612cfd9084611fa4565b306000908152600460205260409020555b505050565b600a54612d209083612052565b600a55600b54612d309082611fa4565b600b555050565b80358015158114612d4757600080fd5b919050565b600060208284031215612d5e57600080fd5b8135610ca0816130e3565b600060208284031215612d7b57600080fd5b8151610ca0816130e3565b60008060408385031215612d9957600080fd5b8235612da4816130e3565b91506020830135612db4816130e3565b809150509250929050565b600080600060608486031215612dd457600080fd5b8335612ddf816130e3565b92506020840135612def816130e3565b929592945050506040919091013590565b60008060408385031215612e1357600080fd5b8235612e1e816130e3565b946020939093013593505050565b600060208284031215612e3e57600080fd5b610ca082612d37565b600060208284031215612e5957600080fd5b5035919050565b60008060408385031215612e7357600080fd5b82359150612e8360208401612d37565b90509250929050565b600080600060608486031215612ea157600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612ee757858101830151858201604001528201612ecb565b81811115612ef9576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b08ccaca40a8dede4090d2ced60a31b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fba5784516001600160a01b031683529383019391830191600101612f95565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612fee57612fee6130a1565b500190565b60008261301057634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561302f5761302f6130a1565b500290565b600082821015613046576130466130a1565b500390565b600181811c9082168061305f57607f821691505b6020821081141561308057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561309a5761309a6130a1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146130f857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122024feb43c49acfe2b5a813becc5493cb6301d9241dec1f36e1ce2fbeb7f24fa2c64736f6c63430008060033

Deployed ByteCode Sourcemap

25641:22096:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46761:152;;;;;;;;;;-1:-1:-1;46761:152:0;;;;;:::i;:::-;;:::i;:::-;;28796:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29708:161;;;;;;;;;;-1:-1:-1;29708:161:0;;;;;:::i;:::-;;:::i;:::-;;;4089:14:1;;4082:22;4064:41;;4052:2;4037:18;29708:161:0;4019:92:1;27257:78:0;;;;;;;;;;-1:-1:-1;27257:78:0;;;;-1:-1:-1;;;;;27257:78:0;;;;;;-1:-1:-1;;;;;2959:32:1;;;2941:51;;2929:2;2914:18;27257:78:0;2896:102:1;45571:113:0;;;;;;;;;;-1:-1:-1;45571:113:0;;;;;:::i;:::-;;:::i;30829:87::-;;;;;;;;;;-1:-1:-1;30898:10:0;;30829:87;;;12530:25:1;;;12518:2;12503:18;30829:87:0;12485:76:1;27342:42:0;;;;;;;;;;-1:-1:-1;27342:42:0;;;;-1:-1:-1;;;;;27342:42:0;;;29073:95;;;;;;;;;;-1:-1:-1;29153:7:0;;29073:95;;26782:33;;;;;;;;;;;;;;;;29877:313;;;;;;;;;;-1:-1:-1;29877:313:0;;;;;:::i;:::-;;:::i;26605:31::-;;;;;;;;;;;;;;;;31753:253;;;;;;;;;;-1:-1:-1;31753:253:0;;;;;:::i;:::-;;:::i;28982:83::-;;;;;;;;;;-1:-1:-1;29048:9:0;;28982:83;;29048:9;;;;14017:36:1;;14005:2;13990:18;28982:83:0;13972:87:1;32466:479:0;;;;;;;;;;-1:-1:-1;32466:479:0;;;;;:::i;:::-;;:::i;46400:179::-;;;;;;;;;;-1:-1:-1;46400:179:0;;;;;:::i;:::-;;:::i;30198:218::-;;;;;;;;;;-1:-1:-1;30198:218:0;;;;;:::i;:::-;;:::i;26410:27::-;;;;;;;;;;;;;;;;30924:377;;;;;;;;;;-1:-1:-1;30924:377:0;;;;;:::i;:::-;;:::i;26970:31::-;;;;;;;;;;;;;;;;45876:322;;;;;;;;;;-1:-1:-1;45876:322:0;;;;;:::i;:::-;;:::i;44576:111::-;;;;;;;;;;-1:-1:-1;44576:111:0;;;;;:::i;:::-;;:::i;31309:436::-;;;;;;;;;;-1:-1:-1;31309:436:0;;;;;:::i;:::-;;:::i;27391:29::-;;;;;;;;;;-1:-1:-1;27391:29:0;;;;-1:-1:-1;;;;;27391:29:0;;;27461:40;;;;;;;;;;-1:-1:-1;27461:40:0;;;;-1:-1:-1;;;27461:40:0;;;;;;32014:444;;;;;;;;;;-1:-1:-1;32014:444:0;;;;;:::i;:::-;;:::i;36756:123::-;;;;;;;;;;-1:-1:-1;36756:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;36844:27:0;36820:4;36844:27;;;:18;:27;;;;;;;;;36756:123;45445:114;;;;;;;;;;-1:-1:-1;45445:114:0;;;;;:::i;:::-;;:::i;26499:33::-;;;;;;;;;;;;;;;;29176:198;;;;;;;;;;-1:-1:-1;29176:198:0;;;;;:::i;:::-;;:::i;16212:148::-;;;;;;;;;;;;;:::i;45158:275::-;;;;;;;;;;;;;:::i;26882:75::-;;;;;;;;;;-1:-1:-1;26882:75:0;;;;-1:-1:-1;;;;;26882:75:0;;;27510:50;;;;;;;;;;;;;;;;30701:120;;;;;;;;;;-1:-1:-1;30701:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30793:20:0;30769:4;30793:20;;;:11;:20;;;;;;;;;30701:120;15569:79;;;;;;;;;;-1:-1:-1;15607:7:0;15634:6;-1:-1:-1;;;;;15634:6:0;15569:79;;46206:182;;;;;;;;;;-1:-1:-1;46206:182:0;;;;;:::i;:::-;;:::i;28887:87::-;;;;;;;;;;;;;:::i;30424:269::-;;;;;;;;;;-1:-1:-1;30424:269:0;;;;;:::i;:::-;;:::i;17234:305::-;;;;;;;;;;;;;:::i;29382:167::-;;;;;;;;;;-1:-1:-1;29382:167:0;;;;;:::i;:::-;;:::i;46585:170::-;;;;;;;;;;-1:-1:-1;46585:170:0;;;;;:::i;:::-;;:::i;27064:74::-;;;;;;;;;;-1:-1:-1;27064:74:0;;;;-1:-1:-1;;;;;27064:74:0;;;16767:89;;;;;;;;;;-1:-1:-1;16839:9:0;;16767:89;;27640:37;;;;;;;;;;;;27674:3;27640:37;;47557:171;;;;;;;;;;-1:-1:-1;47557:171:0;;;;;:::i;:::-;;:::i;47097:192::-;;;;;;;;;;-1:-1:-1;47097:192:0;;;;;:::i;:::-;;:::i;45696:128::-;;;;;;;;;;-1:-1:-1;45696:128:0;;;;;:::i;:::-;;:::i;26699:74::-;;;;;;;;;;-1:-1:-1;26699:74:0;;;;-1:-1:-1;;;;;26699:74:0;;;47295:254;;;;;;;;;;-1:-1:-1;47295:254:0;;;;;:::i;:::-;;:::i;16932:226::-;;;;;;;;;;-1:-1:-1;16932:226:0;;;;;:::i;:::-;;:::i;29557:143::-;;;;;;;;;;-1:-1:-1;29557:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29665:18:0;;;29638:7;29665:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29557:143;46919:172;;;;;;;;;;-1:-1:-1;46919:172:0;;;;;:::i;:::-;;:::i;44699:110::-;;;;;;;;;;-1:-1:-1;44699:110:0;;;;;:::i;:::-;;:::i;27151:35::-;;;;;;;;;;;;;;;;16515:244;;;;;;;;;;-1:-1:-1;16515:244:0;;;;;:::i;:::-;;:::i;44876:274::-;;;;;;;;;;;;;:::i;46761:152::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;;;;;;;;;27674:3:::1;46843:7;;:18;;46835:43;;;;-1:-1:-1::0;;;46835:43:0::1;;;;;;;:::i;:::-;46889:7;:16:::0;46761:152::o;28796:83::-;28833:13;28866:5;28859:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28796:83;:::o;29708:161::-;29783:4;29800:39;8060:10;29823:7;29832:6;29800:8;:39::i;:::-;-1:-1:-1;29857:4:0;29708:161;;;;;:::o;45571:113::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;45649:14:::1;:27:::0;;-1:-1:-1;;;;;;45649:27:0::1;-1:-1:-1::0;;;;;45649:27:0;;;::::1;::::0;;;::::1;::::0;;45571:113::o;29877:313::-;29975:4;29992:36;30002:6;30010:9;30021:6;29992:9;:36::i;:::-;30039:121;30048:6;8060:10;30070:89;30108:6;30070:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30070:19:0;;;;;;:11;:19;;;;;;;;8060:10;30070:33;;;;;;;;;;:37;:89::i;:::-;30039:8;:121::i;:::-;-1:-1:-1;30178:4:0;29877:313;;;;;:::o;31753:253::-;31819:7;31858;;31847;:18;;31839:73;;;;-1:-1:-1;;;31839:73:0;;5559:2:1;31839:73:0;;;5541:21:1;5598:2;5578:18;;;5571:30;5637:34;5617:18;;;5610:62;-1:-1:-1;;;5688:18:1;;;5681:40;5738:19;;31839:73:0;5531:232:1;31839:73:0;31923:19;31946:10;:8;:10::i;:::-;31923:33;-1:-1:-1;31974:24:0;:7;31923:33;31974:11;:24::i;:::-;31967:31;31753:253;-1:-1:-1;;;31753:253:0:o;32466:479::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32548:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32540:60;;;::::0;-1:-1:-1;;;32540:60:0;;7136:2:1;32540:60:0::1;::::0;::::1;7118:21:1::0;7175:2;7155:18;;;7148:30;7214:29;7194:18;;;7187:57;7261:18;;32540:60:0::1;7108:177:1::0;32540:60:0::1;32616:9;32611:327;32635:9;:16:::0;32631:20;::::1;32611:327;;;32693:7;-1:-1:-1::0;;;;;32677:23:0::1;:9;32687:1;32677:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32677:12:0::1;:23;32673:254;;;32736:9;32746:16:::0;;:20:::1;::::0;32765:1:::1;::::0;32746:20:::1;:::i;:::-;32736:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32721:9:::1;:12:::0;;-1:-1:-1;;;;;32736:31:0;;::::1;::::0;32731:1;;32721:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32721:46:0::1;-1:-1:-1::0;;;;;32721:46:0;;::::1;;::::0;;32786:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32825:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32825:28:0::1;::::0;;32872:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32872:15:0;;;;;-1:-1:-1;;;;;;32872:15:0::1;::::0;;;;;32611:327:::1;32466:479:::0;:::o;32673:254::-:1;32653:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32611:327;;;;32466:479:::0;:::o;46400:179::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;27674:3:::1;46491:13;;:24;;46483:49;;;;-1:-1:-1::0;;;46483:49:0::1;;;;;;;:::i;:::-;46543:13;:28:::0;46400:179::o;30198:218::-;8060:10;30286:4;30335:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30335:34:0;;;;;;;;;;30286:4;;30303:83;;30326:7;;30335:50;;30374:10;30335:38;:50::i;30924:377::-;8060:10;30976:14;31025:19;;;:11;:19;;;;;;;;31024:20;31016:77;;;;-1:-1:-1;;;31016:77:0;;11769:2:1;31016:77:0;;;11751:21:1;11808:2;11788:18;;;11781:30;11847:34;11827:18;;;11820:62;-1:-1:-1;;;11898:18:1;;;11891:42;11950:19;;31016:77:0;11741:234:1;31016:77:0;31105:15;31129:19;31140:7;31129:10;:19::i;:::-;-1:-1:-1;;;;;;;;;31177:15:0;;;;;;:7;:15;;;;;;31104:44;;-1:-1:-1;31177:28:0;;:15;-1:-1:-1;31104:44:0;31177:19;:28::i;:::-;-1:-1:-1;;;;;31159:15:0;;;;;;:7;:15;;;;;:46;31226:7;;:20;;31238:7;31226:11;:20::i;:::-;31216:7;:30;31270:10;;:23;;31285:7;31270:14;:23::i;:::-;31257:10;:36;-1:-1:-1;;;30924:377:0:o;45876:322::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;45951:36:::1;46009:9;45951:68;;46064:17;-1:-1:-1::0;;;;;46064:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46046:57:0::1;;46112:4;46119:17;-1:-1:-1::0;;;;;46119:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46046:98;::::0;-1:-1:-1;;;;;;46046:98:0::1;::::0;;;;;;-1:-1:-1;;;;;3233:15:1;;;46046:98:0::1;::::0;::::1;3215:34:1::0;3285:15;;3265:18;;;3258:43;3150:18;;46046:98:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46030:13;:114:::0;;-1:-1:-1;;;;;46030:114:0;;::::1;-1:-1:-1::0;;;;;;46030:114:0;;::::1;;::::0;;;46155:15:::1;:35:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;45876:322:0:o;44576:111::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44645:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;44645:34:0::1;44675:4;44645:34;::::0;;44576:111::o;31309:436::-;31399:7;31438;;31427;:18;;31419:62;;;;-1:-1:-1;;;31419:62:0;;7492:2:1;31419:62:0;;;7474:21:1;7531:2;7511:18;;;7504:30;7570:33;7550:18;;;7543:61;7621:18;;31419:62:0;7464:181:1;31419:62:0;31497:17;31492:246;;31532:15;31556:19;31567:7;31556:10;:19::i;:::-;-1:-1:-1;31531:44:0;;-1:-1:-1;31590:14:0;;-1:-1:-1;;;;;31590:14:0;31492:246;31639:23;31670:19;31681:7;31670:10;:19::i;:::-;-1:-1:-1;31637:52:0;;-1:-1:-1;31704:22:0;;-1:-1:-1;;;;;31704:22:0;32014:444;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;32107:42:::1;-1:-1:-1::0;;;;;32096:53:0;::::1;;;32088:100;;;::::0;-1:-1:-1;;;32088:100:0;;10665:2:1;32088:100:0::1;::::0;::::1;10647:21:1::0;10704:2;10684:18;;;10677:30;10743:34;10723:18;;;10716:62;-1:-1:-1;;;10794:18:1;;;10787:32;10836:19;;32088:100:0::1;10637:224:1::0;32088:100:0::1;-1:-1:-1::0;;;;;32208:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32207:21;32199:61;;;::::0;-1:-1:-1;;;32199:61:0;;7136:2:1;32199:61:0::1;::::0;::::1;7118:21:1::0;7175:2;7155:18;;;7148:30;7214:29;7194:18;;;7187:57;7261:18;;32199:61:0::1;7108:177:1::0;32199:61:0::1;-1:-1:-1::0;;;;;32274:16:0;::::1;32293:1;32274:16:::0;;;:7:::1;:16;::::0;;;;;:20;32271:108:::1;;-1:-1:-1::0;;;;;32350:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32330:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32311:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32271:108:::1;-1:-1:-1::0;;;;;32389:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32389:27:0::1;32412:4;32389:27:::0;;::::1;::::0;;;32427:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32427:23:0::1;::::0;;::::1;::::0;;32014:444::o;45445:114::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;45524:15:::1;:27:::0;;-1:-1:-1;;;;;;45524:27:0::1;-1:-1:-1::0;;;;;45524:27:0;;;::::1;::::0;;;::::1;::::0;;45445:114::o;29176:198::-;-1:-1:-1;;;;;29266:20:0;;29242:7;29266:20;;;:11;:20;;;;;;;;29262:49;;;-1:-1:-1;;;;;;29295:16:0;;;;;:7;:16;;;;;;;29176:198::o;29262:49::-;-1:-1:-1;;;;;29349:16:0;;;;;;:7;:16;;;;;;29329:37;;:19;:37::i;16212:148::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;16319:1:::1;16303:6:::0;;16282:40:::1;::::0;-1:-1:-1;;;;;16303:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16282:40:0;16319:1;;16282:40:::1;16350:1;16333:19:::0;;-1:-1:-1;;;;;;16333:19:0::1;::::0;;16212:148::o;45158:275::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;45226:1:::1;45216:7;:11:::0;;;45238:15:::1;:25:::0;;;45274:13:::1;:17:::0;;;45302:21:::1;:37:::0;;;45350:16:::1;:24:::0;;-1:-1:-1;;;;45350:24:0::1;::::0;;45390:35:::1;::::0;4064:41:1;;;45390:35:0::1;::::0;4037:18:1;45390:35:0::1;;;;;;;;45158:275::o:0;46206:182::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;27674:3:::1;46300:13;;:24;;46292:49;;;;-1:-1:-1::0;;;46292:49:0::1;;;;;;;:::i;:::-;46352:13;:28:::0;46206:182::o;28887:87::-;28926:13;28959:7;28952:14;;;;;:::i;30424:269::-;30517:4;30534:129;8060:10;30557:7;30566:96;30605:15;30566:96;;;;;;;;;;;;;;;;;8060:10;30566:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30566:34:0;;;;;;;;;;;;:38;:96::i;17234:305::-;17286:14;;-1:-1:-1;;;;;17286:14:0;17304:10;17286:28;17278:76;;;;-1:-1:-1;;;17278:76:0;;12182:2:1;17278:76:0;;;12164:21:1;12221:2;12201:18;;;12194:30;12260:34;12240:18;;;12233:62;-1:-1:-1;;;12311:18:1;;;12304:33;12354:19;;17278:76:0;12154:225:1;17278:76:0;17391:9;;17373:15;:27;17365:72;;;;-1:-1:-1;;;17365:72:0;;11068:2:1;17365:72:0;;;11050:21:1;11107:2;11087:18;;;11080:30;11146:33;11126:18;;;11119:61;11197:18;;17365:72:0;11040:181:1;17365:72:0;17482:14;;;17474:6;;17453:44;;-1:-1:-1;;;;;17482:14:0;;;;17474:6;;;;-1:-1:-1;;;;;;;;;;;17453:44:0;;17517:14;;;17508:23;;-1:-1:-1;;;;;;17508:23:0;-1:-1:-1;;;;;17517:14:0;;;17508:23;;;;;;17234:305::o;29382:167::-;29460:4;29477:42;8060:10;29501:9;29512:6;29477:9;:42::i;46585:170::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;27674:3:::1;46674:11;;:22;;46666:47;;;;-1:-1:-1::0;;;46666:47:0::1;;;;;;;:::i;:::-;46723:11;:24:::0;46585:170::o;47557:171::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;47634:21:::1;:32:::0;;-1:-1:-1;;;;47634:32:0::1;-1:-1:-1::0;;;47634:32:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;47682:38:::1;::::0;4064:41:1;;;47682:38:0::1;::::0;4037:18:1;47682:38:0::1;;;;;;;47557:171:::0;:::o;47097:192::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;27674:3:::1;47195:15;;:26;;47187:51;;;;-1:-1:-1::0;;;47187:51:0::1;;;;;;;:::i;:::-;47249:15;:32:::0;47097:192::o;45696:128::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;45781:18:::1;:35:::0;;-1:-1:-1;;;;;;45781:35:0::1;-1:-1:-1::0;;;;;45781:35:0;;;::::1;::::0;;;::::1;::::0;;45696:128::o;47295:254::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;47397:2:::1;47382:12;:17;47374:81;;;::::0;-1:-1:-1;;;47374:81:0;;8261:2:1;47374:81:0::1;::::0;::::1;8243:21:1::0;8300:2;8280:18;;;8273:30;8339:34;8319:18;;;8312:62;-1:-1:-1;;;8390:18:1;;;8383:49;8449:19;;47374:81:0::1;8233:241:1::0;47374:81:0::1;47481:60;47525:5;47481:25;47493:12;47481:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;47466:12;:75:::0;-1:-1:-1;47295:254:0:o;16932:226::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;17013:6:::1;::::0;;;16996:23;;-1:-1:-1;;;;;;16996:23:0;;::::1;-1:-1:-1::0;;;;;17013:6:0;::::1;16996:23;::::0;;;17030:19:::1;::::0;;17072:22:::1;17090:4:::0;17072:15:::1;:22;:::i;:::-;17060:9;:34:::0;17147:1:::1;17131:6:::0;;17110:40:::1;::::0;-1:-1:-1;;;;;17131:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17110:40:0;17147:1;;17110:40:::1;16932:226:::0;:::o;46919:172::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;27674:3:::1;47009:11;;:22;;47001:47;;;;-1:-1:-1::0;;;47001:47:0::1;;;;;;;:::i;:::-;47059:11;:24:::0;46919:172::o;44699:110::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44766:27:0::1;44796:5;44766:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;44766:35:0::1;::::0;;44699:110::o;16515:244::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16604:22:0;::::1;16596:73;;;::::0;-1:-1:-1;;;16596:73:0;;5970:2:1;16596:73:0::1;::::0;::::1;5952:21:1::0;6009:2;5989:18;;;5982:30;6048:34;6028:18;;;6021:62;-1:-1:-1;;;6099:18:1;;;6092:36;6145:19;;16596:73:0::1;5942:228:1::0;16596:73:0::1;16706:6;::::0;;16685:38:::1;::::0;-1:-1:-1;;;;;16685:38:0;;::::1;::::0;16706:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16685:38:0;::::1;16734:6;:17:::0;;-1:-1:-1;;;;;;16734:17:0::1;-1:-1:-1::0;;;;;16734:17:0;;;::::1;::::0;;;::::1;::::0;;16515:244::o;44876:274::-;15781:6;;-1:-1:-1;;;;;15781:6:0;8060:10;15781:22;15773:67;;;;-1:-1:-1;;;15773:67:0;;;;;;;:::i;:::-;44943:2:::1;44933:7;:12:::0;;;44956:15:::1;:25:::0;45008:2:::1;44992:13;:18:::0;;;45021:21:::1;:37:::0;45069:16:::1;:23:::0;;-1:-1:-1;;;;45069:23:0::1;-1:-1:-1::0;;;45069:23:0::1;::::0;;45108:34:::1;::::0;-1:-1:-1;4064:41:1;;45108:34:0::1;::::0;4037:18:1;45108:34:0::1;4019:92:1::0;36887:337:0;-1:-1:-1;;;;;36980:19:0;;36972:68;;;;-1:-1:-1;;;36972:68:0;;10260:2:1;36972:68:0;;;10242:21:1;10299:2;10279:18;;;10272:30;10338:34;10318:18;;;10311:62;-1:-1:-1;;;10389:18:1;;;10382:34;10433:19;;36972:68:0;10232:226:1;36972:68:0;-1:-1:-1;;;;;37059:21:0;;37051:68;;;;-1:-1:-1;;;37051:68:0;;6377:2:1;37051:68:0;;;6359:21:1;6416:2;6396:18;;;6389:30;6455:34;6435:18;;;6428:62;-1:-1:-1;;;6506:18:1;;;6499:32;6548:19;;37051:68:0;6349:224:1;37051:68:0;-1:-1:-1;;;;;37132:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37184:32;;12530:25:1;;;37184:32:0;;12503:18:1;37184:32:0;;;;;;;36887:337;;;:::o;37232:1234::-;-1:-1:-1;;;;;37354:18:0;;37346:68;;;;-1:-1:-1;;;37346:68:0;;9854:2:1;37346:68:0;;;9836:21:1;9893:2;9873:18;;;9866:30;9932:34;9912:18;;;9905:62;-1:-1:-1;;;9983:18:1;;;9976:35;10028:19;;37346:68:0;9826:227:1;37346:68:0;-1:-1:-1;;;;;37433:16:0;;37425:64;;;;-1:-1:-1;;;37425:64:0;;5155:2:1;37425:64:0;;;5137:21:1;5194:2;5174:18;;;5167:30;5233:34;5213:18;;;5206:62;-1:-1:-1;;;5284:18:1;;;5277:33;5327:19;;37425:64:0;5127:225:1;37425:64:0;37517:1;37508:6;:10;37500:64;;;;-1:-1:-1;;;37500:64:0;;9444:2:1;37500:64:0;;;9426:21:1;9483:2;9463:18;;;9456:30;9522:34;9502:18;;;9495:62;-1:-1:-1;;;9573:18:1;;;9566:39;9622:19;;37500:64:0;9416:231:1;37500:64:0;37859:28;37890:24;37908:4;37890:9;:24::i;:::-;37984:29;;37859:55;;-1:-1:-1;37960:53:0;;;;;;;38042;;-1:-1:-1;38079:16:0;;-1:-1:-1;;;38079:16:0;;;;38078:17;38042:53;:91;;;;-1:-1:-1;38120:13:0;;-1:-1:-1;;;;;38112:21:0;;;38120:13;;38112:21;;38042:91;:129;;;;-1:-1:-1;38150:21:0;;-1:-1:-1;;;38150:21:0;;;;38042:129;38024:318;;;38221:29;;38198:52;;38294:36;38309:20;38294:14;:36::i;:::-;38428:30;38443:4;38448:2;38451:6;38428:14;:30::i;:::-;37335:1131;;37232:1234;;;:::o;4378:192::-;4464:7;4500:12;4492:6;;;;4484:29;;;;-1:-1:-1;;;4484:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4524:9:0;4536:5;4540:1;4536;:5;:::i;:::-;4524:17;4378:192;-1:-1:-1;;;;;4378:192:0:o;35066:163::-;35107:7;35128:15;35145;35164:19;:17;:19::i;:::-;35127:56;;-1:-1:-1;35127:56:0;-1:-1:-1;35201:20:0;35127:56;;35201:11;:20::i;:::-;35194:27;;;;35066:163;:::o;5776:132::-;5834:7;5861:39;5865:1;5868;5861:39;;;;;;;;;;;;;;;;;:3;:39::i;3475:181::-;3533:7;;3565:5;3569:1;3565;:5;:::i;:::-;3553:17;;3594:1;3589;:6;;3581:46;;;;-1:-1:-1;;;3581:46:0;;6780:2:1;3581:46:0;;;6762:21:1;6819:2;6799:18;;;6792:30;6858:29;6838:18;;;6831:57;6905:18;;3581:46:0;6752:177:1;33864:419:0;33923:7;33932;33941;33950;33959;33968;33989:23;34014:12;34028:18;34050:20;34062:7;34050:11;:20::i;:::-;33988:82;;;;;;34082:15;34099:23;34124:12;34140:50;34152:7;34161:4;34167:10;34179;:8;:10::i;:::-;34140:11;:50::i;:::-;34081:109;;;;-1:-1:-1;34081:109:0;;-1:-1:-1;34241:15:0;;-1:-1:-1;34258:4:0;;-1:-1:-1;34264:10:0;;-1:-1:-1;33864:419:0;;-1:-1:-1;;;;;33864:419:0:o;3939:136::-;3997:7;4024:43;4028:1;4031;4024:43;;;;;;;;;;;;;;;;;:3;:43::i;4829:471::-;4887:7;5132:6;5128:47;;-1:-1:-1;5162:1:0;5155:8;;5128:47;5187:9;5199:5;5203:1;5199;:5;:::i;:::-;5187:17;-1:-1:-1;5232:1:0;5223:5;5227:1;5187:17;5223:5;:::i;:::-;:10;5215:56;;;;-1:-1:-1;;;5215:56:0;;8681:2:1;5215:56:0;;;8663:21:1;8720:2;8700:18;;;8693:30;8759:34;8739:18;;;8732:62;-1:-1:-1;;;8810:18:1;;;8803:31;8851:19;;5215:56:0;8653:223:1;38474:985:0;27984:16;:23;;-1:-1:-1;;;;27984:23:0;-1:-1:-1;;;27984:23:0;;;;38625:27:::1;:20:::0;38650:1:::1;38625:24;:27::i;:::-;38610:42:::0;-1:-1:-1;38663:17:0::1;38683:30;:20:::0;38610:42;38683:24:::1;:30::i;:::-;38663:50:::0;-1:-1:-1;39016:21:0::1;39082:22;39099:4:::0;39082:16:::1;:22::i;:::-;39235:18;39256:41;:21;39282:14:::0;39256:25:::1;:41::i;:::-;39235:62;;39347:35;39360:9;39371:10;39347:12;:35::i;:::-;39408:43;::::0;;13753:25:1;;;13809:2;13794:18;;13787:34;;;13837:18;;;13830:34;;;39408:43:0::1;::::0;13741:2:1;13726:18;39408:43:0::1;;;;;;;-1:-1:-1::0;;28030:16:0;:24;;-1:-1:-1;;;;28030:24:0;;;-1:-1:-1;;;38474:985:0:o;40658:2232::-;-1:-1:-1;;;;;40755:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;40785:29:0;;;;;;:18;:29;;;;;;;;40755:59;40752:220;;;40830:14;36570:1;36560:7;:11;;;36582:13;:17;36517:90;40830:14;40752:220;;;40903:12;;40893:6;:22;;40885:75;;;;-1:-1:-1;;;40885:75:0;;7852:2:1;40885:75:0;;;7834:21:1;7891:2;7871:18;;;7864:30;7930:34;7910:18;;;7903:62;-1:-1:-1;;;7981:18:1;;;7974:38;8029:19;;40885:75:0;7824:230:1;40885:75:0;41046:20;41069:24;41088:4;41069:14;:6;41080:2;41069:10;:14::i;:24::-;41046:47;-1:-1:-1;41104:18:0;41125:24;41144:4;41125:14;:6;41136:2;41125:10;:14::i;:24::-;41104:45;-1:-1:-1;41160:18:0;41181:24;41200:4;41181:14;:6;41192:2;41181:10;:14::i;:24::-;41160:45;-1:-1:-1;41216:22:0;41241:24;41260:4;41241:14;:6;41252:2;41241:10;:14::i;:24::-;-1:-1:-1;;;;;41282:19:0;;;;;;:11;:19;;;;;;41216:49;;-1:-1:-1;41282:19:0;;:46;;;;-1:-1:-1;;;;;;41306:22:0;;;;;;:11;:22;;;;;;;;41305:23;41282:46;41278:957;;;41345:120;41367:6;41375:9;41387:76;41448:14;41387:56;41432:10;41387:56;41416:10;41387:56;:6;41398:12;41387:10;:24::i;:::-;:28;;:40::i;:76::-;41345:21;:120::i;:::-;41278:957;;;-1:-1:-1;;;;;41488:19:0;;;;;;:11;:19;;;;;;;;41487:20;:46;;;;-1:-1:-1;;;;;;41511:22:0;;;;;;:11;:22;;;;;;;;41487:46;41483:752;;;41550:118;41570:6;41578:9;41590:76;41651:14;41590:56;41635:10;41590:56;41619:10;41590:56;:6;41601:12;41590:10;:24::i;:76::-;41550:19;:118::i;41483:752::-;-1:-1:-1;;;;;41691:19:0;;;;;;:11;:19;;;;;;;;41690:20;:47;;;;-1:-1:-1;;;;;;41715:22:0;;;;;;:11;:22;;;;;;;;41714:23;41690:47;41686:549;;;41754:116;41772:6;41780:9;41792:76;41853:14;41792:56;41837:10;41792:56;41821:10;41792:56;:6;41803:12;41792:10;:24::i;:76::-;41754:17;:116::i;41686:549::-;-1:-1:-1;;;;;41892:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;41915:22:0;;;;;;:11;:22;;;;;;;;41892:45;41888:347;;;41954:120;41976:6;41984:9;41996:76;42057:14;41996:56;42041:10;41996:56;42025:10;41996:56;:6;42007:12;41996:10;:24::i;:76::-;41954:21;:120::i;41888:347::-;42107:116;42125:6;42133:9;42145:76;42206:14;42145:56;42190:10;42145:56;42174:10;42145:56;:6;42156:12;42145:10;:24::i;42107:116::-;42349:1;42339:7;:11;;;42361:13;:17;42417:18;;42391:61;;42409:6;;-1:-1:-1;;;;;42417:18:0;42437:14;42391:17;:61::i;:::-;42489:15;;42463:56;;42481:6;;-1:-1:-1;;;;;42489:15:0;42506:12;42463:17;:56::i;:::-;42556:14;;42530:53;;42548:6;;-1:-1:-1;;;;;42556:14:0;42572:10;42530:17;:53::i;:::-;42620:14;;42594:53;;42612:6;;-1:-1:-1;;;;;42620:14:0;42636:10;42594:17;:53::i;:::-;42712:15;;42702:7;:25;42754:21;;42738:13;:37;-1:-1:-1;;;;;42793:26:0;;-1:-1:-1;42793:26:0;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;42823:29:0;;;;;;:18;:29;;;;;;;;42793:59;42790:92;;;42867:15;36673;;36663:7;:25;36715:21;;36699:13;:37;36619:125;42867:15;40741:2149;;;;40658:2232;;;:::o;35237:561::-;35334:7;;35370;;35287;;;;;35394:289;35418:9;:16;35414:20;;35394:289;;;35484:7;35460;:21;35468:9;35478:1;35468:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35468:12:0;35460:21;;;;;;;;;;;;;:31;;:66;;;35519:7;35495;:21;35503:9;35513:1;35503:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35503:12:0;35495:21;;;;;;;;;;;;;:31;35460:66;35456:97;;;35536:7;;35545;;35528:25;;;;;;;35237:561;;:::o;35456:97::-;35578:34;35590:7;:21;35598:9;35608:1;35598:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35598:12:0;35590:21;;;;;;;;;;;;;35578:7;;:11;:34::i;:::-;35568:44;;35637:34;35649:7;:21;35657:9;35667:1;35657:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35657:12:0;35649:21;;;;;;;;;;;;;35637:7;;:11;:34::i;:::-;35627:44;-1:-1:-1;35436:3:0;;;;:::i;:::-;;;;35394:289;;;-1:-1:-1;35719:7:0;;35707;;:20;;:11;:20::i;:::-;35697:7;:30;35693:61;;;35737:7;;35746;;35729:25;;;;;;35237:561;;:::o;35693:61::-;35773:7;;35782;;-1:-1:-1;35237:561:0;-1:-1:-1;35237:561:0:o;6404:278::-;6490:7;6525:12;6518:5;6510:28;;;;-1:-1:-1;;;6510:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6549:9:0;6561:5;6565:1;6561;:5;:::i;34291:330::-;34351:7;34360;34369;34389:12;34404:24;34420:7;34404:15;:24::i;:::-;34389:39;;34439:18;34460:30;34482:7;34460:21;:30::i;:::-;34439:51;-1:-1:-1;34501:23:0;34527:33;34439:51;34527:17;:7;34539:4;34527:11;:17::i;:33::-;34501:59;34596:4;;-1:-1:-1;34602:10:0;;-1:-1:-1;34291:330:0;;-1:-1:-1;;;34291:330:0:o;34629:429::-;34744:7;;;;34800:24;:7;34812:11;34800;:24::i;:::-;34782:42;-1:-1:-1;34835:12:0;34850:21;:4;34859:11;34850:8;:21::i;:::-;34835:36;-1:-1:-1;34882:18:0;34903:27;:10;34918:11;34903:14;:27::i;:::-;34882:48;-1:-1:-1;34941:23:0;34967:33;34882:48;34967:17;:7;34979:4;34967:11;:17::i;:33::-;35019:7;;;;-1:-1:-1;35045:4:0;;-1:-1:-1;34629:429:0;;-1:-1:-1;;;;;;;34629:429:0:o;39467:589::-;39617:16;;;39631:1;39617:16;;;;;;;;39593:21;;39617:16;;;;;;;;;;-1:-1:-1;39617:16:0;39593:40;;39662:4;39644;39649:1;39644:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39644:23:0;;;:7;;;;;;;;;;:23;;;;39688:15;;:22;;;-1:-1:-1;;;39688:22:0;;;;:15;;;;;:20;;:22;;;;;39644:7;;39688:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39678:4;39683:1;39678:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39678:32:0;;;:7;;;;;;;;;:32;39755:15;;39723:62;;39740:4;;39755:15;39773:11;39723:8;:62::i;:::-;39824:15;;:224;;-1:-1:-1;;;39824:224:0;;-1:-1:-1;;;;;39824:15:0;;;;:66;;:224;;39905:11;;39824:15;;39975:4;;40002;;40022:15;;39824:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39522:534;39467:589;:::o;40064:513::-;40244:15;;40212:62;;40229:4;;-1:-1:-1;;;;;40244:15:0;40262:11;40212:8;:62::i;:::-;40317:15;;-1:-1:-1;;;;;40317:15:0;:31;40356:9;40389:4;40409:11;40317:15;;40521:7;15607;15634:6;-1:-1:-1;;;;;15634:6:0;;15569:79;40521:7;40317:252;;;;;;-1:-1:-1;;;;;;40317:252:0;;;-1:-1:-1;;;;;3671:15:1;;;40317:252:0;;;3653:34:1;3703:18;;;3696:34;;;;3746:18;;;3739:34;;;;3789:18;;;3782:34;3853:15;;;3832:19;;;3825:44;40543:15:0;3885:19:1;;;3878:35;3587:19;;40317:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44002:566::-;44105:15;44122:23;44147:12;44161:23;44186:12;44200:18;44222:19;44233:7;44222:10;:19::i;:::-;-1:-1:-1;;;;;44270:15:0;;;;;;:7;:15;;;;;;44104:137;;-1:-1:-1;44104:137:0;;-1:-1:-1;44104:137:0;;-1:-1:-1;44104:137:0;-1:-1:-1;44104:137:0;-1:-1:-1;44104:137:0;-1:-1:-1;44270:28:0;;44290:7;44270:19;:28::i;:::-;-1:-1:-1;;;;;44252:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44327:7;:15;;;;:28;;44347:7;44327:19;:28::i;:::-;-1:-1:-1;;;;;44309:15:0;;;;;;;:7;:15;;;;;;:46;;;;44387:18;;;;;;;:39;;44410:15;44387:22;:39::i;:::-;-1:-1:-1;;;;;44366:18:0;;;;;;:7;:18;;;;;:60;44440:26;44455:10;44440:14;:26::i;:::-;44477:23;44489:4;44495;44477:11;:23::i;:::-;44533:9;-1:-1:-1;;;;;44516:44:0;44525:6;-1:-1:-1;;;;;44516:44:0;;44544:15;44516:44;;;;12530:25:1;;12518:2;12503:18;;12485:76;44516:44:0;;;;;;;;44093:475;;;;;;44002:566;;;:::o;43408:586::-;43509:15;43526:23;43551:12;43565:23;43590:12;43604:18;43626:19;43637:7;43626:10;:19::i;:::-;-1:-1:-1;;;;;43674:15:0;;;;;;:7;:15;;;;;;43508:137;;-1:-1:-1;43508:137:0;;-1:-1:-1;43508:137:0;;-1:-1:-1;43508:137:0;-1:-1:-1;43508:137:0;-1:-1:-1;43508:137:0;-1:-1:-1;43674:28:0;;43508:137;43674:19;:28::i;:::-;-1:-1:-1;;;;;43656:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43734:18;;;;;:7;:18;;;;;:39;;43757:15;43734:22;:39::i;:::-;-1:-1:-1;;;;;43713:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43805:7;:18;;;;:39;;43828:15;43805:22;:39::i;42898:502::-;42997:15;43014:23;43039:12;43053:23;43078:12;43092:18;43114:19;43125:7;43114:10;:19::i;:::-;-1:-1:-1;;;;;43162:15:0;;;;;;:7;:15;;;;;;42996:137;;-1:-1:-1;42996:137:0;;-1:-1:-1;42996:137:0;;-1:-1:-1;42996:137:0;-1:-1:-1;42996:137:0;-1:-1:-1;42996:137:0;-1:-1:-1;43162:28:0;;42996:137;43162:19;:28::i;32953:642::-;33056:15;33073:23;33098:12;33112:23;33137:12;33151:18;33173:19;33184:7;33173:10;:19::i;:::-;-1:-1:-1;;;;;33221:15:0;;;;;;:7;:15;;;;;;33055:137;;-1:-1:-1;33055:137:0;;-1:-1:-1;33055:137:0;;-1:-1:-1;33055:137:0;-1:-1:-1;33055:137:0;-1:-1:-1;33055:137:0;-1:-1:-1;33221:28:0;;33241:7;33221:19;:28::i;:::-;-1:-1:-1;;;;;33203:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33278:7;:15;;;;:28;;33298:7;33278:19;:28::i;36177:154::-;36241:7;36268:55;36307:5;36268:20;36280:7;;36268;:11;;:20;;;;:::i;36339:166::-;36409:7;36436:61;36481:5;36436:26;36448:13;;36436:7;:11;;:26;;;;:::i;35810:355::-;35873:19;35896:10;:8;:10::i;:::-;35873:33;-1:-1:-1;35917:18:0;35938:27;:10;35873:33;35938:14;:27::i;:::-;36017:4;36001:22;;;;:7;:22;;;;;;35917:48;;-1:-1:-1;36001:38:0;;35917:48;36001:26;:38::i;:::-;35992:4;35976:22;;;;:7;:22;;;;;;;;:63;;;;36053:11;:26;;;;;;36050:107;;;36135:4;36119:22;;;;:7;:22;;;;;;:38;;36146:10;36119:26;:38::i;:::-;36110:4;36094:22;;;;:7;:22;;;;;:63;36050:107;35862:303;;35810:355;:::o;33709:147::-;33787:7;;:17;;33799:4;33787:11;:17::i;:::-;33777:7;:27;33828:10;;:20;;33843:4;33828:14;:20::i;:::-;33815:10;:33;-1:-1:-1;;33709:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;307:1;304;297:12;259:2;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:2;;;570:1;567;560:12;522:2;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:2;;;832:1;829;822:12;784:2;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;774:301;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:2;;;1242:1;1239;1232:12;1194:2;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1184:352;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1184:352::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:2;;;1686:1;1683;1676:12;1638:2;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1628:228:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:2;;;1986:1;1983;1976:12;1938:2;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:2;;;2174:1;2171;2164:12;2126:2;-1:-1:-1;2197:23:1;;2116:110;-1:-1:-1;2116:110:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:2;;;2373:1;2370;2363:12;2325:2;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2315:164;;;;;:::o;2484:306::-;2572:6;2580;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:2;;;2657:1;2654;2647:12;2609:2;2686:9;2680:16;2670:26;;2736:2;2725:9;2721:18;2715:25;2705:35;;2780:2;2769:9;2765:18;2759:25;2749:35;;2599:191;;;;;:::o;4351:597::-;4463:4;4492:2;4521;4510:9;4503:21;4553:6;4547:13;4596:6;4591:2;4580:9;4576:18;4569:34;4621:1;4631:140;4645:6;4642:1;4639:13;4631:140;;;4740:14;;;4736:23;;4730:30;4706:17;;;4725:2;4702:26;4695:66;4660:10;;4631:140;;;4789:6;4786:1;4783:13;4780:2;;;4859:1;4854:2;4845:6;4834:9;4830:22;4826:31;4819:42;4780:2;-1:-1:-1;4932:2:1;4911:15;-1:-1:-1;;4907:29:1;4892:45;;;;4939:2;4888:54;;4472:476;-1:-1:-1;;;4472:476:1:o;8881:356::-;9083:2;9065:21;;;9102:18;;;9095:30;9161:34;9156:2;9141:18;;9134:62;9228:2;9213:18;;9055:182::o;11226:336::-;11428:2;11410:21;;;11467:2;11447:18;;;11440:30;-1:-1:-1;;;11501:2:1;11486:18;;11479:42;11553:2;11538:18;;11400:162::o;12566:980::-;12828:4;12876:3;12865:9;12861:19;12907:6;12896:9;12889:25;12933:2;12971:6;12966:2;12955:9;12951:18;12944:34;13014:3;13009:2;12998:9;12994:18;12987:31;13038:6;13073;13067:13;13104:6;13096;13089:22;13142:3;13131:9;13127:19;13120:26;;13181:2;13173:6;13169:15;13155:29;;13202:1;13212:195;13226:6;13223:1;13220:13;13212:195;;;13291:13;;-1:-1:-1;;;;;13287:39:1;13275:52;;13382:15;;;;13347:12;;;;13323:1;13241:9;13212:195;;;-1:-1:-1;;;;;;;13463:32:1;;;;13458:2;13443:18;;13436:60;-1:-1:-1;;;13527:3:1;13512:19;13505:35;13424:3;12837:709;-1:-1:-1;;;12837:709:1:o;14064:128::-;14104:3;14135:1;14131:6;14128:1;14125:13;14122:2;;;14141:18;;:::i;:::-;-1:-1:-1;14177:9:1;;14112:80::o;14197:217::-;14237:1;14263;14253:2;;14307:10;14302:3;14298:20;14295:1;14288:31;14342:4;14339:1;14332:15;14370:4;14367:1;14360:15;14253:2;-1:-1:-1;14399:9:1;;14243:171::o;14419:168::-;14459:7;14525:1;14521;14517:6;14513:14;14510:1;14507:21;14502:1;14495:9;14488:17;14484:45;14481:2;;;14532:18;;:::i;:::-;-1:-1:-1;14572:9:1;;14471:116::o;14592:125::-;14632:4;14660:1;14657;14654:8;14651:2;;;14665:18;;:::i;:::-;-1:-1:-1;14702:9:1;;14641:76::o;14722:380::-;14801:1;14797:12;;;;14844;;;14865:2;;14919:4;14911:6;14907:17;14897:27;;14865:2;14972;14964:6;14961:14;14941:18;14938:38;14935:2;;;15018:10;15013:3;15009:20;15006:1;14999:31;15053:4;15050:1;15043:15;15081:4;15078:1;15071:15;14935:2;;14777:325;;;:::o;15107:135::-;15146:3;-1:-1:-1;;15167:17:1;;15164:2;;;15187:18;;:::i;:::-;-1:-1:-1;15234:1:1;15223:13;;15154:88::o;15247:127::-;15308:10;15303:3;15299:20;15296:1;15289:31;15339:4;15336:1;15329:15;15363:4;15360:1;15353:15;15379:127;15440:10;15435:3;15431:20;15428:1;15421:31;15471:4;15468:1;15461:15;15495:4;15492:1;15485:15;15511:127;15572:10;15567:3;15563:20;15560:1;15553:31;15603:4;15600:1;15593:15;15627:4;15624:1;15617:15;15775:131;-1:-1:-1;;;;;15850:31:1;;15840:42;;15830:2;;15896:1;15893;15886:12;15830:2;15820:86;:::o

Swarm Source

ipfs://24feb43c49acfe2b5a813becc5493cb6301d9241dec1f36e1ce2fbeb7f24fa2c
Loading