ETH Price: $3,440.11 (+1.43%)
Gas: 4 Gwei

Token

InfinityBit Token (IBIT)
 

Overview

Max Total Supply

5,700,000,000 IBIT

Holders

2,519

Total Transfers

-

Market

Price

$0.00 @ 0.000000 ETH (+2.28%)

Onchain Market Cap

$3,382,608.00

Circulating Supply Market Cap

$2,211,122.00

Other Info

Token Contract (WITH 8 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

IBIT functions as the currency for InfinityBit, an on-chain CEX. It also provides access to an automated AI-powered trading system and the greater InfinityBit ecosystem.

Market

Volume (24H):$1,487.56
Market Capitalization:$2,211,122.00
Circulating Supply:3,724,654,903.00 IBIT
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume
1
Uniswap V2 (Ethereum)
0XA3CB87080E68AD54D00573983D935FA85D168FDE-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.0006
0.0000002 Eth
$1,487.54
2,518,490.887 0XA3CB87080E68AD54D00573983D935FA85D168FDE
100.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
InfinityBitTokenV2

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-20
*/

// SPDX-License-Identifier: AGPL-3.0-only
// v2.0.03200148

/*
  _____        __ _       _ _         ____  _ _         _
 |_   _|      / _(_)     (_) |       |  _ \(_) |       (_)
   | |  _ __ | |_ _ _ __  _| |_ _   _| |_) |_| |_       _  ___
   | | | '_ \|  _| | '_ \| | __| | | |  _ <| | __|     | |/ _ \
  _| |_| | | | | | | | | | | |_| |_| | |_) | | |_   _  | | (_) |
 |_____|_| |_|_| |_|_| |_|_|\__|\__, |____/|_|\__| (_) |_|\___/
                                 __/ |
                                |___/
  v2
*/
// InfinityBit Token (IBIT) - v2
// https://infinitybit.io
// TG: https://t.me/infinitybit_io
// Twitter: https://twitter.com/infinitybit_io

pragma solidity 0.8.18;


// License: MIT
// pragma solidity ^0.8.0;
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

// License: GPL-3.0
// https://github.com/Uniswap

// pragma solidity ^0.8.0;

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

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

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


// License: GPL-3.0
// https://github.com/Uniswap

// pragma solidity ^0.8.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}


// License: GPL-3.0
// https://github.com/Uniswap

// pragma solidity >=0.8.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;
}

//
// InfinityBit Token v2
//
// License: AGPL-3.0-only

// pragma solidity 0.8.18;

contract InfinityBitTokenV2 is IERC20, Ownable {
    using Address for address;

    event TaxesAutoswap(uint256 amount_eth);

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals = 8;
    uint256 private _deployHeight;
    address private _contractDeployer;

    // flags
    bool private _maxWalletEnabled = true;
    bool public _autoSwapTokens = true;
    bool public _transfersEnabled = false;
    bool public _sellFromTaxWallets = true;

    // Maximum Supply is 5,700,000,000. This is immutable and cannot be changed.
    uint256 private immutable _maxSupply = 5_700_000_000 * (10 ** uint256(_decimals));

    // Maximum total tax rate. This is immutable and cannot be changed.
    uint8 private immutable _maxTax = 50; // 5%
    // Maximum wallet. This is immutable and cannot be changed.
    uint256 private immutable _maxWallet = 125000000 * (10 ** uint256(_decimals));

    // Marketing Tax - has one decimal.
    uint8 private _marketingTax = 30; // 3%
    address payable private _marketingWallet = payable(0xd1CB9007D51FB812805d80618A97418Fd388B0C5);
    address payable immutable private _legacyMarketingWallet = payable(0xA6e18D5F6b20dFA84d7d245bb656561f1f9aff69);

    // Developer Tax
    uint8 private _devTax = 18; // 1.8%
    address payable private _devWallet = payable(0x02DAb704810C40C87374eBD85927c3D8a9815Eb0);
    address payable immutable private _legacyDevWallet = payable(0x9d0D8E5e651Ab7d54Af5B0F655b3978504E67E0C);

    // LP Tax
    uint8 private _lpTax = 0; // 0%

    // Burn Address
    address private immutable _burnAddress = 0x000000000000000000000000000000000000D34d;

    // Deadline in seconds for UniswapV2 autoswap
    uint8 private _autoSwapDeadlineSeconds = 0;

    // Taxless Allow-List
    //  This is a list of wallets which are exempt from taxes.
    mapping(address=>bool) TaxlessAllowList;

    // IgnoreMaxWallet Allow-List
    //  This is a list of wallets which are exempt from the maximum wallet.
    mapping(address=>bool) IgnoreMaxWalletAllowList;

    // SwapThreshold - Amount that will be autoswapped- has one decimal.
    uint8 public _swapLimit = 25; // 2.5%
    uint8 public immutable _swapLimitMax = 50; // 5% hardcoded max
    uint8 public _swapThreshold = 10; // 1%
    uint8 public immutable _swapThresholdMax = 50; // 5% hardcoded max

    // Required to recieve ETH from UniswapV2Router on automated token swaps
    receive() external payable {}

    // Uniswap V2
    IUniswapV2Router02 public _uniswapV2Router;
    address private _uniswapV2RouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address private _uniswapUniversalRouter = 0x4648a43B2C14Da09FdF82B161150d3F634f40491;
    address private _uniswapV2PairAddress;
    IUniswapV2Factory public _uniswapV2Factory;

    constructor() payable {
        _name = "InfinityBit Token";
        _symbol = "IBIT";
        _decimals = 8;

        IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(_uniswapV2RouterAddress);
        _uniswapV2Router = uniswapV2Router;

        // Create Uniswap V2 Pair
        _uniswapV2Factory = IUniswapV2Factory(_uniswapV2Router.factory());
        _uniswapV2PairAddress = _uniswapV2Factory.createPair(address(this), _uniswapV2Router.WETH());
        _uniswapV2Router = uniswapV2Router;

        // Mint Supply
        _mint(msg.sender, _maxSupply);
        _totalSupply = _maxSupply;

        // IgnoreMaxWallet Allowlist
        IgnoreMaxWalletAllowList[_uniswapUniversalRouter] = true;
        IgnoreMaxWalletAllowList[_uniswapV2RouterAddress] = true;
        IgnoreMaxWalletAllowList[_uniswapV2PairAddress] = true;
        IgnoreMaxWalletAllowList[_marketingWallet] = true;
        IgnoreMaxWalletAllowList[_devWallet] = true;
        IgnoreMaxWalletAllowList[_legacyMarketingWallet] = true;
        IgnoreMaxWalletAllowList[_legacyDevWallet] = true;
        IgnoreMaxWalletAllowList[address(owner())] = true;

        // Taxless Allowlist
        TaxlessAllowList[_uniswapUniversalRouter] = true;
        TaxlessAllowList[_uniswapV2RouterAddress] = true;
        TaxlessAllowList[_marketingWallet] = true;
        TaxlessAllowList[_devWallet] = true;
        TaxlessAllowList[address(owner())] = true;
    }

    //
    //
    //

    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    function transfer(address to, uint256 amount) public returns (bool) {
        _transfer(msg.sender, to, amount);
        return true;
    }
    function _approve(address from, address spender, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[from][spender] = amount;
        emit Approval(from, spender, amount);
    }
    function _spendAllowance(address from, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(from, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
        unchecked {
            _approve(from, spender, currentAllowance - amount);
        }
        }
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, allowance(msg.sender, spender) + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = allowance(msg.sender, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
    unchecked {
        _approve(msg.sender, spender, currentAllowance - subtractedValue);
    }

        return true;
    }


    //
    //
    //


    function _mint(address to, uint value) internal {
        _totalSupply = _totalSupply+value;
        _balances[to] = _balances[to] + value;
        emit Transfer(address(0), to, value);
    }

    // Once transfers are enabled, they cannot be disabled.
    function enableTransfers() public onlyOwner() {
        _transfersEnabled = true;
    }

    // Set the Dev Wallet Address
    function setDevWallet(address devWallet) public onlyOwner {
        require(devWallet != address(0), "IBIT: cannot set to the zero address");
        _devWallet = payable(devWallet);
    }

    // Set the Marketing Wallet Address
    function setMarketingWallet(address marketingWallet) public onlyOwner {
        require(marketingWallet != address(0), "IBIT: cannot set to the zero address");
        _marketingWallet = payable(marketingWallet);
    }

    function isSell(address sender, address recipient) private view returns (bool) {
        if(sender == _uniswapV2RouterAddress || sender == _uniswapV2PairAddress || sender == _uniswapUniversalRouter) {
            return false;
        }

        if(recipient == _uniswapV2PairAddress || recipient == address(_uniswapV2Router)) {
            return true;
        }

        return false;
    }

    function isBuy(address sender) private view returns (bool) {
        return sender == _uniswapV2PairAddress || sender == address(_uniswapV2Router);
    }

    event AutoswapFailed(uint256 amount);

    function _swapTokensForETH(uint256 amount) private {
        if(amount == 0) {
            return;
        }

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

        _approve(address(this), address(_uniswapV2Router), amount);

        try _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp+_autoSwapDeadlineSeconds
        ) {

        } catch {
            emit AutoswapFailed(amount);
        }
    }

    function addLiquidity(uint256 amount_tokens, uint256 amount_eth) private returns (bool) {
        if(amount_tokens == 0 || amount_eth == 0) {
            return true;
        }

        _approve(address(this), address(_uniswapV2Router), amount_tokens);
        try _uniswapV2Router.addLiquidityETH{value: amount_eth}(
            address(this),
            amount_tokens,
            0,
            0,
            owner(),
            block.timestamp
        ) {
            return true;
        } catch {
            return false;
        }
    }

    function getDevTax() public view returns (uint8) {
        return _devTax;
    }

    function toggleAutoSwapTokens(bool enable) public onlyOwner {
        _autoSwapTokens = enable;
    }

    function getLpTax() public view returns (uint8) {
        return _lpTax;
    }

    function getMarketingTax() public view returns (uint8) {
        return _marketingTax;
    }

    function setDevTax(uint8 tax) public onlyOwner {
        require(_lpTax+_marketingTax+tax <= _maxTax, "IBIT: total tax cannot exceed max tax");
        _devTax = tax;
    }

    function setLpTax(uint8 tax) public onlyOwner {
        require((_devTax+_marketingTax+tax) <= _maxTax, "IBIT: total tax cannot exceed max tax");
        _lpTax = tax;
    }

    function setMarketingTax(uint8 tax) public onlyOwner {
        require(_devTax+_lpTax+tax <= _maxTax, "IBIT: total tax cannot exceed max tax");
        _marketingTax = tax;
    }

    function setAutoswapDeadline(uint8 deadline_seconds) public onlyOwner {
        _autoSwapDeadlineSeconds = deadline_seconds;
    }

    function DetectMaxWalletEnabled() public view returns (bool) {
        return _maxWalletEnabled;
    }

    function ToggleMaxWallet(bool _enable) public onlyOwner {
        _maxWalletEnabled = _enable;
    }

    function SetUniswapV2Pair(address _w) public onlyOwner {
        _uniswapV2PairAddress = _w;
    }

    function GetUniswapV2Pair() public view returns (address) {
        return _uniswapV2PairAddress;
    }

    // Add a wallet address to the taxless allow-list.
    function SetTaxlessAllowList(address _w) public onlyOwner {
        TaxlessAllowList[_w] = true;
    }

    // Remove a wallet address from the taxless allow-list.
    function UnsetTaxlessAllowList(address _w) public onlyOwner {
        TaxlessAllowList[_w] = false;
    }

    // Add a wallet address to the max wallet allow-list.
    function SetMaxWalletAllowList(address _w) public onlyOwner {
        IgnoreMaxWalletAllowList[_w] = true;
    }

    // Remove a wallet address from the max wallet allow-list.
    function UnsetMaxWalletAllowList(address _w) public onlyOwner {
        IgnoreMaxWalletAllowList[_w] = false;
    }

    // Returns true if the provided address is tax-exempt, otherwise returns false.
    function isTaxExempt(address from, address to) public view returns(bool) {
        if(TaxlessAllowList[from] || TaxlessAllowList[to])
        {
            return true;
        }

        if(from == owner() || to == owner())
        {
            return true;
        }

        return false;
    }

    // Returns true if the provided address is maxWallet-exempt, otherwise returns false.
    function isMaxWalletExempt(address _w) public view returns (bool) {
        if(_w == address(owner()))
        {
            return true;
        }

        return IgnoreMaxWalletAllowList[_w];
    }

    // Returns the total tax %
    function totalTax() public view returns (uint8) {
        return _lpTax+_devTax+_marketingTax;
    }

    // Sends Ether to specified 'to' address
    function sendEther(address payable to, uint256 amount) private returns (bool) {
        return to.send(amount);
    }

    // Returns the amount of IBIT tokens in the Liquidity Pool
    function getLiquidityIBIT() public view returns (uint256) {
        return _balances[_uniswapV2PairAddress];
    }

    // Limit the maximum autoswap based on _swapLimit percent
    function getMaxAutoswap() public view returns (uint256 max_autoswap_limit) {
        return (_swapLimit * getLiquidityIBIT()) / 1000;
    }

    // Returns the autoswap limit (ie, the maximum which will be autoswapped) as a percent with one decimal, i.e. 50 = 5%
    function getAutoswapLimit() public view returns (uint8 autoswap_limit_percent) {
        return _swapLimit;
    }

    function setAutoswapLimit(uint8 swapLimit) public onlyOwner {
        require(swapLimit < _swapLimitMax, "IBIT: swapLimit exceeds max");
        _swapLimit = swapLimit;
    }

    // Returns the autoswap threshold,  the minimum tokens which must be
    // reached before an autoswap will occur. expressed as a percent with one decimal, i.e. 50 = 5%
    function getAutoswapThreshold() public view returns (uint8 autoswap_threshold_percent) {
        return _swapThreshold;
    }

    function setAutoswapThreshold(uint8 swapThreshold) public onlyOwner {
        require(_swapThreshold < _swapThresholdMax, "IBIT: swapThreshold exceeds max");
        _swapThreshold = swapThreshold;
    }

    event AutoLiquidityFailed(uint256 token_amount, uint256 eth_amount, uint256 tokens_collected, uint256 tokens_swapped, uint256 eth_collected);
    event AutoLiquiditySuccess(uint256 token_amount, uint256 eth_amount, uint256 tokens_collected, uint256 tokens_swapped, uint256 eth_collected);
    event DeductTaxes(uint256 dev_tax_amount, uint256 marketing_tax_amount, uint256 lp_tax_amount);

    // Returns the maximum amount which can be autoswapped if everything is sold
    function autoswapTotalTokensAvailable(uint256 amount) public view returns (uint256) {
        return _calcLpTaxAmount(amount)/2 + _calcDevTaxAmount(amount) + _calcMarketingTaxAmount(amount) + _balances[_devWallet] + _balances[_marketingWallet];
    }

    function calcAutoswapAmount(uint256 sell_amount) public view returns (uint256) {
        uint256 lp_tokens = _calcLpTaxAmount(sell_amount)/2;
        return lp_tokens + _calcDevTaxAmount(sell_amount) + _calcMarketingTaxAmount(sell_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(_balances[from] >= amount, "ERC20: transfer amount exceeds balance");

        if(!_transfersEnabled) {
            require(from == owner() || to == owner(), "IBIT: transfers disabled until initial LP");
        }

        uint256 tax_amount;

        // Begin Tax Check
        if(isTaxExempt(from, to))
        {
            tax_amount = 0;
        }
        else
        {
            tax_amount = _calcTaxes(amount);
        }

        uint256 transfer_amount = amount - tax_amount;

        // Begin Max Wallet Check, owner always ignores max wallet check.
        if(!isMaxWalletExempt(to) && from != owner() && _maxWalletEnabled)
        {
            require((balanceOf(to) + transfer_amount) <= _maxWallet, "IBIT: maximum wallet cannot be exceeded");
        }

        if(tax_amount == 0)
        {
            _taxlessTransfer(from, to, amount);
            return;
        }

        // Take taxes
        _takeTaxes(from, tax_amount);
        emit DeductTaxes(_calcDevTaxAmount(amount), _calcMarketingTaxAmount(amount), _calcLpTaxAmount(amount));

        if(autoSwapConditionCheck(from, to, amount))
        {
            _autoSwapTaxForEth(from, to, amount);
        }
        else
        {
            // Distribute Taxes (Tokens)
            _balances[_devWallet] += _calcDevTaxAmount(amount);
            _balances[_marketingWallet] += _calcMarketingTaxAmount(amount);
            _balances[address(this)] += _calcLpTaxAmount(amount);
        }

        // Emit
        _taxlessTransfer(from, to, transfer_amount);
    }

    function _autoSwapTaxForEth(address from, address to, uint256 amount) private {
        uint256 autoswap_amount = calcAutoswapAmount(amount);

        if(autoswap_amount == 0)
        {
            return;
        }

        uint256 max_autoswap = getMaxAutoswap();

        if(autoswap_amount < max_autoswap)
        {
            // Take tokens from marketing and dev wallets
            uint256 max_extra_autoswap = max_autoswap-autoswap_amount;
            autoswap_amount += _takeTokensFromMarketingAndDevWallets(max_extra_autoswap);
        }
        else if(autoswap_amount > max_autoswap)
        {
            autoswap_amount = max_autoswap;
        }

        // Execute autoswap
        uint256 startingBalance = address(this).balance;
        _swapTokensForETH(autoswap_amount);
        uint256 ethCollected = address(this).balance - startingBalance;
        emit TaxesAutoswap(ethCollected);

        // Auto Liquidity (LP Tax)
        if(_lpTax > 0 && !isTaxExempt(from, to))
        {
            uint256 tax_amount = _calcTaxes(amount);
            uint256 lp_tokens = _calcLpTaxAmount(amount)/2;
            if(to == _uniswapV2PairAddress && from != _uniswapV2RouterAddress && from != _uniswapUniversalRouter)
            {
                uint256 lp_tax_eth = _calcTaxDistribution(ethCollected, _lpTax);
                if(!addLiquidity(lp_tokens, lp_tax_eth)) {
                    emit AutoLiquidityFailed(lp_tokens, lp_tax_eth, tax_amount, autoswap_amount, ethCollected);
                } else {
                    emit AutoLiquiditySuccess(lp_tokens, lp_tax_eth, tax_amount, autoswap_amount, ethCollected);
                }
            }
        }

        // Distribute Taxes (ETH)
        uint256 marketing_tax_eth = _calcTaxDistribution(ethCollected, _marketingTax);
        uint256 dev_tax_eth = _calcTaxDistribution(ethCollected, _devTax);

        if(marketing_tax_eth > 0) {
            sendEther(_marketingWallet, marketing_tax_eth);
        }

        if(dev_tax_eth > 0) {
            sendEther(_devWallet, dev_tax_eth);
        }
    }

    // Returns true if the conditions are met for an autoswap, otherwise returns false.
    function autoSwapConditionCheck(address from, address to, uint256 amount) public view returns (bool) {
        if(!_autoSwapTokens) {
            return false;
        }

        if(!isSell(from, to)) {
            return false;
        }

        if(_swapThreshold == 0) {
            return true;
        }

        uint256 swapThresholdAmountTokens = (getLiquidityIBIT() * _swapThreshold)/1000;
        if(autoswapTotalTokensAvailable(amount) >= swapThresholdAmountTokens) {
            return true;
        }

        return false;
    }

    function toggleSellFromTaxWallets(bool enable) public onlyOwner {
        _sellFromTaxWallets = enable;
    }

    function takeTokensFromTaxWallets(uint256 max_amount) public onlyOwner returns (uint256 amount_taken) {
        return _takeTokensFromMarketingAndDevWallets(max_amount);
    }

    // Try to take max_extra_autoswap from marketing and dev wallets
    function _takeTokensFromMarketingAndDevWallets(uint256 max_extra_autoswap) private returns (uint256 amount_taken) {
        if(_sellFromTaxWallets == false) {
            return 0;
        }

        // Don't take tokens unless there are at least 100K
        if(_balances[_marketingWallet] + _balances[_devWallet] < 10000000000000)
        {
            return 0;
        }

        uint256 extra_amount_taken = 0;

        if(_balances[_marketingWallet] >= max_extra_autoswap)
        {
            unchecked {
                _balances[_marketingWallet] -= max_extra_autoswap;
                _balances[address(this)] += max_extra_autoswap;
            }
            return max_extra_autoswap;
        }

        if(_balances[_devWallet] >= max_extra_autoswap)
        {
            unchecked {
                _balances[_devWallet] -= max_extra_autoswap;
                _balances[address(this)] += max_extra_autoswap;
            }
            return max_extra_autoswap;
        }

        extra_amount_taken = _balances[_devWallet];

        unchecked {
            _balances[_devWallet] = 0;
            _balances[address(this)] += extra_amount_taken;
        }

        if(extra_amount_taken >= max_extra_autoswap)
        {
            return max_extra_autoswap;
        }

        uint256 mwBalance;
        if(extra_amount_taken + _balances[_marketingWallet] <= max_extra_autoswap)
        {
            mwBalance = _balances[_marketingWallet];

            unchecked {
                _balances[address(this)] += mwBalance;
                _balances[_marketingWallet] = 0;
            }
            return extra_amount_taken + mwBalance;
        }

        uint256 left_to_take = max_extra_autoswap - amount_taken;
        if(_balances[_marketingWallet] >= left_to_take)
        {
            unchecked {
                _balances[_marketingWallet] -= left_to_take;
                _balances[address(this)] += left_to_take;
            }
            return max_extra_autoswap;
        }

        mwBalance = _balances[_marketingWallet];
        unchecked {
            _balances[_marketingWallet] = 0;
            _balances[address(this)] += mwBalance;
        }
        return extra_amount_taken + mwBalance;
    }

    function _calcTaxDistribution(uint256 eth_collected, uint256 tax_rate) private view returns(uint256 distribution_eth)
    {
        // Equivilent to (eth_collected * (tax_rate/totalTax))
        return (eth_collected * tax_rate) / totalTax();
    }

    function _calcLpTaxAmount(uint256 amount) private view returns(uint256 tax)
    {
        return (amount * _lpTax) / 1000;
    }
    function _calcDevTaxAmount(uint256 amount) private view returns(uint256 tax)
    {
        return (amount * _devTax) / 1000;
    }
    function _calcMarketingTaxAmount(uint256 amount) private view returns(uint256 tax)
    {
        return (amount * _marketingTax) / 1000;
    }

    // Given an amount, calculate the taxes which would be collected. Excludes LP tax.
    function _calcTaxes(uint256 amount) public view returns (uint256 tax_to_collect) {
        return _calcDevTaxAmount(amount) + _calcMarketingTaxAmount(amount) + _calcLpTaxAmount(amount);
    }

    // Taxes taxes as specified by 'tax_amount'
    function _takeTaxes(address from, uint256 tax_amount) private {
        if(tax_amount == 0 || totalTax() == 0)
        {
            return;
        }

        // Remove tokens from sender
    unchecked {
        _balances[from] -= tax_amount;
    }

        // Collect taxes
    unchecked {
        _balances[address(this)] += tax_amount;
    }
    }

    function _taxlessTransfer(address from, address to, uint256 amount) private {
    unchecked {
        _balances[from] -= amount;
        _balances[to] += amount;
    }
        emit Transfer(from, to, amount);
    }

    // Migrate from Legacy
    address[] _legacyHolders;
    mapping(address=>uint256) _legacyHoldersBalances;

    bool _holdersAirdropped = false;

    function setLegacyHolder(address _w, uint256 balance) private {
        if(_legacyHoldersBalances[_w] != 0) {
            return; // duplicate
        }

        if(balance == 0) {
            return;
        }

        _legacyHolders.push(_w);
        _legacyHoldersBalances[_w] = balance;
    }

    // Airdrop Legacy Holders
    function initialAirdrop() public onlyOwner {
        require(_holdersAirdropped == false, "IBIT: Holders can only be airdropped once");
        _holdersAirdropped = true;

        setLegacyBalancesFromSnapshot();

        for(uint i = 0; i < _legacyHolders.length; i++) {
            address to = _legacyHolders[i];
            uint256 balance = _legacyHoldersBalances[to];

            _taxlessTransfer(owner(), to, balance);
        }
    }

    function setLegacyBalancesFromSnapshot() private {

        // NULS Partnership
        // 0x649Fd8b99b1d61d8FE7A9C7eec86dcfF829633F0, 14210000100000000); // 142,100,001 IBIT
        _taxlessTransfer(owner(), _legacyMarketingWallet, 14210000100000000);

        // These wallets completed migration from legacy
        setLegacyHolder(0x89Abd93CaBa3657919674a663D55E1C185A4CA25, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0x2e9EdC685510F3B6B92B5aA8B14E66a18707F5aB, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0xDB1C0B51328D40c11ebE5C9C7098477B88551e8d, 2500000000000000); // 25,000,000 IBIT
        setLegacyHolder(0x52747Fd7866eF249b015bB99E95a3169B9eC4497, 10490511753749771); // 104,905,118 IBIT
        setLegacyHolder(0xb2C91Cf2Fd763F2cC4558ed3cEDE401Fc1d1B675, 4000000000000000); // 40,000,000 IBIT
        setLegacyHolder(0x2E64b76130819f30bE2df0A0740D990d706B9926, 9317247665468201); // 93,172,477 IBIT
        setLegacyHolder(0x1E69003E5267E945962ae38578a76222CA408584, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0x16F39f8ff59caead81bC680e6cd663069Eb978BE, 10100000000000000); // 101,000,000 IBIT
        setLegacyHolder(0x6d102206CB3F043E22A62B4b7ecC83b877f85d9A, 5001685678902763); // 50,016,857 IBIT
        setLegacyHolder(0xEC61A284Df18c4937B50880F70EB181d38fe86Bb, 1660752476400742); // 16,607,525 IBIT
        setLegacyHolder(0x4C999827Bc4b51fbd6911f066d8b82baaC286a9b, 3500000000000000); // 35,000,000 IBIT
        setLegacyHolder(0x5415672D7334F8d2798022242675829B16bf94db, 1441870099079523); // 14,418,701 IBIT
        setLegacyHolder(0xdF10d9688528b5b60957D1727a70A30450cE9604, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0x831114051c0edDe239ae672EdcC4c63371deC82b, 3869772286660397); // 38,697,723 IBIT
        setLegacyHolder(0x1d9c8Ae02d75db48dF0d13424cF7fb188dfa4B6E, 2112190583266945); // 21,121,906 IBIT
        setLegacyHolder(0x6e7182cFe90cC9AaD11f7082cC4c462dbFD2D73C, 1083000000000000); // 10,830,000 IBIT
        setLegacyHolder(0x287044c98a99F08764d681eD898aECb68A5543BC, 2320032256026266); // 23,200,323 IBIT
        setLegacyHolder(0x5159cD8087B040E3E5F95e1489ce1018E186795C, 2250000000000000); // 22,500,000 IBIT
        setLegacyHolder(0x5eD277Af83D32fa421091244Fa802e90FE8e896d, 5464909136753054); // 54,649,091 IBIT
        setLegacyHolder(0x7aBc57C6f67853D16a4400685d18eE53980A3F4F, 7697889041792168); // 76,978,890 IBIT
        setLegacyHolder(0x09b3a9Ea542713dcC182728F9DebBdfCB1a0112F, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0xF3598aD305Bbd8b40A480947e00a5dc3E29dC5a5, 4875000000000000); // 48,750,000 IBIT
        setLegacyHolder(0x2Aeda0568E111Da6A465bb735D912899A15015c2, 10782747817992883); // 107,827,478 IBIT
        setLegacyHolder(0xb578B5157Bcc9Fd2e73AcACf7E853FD9F861F55d, 2000000000000000); // 20,000,000 IBIT
        setLegacyHolder(0x16C73eaFAA9c6f915d9026D3C2d1b6E9407d2F73, 5159396904718724); // 51,593,969 IBIT
        setLegacyHolder(0x3140dD4B65C557Fda703B081C475CE4945EaaCa3, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0xe632450E74165110459fEf989bc11E90Ee9029D1, 9350739929318052); // 93,507,399 IBIT
        setLegacyHolder(0xF6E82162D8938D91b44EFd4C307DBa91EcBD6950, 2907543953360030); // 29,075,440 IBIT
        setLegacyHolder(0x33AF2064Be09C34302C4cA8B8529A0E659243016, 660000000000000); // 6,600,000 IBIT
        setLegacyHolder(0xAA9d9D742b5c915D65649C636fb2D485911ece4D, 1318142836424375); // 13,181,428 IBIT
        setLegacyHolder(0x5507F5a1076742e3299cE8199fEEd98079ECeE34, 2500000000000000); // 25,000,000 IBIT
        setLegacyHolder(0x5e75d35893200849889DD98a50fce78E3D5641F3, 3263084246964091); // 32,630,842 IBIT
        setLegacyHolder(0x0665d03bDDFd7bA36b1bDC7aDdB26C48273111c8, 500000000000000); // 5,000,000 IBIT
        setLegacyHolder(0x8A541f614A14B00366d92dCe6e927bF550f1c897, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0xC8aFB078896B5780bD7b7174429AF2DAff61199b, 6139352996536699); // 61,393,530 IBIT
        setLegacyHolder(0xffa25D69EF4909454825904904A2D876eA43E437, 2968750000000000); // 29,687,500 IBIT
        setLegacyHolder(0xCd0951939b77e22e497895820Ea7BD3AeF480E1C, 121526011734471); // 1,215,260 IBIT
        setLegacyHolder(0x1ca92Baf56A806527952Ebe610d06A66B54Bf5f1, 800000000000000); // 8,000,000 IBIT
        setLegacyHolder(0xa51670db54Edf9Dd5D5E3570f619FF46535E3679, 9500000000000); // 95,000 IBIT
        setLegacyHolder(0xdd30235DC68011F4de01A5c4059fC20145D5c874, 2509039665732949); // 25,090,397 IBIT
        setLegacyHolder(0x9161c6B026e65Ba6B583fE8F552FA26b6D39eA89, 1425000000000000); // 14,250,000 IBIT
        setLegacyHolder(0xDa85C4A66eBea97aa48a6e1741EC0E639fFe1783, 3138834219770145); // 31,388,342 IBIT
        setLegacyHolder(0xCEe85e997E80B724c69a1474a9489dBFA4cF5d2C, 484424921158839); // 4,844,249 IBIT
        setLegacyHolder(0x79D6F80D880f1bc1671b6fe3f88977D09eAe4DAA, 1814845856095380); // 18,148,459 IBIT
        setLegacyHolder(0x6D9e1352e1F8f66F96669CC28FDCfE8e7FCF5524, 3200000000000000); // 32,000,000 IBIT
        setLegacyHolder(0xA6e18D5F6b20dFA84d7d245bb656561f1f9aff69, 11246699192462885); // 112,466,992 IBIT
        setLegacyHolder(0x9d0D8E5e651Ab7d54Af5B0F655b3978504E67E0C, 11031132794975236); // 110,311,328 IBIT
        setLegacyHolder(0x141278EF1F894a60cBC8637871E4d19c3f2a7336, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0x8AefCE4e323DbB2eCD5818869acF90e5415559C5, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0x5ea0c07ADa402b67F1a9467d008EC11eD9Ca1127, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0x2B09aCED766f8290de1F5E4E0d3B3B8915C49189, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0xFb1BAD0Dc29a9a485F08F4FE6bFBFEdeba10ad8d, 12125000000000000); // 121,250,000 IBIT
        setLegacyHolder(0x56be74F547b1c3b01E97f87461E2f3C75902374A, 1124603943161942); // 11,246,039 IBIT
        setLegacyHolder(0x4A9381E176D676A07DD17A83d8BFd1287b342c77, 4810000000000000); // 48,100,000 IBIT
        setLegacyHolder(0xFCe082295b4db70097c4135Ca254B13B070800E7, 10000000000000000); // 100,000,000 IBIT
        setLegacyHolder(0x7ea69F87f9836FFc6797B6B2D045c11e0881b740, 5000000000000000); // 50,000,000 IBIT
        setLegacyHolder(0x1cC4A2522c3847687aF45AcdA2b5d6EbB64490A9, 402527671912807); // 4,025,277 IBIT
        setLegacyHolder(0x89E364598BDa1f96B6618EBE5D9879F070066358, 4750000000000000); // 47,500,000 IBIT

        // These wallets did not migrate. 50% penalty as decided by the community.
        setLegacyHolder(0x7FF0373F706E07eE326d538f6a6B2Cf8F7397e77, uint256(uint256(1250924993795650) / 2));
        setLegacyHolder(0x5F7425396747897F91b68149915826aFc2C14c16, uint256(uint256(1097767093335720) / 2));
        setLegacyHolder(0xa9b809Cfe8d95EdbDD61603Ba40081Ba6da4F24b, uint256(uint256(711944117144372) / 2));
        setLegacyHolder(0x817271eA29E0297D26e87c0fCae5d7086c06ae94, uint256(uint256(263389054436059) / 2));
        setLegacyHolder(0x15Cd32F5e9C286FaD0c6E6F40D1fc07c2c1a8584, uint256(uint256(130033069564332) / 2));
        setLegacyHolder(0x90a71A274Cf69c0AD430481241206cd8fec7a1ED, uint256(uint256(117107416670239) / 2));
        setLegacyHolder(0xC5DcAdf158Dc6DE2D6Bc1dDBB40Fb03572000D32, uint256(uint256(45488054291697) / 2));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"token_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eth_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens_collected","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens_swapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eth_collected","type":"uint256"}],"name":"AutoLiquidityFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"token_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eth_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens_collected","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens_swapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eth_collected","type":"uint256"}],"name":"AutoLiquiditySuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AutoswapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"dev_tax_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing_tax_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lp_tax_amount","type":"uint256"}],"name":"DeductTaxes","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":"amount_eth","type":"uint256"}],"name":"TaxesAutoswap","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":"DetectMaxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetUniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_w","type":"address"}],"name":"SetMaxWalletAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_w","type":"address"}],"name":"SetTaxlessAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_w","type":"address"}],"name":"SetUniswapV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"ToggleMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_w","type":"address"}],"name":"UnsetMaxWalletAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_w","type":"address"}],"name":"UnsetTaxlessAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_autoSwapTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_calcTaxes","outputs":[{"internalType":"uint256","name":"tax_to_collect","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFromTaxWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapLimitMax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapThreshold","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapThresholdMax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transfersEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"autoSwapConditionCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"autoswapTotalTokensAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sell_amount","type":"uint256"}],"name":"calcAutoswapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAutoswapLimit","outputs":[{"internalType":"uint8","name":"autoswap_limit_percent","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAutoswapThreshold","outputs":[{"internalType":"uint8","name":"autoswap_threshold_percent","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDevTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityIBIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLpTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketingTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxAutoswap","outputs":[{"internalType":"uint256","name":"max_autoswap_limit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_w","type":"address"}],"name":"isMaxWalletExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"isTaxExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint8","name":"deadline_seconds","type":"uint8"}],"name":"setAutoswapDeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"swapLimit","type":"uint8"}],"name":"setAutoswapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"swapThreshold","type":"uint8"}],"name":"setAutoswapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tax","type":"uint8"}],"name":"setDevTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tax","type":"uint8"}],"name":"setLpTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tax","type":"uint8"}],"name":"setMarketingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"max_amount","type":"uint256"}],"name":"takeTokensFromTaxWallets","outputs":[{"internalType":"uint256","name":"amount_taken","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleAutoSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"toggleSellFromTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101806040526008600660006101000a81548160ff021916908360ff1602179055506001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff0219169083151502179055506000600860166101000a81548160ff0219169083151502179055506001600860176101000a81548160ff021916908315150217905550600660009054906101000a900460ff1660ff16600a620000ae91906200114a565b640153bf1900620000c091906200119b565b608090815250603260ff1660a09060ff16815250600660009054906101000a900460ff1660ff16600a620000f591906200114a565b63077359406200010691906200119b565b60c090815250601e600860186101000a81548160ff021916908360ff16021790555073d1cb9007d51fb812805d80618a97418fd388b0c5600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a6e18d5f6b20dfa84d7d245bb656561f1f9aff6973ffffffffffffffffffffffffffffffffffffffff1660e09073ffffffffffffffffffffffffffffffffffffffff168152506012600960146101000a81548160ff021916908360ff1602179055507302dab704810c40c87374ebd85927c3d8a9815eb0600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739d0d8e5e651ab7d54af5b0f655b3978504e67e0c73ffffffffffffffffffffffffffffffffffffffff166101009073ffffffffffffffffffffffffffffffffffffffff168152506000600a60146101000a81548160ff021916908360ff16021790555061d34d73ffffffffffffffffffffffffffffffffffffffff166101209073ffffffffffffffffffffffffffffffffffffffff168152506000600a60156101000a81548160ff021916908360ff1602179055506019600d60006101000a81548160ff021916908360ff160217905550603260ff166101409060ff16815250600a600d60016101000a81548160ff021916908360ff160217905550603260ff166101609060ff16815250737a250d5630b4cf539739df2c5dacb4c659f2488d600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734648a43b2c14da09fdf82b161150d3f634f40491600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601460006101000a81548160ff021916908315150217905550620004266200041a62000db660201b60201c565b62000dbe60201b60201c565b6040518060400160405280601181526020017f496e66696e69747942697420546f6b656e000000000000000000000000000000815250600490816200046c919062001456565b506040518060400160405280600481526020017f494249540000000000000000000000000000000000000000000000000000000081525060059081620004b3919062001456565b506008600660006101000a81548160ff021916908360ff1602179055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005cc9190620015a7565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006df9190620015a7565b6040518363ffffffff1660e01b8152600401620006fe929190620015ea565b6020604051808303816000875af11580156200071e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007449190620015a7565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620007d93360805162000e8260201b60201c565b6080516003819055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600060e05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006101005173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600062000b0f62000f9460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b600062000d5e62000f9460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062001680565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060035462000e92919062001617565b60038190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ee5919062001617565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000f88919062001663565b60405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200104b5780860481111562001023576200102262000fbd565b5b6001851615620010335780820291505b8081029050620010438562000fec565b945062001003565b94509492505050565b60008262001066576001905062001139565b8162001076576000905062001139565b81600181146200108f57600281146200109a57620010d0565b600191505062001139565b60ff841115620010af57620010ae62000fbd565b5b8360020a915084821115620010c957620010c862000fbd565b5b5062001139565b5060208310610133831016604e8410600b84101617156200110a5782820a90508381111562001104576200110362000fbd565b5b62001139565b62001119848484600162000ff9565b9250905081840481111562001133576200113262000fbd565b5b81810290505b9392505050565b6000819050919050565b6000620011578262001140565b9150620011648362001140565b9250620011937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001054565b905092915050565b6000620011a88262001140565b9150620011b58362001140565b9250828202620011c58162001140565b91508282048414831517620011df57620011de62000fbd565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200126857607f821691505b6020821081036200127e576200127d62001220565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620012e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620012a9565b620012f48683620012a9565b95508019841693508086168417925050509392505050565b6000819050919050565b600062001337620013316200132b8462001140565b6200130c565b62001140565b9050919050565b6000819050919050565b620013538362001316565b6200136b62001362826200133e565b848454620012b6565b825550505050565b600090565b6200138262001373565b6200138f81848462001348565b505050565b5b81811015620013b757620013ab60008262001378565b60018101905062001395565b5050565b601f8211156200140657620013d08162001284565b620013db8462001299565b81016020851015620013eb578190505b62001403620013fa8562001299565b83018262001394565b50505b505050565b600082821c905092915050565b60006200142b600019846008026200140b565b1980831691505092915050565b600062001446838362001418565b9150826002028217905092915050565b6200146182620011e6565b67ffffffffffffffff8111156200147d576200147c620011f1565b5b6200148982546200124f565b62001496828285620013bb565b600060209050601f831160018114620014ce5760008415620014b9578287015190505b620014c5858262001438565b86555062001535565b601f198416620014de8662001284565b60005b828110156200150857848901518255600182019150602085019450602081019050620014e1565b8683101562001528578489015162001524601f89168262001418565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200156f8262001542565b9050919050565b620015818162001562565b81146200158d57600080fd5b50565b600081519050620015a18162001576565b92915050565b600060208284031215620015c057620015bf6200153d565b5b6000620015d08482850162001590565b91505092915050565b620015e48162001562565b82525050565b6000604082019050620016016000830185620015d9565b620016106020830184620015d9565b9392505050565b6000620016248262001140565b9150620016318362001140565b92508282019050808211156200164c576200164b62000fbd565b5b92915050565b6200165d8162001140565b82525050565b60006020820190506200167a600083018462001652565b92915050565b60805160a05160c05160e05161010051610120516101405161016051615c52620016f9600039600081816116240152611a5c01526000818161184f0152611b01015260005050600050506000613550015260006128c80152600081816111fa015281816113510152611c61015260005050615c526000f3fe6080604052600436106103855760003560e01c806370a08231116101d1578063af35c6c711610102578063dd62ed3e116100a0578063f187f44f1161006f578063f187f44f14610d31578063f2fde38b14610d5c578063fe85b42b14610d85578063fe9e014214610db05761038c565b8063dd62ed3e14610c75578063e036a05e14610cb2578063e78f4c2f14610cdd578063ea33df1614610d085761038c565b8063c8380919116100dc578063c838091914610be1578063cfd10a1214610c0a578063da48567c14610c33578063dbc34ee414610c4a5761038c565b8063af35c6c714610b64578063b0b39e6214610b7b578063ba6dd9b614610ba45761038c565b806395d89b411161016f578063a2e84abc11610149578063a2e84abc14610a94578063a457c2d714610abf578063a9059cbb14610afc578063ad995b5a14610b395761038c565b806395d89b4114610a155780639d86ccc714610a405780639f9aac7e14610a695761038c565b80637dcee9bc116101ab5780637dcee9bc14610959578063852c33cf1461099657806385438bc0146109bf5780638da5cb5b146109ea5761038c565b806370a08231146108dc578063715018a61461091957806377ce78fd146109305761038c565b806333862533116102b65780634a3273bf11610254578063583e056811610223578063583e0568146108345780635d098b381461085f578063633537c51461088857806370551007146108b15761038c565b80634a3273bf1461077c5780634f2fcbfc146107a5578063538faaec146107ce578063568b61dc1461080b5761038c565b80633c01439c116102905780633c01439c146106c05780633e89a813146106e95780633f374f1e1461072657806340a55915146107515761038c565b8063338625331461062f5780633950935114610658578063397186d0146106955761038c565b806318160ddd116103235780631d3635bc116102fd5780631d3635bc146105735780631f53ac021461059e57806323b872dd146105c7578063313ce567146106045761038c565b806318160ddd146104f457806319ea8ad51461051f5780631c0153991461054a5761038c565b80630bd11f8a1161035f5780630bd11f8a146104245780630c004ab8146104615780630e5a92311461048c5780630fa8eaa5146104b75761038c565b806306fdde0314610391578063083c78b2146103bc578063095ea7b3146103e75761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610ded565b6040516103b39190614a27565b60405180910390f35b3480156103c857600080fd5b506103d1610e7f565b6040516103de9190614a65565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190614b19565b610e96565b60405161041b9190614b74565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190614b8f565b610eb9565b6040516104589190614b74565b60405180910390f35b34801561046d57600080fd5b50610476610f53565b6040516104839190614a65565b60405180910390f35b34801561049857600080fd5b506104a1610f6a565b6040516104ae9190614a65565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190614bbc565b610f7d565b6040516104eb9190614b74565b60405180910390f35b34801561050057600080fd5b50610509611032565b6040516105169190614c1e565b60405180910390f35b34801561052b57600080fd5b5061053461103c565b6040516105419190614a65565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190614b8f565b611053565b005b34801561057f57600080fd5b506105886110b6565b6040516105959190614c1e565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190614b8f565b6110ef565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190614bbc565b6111aa565b6040516105fb9190614b74565b60405180910390f35b34801561061057600080fd5b506106196111d9565b6040516106269190614a65565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190614c65565b6111f0565b005b34801561066457600080fd5b5061067f600480360381019061067a9190614b19565b6112b3565b60405161068c9190614b74565b60405180910390f35b3480156106a157600080fd5b506106aa6112de565b6040516106b79190614c1e565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e29190614c65565b611347565b005b3480156106f557600080fd5b50610710600480360381019061070b9190614c92565b61140a565b60405161071d9190614c1e565b60405180910390f35b34801561073257600080fd5b5061073b611442565b6040516107489190614a65565b60405180910390f35b34801561075d57600080fd5b50610766611455565b6040516107739190614a65565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e9190614ceb565b61146c565b005b3480156107b157600080fd5b506107cc60048036038101906107c79190614b8f565b611491565b005b3480156107da57600080fd5b506107f560048036038101906107f09190614d18565b6114dd565b6040516108029190614b74565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190614c65565b61161a565b005b34801561084057600080fd5b506108496116b7565b6040516108569190614db7565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190614b8f565b6116dd565b005b34801561089457600080fd5b506108af60048036038101906108aa9190614c65565b611798565b005b3480156108bd57600080fd5b506108c66117be565b6040516108d39190614de1565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190614b8f565b6117e8565b6040516109109190614c1e565b60405180910390f35b34801561092557600080fd5b5061092e611831565b005b34801561093c57600080fd5b5061095760048036038101906109529190614c65565b611845565b005b34801561096557600080fd5b50610980600480360381019061097b9190614c92565b6118d3565b60405161098d9190614c1e565b60405180910390f35b3480156109a257600080fd5b506109bd60048036038101906109b89190614b8f565b6118ed565b005b3480156109cb57600080fd5b506109d4611950565b6040516109e19190614b74565b60405180910390f35b3480156109f657600080fd5b506109ff611963565b604051610a0c9190614de1565b60405180910390f35b348015610a2157600080fd5b50610a2a61198c565b604051610a379190614a27565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190614ceb565b611a1e565b005b348015610a7557600080fd5b50610a7e611a43565b604051610a8b9190614a65565b60405180910390f35b348015610aa057600080fd5b50610aa9611a5a565b604051610ab69190614a65565b60405180910390f35b348015610acb57600080fd5b50610ae66004803603810190610ae19190614b19565b611a7e565b604051610af39190614b74565b60405180910390f35b348015610b0857600080fd5b50610b236004803603810190610b1e9190614b19565b611ae8565b604051610b309190614b74565b60405180910390f35b348015610b4557600080fd5b50610b4e611aff565b604051610b5b9190614a65565b60405180910390f35b348015610b7057600080fd5b50610b79611b23565b005b348015610b8757600080fd5b50610ba26004803603810190610b9d9190614b8f565b611b48565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc69190614c92565b611bab565b604051610bd89190614c1e565b60405180910390f35b348015610bed57600080fd5b50610c086004803603810190610c039190614b8f565b611bf4565b005b348015610c1657600080fd5b50610c316004803603810190610c2c9190614c65565b611c57565b005b348015610c3f57600080fd5b50610c48611d1a565b005b348015610c5657600080fd5b50610c5f611e5c565b604051610c6c9190614b74565b60405180910390f35b348015610c8157600080fd5b50610c9c6004803603810190610c979190614d18565b611e6f565b604051610ca99190614c1e565b60405180910390f35b348015610cbe57600080fd5b50610cc7611ef6565b604051610cd49190614e1d565b60405180910390f35b348015610ce957600080fd5b50610cf2611f1c565b604051610cff9190614b74565b60405180910390f35b348015610d1457600080fd5b50610d2f6004803603810190610d2a9190614ceb565b611f33565b005b348015610d3d57600080fd5b50610d46611f58565b604051610d539190614b74565b60405180910390f35b348015610d6857600080fd5b50610d836004803603810190610d7e9190614b8f565b611f6b565b005b348015610d9157600080fd5b50610d9a611fee565b604051610da79190614a65565b60405180910390f35b348015610dbc57600080fd5b50610dd76004803603810190610dd29190614c92565b612039565b604051610de49190614c1e565b60405180910390f35b606060048054610dfc90614e67565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2890614e67565b8015610e755780601f10610e4a57610100808354040283529160200191610e75565b820191906000526020600020905b815481529060010190602001808311610e5857829003601f168201915b5050505050905090565b6000600d60009054906101000a900460ff16905090565b600080610ea1612155565b9050610eae81858561215d565b600191505092915050565b6000610ec3611963565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610efe5760019050610f4e565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b6000600860189054906101000a900460ff16905090565b600d60019054906101000a900460ff1681565b6000600860159054906101000a900460ff16610f9c576000905061102b565b610fa68484612326565b610fb3576000905061102b565b6000600d60019054906101000a900460ff1660ff1603610fd6576001905061102b565b60006103e8600d60019054906101000a900460ff1660ff16610ff66112de565b6110009190614ec7565b61100a9190614f38565b90508061101684612039565b1061102557600191505061102b565b60009150505b9392505050565b6000600354905090565b6000600d60019054906101000a900460ff16905090565b61105b6124f9565b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006103e86110c36112de565b600d60009054906101000a900460ff1660ff166110e09190614ec7565b6110ea9190614f38565b905090565b6110f76124f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614fdb565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111b5612155565b90506111c2858285612577565b6111cd858585612603565b60019150509392505050565b6000600660009054906101000a900460ff16905090565b6111f86124f9565b7f000000000000000000000000000000000000000000000000000000000000000060ff1681600860189054906101000a900460ff16600960149054906101000a900460ff166112479190614ffb565b6112519190614ffb565b60ff161115611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c906150a2565b60405180910390fd5b80600a60146101000a81548160ff021916908360ff16021790555050565b60006112d43384846112c53388611e6f565b6112cf91906150c2565b61215d565b6001905092915050565b600060016000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b61134f6124f9565b7f000000000000000000000000000000000000000000000000000000000000000060ff1681600a60149054906101000a900460ff16600960149054906101000a900460ff1661139e9190614ffb565b6113a89190614ffb565b60ff1611156113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906150a2565b60405180910390fd5b80600860186101000a81548160ff021916908360ff16021790555050565b600061141582612b46565b61141e83612b7a565b61142784612bae565b61143191906150c2565b61143b91906150c2565b9050919050565b600d60009054906101000a900460ff1681565b6000600960149054906101000a900460ff16905090565b6114746124f9565b80600860146101000a81548160ff02191690831515021790555050565b6114996124f9565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806115805750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561158e5760019050611614565b611596611963565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061160157506115d2611963565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561160f5760019050611614565b600090505b92915050565b6116226124f9565b7f000000000000000000000000000000000000000000000000000000000000000060ff16600d60019054906101000a900460ff1660ff1610611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090615142565b60405180910390fd5b80600d60016101000a81548160ff021916908360ff16021790555050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116e56124f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90614fdb565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117a06124f9565b80600a60156101000a81548160ff021916908360ff16021790555050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118396124f9565b6118436000612be2565b565b61184d6124f9565b7f000000000000000000000000000000000000000000000000000000000000000060ff168160ff16106118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906151ae565b60405180910390fd5b80600d60006101000a81548160ff021916908360ff16021790555050565b60006118dd6124f9565b6118e682612ca6565b9050919050565b6118f56124f9565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600860169054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461199b90614e67565b80601f01602080910402602001604051908101604052809291908181526020018280546119c790614e67565b8015611a145780601f106119e957610100808354040283529160200191611a14565b820191906000526020600020905b8154815290600101906020018083116119f757829003601f168201915b5050505050905090565b611a266124f9565b80600860176101000a81548160ff02191690831515021790555050565b6000600a60149054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080611a8b3385611e6f565b905082811015611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790615240565b60405180910390fd5b611add338585840361215d565b600191505092915050565b6000611af5338484612603565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b2b6124f9565b6001600860166101000a81548160ff021916908315150217905550565b611b506124f9565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806002611bb984612b46565b611bc39190614f38565b9050611bce83612b7a565b611bd784612bae565b82611be291906150c2565b611bec91906150c2565b915050919050565b611bfc6124f9565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611c5f6124f9565b7f000000000000000000000000000000000000000000000000000000000000000060ff1681600860189054906101000a900460ff16600a60149054906101000a900460ff16611cae9190614ffb565b611cb89190614ffb565b60ff161115611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf3906150a2565b60405180910390fd5b80600960146101000a81548160ff021916908360ff16021790555050565b611d226124f9565b60001515601460009054906101000a900460ff16151514611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906152d2565b60405180910390fd5b6001601460006101000a81548160ff021916908315150217905550611d9b613543565b60005b601280549050811015611e5957600060128281548110611dc157611dc06152f2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e44611e3d611963565b8383613f31565b50508080611e5190615321565b915050611d9e565b50565b600860159054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860149054906101000a900460ff16905090565b611f3b6124f9565b80600860156101000a81548160ff02191690831515021790555050565b600860179054906101000a900460ff1681565b611f736124f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd9906153db565b60405180910390fd5b611feb81612be2565b50565b6000600860189054906101000a900460ff16600960149054906101000a900460ff16600a60149054906101000a900460ff1661202a9190614ffb565b6120349190614ffb565b905090565b600060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210884612b7a565b61211185612bae565b600261211c87612b46565b6121269190614f38565b61213091906150c2565b61213a91906150c2565b61214491906150c2565b61214e91906150c2565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c39061546d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361223b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612232906154ff565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123199190614c1e565b60405180910390a3505050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806123d15750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806124295750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561243757600090506124f3565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806124e05750600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156124ee57600190506124f3565b600090505b92915050565b612501612155565b73ffffffffffffffffffffffffffffffffffffffff1661251f611963565b73ffffffffffffffffffffffffffffffffffffffff1614612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c9061556b565b60405180910390fd5b565b60006125838484611e6f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125fd57818110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e6906155d7565b60405180910390fd5b6125fc848484840361215d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990615669565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d8906156fb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275a9061578d565b60405180910390fd5b600860169054906101000a900460ff1661282a5761277f611963565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127ea57506127bb611963565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b612829576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128209061581f565b60405180910390fd5b5b600061283684846114dd565b156128445760009050612850565b61284d8261140a565b90505b6000818361285e919061583f565b905061286984610eb9565b1580156128a95750612879611963565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128c15750600860149054906101000a900460ff165b1561293d577f0000000000000000000000000000000000000000000000000000000000000000816128f1866117e8565b6128fb91906150c2565b111561293c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612933906158e5565b60405180910390fd5b5b6000820361295757612950858585613f31565b5050612b41565b6129618583614035565b7f61d847c27904e7734ffb013f218c1c7d71fe34cd6f7117855e6f61b44864b83d61298b84612bae565b61299485612b7a565b61299d86612b46565b6040516129ac93929190615905565b60405180910390a16129bf858585610f7d565b156129d4576129cf8585856140f1565b612b33565b6129dd83612bae565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a4d91906150c2565b92505081905550612a5d83612b7a565b60016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612acd91906150c2565b92505081905550612add83612b46565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2b91906150c2565b925050819055505b612b3e858583613f31565b50505b505050565b60006103e8600a60149054906101000a900460ff1660ff1683612b699190614ec7565b612b739190614f38565b9050919050565b60006103e8600860189054906101000a900460ff1660ff1683612b9d9190614ec7565b612ba79190614f38565b9050919050565b60006103e8600960149054906101000a900460ff1660ff1683612bd19190614ec7565b612bdb9190614f38565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000801515600860179054906101000a900460ff16151503612ccb576000905061353e565b6509184e72a00060016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612da091906150c2565b1015612daf576000905061353e565b60008260016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ede578260016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555082600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508291505061353e565b8260016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061300b578260016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555082600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508291505061353e565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550828110613133578291505061353e565b60008360016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131a391906150c2565b116132d55760016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080826132cc91906150c2565b9250505061353e565b600083856132e3919061583f565b90508060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613414578060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555084935050505061353e565b60016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550818361353891906150c2565b93505050505b919050565b61357c61354e611963565b7f000000000000000000000000000000000000000000000000000000000000000066327beb78380100613f31565b6135a17389abd93caba3657919674a663d55e1c185a4ca256611c37937e0800061447d565b6135c6732e9edc685510f3b6b92b5aa8b14e66a18707f5ab6611c37937e0800061447d565b6135eb73db1c0b51328d40c11ebe5c9c7098477b88551e8d6608e1bc9bf0400061447d565b6136107352747fd7866ef249b015bb99e95a3169b9ec4497662545109a98250b61447d565b61363573b2c91cf2fd763f2cc4558ed3cede401fc1d1b675660e35fa931a000061447d565b61365a732e64b76130819f30be2df0a0740d990d706b9926662119fcc562732961447d565b61367f731e69003e5267e945962ae38578a76222ca4085846611c37937e0800061447d565b6136a47316f39f8ff59caead81bc680e6cd663069eb978be6623e1e5803b400061447d565b6136c9736d102206cb3f043e22a62b4b7ecc83b877f85d9a6611c501b22b4deb61447d565b6136ee73ec61a284df18c4937b50880f70eb181d38fe86bb6605e672116a6c6661447d565b613713734c999827bc4b51fbd6911f066d8b82baac286a9b660c6f3b40b6c00061447d565b613738735415672d7334f8d2798022242675829b16bf94db66051f5f8b11616361447d565b61375d73df10d9688528b5b60957d1727a70a30450ce96046611c37937e0800061447d565b61378273831114051c0edde239ae672edcc4c63371dec82b660dbf8992820f2d61447d565b6137a7731d9c8ae02d75db48df0d13424cf7fb188dfa4b6e66078106b169de8161447d565b6137cc736e7182cfe90cc9aad11f7082cc4c462dbfd2d73c6603d8fb964ab00061447d565b6137f173287044c98a99f08764d681ed898aecb68a5543bc66083e0e9a7ce69a61447d565b613816735159cd8087b040e3e5f95e1489ce1018e186795c6607fe5cf2bea00061447d565b61383b735ed277af83d32fa421091244fa802e90fe8e896d66136a4e4fd3719e61447d565b613860737abc57c6f67853d16a4400685d18ee53980a3f4f661b593075db3ca861447d565b6138857309b3a9ea542713dcc182728f9debbdfcb1a0112f6611c37937e0800061447d565b6138aa73f3598ad305bbd8b40a480947e00a5dc3e29dc5a5661151c96347b00061447d565b6138cf732aeda0568e111da6a465bb735d912899a15015c266264eda1d64e2b361447d565b6138f473b578b5157bcc9fd2e73acacf7e853fd9f861f55d66071afd498d000061447d565b6139197316c73eafaa9c6f915d9026d3c2d1b6e9407d2f7366125471b3c2d18461447d565b61393e733140dd4b65c557fda703b081c475ce4945eaaca36611c37937e0800061447d565b61396373e632450e74165110459fef989bc11e90ee9029d166213872cbdfc2a461447d565b61398873f6e82162d8938d91b44efd4c307dba91ecbd6950660a54655482449e61447d565b6139ad7333af2064be09c34302c4ca8b8529a0e65924301666025844398d400061447d565b6139d273aa9d9d742b5c915d65649c636fb2d485911ece4d6604aed80b873eb761447d565b6139f7735507f5a1076742e3299ce8199feed98079ecee346608e1bc9bf0400061447d565b613a1c735e75d35893200849889dd98a50fce78e3d5641f3660b97c20169977b61447d565b613a41730665d03bddfd7ba36b1bdc7addb26c48273111c86601c6bf5263400061447d565b613a66738a541f614a14b00366d92dce6e927bf550f1c8976611c37937e0800061447d565b613a8b73c8afb078896b5780bd7b7174429af2daff61199b6615cfb58282617b61447d565b613ab073ffa25d69ef4909454825904904a2d876ea43e437660a8c0ff92d4c0061447d565b613ad473cd0951939b77e22e497895820ea7bd3aef480e1c656e86fac2a9c761447d565b613af9731ca92baf56a806527952ebe610d06a66b54bf5f16602d79883d2000061447d565b613b1d73a51670db54edf9dd5d5e3570f619ff46535e36796508a3e420180061447d565b613b4273dd30235dc68011f4de01a5c4059fc20145d5c8746608e9f55200dd5561447d565b613b67739161c6b026e65ba6b583fe8f552fa26b6d39ea8966051007aace100061447d565b613b8c73da85c4a66ebea97aa48a6e1741ec0e639ffe1783660b26c0caada12161447d565b613bb173cee85e997e80b724c69a1474a9489dbfa4cf5d2c6601b894f75894b761447d565b613bd67379d6f80d880f1bc1671b6fe3f88977d09eae4daa66067297ba931c9461447d565b613bfb736d9e1352e1f8f66f96669cc28fdcfe8e7fcf5524660b5e620f48000061447d565b613c2073a6e18d5f6b20dfa84d7d245bb656561f1f9aff696627f4d036432e2561447d565b613c45739d0d8e5e651ab7d54af5b0f655b3978504e67e0c662730c1bfb6f40461447d565b613c6a73141278ef1f894a60cbc8637871e4d19c3f2a73366611c37937e0800061447d565b613c8f738aefce4e323dbb2ecd5818869acf90e5415559c56611c37937e0800061447d565b613cb4735ea0c07ada402b67f1a9467d008ec11ed9ca11276611c37937e0800061447d565b613cd9732b09aced766f8290de1f5e4e0d3b3b8915c491896611c37937e0800061447d565b613cfe73fb1bad0dc29a9a485f08f4fe6bfbfedeba10ad8d662b139f8de6d00061447d565b613d237356be74f547b1c3b01e97f87461e2f3c75902374a6603fed2428b905661447d565b613d48734a9381e176d676a07dd17a83d8bfd1287b342c77661116ab655ea00061447d565b613d6d73fce082295b4db70097c4135ca254b13b070800e7662386f26fc1000061447d565b613d92737ea69f87f9836ffc6797b6b2d045c11e0881b7406611c37937e0800061447d565b613db7731cc4a2522c3847687af45acda2b5d6ebb64490a966016e18c6e5896761447d565b613ddc7389e364598bda1f96b6618ebe5d9879f0700663586610e0198eaee00061447d565b613e0d737ff0373f706e07ee326d538f6a6b2cf8f7397e776002660471b5abe55642613e089190614f38565b61447d565b613e3e735f7425396747897f91b68149915826afc2c14c1660026603e669d1a4f6a8613e399190614f38565b61447d565b613e6f73a9b809cfe8d95edbdd61603ba40081ba6da4f24b6002660287826833cb34613e6a9190614f38565b61447d565b613e9f73817271ea29e0297d26e87c0fcae5d7086c06ae94600265ef8d0b0702db613e9a9190614f38565b61447d565b613ecf7315cd32f5e9c286fad0c6e6f40d1fc07c2c1a85846002657643aeeba1ac613eca9190614f38565b61447d565b613eff7390a71a274cf69c0ad430481241206cd8fec7a1ed6002656a8231f8a01f613efa9190614f38565b61447d565b613f2f73c5dcadf158dc6de2d6bc1ddbb40fb03572000d32600265295f03514cf1613f2a9190614f38565b61447d565b565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140289190614c1e565b60405180910390a3505050565b600081148061404e57506000614049611fee565b60ff16145b6140ed5780600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b5050565b60006140fc82611bab565b90506000810361410c5750614478565b60006141166110b6565b90508082101561414c576000828261412e919061583f565b905061413981612ca6565b8361414491906150c2565b925050614159565b80821115614158578091505b5b600047905061416783614579565b60008147614175919061583f565b90507f9572f600ac02e9bafd8e4f025ea488d19cb1821776401f4b0e1884e81167cc44816040516141a69190614c1e565b60405180910390a16000600a60149054906101000a900460ff1660ff161180156141d757506141d587876114dd565b155b156143c35760006141e78661140a565b9050600060026141f688612b46565b6142009190614f38565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156142ad5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b80156143075750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156143c057600061432a84600a60149054906101000a900460ff1660ff1661481d565b90506143368282614848565b61437e577f1d8c0ffe523a60028885b523cb9cbc740eb32636db62bbf322ecb63a6dc1e8bf8282858a8860405161437195949392919061593c565b60405180910390a16143be565b7ff1639dd60f5b6dfa121767af35709c4735f2eeb213811f714d1bbf88938c6f1f8282858a886040516143b595949392919061593c565b60405180910390a15b505b50505b60006143e182600860189054906101000a900460ff1660ff1661481d565b9050600061440183600960149054906101000a900460ff1660ff1661481d565b9050600082111561443a57614438600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614958565b505b60008111156144715761446f600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614958565b505b5050505050505b505050565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403614575576000810315614575576012829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600081031561481a576000600267ffffffffffffffff81111561459f5761459e61598f565b5b6040519080825280602002602001820160405280156145cd5781602001602082028036833780820191505090505b50905030816000815181106145e5576145e46152f2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561468c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b091906159d3565b816001815181106146c4576146c36152f2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061472b30600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461215d565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430600a60159054906101000a900460ff1660ff164261478c91906150c2565b6040518663ffffffff1660e01b81526004016147ac959493929190615af9565b600060405180830381600087803b1580156147c657600080fd5b505af19250505080156147d7575060015b614817577f163865970267fb5cd79322dcc0cc0b193c52d963f284585552f2bf323d9e27d68260405161480a9190614c1e565b60405180910390a1614818565b5b505b50565b6000614827611fee565b60ff1682846148369190614ec7565b6148409190614f38565b905092915050565b6000808314806148585750600082145b156148665760019050614952565b61489330600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561215d565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000806148df611963565b426040518863ffffffff1660e01b815260040161490196959493929190615b53565b60606040518083038185885af19350505050801561493d57506040513d601f19601f8201168201806040525081019061493a9190615bc9565b60015b61494a5760009050614952565b505050600190505b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149d15780820151818401526020810190506149b6565b60008484015250505050565b6000601f19601f8301169050919050565b60006149f982614997565b614a0381856149a2565b9350614a138185602086016149b3565b614a1c816149dd565b840191505092915050565b60006020820190508181036000830152614a4181846149ee565b905092915050565b600060ff82169050919050565b614a5f81614a49565b82525050565b6000602082019050614a7a6000830184614a56565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ab082614a85565b9050919050565b614ac081614aa5565b8114614acb57600080fd5b50565b600081359050614add81614ab7565b92915050565b6000819050919050565b614af681614ae3565b8114614b0157600080fd5b50565b600081359050614b1381614aed565b92915050565b60008060408385031215614b3057614b2f614a80565b5b6000614b3e85828601614ace565b9250506020614b4f85828601614b04565b9150509250929050565b60008115159050919050565b614b6e81614b59565b82525050565b6000602082019050614b896000830184614b65565b92915050565b600060208284031215614ba557614ba4614a80565b5b6000614bb384828501614ace565b91505092915050565b600080600060608486031215614bd557614bd4614a80565b5b6000614be386828701614ace565b9350506020614bf486828701614ace565b9250506040614c0586828701614b04565b9150509250925092565b614c1881614ae3565b82525050565b6000602082019050614c336000830184614c0f565b92915050565b614c4281614a49565b8114614c4d57600080fd5b50565b600081359050614c5f81614c39565b92915050565b600060208284031215614c7b57614c7a614a80565b5b6000614c8984828501614c50565b91505092915050565b600060208284031215614ca857614ca7614a80565b5b6000614cb684828501614b04565b91505092915050565b614cc881614b59565b8114614cd357600080fd5b50565b600081359050614ce581614cbf565b92915050565b600060208284031215614d0157614d00614a80565b5b6000614d0f84828501614cd6565b91505092915050565b60008060408385031215614d2f57614d2e614a80565b5b6000614d3d85828601614ace565b9250506020614d4e85828601614ace565b9150509250929050565b6000819050919050565b6000614d7d614d78614d7384614a85565b614d58565b614a85565b9050919050565b6000614d8f82614d62565b9050919050565b6000614da182614d84565b9050919050565b614db181614d96565b82525050565b6000602082019050614dcc6000830184614da8565b92915050565b614ddb81614aa5565b82525050565b6000602082019050614df66000830184614dd2565b92915050565b6000614e0782614d84565b9050919050565b614e1781614dfc565b82525050565b6000602082019050614e326000830184614e0e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e7f57607f821691505b602082108103614e9257614e91614e38565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ed282614ae3565b9150614edd83614ae3565b9250828202614eeb81614ae3565b91508282048414831517614f0257614f01614e98565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f4382614ae3565b9150614f4e83614ae3565b925082614f5e57614f5d614f09565b5b828204905092915050565b7f494249543a2063616e6e6f742073657420746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614fc56024836149a2565b9150614fd082614f69565b604082019050919050565b60006020820190508181036000830152614ff481614fb8565b9050919050565b600061500682614a49565b915061501183614a49565b9250828201905060ff81111561502a57615029614e98565b5b92915050565b7f494249543a20746f74616c207461782063616e6e6f7420657863656564206d6160008201527f7820746178000000000000000000000000000000000000000000000000000000602082015250565b600061508c6025836149a2565b915061509782615030565b604082019050919050565b600060208201905081810360008301526150bb8161507f565b9050919050565b60006150cd82614ae3565b91506150d883614ae3565b92508282019050808211156150f0576150ef614e98565b5b92915050565b7f494249543a20737761705468726573686f6c642065786365656473206d617800600082015250565b600061512c601f836149a2565b9150615137826150f6565b602082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f494249543a20737761704c696d69742065786365656473206d61780000000000600082015250565b6000615198601b836149a2565b91506151a382615162565b602082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061522a6025836149a2565b9150615235826151ce565b604082019050919050565b600060208201905081810360008301526152598161521d565b9050919050565b7f494249543a20486f6c646572732063616e206f6e6c792062652061697264726f60008201527f70706564206f6e63650000000000000000000000000000000000000000000000602082015250565b60006152bc6029836149a2565b91506152c782615260565b604082019050919050565b600060208201905081810360008301526152eb816152af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061532c82614ae3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361535e5761535d614e98565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153c56026836149a2565b91506153d082615369565b604082019050919050565b600060208201905081810360008301526153f4816153b8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154576024836149a2565b9150615462826153fb565b604082019050919050565b600060208201905081810360008301526154868161544a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154e96022836149a2565b91506154f48261548d565b604082019050919050565b60006020820190508181036000830152615518816154dc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006155556020836149a2565b91506155608261551f565b602082019050919050565b6000602082019050818103600083015261558481615548565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006155c1601d836149a2565b91506155cc8261558b565b602082019050919050565b600060208201905081810360008301526155f0816155b4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156536025836149a2565b915061565e826155f7565b604082019050919050565b6000602082019050818103600083015261568281615646565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156e56023836149a2565b91506156f082615689565b604082019050919050565b60006020820190508181036000830152615714816156d8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157776026836149a2565b91506157828261571b565b604082019050919050565b600060208201905081810360008301526157a68161576a565b9050919050565b7f494249543a207472616e73666572732064697361626c656420756e74696c206960008201527f6e697469616c204c500000000000000000000000000000000000000000000000602082015250565b60006158096029836149a2565b9150615814826157ad565b604082019050919050565b60006020820190508181036000830152615838816157fc565b9050919050565b600061584a82614ae3565b915061585583614ae3565b925082820390508181111561586d5761586c614e98565b5b92915050565b7f494249543a206d6178696d756d2077616c6c65742063616e6e6f74206265206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b60006158cf6027836149a2565b91506158da82615873565b604082019050919050565b600060208201905081810360008301526158fe816158c2565b9050919050565b600060608201905061591a6000830186614c0f565b6159276020830185614c0f565b6159346040830184614c0f565b949350505050565b600060a0820190506159516000830188614c0f565b61595e6020830187614c0f565b61596b6040830186614c0f565b6159786060830185614c0f565b6159856080830184614c0f565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506159cd81614ab7565b92915050565b6000602082840312156159e9576159e8614a80565b5b60006159f7848285016159be565b91505092915050565b6000819050919050565b6000615a25615a20615a1b84615a00565b614d58565b614ae3565b9050919050565b615a3581615a0a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a7081614aa5565b82525050565b6000615a828383615a67565b60208301905092915050565b6000602082019050919050565b6000615aa682615a3b565b615ab08185615a46565b9350615abb83615a57565b8060005b83811015615aec578151615ad38882615a76565b9750615ade83615a8e565b925050600181019050615abf565b5085935050505092915050565b600060a082019050615b0e6000830188614c0f565b615b1b6020830187615a2c565b8181036040830152615b2d8186615a9b565b9050615b3c6060830185614dd2565b615b496080830184614c0f565b9695505050505050565b600060c082019050615b686000830189614dd2565b615b756020830188614c0f565b615b826040830187615a2c565b615b8f6060830186615a2c565b615b9c6080830185614dd2565b615ba960a0830184614c0f565b979650505050505050565b600081519050615bc381614aed565b92915050565b600080600060608486031215615be257615be1614a80565b5b6000615bf086828701615bb4565b9350506020615c0186828701615bb4565b9250506040615c1286828701615bb4565b915050925092509256fea2646970667358221220dacac630edb96b2f23823c50b32e8a3e618537b3ca279da728d1666d693bfd9c64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103855760003560e01c806370a08231116101d1578063af35c6c711610102578063dd62ed3e116100a0578063f187f44f1161006f578063f187f44f14610d31578063f2fde38b14610d5c578063fe85b42b14610d85578063fe9e014214610db05761038c565b8063dd62ed3e14610c75578063e036a05e14610cb2578063e78f4c2f14610cdd578063ea33df1614610d085761038c565b8063c8380919116100dc578063c838091914610be1578063cfd10a1214610c0a578063da48567c14610c33578063dbc34ee414610c4a5761038c565b8063af35c6c714610b64578063b0b39e6214610b7b578063ba6dd9b614610ba45761038c565b806395d89b411161016f578063a2e84abc11610149578063a2e84abc14610a94578063a457c2d714610abf578063a9059cbb14610afc578063ad995b5a14610b395761038c565b806395d89b4114610a155780639d86ccc714610a405780639f9aac7e14610a695761038c565b80637dcee9bc116101ab5780637dcee9bc14610959578063852c33cf1461099657806385438bc0146109bf5780638da5cb5b146109ea5761038c565b806370a08231146108dc578063715018a61461091957806377ce78fd146109305761038c565b806333862533116102b65780634a3273bf11610254578063583e056811610223578063583e0568146108345780635d098b381461085f578063633537c51461088857806370551007146108b15761038c565b80634a3273bf1461077c5780634f2fcbfc146107a5578063538faaec146107ce578063568b61dc1461080b5761038c565b80633c01439c116102905780633c01439c146106c05780633e89a813146106e95780633f374f1e1461072657806340a55915146107515761038c565b8063338625331461062f5780633950935114610658578063397186d0146106955761038c565b806318160ddd116103235780631d3635bc116102fd5780631d3635bc146105735780631f53ac021461059e57806323b872dd146105c7578063313ce567146106045761038c565b806318160ddd146104f457806319ea8ad51461051f5780631c0153991461054a5761038c565b80630bd11f8a1161035f5780630bd11f8a146104245780630c004ab8146104615780630e5a92311461048c5780630fa8eaa5146104b75761038c565b806306fdde0314610391578063083c78b2146103bc578063095ea7b3146103e75761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610ded565b6040516103b39190614a27565b60405180910390f35b3480156103c857600080fd5b506103d1610e7f565b6040516103de9190614a65565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190614b19565b610e96565b60405161041b9190614b74565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190614b8f565b610eb9565b6040516104589190614b74565b60405180910390f35b34801561046d57600080fd5b50610476610f53565b6040516104839190614a65565b60405180910390f35b34801561049857600080fd5b506104a1610f6a565b6040516104ae9190614a65565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190614bbc565b610f7d565b6040516104eb9190614b74565b60405180910390f35b34801561050057600080fd5b50610509611032565b6040516105169190614c1e565b60405180910390f35b34801561052b57600080fd5b5061053461103c565b6040516105419190614a65565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c9190614b8f565b611053565b005b34801561057f57600080fd5b506105886110b6565b6040516105959190614c1e565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190614b8f565b6110ef565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190614bbc565b6111aa565b6040516105fb9190614b74565b60405180910390f35b34801561061057600080fd5b506106196111d9565b6040516106269190614a65565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190614c65565b6111f0565b005b34801561066457600080fd5b5061067f600480360381019061067a9190614b19565b6112b3565b60405161068c9190614b74565b60405180910390f35b3480156106a157600080fd5b506106aa6112de565b6040516106b79190614c1e565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e29190614c65565b611347565b005b3480156106f557600080fd5b50610710600480360381019061070b9190614c92565b61140a565b60405161071d9190614c1e565b60405180910390f35b34801561073257600080fd5b5061073b611442565b6040516107489190614a65565b60405180910390f35b34801561075d57600080fd5b50610766611455565b6040516107739190614a65565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e9190614ceb565b61146c565b005b3480156107b157600080fd5b506107cc60048036038101906107c79190614b8f565b611491565b005b3480156107da57600080fd5b506107f560048036038101906107f09190614d18565b6114dd565b6040516108029190614b74565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190614c65565b61161a565b005b34801561084057600080fd5b506108496116b7565b6040516108569190614db7565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190614b8f565b6116dd565b005b34801561089457600080fd5b506108af60048036038101906108aa9190614c65565b611798565b005b3480156108bd57600080fd5b506108c66117be565b6040516108d39190614de1565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190614b8f565b6117e8565b6040516109109190614c1e565b60405180910390f35b34801561092557600080fd5b5061092e611831565b005b34801561093c57600080fd5b5061095760048036038101906109529190614c65565b611845565b005b34801561096557600080fd5b50610980600480360381019061097b9190614c92565b6118d3565b60405161098d9190614c1e565b60405180910390f35b3480156109a257600080fd5b506109bd60048036038101906109b89190614b8f565b6118ed565b005b3480156109cb57600080fd5b506109d4611950565b6040516109e19190614b74565b60405180910390f35b3480156109f657600080fd5b506109ff611963565b604051610a0c9190614de1565b60405180910390f35b348015610a2157600080fd5b50610a2a61198c565b604051610a379190614a27565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190614ceb565b611a1e565b005b348015610a7557600080fd5b50610a7e611a43565b604051610a8b9190614a65565b60405180910390f35b348015610aa057600080fd5b50610aa9611a5a565b604051610ab69190614a65565b60405180910390f35b348015610acb57600080fd5b50610ae66004803603810190610ae19190614b19565b611a7e565b604051610af39190614b74565b60405180910390f35b348015610b0857600080fd5b50610b236004803603810190610b1e9190614b19565b611ae8565b604051610b309190614b74565b60405180910390f35b348015610b4557600080fd5b50610b4e611aff565b604051610b5b9190614a65565b60405180910390f35b348015610b7057600080fd5b50610b79611b23565b005b348015610b8757600080fd5b50610ba26004803603810190610b9d9190614b8f565b611b48565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc69190614c92565b611bab565b604051610bd89190614c1e565b60405180910390f35b348015610bed57600080fd5b50610c086004803603810190610c039190614b8f565b611bf4565b005b348015610c1657600080fd5b50610c316004803603810190610c2c9190614c65565b611c57565b005b348015610c3f57600080fd5b50610c48611d1a565b005b348015610c5657600080fd5b50610c5f611e5c565b604051610c6c9190614b74565b60405180910390f35b348015610c8157600080fd5b50610c9c6004803603810190610c979190614d18565b611e6f565b604051610ca99190614c1e565b60405180910390f35b348015610cbe57600080fd5b50610cc7611ef6565b604051610cd49190614e1d565b60405180910390f35b348015610ce957600080fd5b50610cf2611f1c565b604051610cff9190614b74565b60405180910390f35b348015610d1457600080fd5b50610d2f6004803603810190610d2a9190614ceb565b611f33565b005b348015610d3d57600080fd5b50610d46611f58565b604051610d539190614b74565b60405180910390f35b348015610d6857600080fd5b50610d836004803603810190610d7e9190614b8f565b611f6b565b005b348015610d9157600080fd5b50610d9a611fee565b604051610da79190614a65565b60405180910390f35b348015610dbc57600080fd5b50610dd76004803603810190610dd29190614c92565b612039565b604051610de49190614c1e565b60405180910390f35b606060048054610dfc90614e67565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2890614e67565b8015610e755780601f10610e4a57610100808354040283529160200191610e75565b820191906000526020600020905b815481529060010190602001808311610e5857829003601f168201915b5050505050905090565b6000600d60009054906101000a900460ff16905090565b600080610ea1612155565b9050610eae81858561215d565b600191505092915050565b6000610ec3611963565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610efe5760019050610f4e565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b6000600860189054906101000a900460ff16905090565b600d60019054906101000a900460ff1681565b6000600860159054906101000a900460ff16610f9c576000905061102b565b610fa68484612326565b610fb3576000905061102b565b6000600d60019054906101000a900460ff1660ff1603610fd6576001905061102b565b60006103e8600d60019054906101000a900460ff1660ff16610ff66112de565b6110009190614ec7565b61100a9190614f38565b90508061101684612039565b1061102557600191505061102b565b60009150505b9392505050565b6000600354905090565b6000600d60019054906101000a900460ff16905090565b61105b6124f9565b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006103e86110c36112de565b600d60009054906101000a900460ff1660ff166110e09190614ec7565b6110ea9190614f38565b905090565b6110f76124f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614fdb565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806111b5612155565b90506111c2858285612577565b6111cd858585612603565b60019150509392505050565b6000600660009054906101000a900460ff16905090565b6111f86124f9565b7f000000000000000000000000000000000000000000000000000000000000003260ff1681600860189054906101000a900460ff16600960149054906101000a900460ff166112479190614ffb565b6112519190614ffb565b60ff161115611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c906150a2565b60405180910390fd5b80600a60146101000a81548160ff021916908360ff16021790555050565b60006112d43384846112c53388611e6f565b6112cf91906150c2565b61215d565b6001905092915050565b600060016000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b61134f6124f9565b7f000000000000000000000000000000000000000000000000000000000000003260ff1681600a60149054906101000a900460ff16600960149054906101000a900460ff1661139e9190614ffb565b6113a89190614ffb565b60ff1611156113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906150a2565b60405180910390fd5b80600860186101000a81548160ff021916908360ff16021790555050565b600061141582612b46565b61141e83612b7a565b61142784612bae565b61143191906150c2565b61143b91906150c2565b9050919050565b600d60009054906101000a900460ff1681565b6000600960149054906101000a900460ff16905090565b6114746124f9565b80600860146101000a81548160ff02191690831515021790555050565b6114996124f9565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806115805750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561158e5760019050611614565b611596611963565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061160157506115d2611963565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561160f5760019050611614565b600090505b92915050565b6116226124f9565b7f000000000000000000000000000000000000000000000000000000000000003260ff16600d60019054906101000a900460ff1660ff1610611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090615142565b60405180910390fd5b80600d60016101000a81548160ff021916908360ff16021790555050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116e56124f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90614fdb565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117a06124f9565b80600a60156101000a81548160ff021916908360ff16021790555050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118396124f9565b6118436000612be2565b565b61184d6124f9565b7f000000000000000000000000000000000000000000000000000000000000003260ff168160ff16106118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906151ae565b60405180910390fd5b80600d60006101000a81548160ff021916908360ff16021790555050565b60006118dd6124f9565b6118e682612ca6565b9050919050565b6118f56124f9565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600860169054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461199b90614e67565b80601f01602080910402602001604051908101604052809291908181526020018280546119c790614e67565b8015611a145780601f106119e957610100808354040283529160200191611a14565b820191906000526020600020905b8154815290600101906020018083116119f757829003601f168201915b5050505050905090565b611a266124f9565b80600860176101000a81548160ff02191690831515021790555050565b6000600a60149054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000003281565b600080611a8b3385611e6f565b905082811015611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790615240565b60405180910390fd5b611add338585840361215d565b600191505092915050565b6000611af5338484612603565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000003281565b611b2b6124f9565b6001600860166101000a81548160ff021916908315150217905550565b611b506124f9565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806002611bb984612b46565b611bc39190614f38565b9050611bce83612b7a565b611bd784612bae565b82611be291906150c2565b611bec91906150c2565b915050919050565b611bfc6124f9565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611c5f6124f9565b7f000000000000000000000000000000000000000000000000000000000000003260ff1681600860189054906101000a900460ff16600a60149054906101000a900460ff16611cae9190614ffb565b611cb89190614ffb565b60ff161115611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf3906150a2565b60405180910390fd5b80600960146101000a81548160ff021916908360ff16021790555050565b611d226124f9565b60001515601460009054906101000a900460ff16151514611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906152d2565b60405180910390fd5b6001601460006101000a81548160ff021916908315150217905550611d9b613543565b60005b601280549050811015611e5957600060128281548110611dc157611dc06152f2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e44611e3d611963565b8383613f31565b50508080611e5190615321565b915050611d9e565b50565b600860159054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860149054906101000a900460ff16905090565b611f3b6124f9565b80600860156101000a81548160ff02191690831515021790555050565b600860179054906101000a900460ff1681565b611f736124f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd9906153db565b60405180910390fd5b611feb81612be2565b50565b6000600860189054906101000a900460ff16600960149054906101000a900460ff16600a60149054906101000a900460ff1661202a9190614ffb565b6120349190614ffb565b905090565b600060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461210884612b7a565b61211185612bae565b600261211c87612b46565b6121269190614f38565b61213091906150c2565b61213a91906150c2565b61214491906150c2565b61214e91906150c2565b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c39061546d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361223b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612232906154ff565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123199190614c1e565b60405180910390a3505050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806123d15750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806124295750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561243757600090506124f3565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806124e05750600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156124ee57600190506124f3565b600090505b92915050565b612501612155565b73ffffffffffffffffffffffffffffffffffffffff1661251f611963565b73ffffffffffffffffffffffffffffffffffffffff1614612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c9061556b565b60405180910390fd5b565b60006125838484611e6f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125fd57818110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e6906155d7565b60405180910390fd5b6125fc848484840361215d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990615669565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d8906156fb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275a9061578d565b60405180910390fd5b600860169054906101000a900460ff1661282a5761277f611963565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127ea57506127bb611963565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b612829576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128209061581f565b60405180910390fd5b5b600061283684846114dd565b156128445760009050612850565b61284d8261140a565b90505b6000818361285e919061583f565b905061286984610eb9565b1580156128a95750612879611963565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128c15750600860149054906101000a900460ff165b1561293d577f000000000000000000000000000000000000000000000000002c68af0bb14000816128f1866117e8565b6128fb91906150c2565b111561293c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612933906158e5565b60405180910390fd5b5b6000820361295757612950858585613f31565b5050612b41565b6129618583614035565b7f61d847c27904e7734ffb013f218c1c7d71fe34cd6f7117855e6f61b44864b83d61298b84612bae565b61299485612b7a565b61299d86612b46565b6040516129ac93929190615905565b60405180910390a16129bf858585610f7d565b156129d4576129cf8585856140f1565b612b33565b6129dd83612bae565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a4d91906150c2565b92505081905550612a5d83612b7a565b60016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612acd91906150c2565b92505081905550612add83612b46565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2b91906150c2565b925050819055505b612b3e858583613f31565b50505b505050565b60006103e8600a60149054906101000a900460ff1660ff1683612b699190614ec7565b612b739190614f38565b9050919050565b60006103e8600860189054906101000a900460ff1660ff1683612b9d9190614ec7565b612ba79190614f38565b9050919050565b60006103e8600960149054906101000a900460ff1660ff1683612bd19190614ec7565b612bdb9190614f38565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000801515600860179054906101000a900460ff16151503612ccb576000905061353e565b6509184e72a00060016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612da091906150c2565b1015612daf576000905061353e565b60008260016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ede578260016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555082600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508291505061353e565b8260016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061300b578260016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555082600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508291505061353e565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550828110613133578291505061353e565b60008360016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131a391906150c2565b116132d55760016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080826132cc91906150c2565b9250505061353e565b600083856132e3919061583f565b90508060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613414578060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555084935050505061353e565b60016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600060016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550818361353891906150c2565b93505050505b919050565b61357c61354e611963565b7f000000000000000000000000a6e18d5f6b20dfa84d7d245bb656561f1f9aff6966327beb78380100613f31565b6135a17389abd93caba3657919674a663d55e1c185a4ca256611c37937e0800061447d565b6135c6732e9edc685510f3b6b92b5aa8b14e66a18707f5ab6611c37937e0800061447d565b6135eb73db1c0b51328d40c11ebe5c9c7098477b88551e8d6608e1bc9bf0400061447d565b6136107352747fd7866ef249b015bb99e95a3169b9ec4497662545109a98250b61447d565b61363573b2c91cf2fd763f2cc4558ed3cede401fc1d1b675660e35fa931a000061447d565b61365a732e64b76130819f30be2df0a0740d990d706b9926662119fcc562732961447d565b61367f731e69003e5267e945962ae38578a76222ca4085846611c37937e0800061447d565b6136a47316f39f8ff59caead81bc680e6cd663069eb978be6623e1e5803b400061447d565b6136c9736d102206cb3f043e22a62b4b7ecc83b877f85d9a6611c501b22b4deb61447d565b6136ee73ec61a284df18c4937b50880f70eb181d38fe86bb6605e672116a6c6661447d565b613713734c999827bc4b51fbd6911f066d8b82baac286a9b660c6f3b40b6c00061447d565b613738735415672d7334f8d2798022242675829b16bf94db66051f5f8b11616361447d565b61375d73df10d9688528b5b60957d1727a70a30450ce96046611c37937e0800061447d565b61378273831114051c0edde239ae672edcc4c63371dec82b660dbf8992820f2d61447d565b6137a7731d9c8ae02d75db48df0d13424cf7fb188dfa4b6e66078106b169de8161447d565b6137cc736e7182cfe90cc9aad11f7082cc4c462dbfd2d73c6603d8fb964ab00061447d565b6137f173287044c98a99f08764d681ed898aecb68a5543bc66083e0e9a7ce69a61447d565b613816735159cd8087b040e3e5f95e1489ce1018e186795c6607fe5cf2bea00061447d565b61383b735ed277af83d32fa421091244fa802e90fe8e896d66136a4e4fd3719e61447d565b613860737abc57c6f67853d16a4400685d18ee53980a3f4f661b593075db3ca861447d565b6138857309b3a9ea542713dcc182728f9debbdfcb1a0112f6611c37937e0800061447d565b6138aa73f3598ad305bbd8b40a480947e00a5dc3e29dc5a5661151c96347b00061447d565b6138cf732aeda0568e111da6a465bb735d912899a15015c266264eda1d64e2b361447d565b6138f473b578b5157bcc9fd2e73acacf7e853fd9f861f55d66071afd498d000061447d565b6139197316c73eafaa9c6f915d9026d3c2d1b6e9407d2f7366125471b3c2d18461447d565b61393e733140dd4b65c557fda703b081c475ce4945eaaca36611c37937e0800061447d565b61396373e632450e74165110459fef989bc11e90ee9029d166213872cbdfc2a461447d565b61398873f6e82162d8938d91b44efd4c307dba91ecbd6950660a54655482449e61447d565b6139ad7333af2064be09c34302c4ca8b8529a0e65924301666025844398d400061447d565b6139d273aa9d9d742b5c915d65649c636fb2d485911ece4d6604aed80b873eb761447d565b6139f7735507f5a1076742e3299ce8199feed98079ecee346608e1bc9bf0400061447d565b613a1c735e75d35893200849889dd98a50fce78e3d5641f3660b97c20169977b61447d565b613a41730665d03bddfd7ba36b1bdc7addb26c48273111c86601c6bf5263400061447d565b613a66738a541f614a14b00366d92dce6e927bf550f1c8976611c37937e0800061447d565b613a8b73c8afb078896b5780bd7b7174429af2daff61199b6615cfb58282617b61447d565b613ab073ffa25d69ef4909454825904904a2d876ea43e437660a8c0ff92d4c0061447d565b613ad473cd0951939b77e22e497895820ea7bd3aef480e1c656e86fac2a9c761447d565b613af9731ca92baf56a806527952ebe610d06a66b54bf5f16602d79883d2000061447d565b613b1d73a51670db54edf9dd5d5e3570f619ff46535e36796508a3e420180061447d565b613b4273dd30235dc68011f4de01a5c4059fc20145d5c8746608e9f55200dd5561447d565b613b67739161c6b026e65ba6b583fe8f552fa26b6d39ea8966051007aace100061447d565b613b8c73da85c4a66ebea97aa48a6e1741ec0e639ffe1783660b26c0caada12161447d565b613bb173cee85e997e80b724c69a1474a9489dbfa4cf5d2c6601b894f75894b761447d565b613bd67379d6f80d880f1bc1671b6fe3f88977d09eae4daa66067297ba931c9461447d565b613bfb736d9e1352e1f8f66f96669cc28fdcfe8e7fcf5524660b5e620f48000061447d565b613c2073a6e18d5f6b20dfa84d7d245bb656561f1f9aff696627f4d036432e2561447d565b613c45739d0d8e5e651ab7d54af5b0f655b3978504e67e0c662730c1bfb6f40461447d565b613c6a73141278ef1f894a60cbc8637871e4d19c3f2a73366611c37937e0800061447d565b613c8f738aefce4e323dbb2ecd5818869acf90e5415559c56611c37937e0800061447d565b613cb4735ea0c07ada402b67f1a9467d008ec11ed9ca11276611c37937e0800061447d565b613cd9732b09aced766f8290de1f5e4e0d3b3b8915c491896611c37937e0800061447d565b613cfe73fb1bad0dc29a9a485f08f4fe6bfbfedeba10ad8d662b139f8de6d00061447d565b613d237356be74f547b1c3b01e97f87461e2f3c75902374a6603fed2428b905661447d565b613d48734a9381e176d676a07dd17a83d8bfd1287b342c77661116ab655ea00061447d565b613d6d73fce082295b4db70097c4135ca254b13b070800e7662386f26fc1000061447d565b613d92737ea69f87f9836ffc6797b6b2d045c11e0881b7406611c37937e0800061447d565b613db7731cc4a2522c3847687af45acda2b5d6ebb64490a966016e18c6e5896761447d565b613ddc7389e364598bda1f96b6618ebe5d9879f0700663586610e0198eaee00061447d565b613e0d737ff0373f706e07ee326d538f6a6b2cf8f7397e776002660471b5abe55642613e089190614f38565b61447d565b613e3e735f7425396747897f91b68149915826afc2c14c1660026603e669d1a4f6a8613e399190614f38565b61447d565b613e6f73a9b809cfe8d95edbdd61603ba40081ba6da4f24b6002660287826833cb34613e6a9190614f38565b61447d565b613e9f73817271ea29e0297d26e87c0fcae5d7086c06ae94600265ef8d0b0702db613e9a9190614f38565b61447d565b613ecf7315cd32f5e9c286fad0c6e6f40d1fc07c2c1a85846002657643aeeba1ac613eca9190614f38565b61447d565b613eff7390a71a274cf69c0ad430481241206cd8fec7a1ed6002656a8231f8a01f613efa9190614f38565b61447d565b613f2f73c5dcadf158dc6de2d6bc1ddbb40fb03572000d32600265295f03514cf1613f2a9190614f38565b61447d565b565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140289190614c1e565b60405180910390a3505050565b600081148061404e57506000614049611fee565b60ff16145b6140ed5780600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b5050565b60006140fc82611bab565b90506000810361410c5750614478565b60006141166110b6565b90508082101561414c576000828261412e919061583f565b905061413981612ca6565b8361414491906150c2565b925050614159565b80821115614158578091505b5b600047905061416783614579565b60008147614175919061583f565b90507f9572f600ac02e9bafd8e4f025ea488d19cb1821776401f4b0e1884e81167cc44816040516141a69190614c1e565b60405180910390a16000600a60149054906101000a900460ff1660ff161180156141d757506141d587876114dd565b155b156143c35760006141e78661140a565b9050600060026141f688612b46565b6142009190614f38565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156142ad5750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b80156143075750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156143c057600061432a84600a60149054906101000a900460ff1660ff1661481d565b90506143368282614848565b61437e577f1d8c0ffe523a60028885b523cb9cbc740eb32636db62bbf322ecb63a6dc1e8bf8282858a8860405161437195949392919061593c565b60405180910390a16143be565b7ff1639dd60f5b6dfa121767af35709c4735f2eeb213811f714d1bbf88938c6f1f8282858a886040516143b595949392919061593c565b60405180910390a15b505b50505b60006143e182600860189054906101000a900460ff1660ff1661481d565b9050600061440183600960149054906101000a900460ff1660ff1661481d565b9050600082111561443a57614438600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614958565b505b60008111156144715761446f600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614958565b505b5050505050505b505050565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403614575576000810315614575576012829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600081031561481a576000600267ffffffffffffffff81111561459f5761459e61598f565b5b6040519080825280602002602001820160405280156145cd5781602001602082028036833780820191505090505b50905030816000815181106145e5576145e46152f2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561468c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b091906159d3565b816001815181106146c4576146c36152f2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061472b30600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461215d565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430600a60159054906101000a900460ff1660ff164261478c91906150c2565b6040518663ffffffff1660e01b81526004016147ac959493929190615af9565b600060405180830381600087803b1580156147c657600080fd5b505af19250505080156147d7575060015b614817577f163865970267fb5cd79322dcc0cc0b193c52d963f284585552f2bf323d9e27d68260405161480a9190614c1e565b60405180910390a1614818565b5b505b50565b6000614827611fee565b60ff1682846148369190614ec7565b6148409190614f38565b905092915050565b6000808314806148585750600082145b156148665760019050614952565b61489330600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561215d565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000806148df611963565b426040518863ffffffff1660e01b815260040161490196959493929190615b53565b60606040518083038185885af19350505050801561493d57506040513d601f19601f8201168201806040525081019061493a9190615bc9565b60015b61494a5760009050614952565b505050600190505b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149d15780820151818401526020810190506149b6565b60008484015250505050565b6000601f19601f8301169050919050565b60006149f982614997565b614a0381856149a2565b9350614a138185602086016149b3565b614a1c816149dd565b840191505092915050565b60006020820190508181036000830152614a4181846149ee565b905092915050565b600060ff82169050919050565b614a5f81614a49565b82525050565b6000602082019050614a7a6000830184614a56565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ab082614a85565b9050919050565b614ac081614aa5565b8114614acb57600080fd5b50565b600081359050614add81614ab7565b92915050565b6000819050919050565b614af681614ae3565b8114614b0157600080fd5b50565b600081359050614b1381614aed565b92915050565b60008060408385031215614b3057614b2f614a80565b5b6000614b3e85828601614ace565b9250506020614b4f85828601614b04565b9150509250929050565b60008115159050919050565b614b6e81614b59565b82525050565b6000602082019050614b896000830184614b65565b92915050565b600060208284031215614ba557614ba4614a80565b5b6000614bb384828501614ace565b91505092915050565b600080600060608486031215614bd557614bd4614a80565b5b6000614be386828701614ace565b9350506020614bf486828701614ace565b9250506040614c0586828701614b04565b9150509250925092565b614c1881614ae3565b82525050565b6000602082019050614c336000830184614c0f565b92915050565b614c4281614a49565b8114614c4d57600080fd5b50565b600081359050614c5f81614c39565b92915050565b600060208284031215614c7b57614c7a614a80565b5b6000614c8984828501614c50565b91505092915050565b600060208284031215614ca857614ca7614a80565b5b6000614cb684828501614b04565b91505092915050565b614cc881614b59565b8114614cd357600080fd5b50565b600081359050614ce581614cbf565b92915050565b600060208284031215614d0157614d00614a80565b5b6000614d0f84828501614cd6565b91505092915050565b60008060408385031215614d2f57614d2e614a80565b5b6000614d3d85828601614ace565b9250506020614d4e85828601614ace565b9150509250929050565b6000819050919050565b6000614d7d614d78614d7384614a85565b614d58565b614a85565b9050919050565b6000614d8f82614d62565b9050919050565b6000614da182614d84565b9050919050565b614db181614d96565b82525050565b6000602082019050614dcc6000830184614da8565b92915050565b614ddb81614aa5565b82525050565b6000602082019050614df66000830184614dd2565b92915050565b6000614e0782614d84565b9050919050565b614e1781614dfc565b82525050565b6000602082019050614e326000830184614e0e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e7f57607f821691505b602082108103614e9257614e91614e38565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ed282614ae3565b9150614edd83614ae3565b9250828202614eeb81614ae3565b91508282048414831517614f0257614f01614e98565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f4382614ae3565b9150614f4e83614ae3565b925082614f5e57614f5d614f09565b5b828204905092915050565b7f494249543a2063616e6e6f742073657420746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614fc56024836149a2565b9150614fd082614f69565b604082019050919050565b60006020820190508181036000830152614ff481614fb8565b9050919050565b600061500682614a49565b915061501183614a49565b9250828201905060ff81111561502a57615029614e98565b5b92915050565b7f494249543a20746f74616c207461782063616e6e6f7420657863656564206d6160008201527f7820746178000000000000000000000000000000000000000000000000000000602082015250565b600061508c6025836149a2565b915061509782615030565b604082019050919050565b600060208201905081810360008301526150bb8161507f565b9050919050565b60006150cd82614ae3565b91506150d883614ae3565b92508282019050808211156150f0576150ef614e98565b5b92915050565b7f494249543a20737761705468726573686f6c642065786365656473206d617800600082015250565b600061512c601f836149a2565b9150615137826150f6565b602082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f494249543a20737761704c696d69742065786365656473206d61780000000000600082015250565b6000615198601b836149a2565b91506151a382615162565b602082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061522a6025836149a2565b9150615235826151ce565b604082019050919050565b600060208201905081810360008301526152598161521d565b9050919050565b7f494249543a20486f6c646572732063616e206f6e6c792062652061697264726f60008201527f70706564206f6e63650000000000000000000000000000000000000000000000602082015250565b60006152bc6029836149a2565b91506152c782615260565b604082019050919050565b600060208201905081810360008301526152eb816152af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061532c82614ae3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361535e5761535d614e98565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153c56026836149a2565b91506153d082615369565b604082019050919050565b600060208201905081810360008301526153f4816153b8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154576024836149a2565b9150615462826153fb565b604082019050919050565b600060208201905081810360008301526154868161544a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154e96022836149a2565b91506154f48261548d565b604082019050919050565b60006020820190508181036000830152615518816154dc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006155556020836149a2565b91506155608261551f565b602082019050919050565b6000602082019050818103600083015261558481615548565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006155c1601d836149a2565b91506155cc8261558b565b602082019050919050565b600060208201905081810360008301526155f0816155b4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156536025836149a2565b915061565e826155f7565b604082019050919050565b6000602082019050818103600083015261568281615646565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156e56023836149a2565b91506156f082615689565b604082019050919050565b60006020820190508181036000830152615714816156d8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157776026836149a2565b91506157828261571b565b604082019050919050565b600060208201905081810360008301526157a68161576a565b9050919050565b7f494249543a207472616e73666572732064697361626c656420756e74696c206960008201527f6e697469616c204c500000000000000000000000000000000000000000000000602082015250565b60006158096029836149a2565b9150615814826157ad565b604082019050919050565b60006020820190508181036000830152615838816157fc565b9050919050565b600061584a82614ae3565b915061585583614ae3565b925082820390508181111561586d5761586c614e98565b5b92915050565b7f494249543a206d6178696d756d2077616c6c65742063616e6e6f74206265206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b60006158cf6027836149a2565b91506158da82615873565b604082019050919050565b600060208201905081810360008301526158fe816158c2565b9050919050565b600060608201905061591a6000830186614c0f565b6159276020830185614c0f565b6159346040830184614c0f565b949350505050565b600060a0820190506159516000830188614c0f565b61595e6020830187614c0f565b61596b6040830186614c0f565b6159786060830185614c0f565b6159856080830184614c0f565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506159cd81614ab7565b92915050565b6000602082840312156159e9576159e8614a80565b5b60006159f7848285016159be565b91505092915050565b6000819050919050565b6000615a25615a20615a1b84615a00565b614d58565b614ae3565b9050919050565b615a3581615a0a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a7081614aa5565b82525050565b6000615a828383615a67565b60208301905092915050565b6000602082019050919050565b6000615aa682615a3b565b615ab08185615a46565b9350615abb83615a57565b8060005b83811015615aec578151615ad38882615a76565b9750615ade83615a8e565b925050600181019050615abf565b5085935050505092915050565b600060a082019050615b0e6000830188614c0f565b615b1b6020830187615a2c565b8181036040830152615b2d8186615a9b565b9050615b3c6060830185614dd2565b615b496080830184614c0f565b9695505050505050565b600060c082019050615b686000830189614dd2565b615b756020830188614c0f565b615b826040830187615a2c565b615b8f6060830186615a2c565b615b9c6080830185614dd2565b615ba960a0830184614c0f565b979650505050505050565b600081519050615bc381614aed565b92915050565b600080600060608486031215615be257615be1614a80565b5b6000615bf086828701615bb4565b9350506020615c0186828701615bb4565b9250506040615c1286828701615bb4565b915050925092509256fea2646970667358221220dacac630edb96b2f23823c50b32e8a3e618537b3ca279da728d1666d693bfd9c64736f6c63430008120033

Deployed Bytecode Sourcemap

23337:32773:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27851:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37003:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29398:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35951:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33502:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25779:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42892:560;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28122:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37486:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35146:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36731:141;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30916:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29605:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28033:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33787:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29872:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36544:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33971:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46917:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25668:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33213:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34412:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34522:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35542:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37621:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26032:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31156:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34160:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34630:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28219:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11482:103;;;;;;;;;;;;;:::i;:::-;;37126:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43579;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34972:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23905:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10841:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27940;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43460:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33414:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25824:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30087:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28335:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25711:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30784:89;;;;;;;;;;;;;:::i;:::-;;34799:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38575:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35332:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33604:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48271:454;;;;;;;;;;;;;:::i;:::-;;23864:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29241:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26307:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34300:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33303:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23949:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11740:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36197:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38315:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27851:83;27888:13;27921:5;27914:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27851:83;:::o;37003:115::-;37052:28;37100:10;;;;;;;;;;;37093:17;;37003:115;:::o;29398:201::-;29481:4;29498:13;29514:12;:10;:12::i;:::-;29498:28;;29537:32;29546:5;29553:7;29562:6;29537:8;:32::i;:::-;29587:4;29580:11;;;29398:201;;;;:::o;35951:206::-;36011:4;36045:7;:5;:7::i;:::-;36031:22;;:2;:22;;;36028:74;;36086:4;36079:11;;;;36028:74;36121:24;:28;36146:2;36121:28;;;;;;;;;;;;;;;;;;;;;;;;;36114:35;;35951:206;;;;:::o;33502:94::-;33550:5;33575:13;;;;;;;;;;;33568:20;;33502:94;:::o;25779:32::-;;;;;;;;;;;;;:::o;42892:560::-;42987:4;43008:15;;;;;;;;;;;43004:60;;43047:5;43040:12;;;;43004:60;43080:16;43087:4;43093:2;43080:6;:16::i;:::-;43076:61;;43120:5;43113:12;;;;43076:61;43170:1;43152:14;;;;;;;;;;;:19;;;43149:62;;43195:4;43188:11;;;;43149:62;43223:33;43297:4;43281:14;;;;;;;;;;;43260:35;;:18;:16;:18::i;:::-;:35;;;;:::i;:::-;43259:42;;;;:::i;:::-;43223:78;;43355:25;43315:36;43344:6;43315:28;:36::i;:::-;:65;43312:108;;43404:4;43397:11;;;;;43312:108;43439:5;43432:12;;;42892:560;;;;;;:::o;28122:91::-;28166:7;28193:12;;28186:19;;28122:91;:::o;37486:127::-;37539:32;37591:14;;;;;;;;;;;37584:21;;37486:127;:::o;35146:114::-;10727:13;:11;:13::i;:::-;35248:4:::1;35217:24;:28;35242:2;35217:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35146:114:::0;:::o;36731:141::-;36778:26;36860:4;36838:18;:16;:18::i;:::-;36825:10;;;;;;;;;;;:31;;;;;;:::i;:::-;36824:40;;;;:::i;:::-;36817:47;;36731:141;:::o;30916:191::-;10727:13;:11;:13::i;:::-;31014:1:::1;30993:23;;:9;:23;;::::0;30985:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31089:9;31068:10;;:31;;;;;;;;;;;;;;;;;;30916:191:::0;:::o;29605:261::-;29702:4;29719:15;29737:12;:10;:12::i;:::-;29719:30;;29760:38;29776:4;29782:7;29791:6;29760:15;:38::i;:::-;29809:27;29819:4;29825:2;29829:6;29809:9;:27::i;:::-;29854:4;29847:11;;;29605:261;;;;;:::o;28033:83::-;28074:5;28099:9;;;;;;;;;;;28092:16;;28033:83;:::o;33787:176::-;10727:13;:11;:13::i;:::-;33883:7:::1;33852:38;;33875:3;33861:13;;;;;;;;;;;33853:7;;;;;;;;;;;:21;;;;:::i;:::-;:25;;;;:::i;:::-;33852:38;;;;33844:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;33952:3;33943:6;;:12;;;;;;;;;;;;;;;;;;33787:176:::0;:::o;29872:209::-;29960:4;29977:74;29986:10;29998:7;30040:10;30007:30;30017:10;30029:7;30007:9;:30::i;:::-;:43;;;;:::i;:::-;29977:8;:74::i;:::-;30069:4;30062:11;;29872:209;;;;:::o;36544:116::-;36593:7;36620:9;:32;36630:21;;;;;;;;;;;36620:32;;;;;;;;;;;;;;;;36613:39;;36544:116;:::o;33971:181::-;10727:13;:11;:13::i;:::-;34065:7:::1;34043:29;;34058:3;34051:6;;;;;;;;;;;34043:7;;;;;;;;;;;:14;;;;:::i;:::-;:18;;;;:::i;:::-;:29;;;;34035:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;34141:3;34125:13;;:19;;;;;;;;;;;;;;;;;;33971:181:::0;:::o;46917:193::-;46974:22;47078:24;47095:6;47078:16;:24::i;:::-;47044:31;47068:6;47044:23;:31::i;:::-;47016:25;47034:6;47016:17;:25::i;:::-;:59;;;;:::i;:::-;:86;;;;:::i;:::-;47009:93;;46917:193;;;:::o;25668:28::-;;;;;;;;;;;;;:::o;33213:82::-;33255:5;33280:7;;;;;;;;;;;33273:14;;33213:82;:::o;34412:102::-;10727:13;:11;:13::i;:::-;34499:7:::1;34479:17;;:27;;;;;;;;;;;;;;;;;;34412:102:::0;:::o;34522:100::-;10727:13;:11;:13::i;:::-;34612:2:::1;34588:21;;:26;;;;;;;;;;;;;;;;;;34522:100:::0;:::o;35542:310::-;35609:4;35629:16;:22;35646:4;35629:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;35655:16;:20;35672:2;35655:20;;;;;;;;;;;;;;;;;;;;;;;;;35629:46;35626:98;;;35708:4;35701:11;;;;35626:98;35747:7;:5;:7::i;:::-;35739:15;;:4;:15;;;:32;;;;35764:7;:5;:7::i;:::-;35758:13;;:2;:13;;;35739:32;35736:84;;;35804:4;35797:11;;;;35736:84;35839:5;35832:12;;35542:310;;;;;:::o;37621:206::-;10727:13;:11;:13::i;:::-;37725:17:::1;37708:34;;:14;;;;;;;;;;;:34;;;37700:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;37806:13;37789:14;;:30;;;;;;;;;;;;;;;;;;37621:206:::0;:::o;26032:42::-;;;;;;;;;;;;;:::o;31156:221::-;10727:13;:11;:13::i;:::-;31272:1:::1;31245:29;;:15;:29;;::::0;31237:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31353:15;31326:16;;:43;;;;;;;;;;;;;;;;;;31156:221:::0;:::o;34160:132::-;10727:13;:11;:13::i;:::-;34268:16:::1;34241:24;;:43;;;;;;;;;;;;;;;;;;34160:132:::0;:::o;34630:105::-;34679:7;34706:21;;;;;;;;;;;34699:28;;34630:105;:::o;28219:110::-;28276:7;28303:9;:18;28313:7;28303:18;;;;;;;;;;;;;;;;28296:25;;28219:110;;;:::o;11482:103::-;10727:13;:11;:13::i;:::-;11547:30:::1;11574:1;11547:18;:30::i;:::-;11482:103::o:0;37126:177::-;10727:13;:11;:13::i;:::-;37217::::1;37205:25;;:9;:25;;;37197:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37286:9;37273:10;;:22;;;;;;;;;;;;;;;;;;37126:177:::0;:::o;43579:::-;43659:20;10727:13;:11;:13::i;:::-;43699:49:::1;43737:10;43699:37;:49::i;:::-;43692:56;;43579:177:::0;;;:::o;34972:107::-;10727:13;:11;:13::i;:::-;35066:5:::1;35043:16;:20;35060:2;35043:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34972:107:::0;:::o;23905:37::-;;;;;;;;;;;;;:::o;10841:87::-;10887:7;10914:6;;;;;;;;;;;10907:13;;10841:87;:::o;27940:::-;27979:13;28012:7;28005:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27940:87;:::o;43460:111::-;10727:13;:11;:13::i;:::-;43557:6:::1;43535:19;;:28;;;;;;;;;;;;;;;;;;43460:111:::0;:::o;33414:80::-;33455:5;33480:6;;;;;;;;;;;33473:13;;33414:80;:::o;25824:45::-;;;:::o;30087:395::-;30180:4;30197:24;30224:30;30234:10;30246:7;30224:9;:30::i;:::-;30197:57;;30293:15;30273:16;:35;;30265:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30378:65;30387:10;30399:7;30427:15;30408:16;:34;30378:8;:65::i;:::-;30470:4;30463:11;;;30087:395;;;;:::o;28335:142::-;28397:4;28414:33;28424:10;28436:2;28440:6;28414:9;:33::i;:::-;28465:4;28458:11;;28335:142;;;;:::o;25711:41::-;;;:::o;30784:89::-;10727:13;:11;:13::i;:::-;30861:4:::1;30841:17;;:24;;;;;;;;;;;;;;;;;;30784:89::o:0;34799:104::-;10727:13;:11;:13::i;:::-;34891:4:::1;34868:16;:20;34885:2;34868:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34799:104:::0;:::o;38575:248::-;38645:7;38665:17;38715:1;38685:29;38702:11;38685:16;:29::i;:::-;:31;;;;:::i;:::-;38665:51;;38779:36;38803:11;38779:23;:36::i;:::-;38746:30;38764:11;38746:17;:30::i;:::-;38734:9;:42;;;;:::i;:::-;:81;;;;:::i;:::-;38727:88;;;38575:248;;;:::o;35332:117::-;10727:13;:11;:13::i;:::-;35436:5:::1;35405:24;:28;35430:2;35405:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35332:117:::0;:::o;33604:175::-;10727:13;:11;:13::i;:::-;33698:7:::1;33670:35;;33691:3;33677:13;;;;;;;;;;;33670:6;;;;;;;;;;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;:35;;;;33662:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33768:3;33758:7;;:13;;;;;;;;;;;;;;;;;;33604:175:::0;:::o;48271:454::-;10727:13;:11;:13::i;:::-;48355:5:::1;48333:27;;:18;;;;;;;;;;;:27;;;48325:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;48438:4;48417:18;;:25;;;;;;;;;;;;;;;;;;48455:31;:29;:31::i;:::-;48503:6;48499:219;48519:14;:21;;;;48515:1;:25;48499:219;;;48562:10;48575:14;48590:1;48575:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48562:30;;48607:15;48625:22;:26;48648:2;48625:26;;;;;;;;;;;;;;;;48607:44;;48668:38;48685:7;:5;:7::i;:::-;48694:2;48698:7;48668:16;:38::i;:::-;48547:171;;48542:3;;;;;:::i;:::-;;;;48499:219;;;;48271:454::o:0;23864:34::-;;;;;;;;;;;;;:::o;29241:151::-;29330:7;29357:11;:18;29369:5;29357:18;;;;;;;;;;;;;;;:27;29376:7;29357:27;;;;;;;;;;;;;;;;29350:34;;29241:151;;;;:::o;26307:42::-;;;;;;;;;;;;;:::o;34300:104::-;34355:4;34379:17;;;;;;;;;;;34372:24;;34300:104;:::o;33303:103::-;10727:13;:11;:13::i;:::-;33392:6:::1;33374:15;;:24;;;;;;;;;;;;;;;;;;33303:103:::0;:::o;23949:38::-;;;;;;;;;;;;;:::o;11740:201::-;10727:13;:11;:13::i;:::-;11849:1:::1;11829:22;;:8;:22;;::::0;11821:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11905:28;11924:8;11905:18;:28::i;:::-;11740:201:::0;:::o;36197:102::-;36238:5;36278:13;;;;;;;;;;;36270:7;;;;;;;;;;;36263:6;;;;;;;;;;;:14;;;;:::i;:::-;:28;;;;:::i;:::-;36256:35;;36197:102;:::o;38315:252::-;38390:7;38532:9;:27;38542:16;;;;;;;;;;;38532:27;;;;;;;;;;;;;;;;38508:9;:21;38518:10;;;;;;;;;;;38508:21;;;;;;;;;;;;;;;;38474:31;38498:6;38474:23;:31::i;:::-;38446:25;38464:6;38446:17;:25::i;:::-;38442:1;38417:24;38434:6;38417:16;:24::i;:::-;:26;;;;:::i;:::-;:54;;;;:::i;:::-;:88;;;;:::i;:::-;:112;;;;:::i;:::-;:142;;;;:::i;:::-;38410:149;;38315:252;;;:::o;9550:98::-;9603:7;9630:10;9623:17;;9550:98;:::o;28483:342::-;28600:1;28584:18;;:4;:18;;;28576:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28681:1;28662:21;;:7;:21;;;28654:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28764:6;28735:11;:17;28747:4;28735:17;;;;;;;;;;;;;;;:26;28753:7;28735:26;;;;;;;;;;;;;;;:35;;;;28801:7;28786:31;;28795:4;28786:31;;;28810:6;28786:31;;;;;;:::i;:::-;;;;;;;;28483:342;;;:::o;31385:402::-;31458:4;31488:23;;;;;;;;;;;31478:33;;:6;:33;;;:68;;;;31525:21;;;;;;;;;;;31515:31;;:6;:31;;;31478:68;:105;;;;31560:23;;;;;;;;;;;31550:33;;:6;:33;;;31478:105;31475:149;;;31607:5;31600:12;;;;31475:149;31652:21;;;;;;;;;;;31639:34;;:9;:34;;;:76;;;;31698:16;;;;;;;;;;;31677:38;;:9;:38;;;31639:76;31636:119;;;31739:4;31732:11;;;;31636:119;31774:5;31767:12;;31385:402;;;;;:::o;11006:132::-;11081:12;:10;:12::i;:::-;11070:23;;:7;:5;:7::i;:::-;:23;;;11062:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11006:132::o;28831:404::-;28931:24;28958;28968:4;28974:7;28958:9;:24::i;:::-;28931:51;;29017:17;28997:16;:37;28993:235;;29079:6;29059:16;:26;;29051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29155:50;29164:4;29170:7;29198:6;29179:16;:25;29155:8;:50::i;:::-;28993:235;28920:315;28831:404;;;:::o;38831:1831::-;38935:1;38919:18;;:4;:18;;;38911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39012:1;38998:16;;:2;:16;;;38990:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39092:6;39073:9;:15;39083:4;39073:15;;;;;;;;;;;;;;;;:25;;39065:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39158:17;;;;;;;;;;;39154:136;;39208:7;:5;:7::i;:::-;39200:15;;:4;:15;;;:32;;;;39225:7;:5;:7::i;:::-;39219:13;;:2;:13;;;39200:32;39192:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;39154:136;39302:18;39364:21;39376:4;39382:2;39364:11;:21::i;:::-;39361:158;;;39424:1;39411:14;;39361:158;;;39489:18;39500:6;39489:10;:18::i;:::-;39476:31;;39361:158;39531:23;39566:10;39557:6;:19;;;;:::i;:::-;39531:45;;39668:21;39686:2;39668:17;:21::i;:::-;39667:22;:41;;;;;39701:7;:5;:7::i;:::-;39693:15;;:4;:15;;;;39667:41;:62;;;;;39712:17;;;;;;;;;;;39667:62;39664:202;;;39800:10;39780:15;39764:13;39774:2;39764:9;:13::i;:::-;:31;;;;:::i;:::-;39763:47;;39755:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;39664:202;39895:1;39881:10;:15;39878:111;;39922:34;39939:4;39945:2;39949:6;39922:16;:34::i;:::-;39971:7;;;;39878:111;40024:28;40035:4;40041:10;40024;:28::i;:::-;40068:97;40080:25;40098:6;40080:17;:25::i;:::-;40107:31;40131:6;40107:23;:31::i;:::-;40140:24;40157:6;40140:16;:24::i;:::-;40068:97;;;;;;;;:::i;:::-;;;;;;;;40181:40;40204:4;40210:2;40214:6;40181:22;:40::i;:::-;40178:404;;;40247:36;40266:4;40272:2;40276:6;40247:18;:36::i;:::-;40178:404;;;40401:25;40419:6;40401:17;:25::i;:::-;40376:9;:21;40386:10;;;;;;;;;;;40376:21;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;40472:31;40496:6;40472:23;:31::i;:::-;40441:9;:27;40451:16;;;;;;;;;;;40441:27;;;;;;;;;;;;;;;;:62;;;;;;;:::i;:::-;;;;;;;;40546:24;40563:6;40546:16;:24::i;:::-;40518:9;:24;40536:4;40518:24;;;;;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;;;;;40178:404;40611:43;40628:4;40634:2;40638:15;40611:16;:43::i;:::-;38900:1762;;38831:1831;;;;:::o;46400:131::-;46463:11;46519:4;46509:6;;;;;;;;;;;46500:15;;:6;:15;;;;:::i;:::-;46499:24;;;;:::i;:::-;46492:31;;46400:131;;;:::o;46676:145::-;46746:11;46809:4;46792:13;;;;;;;;;;;46783:22;;:6;:22;;;;:::i;:::-;46782:31;;;;:::i;:::-;46775:38;;46676:145;;;:::o;46537:133::-;46601:11;46658:4;46647:7;;;;;;;;;;;46638:16;;:6;:16;;;;:::i;:::-;46637:25;;;;:::i;:::-;46630:32;;46537:133;;;:::o;12101:191::-;12175:16;12194:6;;;;;;;;;;;12175:25;;12220:8;12211:6;;:17;;;;;;;;;;;;;;;;;;12275:8;12244:40;;12265:8;12244:40;;;;;;;;;;;;12164:128;12101:191;:::o;43834:2298::-;43926:20;43985:5;43962:28;;:19;;;;;;;;;;;:28;;;43959:68;;44014:1;44007:8;;;;43959:68;44157:14;44133:9;:21;44143:10;;;;;;;;;;;44133:21;;;;;;;;;;;;;;;;44103:9;:27;44113:16;;;;;;;;;;;44103:27;;;;;;;;;;;;;;;;:51;;;;:::i;:::-;:68;44100:117;;;44204:1;44197:8;;;;44100:117;44229:26;44306:18;44275:9;:27;44285:16;;;;;;;;;;;44275:27;;;;;;;;;;;;;;;;:49;44272:288;;44410:18;44379:9;:27;44389:16;;;;;;;;;;;44379:27;;;;;;;;;;;;;;;;:49;;;;;;;;;;;44475:18;44447:9;:24;44465:4;44447:24;;;;;;;;;;;;;;;;:46;;;;;;;;;;;44530:18;44523:25;;;;;44272:288;44600:18;44575:9;:21;44585:10;;;;;;;;;;;44575:21;;;;;;;;;;;;;;;;:43;44572:276;;44698:18;44673:9;:21;44683:10;;;;;;;;;;;44673:21;;;;;;;;;;;;;;;;:43;;;;;;;;;;;44763:18;44735:9;:24;44753:4;44735:24;;;;;;;;;;;;;;;;:46;;;;;;;;;;;44818:18;44811:25;;;;;44572:276;44881:9;:21;44891:10;;;;;;;;;;;44881:21;;;;;;;;;;;;;;;;44860:42;;44964:1;44940:9;:21;44950:10;;;;;;;;;;;44940:21;;;;;;;;;;;;;;;:25;;;;45008:18;44980:9;:24;44998:4;44980:24;;;;;;;;;;;;;;;;:46;;;;;;;;;;;45075:18;45053;:40;45050:106;;45126:18;45119:25;;;;;45050:106;45168:17;45251:18;45220:9;:27;45230:16;;;;;;;;;;;45220:27;;;;;;;;;;;;;;;;45199:18;:48;;;;:::i;:::-;:70;45196:350;;45307:9;:27;45317:16;;;;;;;;;;;45307:27;;;;;;;;;;;;;;;;45295:39;;45408:9;45380;:24;45398:4;45380:24;;;;;;;;;;;;;;;;:37;;;;;;;;;;;45466:1;45436:9;:27;45446:16;;;;;;;;;;;45436:27;;;;;;;;;;;;;;;:31;;;;45525:9;45504:18;:30;;;;:::i;:::-;45497:37;;;;;;45196:350;45558:20;45602:12;45581:18;:33;;;;:::i;:::-;45558:56;;45659:12;45628:9;:27;45638:16;;;;;;;;;;;45628:27;;;;;;;;;;;;;;;;:43;45625:270;;45757:12;45726:9;:27;45736:16;;;;;;;;;;;45726:27;;;;;;;;;;;;;;;;:43;;;;;;;;;;;45816:12;45788:9;:24;45806:4;45788:24;;;;;;;;;;;;;;;;:40;;;;;;;;;;;45865:18;45858:25;;;;;;;45625:270;45919:9;:27;45929:16;;;;;;;;;;;45919:27;;;;;;;;;;;;;;;;45907:39;;46012:1;45982:9;:27;45992:16;;;;;;;;;;;45982:27;;;;;;;;;;;;;;;:31;;;;46056:9;46028;:24;46046:4;46028:24;;;;;;;;;;;;;;;;:37;;;;;;;;;;;46115:9;46094:18;:30;;;;:::i;:::-;46087:37;;;;;43834:2298;;;;:::o;48733:7374::-;48920:68;48937:7;:5;:7::i;:::-;48946:22;48970:17;48920:16;:68::i;:::-;49059:77;49075:42;49119:16;49059:15;:77::i;:::-;49166;49182:42;49226:16;49166:15;:77::i;:::-;49273;49289:42;49333:16;49273:15;:77::i;:::-;49380:78;49396:42;49440:17;49380:15;:78::i;:::-;49489:77;49505:42;49549:16;49489:15;:77::i;:::-;49596;49612:42;49656:16;49596:15;:77::i;:::-;49703;49719:42;49763:16;49703:15;:77::i;:::-;49810:78;49826:42;49870:17;49810:15;:78::i;:::-;49919:77;49935:42;49979:16;49919:15;:77::i;:::-;50026;50042:42;50086:16;50026:15;:77::i;:::-;50133;50149:42;50193:16;50133:15;:77::i;:::-;50240;50256:42;50300:16;50240:15;:77::i;:::-;50347;50363:42;50407:16;50347:15;:77::i;:::-;50454;50470:42;50514:16;50454:15;:77::i;:::-;50561;50577:42;50621:16;50561:15;:77::i;:::-;50668;50684:42;50728:16;50668:15;:77::i;:::-;50775;50791:42;50835:16;50775:15;:77::i;:::-;50882;50898:42;50942:16;50882:15;:77::i;:::-;50989;51005:42;51049:16;50989:15;:77::i;:::-;51096;51112:42;51156:16;51096:15;:77::i;:::-;51203;51219:42;51263:16;51203:15;:77::i;:::-;51310;51326:42;51370:16;51310:15;:77::i;:::-;51417:78;51433:42;51477:17;51417:15;:78::i;:::-;51526:77;51542:42;51586:16;51526:15;:77::i;:::-;51633;51649:42;51693:16;51633:15;:77::i;:::-;51740;51756:42;51800:16;51740:15;:77::i;:::-;51847;51863:42;51907:16;51847:15;:77::i;:::-;51954;51970:42;52014:16;51954:15;:77::i;:::-;52061:76;52077:42;52121:15;52061;:76::i;:::-;52166:77;52182:42;52226:16;52166:15;:77::i;:::-;52273;52289:42;52333:16;52273:15;:77::i;:::-;52380;52396:42;52440:16;52380:15;:77::i;:::-;52487:76;52503:42;52547:15;52487;:76::i;:::-;52592:77;52608:42;52652:16;52592:15;:77::i;:::-;52699;52715:42;52759:16;52699:15;:77::i;:::-;52806;52822:42;52866:16;52806:15;:77::i;:::-;52913:76;52929:42;52973:15;52913;:76::i;:::-;53018;53034:42;53078:15;53018;:76::i;:::-;53123:74;53139:42;53183:13;53123:15;:74::i;:::-;53223:77;53239:42;53283:16;53223:15;:77::i;:::-;53330;53346:42;53390:16;53330:15;:77::i;:::-;53437;53453:42;53497:16;53437:15;:77::i;:::-;53544:76;53560:42;53604:15;53544;:76::i;:::-;53649:77;53665:42;53709:16;53649:15;:77::i;:::-;53756;53772:42;53816:16;53756:15;:77::i;:::-;53863:78;53879:42;53923:17;53863:15;:78::i;:::-;53972;53988:42;54032:17;53972:15;:78::i;:::-;54081:77;54097:42;54141:16;54081:15;:77::i;:::-;54188;54204:42;54248:16;54188:15;:77::i;:::-;54295;54311:42;54355:16;54295:15;:77::i;:::-;54402;54418:42;54462:16;54402:15;:77::i;:::-;54509:78;54525:42;54569:17;54509:15;:78::i;:::-;54618:77;54634:42;54678:16;54618:15;:77::i;:::-;54725;54741:42;54785:16;54725:15;:77::i;:::-;54832:78;54848:42;54892:17;54832:15;:78::i;:::-;54941:77;54957:42;55001:16;54941:15;:77::i;:::-;55048:76;55064:42;55108:15;55048;:76::i;:::-;55153:77;55169:42;55213:16;55153:15;:77::i;:::-;55346:99;55362:42;55442:1;55422:16;55414:29;;;;:::i;:::-;55346:15;:99::i;:::-;55456;55472:42;55552:1;55532:16;55524:29;;;;:::i;:::-;55456:15;:99::i;:::-;55566:98;55582:42;55661:1;55642:15;55634:28;;;;:::i;:::-;55566:15;:98::i;:::-;55675;55691:42;55770:1;55751:15;55743:28;;;;:::i;:::-;55675:15;:98::i;:::-;55784;55800:42;55879:1;55860:15;55852:28;;;;:::i;:::-;55784:15;:98::i;:::-;55893;55909:42;55988:1;55969:15;55961:28;;;;:::i;:::-;55893:15;:98::i;:::-;56002:97;56018:42;56096:1;56078:14;56070:27;;;;:::i;:::-;56002:15;:97::i;:::-;48733:7374::o;47541:220::-;47664:6;47645:9;:15;47655:4;47645:15;;;;;;;;;;;;;;;;:25;;;;;;;;;;;47698:6;47681:9;:13;47691:2;47681:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;47742:2;47727:26;;47736:4;47727:26;;;47746:6;47727:26;;;;;;:::i;:::-;;;;;;;;47541:220;;;:::o;47167:366::-;47257:1;47243:10;:15;:34;;;;47276:1;47262:10;:8;:10::i;:::-;:15;;;47243:34;47303:7;47240:81;47407:10;47388:9;:15;47398:4;47388:15;;;;;;;;;;;;;;;;:29;;;;;;;;;;;47508:10;47480:9;:24;47498:4;47480:24;;;;;;;;;;;;;;;;:38;;;;;;;;;;;47167:366;;;:::o;40670:2125::-;40759:23;40785:26;40804:6;40785:18;:26::i;:::-;40759:52;;40846:1;40827:15;:20;40824:67;;40873:7;;;40824:67;40903:20;40926:16;:14;:16::i;:::-;40903:39;;40976:12;40958:15;:30;40955:394;;;41073:26;41115:15;41102:12;:28;;;;:::i;:::-;41073:57;;41164;41202:18;41164:37;:57::i;:::-;41145:76;;;;;:::i;:::-;;;40999:234;40955:394;;;41269:12;41251:15;:30;41248:101;;;41325:12;41307:30;;41248:101;40955:394;41390:23;41416:21;41390:47;;41448:34;41466:15;41448:17;:34::i;:::-;41493:20;41540:15;41516:21;:39;;;;:::i;:::-;41493:62;;41571:27;41585:12;41571:27;;;;;;:::i;:::-;;;;;;;;41659:1;41650:6;;;;;;;;;;;:10;;;:36;;;;;41665:21;41677:4;41683:2;41665:11;:21::i;:::-;41664:22;41650:36;41647:736;;;41712:18;41733;41744:6;41733:10;:18::i;:::-;41712:39;;41766:17;41811:1;41786:24;41803:6;41786:16;:24::i;:::-;:26;;;;:::i;:::-;41766:46;;41836:21;;;;;;;;;;;41830:27;;:2;:27;;;:62;;;;;41869:23;;;;;;;;;;;41861:31;;:4;:31;;;;41830:62;:97;;;;;41904:23;;;;;;;;;;;41896:31;;:4;:31;;;;41830:97;41827:545;;;41961:18;41982:42;42003:12;42017:6;;;;;;;;;;;41982:42;;:20;:42::i;:::-;41961:63;;42047:35;42060:9;42071:10;42047:12;:35::i;:::-;42043:314;;42112:85;42132:9;42143:10;42155;42167:15;42184:12;42112:85;;;;;;;;;;:::i;:::-;;;;;;;;42043:314;;;42251:86;42272:9;42283:10;42295;42307:15;42324:12;42251:86;;;;;;;;;;:::i;:::-;;;;;;;;42043:314;41942:430;41827:545;41697:686;;41647:736;42430:25;42458:49;42479:12;42493:13;;;;;;;;;;;42458:49;;:20;:49::i;:::-;42430:77;;42518:19;42540:43;42561:12;42575:7;;;;;;;;;;;42540:43;;:20;:43::i;:::-;42518:65;;42619:1;42599:17;:21;42596:99;;;42637:46;42647:16;;;;;;;;;;;42665:17;42637:9;:46::i;:::-;;42596:99;42724:1;42710:11;:15;42707:81;;;42742:34;42752:10;;;;;;;;;;;42764:11;42742:9;:34::i;:::-;;42707:81;40748:2047;;;;;;40670:2125;;;;:::o;47925:307::-;48031:1;48001:22;:26;48024:2;48001:26;;;;;;;;;;;;;;;;:31;48049:7;47998:82;48106:1;48095:7;:12;48092:50;48124:7;48092:50;48154:14;48174:2;48154:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48217:7;48188:22;:26;48211:2;48188:26;;;;;;;;;;;;;;;:36;;;;47925:307;;;:::o;32003:629::-;32078:1;32068:6;:11;32065:49;32096:7;32065:49;32126:21;32164:1;32150:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32126:40;;32195:4;32177;32182:1;32177:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32221:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32211:4;32216:1;32211:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;32257:58;32274:4;32289:16;;;;;;;;;;;32308:6;32257:8;:58::i;:::-;32332:16;;;;;;;;;;;:67;;;32414:6;32435:1;32451:4;32478;32514:24;;;;;;;;;;;32498:40;;:15;:40;;;;:::i;:::-;32332:217;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32328:297;;32591:22;32606:6;32591:22;;;;;;:::i;:::-;;;;;;;;32328:297;;;;32054:578;32003:629;;:::o;46140:252::-;46232:24;46374:10;:8;:10::i;:::-;46345:39;;46362:8;46346:13;:24;;;;:::i;:::-;46345:39;;;;:::i;:::-;46338:46;;46140:252;;;;:::o;32640:565::-;32722:4;32759:1;32742:13;:18;:37;;;;32778:1;32764:10;:15;32742:37;32739:80;;;32803:4;32796:11;;;;32739:80;32831:65;32848:4;32863:16;;;;;;;;;;;32882:13;32831:8;:65::i;:::-;32911:16;;;;;;;;;;;:32;;;32951:10;32985:4;33005:13;33033:1;33049;33065:7;:5;:7::i;:::-;33087:15;32911:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32907:291;;33181:5;33174:12;;;;32907:291;;;;33136:4;33129:11;;32640:565;;;;;:::o;36353:119::-;36425:4;36449:2;:7;;:15;36457:6;36449:15;;;;;;;;;;;;;;;;;;;;;;;36442:22;;36353:119;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:86::-;1384:7;1424:4;1417:5;1413:16;1402:27;;1349:86;;;:::o;1441:112::-;1524:22;1540:5;1524:22;:::i;:::-;1519:3;1512:35;1441:112;;:::o;1559:214::-;1648:4;1686:2;1675:9;1671:18;1663:26;;1699:67;1763:1;1752:9;1748:17;1739:6;1699:67;:::i;:::-;1559:214;;;;:::o;1860:117::-;1969:1;1966;1959:12;2106:126;2143:7;2183:42;2176:5;2172:54;2161:65;;2106:126;;;:::o;2238:96::-;2275:7;2304:24;2322:5;2304:24;:::i;:::-;2293:35;;2238:96;;;:::o;2340:122::-;2413:24;2431:5;2413:24;:::i;:::-;2406:5;2403:35;2393:63;;2452:1;2449;2442:12;2393:63;2340:122;:::o;2468:139::-;2514:5;2552:6;2539:20;2530:29;;2568:33;2595:5;2568:33;:::i;:::-;2468:139;;;;:::o;2613:77::-;2650:7;2679:5;2668:16;;2613:77;;;:::o;2696:122::-;2769:24;2787:5;2769:24;:::i;:::-;2762:5;2759:35;2749:63;;2808:1;2805;2798:12;2749:63;2696:122;:::o;2824:139::-;2870:5;2908:6;2895:20;2886:29;;2924:33;2951:5;2924:33;:::i;:::-;2824:139;;;;:::o;2969:474::-;3037:6;3045;3094:2;3082:9;3073:7;3069:23;3065:32;3062:119;;;3100:79;;:::i;:::-;3062:119;3220:1;3245:53;3290:7;3281:6;3270:9;3266:22;3245:53;:::i;:::-;3235:63;;3191:117;3347:2;3373:53;3418:7;3409:6;3398:9;3394:22;3373:53;:::i;:::-;3363:63;;3318:118;2969:474;;;;;:::o;3449:90::-;3483:7;3526:5;3519:13;3512:21;3501:32;;3449:90;;;:::o;3545:109::-;3626:21;3641:5;3626:21;:::i;:::-;3621:3;3614:34;3545:109;;:::o;3660:210::-;3747:4;3785:2;3774:9;3770:18;3762:26;;3798:65;3860:1;3849:9;3845:17;3836:6;3798:65;:::i;:::-;3660:210;;;;:::o;3876:329::-;3935:6;3984:2;3972:9;3963:7;3959:23;3955:32;3952:119;;;3990:79;;:::i;:::-;3952:119;4110:1;4135:53;4180:7;4171:6;4160:9;4156:22;4135:53;:::i;:::-;4125:63;;4081:117;3876:329;;;;:::o;4211:619::-;4288:6;4296;4304;4353:2;4341:9;4332:7;4328:23;4324:32;4321:119;;;4359:79;;:::i;:::-;4321:119;4479:1;4504:53;4549:7;4540:6;4529:9;4525:22;4504:53;:::i;:::-;4494:63;;4450:117;4606:2;4632:53;4677:7;4668:6;4657:9;4653:22;4632:53;:::i;:::-;4622:63;;4577:118;4734:2;4760:53;4805:7;4796:6;4785:9;4781:22;4760:53;:::i;:::-;4750:63;;4705:118;4211:619;;;;;:::o;4836:118::-;4923:24;4941:5;4923:24;:::i;:::-;4918:3;4911:37;4836:118;;:::o;4960:222::-;5053:4;5091:2;5080:9;5076:18;5068:26;;5104:71;5172:1;5161:9;5157:17;5148:6;5104:71;:::i;:::-;4960:222;;;;:::o;5188:118::-;5259:22;5275:5;5259:22;:::i;:::-;5252:5;5249:33;5239:61;;5296:1;5293;5286:12;5239:61;5188:118;:::o;5312:135::-;5356:5;5394:6;5381:20;5372:29;;5410:31;5435:5;5410:31;:::i;:::-;5312:135;;;;:::o;5453:325::-;5510:6;5559:2;5547:9;5538:7;5534:23;5530:32;5527:119;;;5565:79;;:::i;:::-;5527:119;5685:1;5710:51;5753:7;5744:6;5733:9;5729:22;5710:51;:::i;:::-;5700:61;;5656:115;5453:325;;;;:::o;5784:329::-;5843:6;5892:2;5880:9;5871:7;5867:23;5863:32;5860:119;;;5898:79;;:::i;:::-;5860:119;6018:1;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5989:117;5784:329;;;;:::o;6119:116::-;6189:21;6204:5;6189:21;:::i;:::-;6182:5;6179:32;6169:60;;6225:1;6222;6215:12;6169:60;6119:116;:::o;6241:133::-;6284:5;6322:6;6309:20;6300:29;;6338:30;6362:5;6338:30;:::i;:::-;6241:133;;;;:::o;6380:323::-;6436:6;6485:2;6473:9;6464:7;6460:23;6456:32;6453:119;;;6491:79;;:::i;:::-;6453:119;6611:1;6636:50;6678:7;6669:6;6658:9;6654:22;6636:50;:::i;:::-;6626:60;;6582:114;6380:323;;;;:::o;6709:474::-;6777:6;6785;6834:2;6822:9;6813:7;6809:23;6805:32;6802:119;;;6840:79;;:::i;:::-;6802:119;6960:1;6985:53;7030:7;7021:6;7010:9;7006:22;6985:53;:::i;:::-;6975:63;;6931:117;7087:2;7113:53;7158:7;7149:6;7138:9;7134:22;7113:53;:::i;:::-;7103:63;;7058:118;6709:474;;;;;:::o;7189:60::-;7217:3;7238:5;7231:12;;7189:60;;;:::o;7255:142::-;7305:9;7338:53;7356:34;7365:24;7383:5;7365:24;:::i;:::-;7356:34;:::i;:::-;7338:53;:::i;:::-;7325:66;;7255:142;;;:::o;7403:126::-;7453:9;7486:37;7517:5;7486:37;:::i;:::-;7473:50;;7403:126;;;:::o;7535:152::-;7611:9;7644:37;7675:5;7644:37;:::i;:::-;7631:50;;7535:152;;;:::o;7693:183::-;7806:63;7863:5;7806:63;:::i;:::-;7801:3;7794:76;7693:183;;:::o;7882:274::-;8001:4;8039:2;8028:9;8024:18;8016:26;;8052:97;8146:1;8135:9;8131:17;8122:6;8052:97;:::i;:::-;7882:274;;;;:::o;8162:118::-;8249:24;8267:5;8249:24;:::i;:::-;8244:3;8237:37;8162:118;;:::o;8286:222::-;8379:4;8417:2;8406:9;8402:18;8394:26;;8430:71;8498:1;8487:9;8483:17;8474:6;8430:71;:::i;:::-;8286:222;;;;:::o;8514:151::-;8589:9;8622:37;8653:5;8622:37;:::i;:::-;8609:50;;8514:151;;;:::o;8671:181::-;8783:62;8839:5;8783:62;:::i;:::-;8778:3;8771:75;8671:181;;:::o;8858:272::-;8976:4;9014:2;9003:9;8999:18;8991:26;;9027:96;9120:1;9109:9;9105:17;9096:6;9027:96;:::i;:::-;8858:272;;;;:::o;9136:180::-;9184:77;9181:1;9174:88;9281:4;9278:1;9271:15;9305:4;9302:1;9295:15;9322:320;9366:6;9403:1;9397:4;9393:12;9383:22;;9450:1;9444:4;9440:12;9471:18;9461:81;;9527:4;9519:6;9515:17;9505:27;;9461:81;9589:2;9581:6;9578:14;9558:18;9555:38;9552:84;;9608:18;;:::i;:::-;9552:84;9373:269;9322:320;;;:::o;9648:180::-;9696:77;9693:1;9686:88;9793:4;9790:1;9783:15;9817:4;9814:1;9807:15;9834:410;9874:7;9897:20;9915:1;9897:20;:::i;:::-;9892:25;;9931:20;9949:1;9931:20;:::i;:::-;9926:25;;9986:1;9983;9979:9;10008:30;10026:11;10008:30;:::i;:::-;9997:41;;10187:1;10178:7;10174:15;10171:1;10168:22;10148:1;10141:9;10121:83;10098:139;;10217:18;;:::i;:::-;10098:139;9882:362;9834:410;;;;:::o;10250:180::-;10298:77;10295:1;10288:88;10395:4;10392:1;10385:15;10419:4;10416:1;10409:15;10436:185;10476:1;10493:20;10511:1;10493:20;:::i;:::-;10488:25;;10527:20;10545:1;10527:20;:::i;:::-;10522:25;;10566:1;10556:35;;10571:18;;:::i;:::-;10556:35;10613:1;10610;10606:9;10601:14;;10436:185;;;;:::o;10627:223::-;10767:34;10763:1;10755:6;10751:14;10744:58;10836:6;10831:2;10823:6;10819:15;10812:31;10627:223;:::o;10856:366::-;10998:3;11019:67;11083:2;11078:3;11019:67;:::i;:::-;11012:74;;11095:93;11184:3;11095:93;:::i;:::-;11213:2;11208:3;11204:12;11197:19;;10856:366;;;:::o;11228:419::-;11394:4;11432:2;11421:9;11417:18;11409:26;;11481:9;11475:4;11471:20;11467:1;11456:9;11452:17;11445:47;11509:131;11635:4;11509:131;:::i;:::-;11501:139;;11228:419;;;:::o;11653:188::-;11691:3;11710:18;11726:1;11710:18;:::i;:::-;11705:23;;11742:18;11758:1;11742:18;:::i;:::-;11737:23;;11783:1;11780;11776:9;11769:16;;11806:4;11801:3;11798:13;11795:39;;;11814:18;;:::i;:::-;11795:39;11653:188;;;;:::o;11847:224::-;11987:34;11983:1;11975:6;11971:14;11964:58;12056:7;12051:2;12043:6;12039:15;12032:32;11847:224;:::o;12077:366::-;12219:3;12240:67;12304:2;12299:3;12240:67;:::i;:::-;12233:74;;12316:93;12405:3;12316:93;:::i;:::-;12434:2;12429:3;12425:12;12418:19;;12077:366;;;:::o;12449:419::-;12615:4;12653:2;12642:9;12638:18;12630:26;;12702:9;12696:4;12692:20;12688:1;12677:9;12673:17;12666:47;12730:131;12856:4;12730:131;:::i;:::-;12722:139;;12449:419;;;:::o;12874:191::-;12914:3;12933:20;12951:1;12933:20;:::i;:::-;12928:25;;12967:20;12985:1;12967:20;:::i;:::-;12962:25;;13010:1;13007;13003:9;12996:16;;13031:3;13028:1;13025:10;13022:36;;;13038:18;;:::i;:::-;13022:36;12874:191;;;;:::o;13071:181::-;13211:33;13207:1;13199:6;13195:14;13188:57;13071:181;:::o;13258:366::-;13400:3;13421:67;13485:2;13480:3;13421:67;:::i;:::-;13414:74;;13497:93;13586:3;13497:93;:::i;:::-;13615:2;13610:3;13606:12;13599:19;;13258:366;;;:::o;13630:419::-;13796:4;13834:2;13823:9;13819:18;13811:26;;13883:9;13877:4;13873:20;13869:1;13858:9;13854:17;13847:47;13911:131;14037:4;13911:131;:::i;:::-;13903:139;;13630:419;;;:::o;14055:177::-;14195:29;14191:1;14183:6;14179:14;14172:53;14055:177;:::o;14238:366::-;14380:3;14401:67;14465:2;14460:3;14401:67;:::i;:::-;14394:74;;14477:93;14566:3;14477:93;:::i;:::-;14595:2;14590:3;14586:12;14579:19;;14238:366;;;:::o;14610:419::-;14776:4;14814:2;14803:9;14799:18;14791:26;;14863:9;14857:4;14853:20;14849:1;14838:9;14834:17;14827:47;14891:131;15017:4;14891:131;:::i;:::-;14883:139;;14610:419;;;:::o;15035:224::-;15175:34;15171:1;15163:6;15159:14;15152:58;15244:7;15239:2;15231:6;15227:15;15220:32;15035:224;:::o;15265:366::-;15407:3;15428:67;15492:2;15487:3;15428:67;:::i;:::-;15421:74;;15504:93;15593:3;15504:93;:::i;:::-;15622:2;15617:3;15613:12;15606:19;;15265:366;;;:::o;15637:419::-;15803:4;15841:2;15830:9;15826:18;15818:26;;15890:9;15884:4;15880:20;15876:1;15865:9;15861:17;15854:47;15918:131;16044:4;15918:131;:::i;:::-;15910:139;;15637:419;;;:::o;16062:228::-;16202:34;16198:1;16190:6;16186:14;16179:58;16271:11;16266:2;16258:6;16254:15;16247:36;16062:228;:::o;16296:366::-;16438:3;16459:67;16523:2;16518:3;16459:67;:::i;:::-;16452:74;;16535:93;16624:3;16535:93;:::i;:::-;16653:2;16648:3;16644:12;16637:19;;16296:366;;;:::o;16668:419::-;16834:4;16872:2;16861:9;16857:18;16849:26;;16921:9;16915:4;16911:20;16907:1;16896:9;16892:17;16885:47;16949:131;17075:4;16949:131;:::i;:::-;16941:139;;16668:419;;;:::o;17093:180::-;17141:77;17138:1;17131:88;17238:4;17235:1;17228:15;17262:4;17259:1;17252:15;17279:233;17318:3;17341:24;17359:5;17341:24;:::i;:::-;17332:33;;17387:66;17380:5;17377:77;17374:103;;17457:18;;:::i;:::-;17374:103;17504:1;17497:5;17493:13;17486:20;;17279:233;;;:::o;17518:225::-;17658:34;17654:1;17646:6;17642:14;17635:58;17727:8;17722:2;17714:6;17710:15;17703:33;17518:225;:::o;17749:366::-;17891:3;17912:67;17976:2;17971:3;17912:67;:::i;:::-;17905:74;;17988:93;18077:3;17988:93;:::i;:::-;18106:2;18101:3;18097:12;18090:19;;17749:366;;;:::o;18121:419::-;18287:4;18325:2;18314:9;18310:18;18302:26;;18374:9;18368:4;18364:20;18360:1;18349:9;18345:17;18338:47;18402:131;18528:4;18402:131;:::i;:::-;18394:139;;18121:419;;;:::o;18546:223::-;18686:34;18682:1;18674:6;18670:14;18663:58;18755:6;18750:2;18742:6;18738:15;18731:31;18546:223;:::o;18775:366::-;18917:3;18938:67;19002:2;18997:3;18938:67;:::i;:::-;18931:74;;19014:93;19103:3;19014:93;:::i;:::-;19132:2;19127:3;19123:12;19116:19;;18775:366;;;:::o;19147:419::-;19313:4;19351:2;19340:9;19336:18;19328:26;;19400:9;19394:4;19390:20;19386:1;19375:9;19371:17;19364:47;19428:131;19554:4;19428:131;:::i;:::-;19420:139;;19147:419;;;:::o;19572:221::-;19712:34;19708:1;19700:6;19696:14;19689:58;19781:4;19776:2;19768:6;19764:15;19757:29;19572:221;:::o;19799:366::-;19941:3;19962:67;20026:2;20021:3;19962:67;:::i;:::-;19955:74;;20038:93;20127:3;20038:93;:::i;:::-;20156:2;20151:3;20147:12;20140:19;;19799:366;;;:::o;20171:419::-;20337:4;20375:2;20364:9;20360:18;20352:26;;20424:9;20418:4;20414:20;20410:1;20399:9;20395:17;20388:47;20452:131;20578:4;20452:131;:::i;:::-;20444:139;;20171:419;;;:::o;20596:182::-;20736:34;20732:1;20724:6;20720:14;20713:58;20596:182;:::o;20784:366::-;20926:3;20947:67;21011:2;21006:3;20947:67;:::i;:::-;20940:74;;21023:93;21112:3;21023:93;:::i;:::-;21141:2;21136:3;21132:12;21125:19;;20784:366;;;:::o;21156:419::-;21322:4;21360:2;21349:9;21345:18;21337:26;;21409:9;21403:4;21399:20;21395:1;21384:9;21380:17;21373:47;21437:131;21563:4;21437:131;:::i;:::-;21429:139;;21156:419;;;:::o;21581:179::-;21721:31;21717:1;21709:6;21705:14;21698:55;21581:179;:::o;21766:366::-;21908:3;21929:67;21993:2;21988:3;21929:67;:::i;:::-;21922:74;;22005:93;22094:3;22005:93;:::i;:::-;22123:2;22118:3;22114:12;22107:19;;21766:366;;;:::o;22138:419::-;22304:4;22342:2;22331:9;22327:18;22319:26;;22391:9;22385:4;22381:20;22377:1;22366:9;22362:17;22355:47;22419:131;22545:4;22419:131;:::i;:::-;22411:139;;22138:419;;;:::o;22563:224::-;22703:34;22699:1;22691:6;22687:14;22680:58;22772:7;22767:2;22759:6;22755:15;22748:32;22563:224;:::o;22793:366::-;22935:3;22956:67;23020:2;23015:3;22956:67;:::i;:::-;22949:74;;23032:93;23121:3;23032:93;:::i;:::-;23150:2;23145:3;23141:12;23134:19;;22793:366;;;:::o;23165:419::-;23331:4;23369:2;23358:9;23354:18;23346:26;;23418:9;23412:4;23408:20;23404:1;23393:9;23389:17;23382:47;23446:131;23572:4;23446:131;:::i;:::-;23438:139;;23165:419;;;:::o;23590:222::-;23730:34;23726:1;23718:6;23714:14;23707:58;23799:5;23794:2;23786:6;23782:15;23775:30;23590:222;:::o;23818:366::-;23960:3;23981:67;24045:2;24040:3;23981:67;:::i;:::-;23974:74;;24057:93;24146:3;24057:93;:::i;:::-;24175:2;24170:3;24166:12;24159:19;;23818:366;;;:::o;24190:419::-;24356:4;24394:2;24383:9;24379:18;24371:26;;24443:9;24437:4;24433:20;24429:1;24418:9;24414:17;24407:47;24471:131;24597:4;24471:131;:::i;:::-;24463:139;;24190:419;;;:::o;24615:225::-;24755:34;24751:1;24743:6;24739:14;24732:58;24824:8;24819:2;24811:6;24807:15;24800:33;24615:225;:::o;24846:366::-;24988:3;25009:67;25073:2;25068:3;25009:67;:::i;:::-;25002:74;;25085:93;25174:3;25085:93;:::i;:::-;25203:2;25198:3;25194:12;25187:19;;24846:366;;;:::o;25218:419::-;25384:4;25422:2;25411:9;25407:18;25399:26;;25471:9;25465:4;25461:20;25457:1;25446:9;25442:17;25435:47;25499:131;25625:4;25499:131;:::i;:::-;25491:139;;25218:419;;;:::o;25643:228::-;25783:34;25779:1;25771:6;25767:14;25760:58;25852:11;25847:2;25839:6;25835:15;25828:36;25643:228;:::o;25877:366::-;26019:3;26040:67;26104:2;26099:3;26040:67;:::i;:::-;26033:74;;26116:93;26205:3;26116:93;:::i;:::-;26234:2;26229:3;26225:12;26218:19;;25877:366;;;:::o;26249:419::-;26415:4;26453:2;26442:9;26438:18;26430:26;;26502:9;26496:4;26492:20;26488:1;26477:9;26473:17;26466:47;26530:131;26656:4;26530:131;:::i;:::-;26522:139;;26249:419;;;:::o;26674:194::-;26714:4;26734:20;26752:1;26734:20;:::i;:::-;26729:25;;26768:20;26786:1;26768:20;:::i;:::-;26763:25;;26812:1;26809;26805:9;26797:17;;26836:1;26830:4;26827:11;26824:37;;;26841:18;;:::i;:::-;26824:37;26674:194;;;;:::o;26874:226::-;27014:34;27010:1;27002:6;26998:14;26991:58;27083:9;27078:2;27070:6;27066:15;27059:34;26874:226;:::o;27106:366::-;27248:3;27269:67;27333:2;27328:3;27269:67;:::i;:::-;27262:74;;27345:93;27434:3;27345:93;:::i;:::-;27463:2;27458:3;27454:12;27447:19;;27106:366;;;:::o;27478:419::-;27644:4;27682:2;27671:9;27667:18;27659:26;;27731:9;27725:4;27721:20;27717:1;27706:9;27702:17;27695:47;27759:131;27885:4;27759:131;:::i;:::-;27751:139;;27478:419;;;:::o;27903:442::-;28052:4;28090:2;28079:9;28075:18;28067:26;;28103:71;28171:1;28160:9;28156:17;28147:6;28103:71;:::i;:::-;28184:72;28252:2;28241:9;28237:18;28228:6;28184:72;:::i;:::-;28266;28334:2;28323:9;28319:18;28310:6;28266:72;:::i;:::-;27903:442;;;;;;:::o;28351:664::-;28556:4;28594:3;28583:9;28579:19;28571:27;;28608:71;28676:1;28665:9;28661:17;28652:6;28608:71;:::i;:::-;28689:72;28757:2;28746:9;28742:18;28733:6;28689:72;:::i;:::-;28771;28839:2;28828:9;28824:18;28815:6;28771:72;:::i;:::-;28853;28921:2;28910:9;28906:18;28897:6;28853:72;:::i;:::-;28935:73;29003:3;28992:9;28988:19;28979:6;28935:73;:::i;:::-;28351:664;;;;;;;;:::o;29021:180::-;29069:77;29066:1;29059:88;29166:4;29163:1;29156:15;29190:4;29187:1;29180:15;29207:143;29264:5;29295:6;29289:13;29280:22;;29311:33;29338:5;29311:33;:::i;:::-;29207:143;;;;:::o;29356:351::-;29426:6;29475:2;29463:9;29454:7;29450:23;29446:32;29443:119;;;29481:79;;:::i;:::-;29443:119;29601:1;29626:64;29682:7;29673:6;29662:9;29658:22;29626:64;:::i;:::-;29616:74;;29572:128;29356:351;;;;:::o;29713:85::-;29758:7;29787:5;29776:16;;29713:85;;;:::o;29804:158::-;29862:9;29895:61;29913:42;29922:32;29948:5;29922:32;:::i;:::-;29913:42;:::i;:::-;29895:61;:::i;:::-;29882:74;;29804:158;;;:::o;29968:147::-;30063:45;30102:5;30063:45;:::i;:::-;30058:3;30051:58;29968:147;;:::o;30121:114::-;30188:6;30222:5;30216:12;30206:22;;30121:114;;;:::o;30241:184::-;30340:11;30374:6;30369:3;30362:19;30414:4;30409:3;30405:14;30390:29;;30241:184;;;;:::o;30431:132::-;30498:4;30521:3;30513:11;;30551:4;30546:3;30542:14;30534:22;;30431:132;;;:::o;30569:108::-;30646:24;30664:5;30646:24;:::i;:::-;30641:3;30634:37;30569:108;;:::o;30683:179::-;30752:10;30773:46;30815:3;30807:6;30773:46;:::i;:::-;30851:4;30846:3;30842:14;30828:28;;30683:179;;;;:::o;30868:113::-;30938:4;30970;30965:3;30961:14;30953:22;;30868:113;;;:::o;31017:732::-;31136:3;31165:54;31213:5;31165:54;:::i;:::-;31235:86;31314:6;31309:3;31235:86;:::i;:::-;31228:93;;31345:56;31395:5;31345:56;:::i;:::-;31424:7;31455:1;31440:284;31465:6;31462:1;31459:13;31440:284;;;31541:6;31535:13;31568:63;31627:3;31612:13;31568:63;:::i;:::-;31561:70;;31654:60;31707:6;31654:60;:::i;:::-;31644:70;;31500:224;31487:1;31484;31480:9;31475:14;;31440:284;;;31444:14;31740:3;31733:10;;31141:608;;;31017:732;;;;:::o;31755:831::-;32018:4;32056:3;32045:9;32041:19;32033:27;;32070:71;32138:1;32127:9;32123:17;32114:6;32070:71;:::i;:::-;32151:80;32227:2;32216:9;32212:18;32203:6;32151:80;:::i;:::-;32278:9;32272:4;32268:20;32263:2;32252:9;32248:18;32241:48;32306:108;32409:4;32400:6;32306:108;:::i;:::-;32298:116;;32424:72;32492:2;32481:9;32477:18;32468:6;32424:72;:::i;:::-;32506:73;32574:3;32563:9;32559:19;32550:6;32506:73;:::i;:::-;31755:831;;;;;;;;:::o;32592:807::-;32841:4;32879:3;32868:9;32864:19;32856:27;;32893:71;32961:1;32950:9;32946:17;32937:6;32893:71;:::i;:::-;32974:72;33042:2;33031:9;33027:18;33018:6;32974:72;:::i;:::-;33056:80;33132:2;33121:9;33117:18;33108:6;33056:80;:::i;:::-;33146;33222:2;33211:9;33207:18;33198:6;33146:80;:::i;:::-;33236:73;33304:3;33293:9;33289:19;33280:6;33236:73;:::i;:::-;33319;33387:3;33376:9;33372:19;33363:6;33319:73;:::i;:::-;32592:807;;;;;;;;;:::o;33405:143::-;33462:5;33493:6;33487:13;33478:22;;33509:33;33536:5;33509:33;:::i;:::-;33405:143;;;;:::o;33554:663::-;33642:6;33650;33658;33707:2;33695:9;33686:7;33682:23;33678:32;33675:119;;;33713:79;;:::i;:::-;33675:119;33833:1;33858:64;33914:7;33905:6;33894:9;33890:22;33858:64;:::i;:::-;33848:74;;33804:128;33971:2;33997:64;34053:7;34044:6;34033:9;34029:22;33997:64;:::i;:::-;33987:74;;33942:129;34110:2;34136:64;34192:7;34183:6;34172:9;34168:22;34136:64;:::i;:::-;34126:74;;34081:129;33554:663;;;;;:::o

Swarm Source

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