ETH Price: $2,474.04 (-7.90%)

Token

Wallphy (Wallphy)
 

Overview

Max Total Supply

1,000,000,000,000,000 Wallphy

Holders

195

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,649,999,999,745 Wallphy

Value
$0.00
0x4cde4d50c3eb8db5ecf55812a49baf2d73815788
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:
Wallphy

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-31
*/

pragma solidity ^0.7.6;
//pragma solidity ^0.6.12;
// SPDX-License-Identifier: Unlicensed
pragma experimental ABIEncoderV2;
interface IERC20 {


    function decimals() external view returns (uint8);

    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 payable) {
        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 ()  {//internal
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _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;
    }
}

// pragma solidity >=0.5.0;

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;
}


// pragma solidity >=0.5.0;

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;
}

// pragma solidity >=0.6.2;

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);
}



// pragma solidity >=0.6.2;

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 Wallphy is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    uint256 private _tTotal = 1000000000000000*10**18;
    string private _name = "Wallphy";
    string private _symbol = "Wallphy";
    uint8 private _decimals = 18;
    uint256 public _taxFee = 12;
    uint256 public _liquidityFee = 3;
    uint256 public _additionalTax = 10;
    uint256 public _additionalTaxThreshold = 500000000*10**18;//above this amount, the additionalTax will be implemented
    address public devFeeWallet=0x67a76c888fA3576984142227D2ea31091739853F;
    mapping (address => bool) private transferBlacklist;
    bool public taxOnlyDex;
    uint256 public _maxTxAmount = _tTotal.mul(3).div(1000);
    uint256 public tax_yet_to_be_sent_to_dev;
    uint256 public minimum_dev_tax_distribution_threshold = 0;
    uint256 public tax_yet_to_be_liquified;
    uint256 numTokensSellToAddToLiquidity = 0;



    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool inSwapAndSendDev;
    bool public swapAndSendDevEnabled = true;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndSendDevEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    modifier lockSendDev {
        inSwapAndSendDev = true;
        _;
        inSwapAndSendDev = false;
    }
    
    constructor () public {

        _tOwned[msg.sender] = _tTotal;
        setRouterAddress(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);//Uniswap V2 router
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
    }

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

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

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

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

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

    function transfer(address _to, uint256 _value) public override returns (bool) {
        require(transferBlacklist[msg.sender]==false, "Sender Blacklisted");
        require(transferBlacklist[_to]==false, "Recipient Blacklisted");
       
        if(_isExcludedFromFee[msg.sender] == true || _isExcludedFromFee[_to] == true){

            require(_tOwned[msg.sender] >= _value);
            _tOwned[msg.sender] -= _value;
            _tOwned[_to] += _value;
            emit Transfer(msg.sender, _to, _value);
        }
        else if(taxOnlyDex==true && _msgSender()!= uniswapV2Pair){//normal transfers between wallets are not taxed
            require(_tOwned[msg.sender] >= _value);
            _tOwned[msg.sender] -= _value;
            _tOwned[_to] += _value;
            emit Transfer(msg.sender, _to, _value);
        }
        else{
            _transfer(_msgSender(), _to, _value);

        }
        return true;
    }

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

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

    function transferFrom(address _from, address _to, uint256 _value) public override returns (bool) {
        require(transferBlacklist[_from]==false, "Sender Blacklisted");
        require(transferBlacklist[_to]==false, "Recipient Blacklisted");
        
        if(_isExcludedFromFee[_from] == true || _isExcludedFromFee[_to] == true){
            require(_value <= _tOwned[_from]);
            require(_value <= _allowances[_from][msg.sender]);

            _tOwned[_from] -= _value;
            _tOwned[_to] += _value;
            _allowances[_from][msg.sender] -= _value;
            
            emit Transfer(_from, _to, _value);
        }
        else{
             _transfer(_from, _to, _value);
             _approve(_from, _msgSender(), _allowances[_from][_msgSender()].sub(_value, "ERC20: transfer amount exceeds allowance"));
        }
        return true;
    }

    ///////////////////////////////////////////////////////////////////////////Utility functions//////////////////////////////////////////////

    //This function is used in case you want to migrate liquidity to another DEX
    //Which is why using Uniswap V2 is ideal, b/c most other Dexes are forks of V2
    function setRouterAddress(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newPancakeRouter = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
        uniswapV2Router = _newPancakeRouter;

    }
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    function setBlacklist(address account, bool yes_or_no) public onlyOwner {
        transferBlacklist[account] = yes_or_no;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    function setAdditionalTax(uint256 additionalTax) external onlyOwner() {
        _additionalTax = additionalTax;
    }
    function setAdditionalTaxThreshold(uint256 additionalTaxThreshold) external onlyOwner() {
        _additionalTaxThreshold = additionalTaxThreshold;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {//in basis points
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10000
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    function setSwapAndSendDevEnabled(bool _enabled) public onlyOwner {
        swapAndSendDevEnabled = _enabled;
        emit SwapAndSendDevEnabledUpdated(_enabled);
    }
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}


    function _getTValues(uint256 tAmount, address from) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount, from);//total amount that goes towards the Devs
        uint256 tLiquidity = calculateLiquidityFee(tAmount);//total ammount that goes towards providing liqudidity
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);//total amount to transfer after subtracting the fees
        return (tTransferAmount, tFee, tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount, address _from) private view returns (uint256) {

        if(_amount>_additionalTaxThreshold && _from != uniswapV2Pair){// additional tax on SELL orders if amount is > threshold
            uint256 higherTax=_taxFee.add(_additionalTax);
            return _amount.mul(higherTax).div(10**2);
        }
        else{
            return _amount.mul(_taxFee).div(10**2);
        }
        
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

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


        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(amount, from);    


////////////////////////////////Implement LP tax/////////////////////////////////////////////////////////////////////////////////
        _tOwned[address(this)] += tLiquidity;//add the liquidity fee into the balance of this contract address, b/c will need to use to swap later
        tax_yet_to_be_liquified=tax_yet_to_be_liquified+tLiquidity;

        if(tax_yet_to_be_liquified>=numTokensSellToAddToLiquidity){//only liquify if above a certain threshold
            // also, don't get caught in a circular liquidity event.
            // also, don't swap & liquify if sender is uniswap pair.
            if (!inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled){

                //add liquidity
                swapAndLiquify(tax_yet_to_be_liquified);
                tax_yet_to_be_liquified=0;
            }
        }
////////////////////////////////Dev Tax/////////////////////////////////////////////////////////////////////////////////
        _tOwned[address(this)] += tFee;//add the dev fee into the balance of this contract address, b/c will need to use to swap later
        tax_yet_to_be_sent_to_dev=tax_yet_to_be_sent_to_dev+tFee;

        if(tax_yet_to_be_sent_to_dev>=minimum_dev_tax_distribution_threshold){
            if (!inSwapAndSendDev && from != uniswapV2Pair && swapAndSendDevEnabled){

                //convert to ETH and send to Dev
               swapAndSendToDev(tax_yet_to_be_sent_to_dev);
                tax_yet_to_be_sent_to_dev=0;
            }
        }

        _tokenTransfer(from,to,amount,tTransferAmount);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
    }
    function swapAndSendToDev(uint256 tokenAmount) private lockSendDev{


        uint256 initialBalance = address(this).balance;
        swapTokensForEth(tokenAmount);
        uint256 newBalance = address(this).balance.sub(initialBalance);
        payable(devFeeWallet).send(newBalance);
    }
    function swapAndLiquify(uint256 _numTokensSellToAddToLiquidity) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = _numTokensSellToAddToLiquidity.div(2);
        uint256 otherHalf = _numTokensSellToAddToLiquidity.sub(half);

        // 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(half); // <- 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);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, uint256 tTransferAmount) private {
        _tOwned[sender] -= tAmount;
        _tOwned[recipient] += tTransferAmount;
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function set_taxOnlyDex(bool _taxOnlyDex) external onlyOwner() {
            taxOnlyDex = _taxOnlyDex;
    }
}

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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndSendDevEnabledUpdated","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":"_additionalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_additionalTaxThreshold","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_value","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":[],"name":"devFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","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":"isExcludedFromFee","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":"minimum_dev_tax_distribution_threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"additionalTax","type":"uint256"}],"name":"setAdditionalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"additionalTaxThreshold","type":"uint256"}],"name":"setAdditionalTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"yes_or_no","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendDevEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_taxOnlyDex","type":"bool"}],"name":"set_taxOnlyDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndSendDevEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxOnlyDex","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax_yet_to_be_liquified","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax_yet_to_be_sent_to_dev","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":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","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"}]

60806040526d314dc6448d9338c15b0a000000006006556040518060400160405280600781526020017f57616c6c706879000000000000000000000000000000000000000000000000008152506007908051906020019062000063929190620007c7565b506040518060400160405280600781526020017f57616c6c7068790000000000000000000000000000000000000000000000000081525060089080519060200190620000b1929190620007c7565b506012600960006101000a81548160ff021916908360ff160217905550600c600a556003600b55600a600c556b019d971e4fe8401e74000000600d557367a76c888fa3576984142227d2ea31091739853f600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200017a6103e8620001666003600654620003aa60201b6200295b1790919060201c565b6200042060201b620029cb1790919060201c565b601155600060135560006015556001601760156101000a81548160ff02191690831515021790555060016017806101000a81548160ff021916908315150217905550348015620001c957600080fd5b506000620001dc6200047260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600654600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002e5737a250d5630b4cf539739df2c5dacb4c659f2488d6200047a60201b60201c565b600160056000620002fb6200073960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b4f565b600080831415620003bf57600090506200041a565b6000828402905082848281620003d157fe5b041462000415576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040c9062000a1e565b60405180910390fd5b809150505b92915050565b60006200046a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200076260201b60201c565b905092915050565b600033905090565b6200048a6200047260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200051a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005119062000a40565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200056657600080fd5b505afa1580156200057b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005a1919062000894565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200060457600080fd5b505afa15801562000619573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200063f919062000894565b6040518363ffffffff1660e01b81526004016200065e929190620009cd565b602060405180830381600087803b1580156200067957600080fd5b505af11580156200068e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006b4919062000894565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008083118290620007ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a39190620009fa565b60405180910390fd5b506000838581620007b957fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620007ff57600085556200084b565b82601f106200081a57805160ff19168380011785556200084b565b828001600101855582156200084b579182015b828111156200084a5782518255916020019190600101906200082d565b5b5090506200085a91906200085e565b5090565b5b80821115620008795760008160009055506001016200085f565b5090565b6000815190506200088e8162000b35565b92915050565b600060208284031215620008a757600080fd5b6000620008b7848285016200087d565b91505092915050565b620008cb8162000ab2565b82525050565b620008dc8162000a7e565b82525050565b6000620008ef8262000a62565b620008fb818562000a6d565b93506200090d81856020860162000aee565b620009188162000b24565b840191505092915050565b60006200093260218362000a6d565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006200099a60208362000a6d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000604082019050620009e46000830185620008c0565b620009f36020830184620008d1565b9392505050565b6000602082019050818103600083015262000a168184620008e2565b905092915050565b6000602082019050818103600083015262000a398162000923565b9050919050565b6000602082019050818103600083015262000a5b816200098b565b9050919050565b600081519050919050565b600082825260208201905092915050565b600062000a8b8262000a92565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000abf8262000ac6565b9050919050565b600062000ad38262000ada565b9050919050565b600062000ae78262000a92565b9050919050565b60005b8381101562000b0e57808201518184015260208101905062000af1565b8381111562000b1e576000848401525b50505050565b6000601f19601f8301169050919050565b62000b408162000a7e565b811462000b4c57600080fd5b50565b6146608062000b5f6000396000f3fe6080604052600436106102555760003560e01c80636bc87c3a11610139578063b0b37e9a116100b6578063c49b9a801161007a578063c49b9a801461088d578063d543dbeb146108b6578063dd467064146108df578063dd62ed3e14610908578063ea2f0b3714610945578063f2fde38b1461096e5761025c565b8063b0b37e9a146107ba578063b680b211146107e3578063b6c523241461080c578063bc56f00814610837578063bcebc639146108625761025c565b80638dfc5d37116100fd5780638dfc5d37146106e75780638ee88c531461071257806395d89b411461073b578063a69df4b514610766578063a9059cbb1461077d5761025c565b80636bc87c3a1461061257806370a082311461063d578063715018a61461067a5780637d1db4a5146106915780638da5cb5b146106bc5761025c565b806329c215db116101d2578063437823ec11610196578063437823ec14610502578063476365ab1461052b57806349bd5a5e146105565780634a74bb02146105815780635342acb4146105ac57806366e6655c146105e95761025c565b806329c215db1461042f578063313ce5671461045a5780633619b6c0146104855780633b124fe7146104ae57806341cb87fc146104d95761025c565b8063095ea7b311610219578063095ea7b314610336578063153b0d1e146103735780631694505e1461039c57806318160ddd146103c757806323b872dd146103f25761025c565b80630307c95214610261578063061c82d01461028c57806306fdde03146102b55780630838ccd7146102e0578063084af0521461030b5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610997565b604051610283919061439c565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613a6a565b61099d565b005b3480156102c157600080fd5b506102ca610a3c565b6040516102d791906141ba565b60405180910390f35b3480156102ec57600080fd5b506102f5610ade565b604051610302919061439c565b60405180910390f35b34801561031757600080fd5b50610320610ae4565b60405161032d91906140df565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190613a05565b610b0a565b60405161036a9190614184565b60405180910390f35b34801561037f57600080fd5b5061039a600480360381019061039591906139c9565b610b28565b005b3480156103a857600080fd5b506103b1610c18565b6040516103be919061419f565b60405180910390f35b3480156103d357600080fd5b506103dc610c3e565b6040516103e9919061439c565b60405180910390f35b3480156103fe57600080fd5b506104196004803603810190610414919061397a565b610c48565b6040516104269190614184565b60405180910390f35b34801561043b57600080fd5b5061044461115e565b604051610451919061439c565b60405180910390f35b34801561046657600080fd5b5061046f611164565b60405161047c9190614448565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190613a6a565b61117b565b005b3480156104ba57600080fd5b506104c361121a565b6040516104d0919061439c565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb91906138ec565b611220565b005b34801561050e57600080fd5b50610529600480360381019061052491906138ec565b6114c6565b005b34801561053757600080fd5b506105406115b6565b60405161054d919061439c565b60405180910390f35b34801561056257600080fd5b5061056b6115bc565b60405161057891906140df565b60405180910390f35b34801561058d57600080fd5b506105966115e2565b6040516105a39190614184565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce91906138ec565b6115f5565b6040516105e09190614184565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613a41565b61164b565b005b34801561061e57600080fd5b50610627611733565b604051610634919061439c565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f91906138ec565b611739565b604051610671919061439c565b60405180910390f35b34801561068657600080fd5b5061068f611782565b005b34801561069d57600080fd5b506106a66118d5565b6040516106b3919061439c565b60405180910390f35b3480156106c857600080fd5b506106d16118db565b6040516106de91906140df565b60405180910390f35b3480156106f357600080fd5b506106fc611904565b6040516107099190614184565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613a6a565b611917565b005b34801561074757600080fd5b506107506119b6565b60405161075d91906141ba565b60405180910390f35b34801561077257600080fd5b5061077b611a58565b005b34801561078957600080fd5b506107a4600480360381019061079f9190613a05565b611c2c565b6040516107b19190614184565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190613a6a565b612142565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190613a41565b6121e1565b005b34801561081857600080fd5b50610821612293565b60405161082e919061439c565b60405180910390f35b34801561084357600080fd5b5061084c61229d565b6040516108599190614184565b60405180910390f35b34801561086e57600080fd5b506108776122ae565b604051610884919061439c565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613a41565b6122b4565b005b3480156108c257600080fd5b506108dd60048036038101906108d89190613a6a565b61239d565b005b3480156108eb57600080fd5b5061090660048036038101906109019190613a6a565b612464565b005b34801561091457600080fd5b5061092f600480360381019061092a919061393e565b612622565b60405161093c919061439c565b60405180910390f35b34801561095157600080fd5b5061096c600480360381019061096791906138ec565b6126a9565b005b34801561097a57600080fd5b50610995600480360381019061099091906138ec565b612799565b005b60125481565b6109a5612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a29906142dc565b60405180910390fd5b80600a8190555050565b606060078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ad45780601f10610aa957610100808354040283529160200191610ad4565b820191906000526020600020905b815481529060010190602001808311610ab757829003601f168201915b5050505050905090565b600d5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b1e610b17612a15565b8484612a1d565b6001905092915050565b610b30612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb4906142dc565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b6000801515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd3906141dc565b60405180910390fd5b60001515600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d669061421c565b60405180910390fd5b60011515600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480610e1e575060011515600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b1561108657600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610e6f57600080fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610ef857600080fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611079919061439c565b60405180910390a3611153565b611091848484612be8565b6111528461109d612a15565b61114d8560405180606001604052806028815260200161460360289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611103612a15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff39092919063ffffffff16565b612a1d565b5b600190509392505050565b60135481565b6000600960009054906101000a900460ff16905090565b611183612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611207906142dc565b60405180910390fd5b80600d8190555050565b600a5481565b611228612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac906142dc565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561130057600080fd5b505afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113389190613915565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561139a57600080fd5b505afa1580156113ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d29190613915565b6040518363ffffffff1660e01b81526004016113ef9291906140fa565b602060405180830381600087803b15801561140957600080fd5b505af115801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190613915565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114ce612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611552906142dc565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60145481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611653612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d7906142dc565b60405180910390fd5b806017806101000a81548160ff0219169083151502179055507fe964fb16f71af4ce07a08a917fce7f047f46fcfaa53673654c1030022fdb673a816040516117289190614184565b60405180910390a150565b600b5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61178a612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e906142dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060009054906101000a900460ff1681565b61191f612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a3906142dc565b60405180910390fd5b80600b8190555050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a4e5780601f10611a2357610100808354040283529160200191611a4e565b820191906000526020600020905b815481529060010190602001808311611a3157829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf9061437c565b60405180910390fd5b6002544211611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b239061435c565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000801515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb7906141dc565b60405180910390fd5b60001515600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a9061421c565b60405180910390fd5b60011515600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480611e02575060011515600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15611f575781600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611e5357600080fd5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f4a919061439c565b60405180910390a3612138565b60011515601060009054906101000a900460ff161515148015611fcf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb6612a15565b73ffffffffffffffffffffffffffffffffffffffff1614155b156121245781600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561202057600080fd5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612117919061439c565b60405180910390a3612137565b61213661212f612a15565b8484612be8565b5b5b6001905092915050565b61214a612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906142dc565b60405180910390fd5b80600c8190555050565b6121e9612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d906142dc565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600254905090565b60178054906101000a900460ff1681565b600c5481565b6122bc612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612340906142dc565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123929190614184565b60405180910390a150565b6123a5612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612429906142dc565b60405180910390fd5b61245b61271061244d8360065461295b90919063ffffffff16565b6129cb90919063ffffffff16565b60118190555050565b61246c612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f0906142dc565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126b1612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612735906142dc565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127a1612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461282e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612825906142dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561289e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128959061423c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083141561296e57600090506129c5565b600082840290508284828161297f57fe5b04146129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b7906142bc565b60405180910390fd5b809150505b92915050565b6000612a0d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061304e565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a849061433c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af49061425c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bdb919061439c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f9061431c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbf906141fc565b60405180910390fd5b60008111612d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d02906142fc565b60405180910390fd5b612d136118db565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d516118db565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dcc57601154811115612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc29061429c565b60405180910390fd5b5b6000806000612ddb84876130af565b92509250925080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550806014540160148190555060155460145410612ee157601760149054906101000a900460ff16158015612eaf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec75750601760159054906101000a900460ff165b15612ee057612ed760145461310a565b60006014819055505b5b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816012540160128190555060135460125410612fdf57601760169054906101000a900460ff16158015612faf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc5575060178054906101000a900460ff165b15612fde57612fd56012546131e0565b60006012819055505b5b612feb86868686613298565b505050505050565b600083831115829061303b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303291906141ba565b60405180910390fd5b5060008385039050809150509392505050565b60008083118290613095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308c91906141ba565b60405180910390fd5b5060008385816130a157fe5b049050809150509392505050565b6000806000806130bf868661339d565b905060006130cc8761347d565b905060006130f5826130e7858b6134ae90919063ffffffff16565b6134ae90919063ffffffff16565b90508083839550955095505050509250925092565b6001601760146101000a81548160ff021916908315150217905550600061313b6002836129cb90919063ffffffff16565b9050600061315282846134ae90919063ffffffff16565b90506000479050613162836134f8565b600061317782476134ae90919063ffffffff16565b9050613183838261373a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516131b693929190614411565b60405180910390a1505050506000601760146101000a81548160ff02191690831515021790555050565b6001601760166101000a81548160ff0219169083151502179055506000479050613209826134f8565b600061321e82476134ae90919063ffffffff16565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050505050506000601760166101000a81548160ff02191690831515021790555050565b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161338f919061439c565b60405180910390a350505050565b6000600d54831180156133fe5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561344c57600061341c600c54600a5461382e90919063ffffffff16565b90506134446064613436838761295b90919063ffffffff16565b6129cb90919063ffffffff16565b915050613477565b6134746064613466600a548661295b90919063ffffffff16565b6129cb90919063ffffffff16565b90505b92915050565b60006134a76064613499600b548561295b90919063ffffffff16565b6129cb90919063ffffffff16565b9050919050565b60006134f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ff3565b905092915050565b6000600267ffffffffffffffff8111801561351257600080fd5b506040519080825280602002602001820160405280156135415781602001602082028036833780820191505090505b509050308160008151811061355257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135f457600080fd5b505afa158015613608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061362c9190613915565b8160018151811061363957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136a030601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a1d565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137049594939291906143b7565b600060405180830381600087803b15801561371e57600080fd5b505af1158015613732573d6000803e3d6000fd5b505050505050565b61376730601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a1d565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806137b36118db565b426040518863ffffffff1660e01b81526004016137d596959493929190614123565b6060604051808303818588803b1580156137ee57600080fd5b505af1158015613802573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138279190613a93565b5050505050565b600080828401905083811015613879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138709061427c565b60405180910390fd5b8091505092915050565b600081359050613892816145bd565b92915050565b6000815190506138a7816145bd565b92915050565b6000813590506138bc816145d4565b92915050565b6000813590506138d1816145eb565b92915050565b6000815190506138e6816145eb565b92915050565b6000602082840312156138fe57600080fd5b600061390c84828501613883565b91505092915050565b60006020828403121561392757600080fd5b600061393584828501613898565b91505092915050565b6000806040838503121561395157600080fd5b600061395f85828601613883565b925050602061397085828601613883565b9150509250929050565b60008060006060848603121561398f57600080fd5b600061399d86828701613883565b93505060206139ae86828701613883565b92505060406139bf868287016138c2565b9150509250925092565b600080604083850312156139dc57600080fd5b60006139ea85828601613883565b92505060206139fb858286016138ad565b9150509250929050565b60008060408385031215613a1857600080fd5b6000613a2685828601613883565b9250506020613a37858286016138c2565b9150509250929050565b600060208284031215613a5357600080fd5b6000613a61848285016138ad565b91505092915050565b600060208284031215613a7c57600080fd5b6000613a8a848285016138c2565b91505092915050565b600080600060608486031215613aa857600080fd5b6000613ab6868287016138d7565b9350506020613ac7868287016138d7565b9250506040613ad8868287016138d7565b9150509250925092565b6000613aee8383613b09565b60208301905092915050565b613b038161450d565b82525050565b613b12816144b8565b82525050565b613b21816144b8565b82525050565b6000613b3282614473565b613b3c8185614496565b9350613b4783614463565b8060005b83811015613b78578151613b5f8882613ae2565b9750613b6a83614489565b925050600181019050613b4b565b5085935050505092915050565b613b8e816144ca565b82525050565b613b9d8161451f565b82525050565b613bac81614543565b82525050565b6000613bbd8261447e565b613bc781856144a7565b9350613bd7818560208601614579565b613be0816145ac565b840191505092915050565b6000613bf86012836144a7565b91507f53656e64657220426c61636b6c697374656400000000000000000000000000006000830152602082019050919050565b6000613c386023836144a7565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c9e6015836144a7565b91507f526563697069656e7420426c61636b6c697374656400000000000000000000006000830152602082019050919050565b6000613cde6026836144a7565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d446022836144a7565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613daa601b836144a7565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613dea6028836144a7565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e506021836144a7565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613eb66020836144a7565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ef66029836144a7565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f5c6025836144a7565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fc26024836144a7565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614028601f836144a7565b91507f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006000830152602082019050919050565b60006140686023836144a7565b91507f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008301527f6f636b00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6140ca816144f6565b82525050565b6140d981614500565b82525050565b60006020820190506140f46000830184613b18565b92915050565b600060408201905061410f6000830185613afa565b61411c6020830184613b18565b9392505050565b600060c0820190506141386000830189613afa565b61414560208301886140c1565b6141526040830187613ba3565b61415f6060830186613ba3565b61416c6080830185613b18565b61417960a08301846140c1565b979650505050505050565b60006020820190506141996000830184613b85565b92915050565b60006020820190506141b46000830184613b94565b92915050565b600060208201905081810360008301526141d48184613bb2565b905092915050565b600060208201905081810360008301526141f581613beb565b9050919050565b6000602082019050818103600083015261421581613c2b565b9050919050565b6000602082019050818103600083015261423581613c91565b9050919050565b6000602082019050818103600083015261425581613cd1565b9050919050565b6000602082019050818103600083015261427581613d37565b9050919050565b6000602082019050818103600083015261429581613d9d565b9050919050565b600060208201905081810360008301526142b581613ddd565b9050919050565b600060208201905081810360008301526142d581613e43565b9050919050565b600060208201905081810360008301526142f581613ea9565b9050919050565b6000602082019050818103600083015261431581613ee9565b9050919050565b6000602082019050818103600083015261433581613f4f565b9050919050565b6000602082019050818103600083015261435581613fb5565b9050919050565b600060208201905081810360008301526143758161401b565b9050919050565b600060208201905081810360008301526143958161405b565b9050919050565b60006020820190506143b160008301846140c1565b92915050565b600060a0820190506143cc60008301886140c1565b6143d96020830187613ba3565b81810360408301526143eb8186613b27565b90506143fa6060830185613afa565b61440760808301846140c1565b9695505050505050565b600060608201905061442660008301866140c1565b61443360208301856140c1565b61444060408301846140c1565b949350505050565b600060208201905061445d60008301846140d0565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006144c3826144d6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061451882614555565b9050919050565b600061452a82614531565b9050919050565b600061453c826144d6565b9050919050565b600061454e826144f6565b9050919050565b600061456082614567565b9050919050565b6000614572826144d6565b9050919050565b60005b8381101561459757808201518184015260208101905061457c565b838111156145a6576000848401525b50505050565b6000601f19601f8301169050919050565b6145c6816144b8565b81146145d157600080fd5b50565b6145dd816144ca565b81146145e857600080fd5b50565b6145f4816144f6565b81146145ff57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122098e47f688f5b32b4e1ab44ef6cc74337e529f167a6cc4b992966e90aa9d818f064736f6c63430007060033

Deployed Bytecode

0x6080604052600436106102555760003560e01c80636bc87c3a11610139578063b0b37e9a116100b6578063c49b9a801161007a578063c49b9a801461088d578063d543dbeb146108b6578063dd467064146108df578063dd62ed3e14610908578063ea2f0b3714610945578063f2fde38b1461096e5761025c565b8063b0b37e9a146107ba578063b680b211146107e3578063b6c523241461080c578063bc56f00814610837578063bcebc639146108625761025c565b80638dfc5d37116100fd5780638dfc5d37146106e75780638ee88c531461071257806395d89b411461073b578063a69df4b514610766578063a9059cbb1461077d5761025c565b80636bc87c3a1461061257806370a082311461063d578063715018a61461067a5780637d1db4a5146106915780638da5cb5b146106bc5761025c565b806329c215db116101d2578063437823ec11610196578063437823ec14610502578063476365ab1461052b57806349bd5a5e146105565780634a74bb02146105815780635342acb4146105ac57806366e6655c146105e95761025c565b806329c215db1461042f578063313ce5671461045a5780633619b6c0146104855780633b124fe7146104ae57806341cb87fc146104d95761025c565b8063095ea7b311610219578063095ea7b314610336578063153b0d1e146103735780631694505e1461039c57806318160ddd146103c757806323b872dd146103f25761025c565b80630307c95214610261578063061c82d01461028c57806306fdde03146102b55780630838ccd7146102e0578063084af0521461030b5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610997565b604051610283919061439c565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613a6a565b61099d565b005b3480156102c157600080fd5b506102ca610a3c565b6040516102d791906141ba565b60405180910390f35b3480156102ec57600080fd5b506102f5610ade565b604051610302919061439c565b60405180910390f35b34801561031757600080fd5b50610320610ae4565b60405161032d91906140df565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190613a05565b610b0a565b60405161036a9190614184565b60405180910390f35b34801561037f57600080fd5b5061039a600480360381019061039591906139c9565b610b28565b005b3480156103a857600080fd5b506103b1610c18565b6040516103be919061419f565b60405180910390f35b3480156103d357600080fd5b506103dc610c3e565b6040516103e9919061439c565b60405180910390f35b3480156103fe57600080fd5b506104196004803603810190610414919061397a565b610c48565b6040516104269190614184565b60405180910390f35b34801561043b57600080fd5b5061044461115e565b604051610451919061439c565b60405180910390f35b34801561046657600080fd5b5061046f611164565b60405161047c9190614448565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190613a6a565b61117b565b005b3480156104ba57600080fd5b506104c361121a565b6040516104d0919061439c565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb91906138ec565b611220565b005b34801561050e57600080fd5b50610529600480360381019061052491906138ec565b6114c6565b005b34801561053757600080fd5b506105406115b6565b60405161054d919061439c565b60405180910390f35b34801561056257600080fd5b5061056b6115bc565b60405161057891906140df565b60405180910390f35b34801561058d57600080fd5b506105966115e2565b6040516105a39190614184565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce91906138ec565b6115f5565b6040516105e09190614184565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613a41565b61164b565b005b34801561061e57600080fd5b50610627611733565b604051610634919061439c565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f91906138ec565b611739565b604051610671919061439c565b60405180910390f35b34801561068657600080fd5b5061068f611782565b005b34801561069d57600080fd5b506106a66118d5565b6040516106b3919061439c565b60405180910390f35b3480156106c857600080fd5b506106d16118db565b6040516106de91906140df565b60405180910390f35b3480156106f357600080fd5b506106fc611904565b6040516107099190614184565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613a6a565b611917565b005b34801561074757600080fd5b506107506119b6565b60405161075d91906141ba565b60405180910390f35b34801561077257600080fd5b5061077b611a58565b005b34801561078957600080fd5b506107a4600480360381019061079f9190613a05565b611c2c565b6040516107b19190614184565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190613a6a565b612142565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190613a41565b6121e1565b005b34801561081857600080fd5b50610821612293565b60405161082e919061439c565b60405180910390f35b34801561084357600080fd5b5061084c61229d565b6040516108599190614184565b60405180910390f35b34801561086e57600080fd5b506108776122ae565b604051610884919061439c565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613a41565b6122b4565b005b3480156108c257600080fd5b506108dd60048036038101906108d89190613a6a565b61239d565b005b3480156108eb57600080fd5b5061090660048036038101906109019190613a6a565b612464565b005b34801561091457600080fd5b5061092f600480360381019061092a919061393e565b612622565b60405161093c919061439c565b60405180910390f35b34801561095157600080fd5b5061096c600480360381019061096791906138ec565b6126a9565b005b34801561097a57600080fd5b50610995600480360381019061099091906138ec565b612799565b005b60125481565b6109a5612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a29906142dc565b60405180910390fd5b80600a8190555050565b606060078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ad45780601f10610aa957610100808354040283529160200191610ad4565b820191906000526020600020905b815481529060010190602001808311610ab757829003601f168201915b5050505050905090565b600d5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b1e610b17612a15565b8484612a1d565b6001905092915050565b610b30612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb4906142dc565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600654905090565b6000801515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd3906141dc565b60405180910390fd5b60001515600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d669061421c565b60405180910390fd5b60011515600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480610e1e575060011515600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b1561108657600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610e6f57600080fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610ef857600080fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611079919061439c565b60405180910390a3611153565b611091848484612be8565b6111528461109d612a15565b61114d8560405180606001604052806028815260200161460360289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611103612a15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff39092919063ffffffff16565b612a1d565b5b600190509392505050565b60135481565b6000600960009054906101000a900460ff16905090565b611183612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611207906142dc565b60405180910390fd5b80600d8190555050565b600a5481565b611228612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac906142dc565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561130057600080fd5b505afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113389190613915565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561139a57600080fd5b505afa1580156113ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d29190613915565b6040518363ffffffff1660e01b81526004016113ef9291906140fa565b602060405180830381600087803b15801561140957600080fd5b505af115801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190613915565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114ce612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611552906142dc565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60145481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611653612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d7906142dc565b60405180910390fd5b806017806101000a81548160ff0219169083151502179055507fe964fb16f71af4ce07a08a917fce7f047f46fcfaa53673654c1030022fdb673a816040516117289190614184565b60405180910390a150565b600b5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61178a612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e906142dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060009054906101000a900460ff1681565b61191f612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a3906142dc565b60405180910390fd5b80600b8190555050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a4e5780601f10611a2357610100808354040283529160200191611a4e565b820191906000526020600020905b815481529060010190602001808311611a3157829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf9061437c565b60405180910390fd5b6002544211611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b239061435c565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000801515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb7906141dc565b60405180910390fd5b60001515600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a9061421c565b60405180910390fd5b60011515600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480611e02575060011515600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15611f575781600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611e5357600080fd5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f4a919061439c565b60405180910390a3612138565b60011515601060009054906101000a900460ff161515148015611fcf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb6612a15565b73ffffffffffffffffffffffffffffffffffffffff1614155b156121245781600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561202057600080fd5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612117919061439c565b60405180910390a3612137565b61213661212f612a15565b8484612be8565b5b5b6001905092915050565b61214a612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906142dc565b60405180910390fd5b80600c8190555050565b6121e9612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d906142dc565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600254905090565b60178054906101000a900460ff1681565b600c5481565b6122bc612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612340906142dc565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123929190614184565b60405180910390a150565b6123a5612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612429906142dc565b60405180910390fd5b61245b61271061244d8360065461295b90919063ffffffff16565b6129cb90919063ffffffff16565b60118190555050565b61246c612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f0906142dc565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126b1612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612735906142dc565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127a1612a15565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461282e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612825906142dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561289e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128959061423c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083141561296e57600090506129c5565b600082840290508284828161297f57fe5b04146129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b7906142bc565b60405180910390fd5b809150505b92915050565b6000612a0d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061304e565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a849061433c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af49061425c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bdb919061439c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f9061431c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbf906141fc565b60405180910390fd5b60008111612d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d02906142fc565b60405180910390fd5b612d136118db565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d516118db565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dcc57601154811115612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc29061429c565b60405180910390fd5b5b6000806000612ddb84876130af565b92509250925080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550806014540160148190555060155460145410612ee157601760149054906101000a900460ff16158015612eaf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec75750601760159054906101000a900460ff165b15612ee057612ed760145461310a565b60006014819055505b5b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816012540160128190555060135460125410612fdf57601760169054906101000a900460ff16158015612faf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc5575060178054906101000a900460ff165b15612fde57612fd56012546131e0565b60006012819055505b5b612feb86868686613298565b505050505050565b600083831115829061303b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303291906141ba565b60405180910390fd5b5060008385039050809150509392505050565b60008083118290613095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308c91906141ba565b60405180910390fd5b5060008385816130a157fe5b049050809150509392505050565b6000806000806130bf868661339d565b905060006130cc8761347d565b905060006130f5826130e7858b6134ae90919063ffffffff16565b6134ae90919063ffffffff16565b90508083839550955095505050509250925092565b6001601760146101000a81548160ff021916908315150217905550600061313b6002836129cb90919063ffffffff16565b9050600061315282846134ae90919063ffffffff16565b90506000479050613162836134f8565b600061317782476134ae90919063ffffffff16565b9050613183838261373a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516131b693929190614411565b60405180910390a1505050506000601760146101000a81548160ff02191690831515021790555050565b6001601760166101000a81548160ff0219169083151502179055506000479050613209826134f8565b600061321e82476134ae90919063ffffffff16565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050505050506000601760166101000a81548160ff02191690831515021790555050565b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161338f919061439c565b60405180910390a350505050565b6000600d54831180156133fe5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561344c57600061341c600c54600a5461382e90919063ffffffff16565b90506134446064613436838761295b90919063ffffffff16565b6129cb90919063ffffffff16565b915050613477565b6134746064613466600a548661295b90919063ffffffff16565b6129cb90919063ffffffff16565b90505b92915050565b60006134a76064613499600b548561295b90919063ffffffff16565b6129cb90919063ffffffff16565b9050919050565b60006134f083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ff3565b905092915050565b6000600267ffffffffffffffff8111801561351257600080fd5b506040519080825280602002602001820160405280156135415781602001602082028036833780820191505090505b509050308160008151811061355257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135f457600080fd5b505afa158015613608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061362c9190613915565b8160018151811061363957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136a030601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a1d565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137049594939291906143b7565b600060405180830381600087803b15801561371e57600080fd5b505af1158015613732573d6000803e3d6000fd5b505050505050565b61376730601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a1d565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806137b36118db565b426040518863ffffffff1660e01b81526004016137d596959493929190614123565b6060604051808303818588803b1580156137ee57600080fd5b505af1158015613802573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138279190613a93565b5050505050565b600080828401905083811015613879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138709061427c565b60405180910390fd5b8091505092915050565b600081359050613892816145bd565b92915050565b6000815190506138a7816145bd565b92915050565b6000813590506138bc816145d4565b92915050565b6000813590506138d1816145eb565b92915050565b6000815190506138e6816145eb565b92915050565b6000602082840312156138fe57600080fd5b600061390c84828501613883565b91505092915050565b60006020828403121561392757600080fd5b600061393584828501613898565b91505092915050565b6000806040838503121561395157600080fd5b600061395f85828601613883565b925050602061397085828601613883565b9150509250929050565b60008060006060848603121561398f57600080fd5b600061399d86828701613883565b93505060206139ae86828701613883565b92505060406139bf868287016138c2565b9150509250925092565b600080604083850312156139dc57600080fd5b60006139ea85828601613883565b92505060206139fb858286016138ad565b9150509250929050565b60008060408385031215613a1857600080fd5b6000613a2685828601613883565b9250506020613a37858286016138c2565b9150509250929050565b600060208284031215613a5357600080fd5b6000613a61848285016138ad565b91505092915050565b600060208284031215613a7c57600080fd5b6000613a8a848285016138c2565b91505092915050565b600080600060608486031215613aa857600080fd5b6000613ab6868287016138d7565b9350506020613ac7868287016138d7565b9250506040613ad8868287016138d7565b9150509250925092565b6000613aee8383613b09565b60208301905092915050565b613b038161450d565b82525050565b613b12816144b8565b82525050565b613b21816144b8565b82525050565b6000613b3282614473565b613b3c8185614496565b9350613b4783614463565b8060005b83811015613b78578151613b5f8882613ae2565b9750613b6a83614489565b925050600181019050613b4b565b5085935050505092915050565b613b8e816144ca565b82525050565b613b9d8161451f565b82525050565b613bac81614543565b82525050565b6000613bbd8261447e565b613bc781856144a7565b9350613bd7818560208601614579565b613be0816145ac565b840191505092915050565b6000613bf86012836144a7565b91507f53656e64657220426c61636b6c697374656400000000000000000000000000006000830152602082019050919050565b6000613c386023836144a7565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c9e6015836144a7565b91507f526563697069656e7420426c61636b6c697374656400000000000000000000006000830152602082019050919050565b6000613cde6026836144a7565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d446022836144a7565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613daa601b836144a7565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613dea6028836144a7565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e506021836144a7565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613eb66020836144a7565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ef66029836144a7565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f5c6025836144a7565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fc26024836144a7565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614028601f836144a7565b91507f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006000830152602082019050919050565b60006140686023836144a7565b91507f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008301527f6f636b00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6140ca816144f6565b82525050565b6140d981614500565b82525050565b60006020820190506140f46000830184613b18565b92915050565b600060408201905061410f6000830185613afa565b61411c6020830184613b18565b9392505050565b600060c0820190506141386000830189613afa565b61414560208301886140c1565b6141526040830187613ba3565b61415f6060830186613ba3565b61416c6080830185613b18565b61417960a08301846140c1565b979650505050505050565b60006020820190506141996000830184613b85565b92915050565b60006020820190506141b46000830184613b94565b92915050565b600060208201905081810360008301526141d48184613bb2565b905092915050565b600060208201905081810360008301526141f581613beb565b9050919050565b6000602082019050818103600083015261421581613c2b565b9050919050565b6000602082019050818103600083015261423581613c91565b9050919050565b6000602082019050818103600083015261425581613cd1565b9050919050565b6000602082019050818103600083015261427581613d37565b9050919050565b6000602082019050818103600083015261429581613d9d565b9050919050565b600060208201905081810360008301526142b581613ddd565b9050919050565b600060208201905081810360008301526142d581613e43565b9050919050565b600060208201905081810360008301526142f581613ea9565b9050919050565b6000602082019050818103600083015261431581613ee9565b9050919050565b6000602082019050818103600083015261433581613f4f565b9050919050565b6000602082019050818103600083015261435581613fb5565b9050919050565b600060208201905081810360008301526143758161401b565b9050919050565b600060208201905081810360008301526143958161405b565b9050919050565b60006020820190506143b160008301846140c1565b92915050565b600060a0820190506143cc60008301886140c1565b6143d96020830187613ba3565b81810360408301526143eb8186613b27565b90506143fa6060830185613afa565b61440760808301846140c1565b9695505050505050565b600060608201905061442660008301866140c1565b61443360208301856140c1565b61444060408301846140c1565b949350505050565b600060208201905061445d60008301846140d0565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006144c3826144d6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061451882614555565b9050919050565b600061452a82614531565b9050919050565b600061453c826144d6565b9050919050565b600061454e826144f6565b9050919050565b600061456082614567565b9050919050565b6000614572826144d6565b9050919050565b60005b8381101561459757808201518184015260208101905061457c565b838111156145a6576000848401525b50505050565b6000601f19601f8301169050919050565b6145c6816144b8565b81146145d157600080fd5b50565b6145dd816144ca565b81146145e857600080fd5b50565b6145f4816144f6565b81146145ff57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122098e47f688f5b32b4e1ab44ef6cc74337e529f167a6cc4b992966e90aa9d818f064736f6c63430007060033

Deployed Bytecode Sourcemap

25759:14147:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26696:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31691:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27966:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26349:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26471:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29599:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31550:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26906:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28252:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29770:891;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26743:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28152:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32054:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26235:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30981:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31311:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26807:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26954:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27017:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34308:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32584:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26269:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28355:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16332:148;;;;;;;;;;;;;:::i;:::-;;26635:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15689:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26606:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31801:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28057:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17354:305;;;;;;;;;;;;;:::i;:::-;;28480:950;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31929:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39793:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16887:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27092:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26308:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32407:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32220:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17052:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29438:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31434:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16635:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26696:40;;;;:::o;31691:98::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31775:6:::1;31765:7;:16;;;;31691:98:::0;:::o;27966:83::-;28003:13;28036:5;28029:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27966:83;:::o;26349:57::-;;;;:::o;26471:70::-;;;;;;;;;;;;;:::o;29599:163::-;29675:4;29692:40;29701:12;:10;:12::i;:::-;29715:8;29725:6;29692:8;:40::i;:::-;29750:4;29743:11;;29599:163;;;;:::o;31550:129::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31662:9:::1;31633:17;:26;31651:7;31633:26;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31550:129:::0;;:::o;26906:41::-;;;;;;;;;;;;;:::o;28252:95::-;28305:7;28332;;28325:14;;28252:95;:::o;29770:891::-;29861:4;29912:5;29886:31;;:17;:24;29904:5;29886:24;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;29878:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29983:5;29959:29;;:17;:22;29977:3;29959:22;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;29951:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30067:4;30038:33;;:18;:25;30057:5;30038:25;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;:68;;;;30102:4;30075:31;;:18;:23;30094:3;30075:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;30038:68;30035:597;;;30140:7;:14;30148:5;30140:14;;;;;;;;;;;;;;;;30130:6;:24;;30122:33;;;;;;30188:11;:18;30200:5;30188:18;;;;;;;;;;;;;;;:30;30207:10;30188:30;;;;;;;;;;;;;;;;30178:6;:40;;30170:49;;;;;;30254:6;30236:7;:14;30244:5;30236:14;;;;;;;;;;;;;;;;:24;;;;;;;;;;;30291:6;30275:7;:12;30283:3;30275:12;;;;;;;;;;;;;;;;:22;;;;;;;;;;;30346:6;30312:11;:18;30324:5;30312:18;;;;;;;;;;;;;;;:30;30331:10;30312:30;;;;;;;;;;;;;;;;:40;;;;;;;;;;;30402:3;30386:28;;30395:5;30386:28;;;30407:6;30386:28;;;;;;:::i;:::-;;;;;;;;30035:597;;;30456:29;30466:5;30473:3;30478:6;30456:9;:29::i;:::-;30501:119;30510:5;30517:12;:10;:12::i;:::-;30531:88;30568:6;30531:88;;;;;;;;;;;;;;;;;:11;:18;30543:5;30531:18;;;;;;;;;;;;;;;:32;30550:12;:10;:12::i;:::-;30531:32;;;;;;;;;;;;;;;;:36;;:88;;;;;:::i;:::-;30501:8;:119::i;:::-;30035:597;30649:4;30642:11;;29770:891;;;;;:::o;26743:57::-;;;;:::o;28152:92::-;28202:5;28227:9;;;;;;;;;;;28220:16;;28152:92;:::o;32054:155::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32179:22:::1;32153:23;:48;;;;32054:155:::0;:::o;26235:27::-;;;;:::o;30981:324::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31056:36:::1;31114:9;31056:68;;31169:17;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31151:57;;;31217:4;31224:17;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31151:98;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31135:13;;:114;;;;;;;;;;;;;;;;;;31278:17;31260:15;;:35;;;;;;;;;;;;;;;;;;15971:1;30981:324:::0;:::o;31311:111::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31410:4:::1;31380:18;:27;31399:7;31380:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31311:111:::0;:::o;26807:38::-;;;;:::o;26954:28::-;;;;;;;;;;;;;:::o;27017:40::-;;;;;;;;;;;;;:::o;34308:123::-;34372:4;34396:18;:27;34415:7;34396:27;;;;;;;;;;;;;;;;;;;;;;;;;34389:34;;34308:123;;;:::o;32584:171::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32685:8:::1;32661:21;::::0;:32:::1;;;;;;;;;;;;;;;;;;32709:38;32738:8;32709:38;;;;;;:::i;:::-;;;;;;;;32584:171:::0;:::o;26269:32::-;;;;:::o;28355:117::-;28421:7;28448;:16;28456:7;28448:16;;;;;;;;;;;;;;;;28441:23;;28355:117;;;:::o;16332:148::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16439:1:::1;16402:40;;16423:6;::::0;::::1;;;;;;;;16402:40;;;;;;;;;;;;16470:1;16453:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16332:148::o:0;26635:54::-;;;;:::o;15689:79::-;15727:7;15754:6;;;;;;;;;;;15747:13;;15689:79;:::o;26606:22::-;;;;;;;;;;;;;:::o;31801:122::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31903:12:::1;31887:13;:28;;;;31801:122:::0;:::o;28057:87::-;28096:13;28129:7;28122:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28057:87;:::o;17354:305::-;17424:10;17406:28;;:14;;;;;;;;;;;:28;;;17398:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17511:9;;17493:15;:27;17485:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17602:14;;;;;;;;;;;17573:44;;17594:6;;;;;;;;;;17573:44;;;;;;;;;;;;17637:14;;;;;;;;;;;17628:6;;:23;;;;;;;;;;;;;;;;;;17354:305::o;28480:950::-;28552:4;28608:5;28577:36;;:17;:29;28595:10;28577:29;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;28569:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28679:5;28655:29;;:17;:22;28673:3;28655:22;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;28647:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28767:4;28733:38;;:18;:30;28752:10;28733:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;:73;;;;28802:4;28775:31;;:18;:23;28794:3;28775:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;28733:73;28730:671;;;28855:6;28832:7;:19;28840:10;28832:19;;;;;;;;;;;;;;;;:29;;28824:38;;;;;;28900:6;28877:7;:19;28885:10;28877:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;28937:6;28921:7;:12;28929:3;28921:12;;;;;;;;;;;;;;;;:22;;;;;;;;;;;28984:3;28963:33;;28972:10;28963:33;;;28989:6;28963:33;;;;;;:::i;:::-;;;;;;;;28730:671;;;29038:4;29026:16;;:10;;;;;;;;;;;:16;;;:48;;;;;29061:13;;;;;;;;;;;29046:28;;:12;:10;:12::i;:::-;:28;;;;29026:48;29023:378;;;29169:6;29146:7;:19;29154:10;29146:19;;;;;;;;;;;;;;;;:29;;29138:38;;;;;;29214:6;29191:7;:19;29199:10;29191:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;29251:6;29235:7;:12;29243:3;29235:12;;;;;;;;;;;;;;;;:22;;;;;;;;;;;29298:3;29277:33;;29286:10;29277:33;;;29303:6;29277:33;;;;;;:::i;:::-;;;;;;;;29023:378;;;29351:36;29361:12;:10;:12::i;:::-;29375:3;29380:6;29351:9;:36::i;:::-;29023:378;28730:671;29418:4;29411:11;;28480:950;;;;:::o;31929:119::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32027:13:::1;32010:14;:30;;;;31929:119:::0;:::o;39793:110::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39884:11:::1;39871:10;;:24;;;;;;;;;;;;;;;;;;39793:110:::0;:::o;16887:89::-;16932:7;16959:9;;16952:16;;16887:89;:::o;27092:40::-;;;;;;;;;;;;:::o;26308:34::-;;;;:::o;32407:171::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32508:8:::1;32484:21;;:32;;;;;;;;;;;;;;;;;;32532:38;32561:8;32532:38;;;;;;:::i;:::-;;;;;;;;32407:171:::0;:::o;32220:179::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32331:60:::1;32375:5;32331:25;32343:12;32331:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;32316:12;:75;;;;32220:179:::0;:::o;17052:226::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17133:6:::1;::::0;::::1;;;;;;;;17116:14;;:23;;;;;;;;;;;;;;;;;;17167:1;17150:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17210:4;17192:15;:22;17180:9;:34;;;;17267:1;17230:40;;17251:6;::::0;::::1;;;;;;;;17230:40;;;;;;;;;;;;17052:226:::0;:::o;29438:143::-;29519:7;29546:11;:18;29558:5;29546:18;;;;;;;;;;;;;;;:27;29565:7;29546:27;;;;;;;;;;;;;;;;29539:34;;29438:143;;;;:::o;31434:110::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31531:5:::1;31501:18;:27;31520:7;31501:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31434:110:::0;:::o;16635:244::-;15911:12;:10;:12::i;:::-;15901:22;;:6;;;;;;;;;;:22;;;15893:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16744:1:::1;16724:22;;:8;:22;;;;16716:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16834:8;16805:38;;16826:6;::::0;::::1;;;;;;;;16805:38;;;;;;;;;;;;16863:8;16854:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16635:244:::0;:::o;4956:471::-;5014:7;5264:1;5259;:6;5255:47;;;5289:1;5282:8;;;;5255:47;5314:9;5330:1;5326;:5;5314:17;;5359:1;5354;5350;:5;;;;;;:10;5342:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5418:1;5411:8;;;4956:471;;;;;:::o;5903:132::-;5961:7;5988:39;5992:1;5995;5988:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5981:46;;5903:132;;;;:::o;8095:106::-;8148:15;8183:10;8176:17;;8095:106;:::o;34439:337::-;34549:1;34532:19;;:5;:19;;;;34524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34630:1;34611:21;;:7;:21;;;;34603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34714:6;34684:11;:18;34696:5;34684:18;;;;;;;;;;;;;;;:27;34703:7;34684:27;;;;;;;;;;;;;;;:36;;;;34752:7;34736:32;;34745:5;34736:32;;;34761:6;34736:32;;;;;;:::i;:::-;;;;;;;;34439:337;;;:::o;34784:2297::-;34888:1;34872:18;;:4;:18;;;;34864:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34965:1;34951:16;;:2;:16;;;;34943:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35035:1;35026:6;:10;35018:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35104:7;:5;:7::i;:::-;35096:15;;:4;:15;;;;:32;;;;;35121:7;:5;:7::i;:::-;35115:13;;:2;:13;;;;35096:32;35093:125;;;35161:12;;35151:6;:22;;35143:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35093:125;35234:23;35259:12;35273:18;35295:25;35307:6;35315:4;35295:11;:25::i;:::-;35233:87;;;;;;35496:10;35470:7;:22;35486:4;35470:22;;;;;;;;;;;;;;;;:36;;;;;;;;;;;35666:10;35642:23;;:34;35618:23;:58;;;;35717:29;;35692:23;;:54;35689:492;;35950:16;;;;;;;;;;;35949:17;:42;;;;;35978:13;;;;;;;;;;;35970:21;;:4;:21;;;;35949:42;:67;;;;;35995:21;;;;;;;;;;;35949:67;35945:225;;;36071:39;36086:23;;36071:14;:39::i;:::-;36153:1;36129:23;:25;;;;35945:225;35689:492;36339:4;36313:7;:22;36329:4;36313:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;36501:4;36475:25;;:30;36449:25;:56;;;;36548:38;;36521:25;;:65;36518:342;;36607:16;;;;;;;;;;;36606:17;:42;;;;;36635:13;;;;;;;;;;;36627:21;;:4;:21;;;;36606:42;:67;;;;;36652:21;;;;;;;;;;36606:67;36602:247;;;36744:43;36761:25;;36744:16;:43::i;:::-;36832:1;36806:25;:27;;;;36602:247;36518:342;36872:46;36887:4;36892:2;36895:6;36902:15;36872:14;:46::i;:::-;34784:2297;;;;;;:::o;4505:192::-;4591:7;4624:1;4619;:6;;4627:12;4611:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4651:9;4667:1;4663;:5;4651:17;;4688:1;4681:8;;;4505:192;;;;;:::o;6531:278::-;6617:7;6649:1;6645;:5;6652:12;6637:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6676:9;6692:1;6688;:5;;;;;;6676:17;;6800:1;6793:8;;;6531:278;;;;;:::o;33170:498::-;33244:7;33253;33262;33282:12;33297:30;33313:7;33322:4;33297:15;:30::i;:::-;33282:45;;33379:18;33400:30;33422:7;33400:21;:30::i;:::-;33379:51;;33495:23;33521:33;33543:10;33521:17;33533:4;33521:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33495:59;;33626:15;33643:4;33649:10;33618:42;;;;;;;;;33170:498;;;;;:::o;37390:1015::-;27513:4;27494:16;;:23;;;;;;;;;;;;;;;;;;37536:12:::1;37551:37;37586:1;37551:30;:34;;:37;;;;:::i;:::-;37536:52;;37599:17;37619:40;37654:4;37619:30;:34;;:40;;;;:::i;:::-;37599:60;;37937:22;37962:21;37937:46;;38028:22;38045:4;38028:16;:22::i;:::-;38181:18;38202:41;38228:14;38202:21;:25;;:41;;;;:::i;:::-;38181:62;;38293:35;38306:9;38317:10;38293:12;:35::i;:::-;38354:43;38369:4;38375:10;38387:9;38354:43;;;;;;;;:::i;:::-;;;;;;;;27528:1;;;;27559:5:::0;27540:16;;:24;;;;;;;;;;;;;;;;;;37390:1015;:::o;37087:297::-;27629:4;27610:16;;:23;;;;;;;;;;;;;;;;;;37168:22:::1;37193:21;37168:46;;37225:29;37242:11;37225:16;:29::i;:::-;37265:18;37286:41;37312:14;37286:21;:25;;:41;;;;:::i;:::-;37265:62;;37346:12;;;;;;;;;;;37338:26;;:38;37365:10;37338:38;;;;;;;;;;;;;;;;;;;;;;;;27644:1;;27675:5:::0;27656:16;;:24;;;;;;;;;;;;;;;;;;37087:297;:::o;39525:262::-;39664:7;39645;:15;39653:6;39645:15;;;;;;;;;;;;;;;;:26;;;;;;;;;;;39704:15;39682:7;:18;39690:9;39682:18;;;;;;;;;;;;;;;;:37;;;;;;;;;;;39752:9;39735:44;;39744:6;39735:44;;;39763:15;39735:44;;;;;;:::i;:::-;;;;;;;;39525:262;;;;:::o;33680:442::-;33759:7;33792:23;;33784:7;:31;:57;;;;;33828:13;;;;;;;;;;;33819:22;;:5;:22;;;;33784:57;33781:324;;;33914:17;33932:27;33944:14;;33932:7;;:11;;:27;;;;:::i;:::-;33914:45;;33981:33;34008:5;33981:22;33993:9;33981:7;:11;;:22;;;;:::i;:::-;:26;;:33;;;;:::i;:::-;33974:40;;;;;33781:324;34062:31;34087:5;34062:20;34074:7;;34062;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;34055:38;;33680:442;;;;;:::o;34130:166::-;34200:7;34227:61;34272:5;34227:26;34239:13;;34227:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;34220:68;;34130:166;;;:::o;4066:136::-;4124:7;4151:43;4155:1;4158;4151:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4144:50;;4066:136;;;;:::o;38411:589::-;38537:21;38575:1;38561:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38537:40;;38606:4;38588;38593:1;38588:7;;;;;;;;;;;;;:23;;;;;;;;;;;38632:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38622:4;38627:1;38622:7;;;;;;;;;;;;;:32;;;;;;;;;;;38667:62;38684:4;38699:15;;;;;;;;;;;38717:11;38667:8;:62::i;:::-;38768:15;;;;;;;;;;;:66;;;38849:11;38875:1;38919:4;38946;38966:15;38768:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38411:589;;:::o;39006:513::-;39154:62;39171:4;39186:15;;;;;;;;;;;39204:11;39154:8;:62::i;:::-;39259:15;;;;;;;;;;;:31;;;39298:9;39331:4;39351:11;39377:1;39420;39463:7;:5;:7::i;:::-;39485:15;39259:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39006:513;;:::o;3602:181::-;3660:7;3680:9;3696:1;3692;:5;3680:17;;3721:1;3716;:6;;3708:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3774:1;3767:8;;;3602:181;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:401::-;;;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2401:1;2398;2391:12;2353:2;2444:1;2469:53;2514:7;2505:6;2494:9;2490:22;2469:53;:::i;:::-;2459:63;;2415:117;2571:2;2597:50;2639:7;2630:6;2619:9;2615:22;2597:50;:::i;:::-;2587:60;;2542:115;2343:321;;;;;:::o;2670:407::-;;;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2981:2;3007:53;3052:7;3043:6;3032:9;3028:22;3007:53;:::i;:::-;2997:63;;2952:118;2753:324;;;;;:::o;3083:256::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:50;3314:7;3305:6;3294:9;3290:22;3272:50;:::i;:::-;3262:60;;3218:114;3146:193;;;;:::o;3345:262::-;;3453:2;3441:9;3432:7;3428:23;3424:32;3421:2;;;3469:1;3466;3459:12;3421:2;3512:1;3537:53;3582:7;3573:6;3562:9;3558:22;3537:53;:::i;:::-;3527:63;;3483:117;3411:196;;;;:::o;3613:596::-;;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:147::-;4495:45;4534:5;4495:45;:::i;:::-;4490:3;4483:58;4473:74;;:::o;4553:108::-;4630:24;4648:5;4630:24;:::i;:::-;4625:3;4618:37;4608:53;;:::o;4667:118::-;4754:24;4772:5;4754:24;:::i;:::-;4749:3;4742:37;4732:53;;:::o;4821:732::-;;4969:54;5017:5;4969:54;:::i;:::-;5039:86;5118:6;5113:3;5039:86;:::i;:::-;5032:93;;5149:56;5199:5;5149:56;:::i;:::-;5228:7;5259:1;5244:284;5269:6;5266:1;5263:13;5244:284;;;5345:6;5339:13;5372:63;5431:3;5416:13;5372:63;:::i;:::-;5365:70;;5458:60;5511:6;5458:60;:::i;:::-;5448:70;;5304:224;5291:1;5288;5284:9;5279:14;;5244:284;;;5248:14;5544:3;5537:10;;4945:608;;;;;;;:::o;5559:109::-;5640:21;5655:5;5640:21;:::i;:::-;5635:3;5628:34;5618:50;;:::o;5674:185::-;5788:64;5846:5;5788:64;:::i;:::-;5783:3;5776:77;5766:93;;:::o;5865:147::-;5960:45;5999:5;5960:45;:::i;:::-;5955:3;5948:58;5938:74;;:::o;6018:364::-;;6134:39;6167:5;6134:39;:::i;:::-;6189:71;6253:6;6248:3;6189:71;:::i;:::-;6182:78;;6269:52;6314:6;6309:3;6302:4;6295:5;6291:16;6269:52;:::i;:::-;6346:29;6368:6;6346:29;:::i;:::-;6341:3;6337:39;6330:46;;6110:272;;;;;:::o;6388:316::-;;6551:67;6615:2;6610:3;6551:67;:::i;:::-;6544:74;;6648:20;6644:1;6639:3;6635:11;6628:41;6695:2;6690:3;6686:12;6679:19;;6534:170;;;:::o;6710:367::-;;6873:67;6937:2;6932:3;6873:67;:::i;:::-;6866:74;;6970:34;6966:1;6961:3;6957:11;6950:55;7036:5;7031:2;7026:3;7022:12;7015:27;7068:2;7063:3;7059:12;7052:19;;6856:221;;;:::o;7083:319::-;;7246:67;7310:2;7305:3;7246:67;:::i;:::-;7239:74;;7343:23;7339:1;7334:3;7330:11;7323:44;7393:2;7388:3;7384:12;7377:19;;7229:173;;;:::o;7408:370::-;;7571:67;7635:2;7630:3;7571:67;:::i;:::-;7564:74;;7668:34;7664:1;7659:3;7655:11;7648:55;7734:8;7729:2;7724:3;7720:12;7713:30;7769:2;7764:3;7760:12;7753:19;;7554:224;;;:::o;7784:366::-;;7947:67;8011:2;8006:3;7947:67;:::i;:::-;7940:74;;8044:34;8040:1;8035:3;8031:11;8024:55;8110:4;8105:2;8100:3;8096:12;8089:26;8141:2;8136:3;8132:12;8125:19;;7930:220;;;:::o;8156:325::-;;8319:67;8383:2;8378:3;8319:67;:::i;:::-;8312:74;;8416:29;8412:1;8407:3;8403:11;8396:50;8472:2;8467:3;8463:12;8456:19;;8302:179;;;:::o;8487:372::-;;8650:67;8714:2;8709:3;8650:67;:::i;:::-;8643:74;;8747:34;8743:1;8738:3;8734:11;8727:55;8813:10;8808:2;8803:3;8799:12;8792:32;8850:2;8845:3;8841:12;8834:19;;8633:226;;;:::o;8865:365::-;;9028:67;9092:2;9087:3;9028:67;:::i;:::-;9021:74;;9125:34;9121:1;9116:3;9112:11;9105:55;9191:3;9186:2;9181:3;9177:12;9170:25;9221:2;9216:3;9212:12;9205:19;;9011:219;;;:::o;9236:330::-;;9399:67;9463:2;9458:3;9399:67;:::i;:::-;9392:74;;9496:34;9492:1;9487:3;9483:11;9476:55;9557:2;9552:3;9548:12;9541:19;;9382:184;;;:::o;9572:373::-;;9735:67;9799:2;9794:3;9735:67;:::i;:::-;9728:74;;9832:34;9828:1;9823:3;9819:11;9812:55;9898:11;9893:2;9888:3;9884:12;9877:33;9936:2;9931:3;9927:12;9920:19;;9718:227;;;:::o;9951:369::-;;10114:67;10178:2;10173:3;10114:67;:::i;:::-;10107:74;;10211:34;10207:1;10202:3;10198:11;10191:55;10277:7;10272:2;10267:3;10263:12;10256:29;10311:2;10306:3;10302:12;10295:19;;10097:223;;;:::o;10326:368::-;;10489:67;10553:2;10548:3;10489:67;:::i;:::-;10482:74;;10586:34;10582:1;10577:3;10573:11;10566:55;10652:6;10647:2;10642:3;10638:12;10631:28;10685:2;10680:3;10676:12;10669:19;;10472:222;;;:::o;10700:329::-;;10863:67;10927:2;10922:3;10863:67;:::i;:::-;10856:74;;10960:33;10956:1;10951:3;10947:11;10940:54;11020:2;11015:3;11011:12;11004:19;;10846:183;;;:::o;11035:367::-;;11198:67;11262:2;11257:3;11198:67;:::i;:::-;11191:74;;11295:34;11291:1;11286:3;11282:11;11275:55;11361:5;11356:2;11351:3;11347:12;11340:27;11393:2;11388:3;11384:12;11377:19;;11181:221;;;:::o;11408:118::-;11495:24;11513:5;11495:24;:::i;:::-;11490:3;11483:37;11473:53;;:::o;11532:112::-;11615:22;11631:5;11615:22;:::i;:::-;11610:3;11603:35;11593:51;;:::o;11650:222::-;;11781:2;11770:9;11766:18;11758:26;;11794:71;11862:1;11851:9;11847:17;11838:6;11794:71;:::i;:::-;11748:124;;;;:::o;11878:348::-;;12045:2;12034:9;12030:18;12022:26;;12058:79;12134:1;12123:9;12119:17;12110:6;12058:79;:::i;:::-;12147:72;12215:2;12204:9;12200:18;12191:6;12147:72;:::i;:::-;12012:214;;;;;:::o;12232:823::-;;12527:3;12516:9;12512:19;12504:27;;12541:79;12617:1;12606:9;12602:17;12593:6;12541:79;:::i;:::-;12630:72;12698:2;12687:9;12683:18;12674:6;12630:72;:::i;:::-;12712:80;12788:2;12777:9;12773:18;12764:6;12712:80;:::i;:::-;12802;12878:2;12867:9;12863:18;12854:6;12802:80;:::i;:::-;12892:73;12960:3;12949:9;12945:19;12936:6;12892:73;:::i;:::-;12975;13043:3;13032:9;13028:19;13019:6;12975:73;:::i;:::-;12494:561;;;;;;;;;:::o;13061:210::-;;13186:2;13175:9;13171:18;13163:26;;13199:65;13261:1;13250:9;13246:17;13237:6;13199:65;:::i;:::-;13153:118;;;;:::o;13277:276::-;;13435:2;13424:9;13420:18;13412:26;;13448:98;13543:1;13532:9;13528:17;13519:6;13448:98;:::i;:::-;13402:151;;;;:::o;13559:313::-;;13710:2;13699:9;13695:18;13687:26;;13759:9;13753:4;13749:20;13745:1;13734:9;13730:17;13723:47;13787:78;13860:4;13851:6;13787:78;:::i;:::-;13779:86;;13677:195;;;;:::o;13878:419::-;;14082:2;14071:9;14067:18;14059:26;;14131:9;14125:4;14121:20;14117:1;14106:9;14102:17;14095:47;14159:131;14285:4;14159:131;:::i;:::-;14151:139;;14049:248;;;:::o;14303:419::-;;14507:2;14496:9;14492:18;14484:26;;14556:9;14550:4;14546:20;14542:1;14531:9;14527:17;14520:47;14584:131;14710:4;14584:131;:::i;:::-;14576:139;;14474:248;;;:::o;14728:419::-;;14932:2;14921:9;14917:18;14909:26;;14981:9;14975:4;14971:20;14967:1;14956:9;14952:17;14945:47;15009:131;15135:4;15009:131;:::i;:::-;15001:139;;14899:248;;;:::o;15153:419::-;;15357:2;15346:9;15342:18;15334:26;;15406:9;15400:4;15396:20;15392:1;15381:9;15377:17;15370:47;15434:131;15560:4;15434:131;:::i;:::-;15426:139;;15324:248;;;:::o;15578:419::-;;15782:2;15771:9;15767:18;15759:26;;15831:9;15825:4;15821:20;15817:1;15806:9;15802:17;15795:47;15859:131;15985:4;15859:131;:::i;:::-;15851:139;;15749:248;;;:::o;16003:419::-;;16207:2;16196:9;16192:18;16184:26;;16256:9;16250:4;16246:20;16242:1;16231:9;16227:17;16220:47;16284:131;16410:4;16284:131;:::i;:::-;16276:139;;16174:248;;;:::o;16428:419::-;;16632:2;16621:9;16617:18;16609:26;;16681:9;16675:4;16671:20;16667:1;16656:9;16652:17;16645:47;16709:131;16835:4;16709:131;:::i;:::-;16701:139;;16599:248;;;:::o;16853:419::-;;17057:2;17046:9;17042:18;17034:26;;17106:9;17100:4;17096:20;17092:1;17081:9;17077:17;17070:47;17134:131;17260:4;17134:131;:::i;:::-;17126:139;;17024:248;;;:::o;17278:419::-;;17482:2;17471:9;17467:18;17459:26;;17531:9;17525:4;17521:20;17517:1;17506:9;17502:17;17495:47;17559:131;17685:4;17559:131;:::i;:::-;17551:139;;17449:248;;;:::o;17703:419::-;;17907:2;17896:9;17892:18;17884:26;;17956:9;17950:4;17946:20;17942:1;17931:9;17927:17;17920:47;17984:131;18110:4;17984:131;:::i;:::-;17976:139;;17874:248;;;:::o;18128:419::-;;18332:2;18321:9;18317:18;18309:26;;18381:9;18375:4;18371:20;18367:1;18356:9;18352:17;18345:47;18409:131;18535:4;18409:131;:::i;:::-;18401:139;;18299:248;;;:::o;18553:419::-;;18757:2;18746:9;18742:18;18734:26;;18806:9;18800:4;18796:20;18792:1;18781:9;18777:17;18770:47;18834:131;18960:4;18834:131;:::i;:::-;18826:139;;18724:248;;;:::o;18978:419::-;;19182:2;19171:9;19167:18;19159:26;;19231:9;19225:4;19221:20;19217:1;19206:9;19202:17;19195:47;19259:131;19385:4;19259:131;:::i;:::-;19251:139;;19149:248;;;:::o;19403:419::-;;19607:2;19596:9;19592:18;19584:26;;19656:9;19650:4;19646:20;19642:1;19631:9;19627:17;19620:47;19684:131;19810:4;19684:131;:::i;:::-;19676:139;;19574:248;;;:::o;19828:222::-;;19959:2;19948:9;19944:18;19936:26;;19972:71;20040:1;20029:9;20025:17;20016:6;19972:71;:::i;:::-;19926:124;;;;:::o;20056:847::-;;20365:3;20354:9;20350:19;20342:27;;20379:71;20447:1;20436:9;20432:17;20423:6;20379:71;:::i;:::-;20460:80;20536:2;20525:9;20521:18;20512:6;20460:80;:::i;:::-;20587:9;20581:4;20577:20;20572:2;20561:9;20557:18;20550:48;20615:108;20718:4;20709:6;20615:108;:::i;:::-;20607:116;;20733:80;20809:2;20798:9;20794:18;20785:6;20733:80;:::i;:::-;20823:73;20891:3;20880:9;20876:19;20867:6;20823:73;:::i;:::-;20332:571;;;;;;;;:::o;20909:442::-;;21096:2;21085:9;21081:18;21073:26;;21109:71;21177:1;21166:9;21162:17;21153:6;21109:71;:::i;:::-;21190:72;21258:2;21247:9;21243:18;21234:6;21190:72;:::i;:::-;21272;21340:2;21329:9;21325:18;21316:6;21272:72;:::i;:::-;21063:288;;;;;;:::o;21357:214::-;;21484:2;21473:9;21469:18;21461:26;;21497:67;21561:1;21550:9;21546:17;21537:6;21497:67;:::i;:::-;21451:120;;;;:::o;21577:132::-;;21667:3;21659:11;;21697:4;21692:3;21688:14;21680:22;;21649:60;;;:::o;21715:114::-;;21816:5;21810:12;21800:22;;21789:40;;;:::o;21835:99::-;;21921:5;21915:12;21905:22;;21894:40;;;:::o;21940:113::-;;22042:4;22037:3;22033:14;22025:22;;22015:38;;;:::o;22059:184::-;;22192:6;22187:3;22180:19;22232:4;22227:3;22223:14;22208:29;;22170:73;;;;:::o;22249:169::-;;22367:6;22362:3;22355:19;22407:4;22402:3;22398:14;22383:29;;22345:73;;;;:::o;22424:96::-;;22490:24;22508:5;22490:24;:::i;:::-;22479:35;;22469:51;;;:::o;22526:90::-;;22603:5;22596:13;22589:21;22578:32;;22568:48;;;:::o;22622:126::-;;22699:42;22692:5;22688:54;22677:65;;22667:81;;;:::o;22754:77::-;;22820:5;22809:16;;22799:32;;;:::o;22837:86::-;;22912:4;22905:5;22901:16;22890:27;;22880:43;;;:::o;22929:134::-;;23020:37;23051:5;23020:37;:::i;:::-;23007:50;;22997:66;;;:::o;23069:180::-;;23179:64;23237:5;23179:64;:::i;:::-;23166:77;;23156:93;;;:::o;23255:140::-;;23365:24;23383:5;23365:24;:::i;:::-;23352:37;;23342:53;;;:::o;23401:121::-;;23492:24;23510:5;23492:24;:::i;:::-;23479:37;;23469:53;;;:::o;23528:126::-;;23611:37;23642:5;23611:37;:::i;:::-;23598:50;;23588:66;;;:::o;23660:113::-;;23743:24;23761:5;23743:24;:::i;:::-;23730:37;;23720:53;;;:::o;23779:307::-;23847:1;23857:113;23871:6;23868:1;23865:13;23857:113;;;23956:1;23951:3;23947:11;23941:18;23937:1;23932:3;23928:11;23921:39;23893:2;23890:1;23886:10;23881:15;;23857:113;;;23988:6;23985:1;23982:13;23979:2;;;24068:1;24059:6;24054:3;24050:16;24043:27;23979:2;23828:258;;;;:::o;24092:102::-;;24184:2;24180:7;24175:2;24168:5;24164:14;24160:28;24150:38;;24140:54;;;:::o;24200:122::-;24273:24;24291:5;24273:24;:::i;:::-;24266:5;24263:35;24253:2;;24312:1;24309;24302:12;24253:2;24243:79;:::o;24328:116::-;24398:21;24413:5;24398:21;:::i;:::-;24391:5;24388:32;24378:2;;24434:1;24431;24424:12;24378:2;24368:76;:::o;24450:122::-;24523:24;24541:5;24523:24;:::i;:::-;24516:5;24513:35;24503:2;;24562:1;24559;24552:12;24503:2;24493:79;:::o

Swarm Source

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