ETH Price: $2,901.04 (+2.81%)
 

Overview

Max Total Supply

100,000,000 WAM

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,607,962.263932807 WAM

Value
$0.00
0x6cb050bde1b265ba6acae65925efe5dc3c49c888
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:
WeAreMany

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-01
*/

/**
 *Submitted for verification at cronoscan.com on 2022-03-27
*/

// SPDX-License-Identifier: MIT

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

// Dependency file: @openzeppelin/contracts/utils/Context.sol

// pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason 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 {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity =0.8.13;

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

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isBlackedlisted;

    address WCRO = 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23;

    address[] private _excluded;
    address payable public crommunityAddress;
    address payable public developmentAddress;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 public _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _crommunityFee;
    uint256 private _previouscrommunityFee = _crommunityFee;

    uint256 public _developmentFee;
    uint256 private _previousDevelopmentFee = _developmentFee;

    uint256 public _totalTaxes;
    uint256 private _previousTotalTaxes = _totalTaxes;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;

    uint256 public numTokensSellToAddToLiquidity;

    uint256 private _launchTime;
    uint256 private _launchTimeOriginal;

    bool public _isLaunched;

    uint256 public _extraSellFee = 0;

    uint256 public _maxWalletSize;
	
	uint256 public _maxTxSize;

    uint256 private randNum;

    bool private sell = false;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor(
    ) payable {
        
        _name = "We Are Many";
        _symbol = "WAM";
        _decimals = 9;

        _tTotal = 100000000000000000;
                
        _rTotal = (MAX - (MAX % _tTotal));

        _maxWalletSize = 1000000000000000; //%1
		_maxTxSize = MAX;// Will set to after liq added 500000000000000; //%1

        _taxFee = 0;
        _previousTaxFee = 0;

        _liquidityFee = 300;
        _previousLiquidityFee = 300;

        _crommunityFee = 300;
        _previouscrommunityFee = 300;

        _developmentFee = 100;
        _previousDevelopmentFee = 100;

        _totalTaxes = 700;
        _previousTotalTaxes = 700;

        //numTokensSellToAddToLiquidity =  _tTotal.mul(5).div(10**4); // 0.05%

        numTokensSellToAddToLiquidity =  1000000000000000; // 1% of an CRO
        swapAndLiquifyEnabled = true;

        _rOwned[owner()] = _rTotal;

        
        address router_=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        crommunityAddress=payable(0x1d5dbeb62A305Aab35d988837d46496733313978);

        developmentAddress=payable(0x49E0F3533e37CeBc7c1C448e828E375d167A8317);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        random();

        emit Transfer(address(0), owner(), _tTotal);

    }

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

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

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

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

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

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

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

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

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

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

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

    function random() private
    {        
        uint256 randomnumber = uint256(keccak256(abi.encodePacked(block.timestamp,block.difficulty,  
            _msgSender()))) % 60;
        randNum = randomnumber + 1; 

    }

    function updateCrommunityAddress(address payable _newCrommunityAddress) external onlyOwner { 
        crommunityAddress= _newCrommunityAddress;
    }

    function setExtraSellFee(uint256 amt) public onlyOwner 
    {
        require(
            amt >= 0 && amt <= 10**4,
            "Invalid bps"
        );
         _extraSellFee = amt;

    }

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

    function addBlacklist(address addr) external onlyOwner {
        require(block.timestamp < _launchTime + 1 hours);
        _isBlackedlisted[addr]=true;

    }

    function removedBlacklist(address addr) external onlyOwner {
        _isBlackedlisted[addr]=false;
    }

    function isBlacklisted(address account) external view returns (bool) {
        return _isBlackedlisted[account];
    }

    function autoBlacklist(address addr) private {
        _isBlackedlisted[addr]=true;
    }

 

    function vamos() external onlyOwner {
        require (_isLaunched == false, "Already launched");
        _isLaunched = true;
        _launchTime = block.timestamp;
        _launchTimeOriginal = block.timestamp;
    }

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

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

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

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

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

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

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setTaxPercents(uint256 taxFeeBps,uint256 liquidityFeeBps, uint256 crommunityFeeBps, uint256 developmentFeeBps) external onlyOwner {
        require(taxFeeBps >= 0 && taxFeeBps <= 10**4, "Invalid bps");
        require(
            liquidityFeeBps >= 0 && liquidityFeeBps <= 10**4,
            "Invalid bps"
        );
        require(
            crommunityFeeBps >= 0 && crommunityFeeBps <= 10**4,
            "Invalid bps"
        );

        require(
            developmentFeeBps >= 0 && developmentFeeBps <= 10**4,
            "Invalid bps"
        );

        _taxFee = taxFeeBps;
        _liquidityFee = liquidityFeeBps;
        _crommunityFee = crommunityFeeBps;
        _developmentFee = developmentFeeBps;

        _totalTaxes = _liquidityFee + _crommunityFee + _taxFee + _developmentFee;

        require(
            _totalTaxes >= 0 && _totalTaxes <= 20**4,
            "Invalid bps"
        );
    }

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

    function setSwapValue(uint256 amount) external onlyOwner {
        require(amount>0, "Value too low");
        numTokensSellToAddToLiquidity = amount;

    }

    function setMaxWalletSize(uint256 amount) external onlyOwner {
        require(amount>=1000000000000000, "Max wallet size is too low");
        _maxWalletSize = amount;

    }

     function setMaxTxtSize(uint256 amount) external onlyOwner {
        require(amount>=500000000000000, "Max wallet size is too low");
        _maxTxSize = amount;

    }

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

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

    struct GetValueVar
    {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;
        uint256 tCrommunity;
        uint256 tDevelopment;
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {

        GetValueVar memory _var;
   
        (
            _var.tTransferAmount,
            _var.tFee,
            _var.tLiquidity,
            _var.tCrommunity,
            _var.tDevelopment
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            _var.tFee,
            _var.tLiquidity,
            _var.tCrommunity,
            _var.tDevelopment,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            _var.tTransferAmount,
            _var.tFee,
            _var.tLiquidity,
            _var.tCrommunity,
            _var.tDevelopment
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tCrommunityFee = calculateCrommunityFee(tAmount);
        uint256 tDevelopmentFee = calculateDevelopmentFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee);
        tTransferAmount=tTransferAmount.sub(tLiquidity);
        tTransferAmount=tTransferAmount.sub(tCrommunityFee).sub(tDevelopmentFee);

        return (tTransferAmount, tFee, tLiquidity, tCrommunityFee, tDevelopmentFee);
    }

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

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function _takeCrommunityFee(uint256 tCrommunity) private {

        uint256 currentRate = _getRate();
        uint256 rCrommunity = tCrommunity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rCrommunity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tCrommunity);
     }

    function _takeDevFee(uint256 tCharity) private {
        uint256 currentRate = _getRate();
        uint256 rDev = tCharity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rDev);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tCharity);
     }

    

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**4);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**4);
    }

    function calculateCrommunityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        if(sell==true)
        {   
            return _amount.mul((_crommunityFee.add(_extraSellFee))).div(10**4);
        }

         return _amount.mul(_crommunityFee).div(10**4);
    }

     function calculateDevelopmentFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_developmentFee).div(10**4);
    }


    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0 && _crommunityFee == 0 && _developmentFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previouscrommunityFee = _crommunityFee;
        _previousDevelopmentFee = _developmentFee;
        _previousTotalTaxes = _totalTaxes;

        _taxFee = 0;
        _liquidityFee = 0;
        _developmentFee = 0;
        _crommunityFee = 0;
        _totalTaxes = 0;

    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _crommunityFee = _previouscrommunityFee;
        _developmentFee = _previousDevelopmentFee;
        _totalTaxes = _previousTotalTaxes;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(_isBlackedlisted[from]!=true && _isBlackedlisted[to]!=true, "Address is blacklisted");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        sell=false;

        if (to==uniswapV2Pair)
        {
            sell=true;
        }

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            from != uniswapV2Pair &&
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled
        ) {
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    function manualETH(uint256 amountPercentage) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(owner()).transfer(amountETH * amountPercentage / 100);
    }

    function manualToken() external onlyOwner {
        
        uint256 amountToken = balanceOf(address(this));
        _rOwned[address(this)] = _rOwned[address(this)].sub(amountToken);
        _rOwned[owner()] = _rOwned[owner()].add(amountToken);
        _tOwned[address(this)] = _tOwned[address(this)].sub(amountToken);
        _tOwned[owner()] = _tOwned[owner()].add(amountToken);
        emit Transfer(address(this), owner(), (amountToken));

    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 liquidityTokenPortion = contractTokenBalance.div(_totalTaxes).mul(_liquidityFee);
        liquidityTokenPortion = liquidityTokenPortion.div(2);

        uint256 otherPortion = contractTokenBalance.sub(liquidityTokenPortion);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(otherPortion); 

        uint256 liqD = _liquidityFee.div(2);
        uint256 divisor = _crommunityFee + _developmentFee  + _taxFee + liqD;

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

        uint256 liquidityETHPortion = newBalance.mul(_totalTaxes).div(divisor);
        liquidityETHPortion = liquidityETHPortion.div(_totalTaxes).mul(liqD);

        uint256 newBalanceAfterLiq = address(this).balance.sub(liquidityETHPortion);

       // uint256 taxesWithoutLiq = _totalTaxes.sub(_liquidityFee);

        uint256 total = _totalTaxes.sub(_liquidityFee);

        uint256 crommunityPortion = newBalanceAfterLiq.div(total).mul(_crommunityFee);
        payable(crommunityAddress).transfer(crommunityPortion);

        uint256 developmentPortion = newBalanceAfterLiq.div(total).mul(_developmentFee);
        payable(developmentAddress).transfer(developmentPortion);

        // add liquidity to uniswap
        addLiquidity(liquidityTokenPortion, liquidityETHPortion);
        emit SwapAndLiquify(liquidityTokenPortion, newBalanceAfterLiq, liquidityETHPortion);
    }

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity,
            uint256 tCrommunity,
            uint256 tDevelopment
        ) = _getValues(tAmount);    

        require( tAmount <_maxTxSize, "Amount is larger than max transaction");
        if (_isLaunched !=true && recipient !=uniswapV2Pair && sender!=owner() && recipient!=owner()) 
        {
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            emit Transfer(sender, recipient, tTransferAmount);                    
            autoBlacklist(recipient);
        }

        else if (_isLaunched==true && _launchTime + 5 minutes + randNum > block.timestamp && recipient !=uniswapV2Pair && sender!=owner() && recipient!=owner()) 
        {
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            emit Transfer(sender, recipient, tTransferAmount);                   
            autoBlacklist(recipient);
        }
        else if (sender==owner() || recipient==owner()) 
        {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            _rOwned[sender] = _rOwned[sender].sub(rAmount);   

            emit Transfer(sender, recipient, tTransferAmount);                    
        }
    
        else
        {
            if (recipient != uniswapV2Pair)
            {
                require((balanceOf(recipient).add(tAmount)) <= _maxWalletSize , "Transfer exceeds max wallet size");
            }

            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeLiquidity(tLiquidity);
            _takeCrommunityFee(tCrommunity);
            _takeDevFee(tDevelopment);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, recipient, tTransferAmount);

        }  
        
        
        
    }

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

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

    function removeLiquidtySteps() public onlyOwner(){
        swapAndLiquifyEnabled=false;
        _maxWalletSize=MAX;
        _maxTxSize=MAX;
        _crommunityFee=0;
        _developmentFee=0;
        _liquidityFee=0;
        _extraSellFee=0;
        _totalTaxes=0;
        excludeFromFee(owner());
        excludeFromReward(owner());
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_crommunityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_extraSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crommunityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"manualETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidtySteps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removedBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setExtraSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxtSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFeeBps","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeBps","type":"uint256"},{"internalType":"uint256","name":"crommunityFeeBps","type":"uint256"},{"internalType":"uint256","name":"developmentFeeBps","type":"uint256"}],"name":"setTaxPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newCrommunityAddress","type":"address"}],"name":"updateCrommunityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vamos","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600780546001600160a01b031916735c7f8a570d578ed84e63fdfa7b1ee72deae1ae23179055601154601255601354601455601554601655601754601855601954601a5560006021556025805460ff1916905562000069620000633390565b6200043b565b60408051808201909152600b8082526a576520417265204d616e7960a81b60209092019182526200009d91600e91620004ef565b506040805180820190915260038082526257414d60e81b6020909201918252620000ca91600f91620004ef565b506010805460ff1916600917905567016345785d8a0000600b819055620000f49060001962000595565b6200010290600019620005ce565b600c81905566038d7ea4c68000602281905560001960235560006011819055601281905561012c601381905560148190556015819055601655606460178190556018556102bc6019819055601a55601d91909155601c805460ff60a81b1916600160a81b1790556001906200017f6000546001600160a01b031690565b6001600160a01b03168152602080820192909252604090810160002092909255600980546001600160a01b0319908116731d5dbeb62a305aab35d988837d4649673331397817909155600a80549091167349e0f3533e37cebc7c1c448e828e375d167a8317179055815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d928392839263c45a01559260048082019392918290030181865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005e8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d19190620005e8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200031f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003459190620005e8565b601c80546001600160a01b03199081166001600160a01b0393841617909155601b80549091169183169190911790556001600460006200038d6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003d76200048b565b6000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200042b91815260200190565b60405180910390a3505062000671565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805142602080830191909152448284015233606090811b6001600160601b031916908301528251605481840301815260749092019092528051910120600090620004da90603c9062000595565b9050620004e98160016200061a565b60245550565b828054620004fd9062000635565b90600052602060002090601f0160209004810192826200052157600085556200056c565b82601f106200053c57805160ff19168380011785556200056c565b828001600101855582156200056c579182015b828111156200056c5782518255916020019190600101906200054f565b506200057a9291506200057e565b5090565b5b808211156200057a57600081556001016200057f565b600082620005b357634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620005e357620005e3620005b8565b500390565b600060208284031215620005fb57600080fd5b81516001600160a01b03811681146200061357600080fd5b9392505050565b60008219821115620006305762000630620005b8565b500190565b600181811c908216806200064a57607f821691505b6020821081036200066b57634e487b7160e01b600052602260045260246000fd5b50919050565b61332180620006816000396000f3fe6080604052600436106103035760003560e01c806370a0823111610190578063be9ace74116100dc578063dd62ed3e11610095578063ea2f0b371161006f578063ea2f0b3714610901578063f2fde38b14610921578063fe2b6bc614610941578063fe575a871461095657600080fd5b8063dd62ed3e14610886578063e24208c6146108cc578063ea1644d5146108e157600080fd5b8063be9ace74146107ee578063c49b9a8014610804578063c665356214610824578063c9e3c0a314610844578063d12a76881461085a578063d14751851461087057600080fd5b80639725cd5b116101495780639e0a7810116101235780639e0a781014610774578063a457c2d71461078e578063a9059cbb146107ae578063bd060bff146107ce57600080fd5b80639725cd5b1461071f57806397bfcda3146107345780639cfe42da1461075457600080fd5b806370a0823114610668578063715018a61461068857806388f820201461069d5780638da5cb5b146106d65780638f9a55c0146106f457806395d89b411461070a57600080fd5b80633b124fe71161024f57806352390c0211610208578063638b1b14116101e2578063638b1b14146105f257806366e930b3146106125780636a570249146106325780636bc87c3a1461065257600080fd5b806352390c02146105795780635342acb41461059957806355739b77146105d257600080fd5b80633b124fe7146104cc578063437823ec146104e25780634549b0391461050257806349bd5a5e146105225780634a74bb0214610542578063511b5f611461056357600080fd5b806318160ddd116102bc578063313ce56711610296578063313ce5671461045457806334936d7a146104765780633685d4191461048c57806339509351146104ac57600080fd5b806318160ddd146103ff57806323b872dd146104145780632d8381191461043457600080fd5b806306b4b8381461030f57806306fdde031461034c578063095ea7b31461036e57806313114a9d1461039e57806314a18e73146103bd5780631694505e146103df57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5060095461032f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561035857600080fd5b5061036161098f565b6040516103439190612e8f565b34801561037a57600080fd5b5061038e610389366004612ef9565b610a21565b6040519015158152602001610343565b3480156103aa57600080fd5b50600d545b604051908152602001610343565b3480156103c957600080fd5b506103dd6103d8366004612f25565b610a38565b005b3480156103eb57600080fd5b50601b5461032f906001600160a01b031681565b34801561040b57600080fd5b50600b546103af565b34801561042057600080fd5b5061038e61042f366004612f57565b610b55565b34801561044057600080fd5b506103af61044f366004612f98565b610bbe565b34801561046057600080fd5b5060105460405160ff9091168152602001610343565b34801561048257600080fd5b506103af60155481565b34801561049857600080fd5b506103dd6104a7366004612fb1565b610c42565b3480156104b857600080fd5b5061038e6104c7366004612ef9565b610df8565b3480156104d857600080fd5b506103af60115481565b3480156104ee57600080fd5b506103dd6104fd366004612fb1565b610e2e565b34801561050e57600080fd5b506103af61051d366004612fe3565b610e7c565b34801561052e57600080fd5b50601c5461032f906001600160a01b031681565b34801561054e57600080fd5b50601c5461038e90600160a81b900460ff1681565b34801561056f57600080fd5b506103af60235481565b34801561058557600080fd5b506103dd610594366004612fb1565b610f0d565b3480156105a557600080fd5b5061038e6105b4366004612fb1565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105de57600080fd5b506103dd6105ed366004612f98565b611060565b3480156105fe57600080fd5b50600a5461032f906001600160a01b031681565b34801561061e57600080fd5b506103dd61062d366004612fb1565b6110cf565b34801561063e57600080fd5b506103dd61064d366004612f98565b61111a565b34801561065e57600080fd5b506103af60135481565b34801561067457600080fd5b506103af610683366004612fb1565b61116b565b34801561069457600080fd5b506103dd6111ca565b3480156106a957600080fd5b5061038e6106b8366004612fb1565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106e257600080fd5b506000546001600160a01b031661032f565b34801561070057600080fd5b506103af60225481565b34801561071657600080fd5b50610361611200565b34801561072b57600080fd5b506103dd61120f565b34801561074057600080fd5b506103dd61074f366004612f98565b6113a7565b34801561076057600080fd5b506103dd61076f366004612fb1565b611433565b34801561078057600080fd5b5060205461038e9060ff1681565b34801561079a57600080fd5b5061038e6107a9366004612ef9565b61149b565b3480156107ba57600080fd5b5061038e6107c9366004612ef9565b6114ea565b3480156107da57600080fd5b506103dd6107e9366004612fb1565b6114f7565b3480156107fa57600080fd5b506103af60215481565b34801561081057600080fd5b506103dd61081f36600461300f565b611543565b34801561083057600080fd5b506103dd61083f366004612f98565b6115c5565b34801561085057600080fd5b506103af60195481565b34801561086657600080fd5b506103af601d5481565b34801561087c57600080fd5b506103af60175481565b34801561089257600080fd5b506103af6108a136600461302a565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108d857600080fd5b506103dd61164b565b3480156108ed57600080fd5b506103dd6108fc366004612f98565b6116d0565b34801561090d57600080fd5b506103dd61091c366004612fb1565b611756565b34801561092d57600080fd5b506103dd61093c366004612fb1565b6117a1565b34801561094d57600080fd5b506103dd61183c565b34801561096257600080fd5b5061038e610971366004612fb1565b6001600160a01b031660009081526006602052604090205460ff1690565b6060600e805461099e90613063565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613063565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2e3384846118c4565b5060015b92915050565b6000546001600160a01b03163314610a6b5760405162461bcd60e51b8152600401610a629061309d565b60405180910390fd5b612710841115610a8d5760405162461bcd60e51b8152600401610a62906130d2565b612710831115610aaf5760405162461bcd60e51b8152600401610a62906130d2565b612710821115610ad15760405162461bcd60e51b8152600401610a62906130d2565b612710811115610af35760405162461bcd60e51b8152600401610a62906130d2565b60118490556013839055601582905560178190558084610b13848661310d565b610b1d919061310d565b610b27919061310d565b601955620271006019541115610b4f5760405162461bcd60e51b8152600401610a62906130d2565b50505050565b6000610b628484846119e8565b610bb48433610baf8560405180606001604052806028815260200161327f602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611c98565b6118c4565b5060019392505050565b6000600c54821115610c255760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a62565b6000610c2f611cc4565b9050610c3b8382611ce7565b9392505050565b6000546001600160a01b03163314610c6c5760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03811660009081526005602052604090205460ff16610cd45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a62565b60005b600854811015610df457816001600160a01b031660088281548110610cfe57610cfe613125565b6000918252602090912001546001600160a01b031603610de25760088054610d289060019061313b565b81548110610d3857610d38613125565b600091825260209091200154600880546001600160a01b039092169183908110610d6457610d64613125565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610dbc57610dbc613152565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dec81613168565b915050610cd7565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a2e918590610baf9086611cf3565b6000546001600160a01b03163314610e585760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600b54831115610ed05760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a62565b81610ef1576000610ee084611cff565b50959750610a329650505050505050565b6000610efc84611cff565b50949750610a329650505050505050565b6000546001600160a01b03163314610f375760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03811660009081526005602052604090205460ff1615610fa05760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a62565b6001600160a01b03811660009081526001602052604090205415610ffa576001600160a01b038116600090815260016020526040902054610fe090610bbe565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461108a5760405162461bcd60e51b8152600401610a629061309d565b600081116110ca5760405162461bcd60e51b815260206004820152600d60248201526c56616c756520746f6f206c6f7760981b6044820152606401610a62565b601d55565b6000546001600160a01b031633146110f95760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146111445760405162461bcd60e51b8152600401610a629061309d565b6127108111156111665760405162461bcd60e51b8152600401610a62906130d2565b602155565b6001600160a01b03811660009081526005602052604081205460ff16156111a857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a3290610bbe565b6000546001600160a01b031633146111f45760405162461bcd60e51b8152600401610a629061309d565b6111fe6000611dde565b565b6060600f805461099e90613063565b6000546001600160a01b031633146112395760405162461bcd60e51b8152600401610a629061309d565b60006112443061116b565b306000908152600160205260409020549091506112619082611e2e565b3060009081526001602081905260408220929092556112ae91839161128e6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205490611cf3565b600160006112c46000546001600160a01b031690565b6001600160a01b03168152602080820192909252604090810160009081209390935530835260029091529020546112fb9082611e2e565b30600090815260026020819052604082209290925561132891839161128e6000546001600160a01b031690565b6002600061133e6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561136a6000546001600160a01b031690565b6001600160a01b0316306001600160a01b03166000805160206132a78339815191528360405161139c91815260200190565b60405180910390a350565b6000546001600160a01b031633146113d15760405162461bcd60e51b8152600401610a629061309d565b476113e46000546001600160a01b031690565b6001600160a01b03166108fc60646113fc8585613181565b61140691906131a0565b6040518115909202916000818181858888f1935050505015801561142e573d6000803e3d6000fd5b505050565b6000546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610a629061309d565b601e5461146c90610e1061310d565b421061147757600080fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000610a2e3384610baf856040518060600160405280602581526020016132c7602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611c98565b6000610a2e3384846119e8565b6000546001600160a01b031633146115215760405162461bcd60e51b8152600401610a629061309d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461156d5760405162461bcd60e51b8152600401610a629061309d565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115ba90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115ef5760405162461bcd60e51b8152600401610a629061309d565b6601c6bf526340008110156116465760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610a62565b602355565b6000546001600160a01b031633146116755760405162461bcd60e51b8152600401610a629061309d565b601c805460ff60a81b191690556000196022819055602355600060158190556017819055601381905560218190556019556116bb6104fd6000546001600160a01b031690565b6111fe6105946000546001600160a01b031690565b6000546001600160a01b031633146116fa5760405162461bcd60e51b8152600401610a629061309d565b66038d7ea4c680008110156117515760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610a62565b602255565b6000546001600160a01b031633146117805760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146117cb5760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b0381166118305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a62565b61183981611dde565b50565b6000546001600160a01b031633146118665760405162461bcd60e51b8152600401610a629061309d565b60205460ff16156118ac5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610a62565b6020805460ff1916600117905542601e819055601f55565b6001600160a01b0383166119265760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a62565b6001600160a01b0382166119875760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a62565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a4c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a62565b6001600160a01b038216611aae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a62565b60008111611b105760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a62565b6001600160a01b03831660009081526006602052604090205460ff161515600114801590611b5c57506001600160a01b03821660009081526006602052604090205460ff161515600114155b611ba15760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610a62565b6000611bac3061116b565b6025805460ff19169055601c549091506001600160a01b0390811690841603611bdd576025805460ff191660011790555b601d54601c5490821015906001600160a01b03868116911614801590611c005750805b8015611c165750601c54600160a01b900460ff16155b8015611c2b5750601c54600160a81b900460ff165b15611c3957611c3982611e3a565b6001600160a01b03851660009081526004602052604090205460019060ff1680611c7b57506001600160a01b03851660009081526004602052604090205460ff165b15611c84575060005b611c9086868684612053565b505050505050565b60008184841115611cbc5760405162461bcd60e51b8152600401610a629190612e8f565b505050900390565b6000806000611cd16121dc565b9092509050611ce08282611ce7565b9250505090565b6000610c3b82846131a0565b6000610c3b828461310d565b600080600080600080600080611d3d6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b611d468a61235e565b8560000186602001876040018860600189608001858152508581525085815250858152508581525050505050506000806000611d9d8d8560200151866040015187606001518860800151611d98611cc4565b6123da565b92509250925082828286600001518760200151886040015189606001518a608001519b509b509b509b509b509b509b509b5050505050919395975091939597565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610c3b828461313b565b601c805460ff60a01b1916600160a01b179055601354601954600091611e6b91611e65908590611ce7565b9061246a565b9050611e78816002611ce7565b90506000611e868383611e2e565b905047611e9282612476565b601354600090611ea3906002611ce7565b9050600081601154601754601554611ebb919061310d565b611ec5919061310d565b611ecf919061310d565b90506000611edd4785611e2e565b90506000611f0083611efa6019548561246a90919063ffffffff16565b90611ce7565b9050611f1b84611e6560195484611ce790919063ffffffff16565b90506000611f294783611e2e565b90506000611f44601354601954611e2e90919063ffffffff16565b90506000611f61601554611e658486611ce790919063ffffffff16565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611f9c573d6000803e3d6000fd5b50601754600090611fb190611e658686611ce7565b600a546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611fec573d6000803e3d6000fd5b50611ff78b866125c8565b604080518c8152602081018690529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b1916905550505050505050505050565b806120605761206061269d565b6001600160a01b03841660009081526005602052604090205460ff1680156120a157506001600160a01b03831660009081526005602052604090205460ff16155b156120b6576120b1848484612702565b6121b4565b6001600160a01b03841660009081526005602052604090205460ff161580156120f757506001600160a01b03831660009081526005602052604090205460ff165b15612107576120b1848484612843565b6001600160a01b03841660009081526005602052604090205460ff1615801561214957506001600160a01b03831660009081526005602052604090205460ff16155b15612159576120b1848484612905565b6001600160a01b03841660009081526005602052604090205460ff16801561219957506001600160a01b03831660009081526005602052604090205460ff165b156121a9576120b1848484612cac565b6121b4848484612905565b80610b4f57610b4f601254601155601454601355601654601555601854601755601a54601955565b600c54600b546000918291825b60085481101561232e5782600160006008848154811061220b5761220b613125565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612276575081600260006008848154811061224f5761224f613125565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561228c57600c54600b54945094505050509091565b6122d260016000600884815481106122a6576122a6613125565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e2e565b925061231a60026000600884815481106122ee576122ee613125565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e2e565b91508061232681613168565b9150506121e9565b50600b54600c5461233e91611ce7565b82101561235557600c54600b549350935050509091565b90939092509050565b60008060008060008061237087612d38565b9050600061237d88612d55565b9050600061238a89612d72565b905060006123978a612dc6565b905060006123a58b86611e2e565b90506123b18185611e2e565b90506123c7826123c18386611e2e565b90611e2e565b9b949a5092985090965094509092505050565b60008080806123e98a8661246a565b905060006123f78a8761246a565b905060006124058a8861246a565b905060006124138a8961246a565b905060006124218a8a61246a565b9050600061242f8686611e2e565b905061243b8185611e2e565b90506124478184611e2e565b90506124538183611e2e565b959f959e50939c50939a5050505050505050505050565b6000610c3b8284613181565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124ab576124ab613125565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612504573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252891906131c2565b8160018151811061253b5761253b613125565b6001600160a01b039283166020918202929092010152601b5461256191309116846118c4565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061259a9085906000908690309042906004016131df565b600060405180830381600087803b1580156125b457600080fd5b505af1158015611c90573d6000803e3d6000fd5b601b546125e09030906001600160a01b0316846118c4565b601b546001600160a01b031663f305d7198230856000806126096000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612671573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126969190613250565b5050505050565b6011541580156126ad5750601354155b80156126b95750601554155b80156126c55750601754155b156126cc57565b6011805460125560138054601455601580546016556017805460185560198054601a556000948590559284905583905582905555565b60008060008060008060008061271789611cff565b9750975097509750975097509750975061275f89600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002054611e2e90919063ffffffff16565b6001600160a01b038c1660009081526002602090815260408083209390935560019052205461278e9089611e2e565b6001600160a01b03808d1660009081526001602052604080822093909355908c16815220546127bd9088611cf3565b6001600160a01b038b166000908152600160205260409020556127df83612de3565b6127e882612de3565b6127f181612de3565b6127fb8685612e6b565b896001600160a01b03168b6001600160a01b03166000805160206132a78339815191528760405161282e91815260200190565b60405180910390a35050505050505050505050565b60008060008060008060008061285889611cff565b975097509750975097509750975097506128a088600160008e6001600160a01b03166001600160a01b0316815260200190815260200160002054611e2e90919063ffffffff16565b6001600160a01b03808d16600090815260016020908152604080832094909455918d168152600290915220546128d69086611cf3565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546127bd9088611cf3565b60008060008060008060008061291a89611cff565b9750975097509750975097509750975060235489106129895760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74206973206c6172676572207468616e206d6178207472616e736160448201526431ba34b7b760d91b6064820152608401610a62565b60205460ff1615156001148015906129af5750601c546001600160a01b038b8116911614155b80156129c957506000546001600160a01b038c8116911614155b80156129e357506000546001600160a01b038b8116911614155b15612a92576001600160a01b038b16600090815260016020526040902054612a0b9089611e2e565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054612a3a9088611cf3565b6001600160a01b03808c1660008181526001602052604090819020939093559151908d16906000805160206132a783398151915290612a7c9089815260200190565b60405180910390a3612a8d8a611477565b612c9f565b60205460ff1615156001148015612ac4575042602454601e5461012c612ab8919061310d565b612ac2919061310d565b115b8015612ade5750601c546001600160a01b038b8116911614155b8015612af857506000546001600160a01b038c8116911614155b8015612b1257506000546001600160a01b038b8116911614155b15612b3a576001600160a01b038b16600090815260016020526040902054612a0b9089611e2e565b6000546001600160a01b038c811691161480612b6357506000546001600160a01b038b81169116145b15612c03576001600160a01b038a16600090815260016020526040902054612b8b9089611cf3565b6001600160a01b03808c1660009081526001602052604080822093909355908d1681522054612bba9089611e2e565b6001600160a01b038c81166000818152600160209081526040918290209490945551888152918d169290916000805160206132a7833981519152910160405180910390a3612c9f565b601c546001600160a01b038b8116911614612c7c57602254612c2e8a612c288d61116b565b90611cf3565b1115612c7c5760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a656044820152606401610a62565b6001600160a01b038b1660009081526001602052604090205461278e9089611e2e565b5050505050505050505050565b600080600080600080600080612cc189611cff565b97509750975097509750975097509750612d0989600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002054611e2e90919063ffffffff16565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546128a09089611e2e565b6000610a32612710611efa6011548561246a90919063ffffffff16565b6000610a32612710611efa6013548561246a90919063ffffffff16565b60255460009060ff161515600103612dab57610a32612710611efa612da4602154601554611cf390919063ffffffff16565b859061246a565b610a32612710611efa6015548561246a90919063ffffffff16565b6000610a32612710611efa6017548561246a90919063ffffffff16565b6000612ded611cc4565b90506000612dfb838361246a565b30600090815260016020526040902054909150612e189082611cf3565b3060009081526001602090815260408083209390935560059052205460ff161561142e5730600090815260026020526040902054612e569084611cf3565b30600090815260026020526040902055505050565b600c54612e789083611e2e565b600c55600d54612e889082611cf3565b600d555050565b600060208083528351808285015260005b81811015612ebc57858101830151858201604001528201612ea0565b81811115612ece576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461183957600080fd5b60008060408385031215612f0c57600080fd5b8235612f1781612ee4565b946020939093013593505050565b60008060008060808587031215612f3b57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612f6c57600080fd5b8335612f7781612ee4565b92506020840135612f8781612ee4565b929592945050506040919091013590565b600060208284031215612faa57600080fd5b5035919050565b600060208284031215612fc357600080fd5b8135610c3b81612ee4565b80358015158114612fde57600080fd5b919050565b60008060408385031215612ff657600080fd5b8235915061300660208401612fce565b90509250929050565b60006020828403121561302157600080fd5b610c3b82612fce565b6000806040838503121561303d57600080fd5b823561304881612ee4565b9150602083013561305881612ee4565b809150509250929050565b600181811c9082168061307757607f821691505b60208210810361309757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600b908201526a496e76616c69642062707360a81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613120576131206130f7565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561314d5761314d6130f7565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161317a5761317a6130f7565b5060010190565b600081600019048311821515161561319b5761319b6130f7565b500290565b6000826131bd57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156131d457600080fd5b8151610c3b81612ee4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561322f5784516001600160a01b03168352938301939183019160010161320a565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561326557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122014702fad63eb12cebb63d11d1bcf0d4abc8f91ab302e7b5f95566046429dfd8c64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103035760003560e01c806370a0823111610190578063be9ace74116100dc578063dd62ed3e11610095578063ea2f0b371161006f578063ea2f0b3714610901578063f2fde38b14610921578063fe2b6bc614610941578063fe575a871461095657600080fd5b8063dd62ed3e14610886578063e24208c6146108cc578063ea1644d5146108e157600080fd5b8063be9ace74146107ee578063c49b9a8014610804578063c665356214610824578063c9e3c0a314610844578063d12a76881461085a578063d14751851461087057600080fd5b80639725cd5b116101495780639e0a7810116101235780639e0a781014610774578063a457c2d71461078e578063a9059cbb146107ae578063bd060bff146107ce57600080fd5b80639725cd5b1461071f57806397bfcda3146107345780639cfe42da1461075457600080fd5b806370a0823114610668578063715018a61461068857806388f820201461069d5780638da5cb5b146106d65780638f9a55c0146106f457806395d89b411461070a57600080fd5b80633b124fe71161024f57806352390c0211610208578063638b1b14116101e2578063638b1b14146105f257806366e930b3146106125780636a570249146106325780636bc87c3a1461065257600080fd5b806352390c02146105795780635342acb41461059957806355739b77146105d257600080fd5b80633b124fe7146104cc578063437823ec146104e25780634549b0391461050257806349bd5a5e146105225780634a74bb0214610542578063511b5f611461056357600080fd5b806318160ddd116102bc578063313ce56711610296578063313ce5671461045457806334936d7a146104765780633685d4191461048c57806339509351146104ac57600080fd5b806318160ddd146103ff57806323b872dd146104145780632d8381191461043457600080fd5b806306b4b8381461030f57806306fdde031461034c578063095ea7b31461036e57806313114a9d1461039e57806314a18e73146103bd5780631694505e146103df57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5060095461032f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561035857600080fd5b5061036161098f565b6040516103439190612e8f565b34801561037a57600080fd5b5061038e610389366004612ef9565b610a21565b6040519015158152602001610343565b3480156103aa57600080fd5b50600d545b604051908152602001610343565b3480156103c957600080fd5b506103dd6103d8366004612f25565b610a38565b005b3480156103eb57600080fd5b50601b5461032f906001600160a01b031681565b34801561040b57600080fd5b50600b546103af565b34801561042057600080fd5b5061038e61042f366004612f57565b610b55565b34801561044057600080fd5b506103af61044f366004612f98565b610bbe565b34801561046057600080fd5b5060105460405160ff9091168152602001610343565b34801561048257600080fd5b506103af60155481565b34801561049857600080fd5b506103dd6104a7366004612fb1565b610c42565b3480156104b857600080fd5b5061038e6104c7366004612ef9565b610df8565b3480156104d857600080fd5b506103af60115481565b3480156104ee57600080fd5b506103dd6104fd366004612fb1565b610e2e565b34801561050e57600080fd5b506103af61051d366004612fe3565b610e7c565b34801561052e57600080fd5b50601c5461032f906001600160a01b031681565b34801561054e57600080fd5b50601c5461038e90600160a81b900460ff1681565b34801561056f57600080fd5b506103af60235481565b34801561058557600080fd5b506103dd610594366004612fb1565b610f0d565b3480156105a557600080fd5b5061038e6105b4366004612fb1565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105de57600080fd5b506103dd6105ed366004612f98565b611060565b3480156105fe57600080fd5b50600a5461032f906001600160a01b031681565b34801561061e57600080fd5b506103dd61062d366004612fb1565b6110cf565b34801561063e57600080fd5b506103dd61064d366004612f98565b61111a565b34801561065e57600080fd5b506103af60135481565b34801561067457600080fd5b506103af610683366004612fb1565b61116b565b34801561069457600080fd5b506103dd6111ca565b3480156106a957600080fd5b5061038e6106b8366004612fb1565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106e257600080fd5b506000546001600160a01b031661032f565b34801561070057600080fd5b506103af60225481565b34801561071657600080fd5b50610361611200565b34801561072b57600080fd5b506103dd61120f565b34801561074057600080fd5b506103dd61074f366004612f98565b6113a7565b34801561076057600080fd5b506103dd61076f366004612fb1565b611433565b34801561078057600080fd5b5060205461038e9060ff1681565b34801561079a57600080fd5b5061038e6107a9366004612ef9565b61149b565b3480156107ba57600080fd5b5061038e6107c9366004612ef9565b6114ea565b3480156107da57600080fd5b506103dd6107e9366004612fb1565b6114f7565b3480156107fa57600080fd5b506103af60215481565b34801561081057600080fd5b506103dd61081f36600461300f565b611543565b34801561083057600080fd5b506103dd61083f366004612f98565b6115c5565b34801561085057600080fd5b506103af60195481565b34801561086657600080fd5b506103af601d5481565b34801561087c57600080fd5b506103af60175481565b34801561089257600080fd5b506103af6108a136600461302a565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156108d857600080fd5b506103dd61164b565b3480156108ed57600080fd5b506103dd6108fc366004612f98565b6116d0565b34801561090d57600080fd5b506103dd61091c366004612fb1565b611756565b34801561092d57600080fd5b506103dd61093c366004612fb1565b6117a1565b34801561094d57600080fd5b506103dd61183c565b34801561096257600080fd5b5061038e610971366004612fb1565b6001600160a01b031660009081526006602052604090205460ff1690565b6060600e805461099e90613063565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613063565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2e3384846118c4565b5060015b92915050565b6000546001600160a01b03163314610a6b5760405162461bcd60e51b8152600401610a629061309d565b60405180910390fd5b612710841115610a8d5760405162461bcd60e51b8152600401610a62906130d2565b612710831115610aaf5760405162461bcd60e51b8152600401610a62906130d2565b612710821115610ad15760405162461bcd60e51b8152600401610a62906130d2565b612710811115610af35760405162461bcd60e51b8152600401610a62906130d2565b60118490556013839055601582905560178190558084610b13848661310d565b610b1d919061310d565b610b27919061310d565b601955620271006019541115610b4f5760405162461bcd60e51b8152600401610a62906130d2565b50505050565b6000610b628484846119e8565b610bb48433610baf8560405180606001604052806028815260200161327f602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611c98565b6118c4565b5060019392505050565b6000600c54821115610c255760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a62565b6000610c2f611cc4565b9050610c3b8382611ce7565b9392505050565b6000546001600160a01b03163314610c6c5760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03811660009081526005602052604090205460ff16610cd45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a62565b60005b600854811015610df457816001600160a01b031660088281548110610cfe57610cfe613125565b6000918252602090912001546001600160a01b031603610de25760088054610d289060019061313b565b81548110610d3857610d38613125565b600091825260209091200154600880546001600160a01b039092169183908110610d6457610d64613125565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610dbc57610dbc613152565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dec81613168565b915050610cd7565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a2e918590610baf9086611cf3565b6000546001600160a01b03163314610e585760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600b54831115610ed05760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a62565b81610ef1576000610ee084611cff565b50959750610a329650505050505050565b6000610efc84611cff565b50949750610a329650505050505050565b6000546001600160a01b03163314610f375760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03811660009081526005602052604090205460ff1615610fa05760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a62565b6001600160a01b03811660009081526001602052604090205415610ffa576001600160a01b038116600090815260016020526040902054610fe090610bbe565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461108a5760405162461bcd60e51b8152600401610a629061309d565b600081116110ca5760405162461bcd60e51b815260206004820152600d60248201526c56616c756520746f6f206c6f7760981b6044820152606401610a62565b601d55565b6000546001600160a01b031633146110f95760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146111445760405162461bcd60e51b8152600401610a629061309d565b6127108111156111665760405162461bcd60e51b8152600401610a62906130d2565b602155565b6001600160a01b03811660009081526005602052604081205460ff16156111a857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610a3290610bbe565b6000546001600160a01b031633146111f45760405162461bcd60e51b8152600401610a629061309d565b6111fe6000611dde565b565b6060600f805461099e90613063565b6000546001600160a01b031633146112395760405162461bcd60e51b8152600401610a629061309d565b60006112443061116b565b306000908152600160205260409020549091506112619082611e2e565b3060009081526001602081905260408220929092556112ae91839161128e6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205490611cf3565b600160006112c46000546001600160a01b031690565b6001600160a01b03168152602080820192909252604090810160009081209390935530835260029091529020546112fb9082611e2e565b30600090815260026020819052604082209290925561132891839161128e6000546001600160a01b031690565b6002600061133e6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205561136a6000546001600160a01b031690565b6001600160a01b0316306001600160a01b03166000805160206132a78339815191528360405161139c91815260200190565b60405180910390a350565b6000546001600160a01b031633146113d15760405162461bcd60e51b8152600401610a629061309d565b476113e46000546001600160a01b031690565b6001600160a01b03166108fc60646113fc8585613181565b61140691906131a0565b6040518115909202916000818181858888f1935050505015801561142e573d6000803e3d6000fd5b505050565b6000546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610a629061309d565b601e5461146c90610e1061310d565b421061147757600080fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000610a2e3384610baf856040518060600160405280602581526020016132c7602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611c98565b6000610a2e3384846119e8565b6000546001600160a01b031633146115215760405162461bcd60e51b8152600401610a629061309d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461156d5760405162461bcd60e51b8152600401610a629061309d565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115ba90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115ef5760405162461bcd60e51b8152600401610a629061309d565b6601c6bf526340008110156116465760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610a62565b602355565b6000546001600160a01b031633146116755760405162461bcd60e51b8152600401610a629061309d565b601c805460ff60a81b191690556000196022819055602355600060158190556017819055601381905560218190556019556116bb6104fd6000546001600160a01b031690565b6111fe6105946000546001600160a01b031690565b6000546001600160a01b031633146116fa5760405162461bcd60e51b8152600401610a629061309d565b66038d7ea4c680008110156117515760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610a62565b602255565b6000546001600160a01b031633146117805760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146117cb5760405162461bcd60e51b8152600401610a629061309d565b6001600160a01b0381166118305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a62565b61183981611dde565b50565b6000546001600160a01b031633146118665760405162461bcd60e51b8152600401610a629061309d565b60205460ff16156118ac5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610a62565b6020805460ff1916600117905542601e819055601f55565b6001600160a01b0383166119265760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a62565b6001600160a01b0382166119875760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a62565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a4c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a62565b6001600160a01b038216611aae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a62565b60008111611b105760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a62565b6001600160a01b03831660009081526006602052604090205460ff161515600114801590611b5c57506001600160a01b03821660009081526006602052604090205460ff161515600114155b611ba15760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610a62565b6000611bac3061116b565b6025805460ff19169055601c549091506001600160a01b0390811690841603611bdd576025805460ff191660011790555b601d54601c5490821015906001600160a01b03868116911614801590611c005750805b8015611c165750601c54600160a01b900460ff16155b8015611c2b5750601c54600160a81b900460ff165b15611c3957611c3982611e3a565b6001600160a01b03851660009081526004602052604090205460019060ff1680611c7b57506001600160a01b03851660009081526004602052604090205460ff165b15611c84575060005b611c9086868684612053565b505050505050565b60008184841115611cbc5760405162461bcd60e51b8152600401610a629190612e8f565b505050900390565b6000806000611cd16121dc565b9092509050611ce08282611ce7565b9250505090565b6000610c3b82846131a0565b6000610c3b828461310d565b600080600080600080600080611d3d6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b611d468a61235e565b8560000186602001876040018860600189608001858152508581525085815250858152508581525050505050506000806000611d9d8d8560200151866040015187606001518860800151611d98611cc4565b6123da565b92509250925082828286600001518760200151886040015189606001518a608001519b509b509b509b509b509b509b509b5050505050919395975091939597565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610c3b828461313b565b601c805460ff60a01b1916600160a01b179055601354601954600091611e6b91611e65908590611ce7565b9061246a565b9050611e78816002611ce7565b90506000611e868383611e2e565b905047611e9282612476565b601354600090611ea3906002611ce7565b9050600081601154601754601554611ebb919061310d565b611ec5919061310d565b611ecf919061310d565b90506000611edd4785611e2e565b90506000611f0083611efa6019548561246a90919063ffffffff16565b90611ce7565b9050611f1b84611e6560195484611ce790919063ffffffff16565b90506000611f294783611e2e565b90506000611f44601354601954611e2e90919063ffffffff16565b90506000611f61601554611e658486611ce790919063ffffffff16565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611f9c573d6000803e3d6000fd5b50601754600090611fb190611e658686611ce7565b600a546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611fec573d6000803e3d6000fd5b50611ff78b866125c8565b604080518c8152602081018690529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b1916905550505050505050505050565b806120605761206061269d565b6001600160a01b03841660009081526005602052604090205460ff1680156120a157506001600160a01b03831660009081526005602052604090205460ff16155b156120b6576120b1848484612702565b6121b4565b6001600160a01b03841660009081526005602052604090205460ff161580156120f757506001600160a01b03831660009081526005602052604090205460ff165b15612107576120b1848484612843565b6001600160a01b03841660009081526005602052604090205460ff1615801561214957506001600160a01b03831660009081526005602052604090205460ff16155b15612159576120b1848484612905565b6001600160a01b03841660009081526005602052604090205460ff16801561219957506001600160a01b03831660009081526005602052604090205460ff165b156121a9576120b1848484612cac565b6121b4848484612905565b80610b4f57610b4f601254601155601454601355601654601555601854601755601a54601955565b600c54600b546000918291825b60085481101561232e5782600160006008848154811061220b5761220b613125565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612276575081600260006008848154811061224f5761224f613125565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561228c57600c54600b54945094505050509091565b6122d260016000600884815481106122a6576122a6613125565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e2e565b925061231a60026000600884815481106122ee576122ee613125565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e2e565b91508061232681613168565b9150506121e9565b50600b54600c5461233e91611ce7565b82101561235557600c54600b549350935050509091565b90939092509050565b60008060008060008061237087612d38565b9050600061237d88612d55565b9050600061238a89612d72565b905060006123978a612dc6565b905060006123a58b86611e2e565b90506123b18185611e2e565b90506123c7826123c18386611e2e565b90611e2e565b9b949a5092985090965094509092505050565b60008080806123e98a8661246a565b905060006123f78a8761246a565b905060006124058a8861246a565b905060006124138a8961246a565b905060006124218a8a61246a565b9050600061242f8686611e2e565b905061243b8185611e2e565b90506124478184611e2e565b90506124538183611e2e565b959f959e50939c50939a5050505050505050505050565b6000610c3b8284613181565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124ab576124ab613125565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612504573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252891906131c2565b8160018151811061253b5761253b613125565b6001600160a01b039283166020918202929092010152601b5461256191309116846118c4565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061259a9085906000908690309042906004016131df565b600060405180830381600087803b1580156125b457600080fd5b505af1158015611c90573d6000803e3d6000fd5b601b546125e09030906001600160a01b0316846118c4565b601b546001600160a01b031663f305d7198230856000806126096000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612671573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126969190613250565b5050505050565b6011541580156126ad5750601354155b80156126b95750601554155b80156126c55750601754155b156126cc57565b6011805460125560138054601455601580546016556017805460185560198054601a556000948590559284905583905582905555565b60008060008060008060008061271789611cff565b9750975097509750975097509750975061275f89600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002054611e2e90919063ffffffff16565b6001600160a01b038c1660009081526002602090815260408083209390935560019052205461278e9089611e2e565b6001600160a01b03808d1660009081526001602052604080822093909355908c16815220546127bd9088611cf3565b6001600160a01b038b166000908152600160205260409020556127df83612de3565b6127e882612de3565b6127f181612de3565b6127fb8685612e6b565b896001600160a01b03168b6001600160a01b03166000805160206132a78339815191528760405161282e91815260200190565b60405180910390a35050505050505050505050565b60008060008060008060008061285889611cff565b975097509750975097509750975097506128a088600160008e6001600160a01b03166001600160a01b0316815260200190815260200160002054611e2e90919063ffffffff16565b6001600160a01b03808d16600090815260016020908152604080832094909455918d168152600290915220546128d69086611cf3565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546127bd9088611cf3565b60008060008060008060008061291a89611cff565b9750975097509750975097509750975060235489106129895760405162461bcd60e51b815260206004820152602560248201527f416d6f756e74206973206c6172676572207468616e206d6178207472616e736160448201526431ba34b7b760d91b6064820152608401610a62565b60205460ff1615156001148015906129af5750601c546001600160a01b038b8116911614155b80156129c957506000546001600160a01b038c8116911614155b80156129e357506000546001600160a01b038b8116911614155b15612a92576001600160a01b038b16600090815260016020526040902054612a0b9089611e2e565b6001600160a01b03808d1660009081526001602052604080822093909355908c1681522054612a3a9088611cf3565b6001600160a01b03808c1660008181526001602052604090819020939093559151908d16906000805160206132a783398151915290612a7c9089815260200190565b60405180910390a3612a8d8a611477565b612c9f565b60205460ff1615156001148015612ac4575042602454601e5461012c612ab8919061310d565b612ac2919061310d565b115b8015612ade5750601c546001600160a01b038b8116911614155b8015612af857506000546001600160a01b038c8116911614155b8015612b1257506000546001600160a01b038b8116911614155b15612b3a576001600160a01b038b16600090815260016020526040902054612a0b9089611e2e565b6000546001600160a01b038c811691161480612b6357506000546001600160a01b038b81169116145b15612c03576001600160a01b038a16600090815260016020526040902054612b8b9089611cf3565b6001600160a01b03808c1660009081526001602052604080822093909355908d1681522054612bba9089611e2e565b6001600160a01b038c81166000818152600160209081526040918290209490945551888152918d169290916000805160206132a7833981519152910160405180910390a3612c9f565b601c546001600160a01b038b8116911614612c7c57602254612c2e8a612c288d61116b565b90611cf3565b1115612c7c5760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a656044820152606401610a62565b6001600160a01b038b1660009081526001602052604090205461278e9089611e2e565b5050505050505050505050565b600080600080600080600080612cc189611cff565b97509750975097509750975097509750612d0989600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002054611e2e90919063ffffffff16565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546128a09089611e2e565b6000610a32612710611efa6011548561246a90919063ffffffff16565b6000610a32612710611efa6013548561246a90919063ffffffff16565b60255460009060ff161515600103612dab57610a32612710611efa612da4602154601554611cf390919063ffffffff16565b859061246a565b610a32612710611efa6015548561246a90919063ffffffff16565b6000610a32612710611efa6017548561246a90919063ffffffff16565b6000612ded611cc4565b90506000612dfb838361246a565b30600090815260016020526040902054909150612e189082611cf3565b3060009081526001602090815260408083209390935560059052205460ff161561142e5730600090815260026020526040902054612e569084611cf3565b30600090815260026020526040902055505050565b600c54612e789083611e2e565b600c55600d54612e889082611cf3565b600d555050565b600060208083528351808285015260005b81811015612ebc57858101830151858201604001528201612ea0565b81811115612ece576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461183957600080fd5b60008060408385031215612f0c57600080fd5b8235612f1781612ee4565b946020939093013593505050565b60008060008060808587031215612f3b57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612f6c57600080fd5b8335612f7781612ee4565b92506020840135612f8781612ee4565b929592945050506040919091013590565b600060208284031215612faa57600080fd5b5035919050565b600060208284031215612fc357600080fd5b8135610c3b81612ee4565b80358015158114612fde57600080fd5b919050565b60008060408385031215612ff657600080fd5b8235915061300660208401612fce565b90509250929050565b60006020828403121561302157600080fd5b610c3b82612fce565b6000806040838503121561303d57600080fd5b823561304881612ee4565b9150602083013561305881612ee4565b809150509250929050565b600181811c9082168061307757607f821691505b60208210810361309757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600b908201526a496e76616c69642062707360a81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613120576131206130f7565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561314d5761314d6130f7565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161317a5761317a6130f7565b5060010190565b600081600019048311821515161561319b5761319b6130f7565b500290565b6000826131bd57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156131d457600080fd5b8151610c3b81612ee4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561322f5784516001600160a01b03168352938301939183019160010161320a565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561326557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122014702fad63eb12cebb63d11d1bcf0d4abc8f91ab302e7b5f95566046429dfd8c64736f6c634300080d0033

Deployed Bytecode Sourcemap

27222:30198:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27777:40;;;;;;;;;;-1:-1:-1;27777:40:0;;;;-1:-1:-1;;;;;27777:40:0;;;;;;-1:-1:-1;;;;;194:32:1;;;176:51;;164:2;149:18;27777:40:0;;;;;;;;31226:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32211:193::-;;;;;;;;;;-1:-1:-1;32211:193:0;;;;;:::i;:::-;;:::i;:::-;;;1461:14:1;;1454:22;1436:41;;1424:2;1409:18;32211:193:0;1296:187:1;35054:87:0;;;;;;;;;;-1:-1:-1;35123:10:0;;35054:87;;;1634:25:1;;;1622:2;1607:18;35054:87:0;1488:177:1;37949:949:0;;;;;;;;;;-1:-1:-1;37949:949:0;;;;;:::i;:::-;;:::i;:::-;;28574:41;;;;;;;;;;-1:-1:-1;28574:41:0;;;;-1:-1:-1;;;;;28574:41:0;;;31503:95;;;;;;;;;;-1:-1:-1;31583:7:0;;31503:95;;32412:446;;;;;;;;;;-1:-1:-1;32412:446:0;;;;;:::i;:::-;;:::i;35645:322::-;;;;;;;;;;-1:-1:-1;35645:322:0;;;;;:::i;:::-;;:::i;31412:83::-;;;;;;;;;;-1:-1:-1;31478:9:0;;31412:83;;31478:9;;;;3083:36:1;;3071:2;3056:18;31412:83:0;2941:184:1;28280:29:0;;;;;;;;;;;;;;;;36315:477;;;;;;;;;;-1:-1:-1;36315:477:0;;;;;:::i;:::-;;:::i;32866:300::-;;;;;;;;;;-1:-1:-1;32866:300:0;;;;;:::i;:::-;;:::i;28104:22::-;;;;;;;;;;;;;;;;37712:111;;;;;;;;;;-1:-1:-1;37712:111:0;;;;;:::i;:::-;;:::i;35149:488::-;;;;;;;;;;-1:-1:-1;35149:488:0;;;;;:::i;:::-;;:::i;28622:28::-;;;;;;;;;;-1:-1:-1;28622:28:0;;;;-1:-1:-1;;;;;28622:28:0;;;28687:33;;;;;;;;;;-1:-1:-1;28687:33:0;;;;-1:-1:-1;;;28687:33:0;;;;;;28969:25;;;;;;;;;;;;;;;;35975:332;;;;;;;;;;-1:-1:-1;35975:332:0;;;;;:::i;:::-;;:::i;46252:124::-;;;;;;;;;;-1:-1:-1;46252:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;46341:27:0;46317:4;46341:27;;;:18;:27;;;;;;;;;46252:124;39087:161;;;;;;;;;;-1:-1:-1;39087:161:0;;;;;:::i;:::-;;:::i;27824:41::-;;;;;;;;;;-1:-1:-1;27824:41:0;;;;-1:-1:-1;;;;;27824:41:0;;;34478:106;;;;;;;;;;-1:-1:-1;34478:106:0;;;;;:::i;:::-;;:::i;33974:198::-;;;;;;;;;;-1:-1:-1;33974:198:0;;;;;:::i;:::-;;:::i;28183:28::-;;;;;;;;;;;;;;;;31606:198;;;;;;;;;;-1:-1:-1;31606:198:0;;;;;:::i;:::-;;:::i;5264:94::-;;;;;;;;;;;;;:::i;34180:120::-;;;;;;;;;;-1:-1:-1;34180:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;34272:20:0;34248:4;34272:20;;;:11;:20;;;;;;;;;34180:120;4613:87;;;;;;;;;;-1:-1:-1;4659:7:0;4686:6;-1:-1:-1;;;;;4686:6:0;4613:87;;28933:29;;;;;;;;;;;;;;;;31317:87;;;;;;;;;;;;;:::i;48644:458::-;;;;;;;;;;;;;:::i;48440:196::-;;;;;;;;;;-1:-1:-1;48440:196:0;;;;;:::i;:::-;;:::i;34308:162::-;;;;;;;;;;-1:-1:-1;34308:162:0;;;;;:::i;:::-;;:::i;28860:23::-;;;;;;;;;;-1:-1:-1;28860:23:0;;;;;;;;33174:400;;;;;;;;;;-1:-1:-1;33174:400:0;;;;;:::i;:::-;;:::i;31812:199::-;;;;;;;;;;-1:-1:-1;31812:199:0;;;;;:::i;:::-;;:::i;33815:151::-;;;;;;;;;;-1:-1:-1;33815:151:0;;;;;:::i;:::-;;:::i;28892:32::-;;;;;;;;;;;;;;;;38906:173;;;;;;;;;;-1:-1:-1;38906:173:0;;;;;:::i;:::-;;:::i;39444:171::-;;;;;;;;;;-1:-1:-1;39444:171:0;;;;;:::i;:::-;;:::i;28483:26::-;;;;;;;;;;;;;;;;28729:44;;;;;;;;;;;;;;;;28380:30;;;;;;;;;;;;;;;;32019:184;;;;;;;;;;-1:-1:-1;32019:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;32168:18:0;;;32136:7;32168:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32019:184;57066:351;;;;;;;;;;;;;:::i;39256:179::-;;;;;;;;;;-1:-1:-1;39256:179:0;;;;;:::i;:::-;;:::i;37831:110::-;;;;;;;;;;-1:-1:-1;37831:110:0;;;;;:::i;:::-;;:::i;5513:192::-;;;;;;;;;;-1:-1:-1;5513:192:0;;;;;:::i;:::-;;:::i;34824:222::-;;;;;;;;;;;;;:::i;34592:120::-;;;;;;;;;;-1:-1:-1;34592:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;34679:25:0;34655:4;34679:25;;;:16;:25;;;;;;;;;34592:120;31226:83;31263:13;31296:5;31289:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31226:83;:::o;32211:193::-;32313:4;32335:39;3569:10;32358:7;32367:6;32335:8;:39::i;:::-;-1:-1:-1;32392:4:0;32211:193;;;;;:::o;37949:949::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;;;;;;;;;38138:5:::1;38125:9;:18;;38099:60;;;;-1:-1:-1::0;;;38099:60:0::1;;;;;;;:::i;:::-;38235:5;38216:15;:24;;38170:109;;;;-1:-1:-1::0;;;38170:109:0::1;;;;;;;:::i;:::-;38357:5;38337:16;:25;;38290:111;;;;-1:-1:-1::0;;;38290:111:0::1;;;;;;;:::i;:::-;38483:5;38462:17;:26;;38414:113;;;;-1:-1:-1::0;;;38414:113:0::1;;;;;;;:::i;:::-;38540:7;:19:::0;;;38570:13:::1;:31:::0;;;38612:14:::1;:33:::0;;;38656:15:::1;:35:::0;;;38674:17;38550:9;38718:30:::1;38629:16:::0;38586:15;38718:30:::1;:::i;:::-;:40;;;;:::i;:::-;:58;;;;:::i;:::-;38704:11;:72:::0;38846:5:::1;38831:11;;:20;;38789:101;;;;-1:-1:-1::0;;;38789:101:0::1;;;;;;;:::i;:::-;37949:949:::0;;;;:::o;32412:446::-;32544:4;32561:36;32571:6;32579:9;32590:6;32561:9;:36::i;:::-;32608:220;32631:6;3569:10;32679:138;32735:6;32679:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32679:19:0;;;;;;:11;:19;;;;;;;;3569:10;32679:33;;;;;;;;;;:37;:138::i;:::-;32608:8;:220::i;:::-;-1:-1:-1;32846:4:0;32412:446;;;;;:::o;35645:322::-;35739:7;35797;;35786;:18;;35764:110;;;;-1:-1:-1;;;35764:110:0;;6399:2:1;35764:110:0;;;6381:21:1;6438:2;6418:18;;;6411:30;6477:34;6457:18;;;6450:62;-1:-1:-1;;;6528:18:1;;;6521:40;6578:19;;35764:110:0;6197:406:1;35764:110:0;35885:19;35907:10;:8;:10::i;:::-;35885:32;-1:-1:-1;35935:24:0;:7;35885:32;35935:11;:24::i;:::-;35928:31;35645:322;-1:-1:-1;;;35645:322:0:o;36315:477::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36395:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;36387:60;;;::::0;-1:-1:-1;;;36387:60:0;;6810:2:1;36387:60:0::1;::::0;::::1;6792:21:1::0;6849:2;6829:18;;;6822:30;6888:29;6868:18;;;6861:57;6935:18;;36387:60:0::1;6608:351:1::0;36387:60:0::1;36463:9;36458:327;36482:9;:16:::0;36478:20;::::1;36458:327;;;36540:7;-1:-1:-1::0;;;;;36524:23:0::1;:9;36534:1;36524:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;36524:12:0::1;:23:::0;36520:254:::1;;36583:9;36593:16:::0;;:20:::1;::::0;36612:1:::1;::::0;36593:20:::1;:::i;:::-;36583:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;36568:9:::1;:12:::0;;-1:-1:-1;;;;;36583:31:0;;::::1;::::0;36578:1;;36568:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;36568:46:0::1;-1:-1:-1::0;;;;;36568:46:0;;::::1;;::::0;;36633:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;36672:11:::1;:20:::0;;;;:28;;-1:-1:-1;;36672:28:0::1;::::0;;36719:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;36719:15:0;;;;;-1:-1:-1;;;;;;36719:15:0::1;::::0;;;;;36458:327:::1;36315:477:::0;:::o;36520:254::-:1;36500:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36458:327;;;;36315:477:::0;:::o;32866:300::-;3569:10;32981:4;33075:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33075:34:0;;;;;;;;;;32981:4;;33003:133;;33053:7;;33075:50;;33114:10;33075:38;:50::i;37712:111::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37781:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;37781:34:0::1;37811:4;37781:34;::::0;;37712:111::o;35149:488::-;35267:7;35311;;35300;:18;;35292:62;;;;-1:-1:-1;;;35292:62:0;;7700:2:1;35292:62:0;;;7682:21:1;7739:2;7719:18;;;7712:30;7778:33;7758:18;;;7751:61;7829:18;;35292:62:0;7498:355:1;35292:62:0;35370:17;35365:265;;35405:15;35439:19;35450:7;35439:10;:19::i;:::-;-1:-1:-1;35404:54:0;;-1:-1:-1;35473:14:0;;-1:-1:-1;;;;;;;35473:14:0;35365:265;35523:23;35562:19;35573:7;35562:10;:19::i;:::-;-1:-1:-1;35520:61:0;;-1:-1:-1;35596:22:0;;-1:-1:-1;;;;;;;35596:22:0;35975:332;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36056:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;36055:21;36047:61;;;::::0;-1:-1:-1;;;36047:61:0;;6810:2:1;36047:61:0::1;::::0;::::1;6792:21:1::0;6849:2;6829:18;;;6822:30;6888:29;6868:18;;;6861:57;6935:18;;36047:61:0::1;6608:351:1::0;36047:61:0::1;-1:-1:-1::0;;;;;36123:16:0;::::1;36142:1;36123:16:::0;;;:7:::1;:16;::::0;;;;;:20;36119:109:::1;;-1:-1:-1::0;;;;;36199:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;36179:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;36160:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;36119:109:::1;-1:-1:-1::0;;;;;36238:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;36238:27:0::1;36261:4;36238:27:::0;;::::1;::::0;;;36276:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;36276:23:0::1;::::0;;::::1;::::0;;35975:332::o;39087:161::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;39170:1:::1;39163:6;:8;39155:34;;;::::0;-1:-1:-1;;;39155:34:0;;8060:2:1;39155:34:0::1;::::0;::::1;8042:21:1::0;8099:2;8079:18;;;8072:30;-1:-1:-1;;;8118:18:1;;;8111:43;8171:18;;39155:34:0::1;7858:337:1::0;39155:34:0::1;39200:29;:38:::0;39087:161::o;34478:106::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34548:22:0::1;34571:5;34548:22:::0;;;:16:::1;:22;::::0;;;;:28;;-1:-1:-1;;34548:28:0::1;::::0;;34478:106::o;33974:198::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;34087:5:::1;34080:3;:12;;34046:85;;;;-1:-1:-1::0;;;34046:85:0::1;;;;;;;:::i;:::-;34143:13;:19:::0;33974:198::o;31606:::-;-1:-1:-1;;;;;31696:20:0;;31672:7;31696:20;;;:11;:20;;;;;;;;31692:49;;;-1:-1:-1;;;;;;31725:16:0;;;;;:7;:16;;;;;;;31606:198::o;31692:49::-;-1:-1:-1;;;;;31779:16:0;;;;;;:7;:16;;;;;;31759:37;;:19;:37::i;5264:94::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;5329:21:::1;5347:1;5329:9;:21::i;:::-;5264:94::o:0;31317:87::-;31356:13;31389:7;31382:14;;;;;:::i;48644:458::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;48707:19:::1;48729:24;48747:4;48729:9;:24::i;:::-;48805:4;48789:22;::::0;;;:7:::1;:22;::::0;;;;;48707:46;;-1:-1:-1;48789:39:0::1;::::0;48707:46;48789:26:::1;:39::i;:::-;48780:4;48764:22;::::0;;;:7:::1;:22;::::0;;;;;;:64;;;;48858:33:::1;::::0;48879:11;;48866:7:::1;4659::::0;4686:6;-1:-1:-1;;;;;4686:6:0;;4613:87;48866:7:::1;-1:-1:-1::0;;;;;48858:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;48858:16:0;;;:20:::1;:33::i;:::-;48839:7;:16;48847:7;4659::::0;4686:6;-1:-1:-1;;;;;4686:6:0;;4613:87;48847:7:::1;-1:-1:-1::0;;;;;48839:16:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;48839:16:0;;;:52;;;;48943:4:::1;48927:22:::0;;:7:::1;:22:::0;;;;;;:39:::1;::::0;48954:11;48927:26:::1;:39::i;:::-;48918:4;48902:22;::::0;;;:7:::1;:22;::::0;;;;;;:64;;;;48996:33:::1;::::0;49017:11;;49004:7:::1;4659::::0;4686:6;-1:-1:-1;;;;;4686:6:0;;4613:87;48996:33:::1;48977:7;:16;48985:7;4659::::0;4686:6;-1:-1:-1;;;;;4686:6:0;;4613:87;48985:7:::1;-1:-1:-1::0;;;;;48977:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;48977:16:0;:52;49069:7:::1;4659::::0;4686:6;-1:-1:-1;;;;;4686:6:0;;4613:87;49069:7:::1;-1:-1:-1::0;;;;;49045:47:0::1;49062:4;-1:-1:-1::0;;;;;49045:47:0::1;-1:-1:-1::0;;;;;;;;;;;49079:11:0::1;49045:47;;;;1634:25:1::0;;1622:2;1607:18;;1488:177;49045:47:0::1;;;;;;;;48686:416;48644:458::o:0;48440:196::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;48535:21:::1;48575:7;4659::::0;4686:6;-1:-1:-1;;;;;4686:6:0;;4613:87;48575:7:::1;-1:-1:-1::0;;;;;48567:25:0::1;:61;48624:3;48593:28;48605:16:::0;48593:9;:28:::1;:::i;:::-;:34;;;;:::i;:::-;48567:61;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;48504:132;48440:196:::0;:::o;34308:162::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;34400:11:::1;::::0;:21:::1;::::0;34414:7:::1;34400:21;:::i;:::-;34382:15;:39;34374:48;;;::::0;::::1;;-1:-1:-1::0;;;;;34433:22:0::1;;::::0;;;:16:::1;:22;::::0;;;;:27;;-1:-1:-1;;34433:27:0::1;34456:4;34433:27;::::0;;34308:162::o;33174:400::-;33294:4;33316:228;3569:10;33366:7;33388:145;33445:15;33388:145;;;;;;;;;;;;;;;;;3569:10;33388:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33388:34:0;;;;;;;;;;;;:38;:145::i;31812:199::-;31917:4;31939:42;3569:10;31963:9;31974:6;31939:9;:42::i;33815:151::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;33918:17:::1;:40:::0;;-1:-1:-1;;;;;;33918:40:0::1;-1:-1:-1::0;;;;;33918:40:0;;;::::1;::::0;;;::::1;::::0;;33815:151::o;38906:173::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;38985:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38985:32:0::1;-1:-1:-1::0;;;;38985:32:0;;::::1;;::::0;;39033:38:::1;::::0;::::1;::::0;::::1;::::0;39009:8;1461:14:1;1454:22;1436:41;;1424:2;1409:18;;1296:187;39033:38:0::1;;;;;;;;38906:173:::0;:::o;39444:171::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;39529:15:::1;39521:6;:23;;39513:62;;;::::0;-1:-1:-1;;;39513:62:0;;8797:2:1;39513:62:0::1;::::0;::::1;8779:21:1::0;8836:2;8816:18;;;8809:30;8875:28;8855:18;;;8848:56;8921:18;;39513:62:0::1;8595:350:1::0;39513:62:0::1;39586:10;:19:::0;39444:171::o;57066:351::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;57126:21:::1;:27:::0;;-1:-1:-1;;;;57126:27:0::1;::::0;;-1:-1:-1;;57164:14:0::1;:18:::0;;;57193:10:::1;:14:::0;57148:5:::1;57126:21;57218:16:::0;;;57245:15:::1;:17:::0;;;57273:13:::1;:15:::0;;;57299:13:::1;:15:::0;;;57325:11:::1;:13:::0;57349:23:::1;57364:7;4659::::0;4686:6;-1:-1:-1;;;;;4686:6:0;;4613:87;57349:23:::1;57383:26;57401:7;4659::::0;4686:6;-1:-1:-1;;;;;4686:6:0;;4613:87;39256:179;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;39344:16:::1;39336:6;:24;;39328:63;;;::::0;-1:-1:-1;;;39328:63:0;;8797:2:1;39328:63:0::1;::::0;::::1;8779:21:1::0;8836:2;8816:18;;;8809:30;8875:28;8855:18;;;8848:56;8921:18;;39328:63:0::1;8595:350:1::0;39328:63:0::1;39402:14;:23:::0;39256:179::o;37831:110::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37898:27:0::1;37928:5;37898:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;37898:35:0::1;::::0;;37831:110::o;5513:192::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5602:22:0;::::1;5594:73;;;::::0;-1:-1:-1;;;5594:73:0;;9152:2:1;5594:73:0::1;::::0;::::1;9134:21:1::0;9191:2;9171:18;;;9164:30;9230:34;9210:18;;;9203:62;-1:-1:-1;;;9281:18:1;;;9274:36;9327:19;;5594:73:0::1;8950:402:1::0;5594:73:0::1;5678:19;5688:8;5678:9;:19::i;:::-;5513:192:::0;:::o;34824:222::-;4659:7;4686:6;-1:-1:-1;;;;;4686:6:0;3569:10;4833:23;4825:68;;;;-1:-1:-1;;;4825:68:0;;;;;;;:::i;:::-;34880:11:::1;::::0;::::1;;:20;34871:50;;;::::0;-1:-1:-1;;;34871:50:0;;9559:2:1;34871:50:0::1;::::0;::::1;9541:21:1::0;9598:2;9578:18;;;9571:30;-1:-1:-1;;;9617:18:1;;;9610:46;9673:18;;34871:50:0::1;9357:340:1::0;34871:50:0::1;34932:11;:18:::0;;-1:-1:-1;;34932:18:0::1;34946:4;34932:18;::::0;;34975:15:::1;34961:11;:29:::0;;;35001:19:::1;:37:::0;34824:222::o;46384:371::-;-1:-1:-1;;;;;46511:19:0;;46503:68;;;;-1:-1:-1;;;46503:68:0;;9904:2:1;46503:68:0;;;9886:21:1;9943:2;9923:18;;;9916:30;9982:34;9962:18;;;9955:62;-1:-1:-1;;;10033:18:1;;;10026:34;10077:19;;46503:68:0;9702:400:1;46503:68:0;-1:-1:-1;;;;;46590:21:0;;46582:68;;;;-1:-1:-1;;;46582:68:0;;10309:2:1;46582:68:0;;;10291:21:1;10348:2;10328:18;;;10321:30;10387:34;10367:18;;;10360:62;-1:-1:-1;;;10438:18:1;;;10431:32;10480:19;;46582:68:0;10107:398:1;46582:68:0;-1:-1:-1;;;;;46663:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;46715:32;;1634:25:1;;;46715:32:0;;1607:18:1;46715:32:0;;;;;;;46384:371;;;:::o;46763:1669::-;-1:-1:-1;;;;;46885:18:0;;46877:68;;;;-1:-1:-1;;;46877:68:0;;10712:2:1;46877:68:0;;;10694:21:1;10751:2;10731:18;;;10724:30;10790:34;10770:18;;;10763:62;-1:-1:-1;;;10841:18:1;;;10834:35;10886:19;;46877:68:0;10510:401:1;46877:68:0;-1:-1:-1;;;;;46964:16:0;;46956:64;;;;-1:-1:-1;;;46956:64:0;;11118:2:1;46956:64:0;;;11100:21:1;11157:2;11137:18;;;11130:30;11196:34;11176:18;;;11169:62;-1:-1:-1;;;11247:18:1;;;11240:33;11290:19;;46956:64:0;10916:399:1;46956:64:0;47048:1;47039:6;:10;47031:64;;;;-1:-1:-1;;;47031:64:0;;11522:2:1;47031:64:0;;;11504:21:1;11561:2;11541:18;;;11534:30;11600:34;11580:18;;;11573:62;-1:-1:-1;;;11651:18:1;;;11644:39;11700:19;;47031:64:0;11320:405:1;47031:64:0;-1:-1:-1;;;;;47114:22:0;;;;;;:16;:22;;;;;;;;:28;;:22;:28;;;;:58;;-1:-1:-1;;;;;;47146:20:0;;;;;;:16;:20;;;;;;;;:26;;:20;:26;;47114:58;47106:93;;;;-1:-1:-1;;;47106:93:0;;11932:2:1;47106:93:0;;;11914:21:1;11971:2;11951:18;;;11944:30;-1:-1:-1;;;11990:18:1;;;11983:52;12052:18;;47106:93:0;11730:346:1;47106:93:0;47494:28;47525:24;47543:4;47525:9;:24::i;:::-;47560:4;:10;;-1:-1:-1;;47560:10:0;;;47591:13;;47494:55;;-1:-1:-1;;;;;;47591:13:0;;;47587:17;;;;47583:68;;47630:4;:9;;-1:-1:-1;;47630:9:0;47635:4;47630:9;;;47583:68;47727:29;;47793:13;;47690:66;;;;;-1:-1:-1;;;;;47785:21:0;;;47793:13;;47785:21;;;;:57;;;47823:19;47785:57;:91;;;;-1:-1:-1;47860:16:0;;-1:-1:-1;;;47860:16:0;;;;47859:17;47785:91;:129;;;;-1:-1:-1;47893:21:0;;-1:-1:-1;;;47893:21:0;;;;47785:129;47767:251;;;47970:36;47985:20;47970:14;:36::i;:::-;-1:-1:-1;;;;;48211:24:0;;48091:12;48211:24;;;:18;:24;;;;;;48106:4;;48211:24;;;:50;;-1:-1:-1;;;;;;48239:22:0;;;;;;:18;:22;;;;;;;;48211:50;48207:98;;;-1:-1:-1;48288:5:0;48207:98;48383:41;48398:4;48404:2;48408:6;48416:7;48383:14;:41::i;:::-;46866:1566;;;46763:1669;;;:::o;10873:240::-;10993:7;11054:12;11046:6;;;;11038:29;;;;-1:-1:-1;;;11038:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11089:5:0;;;10873:240::o;42750:164::-;42792:7;42813:15;42830;42849:19;:17;:19::i;:::-;42812:56;;-1:-1:-1;42812:56:0;-1:-1:-1;42886:20:0;42812:56;;42886:11;:20::i;:::-;42879:27;;;;42750:164;:::o;9731:98::-;9789:7;9816:5;9820:1;9816;:5;:::i;8594:98::-;8652:7;8679:5;8683:1;8679;:5;:::i;40058:1032::-;40158:7;40180;40202;40224;40246;40268;40290;40312;40349:23;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40349:23:0;40554:20;40566:7;40554:11;:20::i;:::-;40403:4;:20;;40438:4;:9;;40462:4;:15;;40492:4;:16;;40523:4;:17;;40388:186;;;;;;;;;;;;;;;;;;;;;;;;;40586:15;40603:23;40628:12;40644:186;40670:7;40692:4;:9;;;40716:4;:15;;;40746:4;:16;;;40777:4;:17;;;40809:10;:8;:10::i;:::-;40644:11;:186::i;:::-;40585:245;;;;;;40863:7;40885:15;40915:4;40934;:20;;;40969:4;:9;;;40993:4;:15;;;41023:4;:16;;;41054:4;:17;;;40841:241;;;;;;;;;;;;;;;;;;;;40058:1032;;;;;;;;;:::o;5713:173::-;5769:16;5788:6;;-1:-1:-1;;;;;5805:17:0;;;-1:-1:-1;;;;;;5805:17:0;;;;;;5838:40;;5788:6;;;;;;;5838:40;;5769:16;5838:40;5758:128;5713:173;:::o;8975:98::-;9033:7;9060:5;9064:1;9060;:5;:::i;49110:1922::-;29361:16;:23;;-1:-1:-1;;;;29361:23:0;-1:-1:-1;;;29361:23:0;;;49320:13:::1;::::0;49303:11:::1;::::0;29361:23;;49278:56:::1;::::0;:37:::1;::::0;:20;;:24:::1;:37::i;:::-;:41:::0;::::1;:56::i;:::-;49246:88:::0;-1:-1:-1;49369:28:0::1;49246:88:::0;49395:1:::1;49369:25;:28::i;:::-;49345:52:::0;-1:-1:-1;49410:20:0::1;49433:47;:20:::0;49345:52;49433:24:::1;:47::i;:::-;49410:70:::0;-1:-1:-1;49783:21:0::1;49849:30;49410:70:::0;49849:16:::1;:30::i;:::-;49908:13;::::0;49893:12:::1;::::0;49908:20:::1;::::0;49926:1:::1;49908:17;:20::i;:::-;49893:35;;49939:15;50003:4;49993:7;;49974:15;;49957:14;;:32;;;;:::i;:::-;:43;;;;:::i;:::-;:50;;;;:::i;:::-;49939:68:::0;-1:-1:-1;50068:18:0::1;50089:41;:21;50115:14:::0;50089:25:::1;:41::i;:::-;50068:62;;50143:27;50173:40;50205:7;50173:27;50188:11;;50173:10;:14;;:27;;;;:::i;:::-;:31:::0;::::1;:40::i;:::-;50143:70;;50246:46;50287:4;50246:36;50270:11;;50246:19;:23;;:36;;;;:::i;:46::-;50224:68:::0;-1:-1:-1;50305:26:0::1;50334:46;:21;50224:68:::0;50334:25:::1;:46::i;:::-;50305:75;;50464:13;50480:30;50496:13;;50480:11;;:15;;:30;;;;:::i;:::-;50464:46;;50523:25;50551:49;50585:14;;50551:29;50574:5;50551:18;:22;;:29;;;;:::i;:49::-;50619:17;::::0;50611:54:::1;::::0;50523:77;;-1:-1:-1;;;;;;50619:17:0::1;::::0;50611:54;::::1;;;::::0;50523:77;;50619:17:::1;50611:54:::0;50619:17;50611:54;50523:77;50619:17;50611:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;50741:15:0::1;::::0;50678:26:::1;::::0;50707:50:::1;::::0;:29:::1;:18:::0;50730:5;50707:22:::1;:29::i;:50::-;50776:18;::::0;50768:56:::1;::::0;50678:79;;-1:-1:-1;;;;;;50776:18:0::1;::::0;50768:56;::::1;;;::::0;50678:79;;50776:18:::1;50768:56:::0;50776:18;50768:56;50678:79;50776:18;50768:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;50874;50887:21;50910:19;50874:12;:56::i;:::-;50946:78;::::0;;12283:25:1;;;12339:2;12324:18;;12317:34;;;12367:18;;;12360:34;;;50946:78:0::1;::::0;12271:2:1;12256:18;50946:78:0::1;;;;;;;-1:-1:-1::0;;29407:16:0;:24;;-1:-1:-1;;;;29407:24:0;;;-1:-1:-1;;;;;;;;;;49110:1922:0:o;52235:836::-;52391:7;52386:28;;52400:14;:12;:14::i;:::-;-1:-1:-1;;;;;52429:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;52453:22:0;;;;;;:11;:22;;;;;;;;52452:23;52429:46;52425:597;;;52492:48;52514:6;52522:9;52533:6;52492:21;:48::i;:::-;52425:597;;;-1:-1:-1;;;;;52563:19:0;;;;;;:11;:19;;;;;;;;52562:20;:46;;;;-1:-1:-1;;;;;;52586:22:0;;;;;;:11;:22;;;;;;;;52562:46;52558:464;;;52625:46;52645:6;52653:9;52664:6;52625:19;:46::i;52558:464::-;-1:-1:-1;;;;;52694:19:0;;;;;;:11;:19;;;;;;;;52693:20;:47;;;;-1:-1:-1;;;;;;52718:22:0;;;;;;:11;:22;;;;;;;;52717:23;52693:47;52689:333;;;52757:44;52775:6;52783:9;52794:6;52757:17;:44::i;52689:333::-;-1:-1:-1;;;;;52823:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;52846:22:0;;;;;;:11;:22;;;;;;;;52823:45;52819:203;;;52885:48;52907:6;52915:9;52926:6;52885:21;:48::i;52819:203::-;52966:44;52984:6;52992:9;53003:6;52966:17;:44::i;:::-;53039:7;53034:29;;53048:15;46027;;46017:7;:25;46069:21;;46053:13;:37;46118:22;;46101:14;:39;46169:23;;46151:15;:41;46217:19;;46203:11;:33;45973:271;42922:605;43020:7;;43056;;42973;;;;;43074:338;43098:9;:16;43094:20;;43074:338;;;43182:7;43158;:21;43166:9;43176:1;43166:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43166:12:0;43158:21;;;;;;;;;;;;;:31;;:83;;;43234:7;43210;:21;43218:9;43228:1;43218:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43218:12:0;43210:21;;;;;;;;;;;;;:31;43158:83;43136:146;;;43265:7;;43274;;43257:25;;;;;;;42922:605;;:::o;43136:146::-;43307:34;43319:7;:21;43327:9;43337:1;43327:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43327:12:0;43319:21;;;;;;;;;;;;;43307:7;;:11;:34::i;:::-;43297:44;;43366:34;43378:7;:21;43386:9;43396:1;43386:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43386:12:0;43378:21;;;;;;;;;;;;;43366:7;;:11;:34::i;:::-;43356:44;-1:-1:-1;43116:3:0;;;;:::i;:::-;;;;43074:338;;;-1:-1:-1;43448:7:0;;43436;;:20;;:11;:20::i;:::-;43426:7;:30;43422:61;;;43466:7;;43475;;43458:25;;;;;;42922:605;;:::o;43422:61::-;43502:7;;43511;;-1:-1:-1;42922:605:0;-1:-1:-1;42922:605:0:o;41098:752::-;41199:7;41221;41243;41265;41287;41322:12;41337:24;41353:7;41337:15;:24::i;:::-;41322:39;;41372:18;41393:30;41415:7;41393:21;:30::i;:::-;41372:51;;41434:22;41459:31;41482:7;41459:22;:31::i;:::-;41434:56;;41501:23;41527:32;41551:7;41527:23;:32::i;:::-;41501:58;-1:-1:-1;41570:23:0;41596:17;:7;41608:4;41596:11;:17::i;:::-;41570:43;-1:-1:-1;41640:31:0;41570:43;41660:10;41640:19;:31::i;:::-;41624:47;-1:-1:-1;41698:56:0;41738:15;41698:35;41624:47;41718:14;41698:19;:35::i;:::-;:39;;:56::i;:::-;41682:72;41792:4;;-1:-1:-1;41798:10:0;;-1:-1:-1;41810:14:0;;-1:-1:-1;41798:10:0;-1:-1:-1;41098:752:0;;-1:-1:-1;;;41098:752:0:o;41858:884::-;42118:7;;;;42215:24;:7;42227:11;42215;:24::i;:::-;42197:42;-1:-1:-1;42250:12:0;42265:21;:4;42274:11;42265:8;:21::i;:::-;42250:36;-1:-1:-1;42297:18:0;42318:27;:10;42333:11;42318:14;:27::i;:::-;42297:48;-1:-1:-1;42356:19:0;42378:28;:11;42394;42378:15;:28::i;:::-;42356:50;-1:-1:-1;42417:12:0;42432:29;:12;42449:11;42432:16;:29::i;:::-;42417:44;-1:-1:-1;42472:23:0;42498:17;:7;42510:4;42498:11;:17::i;:::-;42472:43;-1:-1:-1;42542:31:0;42472:43;42562:10;42542:19;:31::i;:::-;42526:47;-1:-1:-1;42600:32:0;42526:47;42620:11;42600:19;:32::i;:::-;42584:48;-1:-1:-1;42659:25:0;42584:48;42679:4;42659:19;:25::i;:::-;42703:7;;;;-1:-1:-1;42729:4:0;;-1:-1:-1;41858:884:0;;-1:-1:-1;;;;;;;;;;;41858:884:0:o;9332:98::-;9390:7;9417:5;9421:1;9417;:5;:::i;51040:589::-;51190:16;;;51204:1;51190:16;;;;;;;;51166:21;;51190:16;;;;;;;;;;-1:-1:-1;51190:16:0;51166:40;;51235:4;51217;51222:1;51217:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51217:23:0;;;:7;;;;;;;;;;:23;;;;51261:15;;:22;;;-1:-1:-1;;;51261:22:0;;;;:15;;;;;:20;;:22;;;;;51217:7;;51261:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51251:4;51256:1;51251:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51251:32:0;;;:7;;;;;;;;;:32;51328:15;;51296:62;;51313:4;;51328:15;51346:11;51296:8;:62::i;:::-;51397:15;;:224;;-1:-1:-1;;;51397:224:0;;-1:-1:-1;;;;;51397:15:0;;;;:66;;:224;;51478:11;;51397:15;;51548:4;;51575;;51595:15;;51397:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51641:513;51821:15;;51789:62;;51806:4;;-1:-1:-1;;;;;51821:15:0;51839:11;51789:8;:62::i;:::-;51894:15;;-1:-1:-1;;;;;51894:15:0;:31;51933:9;51966:4;51986:11;51894:15;;52098:7;4659;4686:6;-1:-1:-1;;;;;4686:6:0;;4613:87;52098:7;51894:252;;;;;;-1:-1:-1;;;;;;51894:252:0;;;-1:-1:-1;;;;;14137:15:1;;;51894:252:0;;;14119:34:1;14169:18;;;14162:34;;;;14212:18;;;14205:34;;;;14255:18;;;14248:34;14319:15;;;14298:19;;;14291:44;52120:15:0;14351:19:1;;;14344:35;14053:19;;51894:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;51641:513;;:::o;45450:515::-;45497:7;;:12;:34;;;;-1:-1:-1;45513:13:0;;:18;45497:34;:57;;;;-1:-1:-1;45535:14:0;;:19;45497:57;:81;;;;-1:-1:-1;45558:15:0;;:20;45497:81;45493:94;;;45450:515::o;45493:94::-;45617:7;;;45599:15;:25;45659:13;;;45635:21;:37;45708:14;;;45683:22;:39;45759:15;;;45733:23;:41;45807:11;;;45785:19;:33;-1:-1:-1;45831:11:0;;;;45853:17;;;;45881:19;;;45911:18;;;45940:15;45450:515::o;56225:833::-;56376:15;56406:23;56444:12;56471:23;56509:12;56536:18;56569:19;56603:20;56637:19;56648:7;56637:10;:19::i;:::-;56361:295;;;;;;;;;;;;;;;;56685:28;56705:7;56685;:15;56693:6;-1:-1:-1;;;;;56685:15:0;-1:-1:-1;;;;;56685:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;56667:15:0;;;;;;:7;:15;;;;;;;;:46;;;;56742:7;:15;;;;:28;;56762:7;56742:19;:28::i;:::-;-1:-1:-1;;;;;56724:15:0;;;;;;;:7;:15;;;;;;:46;;;;56802:18;;;;;;;:39;;56825:15;56802:22;:39::i;:::-;-1:-1:-1;;;;;56781:18:0;;;;;;:7;:18;;;;;:60;56852:26;56867:10;56852:14;:26::i;:::-;56889:31;56908:11;56889:18;:31::i;:::-;56931:25;56943:12;56931:11;:25::i;:::-;56967:23;56979:4;56985;56967:11;:23::i;:::-;57023:9;-1:-1:-1;;;;;57006:44:0;57015:6;-1:-1:-1;;;;;57006:44:0;-1:-1:-1;;;;;;;;;;;57034:15:0;57006:44;;;;1634:25:1;;1622:2;1607:18;;1488:177;57006:44:0;;;;;;;;56350:708;;;;;;;;56225:833;;;:::o;55372:845::-;55521:15;55551:23;55589:12;55616:23;55654:12;55681:18;55714:19;55748:20;55782:19;55793:7;55782:10;:19::i;:::-;55506:295;;;;;;;;;;;;;;;;55830:28;55850:7;55830;:15;55838:6;-1:-1:-1;;;;;55830:15:0;-1:-1:-1;;;;;55830:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;55812:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;55890:18;;;;;:7;:18;;;;;:39;;55913:15;55890:22;:39::i;:::-;-1:-1:-1;;;;;55869:18:0;;;;;;:7;:18;;;;;;;;:60;;;;55961:7;:18;;;;:39;;55984:15;55961:22;:39::i;53079:2285::-;53226:15;53256:23;53294:12;53321:23;53359:12;53386:18;53419:19;53453:20;53487:19;53498:7;53487:10;:19::i;:::-;53211:295;;;;;;;;;;;;;;;;53541:10;;53532:7;:19;53523:70;;;;-1:-1:-1;;;53523:70:0;;14903:2:1;53523:70:0;;;14885:21:1;14942:2;14922:18;;;14915:30;14981:34;14961:18;;;14954:62;-1:-1:-1;;;15032:18:1;;;15025:35;15077:19;;53523:70:0;14701:401:1;53523:70:0;53608:11;;;;:18;;:11;:18;;;;:47;;-1:-1:-1;53642:13:0;;-1:-1:-1;;;;;53630:25:0;;;53642:13;;53630:25;;53608:47;:66;;;;-1:-1:-1;4659:7:0;4686:6;-1:-1:-1;;;;;53659:15:0;;;4686:6;;53659:15;;53608:66;:88;;;;-1:-1:-1;4659:7:0;4686:6;-1:-1:-1;;;;;53678:18:0;;;4686:6;;53678:18;;53608:88;53604:1721;;;-1:-1:-1;;;;;53741:15:0;;;;;;:7;:15;;;;;;:28;;53761:7;53741:19;:28::i;:::-;-1:-1:-1;;;;;53723:15:0;;;;;;;:7;:15;;;;;;:46;;;;53805:18;;;;;;;:39;;53828:15;53805:22;:39::i;:::-;-1:-1:-1;;;;;53784:18:0;;;;;;;:7;:18;;;;;;;:60;;;;53864:44;;;;;;-1:-1:-1;;;;;;;;;;;53864:44:0;;;53892:15;1634:25:1;;1622:2;1607:18;;1488:177;53864:44:0;;;;;;;;53943:24;53957:9;53943:13;:24::i;:::-;53604:1721;;;54000:11;;;;:17;;:11;:17;:72;;;;;54057:15;54047:7;;54021:11;;54035:9;54021:23;;;;:::i;:::-;:33;;;;:::i;:::-;:51;54000:72;:101;;;;-1:-1:-1;54088:13:0;;-1:-1:-1;;;;;54076:25:0;;;54088:13;;54076:25;;54000:101;:120;;;;-1:-1:-1;4659:7:0;4686:6;-1:-1:-1;;;;;54105:15:0;;;4686:6;;54105:15;;54000:120;:142;;;;-1:-1:-1;4659:7:0;4686:6;-1:-1:-1;;;;;54124:18:0;;;4686:6;;54124:18;;54000:142;53996:1329;;;-1:-1:-1;;;;;54187:15:0;;;;;;:7;:15;;;;;;:28;;54207:7;54187:19;:28::i;53996:1329::-;4659:7;4686:6;-1:-1:-1;;;;;54443:15:0;;;4686:6;;54443:15;;:37;;-1:-1:-1;4659:7:0;4686:6;-1:-1:-1;;;;;54462:18:0;;;4686:6;;54462:18;54443:37;54439:886;;;-1:-1:-1;;;;;54528:18:0;;;;;;:7;:18;;;;;;:31;;54551:7;54528:22;:31::i;:::-;-1:-1:-1;;;;;54507:18:0;;;;;;;:7;:18;;;;;;:52;;;;54592:15;;;;;;;:28;;54612:7;54592:19;:28::i;:::-;-1:-1:-1;;;;;54574:15:0;;;;;;;:7;:15;;;;;;;;;:46;;;;54645:44;1634:25:1;;;54645:44:0;;;;54574:15;;-1:-1:-1;;;;;;;;;;;54645:44:0;1607:18:1;54645:44:0;;;;;;;54439:886;;;54783:13;;-1:-1:-1;;;;;54770:26:0;;;54783:13;;54770:26;54766:179;;54877:14;;54839:33;54864:7;54839:20;54849:9;54839;:20::i;:::-;:24;;:33::i;:::-;54838:53;;54830:99;;;;-1:-1:-1;;;54830:99:0;;15309:2:1;54830:99:0;;;15291:21:1;;;15328:18;;;15321:30;15387:34;15367:18;;;15360:62;15439:18;;54830:99:0;15107:356:1;54830:99:0;-1:-1:-1;;;;;54979:15:0;;;;;;:7;:15;;;;;;:28;;54999:7;54979:19;:28::i;54439:886::-;53200:2164;;;;;;;;53079:2285;;;:::o;36800:904::-;36951:15;36981:23;37019:12;37046:23;37084:12;37111:18;37144:19;37178:20;37212:19;37223:7;37212:10;:19::i;:::-;36936:295;;;;;;;;;;;;;;;;37260:28;37280:7;37260;:15;37268:6;-1:-1:-1;;;;;37260:15:0;-1:-1:-1;;;;;37260:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;37242:15:0;;;;;;:7;:15;;;;;;;;:46;;;;37317:7;:15;;;;:28;;37337:7;37317:19;:28::i;44624:130::-;44688:7;44715:31;44740:5;44715:20;44727:7;;44715;:11;;:20;;;;:::i;44762:174::-;44859:7;44891:37;44922:5;44891:26;44903:13;;44891:7;:11;;:26;;;;:::i;44944:309::-;45070:4;;45042:7;;45070:4;;:10;;:4;:10;45067:120;;45116:59;45169:5;45116:48;45129:33;45148:13;;45129:14;;:18;;:33;;;;:::i;:::-;45116:7;;:11;:48::i;45067:120::-;45207:38;45239:5;45207:27;45219:14;;45207:7;:11;;:27;;;;:::i;45262:178::-;45361:7;45393:39;45426:5;45393:28;45405:15;;45393:7;:11;;:28;;;;:::i;43535:355::-;43598:19;43620:10;:8;:10::i;:::-;43598:32;-1:-1:-1;43641:18:0;43662:27;:10;43598:32;43662:14;:27::i;:::-;43741:4;43725:22;;;;:7;:22;;;;;;43641:48;;-1:-1:-1;43725:38:0;;43641:48;43725:26;:38::i;:::-;43716:4;43700:22;;;;:7;:22;;;;;;;;:63;;;;43778:11;:26;;;;;;43774:108;;;43860:4;43844:22;;;;:7;:22;;;;;;:38;;43871:10;43844:26;:38::i;:::-;43835:4;43819:22;;;;:7;:22;;;;;:63;43587:303;;43535:355;:::o;39716:147::-;39794:7;;:17;;39806:4;39794:11;:17::i;:::-;39784:7;:27;39835:10;;:20;;39850:4;39835:14;:20::i;:::-;39822:10;:33;-1:-1:-1;;39716:147:0:o;238:597:1:-;350:4;379:2;408;397:9;390:21;440:6;434:13;483:6;478:2;467:9;463:18;456:34;508:1;518:140;532:6;529:1;526:13;518:140;;;627:14;;;623:23;;617:30;593:17;;;612:2;589:26;582:66;547:10;;518:140;;;676:6;673:1;670:13;667:91;;;746:1;741:2;732:6;721:9;717:22;713:31;706:42;667:91;-1:-1:-1;819:2:1;798:15;-1:-1:-1;;794:29:1;779:45;;;;826:2;775:54;;238:597;-1:-1:-1;;;238:597:1:o;840:131::-;-1:-1:-1;;;;;915:31:1;;905:42;;895:70;;961:1;958;951:12;976:315;1044:6;1052;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1160:9;1147:23;1179:31;1204:5;1179:31;:::i;:::-;1229:5;1281:2;1266:18;;;;1253:32;;-1:-1:-1;;;976:315:1:o;1670:385::-;1756:6;1764;1772;1780;1833:3;1821:9;1812:7;1808:23;1804:33;1801:53;;;1850:1;1847;1840:12;1801:53;-1:-1:-1;;1873:23:1;;;1943:2;1928:18;;1915:32;;-1:-1:-1;1994:2:1;1979:18;;1966:32;;2045:2;2030:18;2017:32;;-1:-1:-1;1670:385:1;-1:-1:-1;1670:385:1:o;2295:456::-;2372:6;2380;2388;2441:2;2429:9;2420:7;2416:23;2412:32;2409:52;;;2457:1;2454;2447:12;2409:52;2496:9;2483:23;2515:31;2540:5;2515:31;:::i;:::-;2565:5;-1:-1:-1;2622:2:1;2607:18;;2594:32;2635:33;2594:32;2635:33;:::i;:::-;2295:456;;2687:7;;-1:-1:-1;;;2741:2:1;2726:18;;;;2713:32;;2295:456::o;2756:180::-;2815:6;2868:2;2856:9;2847:7;2843:23;2839:32;2836:52;;;2884:1;2881;2874:12;2836:52;-1:-1:-1;2907:23:1;;2756:180;-1:-1:-1;2756:180:1:o;3130:247::-;3189:6;3242:2;3230:9;3221:7;3217:23;3213:32;3210:52;;;3258:1;3255;3248:12;3210:52;3297:9;3284:23;3316:31;3341:5;3316:31;:::i;3382:160::-;3447:20;;3503:13;;3496:21;3486:32;;3476:60;;3532:1;3529;3522:12;3476:60;3382:160;;;:::o;3547:248::-;3612:6;3620;3673:2;3661:9;3652:7;3648:23;3644:32;3641:52;;;3689:1;3686;3679:12;3641:52;3725:9;3712:23;3702:33;;3754:35;3785:2;3774:9;3770:18;3754:35;:::i;:::-;3744:45;;3547:248;;;;;:::o;4268:180::-;4324:6;4377:2;4365:9;4356:7;4352:23;4348:32;4345:52;;;4393:1;4390;4383:12;4345:52;4416:26;4432:9;4416:26;:::i;4453:388::-;4521:6;4529;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;4637:9;4624:23;4656:31;4681:5;4656:31;:::i;:::-;4706:5;-1:-1:-1;4763:2:1;4748:18;;4735:32;4776:33;4735:32;4776:33;:::i;:::-;4828:7;4818:17;;;4453:388;;;;;:::o;4846:380::-;4925:1;4921:12;;;;4968;;;4989:61;;5043:4;5035:6;5031:17;5021:27;;4989:61;5096:2;5088:6;5085:14;5065:18;5062:38;5059:161;;5142:10;5137:3;5133:20;5130:1;5123:31;5177:4;5174:1;5167:15;5205:4;5202:1;5195:15;5059:161;;4846:380;;;:::o;5231:356::-;5433:2;5415:21;;;5452:18;;;5445:30;5511:34;5506:2;5491:18;;5484:62;5578:2;5563:18;;5231:356::o;5592:335::-;5794:2;5776:21;;;5833:2;5813:18;;;5806:30;-1:-1:-1;;;5867:2:1;5852:18;;5845:41;5918:2;5903:18;;5592:335::o;5932:127::-;5993:10;5988:3;5984:20;5981:1;5974:31;6024:4;6021:1;6014:15;6048:4;6045:1;6038:15;6064:128;6104:3;6135:1;6131:6;6128:1;6125:13;6122:39;;;6141:18;;:::i;:::-;-1:-1:-1;6177:9:1;;6064:128::o;6964:127::-;7025:10;7020:3;7016:20;7013:1;7006:31;7056:4;7053:1;7046:15;7080:4;7077:1;7070:15;7096:125;7136:4;7164:1;7161;7158:8;7155:34;;;7169:18;;:::i;:::-;-1:-1:-1;7206:9:1;;7096:125::o;7226:127::-;7287:10;7282:3;7278:20;7275:1;7268:31;7318:4;7315:1;7308:15;7342:4;7339:1;7332:15;7358:135;7397:3;7418:17;;;7415:43;;7438:18;;:::i;:::-;-1:-1:-1;7485:1:1;7474:13;;7358:135::o;8200:168::-;8240:7;8306:1;8302;8298:6;8294:14;8291:1;8288:21;8283:1;8276:9;8269:17;8265:45;8262:71;;;8313:18;;:::i;:::-;-1:-1:-1;8353:9:1;;8200:168::o;8373:217::-;8413:1;8439;8429:132;;8483:10;8478:3;8474:20;8471:1;8464:31;8518:4;8515:1;8508:15;8546:4;8543:1;8536:15;8429:132;-1:-1:-1;8575:9:1;;8373:217::o;12537:251::-;12607:6;12660:2;12648:9;12639:7;12635:23;12631:32;12628:52;;;12676:1;12673;12666:12;12628:52;12708:9;12702:16;12727:31;12752:5;12727:31;:::i;12793:980::-;13055:4;13103:3;13092:9;13088:19;13134:6;13123:9;13116:25;13160:2;13198:6;13193:2;13182:9;13178:18;13171:34;13241:3;13236:2;13225:9;13221:18;13214:31;13265:6;13300;13294:13;13331:6;13323;13316:22;13369:3;13358:9;13354:19;13347:26;;13408:2;13400:6;13396:15;13382:29;;13429:1;13439:195;13453:6;13450:1;13447:13;13439:195;;;13518:13;;-1:-1:-1;;;;;13514:39:1;13502:52;;13609:15;;;;13574:12;;;;13550:1;13468:9;13439:195;;;-1:-1:-1;;;;;;;13690:32:1;;;;13685:2;13670:18;;13663:60;-1:-1:-1;;;13754:3:1;13739:19;13732:35;13651:3;12793:980;-1:-1:-1;;;12793:980:1:o;14390:306::-;14478:6;14486;14494;14547:2;14535:9;14526:7;14522:23;14518:32;14515:52;;;14563:1;14560;14553:12;14515:52;14592:9;14586:16;14576:26;;14642:2;14631:9;14627:18;14621:25;14611:35;;14686:2;14675:9;14671:18;14665:25;14655:35;;14390:306;;;;;:::o

Swarm Source

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