ETH Price: $3,149.53 (+1.21%)
Gas: 9.58 Gwei

Token

two.0 (two)
 

Overview

Max Total Supply

1,000,000,000 two

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
sendyorawford.eth
Balance
6,894,209.126393152568988002 two

Value
$0.00
0xbEf3B3373Feb700D7818B672BcA88BFDfC51999c
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
twopointzero

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-06-29
*/

// SPDX-License-Identifier: MIT

/*

.######..##...##...####............####..
...##....##...##..##..##..........##..##.
...##....##.#.##..##..##..........######.
...##....#######..##..##....##....##..##.
...##.....##.##....####.....##.....####..
.........................................

welcome to the sublunary realm
- a revolution of current tokenomics
- dynamic tax that fluctuates based on the number of sells 
--> used for: reflections, buy backs/burns, and marketing 

https://twitter.com/twopoint0ERC

*/

pragma solidity ^0.8.1;

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

pragma solidity ^0.8.19;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error AddressInsufficientBalance(address account);

    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedInnerCall();

    /**
     * @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 {
        if (address(this).balance < amount) {
            revert AddressInsufficientBalance(address(this));
        }

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert FailedInnerCall();
        }
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with a
     * `customRevert` function as a fallback when `target` reverts.
     *
     * Requirements:
     *
     * - `customRevert` must be a reverting function.
     *
     * _Available since v5.0._
     */
    function functionCall(
        address target,
        bytes memory data,
        function() internal view customRevert
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, customRevert);
    }

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

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with a `customRevert` function as a fallback revert reason when `target` reverts.
     *
     * Requirements:
     *
     * - `customRevert` must be a reverting function.
     *
     * _Available since v5.0._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        function() internal view customRevert
    ) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, customRevert);
    }

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

    /**
     * @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,
        function() internal view customRevert
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, customRevert);
    }

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

    /**
     * @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,
        function() internal view customRevert
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, customRevert);
    }

    /**
     * @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 `customRevert`) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v5.0._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        function() internal view customRevert
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check if target is a contract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                if (target.code.length == 0) {
                    revert AddressEmptyCode(target);
                }
            }
            return returndata;
        } else {
            _revert(returndata, customRevert);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or with a default revert error.
     *
     * _Available since v5.0._
     */
    function verifyCallResult(bool success, bytes memory returndata) internal view returns (bytes memory) {
        return verifyCallResult(success, returndata, defaultRevert);
    }

    /**
     * @dev Same as {xref-Address-verifyCallResult-bool-bytes-}[`verifyCallResult`], but with a
     * `customRevert` function as a fallback when `success` is `false`.
     *
     * Requirements:
     *
     * - `customRevert` must be a reverting function.
     *
     * _Available since v5.0._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        function() internal view customRevert
    ) internal view returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, customRevert);
        }
    }

    /**
     * @dev Default reverting function when no `customRevert` is provided in a function call.
     */
    function defaultRevert() internal pure {
        revert FailedInnerCall();
    }

    function _revert(bytes memory returndata, function() internal view customRevert) private view {
        // 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 {
            customRevert();
            revert FailedInnerCall();
        }
    }
}

// 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: twopoint0.sol

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;
}
 
 
contract twopointzero is IERC20, Ownable {
    using Address for address payable;
 
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
 
    address[] private _excluded;
 
    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 = 2_000_000 * 10**_decimals;
    uint256 public maxTxAmount = 20_000_000 * 10**_decimals;
    uint256 public maxWalletAmount = 20_000_000 * 10**_decimals;
    uint256 public buyThreshold = 350_000 * 10**_decimals;
    uint256 public startBlock;
    uint256 public offlineBlocks = 7;
 
    uint256 public buyTax = 150; // 15% tax first 7 blocks then buy tax turns OFF FOREVER
    uint256 public sellTax = 150; // 15%
    uint256 public dynamicTax = 30; // 3%
    uint256 public maxSellTax = 150; // 15%
 
    string private constant _name = "two.0";
    string private constant _symbol = "two";
 
    struct TaxesPercentage {
      uint256 rfi;
      uint256 dev;
      uint256 buyBack;
    }
 
    TaxesPercentage public taxesPercentage = TaxesPercentage(20,30,50);
 
    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rSwap;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tSwap;
    }
 
 
    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }
 
    constructor () {
 
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());
 
        router = _router;
        pair = _pair;
 
        excludeFromReward(pair);
        excludeFromReward(address(0xdead));

        devWallet = 0x3f1Dae4dB1E060a0Fbcd5416Bb3D5F1C5fE6ac4A;
        buybackWallet = 0xc672908C56534c256d7e6593C3aF66cfdF37B480;
 
        _rOwned[msg.sender] = _rTotal;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[devWallet]=true;
        _isExcludedFromFee[buybackWallet] = true;
 
        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 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) public onlyOwner {
        require(_rfi + _dev + _buyback == 100, "Total must be 100");
        taxesPercentage = TaxesPercentage(_rfi, _dev, _buyback);
    }
 
    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 != 0 && tradingEnabled){
            if(startBlock + offlineBlocks < block.number) buyTax = 0;
        }
 
        bool takeFee = false;
 
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            require(tradingEnabled ,"Liquidity has not been added yet");
            require(amount <= maxTxAmount, "You are exceeding maxTxAmount");
            if(to != pair) require(balanceOf(to) + amount <= maxWalletAmount, "You are exceeding maxWalletAmount");
            takeFee = true;
            if(from == pair && startBlock + offlineBlocks < block.number){
                takeFee = false;
                if(amount >= buyThreshold){
                    if(sellTax >= dynamicTax) sellTax -= dynamicTax;
                    else sellTax = 0;
                }
            }
        }
 
        bool canSwap = balanceOf(address(this)) >= swapThreshold;
        if(!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            swapTokensForFees(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 > maxSellTax) sellTax = maxSellTax;
            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;
 
        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);
        emit Transfer(sender, address(this), s.tSwap);
 
    }
 
    function swapTokensForFees(uint256 tokens) private lockTheSwap{
 
        uint256 initialBalance = address(this).balance;
 
        swapTokensForETH(tokens);
 
        uint256 deltaBalance = address(this).balance - initialBalance;
 
        uint256 totalPercent = 100 - taxesPercentage.rfi;
        if(totalPercent == 0) return;
 
        uint256 devAmt = deltaBalance * taxesPercentage.dev / totalPercent;
        if(devAmt > 0) payable(devWallet).sendValue(devAmt);
 
        uint256 buybackAmt = deltaBalance - devAmt;
        if(buybackAmt > 0) payable(buybackWallet).sendValue(buybackAmt);
    }
 
    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{
        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 updateMaxTx(uint256 amount) external onlyOwner{
        maxTxAmount = amount * 10**_decimals;
    }
 
    function updateMaxWallet(uint256 amount) external onlyOwner{
        maxWalletAmount = 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{
        //Thanks
        router = IRouter(newRouter);
        pair = newPair;
    }
 
    function updateDynamicTax(uint256 amount) external onlyOwner{
        dynamicTax = amount;
    }
 
    function updateMaxSellTax(uint256 amount) external onlyOwner{
        maxSellTax = 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":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"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":[{"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":[{"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":"maxSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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"}],"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"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWallet","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"}]

6080604052620000126012600a62000925565b6200002290633b9aca0062000936565b600b819055620000359060001962000966565b62000043906000196200097d565b600c55620000546012600a62000925565b6200006390621e848062000936565b600e55620000746012600a62000925565b62000084906301312d0062000936565b600f55620000956012600a62000925565b620000a5906301312d0062000936565b601055620000b66012600a62000925565b620000c5906205573062000936565b6011556007601355609660148181556015829055601e6016819055601792909255604080516060810182528281526020810184905260329101819052601891909155601991909155601a553480156200011d57600080fd5b506200012933620003da565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000183573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a9919062000993565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021d919062000993565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000291919062000993565b600780546001600160a01b038086166301000000026301000000600160b81b031990921691909117909155600880549183166001600160a01b031990921682179055909150620002e1906200042a565b620002ee61dead6200042a565b600980546001600160a01b0319908116733f1dae4db1e060a0fbcd5416bb3d5f1c5fe6ac4a178255600a805490911673c672908c56534c256d7e6593c3af66cfdf37b480178155600c543360008181526001602081815260408084209590955560048152848320805460ff199081168417909155308452858420805482168417905596546001600160a01b039081168452858420805489168417905595549095168252838220805490961617909455600b54915191825292917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000a07565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200043462000566565b6001600160a01b03811660009081526005602052604090205460ff1615620004a35760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600160205260409020541562000500576001600160a01b038116600090815260016020526040902054620004e690620005c4565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314620005c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200049a565b565b6000600c548211156200062d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016200049a565b6000620006396200064e565b9050620006478184620009be565b9392505050565b600080806200065c62000674565b90925090506200066d8183620009be565b9250505090565b600c54600b546000918291825b600654811015620007dc57826001600060068481548110620006a757620006a7620009d5565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620007165750816002600060068481548110620006ef57620006ef620009d5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200072d57600c54600b54945094505050509091565b6001600060068381548110620007475762000747620009d5565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200077890846200097d565b92506002600060068381548110620007945762000794620009d5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620007c590836200097d565b915080620007d381620009eb565b91505062000681565b50600b54600c54620007ef9190620009be565b8210156200080757600c54600b549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008675781600019048211156200084b576200084b62000810565b808516156200085957918102915b93841c93908002906200082b565b509250929050565b60008262000880575060016200091f565b816200088f575060006200091f565b8160018114620008a85760028114620008b357620008d3565b60019150506200091f565b60ff841115620008c757620008c762000810565b50506001821b6200091f565b5060208310610133831016604e8410600b8410161715620008f8575081810a6200091f565b62000904838362000826565b80600019048211156200091b576200091b62000810565b0290505b92915050565b60006200064760ff8416836200086f565b80820281158282048414176200091f576200091f62000810565b634e487b7160e01b600052601260045260246000fd5b60008262000978576200097862000950565b500690565b818103818111156200091f576200091f62000810565b600060208284031215620009a657600080fd5b81516001600160a01b03811681146200064757600080fd5b600082620009d057620009d062000950565b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820162000a005762000a0062000810565b5060010190565b6126dd8062000a176000396000f3fe6080604052600436106103035760003560e01c8063715018a611610190578063a8aa1b31116100dc578063cea9d26f11610095578063df8408fe1161006f578063df8408fe1461094c578063f13cff411461096c578063f2fde38b14610982578063f887ea40146109a257600080fd5b8063cea9d26f146108c6578063dd62ed3e146108e6578063deab8aea1461092c57600080fd5b8063a8aa1b311461081a578063a9059cbb1461083a578063aa4bde281461085a578063c2d0ffca14610870578063cc1776d314610890578063cc274b29146108a657600080fd5b80638ea5220f11610149578063963fbc5011610123578063963fbc50146107a45780639e252f00146107c4578063a411209a146107e4578063a457c2d7146107fa57600080fd5b80638ea5220f14610738578063924de9b71461075857806395d89b411461077857600080fd5b8063715018a61461066d578063799754d71461068257806388f82020146106a25780638a8c523c146106db5780638c0b5e22146106f05780638da5cb5b1461070657600080fd5b8063313ce5671161024f5780634da86156116102085780635342acb4116101e25780635342acb4146105e4578063649011c81461061d5780636ddd17131461063357806370a082311461064d57600080fd5b80634da86156146105985780634f7041a5146105ae57806352390c02146105c457600080fd5b8063313ce567146104e65780633685d41914610502578063395093511461052257806340b28c2f1461054257806348cd4cb1146105625780634ada218b1461057857600080fd5b8063095ea7b3116102bc5780631a661181116102965780631a661181146104705780631c499ab01461048657806323b872dd146104a65780632d838119146104c657600080fd5b8063095ea7b31461040b57806318160ddd1461043b5780631816467f1461045057600080fd5b8063029514f71461030f5780630445b6671461034e57806304dacd501461037257806306fdde0314610394578063079bf867146103cb5780630858fa35146103eb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50601854601954601a5461032e92919083565b604080519384526020840192909252908201526060015b60405180910390f35b34801561035a57600080fd5b50610364600e5481565b604051908152602001610345565b34801561037e57600080fd5b5061039261038d3660046122a0565b6109c9565b005b3480156103a057600080fd5b50604080518082019091526005815264074776f2e360dc1b60208201525b60405161034591906122bd565b3480156103d757600080fd5b506103926103e636600461230b565b610a0b565b3480156103f757600080fd5b50610392610406366004612324565b610a18565b34801561041757600080fd5b5061042b610426366004612350565b610aa3565b6040519015158152602001610345565b34801561044757600080fd5b50600b54610364565b34801561045c57600080fd5b5061039261046b3660046122a0565b610aba565b34801561047c57600080fd5b50610364600d5481565b34801561049257600080fd5b506103926104a136600461230b565b610afc565b3480156104b257600080fd5b5061042b6104c136600461237c565b610b20565b3480156104d257600080fd5b506103646104e136600461230b565b610bd3565b3480156104f257600080fd5b5060405160128152602001610345565b34801561050e57600080fd5b5061039261051d3660046122a0565b610c50565b34801561052e57600080fd5b5061042b61053d366004612350565b610de4565b34801561054e57600080fd5b5061039261055d3660046123bd565b610e1b565b34801561056e57600080fd5b5061036460125481565b34801561058457600080fd5b5060075461042b9062010000900460ff1681565b3480156105a457600080fd5b5061036460165481565b3480156105ba57600080fd5b5061036460145481565b3480156105d057600080fd5b506103926105df3660046122a0565b610e5f565b3480156105f057600080fd5b5061042b6105ff3660046122a0565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062957600080fd5b5061036460135481565b34801561063f57600080fd5b5060075461042b9060ff1681565b34801561065957600080fd5b506103646106683660046122a0565b610f90565b34801561067957600080fd5b50610392610fef565b34801561068e57600080fd5b5061039261069d36600461230b565b611003565b3480156106ae57600080fd5b5061042b6106bd3660046122a0565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106e757600080fd5b50610392611027565b3480156106fc57600080fd5b50610364600f5481565b34801561071257600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610345565b34801561074457600080fd5b50600954610720906001600160a01b031681565b34801561076457600080fd5b50610392610773366004612404565b611046565b34801561078457600080fd5b5060408051808201909152600381526274776f60e81b60208201526103be565b3480156107b057600080fd5b506103926107bf36600461230b565b611061565b3480156107d057600080fd5b506103926107df36600461230b565b61106e565b3480156107f057600080fd5b5061036460175481565b34801561080657600080fd5b5061042b610815366004612350565b6110a3565b34801561082657600080fd5b50600854610720906001600160a01b031681565b34801561084657600080fd5b5061042b610855366004612350565b61113e565b34801561086657600080fd5b5061036460105481565b34801561087c57600080fd5b5061039261088b36600461230b565b61114b565b34801561089c57600080fd5b5061036460155481565b3480156108b257600080fd5b506103926108c136600461230b565b61116f565b3480156108d257600080fd5b506103926108e136600461237c565b611193565b3480156108f257600080fd5b506103646109013660046123bd565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561093857600080fd5b50600a54610720906001600160a01b031681565b34801561095857600080fd5b50610392610967366004612421565b611214565b34801561097857600080fd5b5061036460115481565b34801561098e57600080fd5b5061039261099d3660046122a0565b611247565b3480156109ae57600080fd5b5060075461072090630100000090046001600160a01b031681565b6109d16112c0565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610a136112c0565b601755565b610a206112c0565b80610a2b8385612465565b610a359190612465565b606414610a7d5760405162461bcd60e51b81526020600482015260116024820152700546f74616c206d7573742062652031303607c1b60448201526064015b60405180910390fd5b604080516060810182528481526020810184905201819052601892909255601955601a55565b6000610ab033848461131a565b5060015b92915050565b610ac26112c0565b600980546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610b046112c0565b610b106012600a61255c565b610b1a908261256b565b60105550565b6000610b2d84848461143e565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610bb25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a74565b610bc68533610bc18685612582565b61131a565b60019150505b9392505050565b6000600c54821115610c3a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a74565b6000610c44611854565b9050610bcc8184612595565b610c586112c0565b6001600160a01b03811660009081526005602052604090205460ff16610cc05760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a74565b60005b600654811015610de057816001600160a01b031660068281548110610cea57610cea6125b7565b6000918252602090912001546001600160a01b031603610dce5760068054610d1490600190612582565b81548110610d2457610d246125b7565b600091825260209091200154600680546001600160a01b039092169183908110610d5057610d506125b7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610da857610da86125cd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dd8816125e3565b915050610cc3565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ab0918590610bc1908690612465565b610e236112c0565b600780546301000000600160b81b03191663010000006001600160a01b0394851602179055600880546001600160a01b03191691909216179055565b610e676112c0565b6001600160a01b03811660009081526005602052604090205460ff1615610ed05760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a74565b6001600160a01b03811660009081526001602052604090205415610f2a576001600160a01b038116600090815260016020526040902054610f1090610bd3565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610fcd57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610ab490610bd3565b610ff76112c0565b6110016000611877565b565b61100b6112c0565b6110176012600a61255c565b611021908261256b565b60115550565b61102f6112c0565b6007805462ff00ff19166201000117905543601255565b61104e6112c0565b6007805460ff1916911515919091179055565b6110696112c0565b601655565b6110766112c0565b604051339082156108fc029083906000818181858888f19350505050158015610de0573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156111255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a74565b6111343385610bc18685612582565b5060019392505050565b6000610ab033848461143e565b6111536112c0565b61115f6012600a61255c565b611169908261256b565b600f5550565b6111776112c0565b6111836012600a61255c565b61118d908261256b565b600e5550565b61119b6112c0565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156111ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120e91906125fc565b50505050565b61121c6112c0565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b61124f6112c0565b6001600160a01b0381166112b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a74565b6112bd81611877565b50565b6000546001600160a01b031633146110015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a74565b6001600160a01b03831661137c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a74565b6001600160a01b0382166113dd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a74565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a74565b600081116115045760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a74565b61150d83610f90565b8111156115765760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a74565b6014541580159061158f575060075462010000900460ff165b156115b157436013546012546115a59190612465565b10156115b15760006014555b6001600160a01b03831660009081526004602052604081205460ff161580156115f357506001600160a01b03831660009081526004602052604090205460ff16155b156117975760075462010000900460ff166116505760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152606401610a74565b600f548211156116a25760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e740000006044820152606401610a74565b6008546001600160a01b0384811691161461172657601054826116c485610f90565b6116ce9190612465565b11156117265760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610a74565b506008546001906001600160a01b0385811691161480156117555750436013546012546117539190612465565b105b1561179757600090506011548210611797576016546015541061179157601654601560008282546117869190612582565b909155506117979050565b60006015555b6000600e546117a530610f90565b6007549111159150610100900460ff161580156117c4575060075460ff165b80156117cd5750805b80156117e757506008546001600160a01b03868116911614155b801561180c57506001600160a01b03851660009081526004602052604090205460ff16155b801561183157506001600160a01b03841660009081526004602052604090205460ff16155b1561184157611841600e546118c7565b61184d8585858561198a565b5050505050565b6000806000611861611c63565b90925090506118708183612595565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6007805461ff001916610100179055476118e082611de6565b60006118ec8247612582565b601854909150600090611900906064612582565b9050806000036119125750505061197c565b6019546000908290611924908561256b565b61192e9190612595565b9050801561194c5760095461194c906001600160a01b031682611f67565b60006119588285612582565b9050801561197657600a54611976906001600160a01b031682611f67565b50505050505b506007805461ff0019169055565b6008546000906001600160a01b038581169116146119a95760006119ac565b60015b905060006119bb848484612003565b90508180156119c75750825b80156119e15750436013546012546119df9190612465565b105b15611a24576017546016546015546119f99190612465565b1115611a0a57601754601555611a24565b60165460156000828254611a1e9190612465565b90915550505b6001600160a01b03861660009081526005602052604090205460ff1615611a83576001600160a01b038616600090815260026020526040902054611a69908590612582565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615611ae65760808101516001600160a01b038616600090815260026020526040902054611acc9190612465565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054611b0b9190612582565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054611b429190612465565b6001600160a01b0386166000908152600160205260409081902091909155810151151580611b74575060008160a00151115b15611b8b57611b8b81604001518260a0015161207b565b600081606001511180611ba2575060008160c00151115b15611bb957611bb981606001518260c001516120af565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611c0291815260200190565b60405180910390a3306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611c5391815260200190565b60405180910390a3505050505050565b600c54600b546000918291825b600654811015611db557826001600060068481548110611c9257611c926125b7565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611cfd5750816002600060068481548110611cd657611cd66125b7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d1357600c54600b54945094505050509091565b6001600060068381548110611d2a57611d2a6125b7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d599084612582565b92506002600060068381548110611d7257611d726125b7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611da19083612582565b915080611dad816125e3565b915050611c70565b50600b54600c54611dc69190612595565b821015611ddd57600c54600b549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e1b57611e1b6125b7565b60200260200101906001600160a01b031690816001600160a01b031681525050600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb29190612619565b81600181518110611ec557611ec56125b7565b6001600160a01b039283166020918202929092010152600754611ef291309163010000009004168461131a565b60075460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790611f31908590600090869030904290600401612636565b600060405180830381600087803b158015611f4b57600080fd5b505af1158015611f5f573d6000803e3d6000fd5b505050505050565b80471015611f8a5760405163cd78605960e01b8152306004820152602401610a74565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fd7576040519150601f19603f3d011682016040523d82523d6000602084013e611fdc565b606091505b5050905080611ffe57604051630a12f52160e11b815260040160405180910390fd5b505050565b6120436040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61204e84848461210b565b905061206381858561205e611854565b612220565b60608501526040840152602083015281529392505050565b81600c600082825461208d9190612582565b9250508190555080600d60008282546120a69190612465565b90915550505050565b3060009081526005602052604090205460ff16156120ec5730600090815260026020526040812080548392906120e6908490612465565b90915550505b30600090815260016020526040812080548492906120a6908490612465565b61214b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8261215c5760808101849052610bcc565b60008261216b5760145461216f565b6015545b90506000606460186000015483612186919061256b565b6121909190612595565b90506000606460186000015460646121a89190612582565b6121b2908561256b565b6121bc9190612595565b90506103e86121cb838961256b565b6121d59190612595565b60a08501526103e86121e7828961256b565b6121f19190612595565b60c0850181905260a08501516122079089612582565b6122119190612582565b60808501525050509392505050565b600080808061222f858861256b565b93508561224457508291506000905080612280565b848860a00151612254919061256b565b9150848860c00151612266919061256b565b9050806122738386612582565b61227d9190612582565b92505b945094509450949050565b6001600160a01b03811681146112bd57600080fd5b6000602082840312156122b257600080fd5b8135610bcc8161228b565b600060208083528351808285015260005b818110156122ea578581018301518582016040015282016122ce565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561231d57600080fd5b5035919050565b60008060006060848603121561233957600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561236357600080fd5b823561236e8161228b565b946020939093013593505050565b60008060006060848603121561239157600080fd5b833561239c8161228b565b925060208401356123ac8161228b565b929592945050506040919091013590565b600080604083850312156123d057600080fd5b82356123db8161228b565b915060208301356123eb8161228b565b809150509250929050565b80151581146112bd57600080fd5b60006020828403121561241657600080fd5b8135610bcc816123f6565b6000806040838503121561243457600080fd5b823561243f8161228b565b915060208301356123eb816123f6565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ab457610ab461244f565b600181815b808511156124b35781600019048211156124995761249961244f565b808516156124a657918102915b93841c939080029061247d565b509250929050565b6000826124ca57506001610ab4565b816124d757506000610ab4565b81600181146124ed57600281146124f757612513565b6001915050610ab4565b60ff8411156125085761250861244f565b50506001821b610ab4565b5060208310610133831016604e8410600b8410161715612536575081810a610ab4565b6125408383612478565b80600019048211156125545761255461244f565b029392505050565b6000610bcc60ff8416836124bb565b8082028115828204841417610ab457610ab461244f565b81810381811115610ab457610ab461244f565b6000826125b257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016125f5576125f561244f565b5060010190565b60006020828403121561260e57600080fd5b8151610bcc816123f6565b60006020828403121561262b57600080fd5b8151610bcc8161228b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126865784516001600160a01b031683529383019391830191600101612661565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122059281ca900d2f6206c0c67e161a9ffd4b7ff85e91754cdba6397ef1aa6d3398d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063715018a611610190578063a8aa1b31116100dc578063cea9d26f11610095578063df8408fe1161006f578063df8408fe1461094c578063f13cff411461096c578063f2fde38b14610982578063f887ea40146109a257600080fd5b8063cea9d26f146108c6578063dd62ed3e146108e6578063deab8aea1461092c57600080fd5b8063a8aa1b311461081a578063a9059cbb1461083a578063aa4bde281461085a578063c2d0ffca14610870578063cc1776d314610890578063cc274b29146108a657600080fd5b80638ea5220f11610149578063963fbc5011610123578063963fbc50146107a45780639e252f00146107c4578063a411209a146107e4578063a457c2d7146107fa57600080fd5b80638ea5220f14610738578063924de9b71461075857806395d89b411461077857600080fd5b8063715018a61461066d578063799754d71461068257806388f82020146106a25780638a8c523c146106db5780638c0b5e22146106f05780638da5cb5b1461070657600080fd5b8063313ce5671161024f5780634da86156116102085780635342acb4116101e25780635342acb4146105e4578063649011c81461061d5780636ddd17131461063357806370a082311461064d57600080fd5b80634da86156146105985780634f7041a5146105ae57806352390c02146105c457600080fd5b8063313ce567146104e65780633685d41914610502578063395093511461052257806340b28c2f1461054257806348cd4cb1146105625780634ada218b1461057857600080fd5b8063095ea7b3116102bc5780631a661181116102965780631a661181146104705780631c499ab01461048657806323b872dd146104a65780632d838119146104c657600080fd5b8063095ea7b31461040b57806318160ddd1461043b5780631816467f1461045057600080fd5b8063029514f71461030f5780630445b6671461034e57806304dacd501461037257806306fdde0314610394578063079bf867146103cb5780630858fa35146103eb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50601854601954601a5461032e92919083565b604080519384526020840192909252908201526060015b60405180910390f35b34801561035a57600080fd5b50610364600e5481565b604051908152602001610345565b34801561037e57600080fd5b5061039261038d3660046122a0565b6109c9565b005b3480156103a057600080fd5b50604080518082019091526005815264074776f2e360dc1b60208201525b60405161034591906122bd565b3480156103d757600080fd5b506103926103e636600461230b565b610a0b565b3480156103f757600080fd5b50610392610406366004612324565b610a18565b34801561041757600080fd5b5061042b610426366004612350565b610aa3565b6040519015158152602001610345565b34801561044757600080fd5b50600b54610364565b34801561045c57600080fd5b5061039261046b3660046122a0565b610aba565b34801561047c57600080fd5b50610364600d5481565b34801561049257600080fd5b506103926104a136600461230b565b610afc565b3480156104b257600080fd5b5061042b6104c136600461237c565b610b20565b3480156104d257600080fd5b506103646104e136600461230b565b610bd3565b3480156104f257600080fd5b5060405160128152602001610345565b34801561050e57600080fd5b5061039261051d3660046122a0565b610c50565b34801561052e57600080fd5b5061042b61053d366004612350565b610de4565b34801561054e57600080fd5b5061039261055d3660046123bd565b610e1b565b34801561056e57600080fd5b5061036460125481565b34801561058457600080fd5b5060075461042b9062010000900460ff1681565b3480156105a457600080fd5b5061036460165481565b3480156105ba57600080fd5b5061036460145481565b3480156105d057600080fd5b506103926105df3660046122a0565b610e5f565b3480156105f057600080fd5b5061042b6105ff3660046122a0565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062957600080fd5b5061036460135481565b34801561063f57600080fd5b5060075461042b9060ff1681565b34801561065957600080fd5b506103646106683660046122a0565b610f90565b34801561067957600080fd5b50610392610fef565b34801561068e57600080fd5b5061039261069d36600461230b565b611003565b3480156106ae57600080fd5b5061042b6106bd3660046122a0565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106e757600080fd5b50610392611027565b3480156106fc57600080fd5b50610364600f5481565b34801561071257600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610345565b34801561074457600080fd5b50600954610720906001600160a01b031681565b34801561076457600080fd5b50610392610773366004612404565b611046565b34801561078457600080fd5b5060408051808201909152600381526274776f60e81b60208201526103be565b3480156107b057600080fd5b506103926107bf36600461230b565b611061565b3480156107d057600080fd5b506103926107df36600461230b565b61106e565b3480156107f057600080fd5b5061036460175481565b34801561080657600080fd5b5061042b610815366004612350565b6110a3565b34801561082657600080fd5b50600854610720906001600160a01b031681565b34801561084657600080fd5b5061042b610855366004612350565b61113e565b34801561086657600080fd5b5061036460105481565b34801561087c57600080fd5b5061039261088b36600461230b565b61114b565b34801561089c57600080fd5b5061036460155481565b3480156108b257600080fd5b506103926108c136600461230b565b61116f565b3480156108d257600080fd5b506103926108e136600461237c565b611193565b3480156108f257600080fd5b506103646109013660046123bd565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561093857600080fd5b50600a54610720906001600160a01b031681565b34801561095857600080fd5b50610392610967366004612421565b611214565b34801561097857600080fd5b5061036460115481565b34801561098e57600080fd5b5061039261099d3660046122a0565b611247565b3480156109ae57600080fd5b5060075461072090630100000090046001600160a01b031681565b6109d16112c0565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610a136112c0565b601755565b610a206112c0565b80610a2b8385612465565b610a359190612465565b606414610a7d5760405162461bcd60e51b81526020600482015260116024820152700546f74616c206d7573742062652031303607c1b60448201526064015b60405180910390fd5b604080516060810182528481526020810184905201819052601892909255601955601a55565b6000610ab033848461131a565b5060015b92915050565b610ac26112c0565b600980546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610b046112c0565b610b106012600a61255c565b610b1a908261256b565b60105550565b6000610b2d84848461143e565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610bb25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a74565b610bc68533610bc18685612582565b61131a565b60019150505b9392505050565b6000600c54821115610c3a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a74565b6000610c44611854565b9050610bcc8184612595565b610c586112c0565b6001600160a01b03811660009081526005602052604090205460ff16610cc05760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a74565b60005b600654811015610de057816001600160a01b031660068281548110610cea57610cea6125b7565b6000918252602090912001546001600160a01b031603610dce5760068054610d1490600190612582565b81548110610d2457610d246125b7565b600091825260209091200154600680546001600160a01b039092169183908110610d5057610d506125b7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610da857610da86125cd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dd8816125e3565b915050610cc3565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ab0918590610bc1908690612465565b610e236112c0565b600780546301000000600160b81b03191663010000006001600160a01b0394851602179055600880546001600160a01b03191691909216179055565b610e676112c0565b6001600160a01b03811660009081526005602052604090205460ff1615610ed05760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a74565b6001600160a01b03811660009081526001602052604090205415610f2a576001600160a01b038116600090815260016020526040902054610f1090610bd3565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610fcd57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610ab490610bd3565b610ff76112c0565b6110016000611877565b565b61100b6112c0565b6110176012600a61255c565b611021908261256b565b60115550565b61102f6112c0565b6007805462ff00ff19166201000117905543601255565b61104e6112c0565b6007805460ff1916911515919091179055565b6110696112c0565b601655565b6110766112c0565b604051339082156108fc029083906000818181858888f19350505050158015610de0573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156111255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a74565b6111343385610bc18685612582565b5060019392505050565b6000610ab033848461143e565b6111536112c0565b61115f6012600a61255c565b611169908261256b565b600f5550565b6111776112c0565b6111836012600a61255c565b61118d908261256b565b600e5550565b61119b6112c0565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156111ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120e91906125fc565b50505050565b61121c6112c0565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b61124f6112c0565b6001600160a01b0381166112b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a74565b6112bd81611877565b50565b6000546001600160a01b031633146110015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a74565b6001600160a01b03831661137c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a74565b6001600160a01b0382166113dd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a74565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a74565b600081116115045760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a74565b61150d83610f90565b8111156115765760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a74565b6014541580159061158f575060075462010000900460ff165b156115b157436013546012546115a59190612465565b10156115b15760006014555b6001600160a01b03831660009081526004602052604081205460ff161580156115f357506001600160a01b03831660009081526004602052604090205460ff16155b156117975760075462010000900460ff166116505760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152606401610a74565b600f548211156116a25760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e740000006044820152606401610a74565b6008546001600160a01b0384811691161461172657601054826116c485610f90565b6116ce9190612465565b11156117265760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610a74565b506008546001906001600160a01b0385811691161480156117555750436013546012546117539190612465565b105b1561179757600090506011548210611797576016546015541061179157601654601560008282546117869190612582565b909155506117979050565b60006015555b6000600e546117a530610f90565b6007549111159150610100900460ff161580156117c4575060075460ff165b80156117cd5750805b80156117e757506008546001600160a01b03868116911614155b801561180c57506001600160a01b03851660009081526004602052604090205460ff16155b801561183157506001600160a01b03841660009081526004602052604090205460ff16155b1561184157611841600e546118c7565b61184d8585858561198a565b5050505050565b6000806000611861611c63565b90925090506118708183612595565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6007805461ff001916610100179055476118e082611de6565b60006118ec8247612582565b601854909150600090611900906064612582565b9050806000036119125750505061197c565b6019546000908290611924908561256b565b61192e9190612595565b9050801561194c5760095461194c906001600160a01b031682611f67565b60006119588285612582565b9050801561197657600a54611976906001600160a01b031682611f67565b50505050505b506007805461ff0019169055565b6008546000906001600160a01b038581169116146119a95760006119ac565b60015b905060006119bb848484612003565b90508180156119c75750825b80156119e15750436013546012546119df9190612465565b105b15611a24576017546016546015546119f99190612465565b1115611a0a57601754601555611a24565b60165460156000828254611a1e9190612465565b90915550505b6001600160a01b03861660009081526005602052604090205460ff1615611a83576001600160a01b038616600090815260026020526040902054611a69908590612582565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615611ae65760808101516001600160a01b038616600090815260026020526040902054611acc9190612465565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054611b0b9190612582565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054611b429190612465565b6001600160a01b0386166000908152600160205260409081902091909155810151151580611b74575060008160a00151115b15611b8b57611b8b81604001518260a0015161207b565b600081606001511180611ba2575060008160c00151115b15611bb957611bb981606001518260c001516120af565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611c0291815260200190565b60405180910390a3306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611c5391815260200190565b60405180910390a3505050505050565b600c54600b546000918291825b600654811015611db557826001600060068481548110611c9257611c926125b7565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611cfd5750816002600060068481548110611cd657611cd66125b7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d1357600c54600b54945094505050509091565b6001600060068381548110611d2a57611d2a6125b7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d599084612582565b92506002600060068381548110611d7257611d726125b7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611da19083612582565b915080611dad816125e3565b915050611c70565b50600b54600c54611dc69190612595565b821015611ddd57600c54600b549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e1b57611e1b6125b7565b60200260200101906001600160a01b031690816001600160a01b031681525050600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb29190612619565b81600181518110611ec557611ec56125b7565b6001600160a01b039283166020918202929092010152600754611ef291309163010000009004168461131a565b60075460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790611f31908590600090869030904290600401612636565b600060405180830381600087803b158015611f4b57600080fd5b505af1158015611f5f573d6000803e3d6000fd5b505050505050565b80471015611f8a5760405163cd78605960e01b8152306004820152602401610a74565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fd7576040519150601f19603f3d011682016040523d82523d6000602084013e611fdc565b606091505b5050905080611ffe57604051630a12f52160e11b815260040160405180910390fd5b505050565b6120436040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61204e84848461210b565b905061206381858561205e611854565b612220565b60608501526040840152602083015281529392505050565b81600c600082825461208d9190612582565b9250508190555080600d60008282546120a69190612465565b90915550505050565b3060009081526005602052604090205460ff16156120ec5730600090815260026020526040812080548392906120e6908490612465565b90915550505b30600090815260016020526040812080548492906120a6908490612465565b61214b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8261215c5760808101849052610bcc565b60008261216b5760145461216f565b6015545b90506000606460186000015483612186919061256b565b6121909190612595565b90506000606460186000015460646121a89190612582565b6121b2908561256b565b6121bc9190612595565b90506103e86121cb838961256b565b6121d59190612595565b60a08501526103e86121e7828961256b565b6121f19190612595565b60c0850181905260a08501516122079089612582565b6122119190612582565b60808501525050509392505050565b600080808061222f858861256b565b93508561224457508291506000905080612280565b848860a00151612254919061256b565b9150848860c00151612266919061256b565b9050806122738386612582565b61227d9190612582565b92505b945094509450949050565b6001600160a01b03811681146112bd57600080fd5b6000602082840312156122b257600080fd5b8135610bcc8161228b565b600060208083528351808285015260005b818110156122ea578581018301518582016040015282016122ce565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561231d57600080fd5b5035919050565b60008060006060848603121561233957600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561236357600080fd5b823561236e8161228b565b946020939093013593505050565b60008060006060848603121561239157600080fd5b833561239c8161228b565b925060208401356123ac8161228b565b929592945050506040919091013590565b600080604083850312156123d057600080fd5b82356123db8161228b565b915060208301356123eb8161228b565b809150509250929050565b80151581146112bd57600080fd5b60006020828403121561241657600080fd5b8135610bcc816123f6565b6000806040838503121561243457600080fd5b823561243f8161228b565b915060208301356123eb816123f6565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ab457610ab461244f565b600181815b808511156124b35781600019048211156124995761249961244f565b808516156124a657918102915b93841c939080029061247d565b509250929050565b6000826124ca57506001610ab4565b816124d757506000610ab4565b81600181146124ed57600281146124f757612513565b6001915050610ab4565b60ff8411156125085761250861244f565b50506001821b610ab4565b5060208310610133831016604e8410600b8410161715612536575081810a610ab4565b6125408383612478565b80600019048211156125545761255461244f565b029392505050565b6000610bcc60ff8416836124bb565b8082028115828204841417610ab457610ab461244f565b81810381811115610ab457610ab461244f565b6000826125b257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016125f5576125f561244f565b5060010190565b60006020828403121561260e57600080fd5b8151610bcc816123f6565b60006020828403121561262b57600080fd5b8151610bcc8161228b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126865784516001600160a01b031683529383019391830191600101612661565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122059281ca900d2f6206c0c67e161a9ffd4b7ff85e91754cdba6397ef1aa6d3398d64736f6c63430008130033

Deployed Bytecode Sourcemap

16988:15248:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18621:66;;;;;;;;;;-1:-1:-1;18621:66:0;;;;;;;;;;;;;;;;216:25:1;;;272:2;257:18;;250:34;;;;300:18;;;293:34;204:2;189:18;18621:66:0;;;;;;;;17873:56;;;;;;;;;;;;;;;;;;;484:25:1;;;472:2;457:18;17873:56:0;338:177:1;30742:161:0;;;;;;;;;;-1:-1:-1;30742:161:0;;;;;:::i;:::-;;:::i;:::-;;19814:83;;;;;;;;;;-1:-1:-1;19884:5:0;;;;;;;;;;;;-1:-1:-1;;;19884:5:0;;;;19814:83;;;;;;;:::i;31812:98::-;;;;;;;;;;-1:-1:-1;31812:98:0;;;;;:::i;:::-;;:::i;23416:235::-;;;;;;;;;;-1:-1:-1;23416:235:0;;;;;:::i;:::-;;:::i;20727:161::-;;;;;;;;;;-1:-1:-1;20727:161:0;;;;;:::i;:::-;;:::i;:::-;;;2452:14:1;;2445:22;2427:41;;2415:2;2400:18;20727:161:0;2287:187:1;20088:95:0;;;;;;;;;;-1:-1:-1;20168:7:0;;20088:95;;30584:149;;;;;;;;;;-1:-1:-1;30584:149:0;;;;;:::i;:::-;;:::i;17843:23::-;;;;;;;;;;;;;;;;31158:118;;;;;;;;;;-1:-1:-1;31158:118:0;;;;;:::i;:::-;;:::i;20897:424::-;;;;;;;;;;-1:-1:-1;20897:424:0;;;;;:::i;:::-;;:::i;22070:248::-;;;;;;;;;;-1:-1:-1;22070:248:0;;;;;:::i;:::-;;:::i;19996:83::-;;;;;;;;;;-1:-1:-1;19996:83:0;;17661:2;3082:36:1;;3070:2;3055:18;19996:83:0;2940:184:1;22667:473:0;;;;;;;;;;-1:-1:-1;22667:473:0;;;;;:::i;:::-;;:::i;21330:215::-;;;;;;;;;;-1:-1:-1;21330:215:0;;;;;:::i;:::-;;:::i;31524:172::-;;;;;;;;;;-1:-1:-1;31524:172:0;;;;;:::i;:::-;;:::i;18124:25::-;;;;;;;;;;;;;;;;17466:26;;;;;;;;;;-1:-1:-1;17466:26:0;;;;;;;;;;;18331:30;;;;;;;;;;;;;;;;18198:27;;;;;;;;;;;;;;;;22327:331;;;;;;;;;;-1:-1:-1;22327:331:0;;;;;:::i;:::-;;:::i;23284:123::-;;;;;;;;;;-1:-1:-1;23284:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23372:27:0;23348:4;23372:27;;;:18;:27;;;;;;;;;23284:123;18156:32;;;;;;;;;;;;;;;;17408:23;;;;;;;;;;-1:-1:-1;17408:23:0;;;;;;;;20192:198;;;;;;;;;;-1:-1:-1;20192:198:0;;;;;:::i;:::-;;:::i;15649:103::-;;;;;;;;;;;;;:::i;30912:118::-;;;;;;;;;;-1:-1:-1;30912:118:0;;;;;:::i;:::-;;:::i;21941:120::-;;;;;;;;;;-1:-1:-1;21941:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22033:20:0;22009:4;22033:20;;;:11;:20;;;;;;;;;21941:120;30427:148;;;;;;;;;;;;;:::i;17936:55::-;;;;;;;;;;;;;;;;15008:87;;;;;;;;;;-1:-1:-1;15054:7:0;15081:6;-1:-1:-1;;;;;15081:6:0;15008:87;;;-1:-1:-1;;;;;3686:32:1;;;3668:51;;3656:2;3641:18;15008:87:0;3522:203:1;17556:24:0;;;;;;;;;;-1:-1:-1;17556:24:0;;;;-1:-1:-1;;;;;17556:24:0;;;31414:101;;;;;;;;;;-1:-1:-1;31414:101:0;;;;;:::i;:::-;;:::i;19903:87::-;;;;;;;;;;-1:-1:-1;19975:7:0;;;;;;;;;;;;-1:-1:-1;;;19975:7:0;;;;19903:87;;31705:98;;;;;;;;;;-1:-1:-1;31705:98:0;;;;;:::i;:::-;;:::i;31919:114::-;;;;;;;;;;-1:-1:-1;31919:114:0;;;;;:::i;:::-;;:::i;18374:31::-;;;;;;;;;;;;;;;;21554:378;;;;;;;;;;-1:-1:-1;21554:378:0;;;;;:::i;:::-;;:::i;17530:19::-;;;;;;;;;;-1:-1:-1;17530:19:0;;;;-1:-1:-1;;;;;17530:19:0;;;20399:167;;;;;;;;;;-1:-1:-1;20399:167:0;;;;;:::i;:::-;;:::i;17998:59::-;;;;;;;;;;;;;;;;31039:110;;;;;;;;;;-1:-1:-1;31039:110:0;;;;;:::i;:::-;;:::i;18289:28::-;;;;;;;;;;;;;;;;31285:120;;;;;;;;;;-1:-1:-1;31285:120:0;;;;;:::i;:::-;;:::i;32042:148::-;;;;;;;;;;-1:-1:-1;32042:148:0;;;;;:::i;:::-;;:::i;20575:143::-;;;;;;;;;;-1:-1:-1;20575:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20683:18:0;;;20656:7;20683:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20575:143;17587:28;;;;;;;;;;-1:-1:-1;17587:28:0;;;;-1:-1:-1;;;;;17587:28:0;;;23149:126;;;;;;;;;;-1:-1:-1;23149:126:0;;;;;:::i;:::-;;:::i;18064:53::-;;;;;;;;;;;;;;;;15907:201;;;;;;;;;;-1:-1:-1;15907:201:0;;;;;:::i;:::-;;:::i;17502:21::-;;;;;;;;;;-1:-1:-1;17502:21:0;;;;;;;-1:-1:-1;;;;;17502:21:0;;;30742:161;14894:13;:11;:13::i;:::-;30819::::1;:25:::0;;-1:-1:-1;;;;;30819:25:0;;::::1;-1:-1:-1::0;;;;;;30819:25:0;;::::1;::::0;::::1;::::0;;:13:::1;30855:33:::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;30855:40:0::1;30819:25:::0;30855:40:::1;::::0;;30742:161::o;31812:98::-;14894:13;:11;:13::i;:::-;31883:10:::1;:19:::0;31812:98::o;23416:235::-;14894:13;:11;:13::i;:::-;23540:8;23526:11:::1;23533:4:::0;23526;:11:::1;:::i;:::-;:22;;;;:::i;:::-;23552:3;23526:29;23518:59;;;::::0;-1:-1:-1;;;23518:59:0;;5173:2:1;23518:59:0::1;::::0;::::1;5155:21:1::0;5212:2;5192:18;;;5185:30;-1:-1:-1;;;5231:18:1;;;5224:47;5288:18;;23518:59:0::1;;;;;;;;;23606:37;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;23588:15:::1;:55:::0;;;;;;;;23416:235::o;20727:161::-;20802:4;20819:39;13639:10;20842:7;20851:6;20819:8;:39::i;:::-;-1:-1:-1;20876:4:0;20727:161;;;;;:::o;30584:149::-;14894:13;:11;:13::i;:::-;30657:9:::1;:21:::0;;-1:-1:-1;;;;;30657:21:0;;::::1;-1:-1:-1::0;;;;;;30657:21:0;;::::1;::::0;::::1;::::0;;:9:::1;30689:29:::0;;;:18:::1;:29;::::0;;;;:36;;-1:-1:-1;;30689:36:0::1;30657:21:::0;30689:36:::1;::::0;;30584:149::o;31158:118::-;14894:13;:11;:13::i;:::-;31255::::1;17661:2;31255;:13;:::i;:::-;31246:22;::::0;:6;:22:::1;:::i;:::-;31228:15;:40:::0;-1:-1:-1;31158:118:0:o;20897:424::-;21003:4;21020:36;21030:6;21038:9;21049:6;21020:9;:36::i;:::-;-1:-1:-1;;;;;21097:19:0;;21070:24;21097:19;;;:11;:19;;;;;;;;13639:10;21097:33;;;;;;;;21149:26;;;;21141:79;;;;-1:-1:-1;;;21141:79:0;;7075:2:1;21141:79:0;;;7057:21:1;7114:2;7094:18;;;7087:30;7153:34;7133:18;;;7126:62;-1:-1:-1;;;7204:18:1;;;7197:38;7252:19;;21141:79:0;6873:404:1;21141:79:0;21231:57;21240:6;13639:10;21262:25;21281:6;21262:16;:25;:::i;:::-;21231:8;:57::i;:::-;21309:4;21302:11;;;20897:424;;;;;;:::o;22070:248::-;22136:7;22175;;22164;:18;;22156:73;;;;-1:-1:-1;;;22156:73:0;;7617:2:1;22156:73:0;;;7599:21:1;7656:2;7636:18;;;7629:30;7695:34;7675:18;;;7668:62;-1:-1:-1;;;7746:18:1;;;7739:40;7796:19;;22156:73:0;7415:406:1;22156:73:0;22240:19;22263:10;:8;:10::i;:::-;22240:33;-1:-1:-1;22291:19:0;22240:33;22291:7;:19;:::i;22667:473::-;14894:13;:11;:13::i;:::-;-1:-1:-1;;;;;22747:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22739:56;;;::::0;-1:-1:-1;;;22739:56:0;;8250:2:1;22739:56:0::1;::::0;::::1;8232:21:1::0;8289:2;8269:18;;;8262:30;8328:25;8308:18;;;8301:53;8371:18;;22739:56:0::1;8048:347:1::0;22739:56:0::1;22811:9;22806:327;22830:9;:16:::0;22826:20;::::1;22806:327;;;22888:7;-1:-1:-1::0;;;;;22872:23:0::1;:9;22882:1;22872:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22872:12:0::1;:23:::0;22868:254:::1;;22931:9;22941:16:::0;;:20:::1;::::0;22960:1:::1;::::0;22941:20:::1;:::i;:::-;22931:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22916:9:::1;:12:::0;;-1:-1:-1;;;;;22931:31:0;;::::1;::::0;22926:1;;22916:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22916:46:0::1;-1:-1:-1::0;;;;;22916:46:0;;::::1;;::::0;;22981:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23020:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23020:28:0::1;::::0;;23067:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23067:15:0;;;;;-1:-1:-1;;;;;;23067:15:0::1;::::0;;;;;22806:327:::1;22667:473:::0;:::o;22868:254::-:1;22848:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22806:327;;;;22667:473:::0;:::o;21330:215::-;13639:10;21418:4;21467:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21467:34:0;;;;;;;;;;21418:4;;21435:80;;21458:7;;21467:47;;21504:10;;21467:47;:::i;31524:172::-;14894:13;:11;:13::i;:::-;31636:6:::1;:27:::0;;-1:-1:-1;;;;;;31636:27:0::1;::::0;-1:-1:-1;;;;;31636:27:0;;::::1;;;::::0;;31674:4:::1;:14:::0;;-1:-1:-1;;;;;;31674:14:0::1;::::0;;;::::1;;::::0;;31524:172::o;22327:331::-;14894:13;:11;:13::i;:::-;-1:-1:-1;;;;;22408:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22407:21;22399:61;;;::::0;-1:-1:-1;;;22399:61:0;;9006:2:1;22399:61:0::1;::::0;::::1;8988:21:1::0;9045:2;9025:18;;;9018:30;9084:29;9064:18;;;9057:57;9131:18;;22399:61:0::1;8804:351:1::0;22399:61:0::1;-1:-1:-1::0;;;;;22474:16:0;::::1;22493:1;22474:16:::0;;;:7:::1;:16;::::0;;;;;:20;22471:108:::1;;-1:-1:-1::0;;;;;22550:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22530:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22511:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22471:108:::1;-1:-1:-1::0;;;;;22589:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22589:27:0::1;22612:4;22589:27:::0;;::::1;::::0;;;22627:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22627:23:0::1;::::0;;::::1;::::0;;22327:331::o;20192:198::-;-1:-1:-1;;;;;20282:20:0;;20258:7;20282:20;;;:11;:20;;;;;;;;20278:49;;;-1:-1:-1;;;;;;20311:16:0;;;;;:7;:16;;;;;;;20192:198::o;20278:49::-;-1:-1:-1;;;;;20365:16:0;;;;;;:7;:16;;;;;;20345:37;;:19;:37::i;15649:103::-;14894:13;:11;:13::i;:::-;15714:30:::1;15741:1;15714:18;:30::i;:::-;15649:103::o:0;30912:118::-;14894:13;:11;:13::i;:::-;31009::::1;17661:2;31009;:13;:::i;:::-;31000:22;::::0;:6;:22:::1;:::i;:::-;30985:12;:37:::0;-1:-1:-1;30912:118:0:o;30427:148::-;14894:13;:11;:13::i;:::-;30481:14:::1;:21:::0;;-1:-1:-1;;30513:18:0;;;;;30555:12:::1;30542:10;:25:::0;30427:148::o;31414:101::-;14894:13;:11;:13::i;:::-;31485:11:::1;:22:::0;;-1:-1:-1;;31485:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31414:101::o;31705:98::-;14894:13;:11;:13::i;:::-;31776:10:::1;:19:::0;31705:98::o;31919:114::-;14894:13;:11;:13::i;:::-;31986:39:::1;::::0;31994:10:::1;::::0;31986:39;::::1;;;::::0;32015:9;;31986:39:::1;::::0;;;32015:9;31994:10;31986:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;21554:378:::0;13639:10;21647:4;21691:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21691:34:0;;;;;;;;;;21744:35;;;;21736:85;;;;-1:-1:-1;;;21736:85:0;;9362:2:1;21736:85:0;;;9344:21:1;9401:2;9381:18;;;9374:30;9440:34;9420:18;;;9413:62;-1:-1:-1;;;9491:18:1;;;9484:35;9536:19;;21736:85:0;9160:401:1;21736:85:0;21832:67;13639:10;21855:7;21864:34;21883:15;21864:16;:34;:::i;21832:67::-;-1:-1:-1;21920:4:0;;21554:378;-1:-1:-1;;;21554:378:0:o;20399:167::-;20477:4;20494:42;13639:10;20518:9;20529:6;20494:9;:42::i;31039:110::-;14894:13;:11;:13::i;:::-;31128::::1;17661:2;31128;:13;:::i;:::-;31119:22;::::0;:6;:22:::1;:::i;:::-;31105:11;:36:::0;-1:-1:-1;31039:110:0:o;31285:120::-;14894:13;:11;:13::i;:::-;31384::::1;17661:2;31384;:13;:::i;:::-;31375:22;::::0;:6;:22:::1;:::i;:::-;31359:13;:38:::0;-1:-1:-1;31285:120:0:o;32042:148::-;14894:13;:11;:13::i;:::-;32141:41:::1;::::0;-1:-1:-1;;;32141:41:0;;-1:-1:-1;;;;;9758:32:1;;;32141:41:0::1;::::0;::::1;9740:51:1::0;9807:18;;;9800:34;;;32141:27:0;::::1;::::0;::::1;::::0;9713:18:1;;32141:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32042:148:::0;;;:::o;23149:126::-;14894:13;:11;:13::i;:::-;-1:-1:-1;;;;;23231:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;23231:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23149:126::o;15907:201::-;14894:13;:11;:13::i;:::-;-1:-1:-1;;;;;15996:22:0;::::1;15988:73;;;::::0;-1:-1:-1;;;15988:73:0;;10297:2:1;15988:73:0::1;::::0;::::1;10279:21:1::0;10336:2;10316:18;;;10309:30;10375:34;10355:18;;;10348:62;-1:-1:-1;;;10426:18:1;;;10419:36;10472:19;;15988:73:0::1;10095:402:1::0;15988:73:0::1;16072:28;16091:8;16072:18;:28::i;:::-;15907:201:::0;:::o;15173:132::-;15054:7;15081:6;-1:-1:-1;;;;;15081:6:0;13639:10;15237:23;15229:68;;;;-1:-1:-1;;;15229:68:0;;10704:2:1;15229:68:0;;;10686:21:1;;;10723:18;;;10716:30;10782:34;10762:18;;;10755:62;10834:18;;15229:68:0;10502:356:1;26206:335:0;-1:-1:-1;;;;;26299:19:0;;26291:68;;;;-1:-1:-1;;;26291:68:0;;11065:2:1;26291:68:0;;;11047:21:1;11104:2;11084:18;;;11077:30;11143:34;11123:18;;;11116:62;-1:-1:-1;;;11194:18:1;;;11187:34;11238:19;;26291:68:0;10863:400:1;26291:68:0;-1:-1:-1;;;;;26378:21:0;;26370:68;;;;-1:-1:-1;;;26370:68:0;;11470:2:1;26370:68:0;;;11452:21:1;11509:2;11489:18;;;11482:30;11548:34;11528:18;;;11521:62;-1:-1:-1;;;11599:18:1;;;11592:32;11641:19;;26370:68:0;11268:398:1;26370:68:0;-1:-1:-1;;;;;26449:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26501:32;;484:25:1;;;26501:32:0;;457:18:1;26501:32:0;;;;;;;26206:335;;;:::o;26553:1473::-;-1:-1:-1;;;;;26641:18:0;;26633:68;;;;-1:-1:-1;;;26633:68:0;;11873:2:1;26633:68:0;;;11855:21:1;11912:2;11892:18;;;11885:30;11951:34;11931:18;;;11924:62;-1:-1:-1;;;12002:18:1;;;11995:35;12047:19;;26633:68:0;11671:401:1;26633:68:0;26729:1;26720:6;:10;26712:64;;;;-1:-1:-1;;;26712:64:0;;12279:2:1;26712:64:0;;;12261:21:1;12318:2;12298:18;;;12291:30;12357:34;12337:18;;;12330:62;-1:-1:-1;;;12408:18:1;;;12401:39;12457:19;;26712:64:0;12077:405:1;26712:64:0;26805:15;26815:4;26805:9;:15::i;:::-;26795:6;:25;;26787:86;;;;-1:-1:-1;;;26787:86:0;;12689:2:1;26787:86:0;;;12671:21:1;12728:2;12708:18;;;12701:30;12767:34;12747:18;;;12740:62;-1:-1:-1;;;12818:18:1;;;12811:47;12875:19;;26787:86:0;12487:413:1;26787:86:0;26890:6;;:11;;;;:29;;-1:-1:-1;26905:14:0;;;;;;;26890:29;26887:116;;;26967:12;26951:13;;26938:10;;:26;;;;:::i;:::-;:41;26935:56;;;26990:1;26981:6;:10;26935:56;-1:-1:-1;;;;;27054:24:0;;27016:12;27054:24;;;:18;:24;;;;;;;;27053:25;:52;;;;-1:-1:-1;;;;;;27083:22:0;;;;;;:18;:22;;;;;;;;27082:23;27053:52;27050:664;;;27129:14;;;;;;;27121:59;;;;-1:-1:-1;;;27121:59:0;;13107:2:1;27121:59:0;;;13089:21:1;;;13126:18;;;13119:30;13185:34;13165:18;;;13158:62;13237:18;;27121:59:0;12905:356:1;27121:59:0;27213:11;;27203:6;:21;;27195:63;;;;-1:-1:-1;;;27195:63:0;;13468:2:1;27195:63:0;;;13450:21:1;13507:2;13487:18;;;13480:30;13546:31;13526:18;;;13519:59;13595:18;;27195:63:0;13266:353:1;27195:63:0;27282:4;;-1:-1:-1;;;;;27276:10:0;;;27282:4;;27276:10;27273:102;;27322:15;;27312:6;27296:13;27306:2;27296:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;27288:87;;;;-1:-1:-1;;;27288:87:0;;13826:2:1;27288:87:0;;;13808:21:1;13865:2;13845:18;;;13838:30;13904:34;13884:18;;;13877:62;-1:-1:-1;;;13955:18:1;;;13948:31;13996:19;;27288:87:0;13624:397:1;27288:87:0;-1:-1:-1;27430:4:0;;27400;;-1:-1:-1;;;;;27422:12:0;;;27430:4;;27422:12;:57;;;;;27467:12;27451:13;;27438:10;;:26;;;;:::i;:::-;:41;27422:57;27419:284;;;27509:5;27499:15;;27546:12;;27536:6;:22;27533:155;;27596:10;;27585:7;;:21;27582:86;;27619:10;;27608:7;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;27582:86:0;;-1:-1:-1;27582:86:0;;27667:1;27657:7;:11;27582:86;27727:12;27770:13;;27742:24;27760:4;27742:9;:24::i;:::-;27798:8;;-1:-1:-1;;27742:41:0;;-1:-1:-1;27798:8:0;;;;;27797:9;:24;;;;-1:-1:-1;27810:11:0;;;;27797:24;:35;;;;;27825:7;27797:35;:51;;;;-1:-1:-1;27844:4:0;;-1:-1:-1;;;;;27836:12:0;;;27844:4;;27836:12;;27797:51;:80;;;;-1:-1:-1;;;;;;27853:24:0;;;;;;:18;:24;;;;;;;;27852:25;27797:80;:107;;;;-1:-1:-1;;;;;;27882:22:0;;;;;;:18;:22;;;;;;;;27881:23;27797:107;27794:170;;;27920:32;27938:13;;27920:17;:32::i;:::-;27977:41;27992:4;27998:2;28002:6;28010:7;27977:14;:41::i;:::-;26622:1404;;26553:1473;;;:::o;25490:158::-;25531:7;25552:15;25569;25588:19;:17;:19::i;:::-;25551:56;;-1:-1:-1;25551:56:0;-1:-1:-1;25625:15:0;25551:56;;25625:15;:::i;:::-;25618:22;;;;25490:158;:::o;16268:191::-;16342:16;16361:6;;-1:-1:-1;;;;;16378:17:0;;;-1:-1:-1;;;;;;16378:17:0;;;;;;16411:40;;16361:6;;;;;;;16411:40;;16342:16;16411:40;16331:128;16268:191;:::o;29229:616::-;18949:8;:15;;-1:-1:-1;;18949:15:0;;;;;29330:21:::1;29365:24;29382:6:::0;29365:16:::1;:24::i;:::-;29403:20;29426:38;29450:14:::0;29426:21:::1;:38;:::i;:::-;29507:15;:19:::0;29403:61;;-1:-1:-1;29478:20:0::1;::::0;29501:25:::1;::::0;:3:::1;:25;:::i;:::-;29478:48;;29540:12;29556:1;29540:17:::0;29537:29:::1;;29559:7;;;;;29537:29;29611:19:::0;;29579:14:::1;::::0;29633:12;;29596:34:::1;::::0;:12;:34:::1;:::i;:::-;:49;;;;:::i;:::-;29579:66:::0;-1:-1:-1;29659:10:0;;29656:51:::1;;29679:9;::::0;29671:36:::1;::::0;-1:-1:-1;;;;;29679:9:0::1;29700:6:::0;29671:28:::1;:36::i;:::-;29721:18;29742:21;29757:6:::0;29742:12;:21:::1;:::i;:::-;29721:42:::0;-1:-1:-1;29777:14:0;;29774:63:::1;;29801:13;::::0;29793:44:::1;::::0;-1:-1:-1;;;;;29801:13:0::1;29826:10:::0;29793:32:::1;:44::i;:::-;29291:554;;;;;18975:1;-1:-1:-1::0;18987:8:0;:16;;-1:-1:-1;;18987:16:0;;;29229:616::o;28111:1109::-;28250:4;;28223:11;;-1:-1:-1;;;;;28237:17:0;;;28250:4;;28237:17;:32;;28264:5;28237:32;;;28257:4;28237:32;28223:46;;28280:28;28311:36;28322:7;28331;28340:6;28311:10;:36::i;:::-;28280:67;;28364:6;:17;;;;;28374:7;28364:17;:62;;;;;28414:12;28398:13;;28385:10;;:26;;;;:::i;:::-;:41;28364:62;28361:192;;;28468:10;;28455;;28445:7;;:20;;;;:::i;:::-;:33;28442:99;;;28490:10;;28480:7;:20;28442:99;;;28531:10;;28520:7;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;28442:99:0;-1:-1:-1;;;;;28570:19:0;;;;;;:11;:19;;;;;;;;28566:115;;;-1:-1:-1;;;;;28646:15:0;;;;;;:7;:15;;;;;;:23;;28662:7;;28646:23;:::i;:::-;-1:-1:-1;;;;;28628:15:0;;;;;;:7;:15;;;;;:41;28566:115;-1:-1:-1;;;;;28695:22:0;;;;;;:11;:22;;;;;;;;28691:130;;;28792:17;;;;-1:-1:-1;;;;;28773:18:0;;;;;;:7;:18;;;;;;:36;;28792:17;28773:36;:::i;:::-;-1:-1:-1;;;;;28752:18:0;;;;;;:7;:18;;;;;:57;28691:130;28868:9;;-1:-1:-1;;;;;28852:15:0;;28868:9;28852:15;;;:7;:15;;;;;;:25;;28868:9;28852:25;:::i;:::-;-1:-1:-1;;;;;28834:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;28928:17;;;28909:18;;;;;;;;;;:36;;28928:17;28909:36;:::i;:::-;-1:-1:-1;;;;;28888:18:0;;;;;;:7;:18;;;;;;;:57;;;;28962:6;;;:10;;;:24;;;28985:1;28976;:6;;;:10;28962:24;28959:56;;;28988:27;29000:1;:6;;;29008:1;:6;;;28988:11;:27::i;:::-;29039:1;29029;:7;;;:11;:26;;;;29054:1;29044;:7;;;:11;29029:26;29026:62;;;29057:31;29071:1;:7;;;29080:1;:7;;;29057:13;:31::i;:::-;29124:9;-1:-1:-1;;;;;29107:46:0;29116:6;-1:-1:-1;;;;;29107:46:0;;29135:1;:17;;;29107:46;;;;484:25:1;;472:2;457:18;;338:177;29107:46:0;;;;;;;;29194:4;-1:-1:-1;;;;;29169:40:0;29178:6;-1:-1:-1;;;;;29169:40:0;;29201:1;:7;;;29169:40;;;;484:25:1;;472:2;457:18;;338:177;29169:40:0;;;;;;;;28209:1011;;28111:1109;;;;:::o;25657:540::-;25754:7;;25790;;25707;;;;;25808:279;25832:9;:16;25828:20;;25808:279;;;25898:7;25874;:21;25882:9;25892:1;25882:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25882:12:0;25874:21;;;;;;;;;;;;;:31;;:66;;;25933:7;25909;:21;25917:9;25927:1;25917:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25917:12:0;25909:21;;;;;;;;;;;;;:31;25874:66;25870:97;;;25950:7;;25959;;25942:25;;;;;;;25657:540;;:::o;25870:97::-;26000:7;:21;26008:9;26018:1;26008:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26008:12:0;26000:21;;;;;;;;;;;;;25992:29;;:7;:29;:::i;:::-;25982:39;;26054:7;:21;26062:9;26072:1;26062:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26062:12:0;26054:21;;;;;;;;;;;;;26046:29;;:7;:29;:::i;:::-;26036:39;-1:-1:-1;25850:3:0;;;;:::i;:::-;;;;25808:279;;;;26119:7;;26111;;:15;;;;:::i;:::-;26101:7;:25;26097:56;;;26136:7;;26145;;26128:25;;;;;;25657:540;;:::o;26097:56::-;26172:7;;26181;;-1:-1:-1;25657:540:0;-1:-1:-1;25657:540:0:o;29854:564::-;30004:16;;;30018:1;30004:16;;;;;;;;29980:21;;30004:16;;;;;;;;;;-1:-1:-1;30004:16:0;29980:40;;30049:4;30031;30036:1;30031:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;30031:23:0;;;-1:-1:-1;;;;;30031:23:0;;;;;30075:6;;;;;;;;;-1:-1:-1;;;;;30075:6:0;-1:-1:-1;;;;;30075:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30065:4;30070:1;30065:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30065:23:0;;;:7;;;;;;;;;:23;30134:6;;30102:53;;30119:4;;30134:6;;;;30143:11;30102:8;:53::i;:::-;30195:6;;:215;;-1:-1:-1;;;30195:215:0;;:6;;;;-1:-1:-1;;;;;30195:6:0;;:57;;:215;;30267:11;;30293:1;;30337:4;;30364;;30384:15;;30195:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29909:509;29854:564;:::o;2100:340::-;2210:6;2186:21;:30;2182:111;;;2240:41;;-1:-1:-1;;;2240:41:0;;2275:4;2240:41;;;3668:51:1;3641:18;;2240:41:0;3522:203:1;2182:111:0;2306:12;2324:9;-1:-1:-1;;;;;2324:14:0;2346:6;2324:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2305:52;;;2373:7;2368:65;;2404:17;;-1:-1:-1;;;2404:17:0;;;;;;;;;;;2368:65;2171:269;2100:340;;:::o;24014:364::-;24100:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24100:36:0;24161:37;24173:7;24182;24191:6;24161:11;:37::i;:::-;24149:49;;24291:52;24303:9;24314:7;24323;24332:10;:8;:10::i;:::-;24291:11;:52::i;:::-;24272:15;;;24209:134;24256:14;;;24209:134;24229:25;;;24209:134;;;24014:364;;;;;:::o;23660:116::-;23738:4;23728:7;;:14;;;;;;;:::i;:::-;;;;;;;;23764:4;23753:8;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;23660:116:0:o;23785:220::-;23882:4;23862:26;;;;:11;:26;;;;;;;;23859:97;;;23930:4;23914:22;;;;:7;:22;;;;;:30;;23938:6;;23914:22;:30;;23938:6;;23914:30;:::i;:::-;;;;-1:-1:-1;;23859:97:0;23982:4;23966:22;;;;:7;:22;;;;;:31;;23991:6;;23966:22;:31;;23991:6;;23966:31;:::i;24387:580::-;24474:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24474:28:0;24522:7;24518:86;;24544:17;;;:27;;;24584:8;;24518:86;24617:15;24635:6;:25;;24654:6;;24635:25;;;24644:7;;24635:25;24617:43;;24671:14;24720:3;24698:15;:19;;;24688:7;:29;;;;:::i;:::-;:35;;;;:::i;:::-;24671:52;;24734:15;24792:3;24769:15;:19;;;24763:3;:25;;;;:::i;:::-;24752:37;;:7;:37;:::i;:::-;:43;;;;:::i;:::-;24734:61;-1:-1:-1;24834:4:0;24815:16;24825:6;24815:7;:16;:::i;:::-;:23;;;;:::i;:::-;24806:6;;;:32;24879:4;24859:17;24869:7;24859;:17;:::i;:::-;:24;;;;:::i;:::-;24849:7;;;:34;;;24924:6;;;;24914:16;;:7;:16;:::i;:::-;:26;;;;:::i;:::-;24894:17;;;:46;-1:-1:-1;;;24387:580:0;;;;;:::o;24976:505::-;25101:15;;;;25193:19;25201:11;25193:7;:19;:::i;:::-;25183:29;;25230:7;25226:67;;-1:-1:-1;25259:7:0;;-1:-1:-1;25277:1:0;;-1:-1:-1;25277:1:0;25252:29;;25226:67;25320:11;25313:1;:6;;;:18;;;;:::i;:::-;25306:25;;25358:11;25350:1;:7;;;:19;;;;:::i;:::-;25342:27;-1:-1:-1;25342:27:0;25399:12;25407:4;25399:7;:12;:::i;:::-;:18;;;;:::i;:::-;25380:37;;24976:505;;;;;;;;;;:::o;520:131:1:-;-1:-1:-1;;;;;595:31:1;;585:42;;575:70;;641:1;638;631:12;656:247;715:6;768:2;756:9;747:7;743:23;739:32;736:52;;;784:1;781;774:12;736:52;823:9;810:23;842:31;867:5;842:31;:::i;908:548::-;1020:4;1049:2;1078;1067:9;1060:21;1110:6;1104:13;1153:6;1148:2;1137:9;1133:18;1126:34;1178:1;1188:140;1202:6;1199:1;1196:13;1188:140;;;1297:14;;;1293:23;;1287:30;1263:17;;;1282:2;1259:26;1252:66;1217:10;;1188:140;;;1192:3;1377:1;1372:2;1363:6;1352:9;1348:22;1344:31;1337:42;1447:2;1440;1436:7;1431:2;1423:6;1419:15;1415:29;1404:9;1400:45;1396:54;1388:62;;;;908:548;;;;:::o;1461:180::-;1520:6;1573:2;1561:9;1552:7;1548:23;1544:32;1541:52;;;1589:1;1586;1579:12;1541:52;-1:-1:-1;1612:23:1;;1461:180;-1:-1:-1;1461:180:1:o;1646:316::-;1723:6;1731;1739;1792:2;1780:9;1771:7;1767:23;1763:32;1760:52;;;1808:1;1805;1798:12;1760:52;-1:-1:-1;;1831:23:1;;;1901:2;1886:18;;1873:32;;-1:-1:-1;1952:2:1;1937:18;;;1924:32;;1646:316;-1:-1:-1;1646:316:1:o;1967:315::-;2035:6;2043;2096:2;2084:9;2075:7;2071:23;2067:32;2064:52;;;2112:1;2109;2102:12;2064:52;2151:9;2138:23;2170:31;2195:5;2170:31;:::i;:::-;2220:5;2272:2;2257:18;;;;2244:32;;-1:-1:-1;;;1967:315:1:o;2479:456::-;2556:6;2564;2572;2625:2;2613:9;2604:7;2600:23;2596:32;2593:52;;;2641:1;2638;2631:12;2593:52;2680:9;2667:23;2699:31;2724:5;2699:31;:::i;:::-;2749:5;-1:-1:-1;2806:2:1;2791:18;;2778:32;2819:33;2778:32;2819:33;:::i;:::-;2479:456;;2871:7;;-1:-1:-1;;;2925:2:1;2910:18;;;;2897:32;;2479:456::o;3129:388::-;3197:6;3205;3258:2;3246:9;3237:7;3233:23;3229:32;3226:52;;;3274:1;3271;3264:12;3226:52;3313:9;3300:23;3332:31;3357:5;3332:31;:::i;:::-;3382:5;-1:-1:-1;3439:2:1;3424:18;;3411:32;3452:33;3411:32;3452:33;:::i;:::-;3504:7;3494:17;;;3129:388;;;;;:::o;3730:118::-;3816:5;3809:13;3802:21;3795:5;3792:32;3782:60;;3838:1;3835;3828:12;3853:241;3909:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4017:9;4004:23;4036:28;4058:5;4036:28;:::i;4099:382::-;4164:6;4172;4225:2;4213:9;4204:7;4200:23;4196:32;4193:52;;;4241:1;4238;4231:12;4193:52;4280:9;4267:23;4299:31;4324:5;4299:31;:::i;:::-;4349:5;-1:-1:-1;4406:2:1;4391:18;;4378:32;4419:30;4378:32;4419:30;:::i;4709:127::-;4770:10;4765:3;4761:20;4758:1;4751:31;4801:4;4798:1;4791:15;4825:4;4822:1;4815:15;4841:125;4906:9;;;4927:10;;;4924:36;;;4940:18;;:::i;5317:422::-;5406:1;5449:5;5406:1;5463:270;5484:7;5474:8;5471:21;5463:270;;;5543:4;5539:1;5535:6;5531:17;5525:4;5522:27;5519:53;;;5552:18;;:::i;:::-;5602:7;5592:8;5588:22;5585:55;;;5622:16;;;;5585:55;5701:22;;;;5661:15;;;;5463:270;;;5467:3;5317:422;;;;;:::o;5744:806::-;5793:5;5823:8;5813:80;;-1:-1:-1;5864:1:1;5878:5;;5813:80;5912:4;5902:76;;-1:-1:-1;5949:1:1;5963:5;;5902:76;5994:4;6012:1;6007:59;;;;6080:1;6075:130;;;;5987:218;;6007:59;6037:1;6028:10;;6051:5;;;6075:130;6112:3;6102:8;6099:17;6096:43;;;6119:18;;:::i;:::-;-1:-1:-1;;6175:1:1;6161:16;;6190:5;;5987:218;;6289:2;6279:8;6276:16;6270:3;6264:4;6261:13;6257:36;6251:2;6241:8;6238:16;6233:2;6227:4;6224:12;6220:35;6217:77;6214:159;;;-1:-1:-1;6326:19:1;;;6358:5;;6214:159;6405:34;6430:8;6424:4;6405:34;:::i;:::-;6475:6;6471:1;6467:6;6463:19;6454:7;6451:32;6448:58;;;6486:18;;:::i;:::-;6524:20;;5744:806;-1:-1:-1;;;5744:806:1:o;6555:140::-;6613:5;6642:47;6683:4;6673:8;6669:19;6663:4;6642:47;:::i;6700:168::-;6773:9;;;6804;;6821:15;;;6815:22;;6801:37;6791:71;;6842:18;;:::i;7282:128::-;7349:9;;;7370:11;;;7367:37;;;7384:18;;:::i;7826:217::-;7866:1;7892;7882:132;;7936:10;7931:3;7927:20;7924:1;7917:31;7971:4;7968:1;7961:15;7999:4;7996:1;7989:15;7882:132;-1:-1:-1;8028:9:1;;7826:217::o;8400:127::-;8461:10;8456:3;8452:20;8449:1;8442:31;8492:4;8489:1;8482:15;8516:4;8513:1;8506:15;8532:127;8593:10;8588:3;8584:20;8581:1;8574:31;8624:4;8621:1;8614:15;8648:4;8645:1;8638:15;8664:135;8703:3;8724:17;;;8721:43;;8744:18;;:::i;:::-;-1:-1:-1;8791:1:1;8780:13;;8664:135::o;9845:245::-;9912:6;9965:2;9953:9;9944:7;9940:23;9936:32;9933:52;;;9981:1;9978;9971:12;9933:52;10013:9;10007:16;10032:28;10054:5;10032:28;:::i;14158:251::-;14228:6;14281:2;14269:9;14260:7;14256:23;14252:32;14249:52;;;14297:1;14294;14287:12;14249:52;14329:9;14323:16;14348:31;14373:5;14348:31;:::i;14414:980::-;14676:4;14724:3;14713:9;14709:19;14755:6;14744:9;14737:25;14781:2;14819:6;14814:2;14803:9;14799:18;14792:34;14862:3;14857:2;14846:9;14842:18;14835:31;14886:6;14921;14915:13;14952:6;14944;14937:22;14990:3;14979:9;14975:19;14968:26;;15029:2;15021:6;15017:15;15003:29;;15050:1;15060:195;15074:6;15071:1;15068:13;15060:195;;;15139:13;;-1:-1:-1;;;;;15135:39:1;15123:52;;15230:15;;;;15195:12;;;;15171:1;15089:9;15060:195;;;-1:-1:-1;;;;;;;15311:32:1;;;;15306:2;15291:18;;15284:60;-1:-1:-1;;;15375:3:1;15360:19;15353:35;15272:3;14414:980;-1:-1:-1;;;14414:980:1:o

Swarm Source

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