ETH Price: $3,387.56 (+6.14%)
Gas: 26 Gwei

Token

OSINU Token (OSINU)
 

Overview

Max Total Supply

100,000,000 OSINU

Holders

149

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
*1️⃣5️⃣0️⃣.eth
Balance
133,153.288192594 OSINU

Value
$0.00
0xede4f636bc9ff333b01c26ba8a37d13b82e40214
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:
OSINU

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-15
*/

/**
 *Submitted for verification at Etherscan.io on 2021-11-06
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IBEP20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}


interface IPancakeERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}

interface IPancakeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IPancakeRouter01 {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getamountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getamountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getamountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getamountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}



/**
 * @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 {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == msg.sender, "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 onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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 onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}




////////////////////////////////////////////////////////////////////////////////////////////////////////
//OSINU Contract ////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
contract OSINU is IBEP20, Ownable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;
    
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _sellLock;
	mapping (address => bool) public wListed;
	
	mapping (address => bool) priv_buyer;
	mapping (address => bool) priv_retrieved;
	uint256 priv_amount = 200000 * 10**_decimals;
	

    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _whiteList;
    EnumerableSet.AddressSet private _excludedFromSellLock;
    EnumerableSet.AddressSet private _excludedFromRaffle;
    
    mapping (address => bool) public _blacklist;
    bool isBlacklist = true;
    
    //Token Info 
    string private constant _name = 'OSINU Token';
    string private constant _symbol = 'OSINU';
    uint8 private constant _decimals = 9;
    uint256 public constant InitialSupply= 100 * 10**6 * 10**_decimals;//equals 100.000.000 token

    uint256 swapLimit = 1 * 10**5 * 10**_decimals;
    bool isSwapPegged = true;
    
    //Divider for the buyLimit based on circulating Supply (1%)
    uint16 public constant BuyLimitDivider=100;
    //Divider for the MaxBalance based on circulating Supply (1.5%)
    uint8 public constant BalanceLimitDivider=65;
    //Divider for the Whitelist MaxBalance based on initial Supply(1.5%)
    uint16 public constant WhiteListBalanceLimitDivider=65;
    //Divider for sellLimit based on circulating Supply (1%)
    uint16 public constant SellLimitDivider=100;
    //Sellers get locked for MaxSellLockTime so they can't dump repeatedly
    uint16 public constant MaxSellLockTime= 1 seconds;
    // Team wallets
    address public constant TeamWallet=0xc0de1dB35182980F61C85137167c439dED4C815c;
    address public constant SecondTeamWallet=0xCbeb3C6aEC7040e4949F22234573bd06B31DE83b;
    //TODO: Change to Mainnet
    //TestNet
    //address private constant PancakeRouter=0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
    //MainNet
    // 0x10ED43C718714eb63d5aA57B78B54704E256024E
    address private constant PancakeRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    //variables that track balanceLimit and sellLimit,
    //can be updated based on circulating supply and Sell- and BalanceLimitDividers
    uint256 private _circulatingSupply =InitialSupply;
    uint256 public  balanceLimit = _circulatingSupply;
    uint256 public  sellLimit = _circulatingSupply;
    uint256 public  buyLimit = _circulatingSupply;
    address[] public triedToDump;

    //Limits max tax, only gets applied for tax changes, doesn't affect inital Tax
    uint8 public constant MaxTax=95;
    
    //Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer
    uint8 private _buyTax;
    uint8 private _sellTax;
    uint8 private _transferTax;
    bool botRekt = true;
    uint8 private _liquidityTax;
    uint8 private _marketingTax;
    
    bool isTokenSwapManual = true;

       
    address private _pancakePairAddress; 
    IPancakeRouter02 private  _pancakeRouter;
    
    //modifier for functions only the team can call
    modifier onlyTeam() {
        require(_isTeam(msg.sender), "Caller not in Team");
        _;
    }
    //Checks if address is in Team, is needed to give Team access even if contract is renounced
    //Team doesn't have access to critical Functions that could turn this into a Rugpull(Exept liquidity unlocks)
    function _isTeam(address addr) private view returns (bool){
        return addr==owner()||addr==TeamWallet||addr==SecondTeamWallet;
    }


    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Constructor///////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    constructor (address[] memory addy) {
        

        //contract creator gets 90% of the token to create LP-Pair
        uint256 deployerBalance=_circulatingSupply*7/10;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);
        //contract gets 10% of the token to generate LP token and Marketing Budget fase
        //contract will sell token over the first 200 sells to generate maximum LP and BNB
        uint256 injectBalance=_circulatingSupply-deployerBalance;
        _balances[address(this)]=injectBalance;
       emit Transfer(address(0), address(this),injectBalance);

        uint256 i;
        for(i=0; i<addy.length; i++) {
            _balances[addy[i]] += 200000 * 10**_decimals;
            _balances[address(this)] -= 200000 * 10**_decimals;
            emit Transfer(address(this), addy[i], 200000 * 10**_decimals);
        }
        
        // Pancake Router
        _pancakeRouter = IPancakeRouter02(PancakeRouter);
        //Creates a Pancake Pair
        _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this), _pancakeRouter.WETH());
        
        //Sets Buy/Sell limits
        balanceLimit=InitialSupply/BalanceLimitDivider;
        sellLimit=InitialSupply/SellLimitDivider;
        buyLimit=InitialSupply/BuyLimitDivider;

       //Sets sellLockTime to be 2 seconds by default
        sellLockTime=2 seconds;


        _buyTax=10;
        _sellTax=11;
        _transferTax=10;

        _liquidityTax=40;
        _marketingTax=60;
        //Team wallet and deployer are excluded from Taxes
        _excluded.add(TeamWallet);
        _excluded.add(SecondTeamWallet);
        _excluded.add(msg.sender);
        //excludes Pancake Router, pair, contract and burn address from staking
        _excludedFromRaffle.add(address(_pancakeRouter));
        _excludedFromRaffle.add(_pancakePairAddress);
        _excludedFromRaffle.add(address(this));
        _excludedFromRaffle.add(0x000000000000000000000000000000000000dEaD);
        _excludedFromSellLock.add(address(_pancakeRouter));
        _excludedFromSellLock.add(_pancakePairAddress);
        _excludedFromSellLock.add(address(this));
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Transfer functionality////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    //transfer function, every transfer runs through this function
    function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");
        
        
        //Manually Excluded adresses are transfering tax and lock free
        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient));
        
        //Transactions from and to the contract are always tax and lock free
        bool isContractTransfer=(sender==address(this) || recipient==address(this));
        
        //transfers between PancakeRouter and PancakePair are tax and lock free
        address pancakeRouter=address(_pancakeRouter);
        bool isLiquidityTransfer = ((sender == _pancakePairAddress && recipient == pancakeRouter) 
        || (recipient == _pancakePairAddress && sender == pancakeRouter));

        //differentiate between buy/sell/transfer to apply different taxes/restrictions
        bool isBuy=sender==_pancakePairAddress|| sender == pancakeRouter;
        bool isSell=recipient==_pancakePairAddress|| recipient == pancakeRouter;

        //Pick transfer
        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
        }
        else{ 
            //once trading is enabled, it can't be turned off again
            if (!tradingEnabled) {
                if (sender != owner() && recipient != owner()) {
                    if (!wListed[sender] && !wListed[recipient]) {
                        if (botRekt) {
                           emit Transfer(sender,recipient,0);
                           return;
                        }
                        else {
                            require(tradingEnabled,"trading not yet enabled");
                        }
                    }
                }
            }
            if(whiteListTrading){
                _whiteListTransfer(sender,recipient,amount,isBuy,isSell);
            }
            else{
                _taxedTransfer(sender,recipient,amount,isBuy,isSell);                  
            }
        }
    }
    //if whitelist is active, all taxed transfers run through this
    function _whiteListTransfer(address sender, address recipient,uint256 amount,bool isBuy,bool isSell) private{
        //only apply whitelist restrictions during buys and transfers
        if(!isSell){
            //the recipient needs to be on Whitelist. Works for both buys and transfers.
            //transfers to other whitelisted addresses are allowed.
            require(_whiteList.contains(recipient),"recipient not on whitelist");
            //Limit is 1/500 of initialSupply during whitelist, to allow for a large whitelist without causing a massive
            //price impact of the whitelist
            require((_balances[recipient]+amount<=InitialSupply/WhiteListBalanceLimitDivider),"amount exceeds whitelist max");    
        }
        _taxedTransfer(sender,recipient,amount,isBuy,isSell);

    }  
    //applies taxes, checks for limits, locks generates autoLP and stakingBNB, and autostakes
    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");


        swapLimit = sellLimit/2;
        
        uint8 tax;
        if(isSell){
            if(isBlacklist) {
                require(!_blacklist[sender]);
            }
            if(!_excludedFromSellLock.contains(sender)){
                //If seller sold less than sellLockTime(2h) ago, sell is declined, can be disabled by Team         
                require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Seller in sellLock");
                //Sets the time sellers get locked(2 hours by default)
                _sellLock[sender]=block.timestamp+sellLockTime;
            }
            //Sells can't exceed the sell limit(50.000 Tokens at start, can be updated to circulating supply)
            if(amount>sellLimit) {
                triedToDump.push(sender);
            }
            require(amount<=sellLimit,"Dump protection");
            tax=_sellTax;

        } else if(isBuy){
            //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit
            require(recipientBalance+amount<=balanceLimit,"whale protection");
            require(amount<=buyLimit, "whale protection");
            tax=_buyTax;

        } else {//Transfer
            //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit
            require(recipientBalance+amount<=balanceLimit,"whale protection");
            //Transfers are disabled in sell lock, this doesn't stop someone from transfering before
            //selling, but there is no satisfying solution for that, and you would need to pax additional tax
            if(!_excludedFromSellLock.contains(sender))
                require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Sender in Lock");
            tax=_transferTax;

        }     
        //Swapping AutoLP and MarketingBNB is only possible if sender is not pancake pair, 
        //if its not manually disabled, if its not already swapping and if its a Sell to avoid
        // people from causing a large price impact from repeatedly transfering when theres a large backlog of Tokens
        if((sender!=_pancakePairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier))
            _swapContractToken(amount);
        //staking and liquidity Tax get treated the same, only during conversion they get split
        uint256 contractToken=_calculateFee(amount, tax, _marketingTax+_liquidityTax);
        //Subtract the Taxed Tokens from the amount
        uint256 taxedAmount=amount-(contractToken);

        //Removes token and handles staking
        _removeToken(sender,amount);
        
        //Adds the taxed tokens to the contract wallet
        _balances[address(this)] += contractToken;

        //Adds token and handles staking
        _addToken(recipient, taxedAmount);
        
        emit Transfer(sender,recipient,taxedAmount);
        


    }
    //Feeless transfer only transfers and autostakes
    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        //Removes token and handles staking
        _removeToken(sender,amount);
        //Adds token and handles staking
        _addToken(recipient, amount);
        
        emit Transfer(sender,recipient,amount);

    }
    //Calculates the token that should be taxed
    function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) {
        return (amount*tax*taxPercent) / 10000;
    }

    function _addToken(address addr, uint256 amount) private {
        //the amount of token after transfer
        uint256 newAmount=_balances[addr]+amount;
        _balances[addr]=newAmount;

    }
    
    
    //removes Token, adds BNB to the toBePaid mapping and resets staking
    function _removeToken(address addr, uint256 amount) private {
        //the amount of token after transfer
        uint256 newAmount=_balances[addr]-amount;
         _balances[addr]=newAmount;
    }

    //lock for the withdraw
    bool private _isTokenSwaping;
    //the total reward distributed through staking, for tracking purposes
    uint256 public totalTokenSwapGenerated;
    //the total payout through staking, for tracking purposes
    uint256 public totalPayouts;
    
    //marketing share of the TokenSwap tax
    uint8 public marketingShare=100;
    //balance that is claimable by the team
    uint256 public marketingBalance;

    //Mapping of shares that are reserved for payout
    mapping(address => uint256) private toBePaid;

    //Contract, pancake and burnAddress are excluded, other addresses like CEX
    //can be manually excluded, excluded list is limited to 30 entries to avoid a
    //out of gas exeption during sells
    function isexcludedFromRaffle(address addr) public view returns (bool){
        return _excludedFromRaffle.contains(addr);
    }

    //distributes bnb between marketing share and dividents 
    function _distributeFeesBNB(uint256 BNBamount) private {
        // Deduct marketing Tax
        uint256 marketingSplit = (BNBamount * marketingShare) / 100;

        marketingBalance+=marketingSplit;

    }
    


    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Swap Contract Tokens//////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    //tracks auto generated BNB, useful for ticker etc
    uint256 public totalLPBNB;
    //Locks the swap if already swapping
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    //swaps the token on the contract for Marketing BNB and LP Token.
    //always swaps the sellLimit of token to avoid a large price impact
    function _swapContractToken(uint256 totalMax) private lockTheSwap{
        uint256 contractBalance=_balances[address(this)];
        uint16 totalTax=_liquidityTax+_marketingTax;
        uint256 tokenToSwap=swapLimit;
        if(tokenToSwap > totalMax) {
            if(isSwapPegged) {
                tokenToSwap = totalMax;
            }
        }
        //only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0
        if(contractBalance<tokenToSwap||totalTax==0){
            return;
        }
        //splits the token in TokenForLiquidity and tokenForMarketing
        uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax;
        uint256 tokenForMarketing= tokenToSwap-tokenForLiquidity;

        //splits tokenForLiquidity in 2 halves
        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqBNBToken=tokenForLiquidity-liqToken;

        //swaps marktetingToken and the liquidity token half for BNB
        uint256 swapToken=liqBNBToken+tokenForMarketing;
        //Gets the initial BNB balance, so swap won't touch any staked BNB
        uint256 initialBNBBalance = address(this).balance;
        _swapTokenForBNB(swapToken);
        uint256 newBNB=(address(this).balance - initialBNBBalance);
        //calculates the amount of BNB belonging to the LP-Pair and converts them to LP
        uint256 liqBNB = (newBNB*liqBNBToken)/swapToken;
        _addLiquidity(liqToken, liqBNB);
        //Get the BNB balance after LP generation to get the
        //exact amount of token left for Staking
        uint256 generatedBNB=(address(this).balance - initialBNBBalance);
        //distributes remaining BNB between stakers and Marketing
        _distributeFeesBNB(generatedBNB);
    }
    //swaps tokens on the contract for BNB
    function _swapTokenForBNB(uint256 amount) private {
        _approve(address(this), address(_pancakeRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _pancakeRouter.WETH();

        _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenamount, uint256 bnbamount) private {
        totalLPBNB+=bnbamount;
        _approve(address(this), address(_pancakeRouter), tokenamount);
        _pancakeRouter.addLiquidityETH{value: bnbamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //public functions /////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////// 


    function getLimits() public view returns(uint256 balance, uint256 sell){
        return(balanceLimit/10**_decimals, sellLimit/10**_decimals);
    }

    function getTaxes() public view returns(uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        return (_liquidityTax,_marketingTax,_buyTax,_sellTax,_transferTax);
    }

    function getWhitelistedStatus(address AddressToCheck) public view returns(bool){
        return _whiteList.contains(AddressToCheck);
    }
    //How long is a given address still locked from selling
    function getAddressSellLockTimeInSeconds(address AddressToCheck) public view returns (uint256){
       uint256 lockTime=_sellLock[AddressToCheck];
       if(lockTime<=block.timestamp)
       {
           return 0;
       }
       return lockTime-block.timestamp;
    }
    function getSellLockTimeInSeconds() public view returns(uint256){
        return sellLockTime;
    }
    
    //Functions every wallet can call
    //Resets sell lock of caller to the default sellLockTime should something go very wrong
    function AddressResetSellLock() public{
        _sellLock[msg.sender]=block.timestamp+sellLockTime;
    }
    
    
    
    function set_false_presaler(address addy) public onlyTeam {
        priv_buyer[addy] = false;
        priv_retrieved[addy] = true;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Settings//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    bool public sellLockDisabled;
    uint256 public sellLockTime;
    bool public manualConversion;


    function getDumpers() public view returns(address[] memory) {
        return triedToDump;
    }
    
    
    function TeamSetWhitelistedAddressAlt(address addy, bool booly) public onlyTeam {
        wListed[addy] = booly;
    }
    
    function TeamSetWhitelistedAddress(address addy, bool booly) public onlyTeam {
        wListed[addy] = booly;
        _excluded.add(addy);
    }
    
    
    function TeamSetWhitelistedAddressesAlt( address[] memory addy, bool booly) public onlyTeam {
        uint256 i;
        for(i=0; i<addy.length; i++) {
            wListed[addy[i]] = booly;
        }
    }
    
    function TeamSetWhitelistedAddresses( address[] memory addy, bool booly) public onlyTeam {
        uint256 i;
        for(i=0; i<addy.length; i++) {
            wListed[addy[i]] = booly;
            _excluded.add(addy[i]);
        }
    }
    
    function TeamSetPeggedSwap(bool isPegged) public onlyTeam {
        isSwapPegged = isPegged;
    }
    

    //Excludes account from Staking
    function TeamExcludeFromRaffle(address addr) public onlyTeam{
        require(!isexcludedFromRaffle(addr));
        _excludedFromRaffle.add(addr);
        
    }    

    //Includes excluded Account to staking
    function TeamIncludeToRaffle(address addr) public onlyTeam{
        require(isexcludedFromRaffle(addr));
        _excludedFromRaffle.remove(addr);
    }

    function TeamWithdrawMarketingBNB() public onlyTeam{
        uint256 amount=marketingBalance;
        marketingBalance=0;
        (bool sent,) =TeamWallet.call{value: (amount)}("");
        require(sent,"withdraw failed");
    } 


    //switches autoLiquidity and marketing BNB generation during transfers
    function TeamSwitchManualBNBConversion(bool manual) public onlyTeam{
        manualConversion=manual;
    }
    //Disables the timeLock after selling for everyone
    function TeamDisableSellLock(bool disabled) public onlyTeam{
        sellLockDisabled=disabled;
    }
    //Sets SellLockTime, needs to be lower than MaxSellLockTime
    function TeamSetSellLockTime(uint256 sellLockSeconds)public onlyTeam{
            require(sellLockSeconds<=MaxSellLockTime,"Sell Lock time too high");
            sellLockTime=sellLockSeconds;
    } 

    //Sets Taxes, is limited by MaxTax(20%) to make it impossible to create honeypot
    function TeamSetTaxes(uint8 , uint8 liquidityTaxes, uint8 marketingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public onlyTeam{
        uint8 totalTax=liquidityTaxes+marketingTaxes;
        require(totalTax==100, "liq+marketing needs to equal 100%");
        require(buyTax<=MaxTax&&sellTax<=MaxTax&&transferTax<=MaxTax,"taxes higher than max tax");

        _liquidityTax=liquidityTaxes;
        _marketingTax=marketingTaxes;
        
        _buyTax=buyTax;
        _sellTax=sellTax;
        _transferTax=transferTax;
    }
    //How much of the staking tax should be allocated for marketing
    function TeamChangeMarketingShare(uint8 newShare) public onlyTeam{
        marketingShare=newShare;
    }
    //manually converts contract token to LP and staking BNB
    function TeamManualGenerateTokenSwapBalance(uint256 _qty) public onlyTeam{
    _swapContractToken(_qty * 10**9);
    }
    //Exclude/Include account from fees (eg. CEX)
    function TeamExcludeAccountFromFees(address account) public onlyTeam {
        _excluded.add(account);
    }
    function TeamIncludeAccountToFees(address account) public onlyTeam {
        _excluded.remove(account);
    }
    //Exclude/Include account from fees (eg. CEX)
    function TeamExcludeAccountFromSellLock(address account) public onlyTeam {
        _excludedFromSellLock.add(account);
    }
    function TeamIncludeAccountToSellLock(address account) public onlyTeam {
        _excludedFromSellLock.remove(account);
    }
    
     //Limits need to be at least target, to avoid setting value to 0(avoid potential Honeypot)
    function TeamUpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit) public onlyTeam{
        //Adds decimals to limits
        newBalanceLimit=newBalanceLimit*10**_decimals;
        newSellLimit=newSellLimit*10**_decimals;
        balanceLimit = newBalanceLimit;
        sellLimit = newSellLimit;     
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Setup Functions///////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    bool public tradingEnabled;
    bool public whiteListTrading;
    address private _liquidityTokenAddress;
    //Enables whitelist trading and locks Liquidity for a short time
    function SetupEnableWhitelistTrading() public onlyTeam{
        require(!tradingEnabled);
        //Sets up the excluded from staking list
        tradingEnabled=true;
        whiteListTrading=true;
    }
    //Enables trading for everyone
    function SetupEnableTrading() public onlyTeam{
        require(tradingEnabled&&whiteListTrading);
        whiteListTrading=false;
    }

    //Sets up the LP-Token Address required for LP Release
    function SetupLiquidityTokenAddress(address liquidityTokenAddress) public onlyTeam{
        _liquidityTokenAddress=liquidityTokenAddress;
    }
    //Functions for whitelist
    function SetupAddToWhitelist(address addressToAdd) public onlyTeam{
        _whiteList.add(addressToAdd);
    }
    function SetupAddArrayToWhitelist(address[] memory addressesToAdd) public onlyTeam{
        for(uint i=0; i<addressesToAdd.length; i++){
            _whiteList.add(addressesToAdd[i]);
        }
    }
    function SetupRemoveFromWhitelist(address addressToRemove) public onlyTeam{
        _whiteList.remove(addressToRemove);
    } 
    
    
    function TeamRescueTokens(address tknAddress) public onlyTeam {
        IBEP20 token = IBEP20(tknAddress);
        uint256 ourBalance = token.balanceOf(address(this));
        require(ourBalance>0, "No tokens in our balance");
        token.transfer(msg.sender, ourBalance);
    }
    
    // Blacklists
    
    function setBlacklistEnabled(bool isBlacklistEnabled) public onlyTeam {
        isBlacklist = isBlacklistEnabled;
    }
    
    function setContractTokenSwapManual(bool manual) public onlyTeam {
        isTokenSwapManual = manual;
    }
    
    function setBlacklistedAddress(address toBlacklist) public onlyTeam {
        _blacklist[toBlacklist] = true;
    }
    
    function removeBlacklistedAddress(address toRemove) public onlyTeam {
        _blacklist[toRemove] = false;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Utilities/////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    function TeamAvoidBurning() public onlyTeam{
        (bool sent,) =msg.sender.call{value: (address(this).balance)}("");
        require(sent);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //external//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    receive() external payable {}
    fallback() external payable {}
    // IBEP20

    function getOwner() external view override returns (address) {
        return owner();
    }

    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    // IBEP20 - Helpers

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"addy","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"AddressResetSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SecondTeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressesToAdd","type":"address[]"}],"name":"SetupAddArrayToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToAdd","type":"address"}],"name":"SetupAddToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableWhitelistTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"SetupLiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToRemove","type":"address"}],"name":"SetupRemoveFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamAvoidBurning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"TeamChangeMarketingShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"TeamDisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamExcludeAccountFromSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"TeamExcludeFromRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamIncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TeamIncludeAccountToSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"TeamIncludeToRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"TeamManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"TeamRescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"TeamSetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"TeamSetSellLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"TeamSetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"TeamSetWhitelistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"TeamSetWhitelistedAddressAlt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addy","type":"address[]"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"TeamSetWhitelistedAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addy","type":"address[]"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"TeamSetWhitelistedAddressesAlt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"TeamSwitchManualBNBConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"TeamUpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TeamWithdrawMarketingBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WhiteListBalanceLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDumpers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getWhitelistedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"isexcludedFromRaffle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeBlacklistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isBlacklistEnabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toBlacklist","type":"address"}],"name":"setBlacklistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"set_false_presaler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPBNB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenSwapGenerated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"triedToDump","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200094d565b620000219062030d4062000a0c565b6007556011805460ff191660011790556200003f6009600a6200094d565b6200004e90620186a062000a0c565b6012556013805460ff191660011790556200006c6009600a6200094d565b6200007c906305f5e10062000a0c565b60148190556015819055601681905560175560198054660100000100000066ff0000ff00000019909116179055601d805460ff19166064179055348015620000c357600080fd5b506040516200426038038062004260833981016040819052620000e691620007ed565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000600a60145460076200013c919062000a0c565b620001489190620008e1565b336000818152600160205260408082208490555192935090916000805160206200424083398151915290620001809085815260200190565b60405180910390a36000816014546200019a919062000a2e565b306000818152600160205260408082208490555192935090916000805160206200424083398151915290620001d29085815260200190565b60405180910390a360005b83518110156200032657620001f56009600a6200094d565b620002049062030d4062000a0c565b600160008684815181106200021d576200021d62000a7c565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254620002569190620008c6565b909155506200026a90506009600a6200094d565b620002799062030d4062000a0c565b30600090815260016020526040812080549091906200029a90849062000a2e565b92505081905550838181518110620002b657620002b662000a7c565b60200260200101516001600160a01b0316306001600160a01b0316600080516020620042408339815191526009600a620002f191906200094d565b620003009062030d4062000a0c565b60405190815260200160405180910390a3806200031d8162000a48565b915050620001dd565b601a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200038657600080fd5b505afa1580156200039b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c19190620007cf565b6001600160a01b031663c9c6539630601a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041f57600080fd5b505afa15801562000434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045a9190620007cf565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620004a357600080fd5b505af1158015620004b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004de9190620007cf565b601980546001600160a01b039290921667010000000000000002600160381b600160d81b031990921691909117905560416200051d6009600a6200094d565b6200052d906305f5e10062000a0c565b620005399190620008e1565b60155560646200054c6009600a6200094d565b6200055c906305f5e10062000a0c565b620005689190620008e1565b60165560646200057b6009600a6200094d565b6200058b906305f5e10062000a0c565b620005979190620008e1565b60175560026022556019805465ffff00ffffff1916653c28000a0b0a179055620005e3600873c0de1db35182980f61c85137167c439ded4c815c62000740602090811b62001fa117901c565b506200061373cbeb3c6aec7040e4949f22234573bd06b31de83b60086200074060201b62001fa11790919060201c565b506200062f3360086200074060201b62001fa11790919060201c565b50601a546200065690600e906001600160a01b031662000740602090811b62001fa117901c565b5062000687601960079054906101000a90046001600160a01b0316600e6200074060201b62001fa11790919060201c565b50620006a330600e6200074060201b62001fa11790919060201c565b50620006c161dead600e6200074060201b62001fa11790919060201c565b50601a54620006e890600c906001600160a01b031662000740602090811b62001fa117901c565b5062000719601960079054906101000a90046001600160a01b0316600c6200074060201b62001fa11790919060201c565b506200073530600c6200074060201b62001fa11790919060201c565b505050505062000aa8565b600062000757836001600160a01b03841662000760565b90505b92915050565b6000818152600183016020526040812054620007a9575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200075a565b5060006200075a565b80516001600160a01b0381168114620007ca57600080fd5b919050565b600060208284031215620007e257600080fd5b6200075782620007b2565b600060208083850312156200080157600080fd5b82516001600160401b03808211156200081957600080fd5b818501915085601f8301126200082e57600080fd5b81518181111562000843576200084362000a92565b8060051b604051601f19603f830116810181811085821117156200086b576200086b62000a92565b604052828152858101935084860182860187018a10156200088b57600080fd5b600095505b83861015620008b957620008a481620007b2565b85526001959095019493860193860162000890565b5098975050505050505050565b60008219821115620008dc57620008dc62000a66565b500190565b600082620008ff57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200094557816000190482111562000929576200092962000a66565b808516156200093757918102915b93841c939080029062000909565b509250929050565b60006200075760ff84168360008262000969575060016200075a565b8162000978575060006200075a565b81600181146200099157600281146200099c57620009bc565b60019150506200075a565b60ff841115620009b057620009b062000a66565b50506001821b6200075a565b5060208310610133831016604e8410600b8410161715620009e1575081810a6200075a565b620009ed838362000904565b806000190482111562000a045762000a0462000a66565b029392505050565b600081600019048311821515161562000a295762000a2962000a66565b500290565b60008282101562000a435762000a4362000a66565b500390565b600060001982141562000a5f5762000a5f62000a66565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6137888062000ab86000396000f3fe6080604052600436106104475760003560e01c8063677a8870116102325780639728c0191161012d578063d8e8de34116100b0578063e77bf5f811610077578063e77bf5f814610dbd578063eb8e886314610ddd578063f2fde38b14610df2578063f88b0e4614610e12578063f9963ca114610e2857005b8063d8e8de3414610cf7578063da1144d614610d17578063dd62ed3e14610d37578063dff6bcbf14610d7d578063e3aa94b014610d9d57005b8063a6fc178a116100f4578063a6fc178a14610c62578063a9059cbb14610c82578063b76289b814610ca2578063b85111db14610cc2578063d51f383b14610cd757005b80639728c01914610bb2578063988c5ec914610bd25780639fa62d5f14610bf2578063a20623ce14610c12578063a457c2d714610c4257005b80638724cc72116101b55780638d2c50391161017c5780638d2c503914610b225780638da5cb5b14610aee578063914e208a14610b4257806393ab98f214610b6457806395d89b4114610b8457005b80638724cc7214610a9a5780638728ecd114610aaf578063887c60fb14610acf578063893d20e814610aee5780638d060d7714610b0c57005b806373ddf08e116101f957806373ddf08e14610a20578063762bb28214610a405780637b9e987a14610a565780637f91937314610a6b57806386d0ada814610a8057005b8063677a8870146109635780636f89e4091461098b57806370a08231146109b5578063715018a6146109eb57806371ab1f0914610a0057005b8063311a86971161034257806348e907b7116102c5578063588aeaf21161028c578063588aeaf2146108c7578063589210d9146108e757806358e55365146108fd57806363b263b31461091357806364365f131461094357005b806348e907b71461083c5780634ada218b146108525780634cdaf0ae146108715780634f91e48c1461089157806357ad67d1146108a757005b80633d8dbf5d116103095780633d8dbf5d146107b15780633e9be909146107d15780634089b170146107f15780634607e6921461080757806348e531641461082757005b8063311a869714610733578063313ce567146107485780633328b7211461075c5780633478154b1461077c578063395093511461079157005b80631285073c116103ca5780631eb25d13116103915780631eb25d13146106635780631f8b845e14610572578063230ffc421461067857806323b872dd146106b85780632973ef2d146106d857005b80631285073c146105cf57806314e91377146105ee5780631732ed7c1461060e57806318160ddd1461062e57806319e880841461064357005b80630b1daa3e1161040e5780630b1daa3e146105325780630fa6c5ff146105525780630fd99e16146105725780631193c6911461059a5780631201cbd0146105af57005b8063029a1ecd1461045057806302a89e021461047057806306fdde031461049057806309218ee7146104d6578063095ea7b31461050257005b3661044e57005b005b34801561045c57600080fd5b5061044e61046b366004613126565b610e48565b34801561047c57600080fd5b5061044e61048b3660046132b0565b610e98565b34801561049c57600080fd5b5060408051808201909152600b81526a27a9a4a72a902a37b5b2b760a91b60208201525b6040516104cd9190613452565b60405180910390f35b3480156104e257600080fd5b50601d546104f09060ff1681565b60405160ff90911681526020016104cd565b34801561050e57600080fd5b5061052261051d366004613208565b610ee1565b60405190151581526020016104cd565b34801561053e57600080fd5b5061044e61054d366004613126565b610ef8565b34801561055e57600080fd5b5061044e61056d366004613126565b610f28565b34801561057e57600080fd5b50610587606481565b60405161ffff90911681526020016104cd565b3480156105a657600080fd5b5061044e610f6a565b3480156105bb57600080fd5b5061044e6105ca3660046132b0565b610fb7565b3480156105db57600080fd5b506022545b6040519081526020016104cd565b3480156105fa57600080fd5b5061044e6106093660046132b0565b610fef565b34801561061a57600080fd5b5061044e6106293660046131da565b61102e565b34801561063a57600080fd5b506014546105e0565b34801561064f57600080fd5b5061044e61065e3660046131da565b611087565b34801561066f57600080fd5b506105e06110d7565b34801561068457600080fd5b506106a073cbeb3c6aec7040e4949f22234573bd06b31de83b81565b6040516001600160a01b0390911681526020016104cd565b3480156106c457600080fd5b506105226106d3366004613199565b6110f4565b3480156106e457600080fd5b506019546040805160ff640100000000840481168252600160281b840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a0016104cd565b34801561073f57600080fd5b506104f0604181565b34801561075457600080fd5b5060096104f0565b34801561076857600080fd5b5061044e610777366004613126565b61118b565b34801561078857600080fd5b50610587600181565b34801561079d57600080fd5b506105226107ac366004613208565b6111d1565b3480156107bd57600080fd5b5061044e6107cc366004613126565b611208565b3480156107dd57600080fd5b5061044e6107ec366004613269565b611251565b3480156107fd57600080fd5b506105e0601c5481565b34801561081357600080fd5b5061044e6108223660046132ea565b6112dd565b34801561083357600080fd5b5061044e61131b565b34801561084857600080fd5b506105e0601b5481565b34801561085e57600080fd5b5060235461052290610100900460ff1681565b34801561087d57600080fd5b5061044e61088c366004613126565b61133a565b34801561089d57600080fd5b506105e060165481565b3480156108b357600080fd5b5061044e6108c2366004613387565b61138b565b3480156108d357600080fd5b5061044e6108e2366004613126565b6114fd565b3480156108f357600080fd5b506105e060175481565b34801561090957600080fd5b506105e0601e5481565b34801561091f57600080fd5b5061052261092e366004613126565b60046020526000908152604090205460ff1681565b34801561094f57600080fd5b5061044e61095e366004613126565b61152d565b34801561096f57600080fd5b506106a073c0de1db35182980f61c85137167c439ded4c815c81565b34801561099757600080fd5b506109a061158b565b604080519283526020830191909152016104cd565b3480156109c157600080fd5b506105e06109d0366004613126565b6001600160a01b031660009081526001602052604090205490565b3480156109f757600080fd5b5061044e6115c8565b348015610a0c57600080fd5b506023546105229062010000900460ff1681565b348015610a2c57600080fd5b5061044e610a3b36600461336c565b61167b565b348015610a4c57600080fd5b506105e060155481565b348015610a6257600080fd5b5061044e6116b6565b348015610a7757600080fd5b5061044e611711565b348015610a8c57600080fd5b506023546105229060ff1681565b348015610aa657600080fd5b50610587604181565b348015610abb57600080fd5b506105e0610aca366004613126565b6117de565b348015610adb57600080fd5b5060215461052290610100900460ff1681565b348015610afa57600080fd5b506000546001600160a01b03166106a0565b348015610b1857600080fd5b506105e060205481565b348015610b2e57600080fd5b5061044e610b3d3660046132b0565b611818565b348015610b4e57600080fd5b50610b57611850565b6040516104cd919061343f565b348015610b7057600080fd5b506106a0610b7f3660046132ea565b6118b2565b348015610b9057600080fd5b506040805180820190915260058152644f53494e5560d81b60208201526104c0565b348015610bbe57600080fd5b5061044e610bcd366004613269565b6118dc565b348015610bde57600080fd5b50610522610bed366004613126565b6119a3565b348015610bfe57600080fd5b5061044e610c0d36600461331c565b6119b0565b348015610c1e57600080fd5b50610522610c2d366004613126565b60106020526000908152604090205460ff1681565b348015610c4e57600080fd5b50610522610c5d366004613208565b611a0f565b348015610c6e57600080fd5b5061044e610c7d3660046132b0565b611a8b565b348015610c8e57600080fd5b50610522610c9d366004613208565b611ac3565b348015610cae57600080fd5b5061044e610cbd366004613126565b611ad0565b348015610cce57600080fd5b5061044e611b00565b348015610ce357600080fd5b5061044e610cf23660046132ea565b611b7a565b348015610d0357600080fd5b50610522610d12366004613126565b611bf5565b348015610d2357600080fd5b5061044e610d32366004613234565b611c02565b348015610d4357600080fd5b506105e0610d52366004613160565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d8957600080fd5b5061044e610d98366004613126565b611c73565b348015610da957600080fd5b5061044e610db8366004613126565b611ca3565b348015610dc957600080fd5b5061044e610dd8366004613126565b611e1c565b348015610de957600080fd5b506104f0605f81565b348015610dfe57600080fd5b5061044e610e0d366004613126565b611e4c565b348015610e1e57600080fd5b506105e060225481565b348015610e3457600080fd5b5061044e610e43366004613126565b611f75565b610e5133611fb6565b610e765760405162461bcd60e51b8152600401610e6d906134a7565b60405180910390fd5b610e7f816119a3565b15610e8957600080fd5b610e94600e82611fa1565b5050565b610ea133611fb6565b610ebd5760405162461bcd60e51b8152600401610e6d906134a7565b6019805491151566010000000000000266ff00000000000019909216919091179055565b6000610eee33848461201b565b5060015b92915050565b610f0133611fb6565b610f1d5760405162461bcd60e51b8152600401610e6d906134a7565b610e94600c8261210e565b610f3133611fb6565b610f4d5760405162461bcd60e51b8152600401610e6d906134a7565b610f56816119a3565b610f5f57600080fd5b610e94600e8261210e565b610f7333611fb6565b610f8f5760405162461bcd60e51b8152600401610e6d906134a7565b602354610100900460ff1615610fa457600080fd5b6023805462ffff00191662010100179055565b610fc033611fb6565b610fdc5760405162461bcd60e51b8152600401610e6d906134a7565b6011805460ff1916911515919091179055565b610ff833611fb6565b6110145760405162461bcd60e51b8152600401610e6d906134a7565b602180549115156101000261ff0019909216919091179055565b61103733611fb6565b6110535760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b0382166000908152600460205260409020805460ff1916821515179055611082600883611fa1565b505050565b61109033611fb6565b6110ac5760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6110e36009600a6135db565b6110f1906305f5e100613686565b81565b6000611101848484612123565b6001600160a01b03841660009081526002602090815260408083203384529091529020548281101561116c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e6d565b611180853361117b86856136a5565b61201b565b506001949350505050565b61119433611fb6565b6111b05760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152601060205260409020805460ff19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610eee91859061117b908690613539565b61121133611fb6565b61122d5760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b61125a33611fb6565b6112765760405162461bcd60e51b8152600401610e6d906134a7565b60005b825181101561108257816004600085848151811061129957611299613703565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112d5816136bc565b915050611279565b6112e633611fb6565b6113025760405162461bcd60e51b8152600401610e6d906134a7565b61131861131382633b9aca00613686565b612490565b50565b6022546113289042613539565b33600090815260036020526040902055565b61134333611fb6565b61135f5760405162461bcd60e51b8152600401610e6d906134a7565b602380546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b61139433611fb6565b6113b05760405162461bcd60e51b8152600401610e6d906134a7565b60006113bc8587613551565b90508060ff1660641461141b5760405162461bcd60e51b815260206004820152602160248201527f6c69712b6d61726b6574696e67206e6565647320746f20657175616c203130306044820152602560f81b6064820152608401610e6d565b605f60ff8516118015906114335750605f60ff841611155b80156114435750605f60ff831611155b61148f5760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610e6d565b506019805460ff928316620100000262ff0000199484166101000261ffff19978516600160281b0265ff000000000019998616640100000000029990991665ffff00000000199093169290921797909717959095169390911692909217929092179190911691909117905550565b61150633611fb6565b6115225760405162461bcd60e51b8152600401610e6d906134a7565b610e94600882611fa1565b61153633611fb6565b6115525760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152600560209081526040808320805460ff19908116909155600690925290912080549091166001179055565b60008061159a6009600a6135db565b6015546115a79190613576565b6115b36009600a6135db565b6016546115c09190613576565b915091509091565b336115db6000546001600160a01b031690565b6001600160a01b0316146116315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e6d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61168433611fb6565b6116a05760405162461bcd60e51b8152600401610e6d906134a7565b601d805460ff191660ff92909216919091179055565b6116bf33611fb6565b6116db5760405162461bcd60e51b8152600401610e6d906134a7565b602354610100900460ff1680156116fa575060235462010000900460ff165b61170357600080fd5b6023805462ff000019169055565b61171a33611fb6565b6117365760405162461bcd60e51b8152600401610e6d906134a7565b601e805460009182905560405190919073c0de1db35182980f61c85137167c439ded4c815c9083908381818185875af1925050503d8060008114611796576040519150601f19603f3d011682016040523d82523d6000602084013e61179b565b606091505b5050905080610e945760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e6d565b6001600160a01b0381166000908152600360205260408120544281116118075750600092915050565b61181142826136a5565b9392505050565b61182133611fb6565b61183d5760405162461bcd60e51b8152600401610e6d906134a7565b6023805460ff1916911515919091179055565b606060188054806020026020016040519081016040528092919081815260200182805480156118a857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161188a575b5050505050905090565b601881815481106118c257600080fd5b6000918252602090912001546001600160a01b0316905081565b6118e533611fb6565b6119015760405162461bcd60e51b8152600401610e6d906134a7565b60005b825181101561108257816004600085848151811061192457611924613703565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555061199083828151811061197857611978613703565b60200260200101516008611fa190919063ffffffff16565b508061199b816136bc565b915050611904565b6000610ef2600e836125e7565b6119b933611fb6565b6119d55760405162461bcd60e51b8152600401610e6d906134a7565b6119e16009600a6135db565b6119eb9083613686565b91506119f96009600a6135db565b611a039082613686565b60159290925550601655565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611a725760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e6d565b611a81338561117b86856136a5565b5060019392505050565b611a9433611fb6565b611ab05760405162461bcd60e51b8152600401610e6d906134a7565b6013805460ff1916911515919091179055565b6000610eee338484612123565b611ad933611fb6565b611af55760405162461bcd60e51b8152600401610e6d906134a7565b610e94600a82611fa1565b611b0933611fb6565b611b255760405162461bcd60e51b8152600401610e6d906134a7565b604051600090339047908381818185875af1925050503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b505090508061131857600080fd5b611b8333611fb6565b611b9f5760405162461bcd60e51b8152600401610e6d906134a7565b6001811115611bf05760405162461bcd60e51b815260206004820152601760248201527f53656c6c204c6f636b2074696d6520746f6f20686967680000000000000000006044820152606401610e6d565b602255565b6000610ef2600a836125e7565b611c0b33611fb6565b611c275760405162461bcd60e51b8152600401610e6d906134a7565b60005b8151811015610e9457611c60828281518110611c4857611c48613703565b6020026020010151600a611fa190919063ffffffff16565b5080611c6b816136bc565b915050611c2a565b611c7c33611fb6565b611c985760405162461bcd60e51b8152600401610e6d906134a7565b610e9460088261210e565b611cac33611fb6565b611cc85760405162461bcd60e51b8152600401610e6d906134a7565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b158015611d0c57600080fd5b505afa158015611d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d449190613303565b905060008111611d965760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e6d565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1691906132cd565b50505050565b611e2533611fb6565b611e415760405162461bcd60e51b8152600401610e6d906134a7565b610e94600a8261210e565b33611e5f6000546001600160a01b031690565b6001600160a01b031614611eb55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e6d565b6001600160a01b038116611f1a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e6d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611f7e33611fb6565b611f9a5760405162461bcd60e51b8152600401610e6d906134a7565b610e94600c825b6000611811836001600160a01b038416612609565b600080546001600160a01b0383811691161480611fef57506001600160a01b03821673c0de1db35182980f61c85137167c439ded4c815c145b80610ef257506001600160a01b03821673cbeb3c6aec7040e4949f22234573bd06b31de83b1492915050565b6001600160a01b0383166120655760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e6d565b6001600160a01b0382166120ad5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e6d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611811836001600160a01b038416612658565b6001600160a01b03831661216e5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e6d565b6001600160a01b0382166121b75760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610e6d565b60006121c46008856125e7565b806121d557506121d56008846125e7565b905060006001600160a01b0385163014806121f857506001600160a01b03841630145b601a546019549192506001600160a01b0390811691600091888116600160381b9092041614801561223a5750816001600160a01b0316866001600160a01b0316145b8061227557506019546001600160a01b03878116600160381b909204161480156122755750816001600160a01b0316876001600160a01b0316145b6019549091506000906001600160a01b03898116600160381b9092041614806122af5750826001600160a01b0316886001600160a01b0316145b6019549091506000906001600160a01b03898116600160381b9092041614806122e95750836001600160a01b0316886001600160a01b0316145b905084806122f45750825b806122fc5750855b156123115761230c898989612745565b612485565b602354610100900460ff1661245a576000546001600160a01b038a811691161480159061234c57506000546001600160a01b03898116911614155b1561245a576001600160a01b03891660009081526004602052604090205460ff1615801561239357506001600160a01b03881660009081526004602052604090205460ff16155b1561245a576019546301000000900460ff161561240357876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516123f091815260200190565b60405180910390a3505050505050505050565b602354610100900460ff1661245a5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e6d565b60235462010000900460ff16156124785761230c8989898585612810565b6124858989898585612918565b505050505050505050565b6021805460ff1916600190811790915530600090815260209190915260408120546019549091906124d690600160281b810460ff90811691640100000000900416613551565b60ff16905060006012549050838111156124f85760135460ff16156124f85750825b80831080612508575061ffff8216155b15612515575050506125da565b60195460009061ffff84169061253690640100000000900460ff1684613686565b6125409190613576565b9050600061254e82846136a5565b9050600061255d600284613576565b9050600061256b82856136a5565b905060006125798483613539565b90504761258582612d4b565b600061259182476136a5565b90506000836125a08684613686565b6125aa9190613576565b90506125b68682612eb3565b60006125c284476136a5565b90506125cd81612f83565b5050505050505050505050505b506021805460ff19169055565b6001600160a01b03811660009081526001830160205260408120541515611811565b600081815260018301602052604081205461265057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ef2565b506000610ef2565b6000818152600183016020526040812054801561273b57600061267c6001836136a5565b8554909150600090612690906001906136a5565b905060008660000182815481106126a9576126a9613703565b90600052602060002001549050808760000184815481106126cc576126cc613703565b6000918252602080832090910192909255828152600189019091526040902084905586548790806126ff576126ff6136ed565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ef2565b6000915050610ef2565b6001600160a01b038316600090815260016020526040902054818110156127a95760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e6d565b6127b38483612fc0565b6127bd8383613005565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161280291815260200190565b60405180910390a350505050565b8061290457612820600a856125e7565b61286c5760405162461bcd60e51b815260206004820152601a60248201527f726563697069656e74206e6f74206f6e2077686974656c6973740000000000006044820152606401610e6d565b604161287a6009600a6135db565b612888906305f5e100613686565b6128929190613576565b6001600160a01b0385166000908152600160205260409020546128b6908590613539565b11156129045760405162461bcd60e51b815260206004820152601c60248201527f616d6f756e7420657863656564732077686974656c697374206d6178000000006044820152606401610e6d565b6129118585858585612918565b5050505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156129865760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e6d565b60026016546129959190613576565b60125560008315612b215760115460ff16156129d1576001600160a01b03881660009081526010602052604090205460ff16156129d157600080fd5b6129dc600c896125e7565b612a76576001600160a01b03881660009081526003602052604090205442101580612a0e5750602154610100900460ff165b612a4f5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610e6d565b602254612a5c9042613539565b6001600160a01b0389166000908152600360205260409020555b601654861115612acc57601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b038a161790555b601654861115612b105760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e6d565b50601954610100900460ff16612c33565b8415612b8057601554612b348785613539565b1115612b525760405162461bcd60e51b8152600401610e6d906134d3565b601754861115612b745760405162461bcd60e51b8152600401610e6d906134d3565b5060195460ff16612c33565b601554612b8d8785613539565b1115612bab5760405162461bcd60e51b8152600401610e6d906134d3565b612bb6600c896125e7565b612c25576001600160a01b03881660009081526003602052604090205442101580612be85750602154610100900460ff165b612c255760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e6d565b5060195462010000900460ff165b6019546001600160a01b03898116600160381b9092041614801590612c5b575060235460ff16155b8015612c6a575060215460ff16155b15612c7857612c7886612490565b601954600090612ca99088908490612ca49060ff6401000000008204811691600160281b900416613551565b613029565b90506000612cb782896136a5565b9050612cc38a89612fc0565b3060009081526001602052604081208054849290612ce2908490613539565b90915550612cf290508982613005565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d3791815260200190565b60405180910390a350505050505050505050565b601a54612d639030906001600160a01b03168361201b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9857612d98613703565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dec57600080fd5b505afa158015612e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e249190613143565b81600181518110612e3757612e37613703565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790612e7d9085906000908690309042906004016134fd565b600060405180830381600087803b158015612e9757600080fd5b505af1158015612eab573d6000803e3d6000fd5b505050505050565b8060206000828254612ec59190613539565b9091555050601a54612ee29030906001600160a01b03168461201b565b601a5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612f4a57600080fd5b505af1158015612f5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612911919061333e565b601d54600090606490612f999060ff1684613686565b612fa39190613576565b905080601e6000828254612fb79190613539565b90915550505050565b6001600160a01b038216600090815260016020526040812054612fe49083906136a5565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612fe4908390613539565b60006127108260ff168460ff16866130419190613686565b61304b9190613686565b6130559190613576565b949350505050565b80356130688161372f565b919050565b600082601f83011261307e57600080fd5b8135602067ffffffffffffffff8083111561309b5761309b613719565b8260051b604051601f19603f830116810181811084821117156130c0576130c0613719565b604052848152838101925086840182880185018910156130df57600080fd5b600092505b85831015613109576130f58161305d565b8452928401926001929092019184016130e4565b50979650505050505050565b803560ff8116811461306857600080fd5b60006020828403121561313857600080fd5b81356118118161372f565b60006020828403121561315557600080fd5b81516118118161372f565b6000806040838503121561317357600080fd5b823561317e8161372f565b9150602083013561318e8161372f565b809150509250929050565b6000806000606084860312156131ae57600080fd5b83356131b98161372f565b925060208401356131c98161372f565b929592945050506040919091013590565b600080604083850312156131ed57600080fd5b82356131f88161372f565b9150602083013561318e81613744565b6000806040838503121561321b57600080fd5b82356132268161372f565b946020939093013593505050565b60006020828403121561324657600080fd5b813567ffffffffffffffff81111561325d57600080fd5b6130558482850161306d565b6000806040838503121561327c57600080fd5b823567ffffffffffffffff81111561329357600080fd5b61329f8582860161306d565b925050602083013561318e81613744565b6000602082840312156132c257600080fd5b813561181181613744565b6000602082840312156132df57600080fd5b815161181181613744565b6000602082840312156132fc57600080fd5b5035919050565b60006020828403121561331557600080fd5b5051919050565b6000806040838503121561332f57600080fd5b50508035926020909101359150565b60008060006060848603121561335357600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561337e57600080fd5b61181182613115565b60008060008060008060c087890312156133a057600080fd5b6133a987613115565b95506133b760208801613115565b94506133c560408801613115565b93506133d360608801613115565b92506133e160808801613115565b91506133ef60a08801613115565b90509295509295509295565b600081518084526020808501945080840160005b838110156134345781516001600160a01b03168752958201959082019060010161340f565b509495945050505050565b60208152600061181160208301846133fb565b600060208083528351808285015260005b8181101561347f57858101830151858201604001528201613463565b81811115613491576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b85815284602082015260a06040820152600061351c60a08301866133fb565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561354c5761354c6136d7565b500190565b600060ff821660ff84168060ff0382111561356e5761356e6136d7565b019392505050565b60008261359357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156135d35781600019048211156135b9576135b96136d7565b808516156135c657918102915b93841c939080029061359d565b509250929050565b600061181160ff8416836000826135f457506001610ef2565b8161360157506000610ef2565b816001811461361757600281146136215761363d565b6001915050610ef2565b60ff841115613632576136326136d7565b50506001821b610ef2565b5060208310610133831016604e8410600b8410161715613660575081810a610ef2565b61366a8383613598565b806000190482111561367e5761367e6136d7565b029392505050565b60008160001904831182151516156136a0576136a06136d7565b500290565b6000828210156136b7576136b76136d7565b500390565b60006000198214156136d0576136d06136d7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461131857600080fd5b801515811461131857600080fdfea2646970667358221220c2d054da6d66500f10455105d437f05cf440994d0ce79f0836673836ad80a42664736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000063000000000000000000000000188b591b2fe704cb9e737b82b909b1cacc534562000000000000000000000000f7df3acad1157cc0dd501263c553c4d80dedc989000000000000000000000000dc5f24b36a31d9a84837c7329a82eb0078953d1600000000000000000000000003d602813549935e80c27b084ac14c702a496fb70000000000000000000000000f30a0710fc4f881e7f0d8cabc39ac879f7e7e020000000000000000000000001d9260a73eff66d82adb4e9cf377990b6450b7cc000000000000000000000000d61927df96283aec3f9e56480a4108710d17dba7000000000000000000000000c3b6005364dfd8a540cb9e37ebbbbaf951b581ef0000000000000000000000009ce0603fa2f48dbba1f4176a0f591ea63f02e3c8000000000000000000000000f2d2c0f3492bbde32612e29315d555e692f9540f000000000000000000000000d8c536f1c1b80eb51917d2921ae67aac95b2f4310000000000000000000000005ee42438d0d8fc399c94ef3543665e993e847b490000000000000000000000009f885471f298798485ccd9083164e6d4ee791e20000000000000000000000000e97b3791a03706c58f5c6bc3554213c3e6eb8550000000000000000000000000e2f5aa3a495c8f5526595b1b8d7b01cb3beefadc00000000000000000000000072024c2a5d597f007c7bc713619ca8270296b866000000000000000000000000a4f4eec3428d6b6e4018ffc5a30b95ef374186a30000000000000000000000005ce70e68d01d601b4e3e8cc7a2ef7cf65c7870c50000000000000000000000002386ce99cedc8356e7328709cf3760e069dd5316000000000000000000000000f1c421901ebeca6d1d67ae41345ba295bda0a1f50000000000000000000000003c4ab1c5a5c46b8f11af1903ad8ddafd8c99992a000000000000000000000000717f042b2b47a4322a288fbc48e55e41b36794b0000000000000000000000000d3f5e357b72209221b40042927802cf6735b8f29000000000000000000000000695f3c781229c1531be7eb600e2a074c2e7514ca0000000000000000000000001bcd63e7aabf27d628e3eb51ebcfc1f174b05a8600000000000000000000000039e34417811c3965636729659fdc7420f51b2e4f0000000000000000000000008a0754042add7b9d11c16705036ffa37eb80df16000000000000000000000000bebb4d1267f85d20020f9a8559081ecb54b885ca000000000000000000000000d4bc87902d570335a2765b9c76ac4b4f67db35fa000000000000000000000000b5e77a37585f64671c7defdf3fe3997b6184e420000000000000000000000000c404d1fe813dfc7206519844f47cfcf72b80f8860000000000000000000000000f8f8e77a24447185c546b68fc328808ab1505070000000000000000000000006d838b149663bf5b3d7c8956b3575fb3c7e0d4d6000000000000000000000000c92c5ec5bd10bd23d78e343d48200eb3862ed6d20000000000000000000000005acc7f6f6694f2797be4e88fd8168524d83699b30000000000000000000000007dc21cd61aa8202be9ac60753f9fcdb89a4cfb310000000000000000000000002e9cad50082be2a6975e4cf035fe4d9acf18902100000000000000000000000088e4f6bca584770c525bffcc4119841592b32ab10000000000000000000000009cbad7b2ac1a5de276f9dd41fd854e697e699fad000000000000000000000000d4a5dcfc9bc0cc30acde313cea8aac84da54f920000000000000000000000000e39784fcc980bcc02e5adfdde5514bd78fd6c3db0000000000000000000000005109a455f4db64b3981e9d1d6070089c49b4b3c70000000000000000000000000f5e1070ff5df66791e07dca371c035cb089e9b6000000000000000000000000c556aa79252afb2acb6701b7fb9bccf82777ae66000000000000000000000000e3f44e929e9d5904f0adc3b2f1f238989745bf8b0000000000000000000000009f914db0e5dbaa4cf097e0664932233c5cbe49730000000000000000000000002314ef4813836a1e572884e39cbb498317fe416a000000000000000000000000fb6ad3e405be1bb11b0ab7d718ed1ae6cf0beb84000000000000000000000000450d300203a3c6a231b934482073f0b1a764ed2f000000000000000000000000e400fc877a1506d8e91710e4604530557a61488e000000000000000000000000db80d0d07286169e7241831ae0a4d902924aabe70000000000000000000000000dc7c792651df635a81811f3df2dc7cbf6cc2a0e0000000000000000000000004b349b346030a7a4009cbe869d5aeffe0ecf3360000000000000000000000000382278e9b6a467f3260e2444b1d788152e2ca12e0000000000000000000000008fde6479e0168f3bb9b25db51bf0b2deb1f47046000000000000000000000000b1057b9c50ec3274c5850fc1499853ebf3b5d1bb0000000000000000000000003cc0fdaf9686dbefe1915910174747e8827c0b440000000000000000000000002834697f136610d14314a23e2dd31f6af7bcea4e000000000000000000000000b2d0ff0824fcb1952618d20f59f34ba45bb8fb3400000000000000000000000045f544ceaeb556fb86575b2e74c2e2789a9a32f0000000000000000000000000383aa39c09d2f0ad4d2f2762b585a1ce5ee9e120000000000000000000000000acaa43fcb35051bf70022ccb050541242b9f2212000000000000000000000000a4d0eb10b8e4423a075299e8da3d98ffdbd0483700000000000000000000000023275dec317423b5d3ae3056f334427c2ae7e637000000000000000000000000c4b5679ca3289d62827cdccf970a00bb844481600000000000000000000000009ec443315f4ab92fc89464ed23ff11d20dc6f1cb000000000000000000000000109f56969db5ca4b5c06bffa72b4498c400b6d3f000000000000000000000000b2b8fbf298864095b0fb8799dc451c924b9ec9a7000000000000000000000000697603e52acbf88abae7c5b25b7de916876d3b15000000000000000000000000f83bcebc79f2f388ae790efc06f3f2a3370c934e0000000000000000000000000897bfa5e0ae4b46fa06c709d0c9828ce72edb79000000000000000000000000fd74b8ae93f966693c020e8c2534e485acfe4ef0000000000000000000000000150bc54a89838e3f5c267c89fa5c024cbe2b77390000000000000000000000001e3d169be47dfad78ef20375d88182ad2bc3ceab000000000000000000000000e29c0663017868294e9da0fca97530593a6dc2b6000000000000000000000000fc6e67841f3b16dd6392a559191ada079bbefca60000000000000000000000003facac712880e33fa1c941d6ce26f53b5c402aff000000000000000000000000369256e09f13b6a24b22f2d47c9119cee057342a000000000000000000000000bc005b44a67854766a75276625abff5dcfe32f19000000000000000000000000ba029072033c32560873aa5c922f64c1e3daf876000000000000000000000000036eb80cc26b9796a1675006a4721ce80c9678030000000000000000000000005579e6872a364f343967ac147abc9d1a335812dd000000000000000000000000cad625ba2ac33d9fb4040f57f9d45743cab43a270000000000000000000000003c3e7ba529201972a4a0d1011e0c36b5c0041935000000000000000000000000761db0dc8018a47f48ae36a3b8247fb6f7e90053000000000000000000000000b88a66748152b5ffa55073a49d17f92d9a678b5900000000000000000000000018305dad931b8d04a6edf7ebcd1e9f8e14e6c724000000000000000000000000934f3c63ece710ba703dee9fd3d69a3345aac3c80000000000000000000000001319e8054a26b9477356d594ac3bc123a31128b6000000000000000000000000be6e9af68bd8e56e92c65f13514a6960c3c29a030000000000000000000000006ef0f3fd8514c56b25d4bb4a99b2b667d64690700000000000000000000000005ee3a8ffd016b9e3453082461fd26e0f2619f683000000000000000000000000f6a6600676e86cb0e9bb03db53421f3447bf95210000000000000000000000008760860be96358409d42cf0a0aab6c598ef78688000000000000000000000000282c69562ee01583bb527e4033adff87e934ce710000000000000000000000001f644ecfd214afbf2e4900a305825d7272ec6629000000000000000000000000c8d50dcb1d18ecc35095af9d0b8f05a7d0fe4518000000000000000000000000cbeb3c6aec7040e4949f22234573bd06b31de83b000000000000000000000000507c912f227026b38a27fa3d368a42fe83553a6f

Deployed Bytecode

0x6080604052600436106104475760003560e01c8063677a8870116102325780639728c0191161012d578063d8e8de34116100b0578063e77bf5f811610077578063e77bf5f814610dbd578063eb8e886314610ddd578063f2fde38b14610df2578063f88b0e4614610e12578063f9963ca114610e2857005b8063d8e8de3414610cf7578063da1144d614610d17578063dd62ed3e14610d37578063dff6bcbf14610d7d578063e3aa94b014610d9d57005b8063a6fc178a116100f4578063a6fc178a14610c62578063a9059cbb14610c82578063b76289b814610ca2578063b85111db14610cc2578063d51f383b14610cd757005b80639728c01914610bb2578063988c5ec914610bd25780639fa62d5f14610bf2578063a20623ce14610c12578063a457c2d714610c4257005b80638724cc72116101b55780638d2c50391161017c5780638d2c503914610b225780638da5cb5b14610aee578063914e208a14610b4257806393ab98f214610b6457806395d89b4114610b8457005b80638724cc7214610a9a5780638728ecd114610aaf578063887c60fb14610acf578063893d20e814610aee5780638d060d7714610b0c57005b806373ddf08e116101f957806373ddf08e14610a20578063762bb28214610a405780637b9e987a14610a565780637f91937314610a6b57806386d0ada814610a8057005b8063677a8870146109635780636f89e4091461098b57806370a08231146109b5578063715018a6146109eb57806371ab1f0914610a0057005b8063311a86971161034257806348e907b7116102c5578063588aeaf21161028c578063588aeaf2146108c7578063589210d9146108e757806358e55365146108fd57806363b263b31461091357806364365f131461094357005b806348e907b71461083c5780634ada218b146108525780634cdaf0ae146108715780634f91e48c1461089157806357ad67d1146108a757005b80633d8dbf5d116103095780633d8dbf5d146107b15780633e9be909146107d15780634089b170146107f15780634607e6921461080757806348e531641461082757005b8063311a869714610733578063313ce567146107485780633328b7211461075c5780633478154b1461077c578063395093511461079157005b80631285073c116103ca5780631eb25d13116103915780631eb25d13146106635780631f8b845e14610572578063230ffc421461067857806323b872dd146106b85780632973ef2d146106d857005b80631285073c146105cf57806314e91377146105ee5780631732ed7c1461060e57806318160ddd1461062e57806319e880841461064357005b80630b1daa3e1161040e5780630b1daa3e146105325780630fa6c5ff146105525780630fd99e16146105725780631193c6911461059a5780631201cbd0146105af57005b8063029a1ecd1461045057806302a89e021461047057806306fdde031461049057806309218ee7146104d6578063095ea7b31461050257005b3661044e57005b005b34801561045c57600080fd5b5061044e61046b366004613126565b610e48565b34801561047c57600080fd5b5061044e61048b3660046132b0565b610e98565b34801561049c57600080fd5b5060408051808201909152600b81526a27a9a4a72a902a37b5b2b760a91b60208201525b6040516104cd9190613452565b60405180910390f35b3480156104e257600080fd5b50601d546104f09060ff1681565b60405160ff90911681526020016104cd565b34801561050e57600080fd5b5061052261051d366004613208565b610ee1565b60405190151581526020016104cd565b34801561053e57600080fd5b5061044e61054d366004613126565b610ef8565b34801561055e57600080fd5b5061044e61056d366004613126565b610f28565b34801561057e57600080fd5b50610587606481565b60405161ffff90911681526020016104cd565b3480156105a657600080fd5b5061044e610f6a565b3480156105bb57600080fd5b5061044e6105ca3660046132b0565b610fb7565b3480156105db57600080fd5b506022545b6040519081526020016104cd565b3480156105fa57600080fd5b5061044e6106093660046132b0565b610fef565b34801561061a57600080fd5b5061044e6106293660046131da565b61102e565b34801561063a57600080fd5b506014546105e0565b34801561064f57600080fd5b5061044e61065e3660046131da565b611087565b34801561066f57600080fd5b506105e06110d7565b34801561068457600080fd5b506106a073cbeb3c6aec7040e4949f22234573bd06b31de83b81565b6040516001600160a01b0390911681526020016104cd565b3480156106c457600080fd5b506105226106d3366004613199565b6110f4565b3480156106e457600080fd5b506019546040805160ff640100000000840481168252600160281b840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a0016104cd565b34801561073f57600080fd5b506104f0604181565b34801561075457600080fd5b5060096104f0565b34801561076857600080fd5b5061044e610777366004613126565b61118b565b34801561078857600080fd5b50610587600181565b34801561079d57600080fd5b506105226107ac366004613208565b6111d1565b3480156107bd57600080fd5b5061044e6107cc366004613126565b611208565b3480156107dd57600080fd5b5061044e6107ec366004613269565b611251565b3480156107fd57600080fd5b506105e0601c5481565b34801561081357600080fd5b5061044e6108223660046132ea565b6112dd565b34801561083357600080fd5b5061044e61131b565b34801561084857600080fd5b506105e0601b5481565b34801561085e57600080fd5b5060235461052290610100900460ff1681565b34801561087d57600080fd5b5061044e61088c366004613126565b61133a565b34801561089d57600080fd5b506105e060165481565b3480156108b357600080fd5b5061044e6108c2366004613387565b61138b565b3480156108d357600080fd5b5061044e6108e2366004613126565b6114fd565b3480156108f357600080fd5b506105e060175481565b34801561090957600080fd5b506105e0601e5481565b34801561091f57600080fd5b5061052261092e366004613126565b60046020526000908152604090205460ff1681565b34801561094f57600080fd5b5061044e61095e366004613126565b61152d565b34801561096f57600080fd5b506106a073c0de1db35182980f61c85137167c439ded4c815c81565b34801561099757600080fd5b506109a061158b565b604080519283526020830191909152016104cd565b3480156109c157600080fd5b506105e06109d0366004613126565b6001600160a01b031660009081526001602052604090205490565b3480156109f757600080fd5b5061044e6115c8565b348015610a0c57600080fd5b506023546105229062010000900460ff1681565b348015610a2c57600080fd5b5061044e610a3b36600461336c565b61167b565b348015610a4c57600080fd5b506105e060155481565b348015610a6257600080fd5b5061044e6116b6565b348015610a7757600080fd5b5061044e611711565b348015610a8c57600080fd5b506023546105229060ff1681565b348015610aa657600080fd5b50610587604181565b348015610abb57600080fd5b506105e0610aca366004613126565b6117de565b348015610adb57600080fd5b5060215461052290610100900460ff1681565b348015610afa57600080fd5b506000546001600160a01b03166106a0565b348015610b1857600080fd5b506105e060205481565b348015610b2e57600080fd5b5061044e610b3d3660046132b0565b611818565b348015610b4e57600080fd5b50610b57611850565b6040516104cd919061343f565b348015610b7057600080fd5b506106a0610b7f3660046132ea565b6118b2565b348015610b9057600080fd5b506040805180820190915260058152644f53494e5560d81b60208201526104c0565b348015610bbe57600080fd5b5061044e610bcd366004613269565b6118dc565b348015610bde57600080fd5b50610522610bed366004613126565b6119a3565b348015610bfe57600080fd5b5061044e610c0d36600461331c565b6119b0565b348015610c1e57600080fd5b50610522610c2d366004613126565b60106020526000908152604090205460ff1681565b348015610c4e57600080fd5b50610522610c5d366004613208565b611a0f565b348015610c6e57600080fd5b5061044e610c7d3660046132b0565b611a8b565b348015610c8e57600080fd5b50610522610c9d366004613208565b611ac3565b348015610cae57600080fd5b5061044e610cbd366004613126565b611ad0565b348015610cce57600080fd5b5061044e611b00565b348015610ce357600080fd5b5061044e610cf23660046132ea565b611b7a565b348015610d0357600080fd5b50610522610d12366004613126565b611bf5565b348015610d2357600080fd5b5061044e610d32366004613234565b611c02565b348015610d4357600080fd5b506105e0610d52366004613160565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610d8957600080fd5b5061044e610d98366004613126565b611c73565b348015610da957600080fd5b5061044e610db8366004613126565b611ca3565b348015610dc957600080fd5b5061044e610dd8366004613126565b611e1c565b348015610de957600080fd5b506104f0605f81565b348015610dfe57600080fd5b5061044e610e0d366004613126565b611e4c565b348015610e1e57600080fd5b506105e060225481565b348015610e3457600080fd5b5061044e610e43366004613126565b611f75565b610e5133611fb6565b610e765760405162461bcd60e51b8152600401610e6d906134a7565b60405180910390fd5b610e7f816119a3565b15610e8957600080fd5b610e94600e82611fa1565b5050565b610ea133611fb6565b610ebd5760405162461bcd60e51b8152600401610e6d906134a7565b6019805491151566010000000000000266ff00000000000019909216919091179055565b6000610eee33848461201b565b5060015b92915050565b610f0133611fb6565b610f1d5760405162461bcd60e51b8152600401610e6d906134a7565b610e94600c8261210e565b610f3133611fb6565b610f4d5760405162461bcd60e51b8152600401610e6d906134a7565b610f56816119a3565b610f5f57600080fd5b610e94600e8261210e565b610f7333611fb6565b610f8f5760405162461bcd60e51b8152600401610e6d906134a7565b602354610100900460ff1615610fa457600080fd5b6023805462ffff00191662010100179055565b610fc033611fb6565b610fdc5760405162461bcd60e51b8152600401610e6d906134a7565b6011805460ff1916911515919091179055565b610ff833611fb6565b6110145760405162461bcd60e51b8152600401610e6d906134a7565b602180549115156101000261ff0019909216919091179055565b61103733611fb6565b6110535760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b0382166000908152600460205260409020805460ff1916821515179055611082600883611fa1565b505050565b61109033611fb6565b6110ac5760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6110e36009600a6135db565b6110f1906305f5e100613686565b81565b6000611101848484612123565b6001600160a01b03841660009081526002602090815260408083203384529091529020548281101561116c5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610e6d565b611180853361117b86856136a5565b61201b565b506001949350505050565b61119433611fb6565b6111b05760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152601060205260409020805460ff19169055565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610eee91859061117b908690613539565b61121133611fb6565b61122d5760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b61125a33611fb6565b6112765760405162461bcd60e51b8152600401610e6d906134a7565b60005b825181101561108257816004600085848151811061129957611299613703565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112d5816136bc565b915050611279565b6112e633611fb6565b6113025760405162461bcd60e51b8152600401610e6d906134a7565b61131861131382633b9aca00613686565b612490565b50565b6022546113289042613539565b33600090815260036020526040902055565b61134333611fb6565b61135f5760405162461bcd60e51b8152600401610e6d906134a7565b602380546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b61139433611fb6565b6113b05760405162461bcd60e51b8152600401610e6d906134a7565b60006113bc8587613551565b90508060ff1660641461141b5760405162461bcd60e51b815260206004820152602160248201527f6c69712b6d61726b6574696e67206e6565647320746f20657175616c203130306044820152602560f81b6064820152608401610e6d565b605f60ff8516118015906114335750605f60ff841611155b80156114435750605f60ff831611155b61148f5760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610e6d565b506019805460ff928316620100000262ff0000199484166101000261ffff19978516600160281b0265ff000000000019998616640100000000029990991665ffff00000000199093169290921797909717959095169390911692909217929092179190911691909117905550565b61150633611fb6565b6115225760405162461bcd60e51b8152600401610e6d906134a7565b610e94600882611fa1565b61153633611fb6565b6115525760405162461bcd60e51b8152600401610e6d906134a7565b6001600160a01b03166000908152600560209081526040808320805460ff19908116909155600690925290912080549091166001179055565b60008061159a6009600a6135db565b6015546115a79190613576565b6115b36009600a6135db565b6016546115c09190613576565b915091509091565b336115db6000546001600160a01b031690565b6001600160a01b0316146116315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e6d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61168433611fb6565b6116a05760405162461bcd60e51b8152600401610e6d906134a7565b601d805460ff191660ff92909216919091179055565b6116bf33611fb6565b6116db5760405162461bcd60e51b8152600401610e6d906134a7565b602354610100900460ff1680156116fa575060235462010000900460ff165b61170357600080fd5b6023805462ff000019169055565b61171a33611fb6565b6117365760405162461bcd60e51b8152600401610e6d906134a7565b601e805460009182905560405190919073c0de1db35182980f61c85137167c439ded4c815c9083908381818185875af1925050503d8060008114611796576040519150601f19603f3d011682016040523d82523d6000602084013e61179b565b606091505b5050905080610e945760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610e6d565b6001600160a01b0381166000908152600360205260408120544281116118075750600092915050565b61181142826136a5565b9392505050565b61182133611fb6565b61183d5760405162461bcd60e51b8152600401610e6d906134a7565b6023805460ff1916911515919091179055565b606060188054806020026020016040519081016040528092919081815260200182805480156118a857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161188a575b5050505050905090565b601881815481106118c257600080fd5b6000918252602090912001546001600160a01b0316905081565b6118e533611fb6565b6119015760405162461bcd60e51b8152600401610e6d906134a7565b60005b825181101561108257816004600085848151811061192457611924613703565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555061199083828151811061197857611978613703565b60200260200101516008611fa190919063ffffffff16565b508061199b816136bc565b915050611904565b6000610ef2600e836125e7565b6119b933611fb6565b6119d55760405162461bcd60e51b8152600401610e6d906134a7565b6119e16009600a6135db565b6119eb9083613686565b91506119f96009600a6135db565b611a039082613686565b60159290925550601655565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611a725760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e6d565b611a81338561117b86856136a5565b5060019392505050565b611a9433611fb6565b611ab05760405162461bcd60e51b8152600401610e6d906134a7565b6013805460ff1916911515919091179055565b6000610eee338484612123565b611ad933611fb6565b611af55760405162461bcd60e51b8152600401610e6d906134a7565b610e94600a82611fa1565b611b0933611fb6565b611b255760405162461bcd60e51b8152600401610e6d906134a7565b604051600090339047908381818185875af1925050503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b505090508061131857600080fd5b611b8333611fb6565b611b9f5760405162461bcd60e51b8152600401610e6d906134a7565b6001811115611bf05760405162461bcd60e51b815260206004820152601760248201527f53656c6c204c6f636b2074696d6520746f6f20686967680000000000000000006044820152606401610e6d565b602255565b6000610ef2600a836125e7565b611c0b33611fb6565b611c275760405162461bcd60e51b8152600401610e6d906134a7565b60005b8151811015610e9457611c60828281518110611c4857611c48613703565b6020026020010151600a611fa190919063ffffffff16565b5080611c6b816136bc565b915050611c2a565b611c7c33611fb6565b611c985760405162461bcd60e51b8152600401610e6d906134a7565b610e9460088261210e565b611cac33611fb6565b611cc85760405162461bcd60e51b8152600401610e6d906134a7565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b158015611d0c57600080fd5b505afa158015611d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d449190613303565b905060008111611d965760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e6d565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1691906132cd565b50505050565b611e2533611fb6565b611e415760405162461bcd60e51b8152600401610e6d906134a7565b610e94600a8261210e565b33611e5f6000546001600160a01b031690565b6001600160a01b031614611eb55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e6d565b6001600160a01b038116611f1a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e6d565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611f7e33611fb6565b611f9a5760405162461bcd60e51b8152600401610e6d906134a7565b610e94600c825b6000611811836001600160a01b038416612609565b600080546001600160a01b0383811691161480611fef57506001600160a01b03821673c0de1db35182980f61c85137167c439ded4c815c145b80610ef257506001600160a01b03821673cbeb3c6aec7040e4949f22234573bd06b31de83b1492915050565b6001600160a01b0383166120655760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e6d565b6001600160a01b0382166120ad5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e6d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611811836001600160a01b038416612658565b6001600160a01b03831661216e5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610e6d565b6001600160a01b0382166121b75760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610e6d565b60006121c46008856125e7565b806121d557506121d56008846125e7565b905060006001600160a01b0385163014806121f857506001600160a01b03841630145b601a546019549192506001600160a01b0390811691600091888116600160381b9092041614801561223a5750816001600160a01b0316866001600160a01b0316145b8061227557506019546001600160a01b03878116600160381b909204161480156122755750816001600160a01b0316876001600160a01b0316145b6019549091506000906001600160a01b03898116600160381b9092041614806122af5750826001600160a01b0316886001600160a01b0316145b6019549091506000906001600160a01b03898116600160381b9092041614806122e95750836001600160a01b0316886001600160a01b0316145b905084806122f45750825b806122fc5750855b156123115761230c898989612745565b612485565b602354610100900460ff1661245a576000546001600160a01b038a811691161480159061234c57506000546001600160a01b03898116911614155b1561245a576001600160a01b03891660009081526004602052604090205460ff1615801561239357506001600160a01b03881660009081526004602052604090205460ff16155b1561245a576019546301000000900460ff161561240357876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516123f091815260200190565b60405180910390a3505050505050505050565b602354610100900460ff1661245a5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610e6d565b60235462010000900460ff16156124785761230c8989898585612810565b6124858989898585612918565b505050505050505050565b6021805460ff1916600190811790915530600090815260209190915260408120546019549091906124d690600160281b810460ff90811691640100000000900416613551565b60ff16905060006012549050838111156124f85760135460ff16156124f85750825b80831080612508575061ffff8216155b15612515575050506125da565b60195460009061ffff84169061253690640100000000900460ff1684613686565b6125409190613576565b9050600061254e82846136a5565b9050600061255d600284613576565b9050600061256b82856136a5565b905060006125798483613539565b90504761258582612d4b565b600061259182476136a5565b90506000836125a08684613686565b6125aa9190613576565b90506125b68682612eb3565b60006125c284476136a5565b90506125cd81612f83565b5050505050505050505050505b506021805460ff19169055565b6001600160a01b03811660009081526001830160205260408120541515611811565b600081815260018301602052604081205461265057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ef2565b506000610ef2565b6000818152600183016020526040812054801561273b57600061267c6001836136a5565b8554909150600090612690906001906136a5565b905060008660000182815481106126a9576126a9613703565b90600052602060002001549050808760000184815481106126cc576126cc613703565b6000918252602080832090910192909255828152600189019091526040902084905586548790806126ff576126ff6136ed565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ef2565b6000915050610ef2565b6001600160a01b038316600090815260016020526040902054818110156127a95760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e6d565b6127b38483612fc0565b6127bd8383613005565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161280291815260200190565b60405180910390a350505050565b8061290457612820600a856125e7565b61286c5760405162461bcd60e51b815260206004820152601a60248201527f726563697069656e74206e6f74206f6e2077686974656c6973740000000000006044820152606401610e6d565b604161287a6009600a6135db565b612888906305f5e100613686565b6128929190613576565b6001600160a01b0385166000908152600160205260409020546128b6908590613539565b11156129045760405162461bcd60e51b815260206004820152601c60248201527f616d6f756e7420657863656564732077686974656c697374206d6178000000006044820152606401610e6d565b6129118585858585612918565b5050505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156129865760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610e6d565b60026016546129959190613576565b60125560008315612b215760115460ff16156129d1576001600160a01b03881660009081526010602052604090205460ff16156129d157600080fd5b6129dc600c896125e7565b612a76576001600160a01b03881660009081526003602052604090205442101580612a0e5750602154610100900460ff165b612a4f5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610e6d565b602254612a5c9042613539565b6001600160a01b0389166000908152600360205260409020555b601654861115612acc57601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b038a161790555b601654861115612b105760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610e6d565b50601954610100900460ff16612c33565b8415612b8057601554612b348785613539565b1115612b525760405162461bcd60e51b8152600401610e6d906134d3565b601754861115612b745760405162461bcd60e51b8152600401610e6d906134d3565b5060195460ff16612c33565b601554612b8d8785613539565b1115612bab5760405162461bcd60e51b8152600401610e6d906134d3565b612bb6600c896125e7565b612c25576001600160a01b03881660009081526003602052604090205442101580612be85750602154610100900460ff165b612c255760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610e6d565b5060195462010000900460ff165b6019546001600160a01b03898116600160381b9092041614801590612c5b575060235460ff16155b8015612c6a575060215460ff16155b15612c7857612c7886612490565b601954600090612ca99088908490612ca49060ff6401000000008204811691600160281b900416613551565b613029565b90506000612cb782896136a5565b9050612cc38a89612fc0565b3060009081526001602052604081208054849290612ce2908490613539565b90915550612cf290508982613005565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d3791815260200190565b60405180910390a350505050505050505050565b601a54612d639030906001600160a01b03168361201b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9857612d98613703565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612dec57600080fd5b505afa158015612e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e249190613143565b81600181518110612e3757612e37613703565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790612e7d9085906000908690309042906004016134fd565b600060405180830381600087803b158015612e9757600080fd5b505af1158015612eab573d6000803e3d6000fd5b505050505050565b8060206000828254612ec59190613539565b9091555050601a54612ee29030906001600160a01b03168461201b565b601a5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612f4a57600080fd5b505af1158015612f5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612911919061333e565b601d54600090606490612f999060ff1684613686565b612fa39190613576565b905080601e6000828254612fb79190613539565b90915550505050565b6001600160a01b038216600090815260016020526040812054612fe49083906136a5565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612fe4908390613539565b60006127108260ff168460ff16866130419190613686565b61304b9190613686565b6130559190613576565b949350505050565b80356130688161372f565b919050565b600082601f83011261307e57600080fd5b8135602067ffffffffffffffff8083111561309b5761309b613719565b8260051b604051601f19603f830116810181811084821117156130c0576130c0613719565b604052848152838101925086840182880185018910156130df57600080fd5b600092505b85831015613109576130f58161305d565b8452928401926001929092019184016130e4565b50979650505050505050565b803560ff8116811461306857600080fd5b60006020828403121561313857600080fd5b81356118118161372f565b60006020828403121561315557600080fd5b81516118118161372f565b6000806040838503121561317357600080fd5b823561317e8161372f565b9150602083013561318e8161372f565b809150509250929050565b6000806000606084860312156131ae57600080fd5b83356131b98161372f565b925060208401356131c98161372f565b929592945050506040919091013590565b600080604083850312156131ed57600080fd5b82356131f88161372f565b9150602083013561318e81613744565b6000806040838503121561321b57600080fd5b82356132268161372f565b946020939093013593505050565b60006020828403121561324657600080fd5b813567ffffffffffffffff81111561325d57600080fd5b6130558482850161306d565b6000806040838503121561327c57600080fd5b823567ffffffffffffffff81111561329357600080fd5b61329f8582860161306d565b925050602083013561318e81613744565b6000602082840312156132c257600080fd5b813561181181613744565b6000602082840312156132df57600080fd5b815161181181613744565b6000602082840312156132fc57600080fd5b5035919050565b60006020828403121561331557600080fd5b5051919050565b6000806040838503121561332f57600080fd5b50508035926020909101359150565b60008060006060848603121561335357600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561337e57600080fd5b61181182613115565b60008060008060008060c087890312156133a057600080fd5b6133a987613115565b95506133b760208801613115565b94506133c560408801613115565b93506133d360608801613115565b92506133e160808801613115565b91506133ef60a08801613115565b90509295509295509295565b600081518084526020808501945080840160005b838110156134345781516001600160a01b03168752958201959082019060010161340f565b509495945050505050565b60208152600061181160208301846133fb565b600060208083528351808285015260005b8181101561347f57858101830151858201604001528201613463565b81811115613491576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b85815284602082015260a06040820152600061351c60a08301866133fb565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561354c5761354c6136d7565b500190565b600060ff821660ff84168060ff0382111561356e5761356e6136d7565b019392505050565b60008261359357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156135d35781600019048211156135b9576135b96136d7565b808516156135c657918102915b93841c939080029061359d565b509250929050565b600061181160ff8416836000826135f457506001610ef2565b8161360157506000610ef2565b816001811461361757600281146136215761363d565b6001915050610ef2565b60ff841115613632576136326136d7565b50506001821b610ef2565b5060208310610133831016604e8410600b8410161715613660575081810a610ef2565b61366a8383613598565b806000190482111561367e5761367e6136d7565b029392505050565b60008160001904831182151516156136a0576136a06136d7565b500290565b6000828210156136b7576136b76136d7565b500390565b60006000198214156136d0576136d06136d7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461131857600080fd5b801515811461131857600080fdfea2646970667358221220c2d054da6d66500f10455105d437f05cf440994d0ce79f0836673836ad80a42664736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000063000000000000000000000000188b591b2fe704cb9e737b82b909b1cacc534562000000000000000000000000f7df3acad1157cc0dd501263c553c4d80dedc989000000000000000000000000dc5f24b36a31d9a84837c7329a82eb0078953d1600000000000000000000000003d602813549935e80c27b084ac14c702a496fb70000000000000000000000000f30a0710fc4f881e7f0d8cabc39ac879f7e7e020000000000000000000000001d9260a73eff66d82adb4e9cf377990b6450b7cc000000000000000000000000d61927df96283aec3f9e56480a4108710d17dba7000000000000000000000000c3b6005364dfd8a540cb9e37ebbbbaf951b581ef0000000000000000000000009ce0603fa2f48dbba1f4176a0f591ea63f02e3c8000000000000000000000000f2d2c0f3492bbde32612e29315d555e692f9540f000000000000000000000000d8c536f1c1b80eb51917d2921ae67aac95b2f4310000000000000000000000005ee42438d0d8fc399c94ef3543665e993e847b490000000000000000000000009f885471f298798485ccd9083164e6d4ee791e20000000000000000000000000e97b3791a03706c58f5c6bc3554213c3e6eb8550000000000000000000000000e2f5aa3a495c8f5526595b1b8d7b01cb3beefadc00000000000000000000000072024c2a5d597f007c7bc713619ca8270296b866000000000000000000000000a4f4eec3428d6b6e4018ffc5a30b95ef374186a30000000000000000000000005ce70e68d01d601b4e3e8cc7a2ef7cf65c7870c50000000000000000000000002386ce99cedc8356e7328709cf3760e069dd5316000000000000000000000000f1c421901ebeca6d1d67ae41345ba295bda0a1f50000000000000000000000003c4ab1c5a5c46b8f11af1903ad8ddafd8c99992a000000000000000000000000717f042b2b47a4322a288fbc48e55e41b36794b0000000000000000000000000d3f5e357b72209221b40042927802cf6735b8f29000000000000000000000000695f3c781229c1531be7eb600e2a074c2e7514ca0000000000000000000000001bcd63e7aabf27d628e3eb51ebcfc1f174b05a8600000000000000000000000039e34417811c3965636729659fdc7420f51b2e4f0000000000000000000000008a0754042add7b9d11c16705036ffa37eb80df16000000000000000000000000bebb4d1267f85d20020f9a8559081ecb54b885ca000000000000000000000000d4bc87902d570335a2765b9c76ac4b4f67db35fa000000000000000000000000b5e77a37585f64671c7defdf3fe3997b6184e420000000000000000000000000c404d1fe813dfc7206519844f47cfcf72b80f8860000000000000000000000000f8f8e77a24447185c546b68fc328808ab1505070000000000000000000000006d838b149663bf5b3d7c8956b3575fb3c7e0d4d6000000000000000000000000c92c5ec5bd10bd23d78e343d48200eb3862ed6d20000000000000000000000005acc7f6f6694f2797be4e88fd8168524d83699b30000000000000000000000007dc21cd61aa8202be9ac60753f9fcdb89a4cfb310000000000000000000000002e9cad50082be2a6975e4cf035fe4d9acf18902100000000000000000000000088e4f6bca584770c525bffcc4119841592b32ab10000000000000000000000009cbad7b2ac1a5de276f9dd41fd854e697e699fad000000000000000000000000d4a5dcfc9bc0cc30acde313cea8aac84da54f920000000000000000000000000e39784fcc980bcc02e5adfdde5514bd78fd6c3db0000000000000000000000005109a455f4db64b3981e9d1d6070089c49b4b3c70000000000000000000000000f5e1070ff5df66791e07dca371c035cb089e9b6000000000000000000000000c556aa79252afb2acb6701b7fb9bccf82777ae66000000000000000000000000e3f44e929e9d5904f0adc3b2f1f238989745bf8b0000000000000000000000009f914db0e5dbaa4cf097e0664932233c5cbe49730000000000000000000000002314ef4813836a1e572884e39cbb498317fe416a000000000000000000000000fb6ad3e405be1bb11b0ab7d718ed1ae6cf0beb84000000000000000000000000450d300203a3c6a231b934482073f0b1a764ed2f000000000000000000000000e400fc877a1506d8e91710e4604530557a61488e000000000000000000000000db80d0d07286169e7241831ae0a4d902924aabe70000000000000000000000000dc7c792651df635a81811f3df2dc7cbf6cc2a0e0000000000000000000000004b349b346030a7a4009cbe869d5aeffe0ecf3360000000000000000000000000382278e9b6a467f3260e2444b1d788152e2ca12e0000000000000000000000008fde6479e0168f3bb9b25db51bf0b2deb1f47046000000000000000000000000b1057b9c50ec3274c5850fc1499853ebf3b5d1bb0000000000000000000000003cc0fdaf9686dbefe1915910174747e8827c0b440000000000000000000000002834697f136610d14314a23e2dd31f6af7bcea4e000000000000000000000000b2d0ff0824fcb1952618d20f59f34ba45bb8fb3400000000000000000000000045f544ceaeb556fb86575b2e74c2e2789a9a32f0000000000000000000000000383aa39c09d2f0ad4d2f2762b585a1ce5ee9e120000000000000000000000000acaa43fcb35051bf70022ccb050541242b9f2212000000000000000000000000a4d0eb10b8e4423a075299e8da3d98ffdbd0483700000000000000000000000023275dec317423b5d3ae3056f334427c2ae7e637000000000000000000000000c4b5679ca3289d62827cdccf970a00bb844481600000000000000000000000009ec443315f4ab92fc89464ed23ff11d20dc6f1cb000000000000000000000000109f56969db5ca4b5c06bffa72b4498c400b6d3f000000000000000000000000b2b8fbf298864095b0fb8799dc451c924b9ec9a7000000000000000000000000697603e52acbf88abae7c5b25b7de916876d3b15000000000000000000000000f83bcebc79f2f388ae790efc06f3f2a3370c934e0000000000000000000000000897bfa5e0ae4b46fa06c709d0c9828ce72edb79000000000000000000000000fd74b8ae93f966693c020e8c2534e485acfe4ef0000000000000000000000000150bc54a89838e3f5c267c89fa5c024cbe2b77390000000000000000000000001e3d169be47dfad78ef20375d88182ad2bc3ceab000000000000000000000000e29c0663017868294e9da0fca97530593a6dc2b6000000000000000000000000fc6e67841f3b16dd6392a559191ada079bbefca60000000000000000000000003facac712880e33fa1c941d6ce26f53b5c402aff000000000000000000000000369256e09f13b6a24b22f2d47c9119cee057342a000000000000000000000000bc005b44a67854766a75276625abff5dcfe32f19000000000000000000000000ba029072033c32560873aa5c922f64c1e3daf876000000000000000000000000036eb80cc26b9796a1675006a4721ce80c9678030000000000000000000000005579e6872a364f343967ac147abc9d1a335812dd000000000000000000000000cad625ba2ac33d9fb4040f57f9d45743cab43a270000000000000000000000003c3e7ba529201972a4a0d1011e0c36b5c0041935000000000000000000000000761db0dc8018a47f48ae36a3b8247fb6f7e90053000000000000000000000000b88a66748152b5ffa55073a49d17f92d9a678b5900000000000000000000000018305dad931b8d04a6edf7ebcd1e9f8e14e6c724000000000000000000000000934f3c63ece710ba703dee9fd3d69a3345aac3c80000000000000000000000001319e8054a26b9477356d594ac3bc123a31128b6000000000000000000000000be6e9af68bd8e56e92c65f13514a6960c3c29a030000000000000000000000006ef0f3fd8514c56b25d4bb4a99b2b667d64690700000000000000000000000005ee3a8ffd016b9e3453082461fd26e0f2619f683000000000000000000000000f6a6600676e86cb0e9bb03db53421f3447bf95210000000000000000000000008760860be96358409d42cf0a0aab6c598ef78688000000000000000000000000282c69562ee01583bb527e4033adff87e934ce710000000000000000000000001f644ecfd214afbf2e4900a305825d7272ec6629000000000000000000000000c8d50dcb1d18ecc35095af9d0b8f05a7d0fe4518000000000000000000000000cbeb3c6aec7040e4949f22234573bd06b31de83b000000000000000000000000507c912f227026b38a27fa3d368a42fe83553a6f

-----Decoded View---------------
Arg [0] : addy (address[]): 0x188b591B2Fe704cb9E737B82B909B1cACc534562,0xF7df3aCaD1157Cc0dd501263c553c4D80dEdC989,0xDC5F24b36a31d9A84837C7329A82EB0078953D16,0x03D602813549935e80c27B084aC14c702a496Fb7,0x0f30a0710FC4f881e7F0D8cABC39Ac879F7E7E02,0x1d9260A73efF66D82adb4E9cf377990b6450b7Cc,0xD61927dF96283aEc3f9E56480a4108710d17DBa7,0xc3b6005364Dfd8A540cB9E37ebBBbaf951b581Ef,0x9Ce0603Fa2F48dBba1f4176a0f591Ea63f02e3c8,0xf2d2C0F3492Bbde32612e29315D555e692F9540F,0xD8c536f1c1b80EB51917d2921aE67AAC95B2F431,0x5eE42438d0D8fc399C94ef3543665E993e847b49,0x9f885471f298798485cCD9083164e6d4eE791E20,0xe97b3791A03706C58F5c6bc3554213C3e6Eb8550,0xe2f5AA3A495c8F5526595B1b8D7B01cB3bEefaDC,0x72024C2a5d597F007c7BC713619CA8270296b866,0xA4f4EEC3428D6B6e4018ffc5a30B95Ef374186a3,0x5cE70E68d01d601B4e3e8cC7A2Ef7CF65c7870c5,0x2386cE99CeDc8356e7328709Cf3760E069dd5316,0xF1c421901EBeCa6d1d67AE41345ba295BDA0a1F5,0x3C4Ab1C5a5c46b8f11aF1903ad8DDafD8C99992A,0x717f042B2B47A4322A288fbC48e55E41b36794B0,0xd3f5e357b72209221b40042927802Cf6735B8F29,0x695f3C781229c1531BE7eB600e2a074c2e7514CA,0x1bcd63e7aAbF27d628E3eB51EBcfC1F174B05A86,0x39E34417811C3965636729659fdc7420f51B2e4F,0x8A0754042adD7b9d11C16705036ffA37Eb80df16,0xbEbB4d1267f85D20020F9a8559081Ecb54b885ca,0xd4bC87902D570335a2765b9c76ac4B4F67dB35Fa,0xb5E77A37585f64671c7DeFDF3Fe3997b6184E420,0xC404d1FE813Dfc7206519844f47cFCf72b80F886,0x0f8f8e77A24447185c546B68fc328808ab150507,0x6D838B149663bF5b3D7c8956B3575FB3C7e0D4d6,0xC92C5ec5bd10BD23d78e343D48200eB3862ED6D2,0x5aCC7f6f6694F2797Be4E88FD8168524d83699B3,0x7dc21CD61aa8202Be9ac60753f9fcDB89A4cfB31,0x2E9CAd50082be2A6975E4Cf035fE4D9aCF189021,0x88e4F6BcA584770C525bffcC4119841592B32AB1,0x9cBAD7b2Ac1A5DE276f9dd41FD854E697E699fAD,0xd4A5DCFc9bC0cc30acdE313CEA8aAC84da54F920,0xE39784FcC980BCC02E5AdfDdE5514BD78fd6c3Db,0x5109A455f4dB64b3981e9D1d6070089c49b4b3C7,0x0f5E1070fF5DF66791E07DCA371c035Cb089E9B6,0xC556aA79252afb2acb6701B7fB9bcCF82777ae66,0xe3F44e929e9d5904F0Adc3b2f1f238989745bF8B,0x9F914Db0e5DbAA4Cf097E0664932233c5cbe4973,0x2314ef4813836a1E572884e39cBB498317fe416a,0xfb6ad3e405BE1bB11b0Ab7d718Ed1aE6Cf0BEb84,0x450D300203a3c6a231B934482073F0b1A764ED2F,0xE400FC877a1506D8e91710E4604530557A61488E,0xdb80D0D07286169E7241831aE0a4D902924AABe7,0x0dC7C792651df635a81811F3DF2dc7cbf6cC2a0e,0x4B349b346030A7a4009CBE869d5aEfFe0eCF3360,0x382278E9B6a467F3260E2444B1D788152e2ca12E,0x8FdE6479E0168F3BB9b25DB51bF0b2Deb1f47046,0xb1057B9C50EC3274C5850fC1499853eBF3B5d1bb,0x3CC0FDaf9686dbeFe1915910174747E8827C0b44,0x2834697f136610D14314a23e2DD31F6aF7bCEa4e,0xB2d0Ff0824fCb1952618d20f59F34Ba45BB8fb34,0x45f544cEaEb556fb86575b2e74C2e2789A9a32f0,0x383Aa39c09D2f0ad4d2f2762B585a1ce5eE9E120,0xacAA43fcb35051bF70022CCb050541242B9F2212,0xA4d0eB10B8E4423a075299e8DA3D98fFdBD04837,0x23275Dec317423B5D3aE3056f334427c2Ae7e637,0xC4B5679Ca3289d62827cdCcF970A00Bb84448160,0x9ec443315f4aB92fC89464ed23fF11D20dC6f1Cb,0x109f56969DB5CA4b5C06BfFA72B4498C400B6d3f,0xb2b8FbF298864095B0fb8799DC451C924b9ec9a7,0x697603E52aCBf88ABAE7c5B25B7DE916876D3B15,0xF83Bcebc79f2f388aE790Efc06f3F2a3370c934e,0x0897bfa5e0AE4B46FA06C709d0C9828cE72eDB79,0xfd74b8Ae93f966693C020e8c2534E485acFE4EF0,0x150bC54a89838e3F5C267C89fA5C024CBE2B7739,0x1E3D169BE47dFAd78eF20375D88182Ad2BC3cEAb,0xe29C0663017868294E9da0FCA97530593a6dc2B6,0xFC6E67841F3B16DD6392a559191aDA079BBEfCa6,0x3FAcAc712880E33fa1C941d6CE26f53b5C402Aff,0x369256e09f13B6a24b22f2d47c9119cee057342a,0xBC005b44A67854766a75276625abfF5DcFE32f19,0xBA029072033c32560873aa5c922F64c1e3daf876,0x036eB80Cc26B9796A1675006A4721Ce80C967803,0x5579e6872A364F343967Ac147ABC9D1A335812Dd,0xCAD625BA2Ac33D9fB4040F57F9d45743CAb43A27,0x3c3e7bA529201972a4a0D1011e0C36B5c0041935,0x761Db0dc8018a47F48Ae36A3B8247FB6f7E90053,0xb88a66748152b5FfA55073a49D17F92d9a678b59,0x18305DaD931b8d04a6edF7EBcd1E9f8e14e6C724,0x934f3C63EcE710Ba703deE9FD3d69a3345aac3C8,0x1319e8054A26B9477356D594AC3bC123a31128b6,0xBE6e9af68Bd8E56e92C65F13514A6960C3C29A03,0x6eF0f3Fd8514C56B25d4bB4a99b2b667d6469070,0x5eE3A8FFD016b9e3453082461FD26E0f2619F683,0xf6a6600676e86cb0E9bB03DB53421F3447BF9521,0x8760860Be96358409d42Cf0a0Aab6C598EF78688,0x282c69562Ee01583Bb527e4033ADFF87e934ce71,0x1f644eCfd214AFbF2E4900a305825D7272ec6629,0xC8D50dCb1d18eCc35095Af9d0b8f05A7D0fe4518,0xCbeb3C6aEC7040e4949F22234573bd06B31DE83b,0x507C912F227026B38a27FA3d368A42fE83553a6F

-----Encoded View---------------
101 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000063
Arg [2] : 000000000000000000000000188b591b2fe704cb9e737b82b909b1cacc534562
Arg [3] : 000000000000000000000000f7df3acad1157cc0dd501263c553c4d80dedc989
Arg [4] : 000000000000000000000000dc5f24b36a31d9a84837c7329a82eb0078953d16
Arg [5] : 00000000000000000000000003d602813549935e80c27b084ac14c702a496fb7
Arg [6] : 0000000000000000000000000f30a0710fc4f881e7f0d8cabc39ac879f7e7e02
Arg [7] : 0000000000000000000000001d9260a73eff66d82adb4e9cf377990b6450b7cc
Arg [8] : 000000000000000000000000d61927df96283aec3f9e56480a4108710d17dba7
Arg [9] : 000000000000000000000000c3b6005364dfd8a540cb9e37ebbbbaf951b581ef
Arg [10] : 0000000000000000000000009ce0603fa2f48dbba1f4176a0f591ea63f02e3c8
Arg [11] : 000000000000000000000000f2d2c0f3492bbde32612e29315d555e692f9540f
Arg [12] : 000000000000000000000000d8c536f1c1b80eb51917d2921ae67aac95b2f431
Arg [13] : 0000000000000000000000005ee42438d0d8fc399c94ef3543665e993e847b49
Arg [14] : 0000000000000000000000009f885471f298798485ccd9083164e6d4ee791e20
Arg [15] : 000000000000000000000000e97b3791a03706c58f5c6bc3554213c3e6eb8550
Arg [16] : 000000000000000000000000e2f5aa3a495c8f5526595b1b8d7b01cb3beefadc
Arg [17] : 00000000000000000000000072024c2a5d597f007c7bc713619ca8270296b866
Arg [18] : 000000000000000000000000a4f4eec3428d6b6e4018ffc5a30b95ef374186a3
Arg [19] : 0000000000000000000000005ce70e68d01d601b4e3e8cc7a2ef7cf65c7870c5
Arg [20] : 0000000000000000000000002386ce99cedc8356e7328709cf3760e069dd5316
Arg [21] : 000000000000000000000000f1c421901ebeca6d1d67ae41345ba295bda0a1f5
Arg [22] : 0000000000000000000000003c4ab1c5a5c46b8f11af1903ad8ddafd8c99992a
Arg [23] : 000000000000000000000000717f042b2b47a4322a288fbc48e55e41b36794b0
Arg [24] : 000000000000000000000000d3f5e357b72209221b40042927802cf6735b8f29
Arg [25] : 000000000000000000000000695f3c781229c1531be7eb600e2a074c2e7514ca
Arg [26] : 0000000000000000000000001bcd63e7aabf27d628e3eb51ebcfc1f174b05a86
Arg [27] : 00000000000000000000000039e34417811c3965636729659fdc7420f51b2e4f
Arg [28] : 0000000000000000000000008a0754042add7b9d11c16705036ffa37eb80df16
Arg [29] : 000000000000000000000000bebb4d1267f85d20020f9a8559081ecb54b885ca
Arg [30] : 000000000000000000000000d4bc87902d570335a2765b9c76ac4b4f67db35fa
Arg [31] : 000000000000000000000000b5e77a37585f64671c7defdf3fe3997b6184e420
Arg [32] : 000000000000000000000000c404d1fe813dfc7206519844f47cfcf72b80f886
Arg [33] : 0000000000000000000000000f8f8e77a24447185c546b68fc328808ab150507
Arg [34] : 0000000000000000000000006d838b149663bf5b3d7c8956b3575fb3c7e0d4d6
Arg [35] : 000000000000000000000000c92c5ec5bd10bd23d78e343d48200eb3862ed6d2
Arg [36] : 0000000000000000000000005acc7f6f6694f2797be4e88fd8168524d83699b3
Arg [37] : 0000000000000000000000007dc21cd61aa8202be9ac60753f9fcdb89a4cfb31
Arg [38] : 0000000000000000000000002e9cad50082be2a6975e4cf035fe4d9acf189021
Arg [39] : 00000000000000000000000088e4f6bca584770c525bffcc4119841592b32ab1
Arg [40] : 0000000000000000000000009cbad7b2ac1a5de276f9dd41fd854e697e699fad
Arg [41] : 000000000000000000000000d4a5dcfc9bc0cc30acde313cea8aac84da54f920
Arg [42] : 000000000000000000000000e39784fcc980bcc02e5adfdde5514bd78fd6c3db
Arg [43] : 0000000000000000000000005109a455f4db64b3981e9d1d6070089c49b4b3c7
Arg [44] : 0000000000000000000000000f5e1070ff5df66791e07dca371c035cb089e9b6
Arg [45] : 000000000000000000000000c556aa79252afb2acb6701b7fb9bccf82777ae66
Arg [46] : 000000000000000000000000e3f44e929e9d5904f0adc3b2f1f238989745bf8b
Arg [47] : 0000000000000000000000009f914db0e5dbaa4cf097e0664932233c5cbe4973
Arg [48] : 0000000000000000000000002314ef4813836a1e572884e39cbb498317fe416a
Arg [49] : 000000000000000000000000fb6ad3e405be1bb11b0ab7d718ed1ae6cf0beb84
Arg [50] : 000000000000000000000000450d300203a3c6a231b934482073f0b1a764ed2f
Arg [51] : 000000000000000000000000e400fc877a1506d8e91710e4604530557a61488e
Arg [52] : 000000000000000000000000db80d0d07286169e7241831ae0a4d902924aabe7
Arg [53] : 0000000000000000000000000dc7c792651df635a81811f3df2dc7cbf6cc2a0e
Arg [54] : 0000000000000000000000004b349b346030a7a4009cbe869d5aeffe0ecf3360
Arg [55] : 000000000000000000000000382278e9b6a467f3260e2444b1d788152e2ca12e
Arg [56] : 0000000000000000000000008fde6479e0168f3bb9b25db51bf0b2deb1f47046
Arg [57] : 000000000000000000000000b1057b9c50ec3274c5850fc1499853ebf3b5d1bb
Arg [58] : 0000000000000000000000003cc0fdaf9686dbefe1915910174747e8827c0b44
Arg [59] : 0000000000000000000000002834697f136610d14314a23e2dd31f6af7bcea4e
Arg [60] : 000000000000000000000000b2d0ff0824fcb1952618d20f59f34ba45bb8fb34
Arg [61] : 00000000000000000000000045f544ceaeb556fb86575b2e74c2e2789a9a32f0
Arg [62] : 000000000000000000000000383aa39c09d2f0ad4d2f2762b585a1ce5ee9e120
Arg [63] : 000000000000000000000000acaa43fcb35051bf70022ccb050541242b9f2212
Arg [64] : 000000000000000000000000a4d0eb10b8e4423a075299e8da3d98ffdbd04837
Arg [65] : 00000000000000000000000023275dec317423b5d3ae3056f334427c2ae7e637
Arg [66] : 000000000000000000000000c4b5679ca3289d62827cdccf970a00bb84448160
Arg [67] : 0000000000000000000000009ec443315f4ab92fc89464ed23ff11d20dc6f1cb
Arg [68] : 000000000000000000000000109f56969db5ca4b5c06bffa72b4498c400b6d3f
Arg [69] : 000000000000000000000000b2b8fbf298864095b0fb8799dc451c924b9ec9a7
Arg [70] : 000000000000000000000000697603e52acbf88abae7c5b25b7de916876d3b15
Arg [71] : 000000000000000000000000f83bcebc79f2f388ae790efc06f3f2a3370c934e
Arg [72] : 0000000000000000000000000897bfa5e0ae4b46fa06c709d0c9828ce72edb79
Arg [73] : 000000000000000000000000fd74b8ae93f966693c020e8c2534e485acfe4ef0
Arg [74] : 000000000000000000000000150bc54a89838e3f5c267c89fa5c024cbe2b7739
Arg [75] : 0000000000000000000000001e3d169be47dfad78ef20375d88182ad2bc3ceab
Arg [76] : 000000000000000000000000e29c0663017868294e9da0fca97530593a6dc2b6
Arg [77] : 000000000000000000000000fc6e67841f3b16dd6392a559191ada079bbefca6
Arg [78] : 0000000000000000000000003facac712880e33fa1c941d6ce26f53b5c402aff
Arg [79] : 000000000000000000000000369256e09f13b6a24b22f2d47c9119cee057342a
Arg [80] : 000000000000000000000000bc005b44a67854766a75276625abff5dcfe32f19
Arg [81] : 000000000000000000000000ba029072033c32560873aa5c922f64c1e3daf876
Arg [82] : 000000000000000000000000036eb80cc26b9796a1675006a4721ce80c967803
Arg [83] : 0000000000000000000000005579e6872a364f343967ac147abc9d1a335812dd
Arg [84] : 000000000000000000000000cad625ba2ac33d9fb4040f57f9d45743cab43a27
Arg [85] : 0000000000000000000000003c3e7ba529201972a4a0d1011e0c36b5c0041935
Arg [86] : 000000000000000000000000761db0dc8018a47f48ae36a3b8247fb6f7e90053
Arg [87] : 000000000000000000000000b88a66748152b5ffa55073a49d17f92d9a678b59
Arg [88] : 00000000000000000000000018305dad931b8d04a6edf7ebcd1e9f8e14e6c724
Arg [89] : 000000000000000000000000934f3c63ece710ba703dee9fd3d69a3345aac3c8
Arg [90] : 0000000000000000000000001319e8054a26b9477356d594ac3bc123a31128b6
Arg [91] : 000000000000000000000000be6e9af68bd8e56e92c65f13514a6960c3c29a03
Arg [92] : 0000000000000000000000006ef0f3fd8514c56b25d4bb4a99b2b667d6469070
Arg [93] : 0000000000000000000000005ee3a8ffd016b9e3453082461fd26e0f2619f683
Arg [94] : 000000000000000000000000f6a6600676e86cb0e9bb03db53421f3447bf9521
Arg [95] : 0000000000000000000000008760860be96358409d42cf0a0aab6c598ef78688
Arg [96] : 000000000000000000000000282c69562ee01583bb527e4033adff87e934ce71
Arg [97] : 0000000000000000000000001f644ecfd214afbf2e4900a305825d7272ec6629
Arg [98] : 000000000000000000000000c8d50dcb1d18ecc35095af9d0b8f05a7d0fe4518
Arg [99] : 000000000000000000000000cbeb3c6aec7040e4949f22234573bd06b31de83b
Arg [100] : 000000000000000000000000507c912f227026b38a27fa3d368a42fe83553a6f


Deployed Bytecode Sourcemap

27716:31347:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49949:165;;;;;;;;;;-1:-1:-1;49949:165:0;;;;;:::i;:::-;;:::i;55328:110::-;;;;;;;;;;-1:-1:-1;55328:110:0;;;;;:::i;:::-;;:::i;56717:94::-;;;;;;;;;;-1:-1:-1;56798:5:0;;;;;;;;;;;;-1:-1:-1;;;56798:5:0;;;;56717:94;;;;;;;:::i;:::-;;;;;;;;42385:31;;;;;;;;;;-1:-1:-1;42385:31:0;;;;;;;;;;;18971:4:1;18959:17;;;18941:36;;18929:2;18914:18;42385:31:0;18799:184:1;57602:161:0;;;;;;;;;;-1:-1:-1;57602:161:0;;;;;:::i;:::-;;:::i;:::-;;;8509:14:1;;8502:22;8484:41;;8472:2;8457:18;57602:161:0;8344:187:1;52683:127:0;;;;;;;;;;-1:-1:-1;52683:127:0;;;;;:::i;:::-;;:::i;50170:155::-;;;;;;;;;;-1:-1:-1;50170:155:0;;;;;:::i;:::-;;:::i;29311:43::-;;;;;;;;;;;;29351:3;29311:43;;;;;17290:6:1;17278:19;;;17260:38;;17248:2;17233:18;29311:43:0;17116:188:1;53760:209:0;;;;;;;;;;;;;:::i;55195:121::-;;;;;;;;;;-1:-1:-1;55195:121:0;;;;;:::i;:::-;;:::i;47946:102::-;;;;;;;;;;-1:-1:-1;48028:12:0;;47946:102;;;8690:25:1;;;8678:2;8663:18;47946:102:0;8536:185:1;50824:103:0;;;;;;;;;;-1:-1:-1;50824:103:0;;;;;:::i;:::-;;:::i;49155:147::-;;;;;;;;;;-1:-1:-1;49155:147:0;;;;;:::i;:::-;;:::i;57027:108::-;;;;;;;;;;-1:-1:-1;57109:18:0;;57027:108;;49023:120;;;;;;;;;;-1:-1:-1;49023:120:0;;;;;:::i;:::-;;:::i;28690:66::-;;;;;;;;;;;;;:::i;29598:83::-;;;;;;;;;;;;29639:42;29598:83;;;;;-1:-1:-1;;;;;7143:32:1;;;7125:51;;7113:2;7098:18;29598:83:0;6979:203:1;58076:392:0;;;;;;;;;;-1:-1:-1;58076:392:0;;;;;:::i;:::-;;:::i;47229:221::-;;;;;;;;;;-1:-1:-1;47384:13:0;;47229:221;;;47384:13;;;;;;18590:25:1;;-1:-1:-1;;;47398:13:0;;;;18646:2:1;18631:18;;18624:34;47412:7:0;;;18674:18:1;;;18667:34;;;;47384:13:0;47420:8;;;;18732:2:1;18717:18;;18710:34;47429:12:0;;;;;18775:3:1;18760:19;;18753:35;18577:3;18562:19;47229:221:0;18331:463:1;29063:44:0;;;;;;;;;;;;29105:2;29063:44;;56925:94;;;;;;;;;;-1:-1:-1;28682:1:0;56925:94;;55579:115;;;;;;;;;;-1:-1:-1;55579:115:0;;;;;:::i;:::-;;:::i;29437:49::-;;;;;;;;;;;;29477:9;29437:49;;58503:205;;;;;;;;;;-1:-1:-1;58503:205:0;;;;;:::i;:::-;;:::i;55450:117::-;;;;;;;;;;-1:-1:-1;55450:117:0;;;;;:::i;:::-;;:::i;49320:210::-;;;;;;;;;;-1:-1:-1;49320:210:0;;;;;:::i;:::-;;:::i;42301:27::-;;;;;;;;;;;;;;;;52090:120;;;;;;;;;;-1:-1:-1;52090:120:0;;;;;:::i;:::-;;:::i;48192:107::-;;;;;;;;;;;;;:::i;42193:38::-;;;;;;;;;;;;;;;;53577:26;;;;;;;;;;-1:-1:-1;53577:26:0;;;;;;;;;;;54217:145;;;;;;;;;;-1:-1:-1;54217:145:0;;;;;:::i;:::-;;:::i;30233:46::-;;;;;;;;;;;;;;;;51294:546;;;;;;;;;;-1:-1:-1;51294:546:0;;;;;:::i;:::-;;:::i;52267:110::-;;;;;;;;;;-1:-1:-1;52267:110:0;;;;;:::i;:::-;;:::i;30286:45::-;;;;;;;;;;;;;;;;42468:31;;;;;;;;;;;;;;;;28030:40;;;;;;;;;;-1:-1:-1;28030:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;48323:139;;;;;;;;;;-1:-1:-1;48323:139:0;;;;;:::i;:::-;;:::i;29514:77::-;;;;;;;;;;;;29549:42;29514:77;;47072:149;;;;;;;;;;;;;:::i;:::-;;;;18252:25:1;;;18308:2;18293:18;;18286:34;;;;18225:18;47072:149:0;18078:248:1;57143:121:0;;;;;;;;;;-1:-1:-1;57143:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;57238:18:0;57211:7;57238:18;;;:9;:18;;;;;;;57143:121;9297:140;;;;;;;;;;;;;:::i;53610:28::-;;;;;;;;;;-1:-1:-1;53610:28:0;;;;;;;;;;;51915:107;;;;;;;;;;-1:-1:-1;51915:107:0;;;;;:::i;:::-;;:::i;30177:49::-;;;;;;;;;;;;;;;;54011:138;;;;;;;;;;;;;:::i;50333:233::-;;;;;;;;;;;;;:::i;48869:28::-;;;;;;;;;;-1:-1:-1;48869:28:0;;;;;;;;29188:54;;;;;;;;;;;;29240:2;29188:54;;47665:275;;;;;;;;;;-1:-1:-1;47665:275:0;;;;;:::i;:::-;;:::i;48800:28::-;;;;;;;;;;-1:-1:-1;48800:28:0;;;;;;;;;;;56615:94;;;;;;;;;;-1:-1:-1;56667:7:0;8721:6;-1:-1:-1;;;;;8721:6:0;56615:94;;43639:25;;;;;;;;;;;;;;;;50653:109;;;;;;;;;;-1:-1:-1;50653:109:0;;;;;:::i;:::-;;:::i;48908:97::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30338:28::-;;;;;;;;;;-1:-1:-1;30338:28:0;;;;;:::i;:::-;;:::i;56819:98::-;;;;;;;;;;-1:-1:-1;56902:7:0;;;;;;;;;;;;-1:-1:-1;;;56902:7:0;;;;56819:98;;49542:244;;;;;;;;;;-1:-1:-1;49542:244:0;;;;;:::i;:::-;;:::i;42818:130::-;;;;;;;;;;-1:-1:-1;42818:130:0;;;;;:::i;:::-;;:::i;52919:318::-;;;;;;;;;;-1:-1:-1;52919:318:0;;;;;:::i;:::-;;:::i;28442:43::-;;;;;;;;;;-1:-1:-1;28442:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;58716:342;;;;;;;;;;-1:-1:-1;58716:342:0;;;;;:::i;:::-;;:::i;49798:100::-;;;;;;;;;;-1:-1:-1;49798:100:0;;;;;:::i;:::-;;:::i;57272:167::-;;;;;;;;;;-1:-1:-1;57272:167:0;;;;;:::i;:::-;;:::i;54399:113::-;;;;;;;;;;-1:-1:-1;54399:113:0;;;;;:::i;:::-;;:::i;56038:151::-;;;;;;;;;;;;;:::i;50998:201::-;;;;;;;;;;-1:-1:-1;50998:201:0;;;;;:::i;:::-;;:::i;47458:140::-;;;;;;;;;;-1:-1:-1;47458:140:0;;;;;:::i;:::-;;:::i;54518:203::-;;;;;;;;;;-1:-1:-1;54518:203:0;;;;;:::i;:::-;;:::i;57447:147::-;;;;;;;;;;-1:-1:-1;57447:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;57558:19:0;;;57531:7;57558:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;57447:147;52383:111;;;;;;;;;;-1:-1:-1;52383:111:0;;;;;:::i;:::-;;:::i;54873:285::-;;;;;;;;;;-1:-1:-1;54873:285:0;;;;;:::i;:::-;;:::i;54727:127::-;;;;;;;;;;-1:-1:-1;54727:127:0;;;;;:::i;:::-;;:::i;30459:31::-;;;;;;;;;;;;30488:2;30459:31;;9592:236;;;;;;;;;;-1:-1:-1;9592:236:0;;;;;:::i;:::-;;:::i;48835:27::-;;;;;;;;;;;;;;;;52551:126;;;;;;;;;;-1:-1:-1;52551:126:0;;;;;:::i;:::-;;:::i;49949:165::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;;;;;;;;;50029:26:::1;50050:4;50029:20;:26::i;:::-;50028:27;50020:36;;;::::0;::::1;;50067:29;:19;50091:4:::0;50067:23:::1;:29::i;:::-;;49949:165:::0;:::o;55328:110::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;55404:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;55404:26:0;;::::1;::::0;;;::::1;::::0;;55328:110::o;57602:161::-;57679:4;57696:37;57705:10;57717:7;57726:6;57696:8;:37::i;:::-;-1:-1:-1;57751:4:0;57602:161;;;;;:::o;52683:127::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52765:37:::1;:21;52794:7:::0;52765:28:::1;:37::i;50170:155::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;50247:26:::1;50268:4;50247:20;:26::i;:::-;50239:35;;;::::0;::::1;;50285:32;:19;50312:4:::0;50285:26:::1;:32::i;53760:209::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;53834:14:::1;::::0;::::1;::::0;::::1;;;53833:15;53825:24;;;::::0;::::1;;53910:14;:19:::0;;-1:-1:-1;;53940:21:0;;;;;53760:209::o;55195:121::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;55276:11:::1;:32:::0;;-1:-1:-1;;55276:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55195:121::o;50824:103::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;50894:16:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;50894:25:0;;::::1;::::0;;;::::1;::::0;;50824:103::o;49155:147::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49243:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;49243:21:0::1;::::0;::::1;;;::::0;;49275:19:::1;:9;49243:13:::0;49275::::1;:19::i;:::-;;49155:147:::0;;:::o;49023:120::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49114:13:0;;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;49114:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49023:120::o;28690:66::-;28743:13;28682:1;28743:2;:13;:::i;:::-;28729:27;;:11;:27;:::i;:::-;28690:66;:::o;58076:392::-;58176:4;58193:36;58203:6;58211:9;58222:6;58193:9;:36::i;:::-;-1:-1:-1;;;;;58269:19:0;;58242:24;58269:19;;;:11;:19;;;;;;;;58289:10;58269:31;;;;;;;;58319:26;;;;58311:59;;;;-1:-1:-1;;;58311:59:0;;11328:2:1;58311:59:0;;;11310:21:1;11367:2;11347:18;;;11340:30;-1:-1:-1;;;11386:18:1;;;11379:50;11446:18;;58311:59:0;11126:344:1;58311:59:0;58383:55;58392:6;58400:10;58412:25;58431:6;58412:16;:25;:::i;:::-;58383:8;:55::i;:::-;-1:-1:-1;58456:4:0;;58076:392;-1:-1:-1;;;;58076:392:0:o;55579:115::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;55658:20:0::1;55681:5;55658:20:::0;;;:10:::1;:20;::::0;;;;:28;;-1:-1:-1;;55658:28:0::1;::::0;;55579:115::o;58503:205::-;58611:10;58585:4;58632:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;58632:32:0;;;;;;;;;;58585:4;;58602:76;;58623:7;;58632:45;;58667:10;;58632:45;:::i;55450:117::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;55529:23:0::1;;::::0;;;:10:::1;:23;::::0;;;;:30;;-1:-1:-1;;55529:30:0::1;55555:4;55529:30;::::0;;55450:117::o;49320:210::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;49423:9:::1;49443:80;49454:4;:11;49452:1;:13;49443:80;;;49506:5;49487:7;:16;49495:4;49500:1;49495:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;49487:16:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;49487:16:0;:24;;-1:-1:-1;;49487:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49467:3;::::1;::::0;::::1;:::i;:::-;;;;49443:80;;52090:120:::0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52170:32:::1;52189:12;:4:::0;52196:5:::1;52189:12;:::i;:::-;52170:18;:32::i;:::-;52090:120:::0;:::o;48192:107::-;48279:12;;48263:28;;:15;:28;:::i;:::-;48251:10;48241:21;;;;:9;:21;;;;;:50;48192:107::o;54217:145::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54310:22:::1;:44:::0;;-1:-1:-1;;;;;54310:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;54310:44:0;;::::1;::::0;;;::::1;::::0;;54217:145::o;51294:546::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;51441:14:::1;51456:29;51471:14:::0;51456;:29:::1;:::i;:::-;51441:44;;51504:8;:13;;51514:3;51504:13;51496:59;;;::::0;-1:-1:-1;;;51496:59:0;;13438:2:1;51496:59:0::1;::::0;::::1;13420:21:1::0;13477:2;13457:18;;;13450:30;13516:34;13496:18;;;13489:62;-1:-1:-1;;;13567:18:1;;;13560:31;13608:19;;51496:59:0::1;13236:397:1::0;51496:59:0::1;30488:2;51574:14;::::0;::::1;;::::0;::::1;::::0;:31:::1;;-1:-1:-1::0;30488:2:0::1;51590:15;::::0;::::1;;;51574:31;:52;;;;-1:-1:-1::0;30488:2:0::1;51607:19;::::0;::::1;;;51574:52;51566:89;;;::::0;-1:-1:-1;;;51566:89:0;;14892:2:1;51566:89:0::1;::::0;::::1;14874:21:1::0;14931:2;14911:18;;;14904:30;14970:27;14950:18;;;14943:55;15015:18;;51566:89:0::1;14690:349:1::0;51566:89:0::1;-1:-1:-1::0;51668:13:0::1;:28:::0;;::::1;51808:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;51781:16:0;;::::1;51668:28;51781:16;-1:-1:-1::0;;51707:28:0;;::::1;-1:-1:-1::0;;;51707:28:0::1;-1:-1:-1::0;;51668:28:0;;::::1;::::0;::::1;51707::::0;;;;-1:-1:-1;;51707:28:0;;;;;;;;;;::::1;51781:16:::0;;;;51756:14;;;::::1;51781:16:::0;;;;;;;::::1;51808:24:::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;51294:546:0:o;52267:110::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52347:22:::1;:9;52361:7:::0;52347:13:::1;:22::i;48323:139::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48392:16:0::1;48411:5;48392:16:::0;;;:10:::1;:16;::::0;;;;;;;:24;;-1:-1:-1;;48392:24:0;;::::1;::::0;;;48427:14:::1;:20:::0;;;;;;:27;;;;::::1;48392:24:::0;48427:27:::1;::::0;;48323:139::o;47072:149::-;47113:15;;47174:13;28682:1;47174:2;:13;:::i;:::-;47161:12;;:26;;;;:::i;:::-;47199:13;28682:1;47199:2;:13;:::i;:::-;47189:9;;:23;;;;:::i;:::-;47154:59;;;;47072:149;;:::o;9297:140::-;8879:10;8868:7;8694;8721:6;-1:-1:-1;;;;;8721:6:0;;8656:79;8868:7;-1:-1:-1;;;;;8868:21:0;;8860:66;;;;-1:-1:-1;;;8860:66:0;;13077:2:1;8860:66:0;;;13059:21:1;;;13096:18;;;13089:30;13155:34;13135:18;;;13128:62;13207:18;;8860:66:0;12875:356:1;8860:66:0;9396:1:::1;9380:6:::0;;9359:40:::1;::::0;-1:-1:-1;;;;;9380:6:0;;::::1;::::0;9359:40:::1;::::0;9396:1;;9359:40:::1;9427:1;9410:19:::0;;-1:-1:-1;;;;;;9410:19:0::1;::::0;;9297:140::o;51915:107::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;51991:14:::1;:23:::0;;-1:-1:-1;;51991:23:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;51915:107::o;54011:138::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54075:14:::1;::::0;::::1;::::0;::::1;;;:32:::0;::::1;;;-1:-1:-1::0;54091:16:0::1;::::0;;;::::1;;;54075:32;54067:41;;;::::0;::::1;;54119:16;:22:::0;;-1:-1:-1;;54119:22:0::1;::::0;;54011:138::o;50333:233::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;50410:16:::1;::::0;;50395:14:::1;50437:18:::0;;;;50480:36:::1;::::0;50410:16;;50395:14;29549:42:::1;::::0;50410:16;;50395:14;50480:36;50395:14;50480:36;50410:16;29549:42;50480:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50466:50;;;50535:4;50527:31;;;::::0;-1:-1:-1;;;50527:31:0;;15934:2:1;50527:31:0::1;::::0;::::1;15916:21:1::0;15973:2;15953:18;;;15946:30;-1:-1:-1;;;15992:18:1;;;15985:45;16047:18;;50527:31:0::1;15732:339:1::0;47665:275:0;-1:-1:-1;;;;;47786:25:0;;47751:7;47786:25;;;:9;:25;;;;;;47834:15;47824:25;;47821:71;;-1:-1:-1;47880:1:0;;47665:275;-1:-1:-1;;47665:275:0:o;47821:71::-;47908:24;47917:15;47908:8;:24;:::i;:::-;47901:31;47665:275;-1:-1:-1;;;47665:275:0:o;50653:109::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;50731:16:::1;:23:::0;;-1:-1:-1;;50731:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50653:109::o;48908:97::-;48950:16;48986:11;48979:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48979:18:0;;;;;;;;;;;;;;;;;;;;;;;48908:97;:::o;30338:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30338:28:0;;-1:-1:-1;30338:28:0;:::o;49542:244::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;49642:9:::1;49662:117;49673:4;:11;49671:1;:13;49662:117;;;49725:5;49706:7;:16;49714:4;49719:1;49714:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;49706:16:0::1;-1:-1:-1::0;;;;;49706:16:0::1;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;49745:22;49759:4;49764:1;49759:7;;;;;;;;:::i;:::-;;;;;;;49745:9;:13;;:22;;;;:::i;:::-;-1:-1:-1::0;49686:3:0;::::1;::::0;::::1;:::i;:::-;;;;49662:117;;42818:130:::0;42883:4;42906:34;:19;42935:4;42906:28;:34::i;52919:318::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;53085:13:::1;28682:1;53085:2;:13;:::i;:::-;53069:29;::::0;:15;:29:::1;:::i;:::-;53053:45:::0;-1:-1:-1;53135:13:0::1;28682:1;53135:2;:13;:::i;:::-;53122:26;::::0;:12;:26:::1;:::i;:::-;53159:12;:30:::0;;;;-1:-1:-1;53200:9:0::1;:24:::0;52919:318::o;58716:342::-;58859:10;58803:4;58847:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;58847:32:0;;;;;;;;;;58898:35;;;;58890:60;;;;-1:-1:-1;;;58890:60:0;;16630:2:1;58890:60:0;;;16612:21:1;16669:2;16649:18;;;16642:30;-1:-1:-1;;;16688:18:1;;;16681:42;16740:18;;58890:60:0;16428:336:1;58890:60:0;58963:65;58972:10;58984:7;58993:34;59012:15;58993:16;:34;:::i;58963:65::-;-1:-1:-1;59046:4:0;;58716:342;-1:-1:-1;;;58716:342:0:o;49798:100::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;49867:12:::1;:23:::0;;-1:-1:-1;;49867:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49798:100::o;57272:167::-;57352:4;57369:40;57379:10;57391:9;57402:6;57369:9;:40::i;54399:113::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54476:28:::1;:10;54491:12:::0;54476:14:::1;:28::i;56038:151::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;56106:51:::1;::::0;56093:9:::1;::::0;56106:10:::1;::::0;56130:21:::1;::::0;56093:9;56106:51;56093:9;56106:51;56130:21;56106:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56092:65;;;56176:4;56168:13;;;::::0;::::1;50998:201:::0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;29477:9:::1;51089:32:::0;::::1;;51081:67;;;::::0;-1:-1:-1;;;51081:67:0;;16278:2:1;51081:67:0::1;::::0;::::1;16260:21:1::0;16317:2;16297:18;;;16290:30;16356:25;16336:18;;;16329:53;16399:18;;51081:67:0::1;16076:347:1::0;51081:67:0::1;51163:12;:28:::0;50998:201::o;47458:140::-;47532:4;47555:35;:10;47575:14;47555:19;:35::i;54518:203::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54615:6:::1;54611:103;54627:14;:21;54625:1;:23;54611:103;;;54669:33;54684:14;54699:1;54684:17;;;;;;;;:::i;:::-;;;;;;;54669:10;:14;;:33;;;;:::i;:::-;-1:-1:-1::0;54650:3:0;::::1;::::0;::::1;:::i;:::-;;;;54611:103;;52383:111:::0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52461:25:::1;:9;52478:7:::0;52461:16:::1;:25::i;54873:285::-:0;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;55011:30:::1;::::0;-1:-1:-1;;;55011:30:0;;55035:4:::1;55011:30;::::0;::::1;7125:51:1::0;54968:10:0;;54946:12:::1;::::0;-1:-1:-1;;;;;55011:15:0;::::1;::::0;::::1;::::0;7098:18:1;;55011:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54990:51;;55071:1;55060:10;:12;55052:49;;;::::0;-1:-1:-1;;;55052:49:0;;14539:2:1;55052:49:0::1;::::0;::::1;14521:21:1::0;14578:2;14558:18;;;14551:30;14617:26;14597:18;;;14590:54;14661:18;;55052:49:0::1;14337:348:1::0;55052:49:0::1;55112:38;::::0;-1:-1:-1;;;55112:38:0;;55127:10:::1;55112:38;::::0;::::1;7361:51:1::0;7428:18;;;7421:34;;;-1:-1:-1;;;;;55112:14:0;::::1;::::0;::::1;::::0;7334:18:1;;55112:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54935:223;;54873:285:::0;:::o;54727:127::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;54812:34:::1;:10;54830:15:::0;54812:17:::1;:34::i;9592:236::-:0;8879:10;8868:7;8694;8721:6;-1:-1:-1;;;;;8721:6:0;;8656:79;8868:7;-1:-1:-1;;;;;8868:21:0;;8860:66;;;;-1:-1:-1;;;8860:66:0;;13077:2:1;8860:66:0;;;13059:21:1;;;13096:18;;;13089:30;13155:34;13135:18;;;13128:62;13207:18;;8860:66:0;12875:356:1;8860:66:0;-1:-1:-1;;;;;9673:22:0;::::1;9665:73;;;::::0;-1:-1:-1;;;9665:73:0;;10230:2:1;9665:73:0::1;::::0;::::1;10212:21:1::0;10269:2;10249:18;;;10242:30;10308:34;10288:18;;;10281:62;-1:-1:-1;;;10359:18:1;;;10352:36;10405:19;;9665:73:0::1;10028:402:1::0;9665:73:0::1;9775:6;::::0;;9754:38:::1;::::0;-1:-1:-1;;;;;9754:38:0;;::::1;::::0;9775:6;::::1;::::0;9754:38:::1;::::0;::::1;9803:6;:17:::0;;-1:-1:-1;;;;;;9803:17:0::1;-1:-1:-1::0;;;;;9803:17:0;;;::::1;::::0;;;::::1;::::0;;9592:236::o;52551:126::-;31014:19;31022:10;31014:7;:19::i;:::-;31006:50;;;;-1:-1:-1;;;31006:50:0;;;;;;;:::i;:::-;52635:34:::1;:21;52661:7:::0;24343:152;24413:4;24437:50;24442:3;-1:-1:-1;;;;;24462:23:0;;24437:4;:50::i;31294:139::-;31347:4;8721:6;;-1:-1:-1;;;;;31370:13:0;;;8721:6;;31370:13;;:31;;-1:-1:-1;;;;;;31385:16:0;;29549:42;31385:16;31370:31;:55;;;-1:-1:-1;;;;;;31403:22:0;;29639:42;31403:22;31363:62;31294:139;-1:-1:-1;;31294:139:0:o;57769:299::-;-1:-1:-1;;;;;57862:19:0;;57854:49;;;;-1:-1:-1;;;57854:49:0;;10637:2:1;57854:49:0;;;10619:21:1;10676:2;10656:18;;;10649:30;-1:-1:-1;;;10695:18:1;;;10688:47;10752:18;;57854:49:0;10435:341:1;57854:49:0;-1:-1:-1;;;;;57922:21:0;;57914:49;;;;-1:-1:-1;;;57914:49:0;;12733:2:1;57914:49:0;;;12715:21:1;12772:2;12752:18;;;12745:30;-1:-1:-1;;;12791:18:1;;;12784:45;12846:18;;57914:49:0;12531:339:1;57914:49:0;-1:-1:-1;;;;;57976:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;58028:32;;8690:25:1;;;58028:32:0;;8663:18:1;58028:32:0;;;;;;;57769:299;;;:::o;24671:158::-;24744:4;24768:53;24776:3;-1:-1:-1;;;;;24796:23:0;;24768:7;:53::i;34448:2179::-;-1:-1:-1;;;;;34544:20:0;;34536:51;;;;-1:-1:-1;;;34536:51:0;;9530:2:1;34536:51:0;;;9512:21:1;9569:2;9549:18;;;9542:30;-1:-1:-1;;;9588:18:1;;;9581:48;9646:18;;34536:51:0;9328:342:1;34536:51:0;-1:-1:-1;;;;;34606:23:0;;34598:52;;;;-1:-1:-1;;;34598:52:0;;10983:2:1;34598:52:0;;;10965:21:1;11022:2;11002:18;;;10995:30;-1:-1:-1;;;11041:18:1;;;11034:46;11097:18;;34598:52:0;10781:340:1;34598:52:0;34753:15;34772:26;:9;34791:6;34772:18;:26::i;:::-;:59;;;-1:-1:-1;34802:29:0;:9;34821;34802:18;:29::i;:::-;34753:79;-1:-1:-1;34931:23:0;-1:-1:-1;;;;;34956:21:0;;34972:4;34956:21;;:49;;-1:-1:-1;;;;;;34981:24:0;;35000:4;34981:24;34956:49;35138:14;;35203:19;;34931:75;;-1:-1:-1;;;;;;35138:14:0;;;;35108:21;;35193:29;;;-1:-1:-1;;;35203:19:0;;;;35193:29;:59;;;;;35239:13;-1:-1:-1;;;;;35226:26:0;:9;-1:-1:-1;;;;;35226:26:0;;35193:59;35192:136;;;-1:-1:-1;35281:19:0;;-1:-1:-1;;;;;35268:32:0;;;-1:-1:-1;;;35281:19:0;;;;35268:32;:59;;;;;35314:13;-1:-1:-1;;;;;35304:23:0;:6;-1:-1:-1;;;;;35304:23:0;;35268:59;35450:19;;35164:165;;-1:-1:-1;35431:10:0;;-1:-1:-1;;;;;35442:27:0;;;-1:-1:-1;;;35450:19:0;;;;35442:27;;:53;;;35482:13;-1:-1:-1;;;;;35472:23:0;:6;-1:-1:-1;;;;;35472:23:0;;35442:53;35529:19;;35431:64;;-1:-1:-1;35506:11:0;;-1:-1:-1;;;;;35518:30:0;;;-1:-1:-1;;;35529:19:0;;;;35518:30;;:59;;;35564:13;-1:-1:-1;;;;;35551:26:0;:9;-1:-1:-1;;;;;35551:26:0;;35518:59;35506:71;;35618:18;:41;;;;35640:19;35618:41;:55;;;;35663:10;35618:55;35615:1005;;;35689:43;35706:6;35714:9;35725:6;35689:16;:43::i;:::-;35615:1005;;;35848:14;;;;;;;35843:518;;8694:7;8721:6;-1:-1:-1;;;;;35887:17:0;;;8721:6;;35887:17;;;;:41;;-1:-1:-1;8694:7:0;8721:6;-1:-1:-1;;;;;35908:20:0;;;8721:6;;35908:20;;35887:41;35883:463;;;-1:-1:-1;;;;;35958:15:0;;;;;;:7;:15;;;;;;;;35957:16;:39;;;;-1:-1:-1;;;;;;35978:18:0;;;;;;:7;:18;;;;;;;;35977:19;35957:39;35953:374;;;36029:7;;;;;;;36025:279;;;36089:9;-1:-1:-1;;;;;36073:28:0;36082:6;-1:-1:-1;;;;;36073:28:0;;36099:1;36073:28;;;;8690:25:1;;8678:2;8663:18;;8536:185;36073:28:0;;;;;;;;36131:7;;;;;;34448:2179;;;:::o;36025:279::-;36235:14;;;;;;;36227:49;;;;-1:-1:-1;;;36227:49:0;;13840:2:1;36227:49:0;;;13822:21:1;13879:2;13859:18;;;13852:30;13918:25;13898:18;;;13891:53;13961:18;;36227:49:0;13638:347:1;36227:49:0;36378:16;;;;;;;36375:234;;;36414:56;36433:6;36440:9;36450:6;36457:5;36463:6;36414:18;:56::i;36375:234::-;36523:52;36538:6;36545:9;36555:6;36562:5;36568:6;36523:14;:52::i;:::-;34525:2102;;;;;;34448:2179;;;:::o;44044:1771::-;43792:27;:34;;-1:-1:-1;;43792:34:0;43822:4;43792:34;;;;;;44162:4:::1;43792:27:::0;44144:24;;;::::1;::::0;;;;;;;;44209:13:::1;::::0;44144:24;;43792:27;44195::::1;::::0;-1:-1:-1;;;44209:13:0;::::1;43792:34:::0;44209:13;;::::1;::::0;44195;;::::1;;:27;:::i;:::-;44179:43;;;;44233:19;44253:9;;44233:29;;44290:8;44276:11;:22;44273:127;;;44318:12;::::0;::::1;;44315:74;;;-1:-1:-1::0;44365:8:0;44315:74:::1;44526:11;44510:15;:27;:40;;;-1:-1:-1::0;44539:11:0::1;::::0;::::1;::::0;44510:40:::1;44507:77;;;44566:7;;;;;44507:77;44704:13;::::0;44665:25:::1;::::0;44691:36:::1;::::0;::::1;::::0;44692:25:::1;::::0;44704:13;;::::1;;;44692:11:::0;:25:::1;:::i;:::-;44691:36;;;;:::i;:::-;44665:62:::0;-1:-1:-1;44738:25:0::1;44765:29;44665:62:::0;44765:11;:29:::1;:::i;:::-;44738:56:::0;-1:-1:-1;44855:16:0::1;44872:19;44890:1;44872:17:::0;:19:::1;:::i;:::-;44855:36:::0;-1:-1:-1;44902:19:0::1;44922:26;44855:36:::0;44922:17;:26:::1;:::i;:::-;44902:46:::0;-1:-1:-1;45031:17:0::1;45049:29;45061:17:::0;44902:46;45049:29:::1;:::i;:::-;45031:47:::0;-1:-1:-1;45193:21:0::1;45225:27;45031:47:::0;45225:16:::1;:27::i;:::-;45263:14;45279:41;45303:17:::0;45279:21:::1;:41;:::i;:::-;45263:58:::0;-1:-1:-1;45421:14:0::1;45459:9:::0;45439:18:::1;45446:11:::0;45263:58;45439:18:::1;:::i;:::-;45438:30;;;;:::i;:::-;45421:47;;45479:31;45493:8;45503:6;45479:13;:31::i;:::-;45633:20;45655:41;45679:17:::0;45655:21:::1;:41;:::i;:::-;45633:64;;45775:32;45794:12;45775:18;:32::i;:::-;44109:1706;;;;;;;;;;;;43837:1;-1:-1:-1::0;43849:27:0;:35;;-1:-1:-1;;43849:35:0;;;44044:1771::o;24915:167::-;-1:-1:-1;;;;;25049:23:0;;24995:4;21724:19;;;:12;;;:19;;;;;;:24;;25019:55;21627:129;19398:414;19461:4;21724:19;;;:12;;;:19;;;;;;19478:327;;-1:-1:-1;19521:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;19704:18;;19682:19;;;:12;;;:19;;;;;;:40;;;;19737:11;;19478:327;-1:-1:-1;19788:5:0;19781:12;;19988:1553;20054:4;20193:19;;;:12;;;:19;;;;;;20229:15;;20225:1309;;20591:21;20615:14;20628:1;20615:10;:14;:::i;:::-;20664:18;;20591:38;;-1:-1:-1;20644:17:0;;20664:22;;20685:1;;20664:22;:::i;:::-;20644:42;;20931:17;20951:3;:11;;20963:9;20951:22;;;;;;;;:::i;:::-;;;;;;;;;20931:42;;21097:9;21068:3;:11;;21080:13;21068:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;21174:23;;;:12;;;:23;;;;;;:36;;;21335:17;;21174:3;;21335:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21430:3;:12;;:19;21443:5;21430:19;;;;;;;;;;;21423:26;;;21473:4;21466:11;;;;;;;;20225:1309;21517:5;21510:12;;;;;40893:440;-1:-1:-1;;;;;41012:17:0;;40988:21;41012:17;;;:9;:17;;;;;;41048:23;;;;41040:60;;;;-1:-1:-1;;;41040:60:0;;9877:2:1;41040:60:0;;;9859:21:1;9916:2;9896:18;;;9889:30;-1:-1:-1;;;9935:18:1;;;9928:54;9999:18;;41040:60:0;9675:348:1;41040:60:0;41156:27;41169:6;41176;41156:12;:27::i;:::-;41236:28;41246:9;41257:6;41236:9;:28::i;:::-;41306:9;-1:-1:-1;;;;;41290:33:0;41299:6;-1:-1:-1;;;;;41290:33:0;;41316:6;41290:33;;;;8690:25:1;;8678:2;8663:18;;8536:185;41290:33:0;;;;;;;;40977:356;40893:440;;;:::o;36701:826::-;36895:6;36891:564;;37084:30;:10;37104:9;37084:19;:30::i;:::-;37076:68;;;;-1:-1:-1;;;37076:68:0;;12378:2:1;37076:68:0;;;12360:21:1;12417:2;12397:18;;;12390:30;12456:28;12436:18;;;12429:56;12502:18;;37076:68:0;12176:350:1;37076:68:0;29240:2;28743:13;28682:1;28743:2;:13;:::i;:::-;28729:27;;:11;:27;:::i;:::-;37364:42;;;;:::i;:::-;-1:-1:-1;;;;;37335:20:0;;;;;;:9;:20;;;;;;:27;;37356:6;;37335:27;:::i;:::-;:71;;37326:113;;;;-1:-1:-1;;;37326:113:0;;11677:2:1;37326:113:0;;;11659:21:1;11716:2;11696:18;;;11689:30;11755;11735:18;;;11728:58;11803:18;;37326:113:0;11475:352:1;37326:113:0;37465:52;37480:6;37487:9;37497:6;37504:5;37510:6;37465:14;:52::i;:::-;36701:826;;;;;:::o;37630:3203::-;-1:-1:-1;;;;;37773:20:0;;;37746:24;37773:20;;;:9;:20;;;;;;;37828:17;;;;;;;;37864:23;;;;37856:60;;;;-1:-1:-1;;;37856:60:0;;9877:2:1;37856:60:0;;;9859:21:1;9916:2;9896:18;;;9889:30;-1:-1:-1;;;9935:18:1;;;9928:54;9999:18;;37856:60:0;9675:348:1;37856:60:0;37953:1;37943:9;;:11;;;;:::i;:::-;37931:9;:23;37975:9;37995:1721;;;;38023:11;;;;38020:79;;;-1:-1:-1;;;;;38064:18:0;;;;;;:10;:18;;;;;;;;38063:19;38055:28;;;;;;38117:38;:21;38148:6;38117:30;:38::i;:::-;38113:414;;-1:-1:-1;;;;;38300:17:0;;;;;;:9;:17;;;;;;38319:15;-1:-1:-1;38300:34:0;;:52;;-1:-1:-1;38336:16:0;;;;;;;38300:52;38292:82;;;;-1:-1:-1;;;38292:82:0;;16971:2:1;38292:82:0;;;16953:21:1;17010:2;16990:18;;;16983:30;-1:-1:-1;;;17029:18:1;;;17022:48;17087:18;;38292:82:0;16769:342:1;38292:82:0;38499:12;;38483:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;38465:17:0;;;;;;:9;:17;;;;;:46;38113:414;38662:9;;38655:6;:16;38652:80;;;38692:11;:24;;;;;;;-1:-1:-1;38692:24:0;;;;;;;;-1:-1:-1;;;;;;38692:24:0;-1:-1:-1;;;;;38692:24:0;;;;;38652:80;38762:9;;38754:6;:17;;38746:44;;;;-1:-1:-1;;;38746:44:0;;12034:2:1;38746:44:0;;;12016:21:1;12073:2;12053:18;;;12046:30;-1:-1:-1;;;12092:18:1;;;12085:45;12147:18;;38746:44:0;11832:339:1;38746:44:0;-1:-1:-1;38809:8:0;;;;;;;37995:1721;;;38840:5;38837:879;;;38985:12;;38960:23;38977:6;38960:16;:23;:::i;:::-;:37;;38952:65;;;;-1:-1:-1;;;38952:65:0;;;;;;;:::i;:::-;39048:8;;39040:6;:16;;39032:45;;;;-1:-1:-1;;;39032:45:0;;;;;;;:::i;:::-;-1:-1:-1;39096:7:0;;;;38837:879;;;39272:12;;39247:23;39264:6;39247:16;:23;:::i;:::-;:37;;39239:65;;;;-1:-1:-1;;;39239:65:0;;;;;;;:::i;:::-;39536:38;:21;39567:6;39536:30;:38::i;:::-;39532:139;;-1:-1:-1;;;;;39601:17:0;;;;;;:9;:17;;;;;;39620:15;-1:-1:-1;39601:34:0;;:52;;-1:-1:-1;39637:16:0;;;;;;;39601:52;39593:78;;;;-1:-1:-1;;;39593:78:0;;15591:2:1;39593:78:0;;;15573:21:1;15630:2;15610:18;;;15603:30;-1:-1:-1;;;15649:18:1;;;15642:44;15703:18;;39593:78:0;15389:338:1;39593:78:0;-1:-1:-1;39690:12:0;;;;;;;38837:879;40051:19;;-1:-1:-1;;;;;40043:27:0;;;-1:-1:-1;;;40051:19:0;;;;40043:27;;;;40042:50;;-1:-1:-1;40075:16:0;;;;40074:17;40042:50;:82;;;;-1:-1:-1;40096:27:0;;;;40095:28;40042:82;40039:126;;;40139:26;40158:6;40139:18;:26::i;:::-;40336:13;;40273:21;;40295:55;;40309:6;;40317:3;;40322:27;;40336:13;;;;;;;-1:-1:-1;;;40322:13:0;;;:27;:::i;:::-;40295:13;:55::i;:::-;40273:77;-1:-1:-1;40414:19:0;40434:22;40273:77;40434:6;:22;:::i;:::-;40414:42;;40514:27;40527:6;40534;40514:12;:27::i;:::-;40636:4;40618:24;;;;:9;:24;;;;;:41;;40646:13;;40618:24;:41;;40646:13;;40618:41;:::i;:::-;;;;-1:-1:-1;40714:33:0;;-1:-1:-1;40724:9:0;40735:11;40714:9;:33::i;:::-;40789:9;-1:-1:-1;;;;;40773:38:0;40782:6;-1:-1:-1;;;;;40773:38:0;;40799:11;40773:38;;;;8690:25:1;;8678:2;8663:18;;8536:185;40773:38:0;;;;;;;;37735:3098;;;;;37630:3203;;;;;:::o;45865:455::-;45958:14;;45926:56;;45943:4;;-1:-1:-1;;;;;45958:14:0;45975:6;45926:8;:56::i;:::-;46017:16;;;46031:1;46017:16;;;;;;;;45993:21;;46017:16;;;;;;;;;;-1:-1:-1;46017:16:0;45993:40;;46062:4;46044;46049:1;46044:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46044:23:0;;;:7;;;;;;;;;;:23;;;;46088:14;;:21;;;-1:-1:-1;;;46088:21:0;;;;:14;;;;;:19;;:21;;;;;46044:7;;46088:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46078:4;46083:1;46078:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46078:31:0;;;:7;;;;;;;;;:31;46122:14;;:190;;-1:-1:-1;;;46122:190:0;;:14;;;:65;;:190;;46202:6;;46122:14;;46239:4;;46266;;46286:15;;46122:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45915:405;45865:455;:::o;46332:397::-;46426:9;46414:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;46478:14:0;;46446:61;;46463:4;;-1:-1:-1;;;;;46478:14:0;46495:11;46446:8;:61::i;:::-;46518:14;;:203;;-1:-1:-1;;;46518:203:0;;46589:4;46518:203;;;7807:34:1;;;7857:18;;;7850:34;;;46518:14:0;7900:18:1;;;7893:34;;;7943:18;;;7936:34;7986:19;;;7979:44;46695:15:0;8039:19:1;;;8032:35;-1:-1:-1;;;;;46518:14:0;;;;:30;;46556:9;;7741:19:1;;46518:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43018:213::-;43155:14;;43117:22;;43173:3;;43143:26;;43155:14;;43143:9;:26;:::i;:::-;43142:34;;;;:::i;:::-;43117:59;;43207:14;43189:16;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;43018:213:0:o;41844:202::-;-1:-1:-1;;;;;41979:15:0;;41961:17;41979:15;;;:9;:15;;;;;;:22;;41995:6;;41979:22;:::i;:::-;-1:-1:-1;;;;;42013:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;;41844:202:0:o;41552:200::-;-1:-1:-1;;;;;41684:15:0;;41666:17;41684:15;;;:9;:15;;;;;;:22;;41700:6;;41684:22;:::i;41388:156::-;41478:7;41531:5;41517:10;41506:21;;41513:3;41506:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;41505:31;;;;:::i;:::-;41498:38;41388:156;-1:-1:-1;;;;41388:156:0:o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:919::-;207:5;260:3;253:4;245:6;241:17;237:27;227:55;;278:1;275;268:12;227:55;314:6;301:20;340:4;363:18;400:2;396;393:10;390:36;;;406:18;;:::i;:::-;452:2;449:1;445:10;484:2;478:9;547:2;543:7;538:2;534;530:11;526:25;518:6;514:38;602:6;590:10;587:22;582:2;570:10;567:18;564:46;561:72;;;613:18;;:::i;:::-;649:2;642:22;699:18;;;733:15;;;;-1:-1:-1;768:15:1;;;802;;;798:24;;795:33;-1:-1:-1;792:53:1;;;841:1;838;831:12;792:53;863:1;854:10;;873:169;887:2;884:1;881:9;873:169;;;944:23;963:3;944:23;:::i;:::-;932:36;;988:12;;;;905:1;898:9;;;;;1020:12;;873:169;;;-1:-1:-1;1060:6:1;153:919;-1:-1:-1;;;;;;;153:919:1:o;1077:156::-;1143:20;;1203:4;1192:16;;1182:27;;1172:55;;1223:1;1220;1213:12;1238:247;1297:6;1350:2;1338:9;1329:7;1325:23;1321:32;1318:52;;;1366:1;1363;1356:12;1318:52;1405:9;1392:23;1424:31;1449:5;1424:31;:::i;1490:251::-;1560:6;1613:2;1601:9;1592:7;1588:23;1584:32;1581:52;;;1629:1;1626;1619:12;1581:52;1661:9;1655:16;1680:31;1705:5;1680:31;:::i;1746:388::-;1814:6;1822;1875:2;1863:9;1854:7;1850:23;1846:32;1843:52;;;1891:1;1888;1881:12;1843:52;1930:9;1917:23;1949:31;1974:5;1949:31;:::i;:::-;1999:5;-1:-1:-1;2056:2:1;2041:18;;2028:32;2069:33;2028:32;2069:33;:::i;:::-;2121:7;2111:17;;;1746:388;;;;;:::o;2139:456::-;2216:6;2224;2232;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2340:9;2327:23;2359:31;2384:5;2359:31;:::i;:::-;2409:5;-1:-1:-1;2466:2:1;2451:18;;2438:32;2479:33;2438:32;2479:33;:::i;:::-;2139:456;;2531:7;;-1:-1:-1;;;2585:2:1;2570:18;;;;2557:32;;2139:456::o;2600:382::-;2665:6;2673;2726:2;2714:9;2705:7;2701:23;2697:32;2694:52;;;2742:1;2739;2732:12;2694:52;2781:9;2768:23;2800:31;2825:5;2800:31;:::i;:::-;2850:5;-1:-1:-1;2907:2:1;2892:18;;2879:32;2920:30;2879:32;2920:30;:::i;2987:315::-;3055:6;3063;3116:2;3104:9;3095:7;3091:23;3087:32;3084:52;;;3132:1;3129;3122:12;3084:52;3171:9;3158:23;3190:31;3215:5;3190:31;:::i;:::-;3240:5;3292:2;3277:18;;;;3264:32;;-1:-1:-1;;;2987:315:1:o;3307:348::-;3391:6;3444:2;3432:9;3423:7;3419:23;3415:32;3412:52;;;3460:1;3457;3450:12;3412:52;3500:9;3487:23;3533:18;3525:6;3522:30;3519:50;;;3565:1;3562;3555:12;3519:50;3588:61;3641:7;3632:6;3621:9;3617:22;3588:61;:::i;3660:477::-;3750:6;3758;3811:2;3799:9;3790:7;3786:23;3782:32;3779:52;;;3827:1;3824;3817:12;3779:52;3867:9;3854:23;3900:18;3892:6;3889:30;3886:50;;;3932:1;3929;3922:12;3886:50;3955:61;4008:7;3999:6;3988:9;3984:22;3955:61;:::i;:::-;3945:71;;;4066:2;4055:9;4051:18;4038:32;4079:28;4101:5;4079:28;:::i;4142:241::-;4198:6;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:28;4347:5;4325:28;:::i;4388:245::-;4455:6;4508:2;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;4556:9;4550:16;4575:28;4597:5;4575:28;:::i;4638:180::-;4697:6;4750:2;4738:9;4729:7;4725:23;4721:32;4718:52;;;4766:1;4763;4756:12;4718:52;-1:-1:-1;4789:23:1;;4638:180;-1:-1:-1;4638:180:1:o;4823:184::-;4893:6;4946:2;4934:9;4925:7;4921:23;4917:32;4914:52;;;4962:1;4959;4952:12;4914:52;-1:-1:-1;4985:16:1;;4823:184;-1:-1:-1;4823:184:1:o;5012:248::-;5080:6;5088;5141:2;5129:9;5120:7;5116:23;5112:32;5109:52;;;5157:1;5154;5147:12;5109:52;-1:-1:-1;;5180:23:1;;;5250:2;5235:18;;;5222:32;;-1:-1:-1;5012:248:1:o;5265:306::-;5353:6;5361;5369;5422:2;5410:9;5401:7;5397:23;5393:32;5390:52;;;5438:1;5435;5428:12;5390:52;5467:9;5461:16;5451:26;;5517:2;5506:9;5502:18;5496:25;5486:35;;5561:2;5550:9;5546:18;5540:25;5530:35;;5265:306;;;;;:::o;5576:182::-;5633:6;5686:2;5674:9;5665:7;5661:23;5657:32;5654:52;;;5702:1;5699;5692:12;5654:52;5725:27;5742:9;5725:27;:::i;5763:535::-;5855:6;5863;5871;5879;5887;5895;5948:3;5936:9;5927:7;5923:23;5919:33;5916:53;;;5965:1;5962;5955:12;5916:53;5988:27;6005:9;5988:27;:::i;:::-;5978:37;;6034:36;6066:2;6055:9;6051:18;6034:36;:::i;:::-;6024:46;;6089:36;6121:2;6110:9;6106:18;6089:36;:::i;:::-;6079:46;;6144:36;6176:2;6165:9;6161:18;6144:36;:::i;:::-;6134:46;;6199:37;6231:3;6220:9;6216:19;6199:37;:::i;:::-;6189:47;;6255:37;6287:3;6276:9;6272:19;6255:37;:::i;:::-;6245:47;;5763:535;;;;;;;;:::o;6303:461::-;6356:3;6394:5;6388:12;6421:6;6416:3;6409:19;6447:4;6476:2;6471:3;6467:12;6460:19;;6513:2;6506:5;6502:14;6534:1;6544:195;6558:6;6555:1;6552:13;6544:195;;;6623:13;;-1:-1:-1;;;;;6619:39:1;6607:52;;6679:12;;;;6714:15;;;;6655:1;6573:9;6544:195;;;-1:-1:-1;6755:3:1;;6303:461;-1:-1:-1;;;;;6303:461:1:o;8078:261::-;8257:2;8246:9;8239:21;8220:4;8277:56;8329:2;8318:9;8314:18;8306:6;8277:56;:::i;8726:597::-;8838:4;8867:2;8896;8885:9;8878:21;8928:6;8922:13;8971:6;8966:2;8955:9;8951:18;8944:34;8996:1;9006:140;9020:6;9017:1;9014:13;9006:140;;;9115:14;;;9111:23;;9105:30;9081:17;;;9100:2;9077:26;9070:66;9035:10;;9006:140;;;9164:6;9161:1;9158:13;9155:91;;;9234:1;9229:2;9220:6;9209:9;9205:22;9201:31;9194:42;9155:91;-1:-1:-1;9307:2:1;9286:15;-1:-1:-1;;9282:29:1;9267:45;;;;9314:2;9263:54;;8726:597;-1:-1:-1;;;8726:597:1:o;13990:342::-;14192:2;14174:21;;;14231:2;14211:18;;;14204:30;-1:-1:-1;;;14265:2:1;14250:18;;14243:48;14323:2;14308:18;;13990:342::o;15044:340::-;15246:2;15228:21;;;15285:2;15265:18;;;15258:30;-1:-1:-1;;;15319:2:1;15304:18;;15297:46;15375:2;15360:18;;15044:340::o;17491:582::-;17790:6;17779:9;17772:25;17833:6;17828:2;17817:9;17813:18;17806:34;17876:3;17871:2;17860:9;17856:18;17849:31;17753:4;17897:57;17949:3;17938:9;17934:19;17926:6;17897:57;:::i;:::-;-1:-1:-1;;;;;17990:32:1;;;;17985:2;17970:18;;17963:60;-1:-1:-1;18054:3:1;18039:19;18032:35;17889:65;17491:582;-1:-1:-1;;;17491:582:1:o;18988:128::-;19028:3;19059:1;19055:6;19052:1;19049:13;19046:39;;;19065:18;;:::i;:::-;-1:-1:-1;19101:9:1;;18988:128::o;19121:204::-;19159:3;19195:4;19192:1;19188:12;19227:4;19224:1;19220:12;19262:3;19256:4;19252:14;19247:3;19244:23;19241:49;;;19270:18;;:::i;:::-;19306:13;;19121:204;-1:-1:-1;;;19121:204:1:o;19330:217::-;19370:1;19396;19386:132;;19440:10;19435:3;19431:20;19428:1;19421:31;19475:4;19472:1;19465:15;19503:4;19500:1;19493:15;19386:132;-1:-1:-1;19532:9:1;;19330:217::o;19552:422::-;19641:1;19684:5;19641:1;19698:270;19719:7;19709:8;19706:21;19698:270;;;19778:4;19774:1;19770:6;19766:17;19760:4;19757:27;19754:53;;;19787:18;;:::i;:::-;19837:7;19827:8;19823:22;19820:55;;;19857:16;;;;19820:55;19936:22;;;;19896:15;;;;19698:270;;;19702:3;19552:422;;;;;:::o;19979:140::-;20037:5;20066:47;20107:4;20097:8;20093:19;20087:4;20173:5;20203:8;20193:80;;-1:-1:-1;20244:1:1;20258:5;;20193:80;20292:4;20282:76;;-1:-1:-1;20329:1:1;20343:5;;20282:76;20374:4;20392:1;20387:59;;;;20460:1;20455:130;;;;20367:218;;20387:59;20417:1;20408:10;;20431:5;;;20455:130;20492:3;20482:8;20479:17;20476:43;;;20499:18;;:::i;:::-;-1:-1:-1;;20555:1:1;20541:16;;20570:5;;20367:218;;20669:2;20659:8;20656:16;20650:3;20644:4;20641:13;20637:36;20631:2;20621:8;20618:16;20613:2;20607:4;20604:12;20600:35;20597:77;20594:159;;;-1:-1:-1;20706:19:1;;;20738:5;;20594:159;20785:34;20810:8;20804:4;20785:34;:::i;:::-;20855:6;20851:1;20847:6;20843:19;20834:7;20831:32;20828:58;;;20866:18;;:::i;:::-;20904:20;;20124:806;-1:-1:-1;;;20124:806:1:o;20935:168::-;20975:7;21041:1;21037;21033:6;21029:14;21026:1;21023:21;21018:1;21011:9;21004:17;21000:45;20997:71;;;21048:18;;:::i;:::-;-1:-1:-1;21088:9:1;;20935:168::o;21108:125::-;21148:4;21176:1;21173;21170:8;21167:34;;;21181:18;;:::i;:::-;-1:-1:-1;21218:9:1;;21108:125::o;21238:135::-;21277:3;-1:-1:-1;;21298:17:1;;21295:43;;;21318:18;;:::i;:::-;-1:-1:-1;21365:1:1;21354:13;;21238:135::o;21378:127::-;21439:10;21434:3;21430:20;21427:1;21420:31;21470:4;21467:1;21460:15;21494:4;21491:1;21484:15;21510:127;21571:10;21566:3;21562:20;21559:1;21552:31;21602:4;21599:1;21592:15;21626:4;21623:1;21616:15;21642:127;21703:10;21698:3;21694:20;21691:1;21684:31;21734:4;21731:1;21724:15;21758:4;21755:1;21748:15;21774:127;21835:10;21830:3;21826:20;21823:1;21816:31;21866:4;21863:1;21856:15;21890:4;21887:1;21880:15;21906:131;-1:-1:-1;;;;;21981:31:1;;21971:42;;21961:70;;22027:1;22024;22017:12;22042:118;22128:5;22121:13;22114:21;22107:5;22104:32;22094:60;;22150:1;22147;22140:12

Swarm Source

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