ETH Price: $2,811.53 (+8.34%)
 

Overview

Max Total Supply

100,000,000 NASDAQ

Holders

13

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
NASDAQ

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-12
*/

pragma solidity 0.8.20;

// SPDX-License-Identifier: MIT

/**


Website: https://nasdaqerc.com/
X (Twitter): https://twitter.com/nasdaqcoineth
Telegram: https://t.me/nasdaqerc


**/



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

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20{
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

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

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

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

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

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

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

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, 'SafeMath: subtraction overflow');
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, 'SafeMath: division by zero');
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, 'SafeMath: modulo by zero');
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

interface DividendPayingContractOptionalInterface {
  function withdrawableDividendOf(address _owner) external view returns(uint256);
  function withdrawnDividendOf(address _owner) external view returns(uint256);
  function accumulativeDividendOf(address _owner) external view returns(uint256);
}

interface DividendPayingContractInterface {
  function dividendOf(address _owner) external view returns(uint256);
  function distributeDividends() external payable;
  function withdrawDividend() external;
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );
  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount
  );
}

contract DividendPayingContract is DividendPayingContractInterface, DividendPayingContractOptionalInterface, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 constant internal magnitude = 2**128;

    uint256 internal magnifiedDividendPerShare;
                                                                            
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    
    mapping (address => uint256) public holderBalance;
    uint256 public totalBalance;

    uint256 public totalDividendsDistributed;

    receive() external payable {
        distributeDividends();
    }

    function distributeDividends() public override payable {
        if(totalBalance > 0 && msg.value > 0){
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalBalance
            );
            emit DividendsDistributed(msg.sender, msg.value);

            totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
        }
    }

    function withdrawDividend() external virtual override {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
        withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);

        emit DividendWithdrawn(user, _withdrawableDividend);
        (bool success,) = user.call{value: _withdrawableDividend}("");

        if(!success) {
            withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
            return 0;
        }

        return _withdrawableDividend;
        }

        return 0;
    }

    function withdrawDividendOfUserForCompound(address payable user) external onlyOwner returns (uint256 _withdrawableDividend) {
        _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user] + _withdrawableDividend;
            emit DividendWithdrawn(user, _withdrawableDividend);
        }
        (bool success,) = owner().call{value: _withdrawableDividend}("");
        if(!success) {
            withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
            return 0;
        }
    }

    function dividendOf(address _owner) external view override returns(uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view override returns(uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) external view override returns(uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view override returns(uint256) {
        return magnifiedDividendPerShare.mul(holderBalance[_owner]).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function _increase(address account, uint256 value) internal {
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
    }

    function _reduce(address account, uint256 value) internal {
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = holderBalance[account];
        holderBalance[account] = newBalance;
        if(newBalance > currentBalance) {
        uint256 increaseAmount = newBalance.sub(currentBalance);
        _increase(account, increaseAmount);
        totalBalance += increaseAmount;
        } else if(newBalance < currentBalance) {
        uint256 reduceAmount = currentBalance.sub(newBalance);
        _reduce(account, reduceAmount);
        totalBalance -= reduceAmount;
        }
    }
}


contract RevShare is DividendPayingContract {

    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    mapping (address => bool) public excludedFromDividends;

    constructor() {}

    function getAccount(address _account)
        public view returns (
            address account,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 balance) {
        account = _account;

        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);

        balance = holderBalance[account];
    }
    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
        if(excludedFromDividends[account]) {
    		return;
    	}

        _setBalance(account, newBalance);

    	processAccount(account, true);
    }
    
    function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);

    	if(amount > 0) {
            emit Claim(account, amount, automatic);
    		return true;
    	}

    	return false;
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return totalDividendsDistributed;
    }

	function dividendTokenBalanceOf(address account) public view returns (uint256) {
		return holderBalance[account];
	}

    function getNumberOfDividends() external view returns(uint256) {
        return totalBalance;
    }

    function excludeFromDividends(address account) external onlyOwner {
    	excludedFromDividends[account] = true;

    	_setBalance(account, 0);
    }

    function includeInDividends(address account) external onlyOwner {
    	require(excludedFromDividends[account]);
    	excludedFromDividends[account] = false;
        _setBalance(account, IERC20(owner()).balanceOf(account)); // sets balance back to token balance
    }
}

contract NASDAQ is ERC20, Ownable {

    mapping (address => bool) public excludedFromFees;
    mapping (address => bool) public excludedFromLimits;

    bool public launched;

    mapping (address => bool) public isAMMPair;

    address public mktingAddress;
    address public devAddress;

    Tax public buyTax;
    Tax public sellTax;

    RevShare public revShare;

    TokenDistributionForTax public tokensForTax;

    TxLimits public txLimits;
    bool public txLimitsActive = true;

    mapping(address => uint256) private _holderLastTransferBlock; // MEV protection
    bool public antiSandwichEnabled = true;

    uint256 public swapTokensAtAmount;

    address public pair;
    IDexRouter public dexRouter;
    address public immutable WETH;


    uint64 public constant FEE_DIVISOR = 10000;

    // structs

    struct TxLimits {
        uint128 transferLimit;
        uint128 walletLimit;
    }

    struct Tax {
        uint48 mktingTax;
        uint48 devTax;
        uint48 lpTax;
        uint48 revShareTax;
        uint48 totalTax;
    }

    struct TokenDistributionForTax {
        uint64 tokensForMkting;
        uint64 tokensForLP;
        uint64 tokensForDev;
        uint64 tokensForRevShare;
        bool gasSaver;
    }

    // events

    event UpdatedTransferLimit(uint newMax);
    event UpdatedWalletLimit(uint newMax);
    event SetExcludedFromFees(address _address, bool _isExcluded);
    event SetExcludedFromLimits(address _address, bool _isExcluded);
    event RemovedLimits();
    event BuyTaxUpdated(uint newAmount);
    event SellTaxUpdated(uint newAmount);

    // constructor

    constructor()
        ERC20("National Association of Securities Dealers Automated Quotations", "NASDAQ")
    {   
        _mint(msg.sender, 100_000_000 * 1e18);

        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Chain not configured");
        }

        revShare = new RevShare();

        dexRouter = IDexRouter(_v2Router);

        txLimits.transferLimit = uint128(totalSupply() * 20 / 1000);
        txLimits.walletLimit = uint128(totalSupply() * 2 / 100);
        swapTokensAtAmount = totalSupply() * 25 / 100000;

        mktingAddress = 0x3998599eDe5533b9d7Cf3F758Fc4BAAB94afc6f6; // update
        devAddress = 0x3998599eDe5533b9d7Cf3F758Fc4BAAB94afc6f6; // update

        buyTax.mktingTax = 600;
        buyTax.lpTax = 300;
        buyTax.devTax = 300;
        buyTax.revShareTax = 300;
        buyTax.totalTax = buyTax.mktingTax + buyTax.lpTax + buyTax.devTax + buyTax.revShareTax;

        sellTax.mktingTax = 600;
        sellTax.lpTax = 300;
        sellTax.devTax = 300;
        sellTax.revShareTax = 300;
        sellTax.totalTax = sellTax.mktingTax + sellTax.lpTax + sellTax.devTax + buyTax.revShareTax + sellTax.revShareTax;

        tokensForTax.gasSaver = true;

        WETH = dexRouter.WETH();
        pair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[pair] = true;

        excludedFromLimits[pair] = true;
        excludedFromLimits[msg.sender] = true;
        excludedFromLimits[address(this)] = true;
        excludedFromLimits[_v2Router] = true;

        excludedFromFees[msg.sender] = true;
        excludedFromFees[address(this)] = true;
        excludedFromFees[address(0xdead)] = true;
        excludedFromFees[_v2Router] = true;

        revShare.excludeFromDividends(address(this));
        revShare.excludeFromDividends(address(pair));
        revShare.excludeFromDividends(address(0xdead));
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!excludedFromFees[from] && !excludedFromFees[to]){
            require(launched, "Trading not active");
            checkLimits(from, to, amount);
            amount -= handleTax(from, to, amount);
        }

        super._transfer(from,to,amount);

        revShare.setBalance(payable(to), balanceOf(to));
        revShare.setBalance(payable(from), balanceOf(from));
    }

    function checkLimits(address from, address to, uint256 amount) internal {
        if(txLimitsActive){
            bool exFromLimitsTo = excludedFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);
            TxLimits memory _txLimits = txLimits;
            // buy
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount <= _txLimits.transferLimit, "Max Txn");
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !excludedFromLimits[from]) {
                require(amount <= _txLimits.transferLimit, "Max Txn");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            }
        }

        if (antiSandwichEnabled){
            if(isAMMPair[to]){
                require(_holderLastTransferBlock[from] < block.number, "Anti MEV");
            } else {
                _holderLastTransferBlock[to] = block.number;
                _holderLastTransferBlock[tx.origin] = block.number;
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        if(balanceOf(address(this)) >= swapTokensAtAmount && !isAMMPair[from]) {
            convertTax();
        }
        
        uint128 tax = 0;

        Tax memory taxes;

        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }

        if(taxes.totalTax > 0){
            TokenDistributionForTax memory tokensForTaxUpdate = tokensForTax;
            tax = uint128(amount * taxes.totalTax / FEE_DIVISOR);
            tokensForTaxUpdate.tokensForLP += uint64(tax * taxes.lpTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForMkting += uint64(tax * taxes.mktingTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForDev += uint64(tax * taxes.devTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForRevShare += uint64(tax * taxes.revShareTax / taxes.totalTax / 1e9);
            tokensForTax = tokensForTaxUpdate;
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    function swapTokensForETH(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function convertTax() private {

        uint256 contractBalance = balanceOf(address(this));
        TokenDistributionForTax memory tokensForTaxMem = tokensForTax;
        uint256 totalTokensToSwap = tokensForTaxMem.tokensForLP + tokensForTaxMem.tokensForMkting + tokensForTaxMem.tokensForDev + tokensForTaxMem.tokensForRevShare;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }

        if(tokensForTaxMem.tokensForLP > 0){
            uint256 lpTokens = contractBalance * tokensForTaxMem.tokensForLP / totalTokensToSwap;
            super._transfer(address(this), pair, lpTokens);
            try ILpPair(pair).sync(){} catch {}
            contractBalance -= lpTokens;
            totalTokensToSwap -= tokensForTaxMem.tokensForLP;
        }

        if(contractBalance > 0){

            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            bool success;

            if(tokensForTaxMem.tokensForDev > 0){
                (success,) = devAddress.call{value: ethBalance * tokensForTaxMem.tokensForDev / totalTokensToSwap}("");  
            }

            if(tokensForTaxMem.tokensForRevShare > 0){
                (success,) = address(revShare).call{value: ethBalance * tokensForTaxMem.tokensForRevShare/ totalTokensToSwap}("");  
            }

            ethBalance = address(this).balance;

            if(ethBalance > 0){
                (success,) = mktingAddress.call{value: ethBalance}("");  
            }
        }

        tokensForTaxMem.tokensForLP = 0;
        tokensForTaxMem.tokensForMkting = 0;
        tokensForTaxMem.tokensForDev = 0;
        tokensForTaxMem.tokensForRevShare = 0;

        tokensForTax = tokensForTaxMem;
    }

    // owner functions
    function setExcludedFromFee(address _address, bool _isExcluded) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexcluded contract");
        excludedFromFees[_address] = _isExcluded;
        emit SetExcludedFromFees(_address, _isExcluded);
    }

    function setExcludedFromLimit(address _address, bool _isExcluded) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExcluded){
            require(_address != pair, "Cannot remove pair");
        }
        excludedFromLimits[_address] = _isExcluded;
        emit SetExcludedFromLimits(_address, _isExcluded);
    }

    function changeTransferLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.transferLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedTransferLimit(txLimits.transferLimit);
    }

    function changeWalletLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.walletLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(txLimits.walletLimit);
    }

    function changeSwapTokensAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
    }

    function changeSellTax(uint48 _mktingTax, uint48 _lpTax, uint48 _devTax, uint48 _revShareTax) external onlyOwner {
        Tax memory taxes;
        taxes.mktingTax = _mktingTax;
        taxes.lpTax = _lpTax;
        taxes.devTax = _devTax;
        taxes.revShareTax = _revShareTax;
        taxes.totalTax = _mktingTax + _lpTax + _devTax + _revShareTax;
        require(taxes.totalTax  <= 10000, "Keep tax below 10%");
        emit SellTaxUpdated(taxes.totalTax);
        sellTax = taxes;
    }

    function changeBuyTax(uint48 _mktingTax, uint48 _lpTax, uint48 _devTax, uint48 _revShareTax) external onlyOwner {
        Tax memory taxes;
        taxes.mktingTax = _mktingTax;
        taxes.lpTax = _lpTax;
        taxes.devTax = _devTax;
        taxes.revShareTax = _revShareTax;
        taxes.totalTax = _mktingTax + _lpTax + _devTax + _revShareTax;
        require(taxes.totalTax  <= 10000, "Keep tax below 10%");
        emit BuyTaxUpdated(taxes.totalTax);
        buyTax = taxes;
    }

    function setLaunched() external onlyOwner {
        require(!launched, "Trading already live");
        launched = true;
    }

    function removeTxLimits() external onlyOwner {
        txLimitsActive = false;
        TxLimits memory _txLimits;
        uint256 supply = totalSupply();
        _txLimits.transferLimit = uint128(supply);
        _txLimits.walletLimit = uint128(supply);
        txLimits = _txLimits;
        emit RemovedLimits();
    }

    function updateSandwichBlockerEnabled(bool _enabled) external onlyOwner {
        antiSandwichEnabled = _enabled;
    }

    function updateMktingAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        mktingAddress = _address;
    }

    function updateDevAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        devAddress = _address;
    }

    receive() payable external {}

    // dividend functions

    function claim() external {
        revShare.processAccount(payable(msg.sender), false);
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return revShare.totalDividendsDistributed();
    }

    function withdrawableDividendOf(address account) public view returns(uint256) {
    	return revShare.withdrawableDividendOf(account);
  	}

	function dividendTokenBalanceOf(address account) public view returns (uint256) {
		return revShare.holderBalance(account);
	}

    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            uint256,
            uint256,
            uint256) {
        return revShare.getAccount(account);
    }
    
    function getNumberOfDividends() external view returns(uint256) {
        return revShare.totalBalance();
    }

    function excludeFromDividends(address _wallet) external onlyOwner {
        revShare.excludeFromDividends(_wallet);
    }

     function includeInDividends(address _wallet) external onlyOwner {
        revShare.includeInDividends(_wallet);
    }

    function compound(uint256 minOutput) external {
        uint256 amountEthForCompound = revShare.withdrawDividendOfUserForCompound(payable(msg.sender));
        if(amountEthForCompound > 0){
            buyBackTokens(amountEthForCompound, minOutput, msg.sender);
        } else {
            revert("No rewards");
        }
    }

    function buyBackTokens(uint256 ethAmountInWei, uint256 minOut, address to) internal {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            minOut,
            path,
            address(to),
            block.timestamp
        );
    }

    // helper views

    function getCompoundOutputByEthAmount(uint256 rewardAmount) external view returns(uint256) {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        uint256[] memory amounts = dexRouter.getAmountsOut(rewardAmount, path);
        return amounts[1] - (amounts[1] * (buyTax.totalTax + 50) / FEE_DIVISOR);
    }

    function getCompoundOutputByWallet(address wallet) external view returns(uint256) {
        uint256 rewardAmount = withdrawableDividendOf(wallet);
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        uint256[] memory amounts = dexRouter.getAmountsOut(rewardAmount, path);
        return amounts[1] - (amounts[1] * (buyTax.totalTax + 50) / FEE_DIVISOR);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"BuyTaxUpdated","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SellTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"SetExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"SetExcludedFromLimits","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedTransferLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"antiSandwichEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint48","name":"mktingTax","type":"uint48"},{"internalType":"uint48","name":"devTax","type":"uint48"},{"internalType":"uint48","name":"lpTax","type":"uint48"},{"internalType":"uint48","name":"revShareTax","type":"uint48"},{"internalType":"uint48","name":"totalTax","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint48","name":"_mktingTax","type":"uint48"},{"internalType":"uint48","name":"_lpTax","type":"uint48"},{"internalType":"uint48","name":"_devTax","type":"uint48"},{"internalType":"uint48","name":"_revShareTax","type":"uint48"}],"name":"changeBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"_mktingTax","type":"uint48"},{"internalType":"uint48","name":"_lpTax","type":"uint48"},{"internalType":"uint48","name":"_devTax","type":"uint48"},{"internalType":"uint48","name":"_revShareTax","type":"uint48"}],"name":"changeSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"changeSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"changeTransferLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minOutput","type":"uint256"}],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"getCompoundOutputByEthAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getCompoundOutputByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"includeInDividends","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":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revShare","outputs":[{"internalType":"contract RevShare","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint48","name":"mktingTax","type":"uint48"},{"internalType":"uint48","name":"devTax","type":"uint48"},{"internalType":"uint48","name":"lpTax","type":"uint48"},{"internalType":"uint48","name":"revShareTax","type":"uint48"},{"internalType":"uint48","name":"totalTax","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setExcludedFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLaunched","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint64","name":"tokensForMkting","type":"uint64"},{"internalType":"uint64","name":"tokensForLP","type":"uint64"},{"internalType":"uint64","name":"tokensForDev","type":"uint64"},{"internalType":"uint64","name":"tokensForRevShare","type":"uint64"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimits","outputs":[{"internalType":"uint128","name":"transferLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"txLimitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateMktingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSandwichBlockerEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260128054600160ff1991821681179092556014805490911690911790553480156200002d575f80fd5b506040518060600160405280603f81526020016200576d603f91396040805180820190915260068152654e415344415160d01b6020820152600362000073838262000a55565b50600462000082828262000a55565b5050505f62000096620007bb60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000fa336a52b7d2dcc80cd2e4000000620007bf565b5f46600103620001205750737a250d5630b4cf539739df2c5dacb4c659f2488d62000192565b46600503620001455750737a250d5630b4cf539739df2c5dacb4c659f2488d62000192565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b604051620001a090620009a7565b604051809103905ff080158015620001ba573d5f803e3d5ffd5b50600e80546001600160a01b03199081166001600160a01b0393841617909155601780549091169183169190911790556103e8620001f760025490565b6200020490601462000b31565b62000210919062000b51565b601180546001600160801b0319166001600160801b039290921691909117905560646200023c60025490565b6200024990600262000b31565b62000255919062000b51565b601180546001600160801b03928316600160801b029216919091179055620186a06200028060025490565b6200028d90601962000b31565b62000299919062000b51565b601555600a8054733998599ede5533b9d7cf3f758fc4baab94afc6f66001600160a01b03199182168117909255600b80549091169091179055600c80546001600160c01b03191673012c00000000012c00000000012c000000000258179081905565ffffffffffff600160901b82048116916601000000000000810482169162000337916c0100000000000000000000000090041661025862000b71565b62000343919062000b71565b6200034f919062000b71565b600c805465ffffffffffff60c01b1916600160c01b65ffffffffffff938416021790819055600d80546001600160c01b03191673012c00000000012c00000000012c0000000002581790819055600160901b808204841693920482169166010000000000008204811691620003d9916c010000000000000000000000009091041661025862000b71565b620003e5919062000b71565b620003f1919062000b71565b620003fd919062000b71565b600d805465ffffffffffff92909216600160c01b0265ffffffffffff60c01b199092169190911790556010805460ff19166001179055601754604080516315ab88c960e31b815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa1580156200047c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004a2919062000b9a565b6001600160a01b039081166080526017546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa158015620004f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000517919062000b9a565b6080516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af115801562000566573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200058c919062000b9a565b601680546001600160a01b0319166001600160a01b0392831690811782555f908152600960209081526040808320805460ff19908116600190811790925594548616845260078352818420805486168217905533808552828520805487168317905530808652838620805488168417905588881680875284872080548916851790559186526006909452828520805487168317905583855282852080548716831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548716831790558452928190208054909416909217909255600e54905163031e79db60e41b81526004810192909252909116906331e79db0906024015f604051808303815f87803b158015620006a5575f80fd5b505af1158015620006b8573d5f803e3d5ffd5b5050600e5460165460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db091506024015f604051808303815f87803b15801562000703575f80fd5b505af115801562000716573d5f803e3d5ffd5b5050600e5460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db091506024015f604051808303815f87803b1580156200075f575f80fd5b505af115801562000772573d5f803e3d5ffd5b50506017546200079192503091506001600160a01b03165f1962000880565b601754620007b49033906001600160a01b0316620007ae60025490565b62000880565b5062000bdf565b3390565b6001600160a01b038216620008175760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000189565b8060025f8282546200082a919062000bc9565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316620008e45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000189565b6001600160a01b038216620009475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000189565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61114c806200462183390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620009de57607f821691505b602082108103620009fd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000a50575f81815260208120601f850160051c8101602086101562000a2b5750805b601f850160051c820191505b8181101562000a4c5782815560010162000a37565b5050505b505050565b81516001600160401b0381111562000a715762000a71620009b5565b62000a898162000a828454620009c9565b8462000a03565b602080601f83116001811462000abf575f841562000aa75750858301515b5f19600386901b1c1916600185901b17855562000a4c565b5f85815260208120601f198616915b8281101562000aef5788860151825594840194600190910190840162000ace565b508582101562000b0d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000b4b5762000b4b62000b1d565b92915050565b5f8262000b6c57634e487b7160e01b5f52601260045260245ffd5b500490565b65ffffffffffff81811683821601908082111562000b935762000b9362000b1d565b5092915050565b5f6020828403121562000bab575f80fd5b81516001600160a01b038116811462000bc2575f80fd5b9392505050565b8082018082111562000b4b5762000b4b62000b1d565b608051613a2262000bff5f395f8181610918015261328d0152613a225ff3fe608060405260043610610344575f3560e01c806380dee257116101bd578063b2a9c0c0116100f2578063dbe66ca011610092578063e8cd2fec1161006d578063e8cd2fec14610ac6578063f270fde414610adf578063f2fde38b14610b29578063fd74dd2914610b48575f80fd5b8063dbe66ca014610a64578063dd62ed3e14610a92578063e2f4560514610ab1575f80fd5b8063c0f306ef116100cd578063c0f306ef146109c5578063ca13a70e146109e4578063cc1776d314610a03578063d8fb9cc414610a4b575f80fd5b8063b2a9c0c014610968578063bd9dfecc14610987578063bf78019b146109a6575f80fd5b8063a8aa1b311161015d578063aa5f7e2611610138578063aa5f7e261461089f578063ad56c13c146108be578063ad5c464814610907578063b0249cc61461093a575f80fd5b8063a8aa1b3114610842578063a8b9d24014610861578063a9059cbb14610880575f80fd5b80639507b19b116101985780639507b19b146107ce57806395d89b41146107e25780639e93ad8e146107f6578063a457c2d714610823575f80fd5b806380dee2571461077357806385033762146107925780638da5cb5b146107b1575f80fd5b806339509351116102935780636843cd8411610233578063715018a61161020e578063715018a61461070457806371778e7d146107185780637b812b411461072c5780638091f3bf1461075a575f80fd5b80636843cd84146106305780636d7adcad1461064f57806370a08231146106d0575f80fd5b80634b833d641161026e5780634b833d641461055d5780634e71d92d1461057c5780634f7041a5146105905780636612e66f14610611575f80fd5b806339509351146105005780633ad10ef61461051f5780634008c2f01461053e575f80fd5b806318160ddd116102fe57806323b872dd116102d957806323b872dd1461049357806330bb4cff146104b2578063313ce567146104c657806331e79db0146104e1575f80fd5b806318160ddd146104415780631b03ddc1146104555780631f903dfa14610474575f80fd5b80630106aaef1461034f57806304816a4e1461036557806306fdde03146103845780630758d924146103ae578063095ea7b3146103e557806314bb4edd14610414575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b50610363610b67565b005b348015610370575f80fd5b5061036361037f366004613335565b610c0f565b34801561038f575f80fd5b50610398610d2a565b6040516103a59190613362565b60405180910390f35b3480156103b9575f80fd5b506017546103cd906001600160a01b031681565b6040516001600160a01b0390911681526020016103a5565b3480156103f0575f80fd5b506104046103ff3660046133c1565b610dba565b60405190151581526020016103a5565b34801561041f575f80fd5b5061043361042e3660046133eb565b610dd3565b6040519081526020016103a5565b34801561044c575f80fd5b50600254610433565b348015610460575f80fd5b50600e546103cd906001600160a01b031681565b34801561047f575f80fd5b50600a546103cd906001600160a01b031681565b34801561049e575f80fd5b506104046104ad366004613406565b610fc1565b3480156104bd575f80fd5b50610433610fe4565b3480156104d1575f80fd5b50604051601281526020016103a5565b3480156104ec575f80fd5b506103636104fb3660046133eb565b611054565b34801561050b575f80fd5b5061040461051a3660046133c1565b6110dc565b34801561052a575f80fd5b50600b546103cd906001600160a01b031681565b348015610549575f80fd5b50610433610558366004613444565b6110fd565b348015610568575f80fd5b506103636105773660046133eb565b6112de565b348015610587575f80fd5b5061036361136f565b34801561059b575f80fd5b50600c546105d89065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b8104821691600160c01b9091041685565b6040805165ffffffffffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103a5565b34801561061c575f80fd5b5061036361062b366004613468565b6113e3565b34801561063b575f80fd5b5061043361064a3660046133eb565b61150d565b34801561065a575f80fd5b50600f54601054610695916001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b909104169060ff1685565b604080516001600160401b0396871681529486166020860152928516928401929092529092166060820152901515608082015260a0016103a5565b3480156106db575f80fd5b506104336106ea3660046133eb565b6001600160a01b03165f9081526020819052604090205490565b34801561070f575f80fd5b5061036361157a565b348015610723575f80fd5b506104336115ed565b348015610737575f80fd5b506104046107463660046133eb565b60076020525f908152604090205460ff1681565b348015610765575f80fd5b506008546104049060ff1681565b34801561077e575f80fd5b5061036361078d3660046134b9565b611634565b34801561079d575f80fd5b506103636107ac3660046133eb565b6117f1565b3480156107bc575f80fd5b506005546001600160a01b03166103cd565b3480156107d9575f80fd5b50610363611882565b3480156107ed575f80fd5b50610398611905565b348015610801575f80fd5b5061080b61271081565b6040516001600160401b0390911681526020016103a5565b34801561082e575f80fd5b5061040461083d3660046133c1565b611914565b34801561084d575f80fd5b506016546103cd906001600160a01b031681565b34801561086c575f80fd5b5061043361087b3660046133eb565b61198e565b34801561088b575f80fd5b5061040461089a3660046133c1565b6119c0565b3480156108aa575f80fd5b506103636108b9366004613444565b6119cd565b3480156108c9575f80fd5b506108dd6108d83660046133eb565b611a84565b604080516001600160a01b03909516855260208501939093529183015260608201526080016103a5565b348015610912575f80fd5b506103cd7f000000000000000000000000000000000000000000000000000000000000000081565b348015610945575f80fd5b506104046109543660046133eb565b60096020525f908152604090205460ff1681565b348015610973575f80fd5b50610363610982366004613444565b611b05565b348015610992575f80fd5b506103636109a13660046134b9565b611c50565b3480156109b1575f80fd5b506103636109c0366004613468565b611e0d565b3480156109d0575f80fd5b506103636109df3660046133eb565b611f2f565b3480156109ef575f80fd5b506103636109fe36600461350a565b611f8b565b348015610a0e575f80fd5b50600d546105d89065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b8104821691600160c01b9091041685565b348015610a56575f80fd5b506014546104049060ff1681565b348015610a6f575f80fd5b50610404610a7e3660046133eb565b60066020525f908152604090205460ff1681565b348015610a9d575f80fd5b50610433610aac366004613525565b611fc8565b348015610abc575f80fd5b5061043360155481565b348015610ad1575f80fd5b506012546104049060ff1681565b348015610aea575f80fd5b50601154610b09906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016103a5565b348015610b34575f80fd5b50610363610b433660046133eb565b611ff2565b348015610b53575f80fd5b50610363610b62366004613335565b6120dc565b6005546001600160a01b03163314610b9a5760405162461bcd60e51b8152600401610b9190613551565b60405180910390fd5b6012805460ff19169055604080518082019091525f80825260208201525f610bc160025490565b6001600160801b03811680845260208401819052600160801b8102176011556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b6005546001600160a01b03163314610c395760405162461bcd60e51b8152600401610b9190613551565b610c456012600a61367a565b6103e8610c5160025490565b610c5c906001613688565b610c6691906136b3565b610c7091906136b3565b816001600160801b03161015610cb25760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610b91565b610cbe6012600a61367a565b610cd1906001600160801b038316613688565b601180546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788906020015b60405180910390a150565b606060038054610d39906136c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d65906136c6565b8015610db05780601f10610d8757610100808354040283529160200191610db0565b820191905f5260205f20905b815481529060010190602001808311610d9357829003601f168201915b5050505050905090565b5f33610dc78185856121ed565b60019150505b92915050565b5f80610dde8361198e565b6040805160028082526060820183529293505f9290916020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190613712565b815f81518110610e8057610e8061372d565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610eb457610eb461372d565b6001600160a01b03928316602091820292909201015260175460405163d06ca61f60e01b81525f92919091169063d06ca61f90610ef79086908690600401613783565b5f60405180830381865afa158015610f11573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f38919081019061379b565b600c5490915061271090610f5c90600160c01b900465ffffffffffff166032613853565b65ffffffffffff1682600181518110610f7757610f7761372d565b6020026020010151610f899190613688565b610f9391906136b3565b81600181518110610fa657610fa661372d565b6020026020010151610fb89190613879565b95945050505050565b5f33610fce858285612310565b610fd9858585612388565b506001949350505050565b600e54604080516342d359d760e11b815290515f926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa15801561102b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104f919061388c565b905090565b6005546001600160a01b0316331461107e5760405162461bcd60e51b8152600401610b9190613551565b600e5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b5f604051808303815f87803b1580156110c3575f80fd5b505af11580156110d5573d5f803e3d5ffd5b5050505050565b5f33610dc78185856110ee8383611fc8565b6110f891906138a3565b6121ed565b6040805160028082526060820183525f92839291906020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611168573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118c9190613712565b815f8151811061119e5761119e61372d565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106111d2576111d261372d565b6001600160a01b03928316602091820292909201015260175460405163d06ca61f60e01b81525f92919091169063d06ca61f906112159087908690600401613783565b5f60405180830381865afa15801561122f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611256919081019061379b565b600c549091506127109061127a90600160c01b900465ffffffffffff166032613853565b65ffffffffffff16826001815181106112955761129561372d565b60200260200101516112a79190613688565b6112b191906136b3565b816001815181106112c4576112c461372d565b60200260200101516112d69190613879565b949350505050565b6005546001600160a01b031633146113085760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b03811661134d5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610b91565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600e5460405163bc4c4b3760e01b81523360048201525f60248201526001600160a01b039091169063bc4c4b37906044016020604051808303815f875af11580156113bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e091906138b6565b50565b6005546001600160a01b0316331461140d5760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b0382166114525760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610b91565b306001600160a01b038316036114aa5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420756e6578636c7564656420636f6e74726163740000000000006044820152606401610b91565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527fc4eea32423e96d678d53f47ddd9b7a5103eea02606d7daa81c77038c54dc8edb91015b60405180910390a15050565b600e5460405163156dbbf560e31b81526001600160a01b0383811660048301525f92169063ab6ddfa8906024015b602060405180830381865afa158015611556573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dcd919061388c565b6005546001600160a01b031633146115a45760405162461bcd60e51b8152600401610b9190613551565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600e546040805163ad7a672f60e01b815290515f926001600160a01b03169163ad7a672f9160048083019260209291908290030181865afa15801561102b573d5f803e3d5ffd5b6005546001600160a01b0316331461165e5760405162461bcd60e51b8152600401610b9190613551565b6040805160a0810182525f608082015265ffffffffffff8681168252858116928201929092528382166020820152908216606082015281836116a08688613853565b6116aa9190613853565b6116b49190613853565b65ffffffffffff166080820181905261271010156117095760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b6044820152606401610b91565b608081015160405165ffffffffffff90911681527f7a758dc8e99047b028278b3e2ff1416d8493a7aacee7a5dc30b6bf93270eccce9060200160405180910390a18051600c805460208401516040850151606086015160809096015165ffffffffffff908116600160c01b0265ffffffffffff60c01b19978216600160901b0265ffffffffffff60901b19938316600160601b02939093166bffffffffffffffffffffffff60601b19948316600160301b026bffffffffffffffffffffffff199096169290971691909117939093179190911693909317929092179290921617905550505050565b6005546001600160a01b0316331461181b5760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b0381166118605760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610b91565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118ac5760405162461bcd60e51b8152600401610b9190613551565b60085460ff16156118f65760405162461bcd60e51b815260206004820152601460248201527354726164696e6720616c7265616479206c69766560601b6044820152606401610b91565b6008805460ff19166001179055565b606060048054610d39906136c6565b5f33816119218286611fc8565b9050838110156119815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b91565b610fd982868684036121ed565b600e546040516302a2e74960e61b81526001600160a01b0383811660048301525f92169063a8b9d2409060240161153b565b5f33610dc7818585612388565b600e5460405163dcb95ed960e01b81523360048201525f916001600160a01b03169063dcb95ed9906024016020604051808303815f875af1158015611a14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a38919061388c565b90508015611a4f57611a4b81833361255b565b5050565b60405162461bcd60e51b815260206004820152600a6024820152694e6f207265776172647360b01b6044820152606401610b91565b600e5460405163fbcbc0f160e01b81526001600160a01b0383811660048301525f92839283928392169063fbcbc0f190602401608060405180830381865afa158015611ad2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af691906138d1565b93509350935093509193509193565b6005546001600160a01b03163314611b2f5760405162461bcd60e51b8152600401610b9190613551565b620186a0611b3c60025490565b611b47906001613688565b611b5191906136b3565b811015611bbe5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b91565b6103e8611bca60025490565b611bd5906005613688565b611bdf91906136b3565b811115611c4b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b91565b601555565b6005546001600160a01b03163314611c7a5760405162461bcd60e51b8152600401610b9190613551565b6040805160a0810182525f608082015265ffffffffffff868116825285811692820192909252838216602082015290821660608201528183611cbc8688613853565b611cc69190613853565b611cd09190613853565b65ffffffffffff16608082018190526127101015611d255760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b6044820152606401610b91565b608081015160405165ffffffffffff90911681527fa6255338a5f732d64ceba7f4c18182567f9d1067eb984b46d478b37d72a52d119060200160405180910390a18051600d805460208401516040850151606086015160809096015165ffffffffffff908116600160c01b0265ffffffffffff60c01b19978216600160901b0265ffffffffffff60901b19938316600160601b02939093166bffffffffffffffffffffffff60601b19948316600160301b026bffffffffffffffffffffffff199096169290971691909117939093179190911693909317929092179290921617905550505050565b6005546001600160a01b03163314611e375760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b038216611e7c5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610b91565b80611ed4576016546001600160a01b0390811690831603611ed45760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610b91565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f0712a8411c7892e205c3d35c5d2beabe76bb0b484bec43945f2024cd28eaae8d9101611501565b6005546001600160a01b03163314611f595760405162461bcd60e51b8152600401610b9190613551565b600e5460405163c0f306ef60e01b81526001600160a01b0383811660048301529091169063c0f306ef906024016110ac565b6005546001600160a01b03163314611fb55760405162461bcd60e51b8152600401610b9190613551565b6014805460ff1916911515919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b0316331461201c5760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b0381166120815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b91565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121065760405162461bcd60e51b8152600401610b9190613551565b6121126012600a61367a565b6103e861211e60025490565b612129906001613688565b61213391906136b3565b61213d91906136b3565b816001600160801b0316101561217f5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610b91565b61218b6012600a61367a565b61219e906001600160801b038316613688565b601180546001600160801b0319166001600160801b039290921691821790556040519081527fb23b42d3f68952d9265706979da08581393c4320025d833bd5cc519cdf43ecbc90602001610d1f565b6001600160a01b03831661224f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b91565b6001600160a01b0382166122b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b91565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61231b8484611fc8565b90505f19811461238257818110156123755760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b91565b61238284848484036121ed565b50505050565b6001600160a01b0383165f9081526006602052604090205460ff161580156123c857506001600160a01b0382165f9081526006602052604090205460ff16155b156124375760085460ff166124145760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b91565b61241f8383836126a5565b61242a838383612943565b6124349082613879565b90505b612442838383612d2f565b600e546001600160a01b031663e30443bc83612472816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156124b5575f80fd5b505af11580156124c7573d5f803e3d5ffd5b5050600e546001600160a01b0316915063e30443bc9050846124fd816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612540575f80fd5b505af1158015612552573d5f803e3d5ffd5b50505050505050565b6040805160028082526060820183525f926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156125c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e69190613712565b815f815181106125f8576125f861372d565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061262c5761262c61372d565b6001600160a01b03928316602091820292909201015260175460405163b6f9de9560e01b815291169063b6f9de9590869061267190879086908890429060040161390d565b5f604051808303818588803b158015612688575f80fd5b505af115801561269a573d5f803e3d5ffd5b505050505050505050565b60125460ff161561289c576001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526011546001600160801b038082168352600160801b90910416818601529589168552600990935292205460ff928316939192168015612717575082155b156127b85780516001600160801b03168411156127605760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610b91565b60208101516001600160801b031661277883866138a3565b11156127b35760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610b91565b612898565b6001600160a01b0385165f9081526009602052604090205460ff1680156127f757506001600160a01b0386165f9081526007602052604090205460ff16155b156128405780516001600160801b03168411156127b35760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610b91565b826128985760208101516001600160801b031661285d83866138a3565b11156128985760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610b91565b5050505b60145460ff1615612918576001600160a01b0382165f9081526009602052604090205460ff161561291d576001600160a01b0383165f9081526013602052604090205443116129185760405162461bcd60e51b815260206004820152600860248201526720b73a349026a2ab60c11b6044820152606401610b91565b505050565b506001600160a01b03165f90815260136020526040808220439081905532835291205550565b601554305f9081526020819052604081205490911115801561297d57506001600160a01b0384165f9081526009602052604090205460ff16155b1561298a5761298a612ed2565b6040805160a0810182525f808252602080830182905282840182905260608301829052608083018290526001600160a01b0387168252600990529182205460ff1615612a2a57506040805160a081018252600d5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b810483166060830152600160c01b90049091166080820152612aa0565b6001600160a01b0386165f9081526009602052604090205460ff1615612aa057506040805160a081018252600c5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b810483166060830152600160c01b900490911660808201525b608081015165ffffffffffff1615612d1d576040805160a081018252600f546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b9004909116606082015260105460ff16151560808083019190915282015161271090612b239065ffffffffffff1687613688565b612b2d91906136b3565b9250633b9aca00826080015165ffffffffffff16836040015165ffffffffffff1685612b599190613941565b612b63919061396c565b612b6d919061396c565b81602001818151612b7e9190613991565b6001600160401b031690525060808201518251633b9aca009165ffffffffffff90811691612bad911686613941565b612bb7919061396c565b612bc1919061396c565b81518290612bd0908390613991565b6001600160401b031690525060808201516020830151633b9aca009165ffffffffffff90811691612c02911686613941565b612c0c919061396c565b612c16919061396c565b81604001818151612c279190613991565b6001600160401b031690525060808201516060830151633b9aca009165ffffffffffff90811691612c59911686613941565b612c63919061396c565b612c6d919061396c565b81606001818151612c7e9190613991565b6001600160401b039081169091528251600f80546020860151604087015160608801518616600160c01b026001600160c01b03918716600160801b02919091166001600160801b03928716600160401b026001600160801b031990941695909616949094179190911781169390931791909117905560808301516010805491151560ff19909216919091179055612d1b9150889030908616612d2f565b505b506001600160801b0316949350505050565b6001600160a01b038316612d935760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b91565b6001600160a01b038216612df55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b91565b6001600160a01b0383165f9081526020819052604090205481811015612e6c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b91565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b305f9081526020818152604080832054815160a081018352600f546001600160401b03808216808452600160401b83048216968401879052600160801b83048216958401869052600160c01b909204166060830181905260105460ff161515608084015292959194919391612f479190613991565b612f519190613991565b612f5b9190613991565b6001600160401b03169050821580612f71575080155b15612f7b57505050565b601554612f89906014613688565b831115612fa157601554612f9e906014613688565b92505b60208201516001600160401b03161561307b575f8183602001516001600160401b031685612fcf9190613688565b612fd991906136b3565b601654909150612ff49030906001600160a01b031683612d2f565b60165f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613040575f80fd5b505af1925050508015613051575060015b5061305c8185613879565b935082602001516001600160401b0316826130779190613879565b9150505b82156132035761308a83613238565b604082015147905f906001600160401b03161561311857600b5460408501516001600160a01b039091169084906130ca906001600160401b031685613688565b6130d491906136b3565b6040515f81818185875af1925050503d805f811461310d576040519150601f19603f3d011682016040523d82523d5f602084013e613112565b606091505b50909150505b60608401516001600160401b0316156131a257600e5460608501516001600160a01b03909116908490613154906001600160401b031685613688565b61315e91906136b3565b6040515f81818185875af1925050503d805f8114613197576040519150601f19603f3d011682016040523d82523d5f602084013e61319c565b606091505b50909150505b479150811561320057600a546040516001600160a01b039091169083905f81818185875af1925050503d805f81146131f5576040519150601f19603f3d011682016040523d82523d5f602084013e6131fa565b606091505b50909150505b50505b505f602082018190528082526040820181905260608201819052600f55608001516010805460ff191691151591909117905550565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061326b5761326b61372d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106132bf576132bf61372d565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac947906133049085905f908690309042906004016139b1565b5f604051808303815f87803b15801561331b575f80fd5b505af115801561332d573d5f803e3d5ffd5b505050505050565b5f60208284031215613345575f80fd5b81356001600160801b038116811461335b575f80fd5b9392505050565b5f6020808352835180828501525f5b8181101561338d57858101830151858201604001528201613371565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146113e0575f80fd5b5f80604083850312156133d2575f80fd5b82356133dd816133ad565b946020939093013593505050565b5f602082840312156133fb575f80fd5b813561335b816133ad565b5f805f60608486031215613418575f80fd5b8335613423816133ad565b92506020840135613433816133ad565b929592945050506040919091013590565b5f60208284031215613454575f80fd5b5035919050565b80151581146113e0575f80fd5b5f8060408385031215613479575f80fd5b8235613484816133ad565b915060208301356134948161345b565b809150509250929050565b803565ffffffffffff811681146134b4575f80fd5b919050565b5f805f80608085870312156134cc575f80fd5b6134d58561349f565b93506134e36020860161349f565b92506134f16040860161349f565b91506134ff6060860161349f565b905092959194509250565b5f6020828403121561351a575f80fd5b813561335b8161345b565b5f8060408385031215613536575f80fd5b8235613541816133ad565b91506020830135613494816133ad565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156135d457815f19048211156135ba576135ba613586565b808516156135c757918102915b93841c939080029061359f565b509250929050565b5f826135ea57506001610dcd565b816135f657505f610dcd565b816001811461360c576002811461361657613632565b6001915050610dcd565b60ff84111561362757613627613586565b50506001821b610dcd565b5060208310610133831016604e8410600b8410161715613655575081810a610dcd565b61365f838361359a565b805f190482111561367257613672613586565b029392505050565b5f61335b60ff8416836135dc565b8082028115828204841417610dcd57610dcd613586565b634e487b7160e01b5f52601260045260245ffd5b5f826136c1576136c161369f565b500490565b600181811c908216806136da57607f821691505b6020821081036136f857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215613722575f80fd5b815161335b816133ad565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156137785781516001600160a01b031687529582019590820190600101613753565b509495945050505050565b828152604060208201525f6112d66040830184613741565b5f60208083850312156137ac575f80fd5b82516001600160401b03808211156137c2575f80fd5b818501915085601f8301126137d5575f80fd5b8151818111156137e7576137e76136fe565b8060051b604051601f19603f8301168101818110858211171561380c5761380c6136fe565b604052918252848201925083810185019188831115613829575f80fd5b938501935b828510156138475784518452938501939285019261382e565b98975050505050505050565b65ffffffffffff81811683821601908082111561387257613872613586565b5092915050565b81810381811115610dcd57610dcd613586565b5f6020828403121561389c575f80fd5b5051919050565b80820180821115610dcd57610dcd613586565b5f602082840312156138c6575f80fd5b815161335b8161345b565b5f805f80608085870312156138e4575f80fd5b84516138ef816133ad565b60208601516040870151606090970151919890975090945092505050565b848152608060208201525f6139256080830186613741565b6001600160a01b03949094166040830152506060015292915050565b6001600160801b0381811683821602808216919082811461396457613964613586565b505092915050565b5f6001600160801b03808416806139855761398561369f565b92169190910492915050565b6001600160401b0381811683821601908082111561387257613872613586565b85815284602082015260a060408201525f6139cf60a0830186613741565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212201f579bf89af8b3d7d5d5649efee73d2ddef45707c0eef63b2a46c15dbc08772f64736f6c63430008140033608060405234801561000f575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506110ef8061005d5f395ff3fe608060405260043610610134575f3560e01c806391b89fba116100a8578063bc4c4b371161006d578063bc4c4b371461034f578063c0f306ef1461036e578063dcb95ed91461038d578063e30443bc146103ac578063f2fde38b146103cb578063fbcbc0f1146103ea575f80fd5b806391b89fba1461029d578063a8b9d240146102bc578063aafd847a146102db578063ab6ddfa81461030f578063ad7a672f1461033a575f80fd5b80636843cd84116100f95780636843cd84146101f25780636a47400214610226578063715018a61461023a57806371778e7d1461024e57806385a6b3ae146102625780638da5cb5b14610277575f80fd5b806303c833021461014757806327ce01471461014f57806330bb4cff1461018157806331e79db0146101955780634e7b827f146101b4575f80fd5b3661014357610141610433565b005b5f80fd5b610141610433565b34801561015a575f80fd5b5061016e610169366004610eec565b6104bb565b6040519081526020015b60405180910390f35b34801561018c575f80fd5b5060065461016e565b3480156101a0575f80fd5b506101416101af366004610eec565b61051d565b3480156101bf575f80fd5b506101e26101ce366004610eec565b60076020525f908152604090205460ff1681565b6040519015158152602001610178565b3480156101fd575f80fd5b5061016e61020c366004610eec565b6001600160a01b03165f9081526004602052604090205490565b348015610231575f80fd5b5061014161057f565b348015610245575f80fd5b50610141610588565b348015610259575f80fd5b5060055461016e565b34801561026d575f80fd5b5061016e60065481565b348015610282575f80fd5b505f546040516001600160a01b039091168152602001610178565b3480156102a8575f80fd5b5061016e6102b7366004610eec565b6105f9565b3480156102c7575f80fd5b5061016e6102d6366004610eec565b6105ff565b3480156102e6575f80fd5b5061016e6102f5366004610eec565b6001600160a01b03165f9081526003602052604090205490565b34801561031a575f80fd5b5061016e610329366004610eec565b60046020525f908152604090205481565b348015610345575f80fd5b5061016e60055481565b34801561035a575f80fd5b506101e2610369366004610f07565b61062a565b348015610379575f80fd5b50610141610388366004610eec565b6106bf565b348015610398575f80fd5b5061016e6103a7366004610eec565b6107ae565b3480156103b7575f80fd5b506101416103c6366004610f42565b610908565b3480156103d6575f80fd5b506101416103e5366004610eec565b61096b565b3480156103f5575f80fd5b50610409610404366004610eec565b610a52565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610178565b5f60055411801561044357505f34115b156104b9576005546104709061045d34600160801b610a8e565b6104679190610f80565b60015490610b13565b60015560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26006546104b59034610b13565b6006555b565b6001600160a01b0381165f908152600260209081526040808320546004909252822054600154600160801b9261050d9261050892610502916104fd9190610a8e565b610b71565b90610b7f565b610bb9565b6105179190610f80565b92915050565b5f546001600160a01b0316331461054f5760405162461bcd60e51b815260040161054690610f9f565b60405180910390fd5b6001600160a01b0381165f908152600760205260408120805460ff1916600117905561057c908290610bca565b50565b61057c33610c5e565b5f546001600160a01b031633146105b15760405162461bcd60e51b815260040161054690610f9f565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f610517825b6001600160a01b0381165f9081526003602052604081205461051790610624846104bb565b90610d95565b5f80546001600160a01b031633146106545760405162461bcd60e51b815260040161054690610f9f565b5f61065e84610c5e565b905080156106b657821515846001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516106a491815260200190565b60405180910390a36001915050610517565b505f9392505050565b5f546001600160a01b031633146106e85760405162461bcd60e51b815260040161054690610f9f565b6001600160a01b0381165f9081526007602052604090205460ff1661070b575f80fd5b6001600160a01b0381165f908152600760205260409020805460ff1916905561057c8161073f5f546001600160a01b031690565b6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa158015610785573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190610fd4565b610bca565b5f80546001600160a01b031633146107d85760405162461bcd60e51b815260040161054690610f9f565b6107e1826105ff565b90508015610863576001600160a01b0382165f9081526003602052604090205461080c908290610feb565b6001600160a01b0383165f81815260036020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061085a9084815260200190565b60405180910390a25b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f81146108ad576040519150601f19603f3d011682016040523d82523d5f602084013e6108b2565b606091505b5050905080610901576001600160a01b0383165f908152600360205260409020546108dd9083610d95565b6001600160a01b0384165f9081526003602052604081209190915591506109039050565b505b919050565b5f546001600160a01b031633146109315760405162461bcd60e51b815260040161054690610f9f565b6001600160a01b0382165f9081526007602052604090205460ff166109675761095a8282610bca565b61096582600161062a565b505b5050565b5f546001600160a01b031633146109945760405162461bcd60e51b815260040161054690610f9f565b6001600160a01b0381166109f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610546565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b805f8080610a5f846105ff565b9250610a6a846104bb565b6001600160a01b0385165f9081526004602052604090205494969395509392915050565b5f825f03610a9d57505f610517565b5f610aa88385610ffe565b905082610ab58583610f80565b14610b0c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610546565b9392505050565b5f80610b1f8385610feb565b905083811015610b0c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610546565b5f8181811215610517575f80fd5b5f80610b8b8385611015565b90505f8312158015610b9d5750838112155b80610bb157505f83128015610bb157508381125b610b0c575f80fd5b5f80821215610bc6575f80fd5b5090565b6001600160a01b0382165f90815260046020526040902080549082905580821115610c23575f610bfa8383610d95565b9050610c068482610dd6565b8060055f828254610c179190610feb565b90915550610965915050565b80821015610965575f610c368284610d95565b9050610c428482610e2e565b8060055f828254610c53919061103c565b909155505050505050565b5f80610c69836105ff565b90508015610d8d576001600160a01b0383165f90815260036020526040902054610c939082610b13565b6001600160a01b0384165f81815260036020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d90610ce19084815260200190565b60405180910390a25f836001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610d32576040519150601f19603f3d011682016040523d82523d5f602084013e610d37565b606091505b5050905080610d86576001600160a01b0384165f90815260036020526040902054610d629083610d95565b6001600160a01b039094165f90815260036020526040812094909455509192915050565b5092915050565b505f92915050565b5f610b0c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610e67565b610e0f610df16104fd83600154610a8e90919063ffffffff16565b6001600160a01b0384165f9081526002602052604090205490610e9f565b6001600160a01b039092165f9081526002602052604090209190915550565b610e0f610e496104fd83600154610a8e90919063ffffffff16565b6001600160a01b0384165f9081526002602052604090205490610b7f565b5f8184841115610e8a5760405162461bcd60e51b8152600401610546919061104f565b505f610e96848661103c565b95945050505050565b5f80610eab838561109a565b90505f8312158015610ebd5750838113155b80610bb157505f83128015610bb15750838113610b0c575f80fd5b6001600160a01b038116811461057c575f80fd5b5f60208284031215610efc575f80fd5b8135610b0c81610ed8565b5f8060408385031215610f18575f80fd5b8235610f2381610ed8565b915060208301358015158114610f37575f80fd5b809150509250929050565b5f8060408385031215610f53575f80fd5b8235610f5e81610ed8565b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b5f82610f9a57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215610fe4575f80fd5b5051919050565b8082018082111561051757610517610f6c565b808202811582820484141761051757610517610f6c565b8082018281125f83128015821682158216171561103457611034610f6c565b505092915050565b8181038181111561051757610517610f6c565b5f6020808352835180828501525f5b8181101561107a5785810183015185820160400152820161105e565b505f604082860101526040601f19601f8301168501019250505092915050565b8181035f831280158383131683831282161715610d8657610d86610f6c56fea2646970667358221220f58b91255fc7fa5a6dc3b6ddbe1ef6a1ba2451af24a122ea11decae659a38ccd64736f6c634300081400334e6174696f6e616c204173736f63696174696f6e206f662053656375726974696573204465616c657273204175746f6d617465642051756f746174696f6e73

Deployed Bytecode

0x608060405260043610610344575f3560e01c806380dee257116101bd578063b2a9c0c0116100f2578063dbe66ca011610092578063e8cd2fec1161006d578063e8cd2fec14610ac6578063f270fde414610adf578063f2fde38b14610b29578063fd74dd2914610b48575f80fd5b8063dbe66ca014610a64578063dd62ed3e14610a92578063e2f4560514610ab1575f80fd5b8063c0f306ef116100cd578063c0f306ef146109c5578063ca13a70e146109e4578063cc1776d314610a03578063d8fb9cc414610a4b575f80fd5b8063b2a9c0c014610968578063bd9dfecc14610987578063bf78019b146109a6575f80fd5b8063a8aa1b311161015d578063aa5f7e2611610138578063aa5f7e261461089f578063ad56c13c146108be578063ad5c464814610907578063b0249cc61461093a575f80fd5b8063a8aa1b3114610842578063a8b9d24014610861578063a9059cbb14610880575f80fd5b80639507b19b116101985780639507b19b146107ce57806395d89b41146107e25780639e93ad8e146107f6578063a457c2d714610823575f80fd5b806380dee2571461077357806385033762146107925780638da5cb5b146107b1575f80fd5b806339509351116102935780636843cd8411610233578063715018a61161020e578063715018a61461070457806371778e7d146107185780637b812b411461072c5780638091f3bf1461075a575f80fd5b80636843cd84146106305780636d7adcad1461064f57806370a08231146106d0575f80fd5b80634b833d641161026e5780634b833d641461055d5780634e71d92d1461057c5780634f7041a5146105905780636612e66f14610611575f80fd5b806339509351146105005780633ad10ef61461051f5780634008c2f01461053e575f80fd5b806318160ddd116102fe57806323b872dd116102d957806323b872dd1461049357806330bb4cff146104b2578063313ce567146104c657806331e79db0146104e1575f80fd5b806318160ddd146104415780631b03ddc1146104555780631f903dfa14610474575f80fd5b80630106aaef1461034f57806304816a4e1461036557806306fdde03146103845780630758d924146103ae578063095ea7b3146103e557806314bb4edd14610414575f80fd5b3661034b57005b5f80fd5b34801561035a575f80fd5b50610363610b67565b005b348015610370575f80fd5b5061036361037f366004613335565b610c0f565b34801561038f575f80fd5b50610398610d2a565b6040516103a59190613362565b60405180910390f35b3480156103b9575f80fd5b506017546103cd906001600160a01b031681565b6040516001600160a01b0390911681526020016103a5565b3480156103f0575f80fd5b506104046103ff3660046133c1565b610dba565b60405190151581526020016103a5565b34801561041f575f80fd5b5061043361042e3660046133eb565b610dd3565b6040519081526020016103a5565b34801561044c575f80fd5b50600254610433565b348015610460575f80fd5b50600e546103cd906001600160a01b031681565b34801561047f575f80fd5b50600a546103cd906001600160a01b031681565b34801561049e575f80fd5b506104046104ad366004613406565b610fc1565b3480156104bd575f80fd5b50610433610fe4565b3480156104d1575f80fd5b50604051601281526020016103a5565b3480156104ec575f80fd5b506103636104fb3660046133eb565b611054565b34801561050b575f80fd5b5061040461051a3660046133c1565b6110dc565b34801561052a575f80fd5b50600b546103cd906001600160a01b031681565b348015610549575f80fd5b50610433610558366004613444565b6110fd565b348015610568575f80fd5b506103636105773660046133eb565b6112de565b348015610587575f80fd5b5061036361136f565b34801561059b575f80fd5b50600c546105d89065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b8104821691600160c01b9091041685565b6040805165ffffffffffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103a5565b34801561061c575f80fd5b5061036361062b366004613468565b6113e3565b34801561063b575f80fd5b5061043361064a3660046133eb565b61150d565b34801561065a575f80fd5b50600f54601054610695916001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b909104169060ff1685565b604080516001600160401b0396871681529486166020860152928516928401929092529092166060820152901515608082015260a0016103a5565b3480156106db575f80fd5b506104336106ea3660046133eb565b6001600160a01b03165f9081526020819052604090205490565b34801561070f575f80fd5b5061036361157a565b348015610723575f80fd5b506104336115ed565b348015610737575f80fd5b506104046107463660046133eb565b60076020525f908152604090205460ff1681565b348015610765575f80fd5b506008546104049060ff1681565b34801561077e575f80fd5b5061036361078d3660046134b9565b611634565b34801561079d575f80fd5b506103636107ac3660046133eb565b6117f1565b3480156107bc575f80fd5b506005546001600160a01b03166103cd565b3480156107d9575f80fd5b50610363611882565b3480156107ed575f80fd5b50610398611905565b348015610801575f80fd5b5061080b61271081565b6040516001600160401b0390911681526020016103a5565b34801561082e575f80fd5b5061040461083d3660046133c1565b611914565b34801561084d575f80fd5b506016546103cd906001600160a01b031681565b34801561086c575f80fd5b5061043361087b3660046133eb565b61198e565b34801561088b575f80fd5b5061040461089a3660046133c1565b6119c0565b3480156108aa575f80fd5b506103636108b9366004613444565b6119cd565b3480156108c9575f80fd5b506108dd6108d83660046133eb565b611a84565b604080516001600160a01b03909516855260208501939093529183015260608201526080016103a5565b348015610912575f80fd5b506103cd7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610945575f80fd5b506104046109543660046133eb565b60096020525f908152604090205460ff1681565b348015610973575f80fd5b50610363610982366004613444565b611b05565b348015610992575f80fd5b506103636109a13660046134b9565b611c50565b3480156109b1575f80fd5b506103636109c0366004613468565b611e0d565b3480156109d0575f80fd5b506103636109df3660046133eb565b611f2f565b3480156109ef575f80fd5b506103636109fe36600461350a565b611f8b565b348015610a0e575f80fd5b50600d546105d89065ffffffffffff80821691600160301b8104821691600160601b8204811691600160901b8104821691600160c01b9091041685565b348015610a56575f80fd5b506014546104049060ff1681565b348015610a6f575f80fd5b50610404610a7e3660046133eb565b60066020525f908152604090205460ff1681565b348015610a9d575f80fd5b50610433610aac366004613525565b611fc8565b348015610abc575f80fd5b5061043360155481565b348015610ad1575f80fd5b506012546104049060ff1681565b348015610aea575f80fd5b50601154610b09906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016103a5565b348015610b34575f80fd5b50610363610b433660046133eb565b611ff2565b348015610b53575f80fd5b50610363610b62366004613335565b6120dc565b6005546001600160a01b03163314610b9a5760405162461bcd60e51b8152600401610b9190613551565b60405180910390fd5b6012805460ff19169055604080518082019091525f80825260208201525f610bc160025490565b6001600160801b03811680845260208401819052600160801b8102176011556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b6005546001600160a01b03163314610c395760405162461bcd60e51b8152600401610b9190613551565b610c456012600a61367a565b6103e8610c5160025490565b610c5c906001613688565b610c6691906136b3565b610c7091906136b3565b816001600160801b03161015610cb25760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610b91565b610cbe6012600a61367a565b610cd1906001600160801b038316613688565b601180546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade0788906020015b60405180910390a150565b606060038054610d39906136c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d65906136c6565b8015610db05780601f10610d8757610100808354040283529160200191610db0565b820191905f5260205f20905b815481529060010190602001808311610d9357829003601f168201915b5050505050905090565b5f33610dc78185856121ed565b60019150505b92915050565b5f80610dde8361198e565b6040805160028082526060820183529293505f9290916020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190613712565b815f81518110610e8057610e8061372d565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610eb457610eb461372d565b6001600160a01b03928316602091820292909201015260175460405163d06ca61f60e01b81525f92919091169063d06ca61f90610ef79086908690600401613783565b5f60405180830381865afa158015610f11573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f38919081019061379b565b600c5490915061271090610f5c90600160c01b900465ffffffffffff166032613853565b65ffffffffffff1682600181518110610f7757610f7761372d565b6020026020010151610f899190613688565b610f9391906136b3565b81600181518110610fa657610fa661372d565b6020026020010151610fb89190613879565b95945050505050565b5f33610fce858285612310565b610fd9858585612388565b506001949350505050565b600e54604080516342d359d760e11b815290515f926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa15801561102b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104f919061388c565b905090565b6005546001600160a01b0316331461107e5760405162461bcd60e51b8152600401610b9190613551565b600e5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b5f604051808303815f87803b1580156110c3575f80fd5b505af11580156110d5573d5f803e3d5ffd5b5050505050565b5f33610dc78185856110ee8383611fc8565b6110f891906138a3565b6121ed565b6040805160028082526060820183525f92839291906020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611168573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118c9190613712565b815f8151811061119e5761119e61372d565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106111d2576111d261372d565b6001600160a01b03928316602091820292909201015260175460405163d06ca61f60e01b81525f92919091169063d06ca61f906112159087908690600401613783565b5f60405180830381865afa15801561122f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611256919081019061379b565b600c549091506127109061127a90600160c01b900465ffffffffffff166032613853565b65ffffffffffff16826001815181106112955761129561372d565b60200260200101516112a79190613688565b6112b191906136b3565b816001815181106112c4576112c461372d565b60200260200101516112d69190613879565b949350505050565b6005546001600160a01b031633146113085760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b03811661134d5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610b91565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600e5460405163bc4c4b3760e01b81523360048201525f60248201526001600160a01b039091169063bc4c4b37906044016020604051808303815f875af11580156113bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e091906138b6565b50565b6005546001600160a01b0316331461140d5760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b0382166114525760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610b91565b306001600160a01b038316036114aa5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420756e6578636c7564656420636f6e74726163740000000000006044820152606401610b91565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527fc4eea32423e96d678d53f47ddd9b7a5103eea02606d7daa81c77038c54dc8edb91015b60405180910390a15050565b600e5460405163156dbbf560e31b81526001600160a01b0383811660048301525f92169063ab6ddfa8906024015b602060405180830381865afa158015611556573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dcd919061388c565b6005546001600160a01b031633146115a45760405162461bcd60e51b8152600401610b9190613551565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600e546040805163ad7a672f60e01b815290515f926001600160a01b03169163ad7a672f9160048083019260209291908290030181865afa15801561102b573d5f803e3d5ffd5b6005546001600160a01b0316331461165e5760405162461bcd60e51b8152600401610b9190613551565b6040805160a0810182525f608082015265ffffffffffff8681168252858116928201929092528382166020820152908216606082015281836116a08688613853565b6116aa9190613853565b6116b49190613853565b65ffffffffffff166080820181905261271010156117095760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b6044820152606401610b91565b608081015160405165ffffffffffff90911681527f7a758dc8e99047b028278b3e2ff1416d8493a7aacee7a5dc30b6bf93270eccce9060200160405180910390a18051600c805460208401516040850151606086015160809096015165ffffffffffff908116600160c01b0265ffffffffffff60c01b19978216600160901b0265ffffffffffff60901b19938316600160601b02939093166bffffffffffffffffffffffff60601b19948316600160301b026bffffffffffffffffffffffff199096169290971691909117939093179190911693909317929092179290921617905550505050565b6005546001600160a01b0316331461181b5760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b0381166118605760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610b91565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118ac5760405162461bcd60e51b8152600401610b9190613551565b60085460ff16156118f65760405162461bcd60e51b815260206004820152601460248201527354726164696e6720616c7265616479206c69766560601b6044820152606401610b91565b6008805460ff19166001179055565b606060048054610d39906136c6565b5f33816119218286611fc8565b9050838110156119815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b91565b610fd982868684036121ed565b600e546040516302a2e74960e61b81526001600160a01b0383811660048301525f92169063a8b9d2409060240161153b565b5f33610dc7818585612388565b600e5460405163dcb95ed960e01b81523360048201525f916001600160a01b03169063dcb95ed9906024016020604051808303815f875af1158015611a14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a38919061388c565b90508015611a4f57611a4b81833361255b565b5050565b60405162461bcd60e51b815260206004820152600a6024820152694e6f207265776172647360b01b6044820152606401610b91565b600e5460405163fbcbc0f160e01b81526001600160a01b0383811660048301525f92839283928392169063fbcbc0f190602401608060405180830381865afa158015611ad2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af691906138d1565b93509350935093509193509193565b6005546001600160a01b03163314611b2f5760405162461bcd60e51b8152600401610b9190613551565b620186a0611b3c60025490565b611b47906001613688565b611b5191906136b3565b811015611bbe5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b91565b6103e8611bca60025490565b611bd5906005613688565b611bdf91906136b3565b811115611c4b5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b91565b601555565b6005546001600160a01b03163314611c7a5760405162461bcd60e51b8152600401610b9190613551565b6040805160a0810182525f608082015265ffffffffffff868116825285811692820192909252838216602082015290821660608201528183611cbc8688613853565b611cc69190613853565b611cd09190613853565b65ffffffffffff16608082018190526127101015611d255760405162461bcd60e51b81526020600482015260126024820152714b656570207461782062656c6f772031302560701b6044820152606401610b91565b608081015160405165ffffffffffff90911681527fa6255338a5f732d64ceba7f4c18182567f9d1067eb984b46d478b37d72a52d119060200160405180910390a18051600d805460208401516040850151606086015160809096015165ffffffffffff908116600160c01b0265ffffffffffff60c01b19978216600160901b0265ffffffffffff60901b19938316600160601b02939093166bffffffffffffffffffffffff60601b19948316600160301b026bffffffffffffffffffffffff199096169290971691909117939093179190911693909317929092179290921617905550505050565b6005546001600160a01b03163314611e375760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b038216611e7c5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610b91565b80611ed4576016546001600160a01b0390811690831603611ed45760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610b91565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f0712a8411c7892e205c3d35c5d2beabe76bb0b484bec43945f2024cd28eaae8d9101611501565b6005546001600160a01b03163314611f595760405162461bcd60e51b8152600401610b9190613551565b600e5460405163c0f306ef60e01b81526001600160a01b0383811660048301529091169063c0f306ef906024016110ac565b6005546001600160a01b03163314611fb55760405162461bcd60e51b8152600401610b9190613551565b6014805460ff1916911515919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b0316331461201c5760405162461bcd60e51b8152600401610b9190613551565b6001600160a01b0381166120815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b91565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121065760405162461bcd60e51b8152600401610b9190613551565b6121126012600a61367a565b6103e861211e60025490565b612129906001613688565b61213391906136b3565b61213d91906136b3565b816001600160801b0316101561217f5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610b91565b61218b6012600a61367a565b61219e906001600160801b038316613688565b601180546001600160801b0319166001600160801b039290921691821790556040519081527fb23b42d3f68952d9265706979da08581393c4320025d833bd5cc519cdf43ecbc90602001610d1f565b6001600160a01b03831661224f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b91565b6001600160a01b0382166122b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b91565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61231b8484611fc8565b90505f19811461238257818110156123755760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b91565b61238284848484036121ed565b50505050565b6001600160a01b0383165f9081526006602052604090205460ff161580156123c857506001600160a01b0382165f9081526006602052604090205460ff16155b156124375760085460ff166124145760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b91565b61241f8383836126a5565b61242a838383612943565b6124349082613879565b90505b612442838383612d2f565b600e546001600160a01b031663e30443bc83612472816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156124b5575f80fd5b505af11580156124c7573d5f803e3d5ffd5b5050600e546001600160a01b0316915063e30443bc9050846124fd816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612540575f80fd5b505af1158015612552573d5f803e3d5ffd5b50505050505050565b6040805160028082526060820183525f926020830190803683375050601754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156125c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e69190613712565b815f815181106125f8576125f861372d565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061262c5761262c61372d565b6001600160a01b03928316602091820292909201015260175460405163b6f9de9560e01b815291169063b6f9de9590869061267190879086908890429060040161390d565b5f604051808303818588803b158015612688575f80fd5b505af115801561269a573d5f803e3d5ffd5b505050505050505050565b60125460ff161561289c576001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526011546001600160801b038082168352600160801b90910416818601529589168552600990935292205460ff928316939192168015612717575082155b156127b85780516001600160801b03168411156127605760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610b91565b60208101516001600160801b031661277883866138a3565b11156127b35760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610b91565b612898565b6001600160a01b0385165f9081526009602052604090205460ff1680156127f757506001600160a01b0386165f9081526007602052604090205460ff16155b156128405780516001600160801b03168411156127b35760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610b91565b826128985760208101516001600160801b031661285d83866138a3565b11156128985760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610b91565b5050505b60145460ff1615612918576001600160a01b0382165f9081526009602052604090205460ff161561291d576001600160a01b0383165f9081526013602052604090205443116129185760405162461bcd60e51b815260206004820152600860248201526720b73a349026a2ab60c11b6044820152606401610b91565b505050565b506001600160a01b03165f90815260136020526040808220439081905532835291205550565b601554305f9081526020819052604081205490911115801561297d57506001600160a01b0384165f9081526009602052604090205460ff16155b1561298a5761298a612ed2565b6040805160a0810182525f808252602080830182905282840182905260608301829052608083018290526001600160a01b0387168252600990529182205460ff1615612a2a57506040805160a081018252600d5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b810483166060830152600160c01b90049091166080820152612aa0565b6001600160a01b0386165f9081526009602052604090205460ff1615612aa057506040805160a081018252600c5465ffffffffffff8082168352600160301b820481166020840152600160601b8204811693830193909352600160901b810483166060830152600160c01b900490911660808201525b608081015165ffffffffffff1615612d1d576040805160a081018252600f546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b9004909116606082015260105460ff16151560808083019190915282015161271090612b239065ffffffffffff1687613688565b612b2d91906136b3565b9250633b9aca00826080015165ffffffffffff16836040015165ffffffffffff1685612b599190613941565b612b63919061396c565b612b6d919061396c565b81602001818151612b7e9190613991565b6001600160401b031690525060808201518251633b9aca009165ffffffffffff90811691612bad911686613941565b612bb7919061396c565b612bc1919061396c565b81518290612bd0908390613991565b6001600160401b031690525060808201516020830151633b9aca009165ffffffffffff90811691612c02911686613941565b612c0c919061396c565b612c16919061396c565b81604001818151612c279190613991565b6001600160401b031690525060808201516060830151633b9aca009165ffffffffffff90811691612c59911686613941565b612c63919061396c565b612c6d919061396c565b81606001818151612c7e9190613991565b6001600160401b039081169091528251600f80546020860151604087015160608801518616600160c01b026001600160c01b03918716600160801b02919091166001600160801b03928716600160401b026001600160801b031990941695909616949094179190911781169390931791909117905560808301516010805491151560ff19909216919091179055612d1b9150889030908616612d2f565b505b506001600160801b0316949350505050565b6001600160a01b038316612d935760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b91565b6001600160a01b038216612df55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b91565b6001600160a01b0383165f9081526020819052604090205481811015612e6c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b91565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b305f9081526020818152604080832054815160a081018352600f546001600160401b03808216808452600160401b83048216968401879052600160801b83048216958401869052600160c01b909204166060830181905260105460ff161515608084015292959194919391612f479190613991565b612f519190613991565b612f5b9190613991565b6001600160401b03169050821580612f71575080155b15612f7b57505050565b601554612f89906014613688565b831115612fa157601554612f9e906014613688565b92505b60208201516001600160401b03161561307b575f8183602001516001600160401b031685612fcf9190613688565b612fd991906136b3565b601654909150612ff49030906001600160a01b031683612d2f565b60165f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613040575f80fd5b505af1925050508015613051575060015b5061305c8185613879565b935082602001516001600160401b0316826130779190613879565b9150505b82156132035761308a83613238565b604082015147905f906001600160401b03161561311857600b5460408501516001600160a01b039091169084906130ca906001600160401b031685613688565b6130d491906136b3565b6040515f81818185875af1925050503d805f811461310d576040519150601f19603f3d011682016040523d82523d5f602084013e613112565b606091505b50909150505b60608401516001600160401b0316156131a257600e5460608501516001600160a01b03909116908490613154906001600160401b031685613688565b61315e91906136b3565b6040515f81818185875af1925050503d805f8114613197576040519150601f19603f3d011682016040523d82523d5f602084013e61319c565b606091505b50909150505b479150811561320057600a546040516001600160a01b039091169083905f81818185875af1925050503d805f81146131f5576040519150601f19603f3d011682016040523d82523d5f602084013e6131fa565b606091505b50909150505b50505b505f602082018190528082526040820181905260608201819052600f55608001516010805460ff191691151591909117905550565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061326b5761326b61372d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106132bf576132bf61372d565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac947906133049085905f908690309042906004016139b1565b5f604051808303815f87803b15801561331b575f80fd5b505af115801561332d573d5f803e3d5ffd5b505050505050565b5f60208284031215613345575f80fd5b81356001600160801b038116811461335b575f80fd5b9392505050565b5f6020808352835180828501525f5b8181101561338d57858101830151858201604001528201613371565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146113e0575f80fd5b5f80604083850312156133d2575f80fd5b82356133dd816133ad565b946020939093013593505050565b5f602082840312156133fb575f80fd5b813561335b816133ad565b5f805f60608486031215613418575f80fd5b8335613423816133ad565b92506020840135613433816133ad565b929592945050506040919091013590565b5f60208284031215613454575f80fd5b5035919050565b80151581146113e0575f80fd5b5f8060408385031215613479575f80fd5b8235613484816133ad565b915060208301356134948161345b565b809150509250929050565b803565ffffffffffff811681146134b4575f80fd5b919050565b5f805f80608085870312156134cc575f80fd5b6134d58561349f565b93506134e36020860161349f565b92506134f16040860161349f565b91506134ff6060860161349f565b905092959194509250565b5f6020828403121561351a575f80fd5b813561335b8161345b565b5f8060408385031215613536575f80fd5b8235613541816133ad565b91506020830135613494816133ad565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156135d457815f19048211156135ba576135ba613586565b808516156135c757918102915b93841c939080029061359f565b509250929050565b5f826135ea57506001610dcd565b816135f657505f610dcd565b816001811461360c576002811461361657613632565b6001915050610dcd565b60ff84111561362757613627613586565b50506001821b610dcd565b5060208310610133831016604e8410600b8410161715613655575081810a610dcd565b61365f838361359a565b805f190482111561367257613672613586565b029392505050565b5f61335b60ff8416836135dc565b8082028115828204841417610dcd57610dcd613586565b634e487b7160e01b5f52601260045260245ffd5b5f826136c1576136c161369f565b500490565b600181811c908216806136da57607f821691505b6020821081036136f857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215613722575f80fd5b815161335b816133ad565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156137785781516001600160a01b031687529582019590820190600101613753565b509495945050505050565b828152604060208201525f6112d66040830184613741565b5f60208083850312156137ac575f80fd5b82516001600160401b03808211156137c2575f80fd5b818501915085601f8301126137d5575f80fd5b8151818111156137e7576137e76136fe565b8060051b604051601f19603f8301168101818110858211171561380c5761380c6136fe565b604052918252848201925083810185019188831115613829575f80fd5b938501935b828510156138475784518452938501939285019261382e565b98975050505050505050565b65ffffffffffff81811683821601908082111561387257613872613586565b5092915050565b81810381811115610dcd57610dcd613586565b5f6020828403121561389c575f80fd5b5051919050565b80820180821115610dcd57610dcd613586565b5f602082840312156138c6575f80fd5b815161335b8161345b565b5f805f80608085870312156138e4575f80fd5b84516138ef816133ad565b60208601516040870151606090970151919890975090945092505050565b848152608060208201525f6139256080830186613741565b6001600160a01b03949094166040830152506060015292915050565b6001600160801b0381811683821602808216919082811461396457613964613586565b505092915050565b5f6001600160801b03808416806139855761398561369f565b92169190910492915050565b6001600160401b0381811683821601908082111561387257613872613586565b85815284602082015260a060408201525f6139cf60a0830186613741565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212201f579bf89af8b3d7d5d5649efee73d2ddef45707c0eef63b2a46c15dbc08772f64736f6c63430008140033

Deployed Bytecode Sourcemap

33414:15843:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45532:327;;;;;;;;;;;;;:::i;:::-;;43704:302;;;;;;;;;;-1:-1:-1;43704:302:0;;;;;:::i;:::-;;:::i;4328:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34131:27;;;;;;;;;;-1:-1:-1;34131:27:0;;;;-1:-1:-1;;;;;34131:27:0;;;;;;-1:-1:-1;;;;;1056:32:1;;;1038:51;;1026:2;1011:18;34131:27:0;873:222:1;6688:201:0;;;;;;;;;;-1:-1:-1;6688:201:0;;;;;:::i;:::-;;:::i;:::-;;;1721:14:1;;1714:22;1696:41;;1684:2;1669:18;6688:201:0;1556:187:1;48815:439:0;;;;;;;;;;-1:-1:-1;48815:439:0;;;;;:::i;:::-;;:::i;:::-;;;2146:25:1;;;2134:2;2119:18;48815:439:0;2000:177:1;5457:108:0;;;;;;;;;;-1:-1:-1;5545:12:0;;5457:108;;33773:24;;;;;;;;;;-1:-1:-1;33773:24:0;;;;-1:-1:-1;;;;;33773:24:0;;;33653:28;;;;;;;;;;-1:-1:-1;33653:28:0;;;;-1:-1:-1;;;;;33653:28:0;;;7469:261;;;;;;;;;;-1:-1:-1;7469:261:0;;;;;:::i;:::-;;:::i;46510:134::-;;;;;;;;;;;;;:::i;5299:93::-;;;;;;;;;;-1:-1:-1;5299:93:0;;5382:2;3226:36:1;;3214:2;3199:18;5299:93:0;3084:184:1;47289:123:0;;;;;;;;;;-1:-1:-1;47289:123:0;;;;;:::i;:::-;;:::i;8139:238::-;;;;;;;;;;-1:-1:-1;8139:238:0;;;;;:::i;:::-;;:::i;33688:25::-;;;;;;;;;;-1:-1:-1;33688:25:0;;;;-1:-1:-1;;;;;33688:25:0;;;48423:384;;;;;;;;;;-1:-1:-1;48423:384:0;;;;;:::i;:::-;;:::i;45996:167::-;;;;;;;;;;-1:-1:-1;45996:167:0;;;;;:::i;:::-;;:::i;46406:96::-;;;;;;;;;;;;;:::i;33722:17::-;;;;;;;;;;-1:-1:-1;33722:17:0;;;;;;;;;-1:-1:-1;;;33722:17:0;;;;;-1:-1:-1;;;33722:17:0;;;;;-1:-1:-1;;;33722:17:0;;;;;-1:-1:-1;;;33722:17:0;;;;;;;;;;3717:14:1;3758:15;;;3740:34;;3810:15;;;3805:2;3790:18;;3783:43;3862:15;;;3842:18;;;3835:43;;;;3914:15;;3909:2;3894:18;;3887:43;3967:15;;;3961:3;3946:19;;3939:44;3694:3;3679:19;33722:17:0;3458:531:1;42673:333:0;;;;;;;;;;-1:-1:-1;42673:333:0;;;;;:::i;:::-;;:::i;46797:127::-;;;;;;;;;;-1:-1:-1;46797:127:0;;;;;:::i;:::-;;:::i;33806:43::-;;;;;;;;;;-1:-1:-1;33806:43:0;;;;;;-1:-1:-1;;;;;33806:43:0;;;;-1:-1:-1;;;33806:43:0;;;;;-1:-1:-1;;;33806:43:0;;;;;-1:-1:-1;;;33806:43:0;;;;;;;;;;;;;-1:-1:-1;;;;;4804:15:1;;;4786:34;;4856:15;;;4851:2;4836:18;;4829:43;4908:15;;;4888:18;;;4881:43;;;;4960:15;;;4955:2;4940:18;;4933:43;5020:14;;5013:22;5007:3;4992:19;;4985:51;4736:3;4721:19;33806:43:0;4504:538:1;5628:127:0;;;;;;;;;;-1:-1:-1;5628:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5729:18:0;5702:7;5729:18;;;;;;;;;;;;5628:127;13242:150;;;;;;;;;;;;;:::i;47169:112::-;;;;;;;;;;;;;:::i;33513:51::-;;;;;;;;;;-1:-1:-1;33513:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33573:20;;;;;;;;;;-1:-1:-1;33573:20:0;;;;;;;;44886:501;;;;;;;;;;-1:-1:-1;44886:501:0;;;;;:::i;:::-;;:::i;46171:161::-;;;;;;;;;;-1:-1:-1;46171:161:0;;;;;:::i;:::-;;:::i;13028:79::-;;;;;;;;;;-1:-1:-1;13093:6:0;;-1:-1:-1;;;;;13093:6:0;13028:79;;45395:129;;;;;;;;;;;;;:::i;4547:104::-;;;;;;;;;;;;;:::i;34205:42::-;;;;;;;;;;;;34242:5;34205:42;;;;;-1:-1:-1;;;;;5787:31:1;;;5769:50;;5757:2;5742:18;34205:42:0;5625:200:1;8880:436:0;;;;;;;;;;-1:-1:-1;8880:436:0;;;;;:::i;:::-;;:::i;34105:19::-;;;;;;;;;;-1:-1:-1;34105:19:0;;;;-1:-1:-1;;;;;34105:19:0;;;46652:140;;;;;;;;;;-1:-1:-1;46652:140:0;;;;;:::i;:::-;;:::i;5961:193::-;;;;;;;;;;-1:-1:-1;5961:193:0;;;;;:::i;:::-;;:::i;47548:335::-;;;;;;;;;;-1:-1:-1;47548:335:0;;;;;:::i;:::-;;:::i;46932:225::-;;;;;;;;;;-1:-1:-1;46932:225:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;6079:32:1;;;6061:51;;6143:2;6128:18;;6121:34;;;;6171:18;;;6164:34;6229:2;6214:18;;6207:34;6048:3;6033:19;46932:225:0;5830:417:1;34165:29:0;;;;;;;;;;;;;;;33602:42;;;;;;;;;;-1:-1:-1;33602:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44014:352;;;;;;;;;;-1:-1:-1;44014:352:0;;;;;:::i;:::-;;:::i;44374:504::-;;;;;;;;;;-1:-1:-1;44374:504:0;;;;;:::i;:::-;;:::i;43014:364::-;;;;;;;;;;-1:-1:-1;43014:364:0;;;;;:::i;:::-;;:::i;47421:119::-;;;;;;;;;;-1:-1:-1;47421:119:0;;;;;:::i;:::-;;:::i;45867:121::-;;;;;;;;;;-1:-1:-1;45867:121:0;;;;;:::i;:::-;;:::i;33746:18::-;;;;;;;;;;-1:-1:-1;33746:18:0;;;;;;;;;-1:-1:-1;;;33746:18:0;;;;;-1:-1:-1;;;33746:18:0;;;;;-1:-1:-1;;;33746:18:0;;;;;-1:-1:-1;;;33746:18:0;;;;;;34016:38;;;;;;;;;;-1:-1:-1;34016:38:0;;;;;;;;33457:49;;;;;;;;;;-1:-1:-1;33457:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6217:151;;;;;;;;;;-1:-1:-1;6217:151:0;;;;;:::i;:::-;;:::i;34063:33::-;;;;;;;;;;;;;;;;33889;;;;;;;;;;-1:-1:-1;33889:33:0;;;;;;;;33858:24;;;;;;;;;;-1:-1:-1;33858:24:0;;;;-1:-1:-1;;;;;33858:24:0;;;;-1:-1:-1;;;33858:24:0;;;;;;;;;-1:-1:-1;;;;;7136:15:1;;;7118:34;;7188:15;;;;7183:2;7168:18;;7161:43;7038:18;33858:24:0;6891:319:1;13400:244:0;;;;;;;;;;-1:-1:-1;13400:244:0;;;;;:::i;:::-;;:::i;43386:310::-;;;;;;;;;;-1:-1:-1;43386:310:0;;;;;:::i;:::-;;:::i;45532:327::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;;;;;;;;;45588:14:::1;:22:::0;;-1:-1:-1;;45588:22:0::1;::::0;;-1:-1:-1;;;;;;;;;45605:5:0::1;-1:-1:-1::0;;;;;;;45657:14:0::1;45674:13;5545:12:::0;;;5457:108;45674:13:::1;-1:-1:-1::0;;;;;45698:41:0;::::1;::::0;;;45750:21:::1;::::0;::::1;:39:::0;;;-1:-1:-1;;;45800:20:0;::::1;;:8;:20:::0;45836:15:::1;::::0;45657:30;;-1:-1:-1;45836:15:0::1;::::0;45698:23:::1;::::0;45836:15:::1;45577:282;;45532:327::o:0;43704:302::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;43839:14:::1;5382:2:::0;43839::::1;:14;:::i;:::-;43832:4;43812:13;5545:12:::0;;;5457:108;43812:13:::1;:17;::::0;43828:1:::1;43812:17;:::i;:::-;:24;;;;:::i;:::-;43811:43;;;;:::i;:::-;43793:14;-1:-1:-1::0;;;;;43793:61:0::1;;;43785:81;;;::::0;-1:-1:-1;;;43785:81:0;;9723:2:1;43785:81:0::1;::::0;::::1;9705:21:1::0;9762:1;9742:18;;;9735:29;-1:-1:-1;;;9780:18:1;;;9773:37;9827:18;;43785:81:0::1;9521:330:1::0;43785:81:0::1;43926:14;5382:2:::0;43926::::1;:14;:::i;:::-;43908:33;::::0;-1:-1:-1;;;;;43908:33:0;::::1;;:::i;:::-;43877:8;:65:::0;;-1:-1:-1;;;;;43877:65:0;;::::1;-1:-1:-1::0;;;43877:65:0;;::::1;::::0;::::1;;::::0;;;;43958:40:::1;::::0;43977:20;;;::::1;;10002:66:1::0;;43958:40:0::1;::::0;9990:2:1;9975:18;43958:40:0::1;;;;;;;;43704:302:::0;:::o;4328:100::-;4382:13;4415:5;4408:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4328:100;:::o;6688:201::-;6771:4;314:10;6827:32;314:10;6843:7;6852:6;6827:8;:32::i;:::-;6877:4;6870:11;;;6688:201;;;;;:::o;48815:439::-;48888:7;48908:20;48931:30;48954:6;48931:22;:30::i;:::-;48996:16;;;49010:1;48996:16;;;;;;;;48908:53;;-1:-1:-1;48972:21:0;;48996:16;;;;;;;;;;-1:-1:-1;;49033:9:0;;:16;;;-1:-1:-1;;;49033:16:0;;;;48972:40;;-1:-1:-1;;;;;;49033:9:0;;;;:14;;-1:-1:-1;49033:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49023:4;49028:1;49023:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;49023:26:0;;;-1:-1:-1;;;;;49023:26:0;;;;;49078:4;49060;49065:1;49060:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49060:23:0;;;:7;;;;;;;;;:23;49121:9;;:43;;-1:-1:-1;;;49121:43:0;;49094:24;;49121:9;;;;;:23;;:43;;49145:12;;49159:4;;49121:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49121:43:0;;;;;;;;;;;;:::i;:::-;49210:6;:15;49094:70;;-1:-1:-1;34242:5:0;;49210:20;;-1:-1:-1;;;49210:15:0;;;;49228:2;49210:20;:::i;:::-;49196:35;;:7;49204:1;49196:10;;;;;;;;:::i;:::-;;;;;;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;49182:7;49190:1;49182:10;;;;;;;;:::i;:::-;;;;;;;:64;;;;:::i;:::-;49175:71;48815:439;-1:-1:-1;;;;;48815:439:0:o;7469:261::-;7566:4;314:10;7624:38;7640:4;314:10;7655:6;7624:15;:38::i;:::-;7673:27;7683:4;7689:2;7693:6;7673:9;:27::i;:::-;-1:-1:-1;7718:4:0;;7469:261;-1:-1:-1;;;;7469:261:0:o;46510:134::-;46600:8;;:36;;;-1:-1:-1;;;46600:36:0;;;;46573:7;;-1:-1:-1;;;;;46600:8:0;;:34;;:36;;;;;;;;;;;;;;:8;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46593:43;;46510:134;:::o;47289:123::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;47366:8:::1;::::0;:38:::1;::::0;-1:-1:-1;;;47366:38:0;;-1:-1:-1;;;;;1056:32:1;;;47366:38:0::1;::::0;::::1;1038:51:1::0;47366:8:0;;::::1;::::0;:29:::1;::::0;1011:18:1;;47366:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47289:123:::0;:::o;8139:238::-;8227:4;314:10;8283:64;314:10;8299:7;8336:10;8308:25;314:10;8299:7;8308:9;:25::i;:::-;:38;;;;:::i;:::-;8283:8;:64::i;48423:384::-;48549:16;;;48563:1;48549:16;;;;;;;;48505:7;;;;48549:16;48563:1;48549:16;;;;;;;;-1:-1:-1;;48586:9:0;;:16;;;-1:-1:-1;;;48586:16:0;;;;48525:40;;-1:-1:-1;;;;;;48586:9:0;;;;:14;;-1:-1:-1;48586:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48576:4;48581:1;48576:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;48576:26:0;;;-1:-1:-1;;;;;48576:26:0;;;;;48631:4;48613;48618:1;48613:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48613:23:0;;;:7;;;;;;;;;:23;48674:9;;:43;;-1:-1:-1;;;48674:43:0;;48647:24;;48674:9;;;;;:23;;:43;;48698:12;;48712:4;;48674:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48674:43:0;;;;;;;;;;;;:::i;:::-;48763:6;:15;48647:70;;-1:-1:-1;34242:5:0;;48763:20;;-1:-1:-1;;;48763:15:0;;;;48781:2;48763:20;:::i;:::-;48749:35;;:7;48757:1;48749:10;;;;;;;;:::i;:::-;;;;;;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;48735:7;48743:1;48735:10;;;;;;;;:::i;:::-;;;;;;;:64;;;;:::i;:::-;48728:71;48423:384;-1:-1:-1;;;;48423:384:0:o;45996:167::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46081:22:0;::::1;46073:47;;;::::0;-1:-1:-1;;;46073:47:0;;13732:2:1;46073:47:0::1;::::0;::::1;13714:21:1::0;13771:2;13751:18;;;13744:30;-1:-1:-1;;;13790:18:1;;;13783:42;13842:18;;46073:47:0::1;13530:336:1::0;46073:47:0::1;46131:13;:24:::0;;-1:-1:-1;;;;;;46131:24:0::1;-1:-1:-1::0;;;;;46131:24:0;;;::::1;::::0;;;::::1;::::0;;45996:167::o;46406:96::-;46443:8;;:51;;-1:-1:-1;;;46443:51:0;;46475:10;46443:51;;;14055::1;46443:8:0;14122:18:1;;;14115:50;-1:-1:-1;;;;;46443:8:0;;;;:23;;14028:18:1;;46443:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46406:96::o;42673:333::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42775:22:0;::::1;42767:47;;;::::0;-1:-1:-1;;;42767:47:0;;14628:2:1;42767:47:0::1;::::0;::::1;14610:21:1::0;14667:2;14647:18;;;14640:30;-1:-1:-1;;;14686:18:1;;;14679:42;14738:18;;42767:47:0::1;14426:336:1::0;42767:47:0::1;42853:4;-1:-1:-1::0;;;;;42833:25:0;::::1;::::0;42825:64:::1;;;::::0;-1:-1:-1;;;42825:64:0;;14969:2:1;42825:64:0::1;::::0;::::1;14951:21:1::0;15008:2;14988:18;;;14981:30;15047:28;15027:18;;;15020:56;15093:18;;42825:64:0::1;14767:350:1::0;42825:64:0::1;-1:-1:-1::0;;;;;42900:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:40;;-1:-1:-1;;42900:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42956:42;;14055:51:1;;;14122:18;;;14115:50;42956:42:0::1;::::0;14028:18:1;42956:42:0::1;;;;;;;;42673:333:::0;;:::o;46797:127::-;46888:8;;:31;;-1:-1:-1;;;46888:31:0;;-1:-1:-1;;;;;1056:32:1;;;46888:31:0;;;1038:51:1;46867:7:0;;46888:8;;:22;;1011:18:1;;46888:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13242:150::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;13335:6:::1;::::0;13314:40:::1;::::0;13351:1:::1;::::0;-1:-1:-1;;;;;13335:6:0::1;::::0;13314:40:::1;::::0;13351:1;;13314:40:::1;13365:6;:19:::0;;-1:-1:-1;;;;;;13365:19:0::1;::::0;;13242:150::o;47169:112::-;47250:8;;:23;;;-1:-1:-1;;;47250:23:0;;;;47223:7;;-1:-1:-1;;;;;47250:8:0;;:21;;:23;;;;;;;;;;;;;;:8;:23;;;;;;;;;;;;;;44886:501;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;45036:28:0::1;::::0;;::::1;::::0;;45075:20;;::::1;-1:-1:-1::0;;;45075:20:0;;;;45106:22;;::::1;-1:-1:-1::0;;;45106:22:0;45139:32;;::::1;-1:-1:-1::0;;;45139:32:0;;45106:22;45199:19:::1;45075:20:::0;45036:28;45199:19:::1;:::i;:::-;:29;;;;:::i;:::-;:44;;;;:::i;:::-;45182:61;;:14;::::0;::::1;:61:::0;;;45281:5:::1;-1:-1:-1::0;45262:24:0::1;45254:55;;;::::0;-1:-1:-1;;;45254:55:0;;15613:2:1;45254:55:0::1;::::0;::::1;15595:21:1::0;15652:2;15632:18;;;15625:30;-1:-1:-1;;;15671:18:1;;;15664:48;15729:18;;45254:55:0::1;15411:342:1::0;45254:55:0::1;45339:14;::::0;::::1;::::0;45325:29:::1;::::0;15933:14:1;15921:27;;;15903:46;;45325:29:0::1;::::0;15891:2:1;15876:18;45325:29:0::1;;;;;;;45365:14:::0;;:6:::1;:14:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;45365:14:0::1;-1:-1:-1::0;;;;45365:14:0;;::::1;-1:-1:-1::0;;;45365:14:0::1;-1:-1:-1::0;;;;45365:14:0;;::::1;-1:-1:-1::0;;;45365:14:0::1;::::0;;;;-1:-1:-1;;;;45365:14:0;;::::1;-1:-1:-1::0;;;45365:14:0::1;-1:-1:-1::0;;45365:14:0;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;::::1;;::::0;;-1:-1:-1;;;;44886:501:0:o;46171:161::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46253:22:0;::::1;46245:47;;;::::0;-1:-1:-1;;;46245:47:0;;13732:2:1;46245:47:0::1;::::0;::::1;13714:21:1::0;13771:2;13751:18;;;13744:30;-1:-1:-1;;;13790:18:1;;;13783:42;13842:18;;46245:47:0::1;13530:336:1::0;46245:47:0::1;46303:10;:21:::0;;-1:-1:-1;;;;;;46303:21:0::1;-1:-1:-1::0;;;;;46303:21:0;;;::::1;::::0;;;::::1;::::0;;46171:161::o;45395:129::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;45457:8:::1;::::0;::::1;;45456:9;45448:42;;;::::0;-1:-1:-1;;;45448:42:0;;16162:2:1;45448:42:0::1;::::0;::::1;16144:21:1::0;16201:2;16181:18;;;16174:30;-1:-1:-1;;;16220:18:1;;;16213:50;16280:18;;45448:42:0::1;15960:344:1::0;45448:42:0::1;45501:8;:15:::0;;-1:-1:-1;;45501:15:0::1;45512:4;45501:15;::::0;;45395:129::o;4547:104::-;4603:13;4636:7;4629:14;;;;;:::i;8880:436::-;8973:4;314:10;8973:4;9056:25;314:10;9073:7;9056:9;:25::i;:::-;9029:52;;9120:15;9100:16;:35;;9092:85;;;;-1:-1:-1;;;9092:85:0;;16511:2:1;9092:85:0;;;16493:21:1;16550:2;16530:18;;;16523:30;16589:34;16569:18;;;16562:62;-1:-1:-1;;;16640:18:1;;;16633:35;16685:19;;9092:85:0;16309:401:1;9092:85:0;9213:60;9222:5;9229:7;9257:15;9238:16;:34;9213:8;:60::i;46652:140::-;46745:8;;:40;;-1:-1:-1;;;46745:40:0;;-1:-1:-1;;;;;1056:32:1;;;46745:40:0;;;1038:51:1;46721:7:0;;46745:8;;:31;;1011:18:1;;46745:40:0;873:222:1;5961:193:0;6040:4;314:10;6096:28;314:10;6113:2;6117:6;6096:9;:28::i;47548:335::-;47636:8;;:63;;-1:-1:-1;;;47636:63:0;;47687:10;47636:63;;;1038:51:1;47605:28:0;;-1:-1:-1;;;;;47636:8:0;;:42;;1011:18:1;;47636:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47605:94;-1:-1:-1;47713:24:0;;47710:166;;47753:58;47767:20;47789:9;47800:10;47753:13;:58::i;:::-;47594:289;47548:335;:::o;47710:166::-;47844:20;;-1:-1:-1;;;47844:20:0;;17141:2:1;47844:20:0;;;17123:21:1;17180:2;17160:18;;;17153:30;-1:-1:-1;;;17199:18:1;;;17192:40;17249:18;;47844:20:0;16939:334:1;46932:225:0;47121:8;;:28;;-1:-1:-1;;;47121:28:0;;-1:-1:-1;;;;;1056:32:1;;;47121:28:0;;;1038:51:1;47028:7:0;;;;;;;;47121:8;;:19;;1011:18:1;;47121:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47114:35;;;;;;;;46932:225;;;;;:::o;44014:352::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;44138:6:::1;44117:13;5545:12:::0;;;5457:108;44117:13:::1;:17;::::0;44133:1:::1;44117:17;:::i;:::-;44116:28;;;;:::i;:::-;44103:9;:41;;44095:107;;;::::0;-1:-1:-1;;;44095:107:0;;17920:2:1;44095:107:0::1;::::0;::::1;17902:21:1::0;17959:2;17939:18;;;17932:30;17998:34;17978:18;;;17971:62;-1:-1:-1;;;18049:18:1;;;18042:51;18110:19;;44095:107:0::1;17718:417:1::0;44095:107:0::1;44256:4;44235:13;5545:12:::0;;;5457:108;44235:13:::1;:17;::::0;44251:1:::1;44235:17;:::i;:::-;44234:26;;;;:::i;:::-;44221:9;:39;;44213:104;;;::::0;-1:-1:-1;;;44213:104:0;;18342:2:1;44213:104:0::1;::::0;::::1;18324:21:1::0;18381:2;18361:18;;;18354:30;18420:34;18400:18;;;18393:62;-1:-1:-1;;;18471:18:1;;;18464:50;18531:19;;44213:104:0::1;18140:416:1::0;44213:104:0::1;44328:18;:30:::0;44014:352::o;44374:504::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;44525:28:0::1;::::0;;::::1;::::0;;44564:20;;::::1;-1:-1:-1::0;;;44564:20:0;;;;44595:22;;::::1;-1:-1:-1::0;;;44595:22:0;44628:32;;::::1;-1:-1:-1::0;;;44628:32:0;;44595:22;44688:19:::1;44564:20:::0;44525:28;44688:19:::1;:::i;:::-;:29;;;;:::i;:::-;:44;;;;:::i;:::-;44671:61;;:14;::::0;::::1;:61:::0;;;44770:5:::1;-1:-1:-1::0;44751:24:0::1;44743:55;;;::::0;-1:-1:-1;;;44743:55:0;;15613:2:1;44743:55:0::1;::::0;::::1;15595:21:1::0;15652:2;15632:18;;;15625:30;-1:-1:-1;;;15671:18:1;;;15664:48;15729:18;;44743:55:0::1;15411:342:1::0;44743:55:0::1;44829:14;::::0;::::1;::::0;44814:30:::1;::::0;15933:14:1;15921:27;;;15903:46;;44814:30:0::1;::::0;15891:2:1;15876:18;44814:30:0::1;;;;;;;44855:15:::0;;:7:::1;:15:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;44855:15:0::1;-1:-1:-1::0;;;;44855:15:0;;::::1;-1:-1:-1::0;;;44855:15:0::1;-1:-1:-1::0;;;;44855:15:0;;::::1;-1:-1:-1::0;;;44855:15:0::1;::::0;;;;-1:-1:-1;;;;44855:15:0;;::::1;-1:-1:-1::0;;;44855:15:0::1;-1:-1:-1::0;;44855:15:0;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;::::1;;::::0;;-1:-1:-1;;;;44374:504:0:o;43014:364::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43118:22:0;::::1;43110:47;;;::::0;-1:-1:-1;;;43110:47:0;;14628:2:1;43110:47:0::1;::::0;::::1;14610:21:1::0;14667:2;14647:18;;;14640:30;-1:-1:-1;;;14686:18:1;;;14679:42;14738:18;;43110:47:0::1;14426:336:1::0;43110:47:0::1;43172:11;43168:90;;43219:4;::::0;-1:-1:-1;;;;;43219:4:0;;::::1;43207:16:::0;;::::1;::::0;43199:47:::1;;;::::0;-1:-1:-1;;;43199:47:0;;18763:2:1;43199:47:0::1;::::0;::::1;18745:21:1::0;18802:2;18782:18;;;18775:30;-1:-1:-1;;;18821:18:1;;;18814:48;18879:18;;43199:47:0::1;18561:342:1::0;43199:47:0::1;-1:-1:-1::0;;;;;43268:28:0;::::1;;::::0;;;:18:::1;:28;::::0;;;;;;;;:42;;-1:-1:-1;;43268:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43326:44;;14055:51:1;;;14122:18;;;14115:50;43326:44:0::1;::::0;14028:18:1;43326:44:0::1;13871:300:1::0;47421:119:0;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;47496:8:::1;::::0;:36:::1;::::0;-1:-1:-1;;;47496:36:0;;-1:-1:-1;;;;;1056:32:1;;;47496:36:0::1;::::0;::::1;1038:51:1::0;47496:8:0;;::::1;::::0;:27:::1;::::0;1011:18:1;;47496:36:0::1;873:222:1::0;45867:121:0;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;45950:19:::1;:30:::0;;-1:-1:-1;;45950:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45867:121::o;6217:151::-;-1:-1:-1;;;;;6333:18:0;;;6306:7;6333:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6217:151::o;13400:244::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13489:22:0;::::1;13481:73;;;::::0;-1:-1:-1;;;13481:73:0;;19110:2:1;13481:73:0::1;::::0;::::1;19092:21:1::0;19149:2;19129:18;;;19122:30;19188:34;19168:18;;;19161:62;-1:-1:-1;;;19239:18:1;;;19232:36;19285:19;;13481:73:0::1;18908:402:1::0;13481:73:0::1;13591:6;::::0;13570:38:::1;::::0;-1:-1:-1;;;;;13570:38:0;;::::1;::::0;13591:6:::1;::::0;13570:38:::1;::::0;13591:6:::1;::::0;13570:38:::1;13619:6;:17:::0;;-1:-1:-1;;;;;;13619:17:0::1;-1:-1:-1::0;;;;;13619:17:0;;;::::1;::::0;;;::::1;::::0;;13400:244::o;43386:310::-;13155:6;;-1:-1:-1;;;;;13155:6:0;314:10;13155:22;13147:67;;;;-1:-1:-1;;;13147:67:0;;;;;;;:::i;:::-;43523:14:::1;5382:2:::0;43523::::1;:14;:::i;:::-;43516:4;43496:13;5545:12:::0;;;5457:108;43496:13:::1;:17;::::0;43512:1:::1;43496:17;:::i;:::-;:24;;;;:::i;:::-;43495:43;;;;:::i;:::-;43477:14;-1:-1:-1::0;;;;;43477:61:0::1;;;43469:81;;;::::0;-1:-1:-1;;;43469:81:0;;9723:2:1;43469:81:0::1;::::0;::::1;9705:21:1::0;9762:1;9742:18;;;9735:29;-1:-1:-1;;;9780:18:1;;;9773:37;9827:18;;43469:81:0::1;9521:330:1::0;43469:81:0::1;43612:14;5382:2:::0;43612::::1;:14;:::i;:::-;43594:33;::::0;-1:-1:-1;;;;;43594:33:0;::::1;;:::i;:::-;43561:8;:67:::0;;-1:-1:-1;;;;;;43561:67:0::1;-1:-1:-1::0;;;;;43561:67:0;;;::::1;::::0;;::::1;::::0;;43644:44:::1;::::0;10002:66:1;;;43644:44:0::1;::::0;9990:2:1;9975:18;43644:44:0::1;9856:218:1::0;11641:346:0;-1:-1:-1;;;;;11743:19:0;;11735:68;;;;-1:-1:-1;;;11735:68:0;;19517:2:1;11735:68:0;;;19499:21:1;19556:2;19536:18;;;19529:30;19595:34;19575:18;;;19568:62;-1:-1:-1;;;19646:18:1;;;19639:34;19690:19;;11735:68:0;19315:400:1;11735:68:0;-1:-1:-1;;;;;11822:21:0;;11814:68;;;;-1:-1:-1;;;11814:68:0;;19922:2:1;11814:68:0;;;19904:21:1;19961:2;19941:18;;;19934:30;20000:34;19980:18;;;19973:62;-1:-1:-1;;;20051:18:1;;;20044:32;20093:19;;11814:68:0;19720:398:1;11814:68:0;-1:-1:-1;;;;;11895:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11947:32;;2146:25:1;;;11947:32:0;;2119:18:1;11947:32:0;;;;;;;11641:346;;;:::o;12278:419::-;12379:24;12406:25;12416:5;12423:7;12406:9;:25::i;:::-;12379:52;;-1:-1:-1;;12446:16:0;:37;12442:248;;12528:6;12508:16;:26;;12500:68;;;;-1:-1:-1;;;12500:68:0;;20325:2:1;12500:68:0;;;20307:21:1;20364:2;20344:18;;;20337:30;20403:31;20383:18;;;20376:59;20452:18;;12500:68:0;20123:353:1;12500:68:0;12612:51;12621:5;12628:7;12656:6;12637:16;:25;12612:8;:51::i;:::-;12368:329;12278:419;;;:::o;37451:529::-;-1:-1:-1;;;;;37597:22:0;;;;;;:16;:22;;;;;;;;37596:23;:48;;;;-1:-1:-1;;;;;;37624:20:0;;;;;;:16;:20;;;;;;;;37623:21;37596:48;37593:214;;;37668:8;;;;37660:39;;;;-1:-1:-1;;;37660:39:0;;20683:2:1;37660:39:0;;;20665:21:1;20722:2;20702:18;;;20695:30;-1:-1:-1;;;20741:18:1;;;20734:48;20799:18;;37660:39:0;20481:342:1;37660:39:0;37714:29;37726:4;37732:2;37736:6;37714:11;:29::i;:::-;37768:27;37778:4;37784:2;37788:6;37768:9;:27::i;:::-;37758:37;;;;:::i;:::-;;;37593:214;37819:31;37835:4;37840:2;37843:6;37819:15;:31::i;:::-;37863:8;;-1:-1:-1;;;;;37863:8:0;:19;37891:2;37896:13;37891:2;-1:-1:-1;;;;;5729:18:0;5702:7;5729:18;;;;;;;;;;;;5628:127;37896:13;37863:47;;-1:-1:-1;;;;;;37863:47:0;;;;;;;-1:-1:-1;;;;;21036:32:1;;;37863:47:0;;;21018:51:1;21085:18;;;21078:34;20991:18;;37863:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37921:8:0;;-1:-1:-1;;;;;37921:8:0;;-1:-1:-1;37921:19:0;;-1:-1:-1;37949:4:0;37956:15;37949:4;-1:-1:-1;;;;;5729:18:0;5702:7;5729:18;;;;;;;;;;;;5628:127;37956:15;37921:51;;-1:-1:-1;;;;;;37921:51:0;;;;;;;-1:-1:-1;;;;;21036:32:1;;;37921:51:0;;;21018::1;21085:18;;;21078:34;20991:18;;37921:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37451:529;;;:::o;47891:501::-;48068:16;;;48082:1;48068:16;;;;;;;;48044:21;;48068:16;;;;;;;;-1:-1:-1;;48105:9:0;;:16;;;-1:-1:-1;;;48105:16:0;;;;48044:40;;-1:-1:-1;;;;;;48105:9:0;;;;:14;;-1:-1:-1;48105:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48095:4;48100:1;48095:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;48095:26:0;;;-1:-1:-1;;;;;48095:26:0;;;;;48150:4;48132;48137:1;48132:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48132:23:0;;;:7;;;;;;;;;:23;48194:9;;:190;;-1:-1:-1;;;48194:190:0;;:9;;;:60;;48262:14;;48194:190;;48292:6;;48313:4;;48340:2;;48358:15;;48194:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47975:417;47891:501;;;:::o;37988:1181::-;38074:14;;;;38071:758;;;-1:-1:-1;;;;;38126:22:0;;;38104:19;38126:22;;;:18;:22;;;;;;;;;5729:18;;;;;;;38213:36;;;;;;;38241:8;38213:36;-1:-1:-1;;;;;38213:36:0;;;;;-1:-1:-1;;;38213:36:0;;;;;;;;38288:15;;;;;:9;:15;;;;;;38126:22;;;;;5729:18;;38288:15;:34;;;;;38308:14;38307:15;38288:34;38284:534;;;38361:23;;-1:-1:-1;;;;;38351:33:0;;;;38343:53;;;;-1:-1:-1;;;38343:53:0;;21832:2:1;38343:53:0;;;21814:21:1;21871:1;21851:18;;;21844:29;-1:-1:-1;;;21889:18:1;;;21882:37;21936:18;;38343:53:0;21630:330:1;38343:53:0;38447:21;;;;-1:-1:-1;;;;;38423:45:0;:20;38432:11;38423:6;:20;:::i;:::-;:45;;38415:68;;;;-1:-1:-1;;;38415:68:0;;22167:2:1;38415:68:0;;;22149:21:1;22206:2;22186:18;;;22179:30;-1:-1:-1;;;22225:18:1;;;22218:40;22275:18;;38415:68:0;21965:334:1;38415:68:0;38284:534;;;-1:-1:-1;;;;;38544:13:0;;;;;;:9;:13;;;;;;;;:42;;;;-1:-1:-1;;;;;;38562:24:0;;;;;;:18;:24;;;;;;;;38561:25;38544:42;38540:278;;;38625:23;;-1:-1:-1;;;;;38615:33:0;;;;38607:53;;;;-1:-1:-1;;;38607:53:0;;21832:2:1;38607:53:0;;;21814:21:1;21871:1;21851:18;;;21844:29;-1:-1:-1;;;21889:18:1;;;21882:37;21936:18;;38607:53:0;21630:330:1;38540:278:0;38699:14;38695:123;;38766:21;;;;-1:-1:-1;;;;;38742:45:0;:20;38751:11;38742:6;:20;:::i;:::-;:45;;38734:68;;;;-1:-1:-1;;;38734:68:0;;22167:2:1;38734:68:0;;;22149:21:1;22206:2;22186:18;;;22179:30;-1:-1:-1;;;22225:18:1;;;22218:40;22275:18;;38734:68:0;21965:334:1;38734:68:0;38089:740;;;38071:758;38845:19;;;;38841:321;;;-1:-1:-1;;;;;38883:13:0;;;;;;:9;:13;;;;;;;;38880:271;;;-1:-1:-1;;;;;38924:30:0;;;;;;:24;:30;;;;;;38957:12;-1:-1:-1;38916:66:0;;;;-1:-1:-1;;;38916:66:0;;22506:2:1;38916:66:0;;;22488:21:1;22545:1;22525:18;;;22518:29;-1:-1:-1;;;22563:18:1;;;22556:38;22611:18;;38916:66:0;22304:331:1;38916:66:0;37988:1181;;;:::o;38880:271::-;-1:-1:-1;;;;;;39023:28:0;;;;;:24;:28;;;;;;39054:12;39023:43;;;;39110:9;39085:35;;;;:50;-1:-1:-1;37988:1181:0:o;39177:1157::-;39308:18;;39298:4;39256:7;5729:18;;;;;;;;;;;39256:7;;-1:-1:-1;39280:46:0;:66;;;;-1:-1:-1;;;;;;39331:15:0;;;;;;:9;:15;;;;;;;;39330:16;39280:66;39277:110;;;39363:12;:10;:12::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39468:13:0;;;;:9;:13;;;;;;;;39464:126;;;-1:-1:-1;39497:15:0;;;;;;;;39505:7;39497:15;;;;;;;-1:-1:-1;;;39497:15:0;;;;;;;;-1:-1:-1;;;39497:15:0;;;;;;;;;;;-1:-1:-1;;;39497:15:0;;;;;;;;-1:-1:-1;;;39497:15:0;;;;;;;;;39464:126;;;-1:-1:-1;;;;;39533:15:0;;;;;;:9;:15;;;;;;;;39530:60;;;-1:-1:-1;39564:14:0;;;;;;;;39572:6;39564:14;;;;;;;-1:-1:-1;;;39564:14:0;;;;;;;;-1:-1:-1;;;39564:14:0;;;;;;;;;;;-1:-1:-1;;;39564:14:0;;;;;;;;-1:-1:-1;;;39564:14:0;;;;;;;;;39530:60;39605:14;;;;:18;;;39602:694;;39639:64;;;;;;;;39691:12;39639:64;-1:-1:-1;;;;;39639:64:0;;;;;-1:-1:-1;;;39639:64:0;;;;;;;;-1:-1:-1;;;39639:64:0;;;;;;;;;;;-1:-1:-1;;;39639:64:0;;;;;;;;;;;;;;;;;;;;;;;39741:14;;;34242:5;;39732:23;;;;:6;:23;:::i;:::-;:37;;;;:::i;:::-;39718:52;;39863:3;39846:5;:14;;;39826:34;;39832:5;:11;;;39826:17;;:3;:17;;;;:::i;:::-;:34;;;;:::i;:::-;:40;;;;:::i;:::-;39785:18;:30;;:82;;;;;;;:::i;:::-;-1:-1:-1;;;;;39785:82:0;;;-1:-1:-1;39951:14:0;;;;39933:15;;39968:3;;39927:38;;;;;:21;;;:3;:21;:::i;:::-;:38;;;;:::i;:::-;:44;;;;:::i;:::-;39882:90;;:18;;:90;;;;;:::i;:::-;-1:-1:-1;;;;;39882:90:0;;;-1:-1:-1;40050:14:0;;;;40035:12;;;;40067:3;;40029:35;;;;;:18;;;:3;:18;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;39987:18;:31;;:84;;;;;;;:::i;:::-;-1:-1:-1;;;;;39987:84:0;;;-1:-1:-1;40159:14:0;;;;40139:17;;;;40176:3;;40133:40;;;;;:23;;;:3;:23;:::i;:::-;:40;;;;:::i;:::-;:46;;;;:::i;:::-;40086:18;:36;;:94;;;;;;;:::i;:::-;-1:-1:-1;;;;;40086:94:0;;;;;;40195:33;;:12;:33;;;;;;;;;;;;;;;;-1:-1:-1;;;40195:33:0;-1:-1:-1;;;;;40195:33:0;;;-1:-1:-1;;;40195:33:0;;;;;-1:-1:-1;;;;;40195:33:0;;;-1:-1:-1;;;40195:33:0;-1:-1:-1;;;;;;40195:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40195:33:0;;;;;;;;;40243:41;;-1:-1:-1;40259:4:0;;40273;;40243:41;;:15;:41::i;:::-;39624:672;39602:694;-1:-1:-1;;;;;;40316:10:0;;39177:1157;-1:-1:-1;;;;39177:1157:0:o;9786:705::-;-1:-1:-1;;;;;9883:18:0;;9875:68;;;;-1:-1:-1;;;9875:68:0;;23527:2:1;9875:68:0;;;23509:21:1;23566:2;23546:18;;;23539:30;23605:34;23585:18;;;23578:62;-1:-1:-1;;;23656:18:1;;;23649:35;23701:19;;9875:68:0;23325:401:1;9875:68:0;-1:-1:-1;;;;;9962:16:0;;9954:64;;;;-1:-1:-1;;;9954:64:0;;23933:2:1;9954:64:0;;;23915:21:1;23972:2;23952:18;;;23945:30;24011:34;23991:18;;;23984:62;-1:-1:-1;;;24062:18:1;;;24055:33;24105:19;;9954:64:0;23731:399:1;9954:64:0;-1:-1:-1;;;;;10053:15:0;;10031:19;10053:15;;;;;;;;;;;10087:21;;;;10079:72;;;;-1:-1:-1;;;10079:72:0;;24337:2:1;10079:72:0;;;24319:21:1;24376:2;24356:18;;;24349:30;24415:34;24395:18;;;24388:62;-1:-1:-1;;;24466:18:1;;;24459:36;24512:19;;10079:72:0;24135:402:1;10079:72:0;-1:-1:-1;;;;;10187:15:0;;;:9;:15;;;;;;;;;;;10205:20;;;10187:38;;10405:13;;;;;;;;;;:23;;;;;;10457:26;;2146:25:1;;;10405:13:0;;10457:26;;2119:18:1;10457:26:0;;;;;;;9864:627;9786:705;;;:::o;40728:1913::-;40815:4;40771:23;5729:18;;;;;;;;;;;;40832:61;;;;;;;40881:12;40832:61;-1:-1:-1;;;;;40832:61:0;;;;;;-1:-1:-1;;;40832:61:0;;;;;;;;;;-1:-1:-1;;;40832:61:0;;;;;;;;;;-1:-1:-1;;;40832:61:0;;;;;;;;;;;;;;;;;;;;5729:18;;40832:61;;40771:23;;40832:61;40932;;40832;40932;:::i;:::-;:92;;;;:::i;:::-;:128;;;;:::i;:::-;-1:-1:-1;;;;;40904:156:0;;-1:-1:-1;41084:20:0;;;:46;;-1:-1:-1;41108:22:0;;41084:46;41081:60;;;41133:7;;;40728:1913::o;41081:60::-;41174:18;;:23;;41195:2;41174:23;:::i;:::-;41156:15;:41;41153:113;;;41231:18;;:23;;41252:2;41231:23;:::i;:::-;41213:41;;41153:113;41281:27;;;;-1:-1:-1;;;;;41281:31:0;;41278:361;;41328:16;41395:17;41365:15;:27;;;-1:-1:-1;;;;;41347:45:0;:15;:45;;;;:::i;:::-;:65;;;;:::i;:::-;41458:4;;41328:84;;-1:-1:-1;41427:46:0;;41451:4;;-1:-1:-1;;;;;41458:4:0;41328:84;41427:15;:46::i;:::-;41500:4;;;;;;;;;-1:-1:-1;;;;;41500:4:0;-1:-1:-1;;;;;41492:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41488:35;41537:27;41556:8;41537:27;;:::i;:::-;;;41600:15;:27;;;-1:-1:-1;;;;;41579:48:0;;;;;;:::i;:::-;;;41313:326;41278:361;41654:19;;41651:759;;41691:33;41708:15;41691:16;:33::i;:::-;41844:28;;;;41774:21;;41753:18;;-1:-1:-1;;;;;41844:32:0;;41841:175;;41909:10;;41945:28;;;;-1:-1:-1;;;;;41909:10:0;;;;41976:17;;41932:41;;-1:-1:-1;;;;;41932:41:0;:10;:41;:::i;:::-;:61;;;;:::i;:::-;41909:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41896:102:0;;-1:-1:-1;;41841:175:0;42035:33;;;;-1:-1:-1;;;;;42035:37:0;;42032:191;;42113:8;;42148:33;;;;-1:-1:-1;;;;;42113:8:0;;;;42183:17;;42135:46;;-1:-1:-1;;;;;42135:46:0;:10;:46;:::i;:::-;:65;;;;:::i;:::-;42105:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42092:113:0;;-1:-1:-1;;42032:191:0;42252:21;;-1:-1:-1;42293:14:0;;42290:109;;42340:13;;:41;;-1:-1:-1;;;;;42340:13:0;;;;42366:10;;42340:41;;;;42366:10;42340:13;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42327:54:0;;-1:-1:-1;;42290:109:0;41674:736;;41651:759;-1:-1:-1;42452:1:0;42422:27;;;:31;;;42464:35;;;42510:28;;;:32;;;42553:33;;;:37;;;42603:12;:30;;;;;;;-1:-1:-1;;42603:30:0;;;;;;;;;;-1:-1:-1;40728:1913:0:o;40342:378::-;40434:16;;;40448:1;40434:16;;;;;;;;40410:21;;40434:16;;;;;;;;;;-1:-1:-1;40434:16:0;40410:40;;40479:4;40461;40466:1;40461:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;40461:23:0;;;-1:-1:-1;;;;;40461:23:0;;;;;40505:4;40495;40500:1;40495:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40495:14:0;;;:7;;;;;;;;;:14;40522:9;;:190;;-1:-1:-1;;;40522:190:0;;:9;;;:60;;:190;;40597:11;;40522:9;;40639:4;;40666;;40686:15;;40522:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40397:323;40342:378;:::o;14:301:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;-1:-1:-1;;;;;224:5:1;220:46;213:5;210:57;200:85;;281:1;278;271:12;200:85;304:5;14:301;-1:-1:-1;;;14:301:1:o;320:548::-;432:4;461:2;490;479:9;472:21;522:6;516:13;565:6;560:2;549:9;545:18;538:34;590:1;600:140;614:6;611:1;608:13;600:140;;;709:14;;;705:23;;699:30;675:17;;;694:2;671:26;664:66;629:10;;600:140;;;604:3;789:1;784:2;775:6;764:9;760:22;756:31;749:42;859:2;852;848:7;843:2;835:6;831:15;827:29;816:9;812:45;808:54;800:62;;;;320:548;;;;:::o;1100:131::-;-1:-1:-1;;;;;1175:31:1;;1165:42;;1155:70;;1221:1;1218;1211:12;1236:315;1304:6;1312;1365:2;1353:9;1344:7;1340:23;1336:32;1333:52;;;1381:1;1378;1371:12;1333:52;1420:9;1407:23;1439:31;1464:5;1439:31;:::i;:::-;1489:5;1541:2;1526:18;;;;1513:32;;-1:-1:-1;;;1236:315:1:o;1748:247::-;1807:6;1860:2;1848:9;1839:7;1835:23;1831:32;1828:52;;;1876:1;1873;1866:12;1828:52;1915:9;1902:23;1934:31;1959:5;1934:31;:::i;2623:456::-;2700:6;2708;2716;2769:2;2757:9;2748:7;2744:23;2740:32;2737:52;;;2785:1;2782;2775:12;2737:52;2824:9;2811:23;2843:31;2868:5;2843:31;:::i;:::-;2893:5;-1:-1:-1;2950:2:1;2935:18;;2922:32;2963:33;2922:32;2963:33;:::i;:::-;2623:456;;3015:7;;-1:-1:-1;;;3069:2:1;3054:18;;;;3041:32;;2623:456::o;3273:180::-;3332:6;3385:2;3373:9;3364:7;3360:23;3356:32;3353:52;;;3401:1;3398;3391:12;3353:52;-1:-1:-1;3424:23:1;;3273:180;-1:-1:-1;3273:180:1:o;3994:118::-;4080:5;4073:13;4066:21;4059:5;4056:32;4046:60;;4102:1;4099;4092:12;4117:382;4182:6;4190;4243:2;4231:9;4222:7;4218:23;4214:32;4211:52;;;4259:1;4256;4249:12;4211:52;4298:9;4285:23;4317:31;4342:5;4317:31;:::i;:::-;4367:5;-1:-1:-1;4424:2:1;4409:18;;4396:32;4437:30;4396:32;4437:30;:::i;:::-;4486:7;4476:17;;;4117:382;;;;;:::o;5047:167::-;5114:20;;5174:14;5163:26;;5153:37;;5143:65;;5204:1;5201;5194:12;5143:65;5047:167;;;:::o;5219:401::-;5301:6;5309;5317;5325;5378:3;5366:9;5357:7;5353:23;5349:33;5346:53;;;5395:1;5392;5385:12;5346:53;5418:28;5436:9;5418:28;:::i;:::-;5408:38;;5465:37;5498:2;5487:9;5483:18;5465:37;:::i;:::-;5455:47;;5521:37;5554:2;5543:9;5539:18;5521:37;:::i;:::-;5511:47;;5577:37;5610:2;5599:9;5595:18;5577:37;:::i;:::-;5567:47;;5219:401;;;;;;;:::o;6252:241::-;6308:6;6361:2;6349:9;6340:7;6336:23;6332:32;6329:52;;;6377:1;6374;6367:12;6329:52;6416:9;6403:23;6435:28;6457:5;6435:28;:::i;6498:388::-;6566:6;6574;6627:2;6615:9;6606:7;6602:23;6598:32;6595:52;;;6643:1;6640;6633:12;6595:52;6682:9;6669:23;6701:31;6726:5;6701:31;:::i;:::-;6751:5;-1:-1:-1;6808:2:1;6793:18;;6780:32;6821:33;6780:32;6821:33;:::i;7215:356::-;7417:2;7399:21;;;7436:18;;;7429:30;7495:34;7490:2;7475:18;;7468:62;7562:2;7547:18;;7215:356::o;7576:127::-;7637:10;7632:3;7628:20;7625:1;7618:31;7668:4;7665:1;7658:15;7692:4;7689:1;7682:15;7708:422;7797:1;7840:5;7797:1;7854:270;7875:7;7865:8;7862:21;7854:270;;;7934:4;7930:1;7926:6;7922:17;7916:4;7913:27;7910:53;;;7943:18;;:::i;:::-;7993:7;7983:8;7979:22;7976:55;;;8013:16;;;;7976:55;8092:22;;;;8052:15;;;;7854:270;;;7858:3;7708:422;;;;;:::o;8135:806::-;8184:5;8214:8;8204:80;;-1:-1:-1;8255:1:1;8269:5;;8204:80;8303:4;8293:76;;-1:-1:-1;8340:1:1;8354:5;;8293:76;8385:4;8403:1;8398:59;;;;8471:1;8466:130;;;;8378:218;;8398:59;8428:1;8419:10;;8442:5;;;8466:130;8503:3;8493:8;8490:17;8487:43;;;8510:18;;:::i;:::-;-1:-1:-1;;8566:1:1;8552:16;;8581:5;;8378:218;;8680:2;8670:8;8667:16;8661:3;8655:4;8652:13;8648:36;8642:2;8632:8;8629:16;8624:2;8618:4;8615:12;8611:35;8608:77;8605:159;;;-1:-1:-1;8717:19:1;;;8749:5;;8605:159;8796:34;8821:8;8815:4;8796:34;:::i;:::-;8866:6;8862:1;8858:6;8854:19;8845:7;8842:32;8839:58;;;8877:18;;:::i;:::-;8915:20;;8135:806;-1:-1:-1;;;8135:806:1:o;8946:140::-;9004:5;9033:47;9074:4;9064:8;9060:19;9054:4;9033:47;:::i;9091:168::-;9164:9;;;9195;;9212:15;;;9206:22;;9192:37;9182:71;;9233:18;;:::i;9264:127::-;9325:10;9320:3;9316:20;9313:1;9306:31;9356:4;9353:1;9346:15;9380:4;9377:1;9370:15;9396:120;9436:1;9462;9452:35;;9467:18;;:::i;:::-;-1:-1:-1;9501:9:1;;9396:120::o;10079:380::-;10158:1;10154:12;;;;10201;;;10222:61;;10276:4;10268:6;10264:17;10254:27;;10222:61;10329:2;10321:6;10318:14;10298:18;10295:38;10292:161;;10375:10;10370:3;10366:20;10363:1;10356:31;10410:4;10407:1;10400:15;10438:4;10435:1;10428:15;10292:161;;10079:380;;;:::o;10464:127::-;10525:10;10520:3;10516:20;10513:1;10506:31;10556:4;10553:1;10546:15;10580:4;10577:1;10570:15;10596:251;10666:6;10719:2;10707:9;10698:7;10694:23;10690:32;10687:52;;;10735:1;10732;10725:12;10687:52;10767:9;10761:16;10786:31;10811:5;10786:31;:::i;10852:127::-;10913:10;10908:3;10904:20;10901:1;10894:31;10944:4;10941:1;10934:15;10968:4;10965:1;10958:15;10984:461;11037:3;11075:5;11069:12;11102:6;11097:3;11090:19;11128:4;11157:2;11152:3;11148:12;11141:19;;11194:2;11187:5;11183:14;11215:1;11225:195;11239:6;11236:1;11233:13;11225:195;;;11304:13;;-1:-1:-1;;;;;11300:39:1;11288:52;;11360:12;;;;11395:15;;;;11336:1;11254:9;11225:195;;;-1:-1:-1;11436:3:1;;10984:461;-1:-1:-1;;;;;10984:461:1:o;11450:332::-;11657:6;11646:9;11639:25;11700:2;11695;11684:9;11680:18;11673:30;11620:4;11720:56;11772:2;11761:9;11757:18;11749:6;11720:56;:::i;11787:1105::-;11882:6;11913:2;11956;11944:9;11935:7;11931:23;11927:32;11924:52;;;11972:1;11969;11962:12;11924:52;12005:9;11999:16;-1:-1:-1;;;;;12075:2:1;12067:6;12064:14;12061:34;;;12091:1;12088;12081:12;12061:34;12129:6;12118:9;12114:22;12104:32;;12174:7;12167:4;12163:2;12159:13;12155:27;12145:55;;12196:1;12193;12186:12;12145:55;12225:2;12219:9;12247:2;12243;12240:10;12237:36;;;12253:18;;:::i;:::-;12299:2;12296:1;12292:10;12331:2;12325:9;12394:2;12390:7;12385:2;12381;12377:11;12373:25;12365:6;12361:38;12449:6;12437:10;12434:22;12429:2;12417:10;12414:18;12411:46;12408:72;;;12460:18;;:::i;:::-;12496:2;12489:22;12546:18;;;12580:15;;;;-1:-1:-1;12622:11:1;;;12618:20;;;12650:19;;;12647:39;;;12682:1;12679;12672:12;12647:39;12706:11;;;;12726:135;12742:6;12737:3;12734:15;12726:135;;;12808:10;;12796:23;;12759:12;;;;12839;;;;12726:135;;;12880:6;11787:1105;-1:-1:-1;;;;;;;;11787:1105:1:o;12897:176::-;12964:14;12998:10;;;13010;;;12994:27;;13033:11;;;13030:37;;;13047:18;;:::i;:::-;13030:37;12897:176;;;;:::o;13078:128::-;13145:9;;;13166:11;;;13163:37;;;13180:18;;:::i;13211:184::-;13281:6;13334:2;13322:9;13313:7;13309:23;13305:32;13302:52;;;13350:1;13347;13340:12;13302:52;-1:-1:-1;13373:16:1;;13211:184;-1:-1:-1;13211:184:1:o;13400:125::-;13465:9;;;13486:10;;;13483:36;;;13499:18;;:::i;14176:245::-;14243:6;14296:2;14284:9;14275:7;14271:23;14267:32;14264:52;;;14312:1;14309;14302:12;14264:52;14344:9;14338:16;14363:28;14385:5;14363:28;:::i;17278:435::-;17375:6;17383;17391;17399;17452:3;17440:9;17431:7;17427:23;17423:33;17420:53;;;17469:1;17466;17459:12;17420:53;17501:9;17495:16;17520:31;17545:5;17520:31;:::i;:::-;17615:2;17600:18;;17594:25;17659:2;17644:18;;17638:25;17703:2;17688:18;;;17682:25;17570:5;;17594:25;;-1:-1:-1;17682:25:1;;-1:-1:-1;17278:435:1;-1:-1:-1;;;17278:435:1:o;21123:502::-;21386:6;21375:9;21368:25;21429:3;21424:2;21413:9;21409:18;21402:31;21349:4;21450:57;21502:3;21491:9;21487:19;21479:6;21450:57;:::i;:::-;-1:-1:-1;;;;;21543:32:1;;;;21538:2;21523:18;;21516:60;-1:-1:-1;21607:2:1;21592:18;21585:34;21442:65;21123:502;-1:-1:-1;;21123:502:1:o;22640:274::-;-1:-1:-1;;;;;22778:10:1;;;22790;;;22774:27;22821:20;;;;22712:34;22860:24;;;22850:58;;22888:18;;:::i;:::-;22850:58;;22640:274;;;;:::o;22919:216::-;22959:1;-1:-1:-1;;;;;23046:2:1;23043:1;23039:10;23068:3;23058:37;;23075:18;;:::i;:::-;23113:10;;23109:20;;;;;22919:216;-1:-1:-1;;22919:216:1:o;23140:180::-;-1:-1:-1;;;;;23245:10:1;;;23257;;;23241:27;;23280:11;;;23277:37;;;23294:18;;:::i;24752:582::-;25051:6;25040:9;25033:25;25094:6;25089:2;25078:9;25074:18;25067:34;25137:3;25132:2;25121:9;25117:18;25110:31;25014:4;25158:57;25210:3;25199:9;25195:19;25187:6;25158:57;:::i;:::-;-1:-1:-1;;;;;25251:32:1;;;;25246:2;25231:18;;25224:60;-1:-1:-1;25315:3:1;25300:19;25293:35;25150:65;24752:582;-1:-1:-1;;;24752:582:1:o

Swarm Source

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