ETH Price: $2,312.15 (-0.16%)

Token

MewTwo Infused Shiba (MEWTWO)
 

Overview

Max Total Supply

1,000,000,000,000,000 MEWTWO

Holders

189

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,918,807,846,241.585659996917938531 MEWTWO

Value
$0.00
0xf0b759e9C6e6Bd319B507FA8aa65092E92fe34F5
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:
MEWTWO

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-21
*/

pragma solidity ^0.8.0;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

/**
 * @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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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 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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

    /**
     * @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 == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        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 virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IUniswapV2Factory {
    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 IUniswapV2Pair {
    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;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    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 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 IUniswapV2Router02 is IUniswapV2Router01 {
    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;
}

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

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**18; 
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "MewTwo Infused Shiba";
    string private _symbol = "MEWTWO";
    uint8 private _decimals = 18;
    
    uint256 public _burnFee = 1;
    uint256 private _previousBurnFee = _burnFee;
    
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 10;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    address public marketing = 0x1922414f4aFcE1b59ddcB462B24D96ba0F88e5bb; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxBalAmount = _tTotal.mul(5).div(1000);
    uint256 public numTokensSellToAddToLiquidity = 1 * 10**18;
    
    bool public _taxEnabled = true;

    event SetTaxEnable(bool enabled);
    event SetLiquidityFeePercent(uint256 liquidityFee);
    event SetTaxFeePercent(uint256 taxFee);
    event SetMarketingPercent(uint256 marketingFee);
    event SetDevPercent(uint256 devFee);
    event SetCommunityPercent(uint256 charityFee);
    event SetMaxBalPercent(uint256 maxBalPercent);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event TaxEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[msg.sender] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcluded[uniswapV2Pair] = true; // excluded from rewards
        
        emit Transfer(address(0), msg.sender, _tTotal);

    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(sender, tLiquidity);
        _burn(sender, tBurn);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
        emit SetTaxFeePercent(taxFee);
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
        emit SetLiquidityFeePercent(liquidityFee);
    }

    function setMaxBalPercent(uint256 maxBalPercent) external onlyOwner() {
        _maxBalAmount = _tTotal.mul(maxBalPercent).div(
            10**2
        );
        emit SetMaxBalPercent(maxBalPercent);
        
    }

    function setSwapAmount(uint256 amount) external onlyOwner() {
        numTokensSellToAddToLiquidity = amount;
    }

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

    function setTaxEnable (bool _enable) public onlyOwner {
        _taxEnabled = _enable;
        emit SetTaxEnable(_enable);
    }
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate(), tBurn);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tBurn);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tBurn);
        return (tTransferAmount, tFee, tLiquidity, tBurn);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
        emit Transfer(sender, address(this), tLiquidity);
        
    }

    function _burn(address sender, uint256 tBurn) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tBurn.mul(currentRate);
        _rOwned[address(0)] = _rOwned[address(0)].add(rLiquidity);
        if(_isExcluded[address(0)])
            _tOwned[address(0)] = _tOwned[address(0)].add(tBurn);
        emit Transfer(sender, address(0), tBurn);

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

    }

    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);

    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 ) return;
    
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        // if(from != owner() && to != owner())
        //     require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        // if(contractTokenBalance >= _maxTxAmount)
        // {
        //     contractTokenBalance = _maxTxAmount;
        // }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            // contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = false;

        if(from == uniswapV2Pair || to == uniswapV2Pair) {
            takeFee = true;
        }

        if(!_taxEnabled || _isExcludedFromFee[from] || _isExcludedFromFee[to]){  //if any account belongs to _isExcludedFromFee account then remove the fee
            takeFee = false;
        }
        if(from == uniswapV2Pair) {
            _liquidityFee = 13;
        }
        if (to == uniswapV2Pair) {
            _liquidityFee = 10;
        }
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

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

        // swap tokens for ETH
        swapTokensForEth(contractTokenBalance); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

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

        (bool succ, ) = address(marketing).call{value: newBalance}("");
        require(succ, "marketing ETH not sent");
        emit SwapAndLiquify(contractTokenBalance, newBalance);
    }

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

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

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


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

        if(recipient != address(this) || recipient != owner()) {
            require(balanceOf(recipient)<= _maxBalAmount, "Balance limit reached");
        }        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _burn(sender, tBurn);
        _takeLiquidity(sender, tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"SetCommunityPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"SetDevPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"SetLiquidityFeePercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"SetMarketingPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBalPercent","type":"uint256"}],"name":"SetMaxBalPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetTaxEnable","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"SetTaxFeePercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TaxEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBalAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBalPercent","type":"uint256"}],"name":"setMaxBalPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setTaxEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526d314dc6448d9338c15b0a00000000600955600954600019620000289190620008fd565b60001962000037919062000964565b600a556040518060400160405280601481526020017f4d657754776f20496e6675736564205368696261000000000000000000000000815250600c90805190602001906200008792919062000814565b506040518060400160405280600681526020017f4d455754574f0000000000000000000000000000000000000000000000000000815250600d9080519060200190620000d592919062000814565b506012600e60006101000a81548160ff021916908360ff1602179055506001600f55600f546010556001601155601154601255600a601355601354601455731922414f4afce1b59ddcb462b24d96ba0f88e5bb601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760156101000a81548160ff021916908315150217905550620001bb6103e8620001a76005600954620006ad60201b620025811790919060201c565b6200073160201b620025fc1790919060201c565b601855670de0b6b3a76400006019556001601a60006101000a81548160ff021916908315150217905550348015620001f257600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600a54600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033457600080fd5b505afa15801562000349573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036f919062000a09565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003d257600080fd5b505afa158015620003e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040d919062000a09565b6040518363ffffffff1660e01b81526004016200042c92919062000a4c565b602060405180830381600087803b1580156200044757600080fd5b505af11580156200045c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000482919062000a09565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620005196200078360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200069e919062000a8a565b60405180910390a35062000d05565b600080831415620006c257600090506200072b565b60008284620006d2919062000aa7565b9050828482620006e3919062000b08565b1462000726576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071d9062000bc7565b60405180910390fd5b809150505b92915050565b60006200077b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007ac60201b60201c565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008083118290620007f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ed919062000c7c565b60405180910390fd5b506000838562000807919062000b08565b9050809150509392505050565b828054620008229062000ccf565b90600052602060002090601f01602090048101928262000846576000855562000892565b82601f106200086157805160ff191683800117855562000892565b8280016001018555821562000892579182015b828111156200089157825182559160200191906001019062000874565b5b509050620008a19190620008a5565b5090565b5b80821115620008c0576000816000905550600101620008a6565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200090a82620008c4565b91506200091783620008c4565b9250826200092a5762000929620008ce565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200097182620008c4565b91506200097e83620008c4565b92508282101562000994576200099362000935565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009d182620009a4565b9050919050565b620009e381620009c4565b8114620009ef57600080fd5b50565b60008151905062000a0381620009d8565b92915050565b60006020828403121562000a225762000a216200099f565b5b600062000a3284828501620009f2565b91505092915050565b62000a4681620009c4565b82525050565b600060408201905062000a63600083018562000a3b565b62000a72602083018462000a3b565b9392505050565b62000a8481620008c4565b82525050565b600060208201905062000aa1600083018462000a79565b92915050565b600062000ab482620008c4565b915062000ac183620008c4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000afd5762000afc62000935565b5b828202905092915050565b600062000b1582620008c4565b915062000b2283620008c4565b92508262000b355762000b34620008ce565b5b828204905092915050565b600082825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600062000baf60218362000b40565b915062000bbc8262000b51565b604082019050919050565b6000602082019050818103600083015262000be28162000ba0565b9050919050565b600081519050919050565b60005b8381101562000c1457808201518184015260208101905062000bf7565b8381111562000c24576000848401525b50505050565b6000601f19601f8301169050919050565b600062000c488262000be9565b62000c54818562000b40565b935062000c6681856020860162000bf4565b62000c718162000c2a565b840191505092915050565b6000602082019050818103600083015262000c98818462000c3b565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ce857607f821691505b6020821081141562000cff5762000cfe62000ca0565b5b50919050565b6159418062000d156000396000f3fe6080604052600436106102555760003560e01c8063715018a611610139578063b6c52324116100b6578063dd4670641161007a578063dd467064146108eb578063dd62ed3e14610914578063e632313c14610951578063e8b94e5a1461097a578063ea2f0b37146109a3578063f2fde38b146109cc5761025c565b8063b6c5232414610816578063c0b0fda214610841578063c49b9a801461086c578063d12a768814610895578063d1eae073146108c05761025c565b8063966b47c3116100fd578063966b47c3146107315780639daeac761461075c578063a457c2d714610785578063a69df4b5146107c2578063a9059cbb146107d95761025c565b8063715018a61461065e57806388f82020146106755780638da5cb5b146106b25780638ee88c53146106dd57806395d89b41146107065761025c565b80633685d419116101d257806349bd5a5e1161019657806349bd5a5e1461053a5780634a74bb021461056557806352390c02146105905780635342acb4146105b95780636bc87c3a146105f657806370a08231146106215761025c565b80633685d41914610443578063395093511461046c5780633b124fe7146104a9578063437823ec146104d45780634549b039146104fd5761025c565b806318160ddd1161021957806318160ddd1461034857806323b872dd146103735780632d3e474a146103b05780632d838119146103db578063313ce567146104185761025c565b8063061c82d01461026157806306fdde031461028a578063095ea7b3146102b557806313114a9d146102f25780631694505e1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190614872565b6109f5565b005b34801561029657600080fd5b5061029f610acb565b6040516102ac9190614938565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906149b8565b610b5d565b6040516102e99190614a13565b60405180910390f35b3480156102fe57600080fd5b50610307610b7b565b6040516103149190614a3d565b60405180910390f35b34801561032957600080fd5b50610332610b85565b60405161033f9190614ab7565b60405180910390f35b34801561035457600080fd5b5061035d610bab565b60405161036a9190614a3d565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190614ad2565b610bb5565b6040516103a79190614a13565b60405180910390f35b3480156103bc57600080fd5b506103c5610c8e565b6040516103d29190614b34565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190614872565b610cb4565b60405161040f9190614a3d565b60405180910390f35b34801561042457600080fd5b5061042d610d22565b60405161043a9190614b6b565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190614b86565b610d39565b005b34801561047857600080fd5b50610493600480360381019061048e91906149b8565b611088565b6040516104a09190614a13565b60405180910390f35b3480156104b557600080fd5b506104be61113b565b6040516104cb9190614a3d565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190614b86565b611141565b005b34801561050957600080fd5b50610524600480360381019061051f9190614bdf565b611231565b6040516105319190614a3d565b60405180910390f35b34801561054657600080fd5b5061054f6112b7565b60405161055c9190614b34565b60405180910390f35b34801561057157600080fd5b5061057a6112dd565b6040516105879190614a13565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190614b86565b6112f0565b005b3480156105c557600080fd5b506105e060048036038101906105db9190614b86565b6115a4565b6040516105ed9190614a13565b60405180910390f35b34801561060257600080fd5b5061060b6115fa565b6040516106189190614a3d565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614b86565b611600565b6040516106559190614a3d565b60405180910390f35b34801561066a57600080fd5b506106736116eb565b005b34801561068157600080fd5b5061069c60048036038101906106979190614b86565b61183e565b6040516106a99190614a13565b60405180910390f35b3480156106be57600080fd5b506106c7611894565b6040516106d49190614b34565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190614872565b6118bd565b005b34801561071257600080fd5b5061071b611993565b6040516107289190614938565b60405180910390f35b34801561073d57600080fd5b50610746611a25565b6040516107539190614a13565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e9190614c1f565b611a38565b005b34801561079157600080fd5b506107ac60048036038101906107a791906149b8565b611b21565b6040516107b99190614a13565b60405180910390f35b3480156107ce57600080fd5b506107d7611bee565b005b3480156107e557600080fd5b5061080060048036038101906107fb91906149b8565b611dc2565b60405161080d9190614a13565b60405180910390f35b34801561082257600080fd5b5061082b611de0565b6040516108389190614a3d565b60405180910390f35b34801561084d57600080fd5b50610856611dea565b6040516108639190614a3d565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614c1f565b611df0565b005b3480156108a157600080fd5b506108aa611ed9565b6040516108b79190614a3d565b60405180910390f35b3480156108cc57600080fd5b506108d5611edf565b6040516108e29190614a3d565b60405180910390f35b3480156108f757600080fd5b50610912600480360381019061090d9190614872565b611ee5565b005b34801561092057600080fd5b5061093b60048036038101906109369190614c4c565b6120ac565b6040516109489190614a3d565b60405180910390f35b34801561095d57600080fd5b5061097860048036038101906109739190614872565b612133565b005b34801561098657600080fd5b506109a1600480360381019061099c9190614872565b6121d2565b005b3480156109af57600080fd5b506109ca60048036038101906109c59190614b86565b6122cf565b005b3480156109d857600080fd5b506109f360048036038101906109ee9190614b86565b6123bf565b005b6109fd612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8190614cd8565b60405180910390fd5b806011819055507f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610ac09190614a3d565b60405180910390a150565b6060600c8054610ada90614d27565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0690614d27565b8015610b535780601f10610b2857610100808354040283529160200191610b53565b820191906000526020600020905b815481529060010190602001808311610b3657829003601f168201915b5050505050905090565b6000610b71610b6a612646565b848461264e565b6001905092915050565b6000600b54905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b6000610bc2848484612819565b610c8384610bce612646565b610c7e856040518060600160405280602881526020016158bf60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c34612646565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc89092919063ffffffff16565b61264e565b600190509392505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54821115610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290614dcb565b60405180910390fd5b6000610d05612c2c565b9050610d1a81846125fc90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b610d41612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc590614cd8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190614e37565b60405180910390fd5b60005b600880549050811015611084578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610e9557610e94614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110715760086001600880549050610ef09190614eb5565b81548110610f0157610f00614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f4057610f3f614e57565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061103757611036614ee9565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611084565b808061107c90614f18565b915050610e5d565b5050565b6000611131611095612646565b8461112c85600560006110a6612646565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b61264e565b6001905092915050565b60115481565b611149612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90614cd8565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90614fad565b60405180910390fd5b8161129957600061128884612cb5565b5050505050509050809150506112b1565b60006112a484612cb5565b5050505050915050809150505b92915050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b6112f8612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90614cd8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990614e37565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156114e6576114a2600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cb4565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561169b57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506116e6565b6116e3600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cb4565b90505b919050565b6116f3612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790614cd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118c5612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614cd8565b60405180910390fd5b806013819055507fa080f06a1e9c2a432b1d35cf0a54ebca051cf5dce7433c3d8e94948436f10356816040516119889190614a3d565b60405180910390a150565b6060600d80546119a290614d27565b80601f01602080910402602001604051908101604052809291908181526020018280546119ce90614d27565b8015611a1b5780601f106119f057610100808354040283529160200191611a1b565b820191906000526020600020905b8154815290600101906020018083116119fe57829003601f168201915b5050505050905090565b601a60009054906101000a900460ff1681565b611a40612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490614cd8565b60405180910390fd5b80601a60006101000a81548160ff0219169083151502179055507fd4842ff41c1cd38f5ef90a0583f64cf8fa8294a9b0868849a249992139c79a5781604051611b169190614a13565b60405180910390a150565b6000611be4611b2e612646565b84611bdf856040518060600160405280602581526020016158e76025913960056000611b58612646565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc89092919063ffffffff16565b61264e565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c759061503f565b60405180910390fd5b6002544211611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906150ab565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611dd6611dcf612646565b8484612819565b6001905092915050565b6000600254905090565b600f5481565b611df8612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90614cd8565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ece9190614a13565b60405180910390a150565b60195481565b60185481565b611eed612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190614cd8565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261202891906150cb565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61213b612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf90614cd8565b60405180910390fd5b8060198190555050565b6121da612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90614cd8565b60405180910390fd5b61228f60646122818360095461258190919063ffffffff16565b6125fc90919063ffffffff16565b6018819055507fb6c7b4e7480a19c257e5c620bb1f94260496cd483d6b616ec07439f8c7670dbc816040516122c49190614a3d565b60405180910390a150565b6122d7612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614cd8565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123c7612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90614cd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb90615193565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083141561259457600090506125f6565b600082846125a291906151b3565b90508284826125b1919061523c565b146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906152df565b60405180910390fd5b809150505b92915050565b600061263e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d1d565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590615371565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561272e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272590615403565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161280c9190614a3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288090615495565b60405180910390fd5b600081116128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c390615527565b60405180910390fd5b60006128d730611600565b9050600060195482101590508080156128fd5750601760149054906101000a900460ff16155b80156129575750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561296f5750601760159054906101000a900460ff165b1561297e5761297d82612d80565b5b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612a295750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15612a3357600190505b601a60009054906101000a900460ff161580612a985750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612aec5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612af657600090505b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612b5557600d6013819055505b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612bb457600a6013819055505b612bc086868684612ee8565b505050505050565b6000838311158290612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c079190614938565b60405180910390fd5b5060008385612c1f9190614eb5565b9050809150509392505050565b6000806000612c396132ba565b91509150612c5081836125fc90919063ffffffff16565b9250505090565b6000808284612c6691906150cb565b905083811015612cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca290615593565b60405180910390fd5b8091505092915050565b6000806000806000806000806000806000612ccf8c61356d565b93509350935093506000806000612cf08f8787612cea612c2c565b886135ec565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008083118290612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b9190614938565b60405180910390fd5b5060008385612d73919061523c565b9050809150509392505050565b6001601760146101000a81548160ff0219169083151502179055506000479050612da9826136a0565b6000612dbe82476138f290919063ffffffff16565b90506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612e08906155e4565b60006040518083038185875af1925050503d8060008114612e45576040519150601f19603f3d011682016040523d82523d6000602084013e612e4a565b606091505b5050905080612e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8590615645565b60405180910390fd5b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868483604051612ebf929190615665565b60405180910390a15050506000601760146101000a81548160ff02191690831515021790555050565b80612ef657612ef561393c565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f995750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fae57612fa984848461397f565b6131e5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130515750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561306657613061848484613bef565b6131e4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561310a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561311f5761311a848484613e5f565b6131e3565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131c15750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131d6576131d184848461403a565b6131e2565b6131e1848484613e5f565b5b5b5b5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415806132535750613223611894565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156132a65760185461326484611600565b11156132a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329c906156da565b60405180910390fd5b5b806132b4576132b361433f565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015613530578260036000600884815481106132f4576132f3614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806133e2575081600460006008848154811061337a57613379614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156133f957600a5460095494509450505050613569565b613489600360006008848154811061341457613413614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846138f290919063ffffffff16565b925061351b60046000600884815481106134a6576134a5614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836138f290919063ffffffff16565b9150808061352890614f18565b9150506132ce565b50613548600954600a546125fc90919063ffffffff16565b82101561356057600a54600954935093505050613569565b81819350935050505b9091565b600080600080600061357e86614353565b9050600061358b87614384565b90506000613598886143b5565b905060006135d3846135c5846135b7878e6138f290919063ffffffff16565b6138f290919063ffffffff16565b6138f290919063ffffffff16565b9050808383869750975097509750505050509193509193565b600080600080613605868a61258190919063ffffffff16565b9050600061361c878a61258190919063ffffffff16565b90506000613633888a61258190919063ffffffff16565b9050600061364a898961258190919063ffffffff16565b905060006136858261367785613669888a6138f290919063ffffffff16565b6138f290919063ffffffff16565b6138f290919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156136bd576136bc6156fa565b5b6040519080825280602002602001820160405280156136eb5781602001602082028036833780820191505090505b509050308160008151811061370357613702614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156137a557600080fd5b505afa1580156137b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137dd919061573e565b816001815181106137f1576137f0614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061385830601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461264e565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138bc959493929190615864565b600060405180830381600087803b1580156138d657600080fd5b505af11580156138ea573d6000803e3d6000fd5b505050505050565b600061393483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612bc8565b905092915050565b600060115414801561395057506000601354145b1561395a5761397d565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080600061399388612cb5565b96509650965096509650965096506139f388600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a8887600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1d86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b6a8a826143e6565b613b748a836145f2565b613b7e85846147fd565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613bdb9190614a3d565b60405180910390a350505050505050505050565b6000806000806000806000613c0388612cb5565b9650965096509650965096509650613c6387600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cf884600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8d86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dda8a826143e6565b613de48a836145f2565b613dee85846147fd565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e4b9190614a3d565b60405180910390a350505050505050505050565b6000806000806000806000613e7388612cb5565b9650965096509650965096509650613ed387600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f6886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fb58a826143e6565b613fbf8a836145f2565b613fc985846147fd565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516140269190614a3d565b60405180910390a350505050505050505050565b600080600080600080600061404e88612cb5565b96509650965096509650965096506140ae88600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061414387600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d884600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061426d86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142ba8a836145f2565b6142c48a826143e6565b6142ce85846147fd565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161432b9190614a3d565b60405180910390a350505050505050505050565b601254601181905550601454601381905550565b600061437d606461436f6011548561258190919063ffffffff16565b6125fc90919063ffffffff16565b9050919050565b60006143ae60646143a0600f548561258190919063ffffffff16565b6125fc90919063ffffffff16565b9050919050565b60006143df60646143d16013548561258190919063ffffffff16565b6125fc90919063ffffffff16565b9050919050565b60006143f0612c2c565b90506000614407828461258190919063ffffffff16565b905061445b81600360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145865761454283600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145e49190614a3d565b60405180910390a350505050565b60006145fc612c2c565b90506000614613828461258190919063ffffffff16565b905061466781600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147925761474e83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516147ef9190614a3d565b60405180910390a350505050565b61481282600a546138f290919063ffffffff16565b600a8190555061482d81600b54612c5790919063ffffffff16565b600b819055505050565b600080fd5b6000819050919050565b61484f8161483c565b811461485a57600080fd5b50565b60008135905061486c81614846565b92915050565b60006020828403121561488857614887614837565b5b60006148968482850161485d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156148d95780820151818401526020810190506148be565b838111156148e8576000848401525b50505050565b6000601f19601f8301169050919050565b600061490a8261489f565b61491481856148aa565b93506149248185602086016148bb565b61492d816148ee565b840191505092915050565b6000602082019050818103600083015261495281846148ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149858261495a565b9050919050565b6149958161497a565b81146149a057600080fd5b50565b6000813590506149b28161498c565b92915050565b600080604083850312156149cf576149ce614837565b5b60006149dd858286016149a3565b92505060206149ee8582860161485d565b9150509250929050565b60008115159050919050565b614a0d816149f8565b82525050565b6000602082019050614a286000830184614a04565b92915050565b614a378161483c565b82525050565b6000602082019050614a526000830184614a2e565b92915050565b6000819050919050565b6000614a7d614a78614a738461495a565b614a58565b61495a565b9050919050565b6000614a8f82614a62565b9050919050565b6000614aa182614a84565b9050919050565b614ab181614a96565b82525050565b6000602082019050614acc6000830184614aa8565b92915050565b600080600060608486031215614aeb57614aea614837565b5b6000614af9868287016149a3565b9350506020614b0a868287016149a3565b9250506040614b1b8682870161485d565b9150509250925092565b614b2e8161497a565b82525050565b6000602082019050614b496000830184614b25565b92915050565b600060ff82169050919050565b614b6581614b4f565b82525050565b6000602082019050614b806000830184614b5c565b92915050565b600060208284031215614b9c57614b9b614837565b5b6000614baa848285016149a3565b91505092915050565b614bbc816149f8565b8114614bc757600080fd5b50565b600081359050614bd981614bb3565b92915050565b60008060408385031215614bf657614bf5614837565b5b6000614c048582860161485d565b9250506020614c1585828601614bca565b9150509250929050565b600060208284031215614c3557614c34614837565b5b6000614c4384828501614bca565b91505092915050565b60008060408385031215614c6357614c62614837565b5b6000614c71858286016149a3565b9250506020614c82858286016149a3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cc26020836148aa565b9150614ccd82614c8c565b602082019050919050565b60006020820190508181036000830152614cf181614cb5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d3f57607f821691505b60208210811415614d5357614d52614cf8565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614db5602a836148aa565b9150614dc082614d59565b604082019050919050565b60006020820190508181036000830152614de481614da8565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614e21601b836148aa565b9150614e2c82614deb565b602082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ec08261483c565b9150614ecb8361483c565b925082821015614ede57614edd614e86565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614f238261483c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f5657614f55614e86565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614f97601f836148aa565b9150614fa282614f61565b602082019050919050565b60006020820190508181036000830152614fc681614f8a565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006150296023836148aa565b915061503482614fcd565b604082019050919050565b600060208201905081810360008301526150588161501c565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615095601f836148aa565b91506150a08261505f565b602082019050919050565b600060208201905081810360008301526150c481615088565b9050919050565b60006150d68261483c565b91506150e18361483c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561511657615115614e86565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061517d6026836148aa565b915061518882615121565b604082019050919050565b600060208201905081810360008301526151ac81615170565b9050919050565b60006151be8261483c565b91506151c98361483c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561520257615201614e86565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152478261483c565b91506152528361483c565b9250826152625761526161520d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006152c96021836148aa565b91506152d48261526d565b604082019050919050565b600060208201905081810360008301526152f8816152bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061535b6024836148aa565b9150615366826152ff565b604082019050919050565b6000602082019050818103600083015261538a8161534e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153ed6022836148aa565b91506153f882615391565b604082019050919050565b6000602082019050818103600083015261541c816153e0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061547f6025836148aa565b915061548a82615423565b604082019050919050565b600060208201905081810360008301526154ae81615472565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006155116029836148aa565b915061551c826154b5565b604082019050919050565b6000602082019050818103600083015261554081615504565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061557d601b836148aa565b915061558882615547565b602082019050919050565b600060208201905081810360008301526155ac81615570565b9050919050565b600081905092915050565b50565b60006155ce6000836155b3565b91506155d9826155be565b600082019050919050565b60006155ef826155c1565b9150819050919050565b7f6d61726b6574696e6720455448206e6f742073656e7400000000000000000000600082015250565b600061562f6016836148aa565b915061563a826155f9565b602082019050919050565b6000602082019050818103600083015261565e81615622565b9050919050565b600060408201905061567a6000830185614a2e565b6156876020830184614a2e565b9392505050565b7f42616c616e6365206c696d697420726561636865640000000000000000000000600082015250565b60006156c46015836148aa565b91506156cf8261568e565b602082019050919050565b600060208201905081810360008301526156f3816156b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506157388161498c565b92915050565b60006020828403121561575457615753614837565b5b600061576284828501615729565b91505092915050565b6000819050919050565b600061579061578b6157868461576b565b614a58565b61483c565b9050919050565b6157a081615775565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157db8161497a565b82525050565b60006157ed83836157d2565b60208301905092915050565b6000602082019050919050565b6000615811826157a6565b61581b81856157b1565b9350615826836157c2565b8060005b8381101561585757815161583e88826157e1565b9750615849836157f9565b92505060018101905061582a565b5085935050505092915050565b600060a0820190506158796000830188614a2e565b6158866020830187615797565b81810360408301526158988186615806565b90506158a76060830185614b25565b6158b46080830184614a2e565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ea326f09c32b77159db085ae35e006314d79cd3be88039f6c58f24e92e28339c64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102555760003560e01c8063715018a611610139578063b6c52324116100b6578063dd4670641161007a578063dd467064146108eb578063dd62ed3e14610914578063e632313c14610951578063e8b94e5a1461097a578063ea2f0b37146109a3578063f2fde38b146109cc5761025c565b8063b6c5232414610816578063c0b0fda214610841578063c49b9a801461086c578063d12a768814610895578063d1eae073146108c05761025c565b8063966b47c3116100fd578063966b47c3146107315780639daeac761461075c578063a457c2d714610785578063a69df4b5146107c2578063a9059cbb146107d95761025c565b8063715018a61461065e57806388f82020146106755780638da5cb5b146106b25780638ee88c53146106dd57806395d89b41146107065761025c565b80633685d419116101d257806349bd5a5e1161019657806349bd5a5e1461053a5780634a74bb021461056557806352390c02146105905780635342acb4146105b95780636bc87c3a146105f657806370a08231146106215761025c565b80633685d41914610443578063395093511461046c5780633b124fe7146104a9578063437823ec146104d45780634549b039146104fd5761025c565b806318160ddd1161021957806318160ddd1461034857806323b872dd146103735780632d3e474a146103b05780632d838119146103db578063313ce567146104185761025c565b8063061c82d01461026157806306fdde031461028a578063095ea7b3146102b557806313114a9d146102f25780631694505e1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190614872565b6109f5565b005b34801561029657600080fd5b5061029f610acb565b6040516102ac9190614938565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906149b8565b610b5d565b6040516102e99190614a13565b60405180910390f35b3480156102fe57600080fd5b50610307610b7b565b6040516103149190614a3d565b60405180910390f35b34801561032957600080fd5b50610332610b85565b60405161033f9190614ab7565b60405180910390f35b34801561035457600080fd5b5061035d610bab565b60405161036a9190614a3d565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190614ad2565b610bb5565b6040516103a79190614a13565b60405180910390f35b3480156103bc57600080fd5b506103c5610c8e565b6040516103d29190614b34565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190614872565b610cb4565b60405161040f9190614a3d565b60405180910390f35b34801561042457600080fd5b5061042d610d22565b60405161043a9190614b6b565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190614b86565b610d39565b005b34801561047857600080fd5b50610493600480360381019061048e91906149b8565b611088565b6040516104a09190614a13565b60405180910390f35b3480156104b557600080fd5b506104be61113b565b6040516104cb9190614a3d565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190614b86565b611141565b005b34801561050957600080fd5b50610524600480360381019061051f9190614bdf565b611231565b6040516105319190614a3d565b60405180910390f35b34801561054657600080fd5b5061054f6112b7565b60405161055c9190614b34565b60405180910390f35b34801561057157600080fd5b5061057a6112dd565b6040516105879190614a13565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190614b86565b6112f0565b005b3480156105c557600080fd5b506105e060048036038101906105db9190614b86565b6115a4565b6040516105ed9190614a13565b60405180910390f35b34801561060257600080fd5b5061060b6115fa565b6040516106189190614a3d565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614b86565b611600565b6040516106559190614a3d565b60405180910390f35b34801561066a57600080fd5b506106736116eb565b005b34801561068157600080fd5b5061069c60048036038101906106979190614b86565b61183e565b6040516106a99190614a13565b60405180910390f35b3480156106be57600080fd5b506106c7611894565b6040516106d49190614b34565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190614872565b6118bd565b005b34801561071257600080fd5b5061071b611993565b6040516107289190614938565b60405180910390f35b34801561073d57600080fd5b50610746611a25565b6040516107539190614a13565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e9190614c1f565b611a38565b005b34801561079157600080fd5b506107ac60048036038101906107a791906149b8565b611b21565b6040516107b99190614a13565b60405180910390f35b3480156107ce57600080fd5b506107d7611bee565b005b3480156107e557600080fd5b5061080060048036038101906107fb91906149b8565b611dc2565b60405161080d9190614a13565b60405180910390f35b34801561082257600080fd5b5061082b611de0565b6040516108389190614a3d565b60405180910390f35b34801561084d57600080fd5b50610856611dea565b6040516108639190614a3d565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614c1f565b611df0565b005b3480156108a157600080fd5b506108aa611ed9565b6040516108b79190614a3d565b60405180910390f35b3480156108cc57600080fd5b506108d5611edf565b6040516108e29190614a3d565b60405180910390f35b3480156108f757600080fd5b50610912600480360381019061090d9190614872565b611ee5565b005b34801561092057600080fd5b5061093b60048036038101906109369190614c4c565b6120ac565b6040516109489190614a3d565b60405180910390f35b34801561095d57600080fd5b5061097860048036038101906109739190614872565b612133565b005b34801561098657600080fd5b506109a1600480360381019061099c9190614872565b6121d2565b005b3480156109af57600080fd5b506109ca60048036038101906109c59190614b86565b6122cf565b005b3480156109d857600080fd5b506109f360048036038101906109ee9190614b86565b6123bf565b005b6109fd612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8190614cd8565b60405180910390fd5b806011819055507f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610ac09190614a3d565b60405180910390a150565b6060600c8054610ada90614d27565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0690614d27565b8015610b535780601f10610b2857610100808354040283529160200191610b53565b820191906000526020600020905b815481529060010190602001808311610b3657829003601f168201915b5050505050905090565b6000610b71610b6a612646565b848461264e565b6001905092915050565b6000600b54905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b6000610bc2848484612819565b610c8384610bce612646565b610c7e856040518060600160405280602881526020016158bf60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c34612646565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc89092919063ffffffff16565b61264e565b600190509392505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54821115610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290614dcb565b60405180910390fd5b6000610d05612c2c565b9050610d1a81846125fc90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b610d41612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc590614cd8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190614e37565b60405180910390fd5b60005b600880549050811015611084578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610e9557610e94614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110715760086001600880549050610ef09190614eb5565b81548110610f0157610f00614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f4057610f3f614e57565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061103757611036614ee9565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611084565b808061107c90614f18565b915050610e5d565b5050565b6000611131611095612646565b8461112c85600560006110a6612646565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b61264e565b6001905092915050565b60115481565b611149612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90614cd8565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90614fad565b60405180910390fd5b8161129957600061128884612cb5565b5050505050509050809150506112b1565b60006112a484612cb5565b5050505050915050809150505b92915050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b6112f8612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90614cd8565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990614e37565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156114e6576114a2600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cb4565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561169b57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506116e6565b6116e3600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cb4565b90505b919050565b6116f3612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790614cd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118c5612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614cd8565b60405180910390fd5b806013819055507fa080f06a1e9c2a432b1d35cf0a54ebca051cf5dce7433c3d8e94948436f10356816040516119889190614a3d565b60405180910390a150565b6060600d80546119a290614d27565b80601f01602080910402602001604051908101604052809291908181526020018280546119ce90614d27565b8015611a1b5780601f106119f057610100808354040283529160200191611a1b565b820191906000526020600020905b8154815290600101906020018083116119fe57829003601f168201915b5050505050905090565b601a60009054906101000a900460ff1681565b611a40612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac490614cd8565b60405180910390fd5b80601a60006101000a81548160ff0219169083151502179055507fd4842ff41c1cd38f5ef90a0583f64cf8fa8294a9b0868849a249992139c79a5781604051611b169190614a13565b60405180910390a150565b6000611be4611b2e612646565b84611bdf856040518060600160405280602581526020016158e76025913960056000611b58612646565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc89092919063ffffffff16565b61264e565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c759061503f565b60405180910390fd5b6002544211611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906150ab565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611dd6611dcf612646565b8484612819565b6001905092915050565b6000600254905090565b600f5481565b611df8612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90614cd8565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ece9190614a13565b60405180910390a150565b60195481565b60185481565b611eed612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190614cd8565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261202891906150cb565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61213b612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf90614cd8565b60405180910390fd5b8060198190555050565b6121da612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90614cd8565b60405180910390fd5b61228f60646122818360095461258190919063ffffffff16565b6125fc90919063ffffffff16565b6018819055507fb6c7b4e7480a19c257e5c620bb1f94260496cd483d6b616ec07439f8c7670dbc816040516122c49190614a3d565b60405180910390a150565b6122d7612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90614cd8565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123c7612646565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90614cd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb90615193565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083141561259457600090506125f6565b600082846125a291906151b3565b90508284826125b1919061523c565b146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906152df565b60405180910390fd5b809150505b92915050565b600061263e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d1d565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590615371565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561272e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272590615403565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161280c9190614a3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288090615495565b60405180910390fd5b600081116128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c390615527565b60405180910390fd5b60006128d730611600565b9050600060195482101590508080156128fd5750601760149054906101000a900460ff16155b80156129575750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561296f5750601760159054906101000a900460ff165b1561297e5761297d82612d80565b5b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612a295750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15612a3357600190505b601a60009054906101000a900460ff161580612a985750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612aec5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612af657600090505b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612b5557600d6013819055505b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612bb457600a6013819055505b612bc086868684612ee8565b505050505050565b6000838311158290612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c079190614938565b60405180910390fd5b5060008385612c1f9190614eb5565b9050809150509392505050565b6000806000612c396132ba565b91509150612c5081836125fc90919063ffffffff16565b9250505090565b6000808284612c6691906150cb565b905083811015612cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca290615593565b60405180910390fd5b8091505092915050565b6000806000806000806000806000806000612ccf8c61356d565b93509350935093506000806000612cf08f8787612cea612c2c565b886135ec565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008083118290612d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5b9190614938565b60405180910390fd5b5060008385612d73919061523c565b9050809150509392505050565b6001601760146101000a81548160ff0219169083151502179055506000479050612da9826136a0565b6000612dbe82476138f290919063ffffffff16565b90506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612e08906155e4565b60006040518083038185875af1925050503d8060008114612e45576040519150601f19603f3d011682016040523d82523d6000602084013e612e4a565b606091505b5050905080612e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8590615645565b60405180910390fd5b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868483604051612ebf929190615665565b60405180910390a15050506000601760146101000a81548160ff02191690831515021790555050565b80612ef657612ef561393c565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f995750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fae57612fa984848461397f565b6131e5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130515750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561306657613061848484613bef565b6131e4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561310a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561311f5761311a848484613e5f565b6131e3565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131c15750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131d6576131d184848461403a565b6131e2565b6131e1848484613e5f565b5b5b5b5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415806132535750613223611894565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156132a65760185461326484611600565b11156132a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329c906156da565b60405180910390fd5b5b806132b4576132b361433f565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015613530578260036000600884815481106132f4576132f3614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806133e2575081600460006008848154811061337a57613379614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156133f957600a5460095494509450505050613569565b613489600360006008848154811061341457613413614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846138f290919063ffffffff16565b925061351b60046000600884815481106134a6576134a5614e57565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836138f290919063ffffffff16565b9150808061352890614f18565b9150506132ce565b50613548600954600a546125fc90919063ffffffff16565b82101561356057600a54600954935093505050613569565b81819350935050505b9091565b600080600080600061357e86614353565b9050600061358b87614384565b90506000613598886143b5565b905060006135d3846135c5846135b7878e6138f290919063ffffffff16565b6138f290919063ffffffff16565b6138f290919063ffffffff16565b9050808383869750975097509750505050509193509193565b600080600080613605868a61258190919063ffffffff16565b9050600061361c878a61258190919063ffffffff16565b90506000613633888a61258190919063ffffffff16565b9050600061364a898961258190919063ffffffff16565b905060006136858261367785613669888a6138f290919063ffffffff16565b6138f290919063ffffffff16565b6138f290919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156136bd576136bc6156fa565b5b6040519080825280602002602001820160405280156136eb5781602001602082028036833780820191505090505b509050308160008151811061370357613702614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156137a557600080fd5b505afa1580156137b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137dd919061573e565b816001815181106137f1576137f0614e57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061385830601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461264e565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138bc959493929190615864565b600060405180830381600087803b1580156138d657600080fd5b505af11580156138ea573d6000803e3d6000fd5b505050505050565b600061393483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612bc8565b905092915050565b600060115414801561395057506000601354145b1561395a5761397d565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080600061399388612cb5565b96509650965096509650965096506139f388600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a8887600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1d86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b6a8a826143e6565b613b748a836145f2565b613b7e85846147fd565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613bdb9190614a3d565b60405180910390a350505050505050505050565b6000806000806000806000613c0388612cb5565b9650965096509650965096509650613c6387600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cf884600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8d86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dda8a826143e6565b613de48a836145f2565b613dee85846147fd565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613e4b9190614a3d565b60405180910390a350505050505050505050565b6000806000806000806000613e7388612cb5565b9650965096509650965096509650613ed387600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f6886600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fb58a826143e6565b613fbf8a836145f2565b613fc985846147fd565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516140269190614a3d565b60405180910390a350505050505050505050565b600080600080600080600061404e88612cb5565b96509650965096509650965096506140ae88600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061414387600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f290919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d884600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061426d86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142ba8a836145f2565b6142c48a826143e6565b6142ce85846147fd565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161432b9190614a3d565b60405180910390a350505050505050505050565b601254601181905550601454601381905550565b600061437d606461436f6011548561258190919063ffffffff16565b6125fc90919063ffffffff16565b9050919050565b60006143ae60646143a0600f548561258190919063ffffffff16565b6125fc90919063ffffffff16565b9050919050565b60006143df60646143d16013548561258190919063ffffffff16565b6125fc90919063ffffffff16565b9050919050565b60006143f0612c2c565b90506000614407828461258190919063ffffffff16565b905061445b81600360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145865761454283600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145e49190614a3d565b60405180910390a350505050565b60006145fc612c2c565b90506000614613828461258190919063ffffffff16565b905061466781600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147925761474e83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516147ef9190614a3d565b60405180910390a350505050565b61481282600a546138f290919063ffffffff16565b600a8190555061482d81600b54612c5790919063ffffffff16565b600b819055505050565b600080fd5b6000819050919050565b61484f8161483c565b811461485a57600080fd5b50565b60008135905061486c81614846565b92915050565b60006020828403121561488857614887614837565b5b60006148968482850161485d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156148d95780820151818401526020810190506148be565b838111156148e8576000848401525b50505050565b6000601f19601f8301169050919050565b600061490a8261489f565b61491481856148aa565b93506149248185602086016148bb565b61492d816148ee565b840191505092915050565b6000602082019050818103600083015261495281846148ff565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149858261495a565b9050919050565b6149958161497a565b81146149a057600080fd5b50565b6000813590506149b28161498c565b92915050565b600080604083850312156149cf576149ce614837565b5b60006149dd858286016149a3565b92505060206149ee8582860161485d565b9150509250929050565b60008115159050919050565b614a0d816149f8565b82525050565b6000602082019050614a286000830184614a04565b92915050565b614a378161483c565b82525050565b6000602082019050614a526000830184614a2e565b92915050565b6000819050919050565b6000614a7d614a78614a738461495a565b614a58565b61495a565b9050919050565b6000614a8f82614a62565b9050919050565b6000614aa182614a84565b9050919050565b614ab181614a96565b82525050565b6000602082019050614acc6000830184614aa8565b92915050565b600080600060608486031215614aeb57614aea614837565b5b6000614af9868287016149a3565b9350506020614b0a868287016149a3565b9250506040614b1b8682870161485d565b9150509250925092565b614b2e8161497a565b82525050565b6000602082019050614b496000830184614b25565b92915050565b600060ff82169050919050565b614b6581614b4f565b82525050565b6000602082019050614b806000830184614b5c565b92915050565b600060208284031215614b9c57614b9b614837565b5b6000614baa848285016149a3565b91505092915050565b614bbc816149f8565b8114614bc757600080fd5b50565b600081359050614bd981614bb3565b92915050565b60008060408385031215614bf657614bf5614837565b5b6000614c048582860161485d565b9250506020614c1585828601614bca565b9150509250929050565b600060208284031215614c3557614c34614837565b5b6000614c4384828501614bca565b91505092915050565b60008060408385031215614c6357614c62614837565b5b6000614c71858286016149a3565b9250506020614c82858286016149a3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cc26020836148aa565b9150614ccd82614c8c565b602082019050919050565b60006020820190508181036000830152614cf181614cb5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d3f57607f821691505b60208210811415614d5357614d52614cf8565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614db5602a836148aa565b9150614dc082614d59565b604082019050919050565b60006020820190508181036000830152614de481614da8565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614e21601b836148aa565b9150614e2c82614deb565b602082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ec08261483c565b9150614ecb8361483c565b925082821015614ede57614edd614e86565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614f238261483c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f5657614f55614e86565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614f97601f836148aa565b9150614fa282614f61565b602082019050919050565b60006020820190508181036000830152614fc681614f8a565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006150296023836148aa565b915061503482614fcd565b604082019050919050565b600060208201905081810360008301526150588161501c565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615095601f836148aa565b91506150a08261505f565b602082019050919050565b600060208201905081810360008301526150c481615088565b9050919050565b60006150d68261483c565b91506150e18361483c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561511657615115614e86565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061517d6026836148aa565b915061518882615121565b604082019050919050565b600060208201905081810360008301526151ac81615170565b9050919050565b60006151be8261483c565b91506151c98361483c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561520257615201614e86565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006152478261483c565b91506152528361483c565b9250826152625761526161520d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006152c96021836148aa565b91506152d48261526d565b604082019050919050565b600060208201905081810360008301526152f8816152bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061535b6024836148aa565b9150615366826152ff565b604082019050919050565b6000602082019050818103600083015261538a8161534e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153ed6022836148aa565b91506153f882615391565b604082019050919050565b6000602082019050818103600083015261541c816153e0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061547f6025836148aa565b915061548a82615423565b604082019050919050565b600060208201905081810360008301526154ae81615472565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006155116029836148aa565b915061551c826154b5565b604082019050919050565b6000602082019050818103600083015261554081615504565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061557d601b836148aa565b915061558882615547565b602082019050919050565b600060208201905081810360008301526155ac81615570565b9050919050565b600081905092915050565b50565b60006155ce6000836155b3565b91506155d9826155be565b600082019050919050565b60006155ef826155c1565b9150819050919050565b7f6d61726b6574696e6720455448206e6f742073656e7400000000000000000000600082015250565b600061562f6016836148aa565b915061563a826155f9565b602082019050919050565b6000602082019050818103600083015261565e81615622565b9050919050565b600060408201905061567a6000830185614a2e565b6156876020830184614a2e565b9392505050565b7f42616c616e6365206c696d697420726561636865640000000000000000000000600082015250565b60006156c46015836148aa565b91506156cf8261568e565b602082019050919050565b600060208201905081810360008301526156f3816156b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506157388161498c565b92915050565b60006020828403121561575457615753614837565b5b600061576284828501615729565b91505092915050565b6000819050919050565b600061579061578b6157868461576b565b614a58565b61483c565b9050919050565b6157a081615775565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157db8161497a565b82525050565b60006157ed83836157d2565b60208301905092915050565b6000602082019050919050565b6000615811826157a6565b61581b81856157b1565b9350615826836157c2565b8060005b8381101561585757815161583e88826157e1565b9750615849836157f9565b92505060018101905061582a565b5085935050505092915050565b600060a0820190506158796000830188614a2e565b6158866020830187615797565b81810360408301526158988186615806565b90506158a76060830185614b25565b6158b46080830184614a2e565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ea326f09c32b77159db085ae35e006314d79cd3be88039f6c58f24e92e28339c64736f6c63430008090033

Deployed Bytecode Sourcemap

25441:19751:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33170:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28439:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29351:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30472:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26587:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28716:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29520:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26508:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31013:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28625:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31729:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29841:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26315:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32925:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30567:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26635:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26704:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31274:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38293:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26402:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28819:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16144:148;;;;;;;;;;;;;:::i;:::-;;30344:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15501:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33320:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28530:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26889:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34041:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30067:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17166:305;;;;;;;;;;;;;:::i;:::-;;29025:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16699:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26225:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33858:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26819:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26757:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16864:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29200:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33733:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33502:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33048:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16447:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33170:138;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33254:6:::1;33244:7;:16;;;;33276:24;33293:6;33276:24;;;;;;:::i;:::-;;;;;;;;33170:138:::0;:::o;28439:83::-;28476:13;28509:5;28502:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28439:83;:::o;29351:161::-;29426:4;29443:39;29452:12;:10;:12::i;:::-;29466:7;29475:6;29443:8;:39::i;:::-;29500:4;29493:11;;29351:161;;;;:::o;30472:87::-;30514:7;30541:10;;30534:17;;30472:87;:::o;26587:41::-;;;;;;;;;;;;;:::o;28716:95::-;28769:7;28796;;28789:14;;28716:95;:::o;29520:313::-;29618:4;29635:36;29645:6;29653:9;29664:6;29635:9;:36::i;:::-;29682:121;29691:6;29699:12;:10;:12::i;:::-;29713:89;29751:6;29713:89;;;;;;;;;;;;;;;;;:11;:19;29725:6;29713:19;;;;;;;;;;;;;;;:33;29733:12;:10;:12::i;:::-;29713:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29682:8;:121::i;:::-;29821:4;29814:11;;29520:313;;;;;:::o;26508:69::-;;;;;;;;;;;;;:::o;31013:253::-;31079:7;31118;;31107;:18;;31099:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31183:19;31206:10;:8;:10::i;:::-;31183:33;;31234:24;31246:11;31234:7;:11;;:24;;;;:::i;:::-;31227:31;;;31013:253;;;:::o;28625:83::-;28666:5;28691:9;;;;;;;;;;;28684:16;;28625:83;:::o;31729:479::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31811:11:::1;:20;31823:7;31811:20;;;;;;;;;;;;;;;;;;;;;;;;;31803:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31879:9;31874:327;31898:9;:16;;;;31894:1;:20;31874:327;;;31956:7;31940:23;;:9;31950:1;31940:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;31936:254;;;31999:9;32028:1;32009:9;:16;;;;:20;;;;:::i;:::-;31999:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31984:9;31994:1;31984:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32068:1;32049:7;:16;32057:7;32049:16;;;;;;;;;;;;;;;:20;;;;32111:5;32088:11;:20;32100:7;32088:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32135:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32169:5;;31936:254;31916:3;;;;;:::i;:::-;;;;31874:327;;;;31729:479:::0;:::o;29841:218::-;29929:4;29946:83;29955:12;:10;:12::i;:::-;29969:7;29978:50;30017:10;29978:11;:25;29990:12;:10;:12::i;:::-;29978:25;;;;;;;;;;;;;;;:34;30004:7;29978:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29946:8;:83::i;:::-;30047:4;30040:11;;29841:218;;;;:::o;26315:26::-;;;;:::o;32925:111::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33024:4:::1;32994:18;:27;33013:7;32994:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32925:111:::0;:::o;30567:438::-;30657:7;30696;;30685;:18;;30677:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30755:17;30750:248;;30790:15;30815:19;30826:7;30815:10;:19::i;:::-;30789:45;;;;;;;;30856:7;30849:14;;;;;30750:248;30898:23;30930:19;30941:7;30930:10;:19::i;:::-;30896:53;;;;;;;;30971:15;30964:22;;;30567:438;;;;;:::o;26635:28::-;;;;;;;;;;;;;:::o;26704:40::-;;;;;;;;;;;;;:::o;31274:447::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31471:11:::1;:20;31483:7;31471:20;;;;;;;;;;;;;;;;;;;;;;;;;31470:21;31462:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31556:1;31537:7;:16;31545:7;31537:16;;;;;;;;;;;;;;;;:20;31534:108;;;31593:37;31613:7;:16;31621:7;31613:16;;;;;;;;;;;;;;;;31593:19;:37::i;:::-;31574:7;:16;31582:7;31574:16;;;;;;;;;;;;;;;:56;;;;31534:108;31675:4;31652:11;:20;31664:7;31652:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31690:9;31705:7;31690:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31274:447:::0;:::o;38293:123::-;38357:4;38381:18;:27;38400:7;38381:27;;;;;;;;;;;;;;;;;;;;;;;;;38374:34;;38293:123;;;:::o;26402:33::-;;;;:::o;28819:198::-;28885:7;28909:11;:20;28921:7;28909:20;;;;;;;;;;;;;;;;;;;;;;;;;28905:49;;;28938:7;:16;28946:7;28938:16;;;;;;;;;;;;;;;;28931:23;;;;28905:49;28972:37;28992:7;:16;29000:7;28992:16;;;;;;;;;;;;;;;;28972:19;:37::i;:::-;28965:44;;28819:198;;;;:::o;16144:148::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16251:1:::1;16214:40;;16235:6;::::0;::::1;;;;;;;;16214:40;;;;;;;;;;;;16282:1;16265:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16144:148::o:0;30344:120::-;30412:4;30436:11;:20;30448:7;30436:20;;;;;;;;;;;;;;;;;;;;;;;;;30429:27;;30344:120;;;:::o;15501:79::-;15539:7;15566:6;;;;;;;;;;;15559:13;;15501:79;:::o;33320:174::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33422:12:::1;33406:13;:28;;;;33450:36;33473:12;33450:36;;;;;;:::i;:::-;;;;;;;;33320:174:::0;:::o;28530:87::-;28569:13;28602:7;28595:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28530:87;:::o;26889:30::-;;;;;;;;;;;;;:::o;34041:131::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34120:7:::1;34106:11;;:21;;;;;;;;;;;;;;;;;;34143;34156:7;34143:21;;;;;;:::i;:::-;;;;;;;;34041:131:::0;:::o;30067:269::-;30160:4;30177:129;30186:12;:10;:12::i;:::-;30200:7;30209:96;30248:15;30209:96;;;;;;;;;;;;;;;;;:11;:25;30221:12;:10;:12::i;:::-;30209:25;;;;;;;;;;;;;;;:34;30235:7;30209:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;30177:8;:129::i;:::-;30324:4;30317:11;;30067:269;;;;:::o;17166:305::-;17236:10;17218:28;;:14;;;;;;;;;;;:28;;;17210:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17323:9;;17305:15;:27;17297:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17414:14;;;;;;;;;;;17385:44;;17406:6;;;;;;;;;;17385:44;;;;;;;;;;;;17449:14;;;;;;;;;;;17440:6;;:23;;;;;;;;;;;;;;;;;;17166:305::o;29025:167::-;29103:4;29120:42;29130:12;:10;:12::i;:::-;29144:9;29155:6;29120:9;:42::i;:::-;29180:4;29173:11;;29025:167;;;;:::o;16699:89::-;16744:7;16771:9;;16764:16;;16699:89;:::o;26225:27::-;;;;:::o;33858:171::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33959:8:::1;33935:21;;:32;;;;;;;;;;;;;;;;;;33983:38;34012:8;33983:38;;;;;;:::i;:::-;;;;;;;;33858:171:::0;:::o;26819:57::-;;;;:::o;26757:55::-;;;;:::o;16864:226::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16945:6:::1;::::0;::::1;;;;;;;;16928:14;;:23;;;;;;;;;;;;;;;;;;16979:1;16962:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17022:4;17004:15;:22;;;;:::i;:::-;16992:9;:34;;;;17079:1;17042:40;;17063:6;::::0;::::1;;;;;;;;17042:40;;;;;;;;;;;;16864:226:::0;:::o;29200:143::-;29281:7;29308:11;:18;29320:5;29308:18;;;;;;;;;;;;;;;:27;29327:7;29308:27;;;;;;;;;;;;;;;;29301:34;;29200:143;;;;:::o;33733:117::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33836:6:::1;33804:29;:38;;;;33733:117:::0;:::o;33502:223::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33599:61:::1;33644:5;33599:26;33611:13;33599:7;;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;33583:13;:77;;;;33676:31;33693:13;33676:31;;;;;;:::i;:::-;;;;;;;;33502:223:::0;:::o;33048:110::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33145:5:::1;33115:18;:27;33134:7;33115:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33048:110:::0;:::o;16447:244::-;15723:12;:10;:12::i;:::-;15713:22;;:6;;;;;;;;;;:22;;;15705:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16556:1:::1;16536:22;;:8;:22;;;;16528:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16646:8;16617:38;;16638:6;::::0;::::1;;;;;;;;16617:38;;;;;;;;;;;;16675:8;16666:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16447:244:::0;:::o;4829:471::-;4887:7;5137:1;5132;:6;5128:47;;;5162:1;5155:8;;;;5128:47;5187:9;5203:1;5199;:5;;;;:::i;:::-;5187:17;;5232:1;5227;5223;:5;;;;:::i;:::-;:10;5215:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5291:1;5284:8;;;4829:471;;;;;:::o;5776:132::-;5834:7;5861:39;5865:1;5868;5861:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5854:46;;5776:132;;;;:::o;7968:99::-;8021:7;8049:10;8042:17;;7968:99;:::o;38424:337::-;38534:1;38517:19;;:5;:19;;;;38509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38615:1;38596:21;;:7;:21;;;;38588:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38699:6;38669:11;:18;38681:5;38669:18;;;;;;;;;;;;;;;:27;38688:7;38669:27;;;;;;;;;;;;;;;:36;;;;38737:7;38721:32;;38730:5;38721:32;;;38746:6;38721:32;;;;;;:::i;:::-;;;;;;;;38424:337;;;:::o;38769:2013::-;38907:1;38891:18;;:4;:18;;;;38883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38979:1;38970:6;:10;38962:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39463:28;39494:24;39512:4;39494:9;:24::i;:::-;39463:55;;39683:24;39734:29;;39710:20;:53;;39683:80;;39792:19;:53;;;;;39829:16;;;;;;;;;;;39828:17;39792:53;:91;;;;;39870:13;;;;;;;;;;;39862:21;;:4;:21;;;;39792:91;:129;;;;;39900:21;;;;;;;;;;;39792:129;39774:321;;;40047:36;40062:20;40047:14;:36::i;:::-;39774:321;40176:12;40220:13;;;;;;;;;;;40212:21;;:4;:21;;;:44;;;;40243:13;;;;;;;;;;;40237:19;;:2;:19;;;40212:44;40209:90;;;40283:4;40273:14;;40209:90;40315:11;;;;;;;;;;;40314:12;:40;;;;40330:18;:24;40349:4;40330:24;;;;;;;;;;;;;;;;;;;;;;;;;40314:40;:66;;;;40358:18;:22;40377:2;40358:22;;;;;;;;;;;;;;;;;;;;;;;;;40314:66;40311:188;;;40482:5;40472:15;;40311:188;40520:13;;;;;;;;;;;40512:21;;:4;:21;;;40509:71;;;40566:2;40550:13;:18;;;;40509:71;40600:13;;;;;;;;;;;40594:19;;:2;:19;;;40590:70;;;40646:2;40630:13;:18;;;;40590:70;40736:38;40751:4;40756:2;40759:6;40766:7;40736:14;:38::i;:::-;38872:1910;;;38769:2013;;;:::o;4378:192::-;4464:7;4497:1;4492;:6;;4500:12;4484:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4524:9;4540:1;4536;:5;;;;:::i;:::-;4524:17;;4561:1;4554:8;;;4378:192;;;;;:::o;35842:163::-;35883:7;35904:15;35921;35940:19;:17;:19::i;:::-;35903:56;;;;35977:20;35989:7;35977;:11;;:20;;;;:::i;:::-;35970:27;;;;35842:163;:::o;3475:181::-;3533:7;3553:9;3569:1;3565;:5;;;;:::i;:::-;3553:17;;3594:1;3589;:6;;3581:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3647:1;3640:8;;;3475:181;;;;:::o;34427:458::-;34487:7;34496;34505;34514;34523;34532;34541;34562:23;34587:12;34601:18;34621:13;34638:20;34650:7;34638:11;:20::i;:::-;34561:97;;;;;;;;34670:15;34687:23;34712:12;34728:57;34740:7;34749:4;34755:10;34767;:8;:10::i;:::-;34779:5;34728:11;:57::i;:::-;34669:116;;;;;;34804:7;34813:15;34830:4;34836:15;34853:4;34859:10;34871:5;34796:81;;;;;;;;;;;;;;;;;;;;;34427:458;;;;;;;;;:::o;6404:278::-;6490:7;6522:1;6518;:5;6525:12;6510:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6549:9;6565:1;6561;:5;;;;:::i;:::-;6549:17;;6673:1;6666:8;;;6404:278;;;;;:::o;40790:877::-;27589:4;27570:16;;:23;;;;;;;;;;;;;;;;;;41148:22:::1;41173:21;41148:46;;41239:38;41256:20;41239:16;:38::i;:::-;41408:18;41429:41;41455:14;41429:21;:25;;:41;;;;:::i;:::-;41408:62;;41484:9;41507;;;;;;;;;;;41499:23;;41530:10;41499:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41483:62;;;41564:4;41556:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41611:48;41626:20;41648:10;41611:48;;;;;;;:::i;:::-;;;;;;;;40864:803;;;27635:5:::0;27616:16;;:24;;;;;;;;;;;;;;;;;;40790:877;:::o;42347:996::-;42458:7;42454:40;;42480:14;:12;:14::i;:::-;42454:40;42519:11;:19;42531:6;42519:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;42543:11;:22;42555:9;42543:22;;;;;;;;;;;;;;;;;;;;;;;;;42542:23;42519:46;42515:597;;;42582:48;42604:6;42612:9;42623:6;42582:21;:48::i;:::-;42515:597;;;42653:11;:19;42665:6;42653:19;;;;;;;;;;;;;;;;;;;;;;;;;42652:20;:46;;;;;42676:11;:22;42688:9;42676:22;;;;;;;;;;;;;;;;;;;;;;;;;42652:46;42648:464;;;42715:46;42735:6;42743:9;42754:6;42715:19;:46::i;:::-;42648:464;;;42784:11;:19;42796:6;42784:19;;;;;;;;;;;;;;;;;;;;;;;;;42783:20;:47;;;;;42808:11;:22;42820:9;42808:22;;;;;;;;;;;;;;;;;;;;;;;;;42807:23;42783:47;42779:333;;;42847:44;42865:6;42873:9;42884:6;42847:17;:44::i;:::-;42779:333;;;42913:11;:19;42925:6;42913:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42936:11;:22;42948:9;42936:22;;;;;;;;;;;;;;;;;;;;;;;;;42913:45;42909:203;;;42975:48;42997:6;43005:9;43016:6;42975:21;:48::i;:::-;42909:203;;;43056:44;43074:6;43082:9;43093:6;43056:17;:44::i;:::-;42909:203;42779:333;42648:464;42515:597;43148:4;43127:26;;:9;:26;;;;:50;;;;43170:7;:5;:7::i;:::-;43157:20;;:9;:20;;;;43127:50;43124:152;;;43225:13;;43202:20;43212:9;43202;:20::i;:::-;:36;;43194:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43124:152;43298:7;43294:41;;43320:15;:13;:15::i;:::-;43294:41;42347:996;;;;:::o;36013:561::-;36063:7;36072;36092:15;36110:7;;36092:25;;36128:15;36146:7;;36128:25;;36175:9;36170:289;36194:9;:16;;;;36190:1;:20;36170:289;;;36260:7;36236;:21;36244:9;36254:1;36244:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36236:21;;;;;;;;;;;;;;;;:31;:66;;;;36295:7;36271;:21;36279:9;36289:1;36279:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36271:21;;;;;;;;;;;;;;;;:31;36236:66;36232:97;;;36312:7;;36321;;36304:25;;;;;;;;;36232:97;36354:34;36366:7;:21;36374:9;36384:1;36374:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36366:21;;;;;;;;;;;;;;;;36354:7;:11;;:34;;;;:::i;:::-;36344:44;;36413:34;36425:7;:21;36433:9;36443:1;36433:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36425:21;;;;;;;;;;;;;;;;36413:7;:11;;:34;;;;:::i;:::-;36403:44;;36212:3;;;;;:::i;:::-;;;;36170:289;;;;36483:20;36495:7;;36483;;:11;;:20;;;;:::i;:::-;36473:7;:30;36469:61;;;36513:7;;36522;;36505:25;;;;;;;;36469:61;36549:7;36558;36541:25;;;;;;36013:561;;;:::o;34893:419::-;34953:7;34962;34971;34980;35000:13;35016:25;35033:7;35016:16;:25::i;:::-;35000:41;;35052:12;35067:24;35083:7;35067:15;:24::i;:::-;35052:39;;35102:18;35123:30;35145:7;35123:21;:30::i;:::-;35102:51;;35174:23;35200:44;35238:5;35200:33;35222:10;35200:17;35212:4;35200:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;35174:70;;35263:15;35280:4;35286:10;35298:5;35255:49;;;;;;;;;;;;34893:419;;;;;:::o;35320:514::-;35450:7;35459;35468;35488:15;35506:24;35518:11;35506:7;:11;;:24;;;;:::i;:::-;35488:42;;35541:12;35556:21;35565:11;35556:4;:8;;:21;;;;:::i;:::-;35541:36;;35588:18;35609:27;35624:11;35609:10;:14;;:27;;;;:::i;:::-;35588:48;;35647:13;35663:22;35673:11;35663:5;:9;;:22;;;;:::i;:::-;35647:38;;35706:23;35732:44;35770:5;35732:33;35754:10;35732:17;35744:4;35732:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;35706:70;;35795:7;35804:15;35821:4;35787:39;;;;;;;;;;;35320:514;;;;;;;;;:::o;41675:589::-;41801:21;41839:1;41825:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41801:40;;41870:4;41852;41857:1;41852:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41896:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41886:4;41891:1;41886:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41931:62;41948:4;41963:15;;;;;;;;;;;41981:11;41931:8;:62::i;:::-;42032:15;;;;;;;;;;;:66;;;42113:11;42139:1;42183:4;42210;42230:15;42032:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41730:534;41675:589;:::o;3939:136::-;3997:7;4024:43;4028:1;4031;4024:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4017:50;;3939:136;;;;:::o;37897:247::-;37954:1;37943:7;;:12;:34;;;;;37976:1;37959:13;;:18;37943:34;37940:47;;;37980:7;;37940:47;38021:7;;38003:15;:25;;;;38063:13;;38039:21;:37;;;;38107:1;38097:7;:11;;;;38135:1;38119:13;:17;;;;37897:247;:::o;44565:621::-;44668:15;44685:23;44710:12;44724:23;44749:12;44763:18;44783:13;44801:19;44812:7;44801:10;:19::i;:::-;44667:153;;;;;;;;;;;;;;44849:28;44869:7;44849;:15;44857:6;44849:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44831:7;:15;44839:6;44831:15;;;;;;;;;;;;;;;:46;;;;44906:28;44926:7;44906;:15;44914:6;44906:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44888:7;:15;44896:6;44888:15;;;;;;;;;;;;;;;:46;;;;44966:39;44989:15;44966:7;:18;44974:9;44966:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44945:7;:18;44953:9;44945:18;;;;;;;;;;;;;;;:60;;;;45019:20;45025:6;45033:5;45019;:20::i;:::-;45050:34;45065:6;45073:10;45050:14;:34::i;:::-;45095:23;45107:4;45113;45095:11;:23::i;:::-;45151:9;45134:44;;45143:6;45134:44;;;45162:15;45134:44;;;;;;:::i;:::-;;;;;;;;44656:530;;;;;;;44565:621;;;:::o;43916:641::-;44017:15;44034:23;44059:12;44073:23;44098:12;44112:18;44132:13;44150:19;44161:7;44150:10;:19::i;:::-;44016:153;;;;;;;;;;;;;;44198:28;44218:7;44198;:15;44206:6;44198:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44180:7;:15;44188:6;44180:15;;;;;;;;;;;;;;;:46;;;;44258:39;44281:15;44258:7;:18;44266:9;44258:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44237:7;:18;44245:9;44237:18;;;;;;;;;;;;;;;:60;;;;44329:39;44352:15;44329:7;:18;44337:9;44329:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44308:7;:18;44316:9;44308:18;;;;;;;;;;;;;;;:60;;;;44390:20;44396:6;44404:5;44390;:20::i;:::-;44421:34;44436:6;44444:10;44421:14;:34::i;:::-;44466:23;44478:4;44484;44466:11;:23::i;:::-;44522:9;44505:44;;44514:6;44505:44;;;44533:15;44505:44;;;;;;:::i;:::-;;;;;;;;44005:552;;;;;;;43916:641;;;:::o;43351:557::-;43450:15;43467:23;43492:12;43506:23;43531:12;43545:18;43565:13;43583:19;43594:7;43583:10;:19::i;:::-;43449:153;;;;;;;;;;;;;;43631:28;43651:7;43631;:15;43639:6;43631:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43613:7;:15;43621:6;43613:15;;;;;;;;;;;;;;;:46;;;;43691:39;43714:15;43691:7;:18;43699:9;43691:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43670:7;:18;43678:9;43670:18;;;;;;;;;;;;;;;:60;;;;43741:20;43747:6;43755:5;43741;:20::i;:::-;43772:34;43787:6;43795:10;43772:14;:34::i;:::-;43817:23;43829:4;43835;43817:11;:23::i;:::-;43873:9;43856:44;;43865:6;43856:44;;;43884:15;43856:44;;;;;;:::i;:::-;;;;;;;;43438:470;;;;;;;43351:557;;;:::o;32216:697::-;32319:15;32336:23;32361:12;32375:23;32400:12;32414:18;32434:13;32452:19;32463:7;32452:10;:19::i;:::-;32318:153;;;;;;;;;;;;;;32500:28;32520:7;32500;:15;32508:6;32500:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32482:7;:15;32490:6;32482:15;;;;;;;;;;;;;;;:46;;;;32557:28;32577:7;32557;:15;32565:6;32557:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32539:7;:15;32547:6;32539:15;;;;;;;;;;;;;;;:46;;;;32617:39;32640:15;32617:7;:18;32625:9;32617:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32596:7;:18;32604:9;32596:18;;;;;;;;;;;;;;;:60;;;;32688:39;32711:15;32688:7;:18;32696:9;32688:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32667:7;:18;32675:9;32667:18;;;;;;;;;;;;;;;:60;;;;32746:34;32761:6;32769:10;32746:14;:34::i;:::-;32791:20;32797:6;32805:5;32791;:20::i;:::-;32822:23;32834:4;32840;32822:11;:23::i;:::-;32878:9;32861:44;;32870:6;32861:44;;;32889:15;32861:44;;;;;;:::i;:::-;;;;;;;;32307:606;;;;;;;32216:697;;;:::o;38156:125::-;38210:15;;38200:7;:25;;;;38252:21;;38236:13;:37;;;;38156:125::o;37578:133::-;37643:7;37670:31;37695:5;37670:20;37682:7;;37670;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;37663:38;;37578:133;;;:::o;37437:::-;37501:7;37528:32;37554:5;37528:21;37540:8;;37528:7;:11;;:21;;;;:::i;:::-;:25;;:32;;;;:::i;:::-;37521:39;;37437:133;;;:::o;37719:166::-;37789:7;37816:61;37861:5;37816:26;37828:13;;37816:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;37809:68;;37719:166;;;:::o;37034:385::-;37099:19;37122:10;:8;:10::i;:::-;37099:33;;37143:18;37164:22;37174:11;37164:5;:9;;:22;;;;:::i;:::-;37143:43;;37219:35;37243:10;37219:7;:19;37235:1;37219:19;;;;;;;;;;;;;;;;:23;;:35;;;;:::i;:::-;37197:7;:19;37213:1;37197:19;;;;;;;;;;;;;;;:57;;;;37268:11;:23;37288:1;37268:23;;;;;;;;;;;;;;;;;;;;;;;;;37265:93;;;37328:30;37352:5;37328:7;:19;37344:1;37328:19;;;;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;37306:7;:19;37322:1;37306:19;;;;;;;;;;;;;;;:52;;;;37265:93;37399:1;37374:35;;37383:6;37374:35;;;37403:5;37374:35;;;;;;:::i;:::-;;;;;;;;37088:331;;37034:385;;:::o;36586:440::-;36665:19;36688:10;:8;:10::i;:::-;36665:33;;36709:18;36730:27;36745:11;36730:10;:14;;:27;;;;:::i;:::-;36709:48;;36793:38;36820:10;36793:7;:22;36809:4;36793:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36768:7;:22;36784:4;36768:22;;;;;;;;;;;;;;;:63;;;;36845:11;:26;36865:4;36845:26;;;;;;;;;;;;;;;;;;;;;;;;;36842:107;;;36911:38;36938:10;36911:7;:22;36927:4;36911:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36886:7;:22;36902:4;36886:22;;;;;;;;;;;;;;;:63;;;;36842:107;36990:4;36965:43;;36974:6;36965:43;;;36997:10;36965:43;;;;;;:::i;:::-;;;;;;;;36654:372;;36586:440;;:::o;34272:147::-;34350:17;34362:4;34350:7;;:11;;:17;;;;:::i;:::-;34340:7;:27;;;;34391:20;34406:4;34391:10;;:14;;:20;;;;:::i;:::-;34378:10;:33;;;;34272:147;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:329::-;6625:6;6674:2;6662:9;6653:7;6649:23;6645:32;6642:119;;;6680:79;;:::i;:::-;6642:119;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6566:329;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:323::-;7692:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:119;;;7747:79;;:::i;:::-;7709:119;7867:1;7892:50;7934:7;7925:6;7914:9;7910:22;7892:50;:::i;:::-;7882:60;;7838:114;7636:323;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:182::-;8585:34;8581:1;8573:6;8569:14;8562:58;8445:182;:::o;8633:366::-;8775:3;8796:67;8860:2;8855:3;8796:67;:::i;:::-;8789:74;;8872:93;8961:3;8872:93;:::i;:::-;8990:2;8985:3;8981:12;8974:19;;8633:366;;;:::o;9005:419::-;9171:4;9209:2;9198:9;9194:18;9186:26;;9258:9;9252:4;9248:20;9244:1;9233:9;9229:17;9222:47;9286:131;9412:4;9286:131;:::i;:::-;9278:139;;9005:419;;;:::o;9430:180::-;9478:77;9475:1;9468:88;9575:4;9572:1;9565:15;9599:4;9596:1;9589:15;9616:320;9660:6;9697:1;9691:4;9687:12;9677:22;;9744:1;9738:4;9734:12;9765:18;9755:81;;9821:4;9813:6;9809:17;9799:27;;9755:81;9883:2;9875:6;9872:14;9852:18;9849:38;9846:84;;;9902:18;;:::i;:::-;9846:84;9667:269;9616:320;;;:::o;9942:229::-;10082:34;10078:1;10070:6;10066:14;10059:58;10151:12;10146:2;10138:6;10134:15;10127:37;9942:229;:::o;10177:366::-;10319:3;10340:67;10404:2;10399:3;10340:67;:::i;:::-;10333:74;;10416:93;10505:3;10416:93;:::i;:::-;10534:2;10529:3;10525:12;10518:19;;10177:366;;;:::o;10549:419::-;10715:4;10753:2;10742:9;10738:18;10730:26;;10802:9;10796:4;10792:20;10788:1;10777:9;10773:17;10766:47;10830:131;10956:4;10830:131;:::i;:::-;10822:139;;10549:419;;;:::o;10974:177::-;11114:29;11110:1;11102:6;11098:14;11091:53;10974:177;:::o;11157:366::-;11299:3;11320:67;11384:2;11379:3;11320:67;:::i;:::-;11313:74;;11396:93;11485:3;11396:93;:::i;:::-;11514:2;11509:3;11505:12;11498:19;;11157:366;;;:::o;11529:419::-;11695:4;11733:2;11722:9;11718:18;11710:26;;11782:9;11776:4;11772:20;11768:1;11757:9;11753:17;11746:47;11810:131;11936:4;11810:131;:::i;:::-;11802:139;;11529:419;;;:::o;11954:180::-;12002:77;11999:1;11992:88;12099:4;12096:1;12089:15;12123:4;12120:1;12113:15;12140:180;12188:77;12185:1;12178:88;12285:4;12282:1;12275:15;12309:4;12306:1;12299:15;12326:191;12366:4;12386:20;12404:1;12386:20;:::i;:::-;12381:25;;12420:20;12438:1;12420:20;:::i;:::-;12415:25;;12459:1;12456;12453:8;12450:34;;;12464:18;;:::i;:::-;12450:34;12509:1;12506;12502:9;12494:17;;12326:191;;;;:::o;12523:180::-;12571:77;12568:1;12561:88;12668:4;12665:1;12658:15;12692:4;12689:1;12682:15;12709:233;12748:3;12771:24;12789:5;12771:24;:::i;:::-;12762:33;;12817:66;12810:5;12807:77;12804:103;;;12887:18;;:::i;:::-;12804:103;12934:1;12927:5;12923:13;12916:20;;12709:233;;;:::o;12948:181::-;13088:33;13084:1;13076:6;13072:14;13065:57;12948:181;:::o;13135:366::-;13277:3;13298:67;13362:2;13357:3;13298:67;:::i;:::-;13291:74;;13374:93;13463:3;13374:93;:::i;:::-;13492:2;13487:3;13483:12;13476:19;;13135:366;;;:::o;13507:419::-;13673:4;13711:2;13700:9;13696:18;13688:26;;13760:9;13754:4;13750:20;13746:1;13735:9;13731:17;13724:47;13788:131;13914:4;13788:131;:::i;:::-;13780:139;;13507:419;;;:::o;13932:222::-;14072:34;14068:1;14060:6;14056:14;14049:58;14141:5;14136:2;14128:6;14124:15;14117:30;13932:222;:::o;14160:366::-;14302:3;14323:67;14387:2;14382:3;14323:67;:::i;:::-;14316:74;;14399:93;14488:3;14399:93;:::i;:::-;14517:2;14512:3;14508:12;14501:19;;14160:366;;;:::o;14532:419::-;14698:4;14736:2;14725:9;14721:18;14713:26;;14785:9;14779:4;14775:20;14771:1;14760:9;14756:17;14749:47;14813:131;14939:4;14813:131;:::i;:::-;14805:139;;14532:419;;;:::o;14957:181::-;15097:33;15093:1;15085:6;15081:14;15074:57;14957:181;:::o;15144:366::-;15286:3;15307:67;15371:2;15366:3;15307:67;:::i;:::-;15300:74;;15383:93;15472:3;15383:93;:::i;:::-;15501:2;15496:3;15492:12;15485:19;;15144:366;;;:::o;15516:419::-;15682:4;15720:2;15709:9;15705:18;15697:26;;15769:9;15763:4;15759:20;15755:1;15744:9;15740:17;15733:47;15797:131;15923:4;15797:131;:::i;:::-;15789:139;;15516:419;;;:::o;15941:305::-;15981:3;16000:20;16018:1;16000:20;:::i;:::-;15995:25;;16034:20;16052:1;16034:20;:::i;:::-;16029:25;;16188:1;16120:66;16116:74;16113:1;16110:81;16107:107;;;16194:18;;:::i;:::-;16107:107;16238:1;16235;16231:9;16224:16;;15941:305;;;;:::o;16252:225::-;16392:34;16388:1;16380:6;16376:14;16369:58;16461:8;16456:2;16448:6;16444:15;16437:33;16252:225;:::o;16483:366::-;16625:3;16646:67;16710:2;16705:3;16646:67;:::i;:::-;16639:74;;16722:93;16811:3;16722:93;:::i;:::-;16840:2;16835:3;16831:12;16824:19;;16483:366;;;:::o;16855:419::-;17021:4;17059:2;17048:9;17044:18;17036:26;;17108:9;17102:4;17098:20;17094:1;17083:9;17079:17;17072:47;17136:131;17262:4;17136:131;:::i;:::-;17128:139;;16855:419;;;:::o;17280:348::-;17320:7;17343:20;17361:1;17343:20;:::i;:::-;17338:25;;17377:20;17395:1;17377:20;:::i;:::-;17372:25;;17565:1;17497:66;17493:74;17490:1;17487:81;17482:1;17475:9;17468:17;17464:105;17461:131;;;17572:18;;:::i;:::-;17461:131;17620:1;17617;17613:9;17602:20;;17280:348;;;;:::o;17634:180::-;17682:77;17679:1;17672:88;17779:4;17776:1;17769:15;17803:4;17800:1;17793:15;17820:185;17860:1;17877:20;17895:1;17877:20;:::i;:::-;17872:25;;17911:20;17929:1;17911:20;:::i;:::-;17906:25;;17950:1;17940:35;;17955:18;;:::i;:::-;17940:35;17997:1;17994;17990:9;17985:14;;17820:185;;;;:::o;18011:220::-;18151:34;18147:1;18139:6;18135:14;18128:58;18220:3;18215:2;18207:6;18203:15;18196:28;18011:220;:::o;18237:366::-;18379:3;18400:67;18464:2;18459:3;18400:67;:::i;:::-;18393:74;;18476:93;18565:3;18476:93;:::i;:::-;18594:2;18589:3;18585:12;18578:19;;18237:366;;;:::o;18609:419::-;18775:4;18813:2;18802:9;18798:18;18790:26;;18862:9;18856:4;18852:20;18848:1;18837:9;18833:17;18826:47;18890:131;19016:4;18890:131;:::i;:::-;18882:139;;18609:419;;;:::o;19034:223::-;19174:34;19170:1;19162:6;19158:14;19151:58;19243:6;19238:2;19230:6;19226:15;19219:31;19034:223;:::o;19263:366::-;19405:3;19426:67;19490:2;19485:3;19426:67;:::i;:::-;19419:74;;19502:93;19591:3;19502:93;:::i;:::-;19620:2;19615:3;19611:12;19604:19;;19263:366;;;:::o;19635:419::-;19801:4;19839:2;19828:9;19824:18;19816:26;;19888:9;19882:4;19878:20;19874:1;19863:9;19859:17;19852:47;19916:131;20042:4;19916:131;:::i;:::-;19908:139;;19635:419;;;:::o;20060:221::-;20200:34;20196:1;20188:6;20184:14;20177:58;20269:4;20264:2;20256:6;20252:15;20245:29;20060:221;:::o;20287:366::-;20429:3;20450:67;20514:2;20509:3;20450:67;:::i;:::-;20443:74;;20526:93;20615:3;20526:93;:::i;:::-;20644:2;20639:3;20635:12;20628:19;;20287:366;;;:::o;20659:419::-;20825:4;20863:2;20852:9;20848:18;20840:26;;20912:9;20906:4;20902:20;20898:1;20887:9;20883:17;20876:47;20940:131;21066:4;20940:131;:::i;:::-;20932:139;;20659:419;;;:::o;21084:224::-;21224:34;21220:1;21212:6;21208:14;21201:58;21293:7;21288:2;21280:6;21276:15;21269:32;21084:224;:::o;21314:366::-;21456:3;21477:67;21541:2;21536:3;21477:67;:::i;:::-;21470:74;;21553:93;21642:3;21553:93;:::i;:::-;21671:2;21666:3;21662:12;21655:19;;21314:366;;;:::o;21686:419::-;21852:4;21890:2;21879:9;21875:18;21867:26;;21939:9;21933:4;21929:20;21925:1;21914:9;21910:17;21903:47;21967:131;22093:4;21967:131;:::i;:::-;21959:139;;21686:419;;;:::o;22111:228::-;22251:34;22247:1;22239:6;22235:14;22228:58;22320:11;22315:2;22307:6;22303:15;22296:36;22111:228;:::o;22345:366::-;22487:3;22508:67;22572:2;22567:3;22508:67;:::i;:::-;22501:74;;22584:93;22673:3;22584:93;:::i;:::-;22702:2;22697:3;22693:12;22686:19;;22345:366;;;:::o;22717:419::-;22883:4;22921:2;22910:9;22906:18;22898:26;;22970:9;22964:4;22960:20;22956:1;22945:9;22941:17;22934:47;22998:131;23124:4;22998:131;:::i;:::-;22990:139;;22717:419;;;:::o;23142:177::-;23282:29;23278:1;23270:6;23266:14;23259:53;23142:177;:::o;23325:366::-;23467:3;23488:67;23552:2;23547:3;23488:67;:::i;:::-;23481:74;;23564:93;23653:3;23564:93;:::i;:::-;23682:2;23677:3;23673:12;23666:19;;23325:366;;;:::o;23697:419::-;23863:4;23901:2;23890:9;23886:18;23878:26;;23950:9;23944:4;23940:20;23936:1;23925:9;23921:17;23914:47;23978:131;24104:4;23978:131;:::i;:::-;23970:139;;23697:419;;;:::o;24122:147::-;24223:11;24260:3;24245:18;;24122:147;;;;:::o;24275:114::-;;:::o;24395:398::-;24554:3;24575:83;24656:1;24651:3;24575:83;:::i;:::-;24568:90;;24667:93;24756:3;24667:93;:::i;:::-;24785:1;24780:3;24776:11;24769:18;;24395:398;;;:::o;24799:379::-;24983:3;25005:147;25148:3;25005:147;:::i;:::-;24998:154;;25169:3;25162:10;;24799:379;;;:::o;25184:172::-;25324:24;25320:1;25312:6;25308:14;25301:48;25184:172;:::o;25362:366::-;25504:3;25525:67;25589:2;25584:3;25525:67;:::i;:::-;25518:74;;25601:93;25690:3;25601:93;:::i;:::-;25719:2;25714:3;25710:12;25703:19;;25362:366;;;:::o;25734:419::-;25900:4;25938:2;25927:9;25923:18;25915:26;;25987:9;25981:4;25977:20;25973:1;25962:9;25958:17;25951:47;26015:131;26141:4;26015:131;:::i;:::-;26007:139;;25734:419;;;:::o;26159:332::-;26280:4;26318:2;26307:9;26303:18;26295:26;;26331:71;26399:1;26388:9;26384:17;26375:6;26331:71;:::i;:::-;26412:72;26480:2;26469:9;26465:18;26456:6;26412:72;:::i;:::-;26159:332;;;;;:::o;26497:171::-;26637:23;26633:1;26625:6;26621:14;26614:47;26497:171;:::o;26674:366::-;26816:3;26837:67;26901:2;26896:3;26837:67;:::i;:::-;26830:74;;26913:93;27002:3;26913:93;:::i;:::-;27031:2;27026:3;27022:12;27015:19;;26674:366;;;:::o;27046:419::-;27212:4;27250:2;27239:9;27235:18;27227:26;;27299:9;27293:4;27289:20;27285:1;27274:9;27270:17;27263:47;27327:131;27453:4;27327:131;:::i;:::-;27319:139;;27046:419;;;:::o;27471:180::-;27519:77;27516:1;27509:88;27616:4;27613:1;27606:15;27640:4;27637:1;27630:15;27657:143;27714:5;27745:6;27739:13;27730:22;;27761:33;27788:5;27761:33;:::i;:::-;27657:143;;;;:::o;27806:351::-;27876:6;27925:2;27913:9;27904:7;27900:23;27896:32;27893:119;;;27931:79;;:::i;:::-;27893:119;28051:1;28076:64;28132:7;28123:6;28112:9;28108:22;28076:64;:::i;:::-;28066:74;;28022:128;27806:351;;;;:::o;28163:85::-;28208:7;28237:5;28226:16;;28163:85;;;:::o;28254:158::-;28312:9;28345:61;28363:42;28372:32;28398:5;28372:32;:::i;:::-;28363:42;:::i;:::-;28345:61;:::i;:::-;28332:74;;28254:158;;;:::o;28418:147::-;28513:45;28552:5;28513:45;:::i;:::-;28508:3;28501:58;28418:147;;:::o;28571:114::-;28638:6;28672:5;28666:12;28656:22;;28571:114;;;:::o;28691:184::-;28790:11;28824:6;28819:3;28812:19;28864:4;28859:3;28855:14;28840:29;;28691:184;;;;:::o;28881:132::-;28948:4;28971:3;28963:11;;29001:4;28996:3;28992:14;28984:22;;28881:132;;;:::o;29019:108::-;29096:24;29114:5;29096:24;:::i;:::-;29091:3;29084:37;29019:108;;:::o;29133:179::-;29202:10;29223:46;29265:3;29257:6;29223:46;:::i;:::-;29301:4;29296:3;29292:14;29278:28;;29133:179;;;;:::o;29318:113::-;29388:4;29420;29415:3;29411:14;29403:22;;29318:113;;;:::o;29467:732::-;29586:3;29615:54;29663:5;29615:54;:::i;:::-;29685:86;29764:6;29759:3;29685:86;:::i;:::-;29678:93;;29795:56;29845:5;29795:56;:::i;:::-;29874:7;29905:1;29890:284;29915:6;29912:1;29909:13;29890:284;;;29991:6;29985:13;30018:63;30077:3;30062:13;30018:63;:::i;:::-;30011:70;;30104:60;30157:6;30104:60;:::i;:::-;30094:70;;29950:224;29937:1;29934;29930:9;29925:14;;29890:284;;;29894:14;30190:3;30183:10;;29591:608;;;29467:732;;;;:::o;30205:831::-;30468:4;30506:3;30495:9;30491:19;30483:27;;30520:71;30588:1;30577:9;30573:17;30564:6;30520:71;:::i;:::-;30601:80;30677:2;30666:9;30662:18;30653:6;30601:80;:::i;:::-;30728:9;30722:4;30718:20;30713:2;30702:9;30698:18;30691:48;30756:108;30859:4;30850:6;30756:108;:::i;:::-;30748:116;;30874:72;30942:2;30931:9;30927:18;30918:6;30874:72;:::i;:::-;30956:73;31024:3;31013:9;31009:19;31000:6;30956:73;:::i;:::-;30205:831;;;;;;;;:::o

Swarm Source

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