ETH Price: $3,386.03 (-1.50%)
Gas: 2 Gwei

Token

Charge Coin (CHARGE)
 

Overview

Max Total Supply

1,000,000,000 CHARGE

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,858,404.028155051843772269 CHARGE

Value
$0.00
0x79168c3c25fE41DEAB3B3529d27f29d718A70d5B
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:
ChargeCoin

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-30
*/

// SPDX-License-Identifier: MIT

/*

  ( )   ___    _   _  _____  ___    ___    ___   
 /'_ \ (  _`\ ( ) ( )(  _  )|  _`\ (  _`\ (  _`\ 
( (_(_)| ( (_)| |_| || (_) || (_) )| ( (_)| (_(_)
 \__ \ | |  _ |  _  ||  _  || ,  / | |___ |  _)_ 
( )_) )| (_( )| | | || | | || |\ \ | (_, )| (_( )
`\_ _/'(____/'(_) (_)(_) (_)(_) (_)(____/'(____/'
  (_)                                            

Every transaction, no matter buy or sell, is a win-win.
Get ready to Charge your bags with $CHARGE!

Website: https://chargederc.com/
Twitter: https://twitter.com/ChargeERC
Telegram: https://t.me/ChargeERC

*/

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: CHARGE.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 ChargeCoin 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 = 0;
 
    uint256 public buyTax = 0; // 0% BUY TAX FOREVER
    uint256 public sellTax = 150; // 15%
    uint256 public adaptiveTax = 30; // 3%
    uint256 public maxSellTax = 150; // 15%
 
    string private constant _name = "Charge Coin";
    string private constant _symbol = "CHARGE";
 
    struct TaxesPercentage {
      uint256 rfi;
      uint256 dev;
      uint256 buyBack;
    }
 
    TaxesPercentage public taxesPercentage = TaxesPercentage(33,34,33);
 
    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 = 0xf6b9A4D1fd67d9aD967c2194b833A7E8f650ca3d;
        buybackWallet = 0x3691ab01427B33C1AceD6098B660CC6f6c021a2E;
 
        _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 >= adaptiveTax) sellTax -= adaptiveTax;
                    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 + adaptiveTax > maxSellTax) sellTax = maxSellTax;
            else sellTax += adaptiveTax;
        }
 
        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 updateadaptiveTax(uint256 amount) external onlyOwner{
        adaptiveTax = 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":[],"name":"adaptiveTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateadaptiveTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a62000920565b6200002290633b9aca0062000931565b600b819055620000359060001962000961565b620000439060001962000978565b600c55620000546012600a62000920565b6200006390621e848062000931565b600e55620000746012600a62000920565b62000084906301312d0062000931565b600f55620000956012600a62000920565b620000a5906301312d0062000931565b601055620000b66012600a62000920565b620000c5906205573062000931565b6011556000601381905560145560966015819055601e601655601755604080516060810182526021808252602260208301819052919092018290526018829055601955601a553480156200011857600080fd5b506200012433620003d5565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a491906200098e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021891906200098e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c91906200098e565b600780546001600160a01b038086166301000000026301000000600160b81b031990921691909117909155600880549183166001600160a01b031990921682179055909150620002dc9062000425565b620002e961dead62000425565b600980546001600160a01b031990811673f6b9a4d1fd67d9ad967c2194b833a7e8f650ca3d178255600a8054909116733691ab01427b33c1aced6098b660cc6f6c021a2e178155600c543360008181526001602081815260408084209590955560048152848320805460ff199081168417909155308452858420805482168417905596546001600160a01b039081168452858420805489168417905595549095168252838220805490961617909455600b54915191825292917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000a02565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200042f62000561565b6001600160a01b03811660009081526005602052604090205460ff16156200049e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205415620004fb576001600160a01b038116600090815260016020526040902054620004e190620005bf565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314620005bd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000495565b565b6000600c54821115620006285760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000495565b60006200063462000649565b9050620006428184620009b9565b9392505050565b60008080620006576200066f565b9092509050620006688183620009b9565b9250505090565b600c54600b546000918291825b600654811015620007d757826001600060068481548110620006a257620006a2620009d0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620007115750816002600060068481548110620006ea57620006ea620009d0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200072857600c54600b54945094505050509091565b6001600060068381548110620007425762000742620009d0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000773908462000978565b925060026000600683815481106200078f576200078f620009d0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620007c0908362000978565b915080620007ce81620009e6565b9150506200067c565b50600b54600c54620007ea9190620009b9565b8210156200080257600c54600b549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008625781600019048211156200084657620008466200080b565b808516156200085457918102915b93841c939080029062000826565b509250929050565b6000826200087b575060016200091a565b816200088a575060006200091a565b8160018114620008a35760028114620008ae57620008ce565b60019150506200091a565b60ff841115620008c257620008c26200080b565b50506001821b6200091a565b5060208310610133831016604e8410600b8410161715620008f3575081810a6200091a565b620008ff838362000821565b80600019048211156200091657620009166200080b565b0290505b92915050565b60006200064260ff8416836200086a565b80820281158282048414176200091a576200091a6200080b565b634e487b7160e01b600052601260045260246000fd5b6000826200097357620009736200094b565b500690565b818103818111156200091a576200091a6200080b565b600060208284031215620009a157600080fd5b81516001600160a01b03811681146200064257600080fd5b600082620009cb57620009cb6200094b565b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201620009fb57620009fb6200080b565b5060010190565b6126e68062000a126000396000f3fe6080604052600436106103035760003560e01c8063715018a611610190578063a9059cbb116100dc578063db7ada3611610095578063df8408fe1161006f578063df8408fe14610955578063f13cff4114610975578063f2fde38b1461098b578063f887ea40146109ab57600080fd5b8063db7ada36146108cf578063dd62ed3e146108ef578063deab8aea1461093557600080fd5b8063a9059cbb14610823578063aa4bde2814610843578063c2d0ffca14610859578063cc1776d314610879578063cc274b291461088f578063cea9d26f146108af57600080fd5b80638ea5220f116101495780639e252f00116101235780639e252f00146107ad578063a411209a146107cd578063a457c2d7146107e3578063a8aa1b311461080357600080fd5b80638ea5220f1461073e578063924de9b71461075e57806395d89b411461077e57600080fd5b8063715018a614610673578063799754d71461068857806388f82020146106a85780638a8c523c146106e15780638c0b5e22146106f65780638da5cb5b1461070c57600080fd5b8063313ce5671161024f5780634ada218b116102085780635342acb4116101e25780635342acb4146105ea578063649011c8146106235780636ddd17131461063957806370a082311461065357600080fd5b80634ada218b146105945780634f7041a5146105b457806352390c02146105ca57600080fd5b8063313ce567146104ec5780633685d4191461050857806339509351146105285780633a3cf9aa1461054857806340b28c2f1461055e57806348cd4cb11461057e57600080fd5b8063095ea7b3116102bc5780631a661181116102965780631a661181146104765780631c499ab01461048c57806323b872dd146104ac5780632d838119146104cc57600080fd5b8063095ea7b31461041157806318160ddd146104415780631816467f1461045657600080fd5b8063029514f71461030f5780630445b6671461034e57806304dacd501461037257806306fdde0314610394578063079bf867146103d15780630858fa35146103f157600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50601854601954601a5461032e92919083565b604080519384526020840192909252908201526060015b60405180910390f35b34801561035a57600080fd5b50610364600e5481565b604051908152602001610345565b34801561037e57600080fd5b5061039261038d3660046122a9565b6109d2565b005b3480156103a057600080fd5b5060408051808201909152600b81526a21b430b933b29021b7b4b760a91b60208201525b60405161034591906122c6565b3480156103dd57600080fd5b506103926103ec366004612314565b610a14565b3480156103fd57600080fd5b5061039261040c36600461232d565b610a21565b34801561041d57600080fd5b5061043161042c366004612359565b610aac565b6040519015158152602001610345565b34801561044d57600080fd5b50600b54610364565b34801561046257600080fd5b506103926104713660046122a9565b610ac3565b34801561048257600080fd5b50610364600d5481565b34801561049857600080fd5b506103926104a7366004612314565b610b05565b3480156104b857600080fd5b506104316104c7366004612385565b610b29565b3480156104d857600080fd5b506103646104e7366004612314565b610bdc565b3480156104f857600080fd5b5060405160128152602001610345565b34801561051457600080fd5b506103926105233660046122a9565b610c59565b34801561053457600080fd5b50610431610543366004612359565b610ded565b34801561055457600080fd5b5061036460165481565b34801561056a57600080fd5b506103926105793660046123c6565b610e24565b34801561058a57600080fd5b5061036460125481565b3480156105a057600080fd5b506007546104319062010000900460ff1681565b3480156105c057600080fd5b5061036460145481565b3480156105d657600080fd5b506103926105e53660046122a9565b610e68565b3480156105f657600080fd5b506104316106053660046122a9565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062f57600080fd5b5061036460135481565b34801561064557600080fd5b506007546104319060ff1681565b34801561065f57600080fd5b5061036461066e3660046122a9565b610f99565b34801561067f57600080fd5b50610392610ff8565b34801561069457600080fd5b506103926106a3366004612314565b61100c565b3480156106b457600080fd5b506104316106c33660046122a9565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106ed57600080fd5b50610392611030565b34801561070257600080fd5b50610364600f5481565b34801561071857600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610345565b34801561074a57600080fd5b50600954610726906001600160a01b031681565b34801561076a57600080fd5b5061039261077936600461240d565b61104f565b34801561078a57600080fd5b5060408051808201909152600681526543484152474560d01b60208201526103c4565b3480156107b957600080fd5b506103926107c8366004612314565b61106a565b3480156107d957600080fd5b5061036460175481565b3480156107ef57600080fd5b506104316107fe366004612359565b61109f565b34801561080f57600080fd5b50600854610726906001600160a01b031681565b34801561082f57600080fd5b5061043161083e366004612359565b61113a565b34801561084f57600080fd5b5061036460105481565b34801561086557600080fd5b50610392610874366004612314565b611147565b34801561088557600080fd5b5061036460155481565b34801561089b57600080fd5b506103926108aa366004612314565b61116b565b3480156108bb57600080fd5b506103926108ca366004612385565b61118f565b3480156108db57600080fd5b506103926108ea366004612314565b611210565b3480156108fb57600080fd5b5061036461090a3660046123c6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561094157600080fd5b50600a54610726906001600160a01b031681565b34801561096157600080fd5b5061039261097036600461242a565b61121d565b34801561098157600080fd5b5061036460115481565b34801561099757600080fd5b506103926109a63660046122a9565b611250565b3480156109b757600080fd5b5060075461072690630100000090046001600160a01b031681565b6109da6112c9565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610a1c6112c9565b601755565b610a296112c9565b80610a34838561246e565b610a3e919061246e565b606414610a865760405162461bcd60e51b81526020600482015260116024820152700546f74616c206d7573742062652031303607c1b60448201526064015b60405180910390fd5b604080516060810182528481526020810184905201819052601892909255601955601a55565b6000610ab9338484611323565b5060015b92915050565b610acb6112c9565b600980546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610b0d6112c9565b610b196012600a612565565b610b239082612574565b60105550565b6000610b36848484611447565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610bbb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a7d565b610bcf8533610bca868561258b565b611323565b60019150505b9392505050565b6000600c54821115610c435760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a7d565b6000610c4d61185d565b9050610bd5818461259e565b610c616112c9565b6001600160a01b03811660009081526005602052604090205460ff16610cc95760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a7d565b60005b600654811015610de957816001600160a01b031660068281548110610cf357610cf36125c0565b6000918252602090912001546001600160a01b031603610dd75760068054610d1d9060019061258b565b81548110610d2d57610d2d6125c0565b600091825260209091200154600680546001600160a01b039092169183908110610d5957610d596125c0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610db157610db16125d6565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610de1816125ec565b915050610ccc565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ab9918590610bca90869061246e565b610e2c6112c9565b600780546301000000600160b81b03191663010000006001600160a01b0394851602179055600880546001600160a01b03191691909216179055565b610e706112c9565b6001600160a01b03811660009081526005602052604090205460ff1615610ed95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a7d565b6001600160a01b03811660009081526001602052604090205415610f33576001600160a01b038116600090815260016020526040902054610f1990610bdc565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610fd657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610abd90610bdc565b6110006112c9565b61100a6000611880565b565b6110146112c9565b6110206012600a612565565b61102a9082612574565b60115550565b6110386112c9565b6007805462ff00ff19166201000117905543601255565b6110576112c9565b6007805460ff1916911515919091179055565b6110726112c9565b604051339082156108fc029083906000818181858888f19350505050158015610de9573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156111215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a7d565b6111303385610bca868561258b565b5060019392505050565b6000610ab9338484611447565b61114f6112c9565b61115b6012600a612565565b6111659082612574565b600f5550565b6111736112c9565b61117f6012600a612565565b6111899082612574565b600e5550565b6111976112c9565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120a9190612605565b50505050565b6112186112c9565b601655565b6112256112c9565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6112586112c9565b6001600160a01b0381166112bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7d565b6112c681611880565b50565b6000546001600160a01b0316331461100a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a7d565b6001600160a01b0383166113855760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a7d565b6001600160a01b0382166113e65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a7d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a7d565b6000811161150d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a7d565b61151683610f99565b81111561157f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a7d565b60145415801590611598575060075462010000900460ff165b156115ba57436013546012546115ae919061246e565b10156115ba5760006014555b6001600160a01b03831660009081526004602052604081205460ff161580156115fc57506001600160a01b03831660009081526004602052604090205460ff16155b156117a05760075462010000900460ff166116595760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152606401610a7d565b600f548211156116ab5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e740000006044820152606401610a7d565b6008546001600160a01b0384811691161461172f57601054826116cd85610f99565b6116d7919061246e565b111561172f5760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610a7d565b506008546001906001600160a01b03858116911614801561175e57504360135460125461175c919061246e565b105b156117a0576000905060115482106117a0576016546015541061179a576016546015600082825461178f919061258b565b909155506117a09050565b60006015555b6000600e546117ae30610f99565b6007549111159150610100900460ff161580156117cd575060075460ff165b80156117d65750805b80156117f057506008546001600160a01b03868116911614155b801561181557506001600160a01b03851660009081526004602052604090205460ff16155b801561183a57506001600160a01b03841660009081526004602052604090205460ff16155b1561184a5761184a600e546118d0565b61185685858585611993565b5050505050565b600080600061186a611c6c565b9092509050611879818361259e565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6007805461ff001916610100179055476118e982611def565b60006118f5824761258b565b60185490915060009061190990606461258b565b90508060000361191b57505050611985565b601954600090829061192d9085612574565b611937919061259e565b9050801561195557600954611955906001600160a01b031682611f70565b6000611961828561258b565b9050801561197f57600a5461197f906001600160a01b031682611f70565b50505050505b506007805461ff0019169055565b6008546000906001600160a01b038581169116146119b25760006119b5565b60015b905060006119c484848461200c565b90508180156119d05750825b80156119ea5750436013546012546119e8919061246e565b105b15611a2d57601754601654601554611a02919061246e565b1115611a1357601754601555611a2d565b60165460156000828254611a27919061246e565b90915550505b6001600160a01b03861660009081526005602052604090205460ff1615611a8c576001600160a01b038616600090815260026020526040902054611a7290859061258b565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615611aef5760808101516001600160a01b038616600090815260026020526040902054611ad5919061246e565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054611b14919061258b565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054611b4b919061246e565b6001600160a01b0386166000908152600160205260409081902091909155810151151580611b7d575060008160a00151115b15611b9457611b9481604001518260a00151612084565b600081606001511180611bab575060008160c00151115b15611bc257611bc281606001518260c001516120b8565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611c0b91815260200190565b60405180910390a3306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611c5c91815260200190565b60405180910390a3505050505050565b600c54600b546000918291825b600654811015611dbe57826001600060068481548110611c9b57611c9b6125c0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611d065750816002600060068481548110611cdf57611cdf6125c0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d1c57600c54600b54945094505050509091565b6001600060068381548110611d3357611d336125c0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d62908461258b565b92506002600060068381548110611d7b57611d7b6125c0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611daa908361258b565b915080611db6816125ec565b915050611c79565b50600b54600c54611dcf919061259e565b821015611de657600c54600b549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e2457611e246125c0565b60200260200101906001600160a01b031690816001600160a01b031681525050600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebb9190612622565b81600181518110611ece57611ece6125c0565b6001600160a01b039283166020918202929092010152600754611efb913091630100000090041684611323565b60075460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790611f3a90859060009086903090429060040161263f565b600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b505050505050565b80471015611f935760405163cd78605960e01b8152306004820152602401610a7d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fe0576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b606091505b505090508061200757604051630a12f52160e11b815260040160405180910390fd5b505050565b61204c6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612057848484612114565b905061206c81858561206761185d565b612229565b60608501526040840152602083015281529392505050565b81600c6000828254612096919061258b565b9250508190555080600d60008282546120af919061246e565b90915550505050565b3060009081526005602052604090205460ff16156120f55730600090815260026020526040812080548392906120ef90849061246e565b90915550505b30600090815260016020526040812080548492906120af90849061246e565b6121546040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b826121655760808101849052610bd5565b60008261217457601454612178565b6015545b9050600060646018600001548361218f9190612574565b612199919061259e565b90506000606460186000015460646121b1919061258b565b6121bb9085612574565b6121c5919061259e565b90506103e86121d48389612574565b6121de919061259e565b60a08501526103e86121f08289612574565b6121fa919061259e565b60c0850181905260a0850151612210908961258b565b61221a919061258b565b60808501525050509392505050565b60008080806122388588612574565b93508561224d57508291506000905080612289565b848860a0015161225d9190612574565b9150848860c0015161226f9190612574565b90508061227c838661258b565b612286919061258b565b92505b945094509450949050565b6001600160a01b03811681146112c657600080fd5b6000602082840312156122bb57600080fd5b8135610bd581612294565b600060208083528351808285015260005b818110156122f3578581018301518582016040015282016122d7565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561232657600080fd5b5035919050565b60008060006060848603121561234257600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561236c57600080fd5b823561237781612294565b946020939093013593505050565b60008060006060848603121561239a57600080fd5b83356123a581612294565b925060208401356123b581612294565b929592945050506040919091013590565b600080604083850312156123d957600080fd5b82356123e481612294565b915060208301356123f481612294565b809150509250929050565b80151581146112c657600080fd5b60006020828403121561241f57600080fd5b8135610bd5816123ff565b6000806040838503121561243d57600080fd5b823561244881612294565b915060208301356123f4816123ff565b634e487b7160e01b600052601160045260246000fd5b80820180821115610abd57610abd612458565b600181815b808511156124bc5781600019048211156124a2576124a2612458565b808516156124af57918102915b93841c9390800290612486565b509250929050565b6000826124d357506001610abd565b816124e057506000610abd565b81600181146124f657600281146125005761251c565b6001915050610abd565b60ff84111561251157612511612458565b50506001821b610abd565b5060208310610133831016604e8410600b841016171561253f575081810a610abd565b6125498383612481565b806000190482111561255d5761255d612458565b029392505050565b6000610bd560ff8416836124c4565b8082028115828204841417610abd57610abd612458565b81810381811115610abd57610abd612458565b6000826125bb57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016125fe576125fe612458565b5060010190565b60006020828403121561261757600080fd5b8151610bd5816123ff565b60006020828403121561263457600080fd5b8151610bd581612294565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561268f5784516001600160a01b03168352938301939183019160010161266a565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220f98423541f580d229bcaf1d321a799df7f16c2ea64c67ec3a33083b0f18098d864736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063715018a611610190578063a9059cbb116100dc578063db7ada3611610095578063df8408fe1161006f578063df8408fe14610955578063f13cff4114610975578063f2fde38b1461098b578063f887ea40146109ab57600080fd5b8063db7ada36146108cf578063dd62ed3e146108ef578063deab8aea1461093557600080fd5b8063a9059cbb14610823578063aa4bde2814610843578063c2d0ffca14610859578063cc1776d314610879578063cc274b291461088f578063cea9d26f146108af57600080fd5b80638ea5220f116101495780639e252f00116101235780639e252f00146107ad578063a411209a146107cd578063a457c2d7146107e3578063a8aa1b311461080357600080fd5b80638ea5220f1461073e578063924de9b71461075e57806395d89b411461077e57600080fd5b8063715018a614610673578063799754d71461068857806388f82020146106a85780638a8c523c146106e15780638c0b5e22146106f65780638da5cb5b1461070c57600080fd5b8063313ce5671161024f5780634ada218b116102085780635342acb4116101e25780635342acb4146105ea578063649011c8146106235780636ddd17131461063957806370a082311461065357600080fd5b80634ada218b146105945780634f7041a5146105b457806352390c02146105ca57600080fd5b8063313ce567146104ec5780633685d4191461050857806339509351146105285780633a3cf9aa1461054857806340b28c2f1461055e57806348cd4cb11461057e57600080fd5b8063095ea7b3116102bc5780631a661181116102965780631a661181146104765780631c499ab01461048c57806323b872dd146104ac5780632d838119146104cc57600080fd5b8063095ea7b31461041157806318160ddd146104415780631816467f1461045657600080fd5b8063029514f71461030f5780630445b6671461034e57806304dacd501461037257806306fdde0314610394578063079bf867146103d15780630858fa35146103f157600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50601854601954601a5461032e92919083565b604080519384526020840192909252908201526060015b60405180910390f35b34801561035a57600080fd5b50610364600e5481565b604051908152602001610345565b34801561037e57600080fd5b5061039261038d3660046122a9565b6109d2565b005b3480156103a057600080fd5b5060408051808201909152600b81526a21b430b933b29021b7b4b760a91b60208201525b60405161034591906122c6565b3480156103dd57600080fd5b506103926103ec366004612314565b610a14565b3480156103fd57600080fd5b5061039261040c36600461232d565b610a21565b34801561041d57600080fd5b5061043161042c366004612359565b610aac565b6040519015158152602001610345565b34801561044d57600080fd5b50600b54610364565b34801561046257600080fd5b506103926104713660046122a9565b610ac3565b34801561048257600080fd5b50610364600d5481565b34801561049857600080fd5b506103926104a7366004612314565b610b05565b3480156104b857600080fd5b506104316104c7366004612385565b610b29565b3480156104d857600080fd5b506103646104e7366004612314565b610bdc565b3480156104f857600080fd5b5060405160128152602001610345565b34801561051457600080fd5b506103926105233660046122a9565b610c59565b34801561053457600080fd5b50610431610543366004612359565b610ded565b34801561055457600080fd5b5061036460165481565b34801561056a57600080fd5b506103926105793660046123c6565b610e24565b34801561058a57600080fd5b5061036460125481565b3480156105a057600080fd5b506007546104319062010000900460ff1681565b3480156105c057600080fd5b5061036460145481565b3480156105d657600080fd5b506103926105e53660046122a9565b610e68565b3480156105f657600080fd5b506104316106053660046122a9565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062f57600080fd5b5061036460135481565b34801561064557600080fd5b506007546104319060ff1681565b34801561065f57600080fd5b5061036461066e3660046122a9565b610f99565b34801561067f57600080fd5b50610392610ff8565b34801561069457600080fd5b506103926106a3366004612314565b61100c565b3480156106b457600080fd5b506104316106c33660046122a9565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106ed57600080fd5b50610392611030565b34801561070257600080fd5b50610364600f5481565b34801561071857600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610345565b34801561074a57600080fd5b50600954610726906001600160a01b031681565b34801561076a57600080fd5b5061039261077936600461240d565b61104f565b34801561078a57600080fd5b5060408051808201909152600681526543484152474560d01b60208201526103c4565b3480156107b957600080fd5b506103926107c8366004612314565b61106a565b3480156107d957600080fd5b5061036460175481565b3480156107ef57600080fd5b506104316107fe366004612359565b61109f565b34801561080f57600080fd5b50600854610726906001600160a01b031681565b34801561082f57600080fd5b5061043161083e366004612359565b61113a565b34801561084f57600080fd5b5061036460105481565b34801561086557600080fd5b50610392610874366004612314565b611147565b34801561088557600080fd5b5061036460155481565b34801561089b57600080fd5b506103926108aa366004612314565b61116b565b3480156108bb57600080fd5b506103926108ca366004612385565b61118f565b3480156108db57600080fd5b506103926108ea366004612314565b611210565b3480156108fb57600080fd5b5061036461090a3660046123c6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561094157600080fd5b50600a54610726906001600160a01b031681565b34801561096157600080fd5b5061039261097036600461242a565b61121d565b34801561098157600080fd5b5061036460115481565b34801561099757600080fd5b506103926109a63660046122a9565b611250565b3480156109b757600080fd5b5060075461072690630100000090046001600160a01b031681565b6109da6112c9565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610a1c6112c9565b601755565b610a296112c9565b80610a34838561246e565b610a3e919061246e565b606414610a865760405162461bcd60e51b81526020600482015260116024820152700546f74616c206d7573742062652031303607c1b60448201526064015b60405180910390fd5b604080516060810182528481526020810184905201819052601892909255601955601a55565b6000610ab9338484611323565b5060015b92915050565b610acb6112c9565b600980546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610b0d6112c9565b610b196012600a612565565b610b239082612574565b60105550565b6000610b36848484611447565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610bbb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a7d565b610bcf8533610bca868561258b565b611323565b60019150505b9392505050565b6000600c54821115610c435760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a7d565b6000610c4d61185d565b9050610bd5818461259e565b610c616112c9565b6001600160a01b03811660009081526005602052604090205460ff16610cc95760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a7d565b60005b600654811015610de957816001600160a01b031660068281548110610cf357610cf36125c0565b6000918252602090912001546001600160a01b031603610dd75760068054610d1d9060019061258b565b81548110610d2d57610d2d6125c0565b600091825260209091200154600680546001600160a01b039092169183908110610d5957610d596125c0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610db157610db16125d6565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610de1816125ec565b915050610ccc565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ab9918590610bca90869061246e565b610e2c6112c9565b600780546301000000600160b81b03191663010000006001600160a01b0394851602179055600880546001600160a01b03191691909216179055565b610e706112c9565b6001600160a01b03811660009081526005602052604090205460ff1615610ed95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a7d565b6001600160a01b03811660009081526001602052604090205415610f33576001600160a01b038116600090815260016020526040902054610f1990610bdc565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610fd657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610abd90610bdc565b6110006112c9565b61100a6000611880565b565b6110146112c9565b6110206012600a612565565b61102a9082612574565b60115550565b6110386112c9565b6007805462ff00ff19166201000117905543601255565b6110576112c9565b6007805460ff1916911515919091179055565b6110726112c9565b604051339082156108fc029083906000818181858888f19350505050158015610de9573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156111215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a7d565b6111303385610bca868561258b565b5060019392505050565b6000610ab9338484611447565b61114f6112c9565b61115b6012600a612565565b6111659082612574565b600f5550565b6111736112c9565b61117f6012600a612565565b6111899082612574565b600e5550565b6111976112c9565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120a9190612605565b50505050565b6112186112c9565b601655565b6112256112c9565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6112586112c9565b6001600160a01b0381166112bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7d565b6112c681611880565b50565b6000546001600160a01b0316331461100a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a7d565b6001600160a01b0383166113855760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a7d565b6001600160a01b0382166113e65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a7d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a7d565b6000811161150d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a7d565b61151683610f99565b81111561157f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a7d565b60145415801590611598575060075462010000900460ff165b156115ba57436013546012546115ae919061246e565b10156115ba5760006014555b6001600160a01b03831660009081526004602052604081205460ff161580156115fc57506001600160a01b03831660009081526004602052604090205460ff16155b156117a05760075462010000900460ff166116595760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152606401610a7d565b600f548211156116ab5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e740000006044820152606401610a7d565b6008546001600160a01b0384811691161461172f57601054826116cd85610f99565b6116d7919061246e565b111561172f5760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610a7d565b506008546001906001600160a01b03858116911614801561175e57504360135460125461175c919061246e565b105b156117a0576000905060115482106117a0576016546015541061179a576016546015600082825461178f919061258b565b909155506117a09050565b60006015555b6000600e546117ae30610f99565b6007549111159150610100900460ff161580156117cd575060075460ff165b80156117d65750805b80156117f057506008546001600160a01b03868116911614155b801561181557506001600160a01b03851660009081526004602052604090205460ff16155b801561183a57506001600160a01b03841660009081526004602052604090205460ff16155b1561184a5761184a600e546118d0565b61185685858585611993565b5050505050565b600080600061186a611c6c565b9092509050611879818361259e565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6007805461ff001916610100179055476118e982611def565b60006118f5824761258b565b60185490915060009061190990606461258b565b90508060000361191b57505050611985565b601954600090829061192d9085612574565b611937919061259e565b9050801561195557600954611955906001600160a01b031682611f70565b6000611961828561258b565b9050801561197f57600a5461197f906001600160a01b031682611f70565b50505050505b506007805461ff0019169055565b6008546000906001600160a01b038581169116146119b25760006119b5565b60015b905060006119c484848461200c565b90508180156119d05750825b80156119ea5750436013546012546119e8919061246e565b105b15611a2d57601754601654601554611a02919061246e565b1115611a1357601754601555611a2d565b60165460156000828254611a27919061246e565b90915550505b6001600160a01b03861660009081526005602052604090205460ff1615611a8c576001600160a01b038616600090815260026020526040902054611a7290859061258b565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615611aef5760808101516001600160a01b038616600090815260026020526040902054611ad5919061246e565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054611b14919061258b565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054611b4b919061246e565b6001600160a01b0386166000908152600160205260409081902091909155810151151580611b7d575060008160a00151115b15611b9457611b9481604001518260a00151612084565b600081606001511180611bab575060008160c00151115b15611bc257611bc281606001518260c001516120b8565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611c0b91815260200190565b60405180910390a3306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611c5c91815260200190565b60405180910390a3505050505050565b600c54600b546000918291825b600654811015611dbe57826001600060068481548110611c9b57611c9b6125c0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611d065750816002600060068481548110611cdf57611cdf6125c0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d1c57600c54600b54945094505050509091565b6001600060068381548110611d3357611d336125c0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d62908461258b565b92506002600060068381548110611d7b57611d7b6125c0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611daa908361258b565b915080611db6816125ec565b915050611c79565b50600b54600c54611dcf919061259e565b821015611de657600c54600b549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e2457611e246125c0565b60200260200101906001600160a01b031690816001600160a01b031681525050600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebb9190612622565b81600181518110611ece57611ece6125c0565b6001600160a01b039283166020918202929092010152600754611efb913091630100000090041684611323565b60075460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790611f3a90859060009086903090429060040161263f565b600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b505050505050565b80471015611f935760405163cd78605960e01b8152306004820152602401610a7d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fe0576040519150601f19603f3d011682016040523d82523d6000602084013e611fe5565b606091505b505090508061200757604051630a12f52160e11b815260040160405180910390fd5b505050565b61204c6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612057848484612114565b905061206c81858561206761185d565b612229565b60608501526040840152602083015281529392505050565b81600c6000828254612096919061258b565b9250508190555080600d60008282546120af919061246e565b90915550505050565b3060009081526005602052604090205460ff16156120f55730600090815260026020526040812080548392906120ef90849061246e565b90915550505b30600090815260016020526040812080548492906120af90849061246e565b6121546040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b826121655760808101849052610bd5565b60008261217457601454612178565b6015545b9050600060646018600001548361218f9190612574565b612199919061259e565b90506000606460186000015460646121b1919061258b565b6121bb9085612574565b6121c5919061259e565b90506103e86121d48389612574565b6121de919061259e565b60a08501526103e86121f08289612574565b6121fa919061259e565b60c0850181905260a0850151612210908961258b565b61221a919061258b565b60808501525050509392505050565b60008080806122388588612574565b93508561224d57508291506000905080612289565b848860a0015161225d9190612574565b9150848860c0015161226f9190612574565b90508061227c838661258b565b612286919061258b565b92505b945094509450949050565b6001600160a01b03811681146112c657600080fd5b6000602082840312156122bb57600080fd5b8135610bd581612294565b600060208083528351808285015260005b818110156122f3578581018301518582016040015282016122d7565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561232657600080fd5b5035919050565b60008060006060848603121561234257600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561236c57600080fd5b823561237781612294565b946020939093013593505050565b60008060006060848603121561239a57600080fd5b83356123a581612294565b925060208401356123b581612294565b929592945050506040919091013590565b600080604083850312156123d957600080fd5b82356123e481612294565b915060208301356123f481612294565b809150509250929050565b80151581146112c657600080fd5b60006020828403121561241f57600080fd5b8135610bd5816123ff565b6000806040838503121561243d57600080fd5b823561244881612294565b915060208301356123f4816123ff565b634e487b7160e01b600052601160045260246000fd5b80820180821115610abd57610abd612458565b600181815b808511156124bc5781600019048211156124a2576124a2612458565b808516156124af57918102915b93841c9390800290612486565b509250929050565b6000826124d357506001610abd565b816124e057506000610abd565b81600181146124f657600281146125005761251c565b6001915050610abd565b60ff84111561251157612511612458565b50506001821b610abd565b5060208310610133831016604e8410600b841016171561253f575081810a610abd565b6125498383612481565b806000190482111561255d5761255d612458565b029392505050565b6000610bd560ff8416836124c4565b8082028115828204841417610abd57610abd612458565b81810381811115610abd57610abd612458565b6000826125bb57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016125fe576125fe612458565b5060010190565b60006020828403121561261757600080fd5b8151610bd5816123ff565b60006020828403121561263457600080fd5b8151610bd581612294565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561268f5784516001600160a01b03168352938301939183019160010161266a565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220f98423541f580d229bcaf1d321a799df7f16c2ea64c67ec3a33083b0f18098d864736f6c63430008130033

Deployed Bytecode Sourcemap

17069:15225:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18673:66;;;;;;;;;;-1:-1:-1;18673:66:0;;;;;;;;;;;;;;;;216:25:1;;;272:2;257:18;;250:34;;;;300:18;;;293:34;204:2;189:18;18673:66:0;;;;;;;;17952:56;;;;;;;;;;;;;;;;;;;484:25:1;;;472:2;457:18;17952:56:0;338:177:1;30798:161:0;;;;;;;;;;-1:-1:-1;30798:161:0;;;;;:::i;:::-;;:::i;:::-;;19866:83;;;;;;;;;;-1:-1:-1;19936:5:0;;;;;;;;;;;;-1:-1:-1;;;19936:5:0;;;;19866:83;;;;;;;:::i;31870:98::-;;;;;;;;;;-1:-1:-1;31870:98:0;;;;;:::i;:::-;;:::i;23468:235::-;;;;;;;;;;-1:-1:-1;23468:235:0;;;;;:::i;:::-;;:::i;20779:161::-;;;;;;;;;;-1:-1:-1;20779:161:0;;;;;:::i;:::-;;:::i;:::-;;;2452:14:1;;2445:22;2427:41;;2415:2;2400:18;20779:161:0;2287:187:1;20140:95:0;;;;;;;;;;-1:-1:-1;20220:7:0;;20140:95;;30640:149;;;;;;;;;;-1:-1:-1;30640:149:0;;;;;:::i;:::-;;:::i;17922:23::-;;;;;;;;;;;;;;;;31214:118;;;;;;;;;;-1:-1:-1;31214:118:0;;;;;:::i;:::-;;:::i;20949:424::-;;;;;;;;;;-1:-1:-1;20949:424:0;;;;;:::i;:::-;;:::i;22122:248::-;;;;;;;;;;-1:-1:-1;22122:248:0;;;;;:::i;:::-;;:::i;20048:83::-;;;;;;;;;;-1:-1:-1;20048:83:0;;17740:2;3082:36:1;;3070:2;3055:18;20048:83:0;2940:184:1;22719:473:0;;;;;;;;;;-1:-1:-1;22719:473:0;;;;;:::i;:::-;;:::i;21382:215::-;;;;;;;;;;-1:-1:-1;21382:215:0;;;;;:::i;:::-;;:::i;18373:31::-;;;;;;;;;;;;;;;;31580:172;;;;;;;;;;-1:-1:-1;31580:172:0;;;;;:::i;:::-;;:::i;18203:25::-;;;;;;;;;;;;;;;;17545:26;;;;;;;;;;-1:-1:-1;17545:26:0;;;;;;;;;;;18277:25;;;;;;;;;;;;;;;;22379:331;;;;;;;;;;-1:-1:-1;22379:331:0;;;;;:::i;:::-;;:::i;23336:123::-;;;;;;;;;;-1:-1:-1;23336:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23424:27:0;23400:4;23424:27;;;:18;:27;;;;;;;;;23336:123;18235:32;;;;;;;;;;;;;;;;17487:23;;;;;;;;;;-1:-1:-1;17487:23:0;;;;;;;;20244:198;;;;;;;;;;-1:-1:-1;20244:198:0;;;;;:::i;:::-;;:::i;15733:103::-;;;;;;;;;;;;;:::i;30968:118::-;;;;;;;;;;-1:-1:-1;30968:118:0;;;;;:::i;:::-;;:::i;21993:120::-;;;;;;;;;;-1:-1:-1;21993:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22085:20:0;22061:4;22085:20;;;:11;:20;;;;;;;;;21993:120;30483:148;;;;;;;;;;;;;:::i;18015:55::-;;;;;;;;;;;;;;;;15092:87;;;;;;;;;;-1:-1:-1;15138:7:0;15165:6;-1:-1:-1;;;;;15165:6:0;15092:87;;;-1:-1:-1;;;;;3686:32:1;;;3668:51;;3656:2;3641:18;15092:87:0;3522:203:1;17635:24:0;;;;;;;;;;-1:-1:-1;17635:24:0;;;;-1:-1:-1;;;;;17635:24:0;;;31470:101;;;;;;;;;;-1:-1:-1;31470:101:0;;;;;:::i;:::-;;:::i;19955:87::-;;;;;;;;;;-1:-1:-1;20027:7:0;;;;;;;;;;;;-1:-1:-1;;;20027:7:0;;;;19955:87;;31977:114;;;;;;;;;;-1:-1:-1;31977:114:0;;;;;:::i;:::-;;:::i;18417:31::-;;;;;;;;;;;;;;;;21606:378;;;;;;;;;;-1:-1:-1;21606:378:0;;;;;:::i;:::-;;:::i;17609:19::-;;;;;;;;;;-1:-1:-1;17609:19:0;;;;-1:-1:-1;;;;;17609:19:0;;;20451:167;;;;;;;;;;-1:-1:-1;20451:167:0;;;;;:::i;:::-;;:::i;18077:59::-;;;;;;;;;;;;;;;;31095:110;;;;;;;;;;-1:-1:-1;31095:110:0;;;;;:::i;:::-;;:::i;18331:28::-;;;;;;;;;;;;;;;;31341:120;;;;;;;;;;-1:-1:-1;31341:120:0;;;;;:::i;:::-;;:::i;32100:148::-;;;;;;;;;;-1:-1:-1;32100:148:0;;;;;:::i;:::-;;:::i;31761:100::-;;;;;;;;;;-1:-1:-1;31761:100:0;;;;;:::i;:::-;;:::i;20627:143::-;;;;;;;;;;-1:-1:-1;20627:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20735:18:0;;;20708:7;20735:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20627:143;17666:28;;;;;;;;;;-1:-1:-1;17666:28:0;;;;-1:-1:-1;;;;;17666:28:0;;;23201:126;;;;;;;;;;-1:-1:-1;23201:126:0;;;;;:::i;:::-;;:::i;18143:53::-;;;;;;;;;;;;;;;;15991:201;;;;;;;;;;-1:-1:-1;15991:201:0;;;;;:::i;:::-;;:::i;17581:21::-;;;;;;;;;;-1:-1:-1;17581:21:0;;;;;;;-1:-1:-1;;;;;17581:21:0;;;30798:161;14978:13;:11;:13::i;:::-;30875::::1;:25:::0;;-1:-1:-1;;;;;30875:25:0;;::::1;-1:-1:-1::0;;;;;;30875:25:0;;::::1;::::0;::::1;::::0;;:13:::1;30911:33:::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;30911:40:0::1;30875:25:::0;30911:40:::1;::::0;;30798:161::o;31870:98::-;14978:13;:11;:13::i;:::-;31941:10:::1;:19:::0;31870:98::o;23468:235::-;14978:13;:11;:13::i;:::-;23592:8;23578:11:::1;23585:4:::0;23578;:11:::1;:::i;:::-;:22;;;;:::i;:::-;23604:3;23578:29;23570:59;;;::::0;-1:-1:-1;;;23570:59:0;;5173:2:1;23570: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;;23570:59:0::1;;;;;;;;;23658:37;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;23640:15:::1;:55:::0;;;;;;;;23468:235::o;20779:161::-;20854:4;20871:39;13723:10;20894:7;20903:6;20871:8;:39::i;:::-;-1:-1:-1;20928:4:0;20779:161;;;;;:::o;30640:149::-;14978:13;:11;:13::i;:::-;30713:9:::1;:21:::0;;-1:-1:-1;;;;;30713:21:0;;::::1;-1:-1:-1::0;;;;;;30713:21:0;;::::1;::::0;::::1;::::0;;:9:::1;30745:29:::0;;;:18:::1;:29;::::0;;;;:36;;-1:-1:-1;;30745:36:0::1;30713:21:::0;30745:36:::1;::::0;;30640:149::o;31214:118::-;14978:13;:11;:13::i;:::-;31311::::1;17740:2;31311;:13;:::i;:::-;31302:22;::::0;:6;:22:::1;:::i;:::-;31284:15;:40:::0;-1:-1:-1;31214:118:0:o;20949:424::-;21055:4;21072:36;21082:6;21090:9;21101:6;21072:9;:36::i;:::-;-1:-1:-1;;;;;21149:19:0;;21122:24;21149:19;;;:11;:19;;;;;;;;13723:10;21149:33;;;;;;;;21201:26;;;;21193:79;;;;-1:-1:-1;;;21193:79:0;;7075:2:1;21193: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;;21193:79:0;6873:404:1;21193:79:0;21283:57;21292:6;13723:10;21314:25;21333:6;21314:16;:25;:::i;:::-;21283:8;:57::i;:::-;21361:4;21354:11;;;20949:424;;;;;;:::o;22122:248::-;22188:7;22227;;22216;:18;;22208:73;;;;-1:-1:-1;;;22208:73:0;;7617:2:1;22208: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;;22208:73:0;7415:406:1;22208:73:0;22292:19;22315:10;:8;:10::i;:::-;22292:33;-1:-1:-1;22343:19:0;22292:33;22343:7;:19;:::i;22719:473::-;14978:13;:11;:13::i;:::-;-1:-1:-1;;;;;22799:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22791:56;;;::::0;-1:-1:-1;;;22791:56:0;;8250:2:1;22791:56:0::1;::::0;::::1;8232:21:1::0;8289:2;8269:18;;;8262:30;8328:25;8308:18;;;8301:53;8371:18;;22791:56:0::1;8048:347:1::0;22791:56:0::1;22863:9;22858:327;22882:9;:16:::0;22878:20;::::1;22858:327;;;22940:7;-1:-1:-1::0;;;;;22924:23:0::1;:9;22934:1;22924:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22924:12:0::1;:23:::0;22920:254:::1;;22983:9;22993:16:::0;;:20:::1;::::0;23012:1:::1;::::0;22993:20:::1;:::i;:::-;22983:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22968:9:::1;:12:::0;;-1:-1:-1;;;;;22983:31:0;;::::1;::::0;22978:1;;22968:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22968:46:0::1;-1:-1:-1::0;;;;;22968:46:0;;::::1;;::::0;;23033:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23072:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23072:28:0::1;::::0;;23119:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23119:15:0;;;;;-1:-1:-1;;;;;;23119:15:0::1;::::0;;;;;22858:327:::1;22719:473:::0;:::o;22920:254::-:1;22900:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22858:327;;;;22719:473:::0;:::o;21382:215::-;13723:10;21470:4;21519:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21519:34:0;;;;;;;;;;21470:4;;21487:80;;21510:7;;21519:47;;21556:10;;21519:47;:::i;31580:172::-;14978:13;:11;:13::i;:::-;31692:6:::1;:27:::0;;-1:-1:-1;;;;;;31692:27:0::1;::::0;-1:-1:-1;;;;;31692:27:0;;::::1;;;::::0;;31730:4:::1;:14:::0;;-1:-1:-1;;;;;;31730:14:0::1;::::0;;;::::1;;::::0;;31580:172::o;22379:331::-;14978:13;:11;:13::i;:::-;-1:-1:-1;;;;;22460:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22459:21;22451:61;;;::::0;-1:-1:-1;;;22451:61:0;;9006:2:1;22451:61:0::1;::::0;::::1;8988:21:1::0;9045:2;9025:18;;;9018:30;9084:29;9064:18;;;9057:57;9131:18;;22451:61:0::1;8804:351:1::0;22451:61:0::1;-1:-1:-1::0;;;;;22526:16:0;::::1;22545:1;22526:16:::0;;;:7:::1;:16;::::0;;;;;:20;22523:108:::1;;-1:-1:-1::0;;;;;22602:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22582:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22563:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22523:108:::1;-1:-1:-1::0;;;;;22641:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22641:27:0::1;22664:4;22641:27:::0;;::::1;::::0;;;22679:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22679:23:0::1;::::0;;::::1;::::0;;22379:331::o;20244:198::-;-1:-1:-1;;;;;20334:20:0;;20310:7;20334:20;;;:11;:20;;;;;;;;20330:49;;;-1:-1:-1;;;;;;20363:16:0;;;;;:7;:16;;;;;;;20244:198::o;20330:49::-;-1:-1:-1;;;;;20417:16:0;;;;;;:7;:16;;;;;;20397:37;;:19;:37::i;15733:103::-;14978:13;:11;:13::i;:::-;15798:30:::1;15825:1;15798:18;:30::i;:::-;15733:103::o:0;30968:118::-;14978:13;:11;:13::i;:::-;31065::::1;17740:2;31065;:13;:::i;:::-;31056:22;::::0;:6;:22:::1;:::i;:::-;31041:12;:37:::0;-1:-1:-1;30968:118:0:o;30483:148::-;14978:13;:11;:13::i;:::-;30537:14:::1;:21:::0;;-1:-1:-1;;30569:18:0;;;;;30611:12:::1;30598:10;:25:::0;30483:148::o;31470:101::-;14978:13;:11;:13::i;:::-;31541:11:::1;:22:::0;;-1:-1:-1;;31541:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31470:101::o;31977:114::-;14978:13;:11;:13::i;:::-;32044:39:::1;::::0;32052:10:::1;::::0;32044:39;::::1;;;::::0;32073:9;;32044:39:::1;::::0;;;32073:9;32052:10;32044:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;21606:378:::0;13723:10;21699:4;21743:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21743:34:0;;;;;;;;;;21796:35;;;;21788:85;;;;-1:-1:-1;;;21788:85:0;;9362:2:1;21788: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;;21788:85:0;9160:401:1;21788:85:0;21884:67;13723:10;21907:7;21916:34;21935:15;21916:16;:34;:::i;21884:67::-;-1:-1:-1;21972:4:0;;21606:378;-1:-1:-1;;;21606:378:0:o;20451:167::-;20529:4;20546:42;13723:10;20570:9;20581:6;20546:9;:42::i;31095:110::-;14978:13;:11;:13::i;:::-;31184::::1;17740:2;31184;:13;:::i;:::-;31175:22;::::0;:6;:22:::1;:::i;:::-;31161:11;:36:::0;-1:-1:-1;31095:110:0:o;31341:120::-;14978:13;:11;:13::i;:::-;31440::::1;17740:2;31440;:13;:::i;:::-;31431:22;::::0;:6;:22:::1;:::i;:::-;31415:13;:38:::0;-1:-1:-1;31341:120:0:o;32100:148::-;14978:13;:11;:13::i;:::-;32199:41:::1;::::0;-1:-1:-1;;;32199:41:0;;-1:-1:-1;;;;;9758:32:1;;;32199:41:0::1;::::0;::::1;9740:51:1::0;9807:18;;;9800:34;;;32199:27:0;::::1;::::0;::::1;::::0;9713:18:1;;32199:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32100:148:::0;;;:::o;31761:100::-;14978:13;:11;:13::i;:::-;31833:11:::1;:20:::0;31761:100::o;23201:126::-;14978:13;:11;:13::i;:::-;-1:-1:-1;;;;;23283:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;23283:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23201:126::o;15991:201::-;14978:13;:11;:13::i;:::-;-1:-1:-1;;;;;16080:22:0;::::1;16072:73;;;::::0;-1:-1:-1;;;16072:73:0;;10297:2:1;16072: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;;16072:73:0::1;10095:402:1::0;16072:73:0::1;16156:28;16175:8;16156:18;:28::i;:::-;15991:201:::0;:::o;15257:132::-;15138:7;15165:6;-1:-1:-1;;;;;15165:6:0;13723:10;15321:23;15313:68;;;;-1:-1:-1;;;15313:68:0;;10704:2:1;15313:68:0;;;10686:21:1;;;10723:18;;;10716:30;10782:34;10762:18;;;10755:62;10834:18;;15313:68:0;10502:356:1;26258:335:0;-1:-1:-1;;;;;26351:19:0;;26343:68;;;;-1:-1:-1;;;26343:68:0;;11065:2:1;26343: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;;26343:68:0;10863:400:1;26343:68:0;-1:-1:-1;;;;;26430:21:0;;26422:68;;;;-1:-1:-1;;;26422:68:0;;11470:2:1;26422: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;;26422:68:0;11268:398:1;26422:68:0;-1:-1:-1;;;;;26501:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26553:32;;484:25:1;;;26553:32:0;;457:18:1;26553:32:0;;;;;;;26258:335;;;:::o;26605:1475::-;-1:-1:-1;;;;;26693:18:0;;26685:68;;;;-1:-1:-1;;;26685:68:0;;11873:2:1;26685: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;;26685:68:0;11671:401:1;26685:68:0;26781:1;26772:6;:10;26764:64;;;;-1:-1:-1;;;26764:64:0;;12279:2:1;26764: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;;26764:64:0;12077:405:1;26764:64:0;26857:15;26867:4;26857:9;:15::i;:::-;26847:6;:25;;26839:86;;;;-1:-1:-1;;;26839:86:0;;12689:2:1;26839: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;;26839:86:0;12487:413:1;26839:86:0;26942:6;;:11;;;;:29;;-1:-1:-1;26957:14:0;;;;;;;26942:29;26939:116;;;27019:12;27003:13;;26990:10;;:26;;;;:::i;:::-;:41;26987:56;;;27042:1;27033:6;:10;26987:56;-1:-1:-1;;;;;27106:24:0;;27068:12;27106:24;;;:18;:24;;;;;;;;27105:25;:52;;;;-1:-1:-1;;;;;;27135:22:0;;;;;;:18;:22;;;;;;;;27134:23;27105:52;27102:666;;;27181:14;;;;;;;27173:59;;;;-1:-1:-1;;;27173:59:0;;13107:2:1;27173:59:0;;;13089:21:1;;;13126:18;;;13119:30;13185:34;13165:18;;;13158:62;13237:18;;27173:59:0;12905:356:1;27173:59:0;27265:11;;27255:6;:21;;27247:63;;;;-1:-1:-1;;;27247:63:0;;13468:2:1;27247:63:0;;;13450:21:1;13507:2;13487:18;;;13480:30;13546:31;13526:18;;;13519:59;13595:18;;27247:63:0;13266:353:1;27247:63:0;27334:4;;-1:-1:-1;;;;;27328:10:0;;;27334:4;;27328:10;27325:102;;27374:15;;27364:6;27348:13;27358:2;27348:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;27340:87;;;;-1:-1:-1;;;27340:87:0;;13826:2:1;27340: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;;27340:87:0;13624:397:1;27340:87:0;-1:-1:-1;27482:4:0;;27452;;-1:-1:-1;;;;;27474:12:0;;;27482:4;;27474:12;:57;;;;;27519:12;27503:13;;27490:10;;:26;;;;:::i;:::-;:41;27474:57;27471:286;;;27561:5;27551:15;;27598:12;;27588:6;:22;27585:157;;27648:11;;27637:7;;:22;27634:88;;27672:11;;27661:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;27634:88:0;;-1:-1:-1;27634:88:0;;27721:1;27711:7;:11;27634:88;27781:12;27824:13;;27796:24;27814:4;27796:9;:24::i;:::-;27852:8;;-1:-1:-1;;27796:41:0;;-1:-1:-1;27852:8:0;;;;;27851:9;:24;;;;-1:-1:-1;27864:11:0;;;;27851:24;:35;;;;;27879:7;27851:35;:51;;;;-1:-1:-1;27898:4:0;;-1:-1:-1;;;;;27890:12:0;;;27898:4;;27890:12;;27851:51;:80;;;;-1:-1:-1;;;;;;27907:24:0;;;;;;:18;:24;;;;;;;;27906:25;27851:80;:107;;;;-1:-1:-1;;;;;;27936:22:0;;;;;;:18;:22;;;;;;;;27935:23;27851:107;27848:170;;;27974:32;27992:13;;27974:17;:32::i;:::-;28031:41;28046:4;28052:2;28056:6;28064:7;28031:14;:41::i;:::-;26674:1406;;26605:1475;;;:::o;25542:158::-;25583:7;25604:15;25621;25640:19;:17;:19::i;:::-;25603:56;;-1:-1:-1;25603:56:0;-1:-1:-1;25677:15:0;25603:56;;25677:15;:::i;:::-;25670:22;;;;25542:158;:::o;16352:191::-;16426:16;16445:6;;-1:-1:-1;;;;;16462:17:0;;;-1:-1:-1;;;;;;16462:17:0;;;;;;16495:40;;16445:6;;;;;;;16495:40;;16426:16;16495:40;16415:128;16352:191;:::o;29285:616::-;19001:8;:15;;-1:-1:-1;;19001:15:0;;;;;29386:21:::1;29421:24;29438:6:::0;29421:16:::1;:24::i;:::-;29459:20;29482:38;29506:14:::0;29482:21:::1;:38;:::i;:::-;29563:15;:19:::0;29459:61;;-1:-1:-1;29534:20:0::1;::::0;29557:25:::1;::::0;:3:::1;:25;:::i;:::-;29534:48;;29596:12;29612:1;29596:17:::0;29593:29:::1;;29615:7;;;;;29593:29;29667:19:::0;;29635:14:::1;::::0;29689:12;;29652:34:::1;::::0;:12;:34:::1;:::i;:::-;:49;;;;:::i;:::-;29635:66:::0;-1:-1:-1;29715:10:0;;29712:51:::1;;29735:9;::::0;29727:36:::1;::::0;-1:-1:-1;;;;;29735:9:0::1;29756:6:::0;29727:28:::1;:36::i;:::-;29777:18;29798:21;29813:6:::0;29798:12;:21:::1;:::i;:::-;29777:42:::0;-1:-1:-1;29833:14:0;;29830:63:::1;;29857:13;::::0;29849:44:::1;::::0;-1:-1:-1;;;;;29857:13:0::1;29882:10:::0;29849:32:::1;:44::i;:::-;29347:554;;;;;19027:1;-1:-1:-1::0;19039:8:0;:16;;-1:-1:-1;;19039:16:0;;;29285:616::o;28165:1111::-;28304:4;;28277:11;;-1:-1:-1;;;;;28291:17:0;;;28304:4;;28291:17;:32;;28318:5;28291:32;;;28311:4;28291:32;28277:46;;28334:28;28365:36;28376:7;28385;28394:6;28365:10;:36::i;:::-;28334:67;;28418:6;:17;;;;;28428:7;28418:17;:62;;;;;28468:12;28452:13;;28439:10;;:26;;;;:::i;:::-;:41;28418:62;28415:194;;;28523:10;;28509:11;;28499:7;;:21;;;;:::i;:::-;:34;28496:101;;;28545:10;;28535:7;:20;28496:101;;;28586:11;;28575:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;28496:101:0;-1:-1:-1;;;;;28626:19:0;;;;;;:11;:19;;;;;;;;28622:115;;;-1:-1:-1;;;;;28702:15:0;;;;;;:7;:15;;;;;;:23;;28718:7;;28702:23;:::i;:::-;-1:-1:-1;;;;;28684:15:0;;;;;;:7;:15;;;;;:41;28622:115;-1:-1:-1;;;;;28751:22:0;;;;;;:11;:22;;;;;;;;28747:130;;;28848:17;;;;-1:-1:-1;;;;;28829:18:0;;;;;;:7;:18;;;;;;:36;;28848:17;28829:36;:::i;:::-;-1:-1:-1;;;;;28808:18:0;;;;;;:7;:18;;;;;:57;28747:130;28924:9;;-1:-1:-1;;;;;28908:15:0;;28924:9;28908:15;;;:7;:15;;;;;;:25;;28924:9;28908:25;:::i;:::-;-1:-1:-1;;;;;28890:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;28984:17;;;28965:18;;;;;;;;;;:36;;28984:17;28965:36;:::i;:::-;-1:-1:-1;;;;;28944:18:0;;;;;;:7;:18;;;;;;;:57;;;;29018:6;;;:10;;;:24;;;29041:1;29032;:6;;;:10;29018:24;29015:56;;;29044:27;29056:1;:6;;;29064:1;:6;;;29044:11;:27::i;:::-;29095:1;29085;:7;;;:11;:26;;;;29110:1;29100;:7;;;:11;29085:26;29082:62;;;29113:31;29127:1;:7;;;29136:1;:7;;;29113:13;:31::i;:::-;29180:9;-1:-1:-1;;;;;29163:46:0;29172:6;-1:-1:-1;;;;;29163:46:0;;29191:1;:17;;;29163:46;;;;484:25:1;;472:2;457:18;;338:177;29163:46:0;;;;;;;;29250:4;-1:-1:-1;;;;;29225:40:0;29234:6;-1:-1:-1;;;;;29225:40:0;;29257:1;:7;;;29225:40;;;;484:25:1;;472:2;457:18;;338:177;29225:40:0;;;;;;;;28263:1013;;28165:1111;;;;:::o;25709:540::-;25806:7;;25842;;25759;;;;;25860:279;25884:9;:16;25880:20;;25860:279;;;25950:7;25926;:21;25934:9;25944:1;25934:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25934:12:0;25926:21;;;;;;;;;;;;;:31;;:66;;;25985:7;25961;:21;25969:9;25979:1;25969:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25969:12:0;25961:21;;;;;;;;;;;;;:31;25926:66;25922:97;;;26002:7;;26011;;25994:25;;;;;;;25709:540;;:::o;25922:97::-;26052:7;:21;26060:9;26070:1;26060:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26060:12:0;26052:21;;;;;;;;;;;;;26044:29;;:7;:29;:::i;:::-;26034:39;;26106:7;:21;26114:9;26124:1;26114:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26114:12:0;26106:21;;;;;;;;;;;;;26098:29;;:7;:29;:::i;:::-;26088:39;-1:-1:-1;25902:3:0;;;;:::i;:::-;;;;25860:279;;;;26171:7;;26163;;:15;;;;:::i;:::-;26153:7;:25;26149:56;;;26188:7;;26197;;26180:25;;;;;;25709:540;;:::o;26149:56::-;26224:7;;26233;;-1:-1:-1;25709:540:0;-1:-1:-1;25709:540:0:o;29910:564::-;30060:16;;;30074:1;30060:16;;;;;;;;30036:21;;30060:16;;;;;;;;;;-1:-1:-1;30060:16:0;30036:40;;30105:4;30087;30092:1;30087:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;30087:23:0;;;-1:-1:-1;;;;;30087:23:0;;;;;30131:6;;;;;;;;;-1:-1:-1;;;;;30131:6:0;-1:-1:-1;;;;;30131:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30121:4;30126:1;30121:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30121:23:0;;;:7;;;;;;;;;:23;30190:6;;30158:53;;30175:4;;30190:6;;;;30199:11;30158:8;:53::i;:::-;30251:6;;:215;;-1:-1:-1;;;30251:215:0;;:6;;;;-1:-1:-1;;;;;30251:6:0;;:57;;:215;;30323:11;;30349:1;;30393:4;;30420;;30440:15;;30251:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29965:509;29910:564;:::o;2184:340::-;2294:6;2270:21;:30;2266:111;;;2324:41;;-1:-1:-1;;;2324:41:0;;2359:4;2324:41;;;3668:51:1;3641:18;;2324:41:0;3522:203:1;2266:111:0;2390:12;2408:9;-1:-1:-1;;;;;2408:14:0;2430:6;2408:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2389:52;;;2457:7;2452:65;;2488:17;;-1:-1:-1;;;2488:17:0;;;;;;;;;;;2452:65;2255:269;2184:340;;:::o;24066:364::-;24152:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24152:36:0;24213:37;24225:7;24234;24243:6;24213:11;:37::i;:::-;24201:49;;24343:52;24355:9;24366:7;24375;24384:10;:8;:10::i;:::-;24343:11;:52::i;:::-;24324:15;;;24261:134;24308:14;;;24261:134;24281:25;;;24261:134;;;24066:364;;;;;:::o;23712:116::-;23790:4;23780:7;;:14;;;;;;;:::i;:::-;;;;;;;;23816:4;23805:8;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;23712:116:0:o;23837:220::-;23934:4;23914:26;;;;:11;:26;;;;;;;;23911:97;;;23982:4;23966:22;;;;:7;:22;;;;;:30;;23990:6;;23966:22;:30;;23990:6;;23966:30;:::i;:::-;;;;-1:-1:-1;;23911:97:0;24034:4;24018:22;;;;:7;:22;;;;;:31;;24043:6;;24018:22;:31;;24043:6;;24018:31;:::i;24439:580::-;24526:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24526:28:0;24574:7;24570:86;;24596:17;;;:27;;;24636:8;;24570:86;24669:15;24687:6;:25;;24706:6;;24687:25;;;24696:7;;24687:25;24669:43;;24723:14;24772:3;24750:15;:19;;;24740:7;:29;;;;:::i;:::-;:35;;;;:::i;:::-;24723:52;;24786:15;24844:3;24821:15;:19;;;24815:3;:25;;;;:::i;:::-;24804:37;;:7;:37;:::i;:::-;:43;;;;:::i;:::-;24786:61;-1:-1:-1;24886:4:0;24867:16;24877:6;24867:7;:16;:::i;:::-;:23;;;;:::i;:::-;24858:6;;;:32;24931:4;24911:17;24921:7;24911;:17;:::i;:::-;:24;;;;:::i;:::-;24901:7;;;:34;;;24976:6;;;;24966:16;;:7;:16;:::i;:::-;:26;;;;:::i;:::-;24946:17;;;:46;-1:-1:-1;;;24439:580:0;;;;;:::o;25028:505::-;25153:15;;;;25245:19;25253:11;25245:7;:19;:::i;:::-;25235:29;;25282:7;25278:67;;-1:-1:-1;25311:7:0;;-1:-1:-1;25329:1:0;;-1:-1:-1;25329:1:0;25304:29;;25278:67;25372:11;25365:1;:6;;;:18;;;;:::i;:::-;25358:25;;25410:11;25402:1;:7;;;:19;;;;:::i;:::-;25394:27;-1:-1:-1;25394:27:0;25451:12;25459:4;25451:7;:12;:::i;:::-;:18;;;;:::i;:::-;25432:37;;25028: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://f98423541f580d229bcaf1d321a799df7f16c2ea64c67ec3a33083b0f18098d8
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.