ETH Price: $2,966.73 (-1.78%)
Gas: 2 Gwei

Token

Supernova (NOVA)
 

Overview

Max Total Supply

1,000,000,000 NOVA

Holders

235 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,488.264082080776925667 NOVA

Value
$0.00
0xa4731140b294b42935ef0957022c52b17cf462cb
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Supernova features tokenomics that ensure stability through dynamic taxes, blackhole burns, and reflections.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Supernova

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-06
*/

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @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://consensys.net/diligence/blog/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.8.0/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");

        (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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: Supernova.sol



/*
Supernova features groundbreaking tokenomics that ensure stability through dynamic taxes, blackhole burns, and reflections.

https://www.supernovatoken.net/
https://twitter.com/supernova_erc
https://t.me/supernovatoken
https://coinmarketcap.com/community/profile/SupernovaToken/
https://supernovatoken.gitbook.io/introduction-to-supernova/
*/

pragma solidity 0.8.19;




interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
}
 
interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
 
contract Supernova is IERC20, Ownable {
    using Address for address payable;
 
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) public normalBalance;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
 
    address[] private _excluded;
 
    bool public swapEnabled;
    bool private swapping;
    bool public tradingEnabled;
 
    IRouter public router;
    address public pair;
    address public devWallet;
    address public buybackWallet;
 
    uint8 private constant _decimals = 18;
    uint256 private constant MAX = ~uint256(0);
 
    uint256 private _tTotal = 1_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
 
    uint256 public totalRfi;
    uint256 public swapThreshold = 500_000 * 10**_decimals;
    uint256 public constant MAX_TX_AMOUNT = 20_000_000 * 10**_decimals; // can't be changed
    uint256 public constant MAX_WALLET_AMOUNT = 20_000_000 * 10**_decimals; // can't be changed
    uint256 public buyThreshold = 1_000_000 * 10**_decimals;
    uint256 public startBlock;
    uint256 public offlineBlocks = 5;
 
    uint256 public buyTax = 150; // 15%
    uint256 public sellTax = 200; // 20%
    uint256 public dynamicTax = 20; // 2%
    uint256 public constant MAX_SELL_TAX = 200; // 20%
 
    string private constant _name = "Supernova";
    string private constant _symbol = "NOVA";
 
    struct TaxesPercentage {
      uint256 rfi;
      uint256 dev;
      uint256 buyBack;
      uint256 lp;
    }
 
    TaxesPercentage public taxesPercentage = TaxesPercentage(35,30,30,5);
 
    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rSwap;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tSwap;
    }
 
 
    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }
 
    constructor (address _routerAddress, address _devWallet, address _buybackWallet) {
 
        IRouter _router = IRouter(_routerAddress);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());
 
        router = _router;
        pair = _pair;
 
        excludeFromReward(pair);
 
        _rOwned[msg.sender] = _rTotal;
        normalBalance[msg.sender] = _tTotal;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_devWallet]=true;
        _isExcludedFromFee[_buybackWallet] = true;
 
        devWallet = _devWallet;
        buybackWallet = _buybackWallet;
 
        emit Transfer(address(0), msg.sender, _tTotal);
    }
 
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }
 
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
 
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
 
    function 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 virtual override returns (bool) {
        _transfer(sender, recipient, amount);
 
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);
 
        return true;
    }
 
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
 
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
 
        return true;
    }
 
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
 
    function getCirculatingSupply() external view returns(uint256){
        uint256 deadBalance = balanceOf(address(0xdead));
        uint256 zeroBalance = balanceOf(address(0));
        return totalSupply() - deadBalance - zeroBalance;
    }
 
    function getTotAmountBurned() external view returns(uint256){
        uint256 deadBalance = balanceOf(address(0xdead));
        uint256 zeroBalance = balanceOf(address(0));
        return deadBalance + zeroBalance;
    }
 
    function getReflectionEarned(address user) external view returns(uint256) {
        if(balanceOf(user) >= normalBalance[user]) return balanceOf(user) - normalBalance[user];
        else return 0;
    }
 
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }
 
    function excludeFromReward(address account) public onlyOwner {
        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 not 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 excludeFromFee(address account, bool status) public onlyOwner {
        _isExcludedFromFee[account] = status;
    }
 
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
 
    function setTaxesPercentage(uint256 _rfi, uint256 _dev, uint256 _buyback, uint256 _lp) public onlyOwner {
        require(_rfi + _dev + _buyback + _lp == 100, "Total must be 100");
        taxesPercentage = TaxesPercentage(_rfi, _dev, _buyback, _lp);
    }
 
    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi;
        totalRfi +=tRfi;
    }
 
    function _takeSwapFees(uint256 rValue, uint256 tValue) private {
        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tValue;
        }
        _rOwned[address(this)] +=rValue;
    }
 
    function _getValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rSwap) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }
 
    function _getTValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory s) {
 
        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
 
        uint256 tempTax = isSell ? sellTax : buyTax;
        uint256 rfiTax = tempTax * taxesPercentage.rfi / 100;
        uint256 swapTax = tempTax * (100 - taxesPercentage.rfi) / 100;
        s.tRfi = tAmount * rfiTax / 1000;
        s.tSwap = tAmount * swapTax / 1000;
        s.tTransferAmount = tAmount - s.tRfi - s.tSwap;
        return s;
    }
 
    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rSwap) {
        rAmount = tAmount*currentRate;
 
        if(!takeFee) {
          return(rAmount, rAmount, 0,0);
        }
 
        rRfi = s.tRfi*currentRate;
        rSwap = s.tSwap*currentRate;
        rTransferAmount =  rAmount-rRfi-rSwap;
        return (rAmount, rTransferAmount, rRfi,rSwap);
    }
 
    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/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-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
 
    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(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
 
        if(buyTax != 10 && tradingEnabled){
            if(startBlock + offlineBlocks < block.number) buyTax = 10;
        }
 
        bool takeFee = false;
 
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            require(tradingEnabled ,"Liquidity has not been added yet");
            require(amount <= MAX_TX_AMOUNT, "You are exceeding MAX_TX_AMOUNT");
            if(to != pair) require(balanceOf(to) + amount <= MAX_WALLET_AMOUNT, "You are exceeding MAX_WALLET_AMOUNT");
            takeFee = true;
            if(from == pair && startBlock + offlineBlocks < block.number){
                if(amount >= buyThreshold){
                    if(sellTax >= dynamicTax) sellTax -= dynamicTax;
                    else sellTax = 0;
                }
            }
        }
 
        bool canSwap = balanceOf(address(this)) >= swapThreshold;
        if(!swapping && taxesPercentage.rfi != 100 && swapEnabled && canSwap && from != pair && takeFee){
            swapAndLiquify(swapThreshold);
        }
 
        _tokenTransfer(from, to, amount, takeFee);
    }
 
 
    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private {
 
        bool isSell = recipient == pair ? true : false;
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell);
 
        if(isSell && takeFee && startBlock + offlineBlocks < block.number){
            if(sellTax + dynamicTax > MAX_SELL_TAX) sellTax = MAX_SELL_TAX;
            else sellTax += dynamicTax;
        }
 
        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender]-tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }
 
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        normalBalance[recipient] += s.tTransferAmount;
        normalBalance[sender] -= s.tTransferAmount;
        normalBalance[address(this)] += s.tSwap;
 
        if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if(s.rSwap > 0 || s.tSwap > 0) _takeSwapFees(s.rSwap, s.tSwap);
 
 
        emit Transfer(sender, recipient, s.tTransferAmount);
        if(s.tSwap > 0) emit Transfer(sender, address(this), s.tSwap);
 
    }
 
    function swapAndLiquify(uint256 tokens) private lockTheSwap{
        uint256 denominator = (100 - taxesPercentage.rfi) * 2;
        uint256 tokensToAddLiquidityWith = tokens * taxesPercentage.lp / denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;
 
        uint256 initialBalance = address(this).balance;
 
        swapTokensForETH(toSwap);
 
        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (denominator - taxesPercentage.lp);
        uint256 ethToAddLiquidityWith = unitBalance * taxesPercentage.lp;
 
        if(ethToAddLiquidityWith > 0){
            // Add liquidity to uniswap
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }
 
        uint256 devAmt = unitBalance * 2 * taxesPercentage.dev;
        if(devAmt > 0){
            payable(devWallet).sendValue(devAmt);
        }
 
        uint256 buybackAmt = unitBalance * 2 * taxesPercentage.buyBack;
        if(buybackAmt > 0){
            payable(buybackWallet).sendValue(buybackAmt);
        }
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);
 
        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            devWallet,
            block.timestamp
        );
    }
 
    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] = router.WETH();
 
        _approve(address(this), address(router), tokenAmount);
 
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
 
    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Already live");
        tradingEnabled = true;
        swapEnabled = true;
        startBlock = block.number;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner{
        devWallet = newWallet;
        _isExcludedFromFee[devWallet] = true;
    }
 
    function updateBuybackWallet(address newWallet) external onlyOwner{
        buybackWallet = newWallet;
        _isExcludedFromFee[buybackWallet] = true;
    }
 
    function updateBuyThreshold(uint256 amount) external onlyOwner{
        buyThreshold = amount * 10**_decimals;
    }
 
    function updateSwapThreshold(uint256 amount) external onlyOwner{
        swapThreshold = amount * 10**_decimals;
    }
 
    function updateSwapEnabled(bool _enabled) external onlyOwner{
        swapEnabled = _enabled;
    }
 
    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{
        router = IRouter(newRouter);
        pair = newPair;
    }
 
    function updateDynamicTax(uint256 amount) external onlyOwner{
        dynamicTax = amount;
    }
 
    function rescueETH(uint256 weiAmount) external onlyOwner{
        payable(msg.sender).transfer(weiAmount);
    }
 
    function rescueTokens(address _tokenAddr, address _to, uint _amount) external onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }
 
    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_buybackWallet","type":"address"}],"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SELL_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TX_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WALLET_AMOUNT","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":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReflectionEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotAmountBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"normalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"offlineBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"},{"internalType":"uint256","name":"_lp","type":"uint256"}],"name":"setTaxesPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesPercentage","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"}],"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":"totalRfi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateBuyThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateDynamicTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a620008d1565b6200002290633b9aca00620008e2565b600c819055620000359060001962000912565b620000439060001962000929565b600d55620000546012600a620008d1565b62000063906207a120620008e2565b600f55620000746012600a620008d1565b6200008390620f4240620008e2565b60105560056012819055609660135560c86014908155601555604080516080810182526023808252601e6020830181905292820183905260609091018390526016556017819055601855601955348015620000dd57600080fd5b50604051620034723803806200347283398101604081905262000100916200095c565b6200010b3362000386565b60008390506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000151573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001779190620009a6565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001eb9190620009a6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000239573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025f9190620009a6565b600880546001600160a01b038086166301000000026301000000600160b81b031990921691909117909155600980549183166001600160a01b031990921682179055909150620002af90620003d6565b600d5433600081815260016020818152604080842095909555600c8054600383528685205560058252858420805460ff19908116851790915530855286852080548216851790556001600160a01b038b81168087528887208054841687179055908b168087528887208054909316909517909155600a80546001600160a01b03199081169092179055600b805490911690931790925590549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050505062000a0d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620003e062000512565b6001600160a01b03811660009081526006602052604090205460ff16156200044f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205415620004ac576001600160a01b038116600090815260016020526040902054620004929062000570565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b031633146200056e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000446565b565b6000600d54821115620005d95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000446565b6000620005e5620005fa565b9050620005f38184620009c4565b9392505050565b600080806200060862000620565b9092509050620006198183620009c4565b9250505090565b600d54600c546000918291825b6007548110156200078857826001600060078481548110620006535762000653620009db565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620006c257508160026000600784815481106200069b576200069b620009db565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620006d957600d54600c54945094505050509091565b6001600060078381548110620006f357620006f3620009db565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000724908462000929565b92506002600060078381548110620007405762000740620009db565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000771908362000929565b9150806200077f81620009f1565b9150506200062d565b50600c54600d546200079b9190620009c4565b821015620007b357600d54600c549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000813578160001904821115620007f757620007f7620007bc565b808516156200080557918102915b93841c9390800290620007d7565b509250929050565b6000826200082c57506001620008cb565b816200083b57506000620008cb565b81600181146200085457600281146200085f576200087f565b6001915050620008cb565b60ff841115620008735762000873620007bc565b50506001821b620008cb565b5060208310610133831016604e8410600b8410161715620008a4575081810a620008cb565b620008b08383620007d2565b8060001904821115620008c757620008c7620007bc565b0290505b92915050565b6000620005f360ff8416836200081b565b8082028115828204841417620008cb57620008cb620007bc565b634e487b7160e01b600052601260045260246000fd5b600082620009245762000924620008fc565b500690565b81810381811115620008cb57620008cb620007bc565b80516001600160a01b03811681146200095757600080fd5b919050565b6000806000606084860312156200097257600080fd5b6200097d846200093f565b92506200098d602085016200093f565b91506200099d604085016200093f565b90509250925092565b600060208284031215620009b957600080fd5b620005f3826200093f565b600082620009d657620009d6620008fc565b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820162000a065762000a06620007bc565b5060010190565b612a558062000a1d6000396000f3fe60806040526004361061031e5760003560e01c8063715018a6116101ab578063a6e3e1e1116100f7578063dd62ed3e11610095578063e7cb0df91161006f578063e7cb0df91461097f578063f13cff4114610994578063f2fde38b146109aa578063f887ea40146109ca57600080fd5b8063dd62ed3e146108f9578063deab8aea1461093f578063df8408fe1461095f57600080fd5b8063bd614ff7116100d1578063bd614ff71461088e578063cc1776d3146108a3578063cc274b29146108b9578063cea9d26f146108d957600080fd5b8063a6e3e1e11461082e578063a8aa1b311461084e578063a9059cbb1461086e57600080fd5b80638da5cb5b1161016457806395d89b411161013e57806395d89b41146107a1578063963fbc50146107ce5780639e252f00146107ee578063a457c2d71461080e57600080fd5b80638da5cb5b1461072f5780638ea5220f14610761578063924de9b71461078157600080fd5b8063715018a614610697578063799754d7146106ac5780637e0ec1d1146106cc57806388f82020146106e15780638a8c523c1461071a5780638ae2702f146106cc57600080fd5b8063395093511161026a5780634da86156116102235780635342acb4116101fd5780635342acb41461060e578063649011c8146106475780636ddd17131461065d57806370a082311461067757600080fd5b80634da86156146105c25780634f7041a5146105d857806352390c02146105ee57600080fd5b806339509351146104ff5780633b073d8a1461051f5780633b63e0ab1461054c57806340b28c2f1461056c57806348cd4cb11461058c5780634ada218b146105a257600080fd5b80631816467f116102d75780632b112e49116102b15780632b112e491461048e5780632d838119146104a3578063313ce567146104c35780633685d419146104df57600080fd5b80631816467f146104385780631a6611811461045857806323b872dd1461046e57600080fd5b8063029514f71461032a5780630445b6671461037257806304dacd501461039657806306fdde03146103b8578063095ea7b3146103f357806318160ddd1461042357600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060165460175460185460195461034d9392919084565b6040805194855260208501939093529183015260608201526080015b60405180910390f35b34801561037e57600080fd5b50610388600f5481565b604051908152602001610369565b3480156103a257600080fd5b506103b66103b13660046125e4565b6109f1565b005b3480156103c457600080fd5b5060408051808201909152600981526853757065726e6f766160b81b60208201525b6040516103699190612601565b3480156103ff57600080fd5b5061041361040e36600461264f565b610a33565b6040519015158152602001610369565b34801561042f57600080fd5b50600c54610388565b34801561044457600080fd5b506103b66104533660046125e4565b610a4a565b34801561046457600080fd5b50610388600e5481565b34801561047a57600080fd5b5061041361048936600461267b565b610a8c565b34801561049a57600080fd5b50610388610b44565b3480156104af57600080fd5b506103886104be3660046126bc565b610b88565b3480156104cf57600080fd5b5060405160128152602001610369565b3480156104eb57600080fd5b506103b66104fa3660046125e4565b610c05565b34801561050b57600080fd5b5061041361051a36600461264f565b610d99565b34801561052b57600080fd5b5061038861053a3660046125e4565b60036020526000908152604090205481565b34801561055857600080fd5b506103b66105673660046126d5565b610dd0565b34801561057857600080fd5b506103b6610587366004612707565b610e6f565b34801561059857600080fd5b5061038860115481565b3480156105ae57600080fd5b506008546104139062010000900460ff1681565b3480156105ce57600080fd5b5061038860155481565b3480156105e457600080fd5b5061038860135481565b3480156105fa57600080fd5b506103b66106093660046125e4565b610eb3565b34801561061a57600080fd5b506104136106293660046125e4565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561065357600080fd5b5061038860125481565b34801561066957600080fd5b506008546104139060ff1681565b34801561068357600080fd5b506103886106923660046125e4565b610fe4565b3480156106a357600080fd5b506103b6611043565b3480156106b857600080fd5b506103b66106c73660046126bc565b611057565b3480156106d857600080fd5b5061038861107b565b3480156106ed57600080fd5b506104136106fc3660046125e4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561072657600080fd5b506103b6611098565b34801561073b57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610369565b34801561076d57600080fd5b50600a54610749906001600160a01b031681565b34801561078d57600080fd5b506103b661079c36600461274e565b6110ff565b3480156107ad57600080fd5b506040805180820190915260048152634e4f564160e01b60208201526103e6565b3480156107da57600080fd5b506103b66107e93660046126bc565b61111a565b3480156107fa57600080fd5b506103b66108093660046126bc565b611127565b34801561081a57600080fd5b5061041361082936600461264f565b61115c565b34801561083a57600080fd5b506103886108493660046125e4565b6111f7565b34801561085a57600080fd5b50600954610749906001600160a01b031681565b34801561087a57600080fd5b5061041361088936600461264f565b611252565b34801561089a57600080fd5b5061038861125f565b3480156108af57600080fd5b5061038860145481565b3480156108c557600080fd5b506103b66108d43660046126bc565b611287565b3480156108e557600080fd5b506103b66108f436600461267b565b6112ab565b34801561090557600080fd5b50610388610914366004612707565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561094b57600080fd5b50600b54610749906001600160a01b031681565b34801561096b57600080fd5b506103b661097a36600461276b565b61132c565b34801561098b57600080fd5b5061038860c881565b3480156109a057600080fd5b5061038860105481565b3480156109b657600080fd5b506103b66109c53660046125e4565b61135f565b3480156109d657600080fd5b5060085461074990630100000090046001600160a01b031681565b6109f96113d8565b600b80546001600160a01b039092166001600160a01b0319909216821790556000908152600560205260409020805460ff19166001179055565b6000610a40338484611432565b5060015b92915050565b610a526113d8565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600560205260409020805460ff19166001179055565b6000610a99848484611556565b6001600160a01b038416600090815260046020908152604080832033845290915290205482811015610b235760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b378533610b3286856127af565b611432565b60019150505b9392505050565b600080610b5261dead610fe4565b90506000610b606000610fe4565b90508082610b6d600c5490565b610b7791906127af565b610b8191906127af565b9250505090565b6000600d54821115610bef5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b1a565b6000610bf9611968565b9050610b3d81846127c2565b610c0d6113d8565b6001600160a01b03811660009081526006602052604090205460ff16610c755760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b1a565b60005b600754811015610d9557816001600160a01b031660078281548110610c9f57610c9f6127e4565b6000918252602090912001546001600160a01b031603610d835760078054610cc9906001906127af565b81548110610cd957610cd96127e4565b600091825260209091200154600780546001600160a01b039092169183908110610d0557610d056127e4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610d5d57610d5d6127fa565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610d8d81612810565b915050610c78565b5050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a40918590610b32908690612829565b610dd86113d8565b8082610de48587612829565b610dee9190612829565b610df89190612829565b606414610e3b5760405162461bcd60e51b81526020600482015260116024820152700546f74616c206d7573742062652031303607c1b6044820152606401610b1a565b6040805160808101825285815260208101859052908101839052606001819052601693909355601791909155601855601955565b610e776113d8565b600880546301000000600160b81b03191663010000006001600160a01b0394851602179055600980546001600160a01b03191691909216179055565b610ebb6113d8565b6001600160a01b03811660009081526006602052604090205460ff1615610f245760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b1a565b6001600160a01b03811660009081526001602052604090205415610f7e576001600160a01b038116600090815260016020526040902054610f6490610b88565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b03811660009081526006602052604081205460ff161561102157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a4490610b88565b61104b6113d8565b6110556000611984565b565b61105f6113d8565b61106b6012600a612920565b611075908261292f565b60105550565b6110876012600a612920565b611095906301312d0061292f565b81565b6110a06113d8565b60085462010000900460ff16156110e85760405162461bcd60e51b815260206004820152600c60248201526b416c7265616479206c69766560a01b6044820152606401610b1a565b6008805462ff00ff19166201000117905543601155565b6111076113d8565b6008805460ff1916911515919091179055565b6111226113d8565b601555565b61112f6113d8565b604051339082156108fc029083906000818181858888f19350505050158015610d95573d6000803e3d6000fd5b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156111de5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b1a565b6111ed3385610b3286856127af565b5060019392505050565b6001600160a01b03811660009081526003602052604081205461121983610fe4565b1061124a576001600160a01b03821660009081526003602052604090205461124083610fe4565b610a4491906127af565b506000919050565b6000610a40338484611556565b60008061126d61dead610fe4565b9050600061127b6000610fe4565b9050610b818183612829565b61128f6113d8565b61129b6012600a612920565b6112a5908261292f565b600f5550565b6112b36113d8565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015611302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113269190612946565b50505050565b6113346113d8565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6113676113d8565b6001600160a01b0381166113cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b1a565b6113d581611984565b50565b6000546001600160a01b031633146110555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b1a565b6001600160a01b0383166114945760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b1a565b6001600160a01b0382166114f55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b1a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115ba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b1a565b6000811161161c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b1a565b61162583610fe4565b81111561168e5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b1a565b601354600a141580156116a9575060085462010000900460ff165b156116cb57436012546011546116bf9190612829565b10156116cb57600a6013555b6001600160a01b03831660009081526005602052604081205460ff1615801561170d57506001600160a01b03831660009081526005602052604090205460ff16155b156118dd5760085462010000900460ff1661176a5760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152606401610b1a565b6117766012600a612920565b611784906301312d0061292f565b8211156117d35760405162461bcd60e51b815260206004820152601f60248201527f596f752061726520657863656564696e67204d41585f54585f414d4f554e54006044820152606401610b1a565b6009546001600160a01b03848116911614611870576117f46012600a612920565b611802906301312d0061292f565b8261180c85610fe4565b6118169190612829565b11156118705760405162461bcd60e51b815260206004820152602360248201527f596f752061726520657863656564696e67204d41585f57414c4c45545f414d4f60448201526215539560ea1b6064820152608401610b1a565b506009546001906001600160a01b03858116911614801561189f57504360125460115461189d9190612829565b105b156118dd5760105482106118dd57601554601454106118d757601554601460008282546118cc91906127af565b909155506118dd9050565b60006014555b6000600f546118eb30610fe4565b6008549111159150610100900460ff1615801561190b5750601654606414155b8015611919575060085460ff165b80156119225750805b801561193c57506009546001600160a01b03868116911614155b80156119455750815b1561195557611955600f546119d4565b61196185858585611b10565b5050505050565b6000806000611975611e72565b9092509050610b8181836127c2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805461ff0019166101001790556016546000906119f49060646127af565b6119ff90600261292f565b905060008160166003015484611a15919061292f565b611a1f91906127c2565b90506000611a2d82856127af565b905047611a3982611ff5565b6000611a4582476127af565b601954909150600090611a5890876127af565b611a6290836127c2565b601954909150600090611a75908361292f565b90508015611a8757611a87868261216e565b601754600090611a9884600261292f565b611aa2919061292f565b90508015611ac057600a54611ac0906001600160a01b031682612229565b601854600090611ad185600261292f565b611adb919061292f565b90508015611af957600b54611af9906001600160a01b031682612229565b50506008805461ff00191690555050505050505050565b6009546000906001600160a01b03858116911614611b2f576000611b32565b60015b90506000611b41848484612347565b9050818015611b4d5750825b8015611b67575043601254601154611b659190612829565b105b15611ba85760c8601554601454611b7e9190612829565b1115611b8e5760c8601455611ba8565b60155460146000828254611ba29190612829565b90915550505b6001600160a01b03861660009081526006602052604090205460ff1615611c07576001600160a01b038616600090815260026020526040902054611bed9085906127af565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526006602052604090205460ff1615611c6a5760808101516001600160a01b038616600090815260026020526040902054611c509190612829565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054611c8f91906127af565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054611cc69190612829565b6001600160a01b038616600090815260016020908152604080832093909355608084015160039091529181208054909190611d02908490612829565b909155505060808101516001600160a01b03871660009081526003602052604081208054909190611d349084906127af565b909155505060c08101513060009081526003602052604081208054909190611d5d908490612829565b90915550506040810151151580611d78575060008160a00151115b15611d8f57611d8f81604001518260a001516123bf565b600081606001511180611da6575060008160c00151115b15611dbd57611dbd81606001518260c001516123f3565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611e0691815260200190565b60405180910390a360c081015115611e6a57306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611e6191815260200190565b60405180910390a35b505050505050565b600d54600c546000918291825b600754811015611fc457826001600060078481548110611ea157611ea16127e4565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f0c5750816002600060078481548110611ee557611ee56127e4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f2257600d54600c54945094505050509091565b6001600060078381548110611f3957611f396127e4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611f6890846127af565b92506002600060078381548110611f8157611f816127e4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611fb090836127af565b915080611fbc81612810565b915050611e7f565b50600c54600d54611fd591906127c2565b821015611fec57600d54600c549350935050509091565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061202a5761202a6127e4565b60200260200101906001600160a01b031690816001600160a01b031681525050600860039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190612963565b816001815181106120d4576120d46127e4565b6001600160a01b039283166020918202929092010152600854612101913091630100000090041684611432565b60085460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790612140908590600090869030904290600401612980565b600060405180830381600087803b15801561215a57600080fd5b505af1158015611e6a573d6000803e3d6000fd5b60085461218d903090630100000090046001600160a01b031684611432565b600854600a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a48201526301000000909204169063f305d71990839060c40160606040518083038185885af1158015612204573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061196191906129f1565b804710156122795760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b1a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146122c6576040519150601f19603f3d011682016040523d82523d6000602084013e6122cb565b606091505b50509050806123425760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b1a565b505050565b6123876040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61239284848461244f565b90506123a78185856123a2611968565b612564565b60608501526040840152602083015281529392505050565b81600d60008282546123d191906127af565b9250508190555080600e60008282546123ea9190612829565b90915550505050565b3060009081526006602052604090205460ff161561243057306000908152600260205260408120805483929061242a908490612829565b90915550505b30600090815260016020526040812080548492906123ea908490612829565b61248f6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b826124a05760808101849052610b3d565b6000826124af576013546124b3565b6014545b905060006064601660000154836124ca919061292f565b6124d491906127c2565b90506000606460166000015460646124ec91906127af565b6124f6908561292f565b61250091906127c2565b90506103e861250f838961292f565b61251991906127c2565b60a08501526103e861252b828961292f565b61253591906127c2565b60c0850181905260a085015161254b90896127af565b61255591906127af565b60808501525050509392505050565b6000808080612573858861292f565b935085612588575082915060009050806125c4565b848860a00151612598919061292f565b9150848860c001516125aa919061292f565b9050806125b783866127af565b6125c191906127af565b92505b945094509450949050565b6001600160a01b03811681146113d557600080fd5b6000602082840312156125f657600080fd5b8135610b3d816125cf565b600060208083528351808285015260005b8181101561262e57858101830151858201604001528201612612565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561266257600080fd5b823561266d816125cf565b946020939093013593505050565b60008060006060848603121561269057600080fd5b833561269b816125cf565b925060208401356126ab816125cf565b929592945050506040919091013590565b6000602082840312156126ce57600080fd5b5035919050565b600080600080608085870312156126eb57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561271a57600080fd5b8235612725816125cf565b91506020830135612735816125cf565b809150509250929050565b80151581146113d557600080fd5b60006020828403121561276057600080fd5b8135610b3d81612740565b6000806040838503121561277e57600080fd5b8235612789816125cf565b9150602083013561273581612740565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a4457610a44612799565b6000826127df57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820161282257612822612799565b5060010190565b80820180821115610a4457610a44612799565b600181815b8085111561287757816000190482111561285d5761285d612799565b8085161561286a57918102915b93841c9390800290612841565b509250929050565b60008261288e57506001610a44565b8161289b57506000610a44565b81600181146128b157600281146128bb576128d7565b6001915050610a44565b60ff8411156128cc576128cc612799565b50506001821b610a44565b5060208310610133831016604e8410600b84101617156128fa575081810a610a44565b612904838361283c565b806000190482111561291857612918612799565b029392505050565b6000610b3d60ff84168361287f565b8082028115828204841417610a4457610a44612799565b60006020828403121561295857600080fd5b8151610b3d81612740565b60006020828403121561297557600080fd5b8151610b3d816125cf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129d05784516001600160a01b0316835293830193918301916001016129ab565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a0657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212207734ba8c06316ffd3adc65df0b3325750d63ea81001d0ede42b6e7fef72a8f7d64736f6c634300081300330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a5c3eeef99a1eeaf3ff05d2be1dff943d2d20743000000000000000000000000381e476673d271e0a2ae247acd189507cb9c0969

Deployed Bytecode

0x60806040526004361061031e5760003560e01c8063715018a6116101ab578063a6e3e1e1116100f7578063dd62ed3e11610095578063e7cb0df91161006f578063e7cb0df91461097f578063f13cff4114610994578063f2fde38b146109aa578063f887ea40146109ca57600080fd5b8063dd62ed3e146108f9578063deab8aea1461093f578063df8408fe1461095f57600080fd5b8063bd614ff7116100d1578063bd614ff71461088e578063cc1776d3146108a3578063cc274b29146108b9578063cea9d26f146108d957600080fd5b8063a6e3e1e11461082e578063a8aa1b311461084e578063a9059cbb1461086e57600080fd5b80638da5cb5b1161016457806395d89b411161013e57806395d89b41146107a1578063963fbc50146107ce5780639e252f00146107ee578063a457c2d71461080e57600080fd5b80638da5cb5b1461072f5780638ea5220f14610761578063924de9b71461078157600080fd5b8063715018a614610697578063799754d7146106ac5780637e0ec1d1146106cc57806388f82020146106e15780638a8c523c1461071a5780638ae2702f146106cc57600080fd5b8063395093511161026a5780634da86156116102235780635342acb4116101fd5780635342acb41461060e578063649011c8146106475780636ddd17131461065d57806370a082311461067757600080fd5b80634da86156146105c25780634f7041a5146105d857806352390c02146105ee57600080fd5b806339509351146104ff5780633b073d8a1461051f5780633b63e0ab1461054c57806340b28c2f1461056c57806348cd4cb11461058c5780634ada218b146105a257600080fd5b80631816467f116102d75780632b112e49116102b15780632b112e491461048e5780632d838119146104a3578063313ce567146104c35780633685d419146104df57600080fd5b80631816467f146104385780631a6611811461045857806323b872dd1461046e57600080fd5b8063029514f71461032a5780630445b6671461037257806304dacd501461039657806306fdde03146103b8578063095ea7b3146103f357806318160ddd1461042357600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060165460175460185460195461034d9392919084565b6040805194855260208501939093529183015260608201526080015b60405180910390f35b34801561037e57600080fd5b50610388600f5481565b604051908152602001610369565b3480156103a257600080fd5b506103b66103b13660046125e4565b6109f1565b005b3480156103c457600080fd5b5060408051808201909152600981526853757065726e6f766160b81b60208201525b6040516103699190612601565b3480156103ff57600080fd5b5061041361040e36600461264f565b610a33565b6040519015158152602001610369565b34801561042f57600080fd5b50600c54610388565b34801561044457600080fd5b506103b66104533660046125e4565b610a4a565b34801561046457600080fd5b50610388600e5481565b34801561047a57600080fd5b5061041361048936600461267b565b610a8c565b34801561049a57600080fd5b50610388610b44565b3480156104af57600080fd5b506103886104be3660046126bc565b610b88565b3480156104cf57600080fd5b5060405160128152602001610369565b3480156104eb57600080fd5b506103b66104fa3660046125e4565b610c05565b34801561050b57600080fd5b5061041361051a36600461264f565b610d99565b34801561052b57600080fd5b5061038861053a3660046125e4565b60036020526000908152604090205481565b34801561055857600080fd5b506103b66105673660046126d5565b610dd0565b34801561057857600080fd5b506103b6610587366004612707565b610e6f565b34801561059857600080fd5b5061038860115481565b3480156105ae57600080fd5b506008546104139062010000900460ff1681565b3480156105ce57600080fd5b5061038860155481565b3480156105e457600080fd5b5061038860135481565b3480156105fa57600080fd5b506103b66106093660046125e4565b610eb3565b34801561061a57600080fd5b506104136106293660046125e4565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561065357600080fd5b5061038860125481565b34801561066957600080fd5b506008546104139060ff1681565b34801561068357600080fd5b506103886106923660046125e4565b610fe4565b3480156106a357600080fd5b506103b6611043565b3480156106b857600080fd5b506103b66106c73660046126bc565b611057565b3480156106d857600080fd5b5061038861107b565b3480156106ed57600080fd5b506104136106fc3660046125e4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561072657600080fd5b506103b6611098565b34801561073b57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610369565b34801561076d57600080fd5b50600a54610749906001600160a01b031681565b34801561078d57600080fd5b506103b661079c36600461274e565b6110ff565b3480156107ad57600080fd5b506040805180820190915260048152634e4f564160e01b60208201526103e6565b3480156107da57600080fd5b506103b66107e93660046126bc565b61111a565b3480156107fa57600080fd5b506103b66108093660046126bc565b611127565b34801561081a57600080fd5b5061041361082936600461264f565b61115c565b34801561083a57600080fd5b506103886108493660046125e4565b6111f7565b34801561085a57600080fd5b50600954610749906001600160a01b031681565b34801561087a57600080fd5b5061041361088936600461264f565b611252565b34801561089a57600080fd5b5061038861125f565b3480156108af57600080fd5b5061038860145481565b3480156108c557600080fd5b506103b66108d43660046126bc565b611287565b3480156108e557600080fd5b506103b66108f436600461267b565b6112ab565b34801561090557600080fd5b50610388610914366004612707565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561094b57600080fd5b50600b54610749906001600160a01b031681565b34801561096b57600080fd5b506103b661097a36600461276b565b61132c565b34801561098b57600080fd5b5061038860c881565b3480156109a057600080fd5b5061038860105481565b3480156109b657600080fd5b506103b66109c53660046125e4565b61135f565b3480156109d657600080fd5b5060085461074990630100000090046001600160a01b031681565b6109f96113d8565b600b80546001600160a01b039092166001600160a01b0319909216821790556000908152600560205260409020805460ff19166001179055565b6000610a40338484611432565b5060015b92915050565b610a526113d8565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600560205260409020805460ff19166001179055565b6000610a99848484611556565b6001600160a01b038416600090815260046020908152604080832033845290915290205482811015610b235760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b378533610b3286856127af565b611432565b60019150505b9392505050565b600080610b5261dead610fe4565b90506000610b606000610fe4565b90508082610b6d600c5490565b610b7791906127af565b610b8191906127af565b9250505090565b6000600d54821115610bef5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b1a565b6000610bf9611968565b9050610b3d81846127c2565b610c0d6113d8565b6001600160a01b03811660009081526006602052604090205460ff16610c755760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b1a565b60005b600754811015610d9557816001600160a01b031660078281548110610c9f57610c9f6127e4565b6000918252602090912001546001600160a01b031603610d835760078054610cc9906001906127af565b81548110610cd957610cd96127e4565b600091825260209091200154600780546001600160a01b039092169183908110610d0557610d056127e4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610d5d57610d5d6127fa565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610d8d81612810565b915050610c78565b5050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a40918590610b32908690612829565b610dd86113d8565b8082610de48587612829565b610dee9190612829565b610df89190612829565b606414610e3b5760405162461bcd60e51b81526020600482015260116024820152700546f74616c206d7573742062652031303607c1b6044820152606401610b1a565b6040805160808101825285815260208101859052908101839052606001819052601693909355601791909155601855601955565b610e776113d8565b600880546301000000600160b81b03191663010000006001600160a01b0394851602179055600980546001600160a01b03191691909216179055565b610ebb6113d8565b6001600160a01b03811660009081526006602052604090205460ff1615610f245760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b1a565b6001600160a01b03811660009081526001602052604090205415610f7e576001600160a01b038116600090815260016020526040902054610f6490610b88565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b03811660009081526006602052604081205460ff161561102157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a4490610b88565b61104b6113d8565b6110556000611984565b565b61105f6113d8565b61106b6012600a612920565b611075908261292f565b60105550565b6110876012600a612920565b611095906301312d0061292f565b81565b6110a06113d8565b60085462010000900460ff16156110e85760405162461bcd60e51b815260206004820152600c60248201526b416c7265616479206c69766560a01b6044820152606401610b1a565b6008805462ff00ff19166201000117905543601155565b6111076113d8565b6008805460ff1916911515919091179055565b6111226113d8565b601555565b61112f6113d8565b604051339082156108fc029083906000818181858888f19350505050158015610d95573d6000803e3d6000fd5b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156111de5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b1a565b6111ed3385610b3286856127af565b5060019392505050565b6001600160a01b03811660009081526003602052604081205461121983610fe4565b1061124a576001600160a01b03821660009081526003602052604090205461124083610fe4565b610a4491906127af565b506000919050565b6000610a40338484611556565b60008061126d61dead610fe4565b9050600061127b6000610fe4565b9050610b818183612829565b61128f6113d8565b61129b6012600a612920565b6112a5908261292f565b600f5550565b6112b36113d8565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015611302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113269190612946565b50505050565b6113346113d8565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6113676113d8565b6001600160a01b0381166113cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b1a565b6113d581611984565b50565b6000546001600160a01b031633146110555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b1a565b6001600160a01b0383166114945760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b1a565b6001600160a01b0382166114f55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b1a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115ba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b1a565b6000811161161c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b1a565b61162583610fe4565b81111561168e5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b1a565b601354600a141580156116a9575060085462010000900460ff165b156116cb57436012546011546116bf9190612829565b10156116cb57600a6013555b6001600160a01b03831660009081526005602052604081205460ff1615801561170d57506001600160a01b03831660009081526005602052604090205460ff16155b156118dd5760085462010000900460ff1661176a5760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152606401610b1a565b6117766012600a612920565b611784906301312d0061292f565b8211156117d35760405162461bcd60e51b815260206004820152601f60248201527f596f752061726520657863656564696e67204d41585f54585f414d4f554e54006044820152606401610b1a565b6009546001600160a01b03848116911614611870576117f46012600a612920565b611802906301312d0061292f565b8261180c85610fe4565b6118169190612829565b11156118705760405162461bcd60e51b815260206004820152602360248201527f596f752061726520657863656564696e67204d41585f57414c4c45545f414d4f60448201526215539560ea1b6064820152608401610b1a565b506009546001906001600160a01b03858116911614801561189f57504360125460115461189d9190612829565b105b156118dd5760105482106118dd57601554601454106118d757601554601460008282546118cc91906127af565b909155506118dd9050565b60006014555b6000600f546118eb30610fe4565b6008549111159150610100900460ff1615801561190b5750601654606414155b8015611919575060085460ff165b80156119225750805b801561193c57506009546001600160a01b03868116911614155b80156119455750815b1561195557611955600f546119d4565b61196185858585611b10565b5050505050565b6000806000611975611e72565b9092509050610b8181836127c2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805461ff0019166101001790556016546000906119f49060646127af565b6119ff90600261292f565b905060008160166003015484611a15919061292f565b611a1f91906127c2565b90506000611a2d82856127af565b905047611a3982611ff5565b6000611a4582476127af565b601954909150600090611a5890876127af565b611a6290836127c2565b601954909150600090611a75908361292f565b90508015611a8757611a87868261216e565b601754600090611a9884600261292f565b611aa2919061292f565b90508015611ac057600a54611ac0906001600160a01b031682612229565b601854600090611ad185600261292f565b611adb919061292f565b90508015611af957600b54611af9906001600160a01b031682612229565b50506008805461ff00191690555050505050505050565b6009546000906001600160a01b03858116911614611b2f576000611b32565b60015b90506000611b41848484612347565b9050818015611b4d5750825b8015611b67575043601254601154611b659190612829565b105b15611ba85760c8601554601454611b7e9190612829565b1115611b8e5760c8601455611ba8565b60155460146000828254611ba29190612829565b90915550505b6001600160a01b03861660009081526006602052604090205460ff1615611c07576001600160a01b038616600090815260026020526040902054611bed9085906127af565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526006602052604090205460ff1615611c6a5760808101516001600160a01b038616600090815260026020526040902054611c509190612829565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054611c8f91906127af565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054611cc69190612829565b6001600160a01b038616600090815260016020908152604080832093909355608084015160039091529181208054909190611d02908490612829565b909155505060808101516001600160a01b03871660009081526003602052604081208054909190611d349084906127af565b909155505060c08101513060009081526003602052604081208054909190611d5d908490612829565b90915550506040810151151580611d78575060008160a00151115b15611d8f57611d8f81604001518260a001516123bf565b600081606001511180611da6575060008160c00151115b15611dbd57611dbd81606001518260c001516123f3565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611e0691815260200190565b60405180910390a360c081015115611e6a57306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611e6191815260200190565b60405180910390a35b505050505050565b600d54600c546000918291825b600754811015611fc457826001600060078481548110611ea157611ea16127e4565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f0c5750816002600060078481548110611ee557611ee56127e4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f2257600d54600c54945094505050509091565b6001600060078381548110611f3957611f396127e4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611f6890846127af565b92506002600060078381548110611f8157611f816127e4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611fb090836127af565b915080611fbc81612810565b915050611e7f565b50600c54600d54611fd591906127c2565b821015611fec57600d54600c549350935050509091565b90939092509050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061202a5761202a6127e4565b60200260200101906001600160a01b031690816001600160a01b031681525050600860039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190612963565b816001815181106120d4576120d46127e4565b6001600160a01b039283166020918202929092010152600854612101913091630100000090041684611432565b60085460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790612140908590600090869030904290600401612980565b600060405180830381600087803b15801561215a57600080fd5b505af1158015611e6a573d6000803e3d6000fd5b60085461218d903090630100000090046001600160a01b031684611432565b600854600a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a48201526301000000909204169063f305d71990839060c40160606040518083038185885af1158015612204573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061196191906129f1565b804710156122795760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b1a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146122c6576040519150601f19603f3d011682016040523d82523d6000602084013e6122cb565b606091505b50509050806123425760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b1a565b505050565b6123876040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61239284848461244f565b90506123a78185856123a2611968565b612564565b60608501526040840152602083015281529392505050565b81600d60008282546123d191906127af565b9250508190555080600e60008282546123ea9190612829565b90915550505050565b3060009081526006602052604090205460ff161561243057306000908152600260205260408120805483929061242a908490612829565b90915550505b30600090815260016020526040812080548492906123ea908490612829565b61248f6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b826124a05760808101849052610b3d565b6000826124af576013546124b3565b6014545b905060006064601660000154836124ca919061292f565b6124d491906127c2565b90506000606460166000015460646124ec91906127af565b6124f6908561292f565b61250091906127c2565b90506103e861250f838961292f565b61251991906127c2565b60a08501526103e861252b828961292f565b61253591906127c2565b60c0850181905260a085015161254b90896127af565b61255591906127af565b60808501525050509392505050565b6000808080612573858861292f565b935085612588575082915060009050806125c4565b848860a00151612598919061292f565b9150848860c001516125aa919061292f565b9050806125b783866127af565b6125c191906127af565b92505b945094509450949050565b6001600160a01b03811681146113d557600080fd5b6000602082840312156125f657600080fd5b8135610b3d816125cf565b600060208083528351808285015260005b8181101561262e57858101830151858201604001528201612612565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561266257600080fd5b823561266d816125cf565b946020939093013593505050565b60008060006060848603121561269057600080fd5b833561269b816125cf565b925060208401356126ab816125cf565b929592945050506040919091013590565b6000602082840312156126ce57600080fd5b5035919050565b600080600080608085870312156126eb57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561271a57600080fd5b8235612725816125cf565b91506020830135612735816125cf565b809150509250929050565b80151581146113d557600080fd5b60006020828403121561276057600080fd5b8135610b3d81612740565b6000806040838503121561277e57600080fd5b8235612789816125cf565b9150602083013561273581612740565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a4457610a44612799565b6000826127df57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820161282257612822612799565b5060010190565b80820180821115610a4457610a44612799565b600181815b8085111561287757816000190482111561285d5761285d612799565b8085161561286a57918102915b93841c9390800290612841565b509250929050565b60008261288e57506001610a44565b8161289b57506000610a44565b81600181146128b157600281146128bb576128d7565b6001915050610a44565b60ff8411156128cc576128cc612799565b50506001821b610a44565b5060208310610133831016604e8410600b84101617156128fa575081810a610a44565b612904838361283c565b806000190482111561291857612918612799565b029392505050565b6000610b3d60ff84168361287f565b8082028115828204841417610a4457610a44612799565b60006020828403121561295857600080fd5b8151610b3d81612740565b60006020828403121561297557600080fd5b8151610b3d816125cf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129d05784516001600160a01b0316835293830193918301916001016129ab565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a0657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212207734ba8c06316ffd3adc65df0b3325750d63ea81001d0ede42b6e7fef72a8f7d64736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a5c3eeef99a1eeaf3ff05d2be1dff943d2d20743000000000000000000000000381e476673d271e0a2ae247acd189507cb9c0969

-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _devWallet (address): 0xA5C3eEEF99A1EeAf3Ff05d2BE1DfF943D2D20743
Arg [2] : _buybackWallet (address): 0x381e476673D271E0a2ae247acD189507cb9C0969

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000a5c3eeef99a1eeaf3ff05d2be1dff943d2d20743
Arg [2] : 000000000000000000000000381e476673d271e0a2ae247acd189507cb9c0969


Deployed Bytecode Sourcemap

17225:16872:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18957:68;;;;;;;;;;-1:-1:-1;18957:68:0;;;;;;;;;;;;;;;;;;;245:25:1;;;301:2;286:18;;279:34;;;;329:18;;;322:34;387:2;372:18;;365:34;232:3;217:19;18957:68:0;;;;;;;;18162:54;;;;;;;;;;;;;;;;;;;556:25:1;;;544:2;529:18;18162:54:0;410:177:1;32974:161:0;;;;;;;;;;-1:-1:-1;32974:161:0;;;;;:::i;:::-;;:::i;:::-;;20134:83;;;;;;;;;;-1:-1:-1;20204:5:0;;;;;;;;;;;;-1:-1:-1;;;20204:5:0;;;;20134:83;;;;;;;:::i;21047:161::-;;;;;;;;;;-1:-1:-1;21047:161:0;;;;;:::i;:::-;;:::i;:::-;;;2018:14:1;;2011:22;1993:41;;1981:2;1966:18;21047:161:0;1853:187:1;20408:95:0;;;;;;;;;;-1:-1:-1;20488:7:0;;20408:95;;32816:149;;;;;;;;;;-1:-1:-1;32816:149:0;;;;;:::i;:::-;;:::i;18132:23::-;;;;;;;;;;;;;;;;21217:424;;;;;;;;;;-1:-1:-1;21217:424:0;;;;;:::i;:::-;;:::i;22390:242::-;;;;;;;;;;;;;:::i;23087:248::-;;;;;;;;;;-1:-1:-1;23087:248:0;;;;;:::i;:::-;;:::i;20316:83::-;;;;;;;;;;-1:-1:-1;20316:83:0;;17950:2;2833:36:1;;2821:2;2806:18;20316:83:0;2691:184:1;23684:473:0;;;;;;;;;;-1:-1:-1;23684:473:0;;;;;:::i;:::-;;:::i;21650:215::-;;;;;;;;;;-1:-1:-1;21650:215:0;;;;;:::i;:::-;;:::i;17415:49::-;;;;;;;;;;-1:-1:-1;17415:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;24433:259;;;;;;;;;;-1:-1:-1;24433:259:0;;;;;:::i;:::-;;:::i;33510:154::-;;;;;;;;;;-1:-1:-1;33510:154:0;;;;;:::i;:::-;;:::i;18475:25::-;;;;;;;;;;;;;;;;17756:26;;;;;;;;;;-1:-1:-1;17756:26:0;;;;;;;;;;;18632:30;;;;;;;;;;;;;;;;18549:27;;;;;;;;;;;;;;;;23344:331;;;;;;;;;;-1:-1:-1;23344:331:0;;;;;:::i;:::-;;:::i;24301:123::-;;;;;;;;;;-1:-1:-1;24301:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;24389:27:0;24365:4;24389:27;;;:18;:27;;;;;;;;;24301:123;18507:32;;;;;;;;;;;;;;;;17698:23;;;;;;;;;;-1:-1:-1;17698:23:0;;;;;;;;20512:198;;;;;;;;;;-1:-1:-1;20512:198:0;;;;;:::i;:::-;;:::i;15247:103::-;;;;;;;;;;;;;:::i;33144:118::-;;;;;;;;;;-1:-1:-1;33144:118:0;;;;;:::i;:::-;;:::i;18316:70::-;;;;;;;;;;;;;:::i;22261:120::-;;;;;;;;;;-1:-1:-1;22261:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22353:20:0;22329:4;22353:20;;;:11;:20;;;;;;;;;22261:120;32608:199;;;;;;;;;;;;;:::i;14606:87::-;;;;;;;;;;-1:-1:-1;14652:7:0;14679:6;-1:-1:-1;;;;;14679:6:0;14606:87;;;-1:-1:-1;;;;;3827:32:1;;;3809:51;;3797:2;3782:18;14606:87:0;3663:203:1;17846:24:0;;;;;;;;;;-1:-1:-1;17846:24:0;;;;-1:-1:-1;;;;;17846:24:0;;;33400:101;;;;;;;;;;-1:-1:-1;33400:101:0;;;;;:::i;:::-;;:::i;20223:87::-;;;;;;;;;;-1:-1:-1;20295:7:0;;;;;;;;;;;;-1:-1:-1;;;20295:7:0;;;;20223:87;;33673:98;;;;;;;;;;-1:-1:-1;33673:98:0;;;;;:::i;:::-;;:::i;33780:114::-;;;;;;;;;;-1:-1:-1;33780:114:0;;;;;:::i;:::-;;:::i;21874:378::-;;;;;;;;;;-1:-1:-1;21874:378:0;;;;;:::i;:::-;;:::i;22874:204::-;;;;;;;;;;-1:-1:-1;22874:204:0;;;;;:::i;:::-;;:::i;17820:19::-;;;;;;;;;;-1:-1:-1;17820:19:0;;;;-1:-1:-1;;;;;17820:19:0;;;20719:167;;;;;;;;;;-1:-1:-1;20719:167:0;;;;;:::i;:::-;;:::i;22641:224::-;;;;;;;;;;;;;:::i;18590:28::-;;;;;;;;;;;;;;;;33271:120;;;;;;;;;;-1:-1:-1;33271:120:0;;;;;:::i;:::-;;:::i;33903:148::-;;;;;;;;;;-1:-1:-1;33903:148:0;;;;;:::i;:::-;;:::i;20895:143::-;;;;;;;;;;-1:-1:-1;20895:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21003:18:0;;;20976:7;21003:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20895:143;17877:28;;;;;;;;;;-1:-1:-1;17877:28:0;;;;-1:-1:-1;;;;;17877:28:0;;;24166:126;;;;;;;;;;-1:-1:-1;24166:126:0;;;;;:::i;:::-;;:::i;18675:42::-;;;;;;;;;;;;18714:3;18675:42;;18413:55;;;;;;;;;;;;;;;;15505:201;;;;;;;;;;-1:-1:-1;15505:201:0;;;;;:::i;:::-;;:::i;17792:21::-;;;;;;;;;;-1:-1:-1;17792:21:0;;;;;;;-1:-1:-1;;;;;17792:21:0;;;32974:161;14492:13;:11;:13::i;:::-;33051::::1;:25:::0;;-1:-1:-1;;;;;33051:25:0;;::::1;-1:-1:-1::0;;;;;;33051:25:0;;::::1;::::0;::::1;::::0;;:13:::1;33087:33:::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;33087:40:0::1;33051:25:::0;33087:40:::1;::::0;;32974:161::o;21047:::-;21122:4;21139:39;13237:10;21162:7;21171:6;21139:8;:39::i;:::-;-1:-1:-1;21196:4:0;21047:161;;;;;:::o;32816:149::-;14492:13;:11;:13::i;:::-;32889:9:::1;:21:::0;;-1:-1:-1;;;;;32889:21:0;;::::1;-1:-1:-1::0;;;;;;32889:21:0;;::::1;::::0;::::1;::::0;;:9:::1;32921:29:::0;;;:18:::1;:29;::::0;;;;:36;;-1:-1:-1;;32921:36:0::1;32889:21:::0;32921:36:::1;::::0;;32816:149::o;21217:424::-;21323:4;21340:36;21350:6;21358:9;21369:6;21340:9;:36::i;:::-;-1:-1:-1;;;;;21417:19:0;;21390:24;21417:19;;;:11;:19;;;;;;;;13237:10;21417:33;;;;;;;;21469:26;;;;21461:79;;;;-1:-1:-1;;;21461:79:0;;5052:2:1;21461:79:0;;;5034:21:1;5091:2;5071:18;;;5064:30;5130:34;5110:18;;;5103:62;-1:-1:-1;;;5181:18:1;;;5174:38;5229:19;;21461:79:0;;;;;;;;;21551:57;21560:6;13237:10;21582:25;21601:6;21582:16;:25;:::i;:::-;21551:8;:57::i;:::-;21629:4;21622:11;;;21217:424;;;;;;:::o;22390:242::-;22444:7;22463:19;22485:26;22503:6;22485:9;:26::i;:::-;22463:48;;22522:19;22544:21;22562:1;22544:9;:21::i;:::-;22522:43;;22613:11;22599;22583:13;20488:7;;;20408:95;22583:13;:27;;;;:::i;:::-;:41;;;;:::i;:::-;22576:48;;;;22390:242;:::o;23087:248::-;23153:7;23192;;23181;:18;;23173:73;;;;-1:-1:-1;;;23173:73:0;;5726:2:1;23173:73:0;;;5708:21:1;5765:2;5745:18;;;5738:30;5804:34;5784:18;;;5777:62;-1:-1:-1;;;5855:18:1;;;5848:40;5905:19;;23173:73:0;5524:406:1;23173:73:0;23257:19;23280:10;:8;:10::i;:::-;23257:33;-1:-1:-1;23308:19:0;23257:33;23308:7;:19;:::i;23684:473::-;14492:13;:11;:13::i;:::-;-1:-1:-1;;;;;23764:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23756:56;;;::::0;-1:-1:-1;;;23756:56:0;;6359:2:1;23756:56:0::1;::::0;::::1;6341:21:1::0;6398:2;6378:18;;;6371:30;6437:25;6417:18;;;6410:53;6480:18;;23756:56:0::1;6157:347:1::0;23756:56:0::1;23828:9;23823:327;23847:9;:16:::0;23843:20;::::1;23823:327;;;23905:7;-1:-1:-1::0;;;;;23889:23:0::1;:9;23899:1;23889:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23889:12:0::1;:23:::0;23885:254:::1;;23948:9;23958:16:::0;;:20:::1;::::0;23977:1:::1;::::0;23958:20:::1;:::i;:::-;23948:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23933:9:::1;:12:::0;;-1:-1:-1;;;;;23948:31:0;;::::1;::::0;23943:1;;23933:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23933:46:0::1;-1:-1:-1::0;;;;;23933:46:0;;::::1;;::::0;;23998:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24037:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24037:28:0::1;::::0;;24084:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24084:15:0;;;;;-1:-1:-1;;;;;;24084:15:0::1;::::0;;;;;23823:327:::1;23684:473:::0;:::o;23885:254::-:1;23865:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23823:327;;;;23684:473:::0;:::o;21650:215::-;13237:10;21738:4;21787:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21787:34:0;;;;;;;;;;21738:4;;21755:80;;21778:7;;21787:47;;21824:10;;21787:47;:::i;24433:259::-;14492:13;:11;:13::i;:::-;24581:3;24570:8;24556:11:::1;24563:4:::0;24556;:11:::1;:::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;24588:3;24556:35;24548:65;;;::::0;-1:-1:-1;;;24548:65:0;;7245:2:1;24548:65:0::1;::::0;::::1;7227:21:1::0;7284:2;7264:18;;;7257:30;-1:-1:-1;;;7303:18:1;;;7296:47;7360:18;;24548:65:0::1;7043:341:1::0;24548:65:0::1;24642:42;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;24624:15:::1;:60:::0;;;;;;;;;;;;;24433:259::o;33510:154::-;14492:13;:11;:13::i;:::-;33604:6:::1;:27:::0;;-1:-1:-1;;;;;;33604:27:0::1;::::0;-1:-1:-1;;;;;33604:27:0;;::::1;;;::::0;;33642:4:::1;:14:::0;;-1:-1:-1;;;;;;33642:14:0::1;::::0;;;::::1;;::::0;;33510:154::o;23344:331::-;14492:13;:11;:13::i;:::-;-1:-1:-1;;;;;23425:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23424:21;23416:61;;;::::0;-1:-1:-1;;;23416:61:0;;7591:2:1;23416:61:0::1;::::0;::::1;7573:21:1::0;7630:2;7610:18;;;7603:30;7669:29;7649:18;;;7642:57;7716:18;;23416:61:0::1;7389:351:1::0;23416:61:0::1;-1:-1:-1::0;;;;;23491:16:0;::::1;23510:1;23491:16:::0;;;:7:::1;:16;::::0;;;;;:20;23488:108:::1;;-1:-1:-1::0;;;;;23567:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23547:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23528:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23488:108:::1;-1:-1:-1::0;;;;;23606:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;23606:27:0::1;23629:4;23606:27:::0;;::::1;::::0;;;23644:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23644:23:0::1;::::0;;::::1;::::0;;23344:331::o;20512:198::-;-1:-1:-1;;;;;20602:20:0;;20578:7;20602:20;;;:11;:20;;;;;;;;20598:49;;;-1:-1:-1;;;;;;20631:16:0;;;;;:7;:16;;;;;;;20512:198::o;20598:49::-;-1:-1:-1;;;;;20685:16:0;;;;;;:7;:16;;;;;;20665:37;;:19;:37::i;15247:103::-;14492:13;:11;:13::i;:::-;15312:30:::1;15339:1;15312:18;:30::i;:::-;15247:103::o:0;33144:118::-;14492:13;:11;:13::i;:::-;33241::::1;17950:2;33241;:13;:::i;:::-;33232:22;::::0;:6;:22:::1;:::i;:::-;33217:12;:37:::0;-1:-1:-1;33144:118:0:o;18316:70::-;18373:13;17950:2;18373;:13;:::i;:::-;18360:26;;:10;:26;:::i;:::-;18316:70;:::o;32608:199::-;14492:13;:11;:13::i;:::-;32671:14:::1;::::0;;;::::1;;;32670:15;32662:40;;;::::0;-1:-1:-1;;;32662:40:0;;9503:2:1;32662:40:0::1;::::0;::::1;9485:21:1::0;9542:2;9522:18;;;9515:30;-1:-1:-1;;;9561:18:1;;;9554:42;9613:18;;32662:40:0::1;9301:336:1::0;32662:40:0::1;32713:14;:21:::0;;-1:-1:-1;;32745:18:0;;;;;32787:12:::1;32774:10;:25:::0;32608:199::o;33400:101::-;14492:13;:11;:13::i;:::-;33471:11:::1;:22:::0;;-1:-1:-1;;33471:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33400:101::o;33673:98::-;14492:13;:11;:13::i;:::-;33744:10:::1;:19:::0;33673:98::o;33780:114::-;14492:13;:11;:13::i;:::-;33847:39:::1;::::0;33855:10:::1;::::0;33847:39;::::1;;;::::0;33876:9;;33847:39:::1;::::0;;;33876:9;33855:10;33847:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;21874:378:::0;13237:10;21967:4;22011:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22011:34:0;;;;;;;;;;22064:35;;;;22056:85;;;;-1:-1:-1;;;22056:85:0;;9844:2:1;22056:85:0;;;9826:21:1;9883:2;9863:18;;;9856:30;9922:34;9902:18;;;9895:62;-1:-1:-1;;;9973:18:1;;;9966:35;10018:19;;22056:85:0;9642:401:1;22056:85:0;22152:67;13237:10;22175:7;22184:34;22203:15;22184:16;:34;:::i;22152:67::-;-1:-1:-1;22240:4:0;;21874:378;-1:-1:-1;;;21874:378:0:o;22874:204::-;-1:-1:-1;;;;;22981:19:0;;22939:7;22981:19;;;:13;:19;;;;;;22962:15;22995:4;22962:9;:15::i;:::-;:38;22959:111;;-1:-1:-1;;;;;23027:19:0;;;;;;:13;:19;;;;;;23009:15;23041:4;23009:9;:15::i;:::-;:37;;;;:::i;22959:111::-;-1:-1:-1;23069:1:0;;22874:204;-1:-1:-1;22874:204:0:o;20719:167::-;20797:4;20814:42;13237:10;20838:9;20849:6;20814:9;:42::i;22641:224::-;22693:7;22712:19;22734:26;22752:6;22734:9;:26::i;:::-;22712:48;;22771:19;22793:21;22811:1;22793:9;:21::i;:::-;22771:43;-1:-1:-1;22832:25:0;22771:43;22832:11;:25;:::i;33271:120::-;14492:13;:11;:13::i;:::-;33370::::1;17950:2;33370;:13;:::i;:::-;33361:22;::::0;:6;:22:::1;:::i;:::-;33345:13;:38:::0;-1:-1:-1;33271:120:0:o;33903:148::-;14492:13;:11;:13::i;:::-;34002:41:::1;::::0;-1:-1:-1;;;34002:41:0;;-1:-1:-1;;;;;10240:32:1;;;34002:41:0::1;::::0;::::1;10222:51:1::0;10289:18;;;10282:34;;;34002:27:0;::::1;::::0;::::1;::::0;10195:18:1;;34002:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33903:148:::0;;;:::o;24166:126::-;14492:13;:11;:13::i;:::-;-1:-1:-1;;;;;24248:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;24248:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24166:126::o;15505:201::-;14492:13;:11;:13::i;:::-;-1:-1:-1;;;;;15594:22:0;::::1;15586:73;;;::::0;-1:-1:-1;;;15586:73:0;;10779:2:1;15586:73:0::1;::::0;::::1;10761:21:1::0;10818:2;10798:18;;;10791:30;10857:34;10837:18;;;10830:62;-1:-1:-1;;;10908:18:1;;;10901:36;10954:19;;15586:73:0::1;10577:402:1::0;15586:73:0::1;15670:28;15689:8;15670:18;:28::i;:::-;15505:201:::0;:::o;14771:132::-;14652:7;14679:6;-1:-1:-1;;;;;14679:6:0;13237:10;14835:23;14827:68;;;;-1:-1:-1;;;14827:68:0;;11186:2:1;14827:68:0;;;11168:21:1;;;11205:18;;;11198:30;11264:34;11244:18;;;11237:62;11316:18;;14827:68:0;10984:356:1;27247:335:0;-1:-1:-1;;;;;27340:19:0;;27332:68;;;;-1:-1:-1;;;27332:68:0;;11547:2:1;27332:68:0;;;11529:21:1;11586:2;11566:18;;;11559:30;11625:34;11605:18;;;11598:62;-1:-1:-1;;;11676:18:1;;;11669:34;11720:19;;27332:68:0;11345:400:1;27332:68:0;-1:-1:-1;;;;;27419:21:0;;27411:68;;;;-1:-1:-1;;;27411:68:0;;11952:2:1;27411:68:0;;;11934:21:1;11991:2;11971:18;;;11964:30;12030:34;12010:18;;;12003:62;-1:-1:-1;;;12081:18:1;;;12074:32;12123:19;;27411:68:0;11750:398:1;27411:68:0;-1:-1:-1;;;;;27490:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27542:32;;556:25:1;;;27542:32:0;;529:18:1;27542:32:0;;;;;;;27247:335;;;:::o;27594:1431::-;-1:-1:-1;;;;;27682:18:0;;27674:68;;;;-1:-1:-1;;;27674:68:0;;12355:2:1;27674:68:0;;;12337:21:1;12394:2;12374:18;;;12367:30;12433:34;12413:18;;;12406:62;-1:-1:-1;;;12484:18:1;;;12477:35;12529:19;;27674:68:0;12153:401:1;27674:68:0;27770:1;27761:6;:10;27753:64;;;;-1:-1:-1;;;27753:64:0;;12761:2:1;27753:64:0;;;12743:21:1;12800:2;12780:18;;;12773:30;12839:34;12819:18;;;12812:62;-1:-1:-1;;;12890:18:1;;;12883:39;12939:19;;27753:64:0;12559:405:1;27753:64:0;27846:15;27856:4;27846:9;:15::i;:::-;27836:6;:25;;27828:86;;;;-1:-1:-1;;;27828:86:0;;13171:2:1;27828:86:0;;;13153:21:1;13210:2;13190:18;;;13183:30;13249:34;13229:18;;;13222:62;-1:-1:-1;;;13300:18:1;;;13293:47;13357:19;;27828:86:0;12969:413:1;27828:86:0;27931:6;;27941:2;27931:12;;:30;;;;-1:-1:-1;27947:14:0;;;;;;;27931:30;27928:118;;;28009:12;27993:13;;27980:10;;:26;;;;:::i;:::-;:41;27977:57;;;28032:2;28023:6;:11;27977:57;-1:-1:-1;;;;;28097:24:0;;28059:12;28097:24;;;:18;:24;;;;;;;;28096:25;:52;;;;-1:-1:-1;;;;;;28126:22:0;;;;;;:18;:22;;;;;;;;28125:23;28096:52;28093:638;;;28172:14;;;;;;;28164:59;;;;-1:-1:-1;;;28164:59:0;;13589:2:1;28164:59:0;;;13571:21:1;;;13608:18;;;13601:30;13667:34;13647:18;;;13640:62;13719:18;;28164:59:0;13387:356:1;28164:59:0;18276:13;17950:2;18276;:13;:::i;:::-;18263:26;;:10;:26;:::i;:::-;28246:6;:23;;28238:67;;;;-1:-1:-1;;;28238:67:0;;13950:2:1;28238:67:0;;;13932:21:1;13989:2;13969:18;;;13962:30;14028:33;14008:18;;;14001:61;14079:18;;28238:67:0;13748:355:1;28238:67:0;28329:4;;-1:-1:-1;;;;;28323:10:0;;;28329:4;;28323:10;28320:106;;18373:13;17950:2;18373;:13;:::i;:::-;18360:26;;:10;:26;:::i;:::-;28359:6;28343:13;28353:2;28343:9;:13::i;:::-;:22;;;;:::i;:::-;:43;;28335:91;;;;-1:-1:-1;;;28335:91:0;;14310:2:1;28335:91:0;;;14292:21:1;14349:2;14329:18;;;14322:30;14388:34;14368:18;;;14361:62;-1:-1:-1;;;14439:18:1;;;14432:33;14482:19;;28335:91:0;14108:399:1;28335:91:0;-1:-1:-1;28481:4:0;;28451;;-1:-1:-1;;;;;28473:12:0;;;28481:4;;28473:12;:57;;;;;28518:12;28502:13;;28489:10;;:26;;;;:::i;:::-;:41;28473:57;28470:250;;;28563:12;;28553:6;:22;28550:155;;28613:10;;28602:7;;:21;28599:86;;28636:10;;28625:7;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;28599:86:0;;-1:-1:-1;28599:86:0;;28684:1;28674:7;:11;28599:86;28744:12;28787:13;;28759:24;28777:4;28759:9;:24::i;:::-;28815:8;;-1:-1:-1;;28759:41:0;;-1:-1:-1;28815:8:0;;;;;28814:9;:39;;;;-1:-1:-1;28827:15:0;:19;28850:3;28827:26;;28814:39;:54;;;;-1:-1:-1;28857:11:0;;;;28814:54;:65;;;;;28872:7;28814:65;:81;;;;-1:-1:-1;28891:4:0;;-1:-1:-1;;;;;28883:12:0;;;28891:4;;28883:12;;28814:81;:92;;;;;28899:7;28814:92;28811:152;;;28922:29;28937:13;;28922:14;:29::i;:::-;28976:41;28991:4;28997:2;29001:6;29009:7;28976:14;:41::i;:::-;27663:1362;;27594:1431;;;:::o;26531:158::-;26572:7;26593:15;26610;26629:19;:17;:19::i;:::-;26592:56;;-1:-1:-1;26592:56:0;-1:-1:-1;26666:15:0;26592:56;;26666:15;:::i;15866:191::-;15940:16;15959:6;;-1:-1:-1;;;;;15976:17:0;;;-1:-1:-1;;;;;;15976:17:0;;;;;;16009:40;;15959:6;;;;;;;16009:40;;15940:16;16009:40;15929:128;15866:191;:::o;30410:1109::-;19287:8;:15;;-1:-1:-1;;19287:15:0;;;;;30509::::1;:19:::0;19287:15;;30503:25:::1;::::0;:3:::1;:25;:::i;:::-;30502:31;::::0;30532:1:::1;30502:31;:::i;:::-;30480:53;;30544:32;30609:11;30588:15;:18;;;30579:6;:27;;;;:::i;:::-;:41;;;;:::i;:::-;30544:76:::0;-1:-1:-1;30631:14:0::1;30648:33;30544:76:::0;30648:6;:33:::1;:::i;:::-;30631:50:::0;-1:-1:-1;30720:21:0::1;30755:24;30631:50:::0;30755:16:::1;:24::i;:::-;30793:20;30816:38;30840:14:::0;30816:21:::1;:38;:::i;:::-;30916:18:::0;;30793:61;;-1:-1:-1;30865:19:0::1;::::0;30902:32:::1;::::0;:11;:32:::1;:::i;:::-;30886:49;::::0;:12;:49:::1;:::i;:::-;30992:18:::0;;30865:70;;-1:-1:-1;30946:29:0::1;::::0;30978:32:::1;::::0;30865:70;30978:32:::1;:::i;:::-;30946:64:::0;-1:-1:-1;31027:25:0;;31024:158:::1;;31109:61;31122:24;31148:21;31109:12;:61::i;:::-;31230:19:::0;;31195:14:::1;::::0;31212:15:::1;:11:::0;31226:1:::1;31212:15;:::i;:::-;:37;;;;:::i;:::-;31195:54:::0;-1:-1:-1;31263:10:0;;31260:77:::1;;31297:9;::::0;31289:36:::1;::::0;-1:-1:-1;;;;;31297:9:0::1;31318:6:::0;31289:28:::1;:36::i;:::-;31389:23:::0;;31350:18:::1;::::0;31371:15:::1;:11:::0;31389:23:::1;31371:15;:::i;:::-;:41;;;;:::i;:::-;31350:62:::0;-1:-1:-1;31426:14:0;;31423:89:::1;;31464:13;::::0;31456:44:::1;::::0;-1:-1:-1;;;;;31464:13:0::1;31489:10:::0;31456:32:::1;:44::i;:::-;-1:-1:-1::0;;19325:8:0;:16;;-1:-1:-1;;19325:16:0;;;-1:-1:-1;;;;;;;;30410:1109:0:o;29110:1291::-;29249:4;;29222:11;;-1:-1:-1;;;;;29236:17:0;;;29249:4;;29236:17;:32;;29263:5;29236:32;;;29256:4;29236:32;29222:46;;29279:28;29310:36;29321:7;29330;29339:6;29310:10;:36::i;:::-;29279:67;;29363:6;:17;;;;;29373:7;29363:17;:62;;;;;29413:12;29397:13;;29384:10;;:26;;;;:::i;:::-;:41;29363:62;29360:196;;;18714:3;29454:10;;29444:7;;:20;;;;:::i;:::-;:35;29441:103;;;18714:3;29481:7;:22;29441:103;;;29534:10;;29523:7;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;29441:103:0;-1:-1:-1;;;;;29573:19:0;;;;;;:11;:19;;;;;;;;29569:115;;;-1:-1:-1;;;;;29649:15:0;;;;;;:7;:15;;;;;;:23;;29665:7;;29649:23;:::i;:::-;-1:-1:-1;;;;;29631:15:0;;;;;;:7;:15;;;;;:41;29569:115;-1:-1:-1;;;;;29698:22:0;;;;;;:11;:22;;;;;;;;29694:130;;;29795:17;;;;-1:-1:-1;;;;;29776:18:0;;;;;;:7;:18;;;;;;:36;;29795:17;29776:36;:::i;:::-;-1:-1:-1;;;;;29755:18:0;;;;;;:7;:18;;;;;:57;29694:130;29871:9;;-1:-1:-1;;;;;29855:15:0;;29871:9;29855:15;;;:7;:15;;;;;;:25;;29871:9;29855:25;:::i;:::-;-1:-1:-1;;;;;29837:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;29931:17;;;29912:18;;;;;;;;;;:36;;29931:17;29912:36;:::i;:::-;-1:-1:-1;;;;;29891:18:0;;;;;;:7;:18;;;;;;;;:57;;;;29987:17;;;;29959:13;:24;;;;;;:45;;:24;;29891:18;29959:45;;29987:17;;29959:45;:::i;:::-;;;;-1:-1:-1;;30040:17:0;;;;-1:-1:-1;;;;;30015:21:0;;;;;;:13;:21;;;;;:42;;:21;;;:42;;30040:17;;30015:42;:::i;:::-;;;;-1:-1:-1;;30100:7:0;;;;30090:4;30068:28;;;;:13;:28;;;;;:39;;:28;;;:39;;30100:7;;30068:39;:::i;:::-;;;;-1:-1:-1;;30124:6:0;;;;:10;;;:24;;;30147:1;30138;:6;;;:10;30124:24;30121:56;;;30150:27;30162:1;:6;;;30170:1;:6;;;30150:11;:27::i;:::-;30201:1;30191;:7;;;:11;:26;;;;30216:1;30206;:7;;;:11;30191:26;30188:62;;;30219:31;30233:1;:7;;;30242:1;:7;;;30219:13;:31::i;:::-;30289:9;-1:-1:-1;;;;;30272:46:0;30281:6;-1:-1:-1;;;;;30272:46:0;;30300:1;:17;;;30272:46;;;;556:25:1;;544:2;529:18;;410:177;30272:46:0;;;;;;;;30332:7;;;;:11;30329:61;;30375:4;-1:-1:-1;;;;;30350:40:0;30359:6;-1:-1:-1;;;;;30350:40:0;;30382:1;:7;;;30350:40;;;;556:25:1;;544:2;529:18;;410:177;30350:40:0;;;;;;;;30329:61;29208:1193;;29110:1291;;;;:::o;26698:540::-;26795:7;;26831;;26748;;;;;26849:279;26873:9;:16;26869:20;;26849:279;;;26939:7;26915;:21;26923:9;26933:1;26923:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26923:12:0;26915:21;;;;;;;;;;;;;:31;;:66;;;26974:7;26950;:21;26958:9;26968:1;26958:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26958:12:0;26950:21;;;;;;;;;;;;;:31;26915:66;26911:97;;;26991:7;;27000;;26983:25;;;;;;;26698:540;;:::o;26911:97::-;27041:7;:21;27049:9;27059:1;27049:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27049:12:0;27041:21;;;;;;;;;;;;;27033:29;;:7;:29;:::i;:::-;27023:39;;27095:7;:21;27103:9;27113:1;27103:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27103:12:0;27095:21;;;;;;;;;;;;;27087:29;;:7;:29;:::i;:::-;27077:39;-1:-1:-1;26891:3:0;;;;:::i;:::-;;;;26849:279;;;;27160:7;;27152;;:15;;;;:::i;:::-;27142:7;:25;27138:56;;;27177:7;;27186;;27169:25;;;;;;26698:540;;:::o;27138:56::-;27213:7;;27222;;-1:-1:-1;26698:540:0;-1:-1:-1;26698:540:0:o;32035:564::-;32185:16;;;32199:1;32185:16;;;;;;;;32161:21;;32185:16;;;;;;;;;;-1:-1:-1;32185:16:0;32161:40;;32230:4;32212;32217:1;32212:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;32212:23:0;;;-1:-1:-1;;;;;32212:23:0;;;;;32256:6;;;;;;;;;-1:-1:-1;;;;;32256:6:0;-1:-1:-1;;;;;32256:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32246:4;32251:1;32246:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32246:23:0;;;:7;;;;;;;;;:23;32315:6;;32283:53;;32300:4;;32315:6;;;;32324:11;32283:8;:53::i;:::-;32376:6;;:215;;-1:-1:-1;;;32376:215:0;;:6;;;;-1:-1:-1;;;;;32376:6:0;;:57;;:215;;32448:11;;32474:1;;32518:4;;32545;;32565:15;;32376:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31528:498;31708:6;;31676:53;;31693:4;;31708:6;;;-1:-1:-1;;;;;31708:6:0;31717:11;31676:8;:53::i;:::-;31773:6;;31968:9;;31773:245;;-1:-1:-1;;;31773:245:0;;31836:4;31773:245;;;16226:34:1;16276:18;;;16269:34;;;31882:1:0;16319:18:1;;;16312:34;;;16362:18;;;16355:34;-1:-1:-1;;;;;31968:9:0;;;16405:19:1;;;16398:44;31992:15:0;16458:19:1;;;16451:35;31773:6:0;;;;;;:22;;31803:9;;16160:19:1;;31773:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2733:317::-;2848:6;2823:21;:31;;2815:73;;;;-1:-1:-1;;;2815:73:0;;17010:2:1;2815:73:0;;;16992:21:1;17049:2;17029:18;;;17022:30;17088:31;17068:18;;;17061:59;17137:18;;2815:73:0;16808:353:1;2815:73:0;2902:12;2920:9;-1:-1:-1;;;;;2920:14:0;2942:6;2920:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2901:52;;;2972:7;2964:78;;;;-1:-1:-1;;;2964:78:0;;17578:2:1;2964:78:0;;;17560:21:1;17617:2;17597:18;;;17590:30;17656:34;17636:18;;;17629:62;17727:28;17707:18;;;17700:56;17773:19;;2964:78:0;17376:422:1;2964:78:0;2804:246;2733:317;;:::o;25055:364::-;25141:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25141:36:0;25202:37;25214:7;25223;25232:6;25202:11;:37::i;:::-;25190:49;;25332:52;25344:9;25355:7;25364;25373:10;:8;:10::i;:::-;25332:11;:52::i;:::-;25313:15;;;25250:134;25297:14;;;25250:134;25270:25;;;25250:134;;;25055:364;;;;;:::o;24701:116::-;24779:4;24769:7;;:14;;;;;;;:::i;:::-;;;;;;;;24805:4;24794:8;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;24701:116:0:o;24826:220::-;24923:4;24903:26;;;;:11;:26;;;;;;;;24900:97;;;24971:4;24955:22;;;;:7;:22;;;;;:30;;24979:6;;24955:22;:30;;24979:6;;24955:30;:::i;:::-;;;;-1:-1:-1;;24900:97:0;25023:4;25007:22;;;;:7;:22;;;;;:31;;25032:6;;25007:22;:31;;25032:6;;25007:31;:::i;25428:580::-;25515:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25515:28:0;25563:7;25559:86;;25585:17;;;:27;;;25625:8;;25559:86;25658:15;25676:6;:25;;25695:6;;25676:25;;;25685:7;;25676:25;25658:43;;25712:14;25761:3;25739:15;:19;;;25729:7;:29;;;;:::i;:::-;:35;;;;:::i;:::-;25712:52;;25775:15;25833:3;25810:15;:19;;;25804:3;:25;;;;:::i;:::-;25793:37;;:7;:37;:::i;:::-;:43;;;;:::i;:::-;25775:61;-1:-1:-1;25875:4:0;25856:16;25866:6;25856:7;:16;:::i;:::-;:23;;;;:::i;:::-;25847:6;;;:32;25920:4;25900:17;25910:7;25900;:17;:::i;:::-;:24;;;;:::i;:::-;25890:7;;;:34;;;25965:6;;;;25955:16;;:7;:16;:::i;:::-;:26;;;;:::i;:::-;25935:17;;;:46;-1:-1:-1;;;25428:580:0;;;;;:::o;26017:505::-;26142:15;;;;26234:19;26242:11;26234:7;:19;:::i;:::-;26224:29;;26271:7;26267:67;;-1:-1:-1;26300:7:0;;-1:-1:-1;26318:1:0;;-1:-1:-1;26318:1:0;26293:29;;26267:67;26361:11;26354:1;:6;;;:18;;;;:::i;:::-;26347:25;;26399:11;26391:1;:7;;;:19;;;;:::i;:::-;26383:27;-1:-1:-1;26383:27:0;26440:12;26448:4;26440:7;:12;:::i;:::-;:18;;;;:::i;:::-;26421:37;;26017:505;;;;;;;;;;:::o;592:131:1:-;-1:-1:-1;;;;;667:31:1;;657:42;;647:70;;713:1;710;703:12;728:247;787:6;840:2;828:9;819:7;815:23;811:32;808:52;;;856:1;853;846:12;808:52;895:9;882:23;914:31;939:5;914:31;:::i;980:548::-;1092:4;1121:2;1150;1139:9;1132:21;1182:6;1176:13;1225:6;1220:2;1209:9;1205:18;1198:34;1250:1;1260:140;1274:6;1271:1;1268:13;1260:140;;;1369:14;;;1365:23;;1359:30;1335:17;;;1354:2;1331:26;1324:66;1289:10;;1260:140;;;1264:3;1449:1;1444:2;1435:6;1424:9;1420:22;1416:31;1409:42;1519:2;1512;1508:7;1503:2;1495:6;1491:15;1487:29;1476:9;1472:45;1468:54;1460:62;;;;980:548;;;;:::o;1533:315::-;1601:6;1609;1662:2;1650:9;1641:7;1637:23;1633:32;1630:52;;;1678:1;1675;1668:12;1630:52;1717:9;1704:23;1736:31;1761:5;1736:31;:::i;:::-;1786:5;1838:2;1823:18;;;;1810:32;;-1:-1:-1;;;1533:315:1:o;2045:456::-;2122:6;2130;2138;2191:2;2179:9;2170:7;2166:23;2162:32;2159:52;;;2207:1;2204;2197:12;2159:52;2246:9;2233:23;2265:31;2290:5;2265:31;:::i;:::-;2315:5;-1:-1:-1;2372:2:1;2357:18;;2344:32;2385:33;2344:32;2385:33;:::i;:::-;2045:456;;2437:7;;-1:-1:-1;;;2491:2:1;2476:18;;;;2463:32;;2045:456::o;2506:180::-;2565:6;2618:2;2606:9;2597:7;2593:23;2589:32;2586:52;;;2634:1;2631;2624:12;2586:52;-1:-1:-1;2657:23:1;;2506:180;-1:-1:-1;2506:180:1:o;2880:385::-;2966:6;2974;2982;2990;3043:3;3031:9;3022:7;3018:23;3014:33;3011:53;;;3060:1;3057;3050:12;3011:53;-1:-1:-1;;3083:23:1;;;3153:2;3138:18;;3125:32;;-1:-1:-1;3204:2:1;3189:18;;3176:32;;3255:2;3240:18;3227:32;;-1:-1:-1;2880:385:1;-1:-1:-1;2880:385:1:o;3270:388::-;3338:6;3346;3399:2;3387:9;3378:7;3374:23;3370:32;3367:52;;;3415:1;3412;3405:12;3367:52;3454:9;3441:23;3473:31;3498:5;3473:31;:::i;:::-;3523:5;-1:-1:-1;3580:2:1;3565:18;;3552:32;3593:33;3552:32;3593:33;:::i;:::-;3645:7;3635:17;;;3270:388;;;;;:::o;3871:118::-;3957:5;3950:13;3943:21;3936:5;3933:32;3923:60;;3979:1;3976;3969:12;3994:241;4050:6;4103:2;4091:9;4082:7;4078:23;4074:32;4071:52;;;4119:1;4116;4109:12;4071:52;4158:9;4145:23;4177:28;4199:5;4177:28;:::i;4240:382::-;4305:6;4313;4366:2;4354:9;4345:7;4341:23;4337:32;4334:52;;;4382:1;4379;4372:12;4334:52;4421:9;4408:23;4440:31;4465:5;4440:31;:::i;:::-;4490:5;-1:-1:-1;4547:2:1;4532:18;;4519:32;4560:30;4519:32;4560:30;:::i;5259:127::-;5320:10;5315:3;5311:20;5308:1;5301:31;5351:4;5348:1;5341:15;5375:4;5372:1;5365:15;5391:128;5458:9;;;5479:11;;;5476:37;;;5493:18;;:::i;5935:217::-;5975:1;6001;5991:132;;6045:10;6040:3;6036:20;6033:1;6026:31;6080:4;6077:1;6070:15;6108:4;6105:1;6098:15;5991:132;-1:-1:-1;6137:9:1;;5935:217::o;6509:127::-;6570:10;6565:3;6561:20;6558:1;6551:31;6601:4;6598:1;6591:15;6625:4;6622:1;6615:15;6641:127;6702:10;6697:3;6693:20;6690:1;6683:31;6733:4;6730:1;6723:15;6757:4;6754:1;6747:15;6773:135;6812:3;6833:17;;;6830:43;;6853:18;;:::i;:::-;-1:-1:-1;6900:1:1;6889:13;;6773:135::o;6913:125::-;6978:9;;;6999:10;;;6996:36;;;7012:18;;:::i;7745:422::-;7834:1;7877:5;7834:1;7891:270;7912:7;7902:8;7899:21;7891:270;;;7971:4;7967:1;7963:6;7959:17;7953:4;7950:27;7947:53;;;7980:18;;:::i;:::-;8030:7;8020:8;8016:22;8013:55;;;8050:16;;;;8013:55;8129:22;;;;8089:15;;;;7891:270;;;7895:3;7745:422;;;;;:::o;8172:806::-;8221:5;8251:8;8241:80;;-1:-1:-1;8292:1:1;8306:5;;8241:80;8340:4;8330:76;;-1:-1:-1;8377:1:1;8391:5;;8330:76;8422:4;8440:1;8435:59;;;;8508:1;8503:130;;;;8415:218;;8435:59;8465:1;8456:10;;8479:5;;;8503:130;8540:3;8530:8;8527:17;8524:43;;;8547:18;;:::i;:::-;-1:-1:-1;;8603:1:1;8589:16;;8618:5;;8415:218;;8717:2;8707:8;8704:16;8698:3;8692:4;8689:13;8685:36;8679:2;8669:8;8666:16;8661:2;8655:4;8652:12;8648:35;8645:77;8642:159;;;-1:-1:-1;8754:19:1;;;8786:5;;8642:159;8833:34;8858:8;8852:4;8833:34;:::i;:::-;8903:6;8899:1;8895:6;8891:19;8882:7;8879:32;8876:58;;;8914:18;;:::i;:::-;8952:20;;8172:806;-1:-1:-1;;;8172:806:1:o;8983:140::-;9041:5;9070:47;9111:4;9101:8;9097:19;9091:4;9070:47;:::i;9128:168::-;9201:9;;;9232;;9249:15;;;9243:22;;9229:37;9219:71;;9270:18;;:::i;10327:245::-;10394:6;10447:2;10435:9;10426:7;10422:23;10418:32;10415:52;;;10463:1;10460;10453:12;10415:52;10495:9;10489:16;10514:28;10536:5;10514:28;:::i;14644:251::-;14714:6;14767:2;14755:9;14746:7;14742:23;14738:32;14735:52;;;14783:1;14780;14773:12;14735:52;14815:9;14809:16;14834:31;14859:5;14834:31;:::i;14900:980::-;15162:4;15210:3;15199:9;15195:19;15241:6;15230:9;15223:25;15267:2;15305:6;15300:2;15289:9;15285:18;15278:34;15348:3;15343:2;15332:9;15328:18;15321:31;15372:6;15407;15401:13;15438:6;15430;15423:22;15476:3;15465:9;15461:19;15454:26;;15515:2;15507:6;15503:15;15489:29;;15536:1;15546:195;15560:6;15557:1;15554:13;15546:195;;;15625:13;;-1:-1:-1;;;;;15621:39:1;15609:52;;15716:15;;;;15681:12;;;;15657:1;15575:9;15546:195;;;-1:-1:-1;;;;;;;15797:32:1;;;;15792:2;15777:18;;15770:60;-1:-1:-1;;;15861:3:1;15846:19;15839:35;15758:3;14900:980;-1:-1:-1;;;14900:980:1:o;16497:306::-;16585:6;16593;16601;16654:2;16642:9;16633:7;16629:23;16625:32;16622:52;;;16670:1;16667;16660:12;16622:52;16699:9;16693:16;16683:26;;16749:2;16738:9;16734:18;16728:25;16718:35;;16793:2;16782:9;16778:18;16772:25;16762:35;;16497:306;;;;;:::o

Swarm Source

ipfs://7734ba8c06316ffd3adc65df0b3325750d63ea81001d0ede42b6e7fef72a8f7d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.