ETH Price: $3,022.74 (+2.14%)
Gas: 1 Gwei

Token

DollarEuroPoundYenRiyalRupeeFrancYuanDinarPesoDram... (CURRENCY)
 

Overview

Max Total Supply

77,700,000 CURRENCY

Holders

9

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
omgiwannajeetthis.eth
Balance
1,054,937.431539945162484221 CURRENCY

Value
$0.00
0xe12b2e891ca9f48b2022750fceaa414fed1768db
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CURRENCY

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-11
*/

pragma solidity 0.8.20;

// SPDX-License-Identifier: MIT

/**
Twitter: https://twitter.com/CurrencyERC
Telegram: https://t.me/currencytokenERC


**/


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

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20{
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    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;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

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

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract CURRENCY is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    bool public tradingAllowed;

    mapping (address => bool) public isAMMPair;

    address public marketingAddress;
    address public devAddress;

    Taxes public buyTax;
    Taxes public sellTax;

    TokensForTax public tokensForTax;

    mapping(address => uint256) private _holderLastTransferBlock; // MEV protection
    bool public antiMevEnabled = true;

    bool public limited = true;

    uint256 public swapTokensAtAmt;

    address public lpPair;
    IDexRouter public dexRouter;
    address public immutable WETH;

    TxLimits public txLimits;

    uint64 public constant FEE_DIVISOR = 10000;

    // structs

    struct TxLimits {
        uint128 transactionLimit;
        uint128 walletLimit;
    }

    struct Taxes {
        uint64 marketingTax;
        uint64 devTax;
        uint64 liquidityTax;
        uint64 totalTax;
    }

    struct TokensForTax {
        uint80 tokensForMarketing;
        uint80 tokensForLiquidity;
        uint80 tokensForDev;
        bool gasSaver;
    }

    // events

    event UpdatedTransactionLimit(uint newMax);
    event UpdatedWalletLimit(uint newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint newAmt);
    event UpdatedSellTax(uint newAmt);

    // constructor

    constructor()
        ERC20("DollarEuroPoundYenRiyalRupeeFrancYuanDinarPesoDramRupiahTakaKroneKyatSolBalboaMeticalDalasiSomRealTengeApsarRinggitShillingBahtSterlingKorunaRialKronaRubleWonRandForintBahtLiraLeuBirrLekNakfaRielBolivarManatKwanzaMarkAfghaniColonLevShekel", "CURRENCY")
    {   
        _mint(msg.sender, 77_700_000 * 1e18);

        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 97){
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if(block.chainid == 42161){
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        txLimits.transactionLimit = uint128(totalSupply() * 20 / 1000);
        txLimits.walletLimit = uint128(totalSupply() * 2 / 100);
        swapTokensAtAmt = totalSupply() * 25 / 100000;

        marketingAddress = 0x11ab35d2F57ADEea4A5b336d4253072f5b503E5B; // update
        devAddress = 0x11ab35d2F57ADEea4A5b336d4253072f5b503E5B; // update

        buyTax.marketingTax = 1000; // 1% = 100
        buyTax.liquidityTax = 0;
        buyTax.devTax = 2000;
        buyTax.totalTax = buyTax.marketingTax + buyTax.liquidityTax + buyTax.devTax;

        sellTax.marketingTax = 1000;
        sellTax.liquidityTax = 0;
        sellTax.devTax = 2000;
        sellTax.totalTax = sellTax.marketingTax + sellTax.liquidityTax + sellTax.devTax;

        tokensForTax.gasSaver = true;

        WETH = dexRouter.WETH();
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingAllowed, "Trading not active");
            checkLimits(from, to, amount);
            amount -= handleTax(from, to, amount);
        }

        super._transfer(from,to,amount);
    }

    function checkLimits(address from, address to, uint256 amount) internal {
        if(limited){
            bool exFromLimitsTo = exemptFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);
            TxLimits memory _txLimits = txLimits;
            // buy
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            }
        }

        if (antiMevEnabled){
            if(isAMMPair[to]){
                require(_holderLastTransferBlock[from] < block.number, "Anti MEV");
            } else {
                _holderLastTransferBlock[to] = block.number;
                _holderLastTransferBlock[tx.origin] = block.number;
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        if(balanceOf(address(this)) >= swapTokensAtAmt && !isAMMPair[from]) {
            convertTaxes();
        }
        
        uint128 tax = 0;

        Taxes memory taxes;

        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }

        if(taxes.totalTax > 0){
            TokensForTax memory tokensForTaxUpdate = tokensForTax;
            tax = uint128(amount * taxes.totalTax / FEE_DIVISOR);
            tokensForTaxUpdate.tokensForLiquidity += uint80(tax * taxes.liquidityTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForMarketing += uint80(tax * taxes.marketingTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForDev += uint80(tax * taxes.devTax / taxes.totalTax / 1e9);
            tokensForTax = tokensForTaxUpdate;
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    function swapTokensForETH(uint256 tokenAmt) private {

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function convertTaxes() private {

        uint256 contractBalance = balanceOf(address(this));
        TokensForTax memory tokensForTaxMem = tokensForTax;
        uint256 totalTokensToSwap = tokensForTaxMem.tokensForLiquidity + tokensForTaxMem.tokensForMarketing + tokensForTaxMem.tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmt * 20){
            contractBalance = swapTokensAtAmt * 20;
        }

        if(tokensForTaxMem.tokensForLiquidity > 0){
            uint256 liquidityTokens = contractBalance * tokensForTaxMem.tokensForLiquidity / totalTokensToSwap;
            super._transfer(address(this), lpPair, liquidityTokens);
            try ILpPair(lpPair).sync(){} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForTaxMem.tokensForLiquidity;
        }

        if(contractBalance > 0){

            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            bool success;

            if(tokensForTaxMem.tokensForDev > 0){
                (success,) = devAddress.call{value: ethBalance * tokensForTaxMem.tokensForDev / totalTokensToSwap}("");  
            }

            ethBalance = address(this).balance;

            if(ethBalance > 0){
                (success,) = marketingAddress.call{value: ethBalance}("");  
            }
        }

        tokensForTaxMem.tokensForLiquidity = 0;
        tokensForTaxMem.tokensForMarketing = 0;
        tokensForTaxMem.tokensForDev = 0;

        tokensForTax = tokensForTaxMem;
    }

    // owner functions
    function setExemptFromFee(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexempt contract");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimit(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateTransactionLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.transactionLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedTransactionLimit(txLimits.transactionLimit);
    }

    function updateWalletLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low");
        txLimits.walletLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(txLimits.walletLimit);
    }

    function updateSwapTokensAmt(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmt = newAmount;
    }

    function updateBuyTax(uint64 _marketingTax, uint64 _liquidityTax, uint64 _devTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.devTax = _devTax;
        taxes.totalTax = _marketingTax + _liquidityTax + _devTax;
        require(taxes.totalTax  <= 1000, "Keep tax below 10%");
        emit UpdatedBuyTax(taxes.totalTax);
        buyTax = taxes;
    }

    function updateSellTax(uint64 _marketingTax, uint64 _liquidityTax, uint64 _devTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.liquidityTax = _liquidityTax;
        taxes.devTax = _devTax;
        taxes.totalTax = _marketingTax + _liquidityTax + _devTax;
        require(taxes.totalTax  <= 1000, "Keep tax below 10%");
        emit UpdatedSellTax(taxes.totalTax);
        sellTax = taxes;
    }

    function enableTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function removeLimits() external onlyOwner {
        limited = false;
        TxLimits memory _txLimits;
        uint256 supply = totalSupply();
        _txLimits.transactionLimit = uint128(supply);
        _txLimits.walletLimit = uint128(supply);
        txLimits = _txLimits;
        emit RemovedLimits();
    }

    function updateMevBlockerEnabled(bool _enabled) external onlyOwner {
        antiMevEnabled = _enabled;
    }



    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance);
    }

    function updateMarketingAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        marketingAddress = _address;
    }

    function updateDevAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        devAddress = _address;
    }

    receive() payable external {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","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":[],"name":"antiMevEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint80","name":"tokensForMarketing","type":"uint80"},{"internalType":"uint80","name":"tokensForLiquidity","type":"uint80"},{"internalType":"uint80","name":"tokensForDev","type":"uint80"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"inputs":[],"name":"txLimits","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateMevBlockerEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600160105f6101000a81548160ff0219169083151502179055506001601060016101000a81548160ff02191690831515021790555034801562000045575f80fd5b5060405180610120016040528060ee81526020016200745160ee91396040518060400160405280600881526020017f43555252454e43590000000000000000000000000000000000000000000000008152508160039081620000a89190620010f8565b508060049081620000ba9190620010f8565b5050505f620000ce62000b7a60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000188336a40459d70aacc862a80000062000b8160201b60201c565b5f60014603620001af57737a250d5630b4cf539739df2c5dacb4c659f2488d905062000262565b60054603620001d557737a250d5630b4cf539739df2c5dacb4c659f2488d905062000261565b60614603620001fb5773d99d1c33f9fc3444f8101754abc46c52416550d1905062000260565b61a4b146036200022257731b02da8cb0d097eb8d57a175b88c7d8b4799750690506200025f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000256906200123a565b60405180910390fd5b5b5b5b8060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e86014620002b762000cc060201b60201c565b620002c3919062001287565b620002cf9190620012fe565b60145f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550606460026200031c62000cc060201b60201c565b62000328919062001287565b620003349190620012fe565b60145f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550620186a060196200038462000cc060201b60201c565b62000390919062001287565b6200039c9190620012fe565b6011819055507311ab35d2f57adeea4a5b336d4253072f5b503e5b600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507311ab35d2f57adeea4a5b336d4253072f5b503e5b600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e8600c5f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600c5f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506107d0600c5f0160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600c5f0160089054906101000a900467ffffffffffffffff16600c5f0160109054906101000a900467ffffffffffffffff16600c5f015f9054906101000a900467ffffffffffffffff1662000524919062001348565b62000530919062001348565b600c5f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506103e8600d5f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600d5f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506107d0600d5f0160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600d5f0160089054906101000a900467ffffffffffffffff16600d5f0160109054906101000a900467ffffffffffffffff16600d5f015f9054906101000a900467ffffffffffffffff1662000634919062001348565b62000640919062001348565b600d5f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600e5f01601e6101000a81548160ff02191690831515021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007189190620013ef565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007b6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007dc9190620013ef565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396306080516040518363ffffffff1660e01b81526004016200081a92919062001430565b6020604051808303815f875af115801562000837573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200085d9190620013ef565b60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160095f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000b303060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000cc960201b60201c565b62000b733360135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000b6762000cc060201b60201c565b62000cc960201b60201c565b5062001657565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be990620014a9565b60405180910390fd5b8060025f82825462000c059190620014c9565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cb4919062001514565b60405180910390a35050565b5f600254905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000d3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d3190620015a3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000da29062001637565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000e87919062001514565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000f1057607f821691505b60208210810362000f265762000f2562000ecb565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f4d565b62000f96868362000f4d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000fe062000fda62000fd48462000fae565b62000fb7565b62000fae565b9050919050565b5f819050919050565b62000ffb8362000fc0565b620010136200100a8262000fe7565b84845462000f59565b825550505050565b5f90565b620010296200101b565b6200103681848462000ff0565b505050565b5b818110156200105d57620010515f826200101f565b6001810190506200103c565b5050565b601f821115620010ac57620010768162000f2c565b620010818462000f3e565b8101602085101562001091578190505b620010a9620010a08562000f3e565b8301826200103b565b50505b505050565b5f82821c905092915050565b5f620010ce5f1984600802620010b1565b1980831691505092915050565b5f620010e88383620010bd565b9150826002028217905092915050565b620011038262000e94565b67ffffffffffffffff8111156200111f576200111e62000e9e565b5b6200112b825462000ef8565b6200113882828562001061565b5f60209050601f8311600181146200116e575f841562001159578287015190505b620011658582620010db565b865550620011d4565b601f1984166200117e8662000f2c565b5f5b82811015620011a75784890151825560018201915060208501945060208101905062001180565b86831015620011c75784890151620011c3601f891682620010bd565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f436861696e206e6f7420636f6e666967757265640000000000000000000000005f82015250565b5f62001222601483620011dc565b91506200122f82620011ec565b602082019050919050565b5f6020820190508181035f830152620012538162001214565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620012938262000fae565b9150620012a08362000fae565b9250828202620012b08162000fae565b91508282048414831517620012ca57620012c96200125a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200130a8262000fae565b9150620013178362000fae565b9250826200132a5762001329620012d1565b5b828204905092915050565b5f67ffffffffffffffff82169050919050565b5f620013548262001335565b9150620013618362001335565b9250828201905067ffffffffffffffff8111156200138457620013836200125a565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620013b9826200138e565b9050919050565b620013cb81620013ad565b8114620013d6575f80fd5b50565b5f81519050620013e981620013c0565b92915050565b5f602082840312156200140757620014066200138a565b5b5f6200141684828501620013d9565b91505092915050565b6200142a81620013ad565b82525050565b5f604082019050620014455f8301856200141f565b6200145460208301846200141f565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001491601f83620011dc565b91506200149e826200145b565b602082019050919050565b5f6020820190508181035f830152620014c28162001483565b9050919050565b5f620014d58262000fae565b9150620014e28362000fae565b9250828201905080821115620014fd57620014fc6200125a565b5b92915050565b6200150e8162000fae565b82525050565b5f602082019050620015295f83018462001503565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200158b602483620011dc565b915062001598826200152f565b604082019050919050565b5f6020820190508181035f830152620015bc816200157d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200161f602283620011dc565b91506200162c82620015c3565b604082019050919050565b5f6020820190508181035f830152620016508162001611565b9050919050565b608051615dda620016775f395f818161219d01526141080152615dda5ff3fe60806040526004361061026a575f3560e01c8063715018a611610143578063a5ece941116100b5578063c78d0fa011610079578063c78d0fa014610909578063cc1776d314610933578063ccad03e114610960578063dd62ed3e14610988578063f270fde4146109c4578063f2fde38b146109ef57610271565b8063a5ece94114610815578063a9059cbb1461083f578063ad5c46481461087b578063b0249cc6146108a5578063bedafd01146108e157610271565b80638becc57d116101075780638becc57d146106f75780638d3e6e401461071f5780638da5cb5b1461075b57806395d89b41146107855780639e93ad8e146107af578063a457c2d7146107d957610271565b8063715018a614610663578063751039fc14610679578063850337621461068f578063860a32ec146106b75780638a8c523c146106e157610271565b80633ad10ef6116101dc57806359758994116101a057806359758994146105445780635a90a49e1461056c578063627e9d8e146105a857806366ebd39a146105d25780636d7adcad146105fa57806370a082311461062757610271565b80633ad10ef614610471578063452ed4f11461049b5780634f7041a5146104c557806353371be0146104f25780635431c94e1461051c57610271565b80632369bf831161022e5780632369bf831461035757806323b872dd1461037f578063286965a7146103bb578063313ce567146103e357806336e18e191461040d578063395093511461043557610271565b806306fdde03146102755780630758d9241461029f578063095ea7b3146102c957806318160ddd14610305578063210459181461032f57610271565b3661027157005b5f80fd5b348015610280575f80fd5b50610289610a17565b60405161029691906144c8565b60405180910390f35b3480156102aa575f80fd5b506102b3610aa7565b6040516102c09190614562565b60405180910390f35b3480156102d4575f80fd5b506102ef60048036038101906102ea91906145ed565b610acc565b6040516102fc9190614645565b60405180910390f35b348015610310575f80fd5b50610319610aee565b604051610326919061466d565b60405180910390f35b34801561033a575f80fd5b5061035560048036038101906103509190614686565b610af7565b005b348015610362575f80fd5b5061037d600480360381019061037891906146b1565b610c5e565b005b34801561038a575f80fd5b506103a560048036038101906103a091906146dc565b610da5565b6040516103b29190614645565b60405180910390f35b3480156103c6575f80fd5b506103e160048036038101906103dc9190614769565b610dd3565b005b3480156103ee575f80fd5b506103f7611056565b60405161040491906147d4565b60405180910390f35b348015610418575f80fd5b50610433600480360381019061042e9190614832565b61105e565b005b348015610440575f80fd5b5061045b600480360381019061045691906145ed565b61124a565b6040516104689190614645565b60405180910390f35b34801561047c575f80fd5b50610485611280565b604051610492919061486c565b60405180910390f35b3480156104a6575f80fd5b506104af6112a5565b6040516104bc919061486c565b60405180910390f35b3480156104d0575f80fd5b506104d96112ca565b6040516104e99493929190614894565b60405180910390f35b3480156104fd575f80fd5b50610506611333565b6040516105139190614645565b60405180910390f35b348015610527575f80fd5b50610542600480360381019061053d91906148d7565b611345565b005b34801561054f575f80fd5b5061056a6004803603810190610565919061493f565b6114d4565b005b348015610577575f80fd5b50610592600480360381019061058d91906146b1565b611586565b60405161059f9190614645565b60405180910390f35b3480156105b3575f80fd5b506105bc6115a3565b6040516105c99190614645565b60405180910390f35b3480156105dd575f80fd5b506105f860048036038101906105f39190614832565b6115b5565b005b348015610605575f80fd5b5061060e6117a3565b60405161061e949392919061498e565b60405180910390f35b348015610632575f80fd5b5061064d600480360381019061064891906146b1565b61180b565b60405161065a919061466d565b60405180910390f35b34801561066e575f80fd5b50610677611850565b005b348015610684575f80fd5b5061068d6119a3565b005b34801561069a575f80fd5b506106b560048036038101906106b091906146b1565b611b75565b005b3480156106c2575f80fd5b506106cb611cbc565b6040516106d89190614645565b60405180910390f35b3480156106ec575f80fd5b506106f5611ccf565b005b348015610702575f80fd5b5061071d60048036038101906107189190614769565b611d81565b005b34801561072a575f80fd5b50610745600480360381019061074091906146b1565b612004565b6040516107529190614645565b60405180910390f35b348015610766575f80fd5b5061076f612021565b60405161077c919061486c565b60405180910390f35b348015610790575f80fd5b50610799612049565b6040516107a691906144c8565b60405180910390f35b3480156107ba575f80fd5b506107c36120d9565b6040516107d091906149d1565b60405180910390f35b3480156107e4575f80fd5b506107ff60048036038101906107fa91906145ed565b6120df565b60405161080c9190614645565b60405180910390f35b348015610820575f80fd5b50610829612154565b604051610836919061486c565b60405180910390f35b34801561084a575f80fd5b50610865600480360381019061086091906145ed565b612179565b6040516108729190614645565b60405180910390f35b348015610886575f80fd5b5061088f61219b565b60405161089c919061486c565b60405180910390f35b3480156108b0575f80fd5b506108cb60048036038101906108c691906146b1565b6121bf565b6040516108d89190614645565b60405180910390f35b3480156108ec575f80fd5b50610907600480360381019061090291906149ea565b6121dc565b005b348015610914575f80fd5b5061091d6123df565b60405161092a919061466d565b60405180910390f35b34801561093e575f80fd5b506109476123e5565b6040516109579493929190614894565b60405180910390f35b34801561096b575f80fd5b50610986600480360381019061098191906149ea565b61244e565b005b348015610993575f80fd5b506109ae60048036038101906109a991906148d7565b612678565b6040516109bb919061466d565b60405180910390f35b3480156109cf575f80fd5b506109d86126fa565b6040516109e6929190614a37565b60405180910390f35b3480156109fa575f80fd5b50610a156004803603810190610a1091906146b1565b612741565b005b606060038054610a2690614a8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290614a8b565b8015610a9d5780601f10610a7457610100808354040283529160200191610a9d565b820191905f5260205f20905b815481529060010190602001808311610a8057829003601f168201915b5050505050905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610ad6612903565b9050610ae381858561290a565b600191505092915050565b5f600254905090565b610aff612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490614b05565b60405180910390fd5b620186a06001610b9b610aee565b610ba59190614b50565b610baf9190614bbe565b811015610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be890614c5e565b60405180910390fd5b6103e86005610bfe610aee565b610c089190614b50565b610c129190614bbe565b811115610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b90614cec565b60405180910390fd5b8060118190555050565b610c66612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990614d54565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f80610daf612903565b9050610dbc858285612acd565b610dc7858585612b58565b60019150509392505050565b610ddb612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090614b05565b60405180910390fd5b610e716143b6565b83815f019067ffffffffffffffff16908167ffffffffffffffff168152505082816040019067ffffffffffffffff16908167ffffffffffffffff168152505081816020019067ffffffffffffffff16908167ffffffffffffffff1681525050818385610edd9190614d72565b610ee79190614d72565b816060019067ffffffffffffffff16908167ffffffffffffffff16815250506103e8816060015167ffffffffffffffff161115610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090614df7565b60405180910390fd5b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c978160600151604051610f8c9190614e45565b60405180910390a180600d5f820151815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151815f0160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506060820151815f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505050505050565b5f6012905090565b611066612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614b05565b60405180910390fd5b6110fc611056565b600a6111089190614f8d565b6103e86001611115610aee565b61111f9190614b50565b6111299190614bbe565b6111339190614bbe565b816fffffffffffffffffffffffffffffffff161015611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90615021565b60405180910390fd5b61118f611056565b600a61119b9190614f8d565b816fffffffffffffffffffffffffffffffff166111b89190614b50565b60145f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e660145f015f9054906101000a90046fffffffffffffffffffffffffffffffff1660405161123f919061506f565b60405180910390a150565b5f80611254612903565b90506112758185856112668589612678565b6112709190615088565b61290a565b600191505092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900467ffffffffffffffff1690805f0160109054906101000a900467ffffffffffffffff1690805f0160189054906101000a900467ffffffffffffffff16905084565b60085f9054906101000a900460ff1681565b61134d612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090615105565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611483919061486c565b602060405180830381865afa15801561149e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c29190615137565b90506114cf838383612c7d565b505050565b6114dc612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190614b05565b60405180910390fd5b8060105f6101000a81548160ff02191690831515021790555050565b6006602052805f5260405f205f915054906101000a900460ff1681565b60105f9054906101000a900460ff1681565b6115bd612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290614b05565b60405180910390fd5b611653611056565b600a61165f9190614f8d565b6103e8600161166c610aee565b6116769190614b50565b6116809190614bbe565b61168a9190614bbe565b816fffffffffffffffffffffffffffffffff1610156116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590615021565b60405180910390fd5b6116e6611056565b600a6116f29190614f8d565b816fffffffffffffffffffffffffffffffff1661170f9190614b50565b60145f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078860145f0160109054906101000a90046fffffffffffffffffffffffffffffffff16604051611798919061506f565b60405180910390a150565b600e805f015f9054906101000a900469ffffffffffffffffffff1690805f01600a9054906101000a900469ffffffffffffffffffff1690805f0160149054906101000a900469ffffffffffffffffffff1690805f01601e9054906101000a900460ff16905084565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611858612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd90614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119ab612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090614b05565b60405180910390fd5b5f601060016101000a81548160ff021916908315150217905550611a5b614402565b5f611a64610aee565b905080825f01906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508082602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508160145f820151815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506020820151815f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a15050565b611b7d612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090614d54565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060019054906101000a900460ff1681565b611cd7612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90614b05565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b611d89612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614b05565b60405180910390fd5b611e1f6143b6565b83815f019067ffffffffffffffff16908167ffffffffffffffff168152505082816040019067ffffffffffffffff16908167ffffffffffffffff168152505081816020019067ffffffffffffffff16908167ffffffffffffffff1681525050818385611e8b9190614d72565b611e959190614d72565b816060019067ffffffffffffffff16908167ffffffffffffffff16815250506103e8816060015167ffffffffffffffff161115611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90614df7565b60405180910390fd5b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05088160600151604051611f3a9190614e45565b60405180910390a180600c5f820151815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151815f0160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506060820151815f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505050505050565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461205890614a8b565b80601f016020809104026020016040519081016040528092919081815260200182805461208490614a8b565b80156120cf5780601f106120a6576101008083540402835291602001916120cf565b820191905f5260205f20905b8154815290600101906020018083116120b257829003601f168201915b5050505050905090565b61271081565b5f806120e9612903565b90505f6120f68286612678565b90508381101561213b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612132906151d2565b60405180910390fd5b612148828686840361290a565b60019250505092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80612183612903565b9050612190818585612b58565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009602052805f5260405f205f915054906101000a900460ff1681565b6121e4612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d79061523a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612345906152a2565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d82826040516123d39291906152c0565b60405180910390a15050565b60115481565b600d805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900467ffffffffffffffff1690805f0160109054906101000a900467ffffffffffffffff1690805f0160189054906101000a900467ffffffffffffffff16905084565b612456612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db90614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125499061523a565b60405180910390fd5b806125e75760125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dd90615331565b60405180910390fd5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce828260405161266c9291906152c0565b60405180910390a15050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6014805f015f9054906101000a90046fffffffffffffffffffffffffffffffff1690805f0160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b612749612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce90614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c906153bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f9061544d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dd906154db565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac0919061466d565b60405180910390a3505050565b5f612ad88484612678565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612b525781811015612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b90615543565b60405180910390fd5b612b51848484840361290a565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612bf6575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c6d5760085f9054906101000a900460ff16612c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c40906155ab565b60405180910390fd5b612c54838383612d03565b612c5f83838361320d565b81612c6a91906155c9565b90505b612c78838383613836565b505050565b612cfe8363a9059cbb60e01b8484604051602401612c9c9291906155fc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613a8c565b505050565b601060019054906101000a900460ff161561309b575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f612d6f8461180b565b90505f60146040518060400160405290815f82015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020015f820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e66575082155b15612f2c57805f01516fffffffffffffffffffffffffffffffff16841115612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061566d565b60405180910390fd5b80602001516fffffffffffffffffffffffffffffffff168285612ee69190615088565b1115612f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1e906156d5565b60405180910390fd5b613097565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc9575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561302b57805f01516fffffffffffffffffffffffffffffffff16841115613026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301d9061566d565b60405180910390fd5b613096565b826130955780602001516fffffffffffffffffffffffffffffffff1682856130539190615088565b1115613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308b906156d5565b60405180910390fd5b5b5b5b5050505b60105f9054906101000a900460ff16156132085760095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156131825743600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061317d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131749061573d565b60405180910390fd5b613207565b43600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600f5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b505050565b5f60115461321a3061180b565b1015801561326f575060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561327d5761327c613b51565b5b5f6132866143b6565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156133ac57600d6040518060800160405290815f82015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090506134cf565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156134ce57600c6040518060800160405290815f82015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090505b5b5f816060015167ffffffffffffffff161115613818575f600e6040518060800160405290815f82015f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f8201600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f820160149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f8201601e9054906101000a900460ff161515151581525050905061271067ffffffffffffffff16826060015167ffffffffffffffff16866135da9190614b50565b6135e49190614bbe565b9250633b9aca00826060015167ffffffffffffffff16836040015167ffffffffffffffff1685613614919061575b565b61361e9190615797565b6136289190615797565b8160200181815161363991906157c7565b91509069ffffffffffffffffffff16908169ffffffffffffffffffff1681525050633b9aca00826060015167ffffffffffffffff16835f015167ffffffffffffffff1685613687919061575b565b6136919190615797565b61369b9190615797565b815f018181516136ab91906157c7565b91509069ffffffffffffffffffff16908169ffffffffffffffffffff1681525050633b9aca00826060015167ffffffffffffffff16836020015167ffffffffffffffff16856136fa919061575b565b6137049190615797565b61370e9190615797565b8160400181815161371f91906157c7565b91509069ffffffffffffffffffff16908169ffffffffffffffffffff168152505080600e5f820151815f015f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506020820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506040820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506060820151815f01601e6101000a81548160ff0219169083151502179055509050506138168730856fffffffffffffffffffffffffffffffff16613836565b505b816fffffffffffffffffffffffffffffffff16925050509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389b90615874565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390990615902565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398c90615990565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a7e919061466d565b60405180910390a350505050565b5f613aed826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166140549092919063ffffffff16565b90505f81511115613b4c5780806020019051810190613b0c91906159c2565b613b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4290615a5d565b60405180910390fd5b5b505050565b5f613b5b3061180b565b90505f600e6040518060800160405290815f82015f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f8201600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f820160149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f8201601e9054906101000a900460ff16151515158152505090505f8160400151825f01518360200151613c4491906157c7565b613c4e91906157c7565b69ffffffffffffffffffff1690505f831480613c6957505f81145b15613c7657505050614052565b6014601154613c859190614b50565b831115613c9e576014601154613c9b9190614b50565b92505b5f826020015169ffffffffffffffffffff161115613db2575f81836020015169ffffffffffffffffffff1685613cd49190614b50565b613cde9190614bbe565b9050613d0c3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613836565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613d72575f80fd5b505af1925050508015613d83575060015b508084613d9091906155c9565b9350826020015169ffffffffffffffffffff1682613dae91906155c9565b9150505b5f831115613f2a57613dc38361406b565b5f4790505f80846040015169ffffffffffffffffffff161115613e9157600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683856040015169ffffffffffffffffffff1684613e359190614b50565b613e3f9190614bbe565b604051613e4b90615aa8565b5f6040518083038185875af1925050503d805f8114613e85576040519150601f19603f3d011682016040523d82523d5f602084013e613e8a565b606091505b5050809150505b4791505f821115613f2757600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ee190615aa8565b5f6040518083038185875af1925050503d805f8114613f1b576040519150601f19603f3d011682016040523d82523d5f602084013e613f20565b606091505b5050809150505b50505b5f826020019069ffffffffffffffffffff16908169ffffffffffffffffffff16815250505f825f019069ffffffffffffffffffff16908169ffffffffffffffffffff16815250505f826040019069ffffffffffffffffffff16908169ffffffffffffffffffff168152505081600e5f820151815f015f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506020820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506040820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506060820151815f01601e6101000a81548160ff0219169083151502179055509050505050505b565b606061406284845f85614208565b90509392505050565b5f600267ffffffffffffffff81111561408757614086615abc565b5b6040519080825280602002602001820160405280156140b55781602001602082028036833780820191505090505b50905030815f815181106140cc576140cb615ae9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061413b5761413a615ae9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016141d7959493929190615c06565b5f604051808303815f87803b1580156141ee575f80fd5b505af1158015614200573d5f803e3d5ffd5b505050505050565b60608247101561424d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161424490615cce565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516142759190615d26565b5f6040518083038185875af1925050503d805f81146142af576040519150601f19603f3d011682016040523d82523d5f602084013e6142b4565b606091505b50915091506142c5878383876142d1565b92505050949350505050565b60608315614332575f83510361432a576142ea85614345565b614329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432090615d86565b60405180910390fd5b5b82905061433d565b61433c8383614367565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f825111156143795781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143ad91906144c8565b60405180910390fd5b60405180608001604052805f67ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f67ffffffffffffffff1681525090565b60405180604001604052805f6fffffffffffffffffffffffffffffffff1681526020015f6fffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561447557808201518184015260208101905061445a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61449a8261443e565b6144a48185614448565b93506144b4818560208601614458565b6144bd81614480565b840191505092915050565b5f6020820190508181035f8301526144e08184614490565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61452a614525614520846144e8565b614507565b6144e8565b9050919050565b5f61453b82614510565b9050919050565b5f61454c82614531565b9050919050565b61455c81614542565b82525050565b5f6020820190506145755f830184614553565b92915050565b5f80fd5b5f614589826144e8565b9050919050565b6145998161457f565b81146145a3575f80fd5b50565b5f813590506145b481614590565b92915050565b5f819050919050565b6145cc816145ba565b81146145d6575f80fd5b50565b5f813590506145e7816145c3565b92915050565b5f80604083850312156146035761460261457b565b5b5f614610858286016145a6565b9250506020614621858286016145d9565b9150509250929050565b5f8115159050919050565b61463f8161462b565b82525050565b5f6020820190506146585f830184614636565b92915050565b614667816145ba565b82525050565b5f6020820190506146805f83018461465e565b92915050565b5f6020828403121561469b5761469a61457b565b5b5f6146a8848285016145d9565b91505092915050565b5f602082840312156146c6576146c561457b565b5b5f6146d3848285016145a6565b91505092915050565b5f805f606084860312156146f3576146f261457b565b5b5f614700868287016145a6565b9350506020614711868287016145a6565b9250506040614722868287016145d9565b9150509250925092565b5f67ffffffffffffffff82169050919050565b6147488161472c565b8114614752575f80fd5b50565b5f813590506147638161473f565b92915050565b5f805f606084860312156147805761477f61457b565b5b5f61478d86828701614755565b935050602061479e86828701614755565b92505060406147af86828701614755565b9150509250925092565b5f60ff82169050919050565b6147ce816147b9565b82525050565b5f6020820190506147e75f8301846147c5565b92915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b614811816147ed565b811461481b575f80fd5b50565b5f8135905061482c81614808565b92915050565b5f602082840312156148475761484661457b565b5b5f6148548482850161481e565b91505092915050565b6148668161457f565b82525050565b5f60208201905061487f5f83018461485d565b92915050565b61488e8161472c565b82525050565b5f6080820190506148a75f830187614885565b6148b46020830186614885565b6148c16040830185614885565b6148ce6060830184614885565b95945050505050565b5f80604083850312156148ed576148ec61457b565b5b5f6148fa858286016145a6565b925050602061490b858286016145a6565b9150509250929050565b61491e8161462b565b8114614928575f80fd5b50565b5f8135905061493981614915565b92915050565b5f602082840312156149545761495361457b565b5b5f6149618482850161492b565b91505092915050565b5f69ffffffffffffffffffff82169050919050565b6149888161496a565b82525050565b5f6080820190506149a15f83018761497f565b6149ae602083018661497f565b6149bb604083018561497f565b6149c86060830184614636565b95945050505050565b5f6020820190506149e45f830184614885565b92915050565b5f8060408385031215614a00576149ff61457b565b5b5f614a0d858286016145a6565b9250506020614a1e8582860161492b565b9150509250929050565b614a31816147ed565b82525050565b5f604082019050614a4a5f830185614a28565b614a576020830184614a28565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614aa257607f821691505b602082108103614ab557614ab4614a5e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614aef602083614448565b9150614afa82614abb565b602082019050919050565b5f6020820190508181035f830152614b1c81614ae3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614b5a826145ba565b9150614b65836145ba565b9250828202614b73816145ba565b91508282048414831517614b8a57614b89614b23565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614bc8826145ba565b9150614bd3836145ba565b925082614be357614be2614b91565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614c48603583614448565b9150614c5382614bee565b604082019050919050565b5f6020820190508181035f830152614c7581614c3c565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614cd6603483614448565b9150614ce182614c7c565b604082019050919050565b5f6020820190508181035f830152614d0381614cca565b9050919050565b7f7a65726f206164647265737300000000000000000000000000000000000000005f82015250565b5f614d3e600c83614448565b9150614d4982614d0a565b602082019050919050565b5f6020820190508181035f830152614d6b81614d32565b9050919050565b5f614d7c8261472c565b9150614d878361472c565b9250828201905067ffffffffffffffff811115614da757614da6614b23565b5b92915050565b7f4b656570207461782062656c6f772031302500000000000000000000000000005f82015250565b5f614de1601283614448565b9150614dec82614dad565b602082019050919050565b5f6020820190508181035f830152614e0e81614dd5565b9050919050565b5f614e2f614e2a614e258461472c565b614507565b6145ba565b9050919050565b614e3f81614e15565b82525050565b5f602082019050614e585f830184614e36565b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115614eb357808604811115614e8f57614e8e614b23565b5b6001851615614e9e5780820291505b8081029050614eac85614e5e565b9450614e73565b94509492505050565b5f82614ecb5760019050614f86565b81614ed8575f9050614f86565b8160018114614eee5760028114614ef857614f27565b6001915050614f86565b60ff841115614f0a57614f09614b23565b5b8360020a915084821115614f2157614f20614b23565b5b50614f86565b5060208310610133831016604e8410600b8410161715614f5c5782820a905083811115614f5757614f56614b23565b5b614f86565b614f698484846001614e6a565b92509050818404811115614f8057614f7f614b23565b5b81810290505b9392505050565b5f614f97826145ba565b9150614fa2836147b9565b9250614fcf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614ebc565b905092915050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f61500b600783614448565b915061501682614fd7565b602082019050919050565b5f6020820190508181035f83015261503881614fff565b9050919050565b5f61505961505461504f846147ed565b614507565b6145ba565b9050919050565b6150698161503f565b82525050565b5f6020820190506150825f830184615060565b92915050565b5f615092826145ba565b915061509d836145ba565b92508282019050808211156150b5576150b4614b23565b5b92915050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f6150ef601a83614448565b91506150fa826150bb565b602082019050919050565b5f6020820190508181035f83015261511c816150e3565b9050919050565b5f81519050615131816145c3565b92915050565b5f6020828403121561514c5761514b61457b565b5b5f61515984828501615123565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6151bc602583614448565b91506151c782615162565b604082019050919050565b5f6020820190508181035f8301526151e9816151b0565b9050919050565b7f5a65726f204164647265737300000000000000000000000000000000000000005f82015250565b5f615224600c83614448565b915061522f826151f0565b602082019050919050565b5f6020820190508181035f83015261525181615218565b9050919050565b7f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000005f82015250565b5f61528c601883614448565b915061529782615258565b602082019050919050565b5f6020820190508181035f8301526152b981615280565b9050919050565b5f6040820190506152d35f83018561485d565b6152e06020830184614636565b9392505050565b7f43616e6e6f742072656d6f7665207061697200000000000000000000000000005f82015250565b5f61531b601283614448565b9150615326826152e7565b602082019050919050565b5f6020820190508181035f8301526153488161530f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6153a9602683614448565b91506153b48261534f565b604082019050919050565b5f6020820190508181035f8301526153d68161539d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f615437602483614448565b9150615442826153dd565b604082019050919050565b5f6020820190508181035f8301526154648161542b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154c5602283614448565b91506154d08261546b565b604082019050919050565b5f6020820190508181035f8301526154f2816154b9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61552d601d83614448565b9150615538826154f9565b602082019050919050565b5f6020820190508181035f83015261555a81615521565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f615595601283614448565b91506155a082615561565b602082019050919050565b5f6020820190508181035f8301526155c281615589565b9050919050565b5f6155d3826145ba565b91506155de836145ba565b92508282039050818111156155f6576155f5614b23565b5b92915050565b5f60408201905061560f5f83018561485d565b61561c602083018461465e565b9392505050565b7f4d61782054786e000000000000000000000000000000000000000000000000005f82015250565b5f615657600783614448565b915061566282615623565b602082019050919050565b5f6020820190508181035f8301526156848161564b565b9050919050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f6156bf600a83614448565b91506156ca8261568b565b602082019050919050565b5f6020820190508181035f8301526156ec816156b3565b9050919050565b7f416e7469204d45560000000000000000000000000000000000000000000000005f82015250565b5f615727600883614448565b9150615732826156f3565b602082019050919050565b5f6020820190508181035f8301526157548161571b565b9050919050565b5f615765826147ed565b9150615770836147ed565b925082820261577e816147ed565b91508082146157905761578f614b23565b5b5092915050565b5f6157a1826147ed565b91506157ac836147ed565b9250826157bc576157bb614b91565b5b828204905092915050565b5f6157d18261496a565b91506157dc8361496a565b9250828201905069ffffffffffffffffffff8111156157fe576157fd614b23565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61585e602583614448565b915061586982615804565b604082019050919050565b5f6020820190508181035f83015261588b81615852565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6158ec602383614448565b91506158f782615892565b604082019050919050565b5f6020820190508181035f830152615919816158e0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61597a602683614448565b915061598582615920565b604082019050919050565b5f6020820190508181035f8301526159a78161596e565b9050919050565b5f815190506159bc81614915565b92915050565b5f602082840312156159d7576159d661457b565b5b5f6159e4848285016159ae565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f615a47602a83614448565b9150615a52826159ed565b604082019050919050565b5f6020820190508181035f830152615a7481615a3b565b9050919050565b5f81905092915050565b50565b5f615a935f83615a7b565b9150615a9e82615a85565b5f82019050919050565b5f615ab282615a88565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f615b39615b34615b2f84615b16565b614507565b6145ba565b9050919050565b615b4981615b1f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615b818161457f565b82525050565b5f615b928383615b78565b60208301905092915050565b5f602082019050919050565b5f615bb482615b4f565b615bbe8185615b59565b9350615bc983615b69565b805f5b83811015615bf9578151615be08882615b87565b9750615beb83615b9e565b925050600181019050615bcc565b5085935050505092915050565b5f60a082019050615c195f83018861465e565b615c266020830187615b40565b8181036040830152615c388186615baa565b9050615c47606083018561485d565b615c54608083018461465e565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f615cb8602683614448565b9150615cc382615c5e565b604082019050919050565b5f6020820190508181035f830152615ce581615cac565b9050919050565b5f81519050919050565b5f615d0082615cec565b615d0a8185615a7b565b9350615d1a818560208601614458565b80840191505092915050565b5f615d318284615cf6565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f615d70601d83614448565b9150615d7b82615d3c565b602082019050919050565b5f6020820190508181035f830152615d9d81615d64565b905091905056fea264697066735822122025c0439ec04dd6fea21f8dc4b6e2742ff9c184620d3f99224b204754a239d12264736f6c63430008140033446f6c6c61724575726f506f756e6459656e526979616c52757065654672616e635975616e44696e61725065736f4472616d52757069616854616b614b726f6e654b796174536f6c42616c626f614d65746963616c44616c617369536f6d5265616c54656e6765417073617252696e676769745368696c6c696e6742616874537465726c696e674b6f72756e615269616c4b726f6e615275626c65576f6e52616e64466f72696e74426168744c6972614c6575426972724c656b4e616b66615269656c426f6c697661724d616e61744b77616e7a614d61726b41666768616e69436f6c6f6e4c65765368656b656c

Deployed Bytecode

0x60806040526004361061026a575f3560e01c8063715018a611610143578063a5ece941116100b5578063c78d0fa011610079578063c78d0fa014610909578063cc1776d314610933578063ccad03e114610960578063dd62ed3e14610988578063f270fde4146109c4578063f2fde38b146109ef57610271565b8063a5ece94114610815578063a9059cbb1461083f578063ad5c46481461087b578063b0249cc6146108a5578063bedafd01146108e157610271565b80638becc57d116101075780638becc57d146106f75780638d3e6e401461071f5780638da5cb5b1461075b57806395d89b41146107855780639e93ad8e146107af578063a457c2d7146107d957610271565b8063715018a614610663578063751039fc14610679578063850337621461068f578063860a32ec146106b75780638a8c523c146106e157610271565b80633ad10ef6116101dc57806359758994116101a057806359758994146105445780635a90a49e1461056c578063627e9d8e146105a857806366ebd39a146105d25780636d7adcad146105fa57806370a082311461062757610271565b80633ad10ef614610471578063452ed4f11461049b5780634f7041a5146104c557806353371be0146104f25780635431c94e1461051c57610271565b80632369bf831161022e5780632369bf831461035757806323b872dd1461037f578063286965a7146103bb578063313ce567146103e357806336e18e191461040d578063395093511461043557610271565b806306fdde03146102755780630758d9241461029f578063095ea7b3146102c957806318160ddd14610305578063210459181461032f57610271565b3661027157005b5f80fd5b348015610280575f80fd5b50610289610a17565b60405161029691906144c8565b60405180910390f35b3480156102aa575f80fd5b506102b3610aa7565b6040516102c09190614562565b60405180910390f35b3480156102d4575f80fd5b506102ef60048036038101906102ea91906145ed565b610acc565b6040516102fc9190614645565b60405180910390f35b348015610310575f80fd5b50610319610aee565b604051610326919061466d565b60405180910390f35b34801561033a575f80fd5b5061035560048036038101906103509190614686565b610af7565b005b348015610362575f80fd5b5061037d600480360381019061037891906146b1565b610c5e565b005b34801561038a575f80fd5b506103a560048036038101906103a091906146dc565b610da5565b6040516103b29190614645565b60405180910390f35b3480156103c6575f80fd5b506103e160048036038101906103dc9190614769565b610dd3565b005b3480156103ee575f80fd5b506103f7611056565b60405161040491906147d4565b60405180910390f35b348015610418575f80fd5b50610433600480360381019061042e9190614832565b61105e565b005b348015610440575f80fd5b5061045b600480360381019061045691906145ed565b61124a565b6040516104689190614645565b60405180910390f35b34801561047c575f80fd5b50610485611280565b604051610492919061486c565b60405180910390f35b3480156104a6575f80fd5b506104af6112a5565b6040516104bc919061486c565b60405180910390f35b3480156104d0575f80fd5b506104d96112ca565b6040516104e99493929190614894565b60405180910390f35b3480156104fd575f80fd5b50610506611333565b6040516105139190614645565b60405180910390f35b348015610527575f80fd5b50610542600480360381019061053d91906148d7565b611345565b005b34801561054f575f80fd5b5061056a6004803603810190610565919061493f565b6114d4565b005b348015610577575f80fd5b50610592600480360381019061058d91906146b1565b611586565b60405161059f9190614645565b60405180910390f35b3480156105b3575f80fd5b506105bc6115a3565b6040516105c99190614645565b60405180910390f35b3480156105dd575f80fd5b506105f860048036038101906105f39190614832565b6115b5565b005b348015610605575f80fd5b5061060e6117a3565b60405161061e949392919061498e565b60405180910390f35b348015610632575f80fd5b5061064d600480360381019061064891906146b1565b61180b565b60405161065a919061466d565b60405180910390f35b34801561066e575f80fd5b50610677611850565b005b348015610684575f80fd5b5061068d6119a3565b005b34801561069a575f80fd5b506106b560048036038101906106b091906146b1565b611b75565b005b3480156106c2575f80fd5b506106cb611cbc565b6040516106d89190614645565b60405180910390f35b3480156106ec575f80fd5b506106f5611ccf565b005b348015610702575f80fd5b5061071d60048036038101906107189190614769565b611d81565b005b34801561072a575f80fd5b50610745600480360381019061074091906146b1565b612004565b6040516107529190614645565b60405180910390f35b348015610766575f80fd5b5061076f612021565b60405161077c919061486c565b60405180910390f35b348015610790575f80fd5b50610799612049565b6040516107a691906144c8565b60405180910390f35b3480156107ba575f80fd5b506107c36120d9565b6040516107d091906149d1565b60405180910390f35b3480156107e4575f80fd5b506107ff60048036038101906107fa91906145ed565b6120df565b60405161080c9190614645565b60405180910390f35b348015610820575f80fd5b50610829612154565b604051610836919061486c565b60405180910390f35b34801561084a575f80fd5b50610865600480360381019061086091906145ed565b612179565b6040516108729190614645565b60405180910390f35b348015610886575f80fd5b5061088f61219b565b60405161089c919061486c565b60405180910390f35b3480156108b0575f80fd5b506108cb60048036038101906108c691906146b1565b6121bf565b6040516108d89190614645565b60405180910390f35b3480156108ec575f80fd5b50610907600480360381019061090291906149ea565b6121dc565b005b348015610914575f80fd5b5061091d6123df565b60405161092a919061466d565b60405180910390f35b34801561093e575f80fd5b506109476123e5565b6040516109579493929190614894565b60405180910390f35b34801561096b575f80fd5b50610986600480360381019061098191906149ea565b61244e565b005b348015610993575f80fd5b506109ae60048036038101906109a991906148d7565b612678565b6040516109bb919061466d565b60405180910390f35b3480156109cf575f80fd5b506109d86126fa565b6040516109e6929190614a37565b60405180910390f35b3480156109fa575f80fd5b50610a156004803603810190610a1091906146b1565b612741565b005b606060038054610a2690614a8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5290614a8b565b8015610a9d5780601f10610a7457610100808354040283529160200191610a9d565b820191905f5260205f20905b815481529060010190602001808311610a8057829003601f168201915b5050505050905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610ad6612903565b9050610ae381858561290a565b600191505092915050565b5f600254905090565b610aff612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490614b05565b60405180910390fd5b620186a06001610b9b610aee565b610ba59190614b50565b610baf9190614bbe565b811015610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be890614c5e565b60405180910390fd5b6103e86005610bfe610aee565b610c089190614b50565b610c129190614bbe565b811115610c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4b90614cec565b60405180910390fd5b8060118190555050565b610c66612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990614d54565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f80610daf612903565b9050610dbc858285612acd565b610dc7858585612b58565b60019150509392505050565b610ddb612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090614b05565b60405180910390fd5b610e716143b6565b83815f019067ffffffffffffffff16908167ffffffffffffffff168152505082816040019067ffffffffffffffff16908167ffffffffffffffff168152505081816020019067ffffffffffffffff16908167ffffffffffffffff1681525050818385610edd9190614d72565b610ee79190614d72565b816060019067ffffffffffffffff16908167ffffffffffffffff16815250506103e8816060015167ffffffffffffffff161115610f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5090614df7565b60405180910390fd5b7fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c978160600151604051610f8c9190614e45565b60405180910390a180600d5f820151815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151815f0160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506060820151815f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505050505050565b5f6012905090565b611066612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614b05565b60405180910390fd5b6110fc611056565b600a6111089190614f8d565b6103e86001611115610aee565b61111f9190614b50565b6111299190614bbe565b6111339190614bbe565b816fffffffffffffffffffffffffffffffff161015611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90615021565b60405180910390fd5b61118f611056565b600a61119b9190614f8d565b816fffffffffffffffffffffffffffffffff166111b89190614b50565b60145f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e660145f015f9054906101000a90046fffffffffffffffffffffffffffffffff1660405161123f919061506f565b60405180910390a150565b5f80611254612903565b90506112758185856112668589612678565b6112709190615088565b61290a565b600191505092915050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900467ffffffffffffffff1690805f0160109054906101000a900467ffffffffffffffff1690805f0160189054906101000a900467ffffffffffffffff16905084565b60085f9054906101000a900460ff1681565b61134d612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090615105565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611483919061486c565b602060405180830381865afa15801561149e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c29190615137565b90506114cf838383612c7d565b505050565b6114dc612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190614b05565b60405180910390fd5b8060105f6101000a81548160ff02191690831515021790555050565b6006602052805f5260405f205f915054906101000a900460ff1681565b60105f9054906101000a900460ff1681565b6115bd612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290614b05565b60405180910390fd5b611653611056565b600a61165f9190614f8d565b6103e8600161166c610aee565b6116769190614b50565b6116809190614bbe565b61168a9190614bbe565b816fffffffffffffffffffffffffffffffff1610156116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d590615021565b60405180910390fd5b6116e6611056565b600a6116f29190614f8d565b816fffffffffffffffffffffffffffffffff1661170f9190614b50565b60145f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055507fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078860145f0160109054906101000a90046fffffffffffffffffffffffffffffffff16604051611798919061506f565b60405180910390a150565b600e805f015f9054906101000a900469ffffffffffffffffffff1690805f01600a9054906101000a900469ffffffffffffffffffff1690805f0160149054906101000a900469ffffffffffffffffffff1690805f01601e9054906101000a900460ff16905084565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611858612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd90614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119ab612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090614b05565b60405180910390fd5b5f601060016101000a81548160ff021916908315150217905550611a5b614402565b5f611a64610aee565b905080825f01906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508082602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250508160145f820151815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506020820151815f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a15050565b611b7d612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090614d54565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060019054906101000a900460ff1681565b611cd7612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90614b05565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b611d89612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614b05565b60405180910390fd5b611e1f6143b6565b83815f019067ffffffffffffffff16908167ffffffffffffffff168152505082816040019067ffffffffffffffff16908167ffffffffffffffff168152505081816020019067ffffffffffffffff16908167ffffffffffffffff1681525050818385611e8b9190614d72565b611e959190614d72565b816060019067ffffffffffffffff16908167ffffffffffffffff16815250506103e8816060015167ffffffffffffffff161115611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90614df7565b60405180910390fd5b7f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05088160600151604051611f3a9190614e45565b60405180910390a180600c5f820151815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151815f0160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506060820151815f0160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505050505050565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461205890614a8b565b80601f016020809104026020016040519081016040528092919081815260200182805461208490614a8b565b80156120cf5780601f106120a6576101008083540402835291602001916120cf565b820191905f5260205f20905b8154815290600101906020018083116120b257829003601f168201915b5050505050905090565b61271081565b5f806120e9612903565b90505f6120f68286612678565b90508381101561213b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612132906151d2565b60405180910390fd5b612148828686840361290a565b60019250505092915050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80612183612903565b9050612190818585612b58565b600191505092915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6009602052805f5260405f205f915054906101000a900460ff1681565b6121e4612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d79061523a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612345906152a2565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d82826040516123d39291906152c0565b60405180910390a15050565b60115481565b600d805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900467ffffffffffffffff1690805f0160109054906101000a900467ffffffffffffffff1690805f0160189054906101000a900467ffffffffffffffff16905084565b612456612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db90614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125499061523a565b60405180910390fd5b806125e75760125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dd90615331565b60405180910390fd5b5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce828260405161266c9291906152c0565b60405180910390a15050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6014805f015f9054906101000a90046fffffffffffffffffffffffffffffffff1690805f0160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b612749612903565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce90614b05565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c906153bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f9061544d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dd906154db565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac0919061466d565b60405180910390a3505050565b5f612ad88484612678565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612b525781811015612b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3b90615543565b60405180910390fd5b612b51848484840361290a565b5b50505050565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612bf6575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c6d5760085f9054906101000a900460ff16612c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c40906155ab565b60405180910390fd5b612c54838383612d03565b612c5f83838361320d565b81612c6a91906155c9565b90505b612c78838383613836565b505050565b612cfe8363a9059cbb60e01b8484604051602401612c9c9291906155fc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613a8c565b505050565b601060019054906101000a900460ff161561309b575f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f612d6f8461180b565b90505f60146040518060400160405290815f82015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020015f820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e66575082155b15612f2c57805f01516fffffffffffffffffffffffffffffffff16841115612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061566d565b60405180910390fd5b80602001516fffffffffffffffffffffffffffffffff168285612ee69190615088565b1115612f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1e906156d5565b60405180910390fd5b613097565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc9575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561302b57805f01516fffffffffffffffffffffffffffffffff16841115613026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301d9061566d565b60405180910390fd5b613096565b826130955780602001516fffffffffffffffffffffffffffffffff1682856130539190615088565b1115613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308b906156d5565b60405180910390fd5b5b5b5b5050505b60105f9054906101000a900460ff16156132085760095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156131825743600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061317d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131749061573d565b60405180910390fd5b613207565b43600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600f5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b505050565b5f60115461321a3061180b565b1015801561326f575060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561327d5761327c613b51565b5b5f6132866143b6565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156133ac57600d6040518060800160405290815f82015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090506134cf565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156134ce57600c6040518060800160405290815f82015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020015f820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090505b5b5f816060015167ffffffffffffffff161115613818575f600e6040518060800160405290815f82015f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f8201600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f820160149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f8201601e9054906101000a900460ff161515151581525050905061271067ffffffffffffffff16826060015167ffffffffffffffff16866135da9190614b50565b6135e49190614bbe565b9250633b9aca00826060015167ffffffffffffffff16836040015167ffffffffffffffff1685613614919061575b565b61361e9190615797565b6136289190615797565b8160200181815161363991906157c7565b91509069ffffffffffffffffffff16908169ffffffffffffffffffff1681525050633b9aca00826060015167ffffffffffffffff16835f015167ffffffffffffffff1685613687919061575b565b6136919190615797565b61369b9190615797565b815f018181516136ab91906157c7565b91509069ffffffffffffffffffff16908169ffffffffffffffffffff1681525050633b9aca00826060015167ffffffffffffffff16836020015167ffffffffffffffff16856136fa919061575b565b6137049190615797565b61370e9190615797565b8160400181815161371f91906157c7565b91509069ffffffffffffffffffff16908169ffffffffffffffffffff168152505080600e5f820151815f015f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506020820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506040820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506060820151815f01601e6101000a81548160ff0219169083151502179055509050506138168730856fffffffffffffffffffffffffffffffff16613836565b505b816fffffffffffffffffffffffffffffffff16925050509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389b90615874565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390990615902565b60405180910390fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398c90615990565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a7e919061466d565b60405180910390a350505050565b5f613aed826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166140549092919063ffffffff16565b90505f81511115613b4c5780806020019051810190613b0c91906159c2565b613b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4290615a5d565b60405180910390fd5b5b505050565b5f613b5b3061180b565b90505f600e6040518060800160405290815f82015f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f8201600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f820160149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff1669ffffffffffffffffffff1681526020015f8201601e9054906101000a900460ff16151515158152505090505f8160400151825f01518360200151613c4491906157c7565b613c4e91906157c7565b69ffffffffffffffffffff1690505f831480613c6957505f81145b15613c7657505050614052565b6014601154613c859190614b50565b831115613c9e576014601154613c9b9190614b50565b92505b5f826020015169ffffffffffffffffffff161115613db2575f81836020015169ffffffffffffffffffff1685613cd49190614b50565b613cde9190614bbe565b9050613d0c3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613836565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613d72575f80fd5b505af1925050508015613d83575060015b508084613d9091906155c9565b9350826020015169ffffffffffffffffffff1682613dae91906155c9565b9150505b5f831115613f2a57613dc38361406b565b5f4790505f80846040015169ffffffffffffffffffff161115613e9157600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683856040015169ffffffffffffffffffff1684613e359190614b50565b613e3f9190614bbe565b604051613e4b90615aa8565b5f6040518083038185875af1925050503d805f8114613e85576040519150601f19603f3d011682016040523d82523d5f602084013e613e8a565b606091505b5050809150505b4791505f821115613f2757600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ee190615aa8565b5f6040518083038185875af1925050503d805f8114613f1b576040519150601f19603f3d011682016040523d82523d5f602084013e613f20565b606091505b5050809150505b50505b5f826020019069ffffffffffffffffffff16908169ffffffffffffffffffff16815250505f825f019069ffffffffffffffffffff16908169ffffffffffffffffffff16815250505f826040019069ffffffffffffffffffff16908169ffffffffffffffffffff168152505081600e5f820151815f015f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506020820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506040820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506060820151815f01601e6101000a81548160ff0219169083151502179055509050505050505b565b606061406284845f85614208565b90509392505050565b5f600267ffffffffffffffff81111561408757614086615abc565b5b6040519080825280602002602001820160405280156140b55781602001602082028036833780820191505090505b50905030815f815181106140cc576140cb615ae9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061413b5761413a615ae9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016141d7959493929190615c06565b5f604051808303815f87803b1580156141ee575f80fd5b505af1158015614200573d5f803e3d5ffd5b505050505050565b60608247101561424d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161424490615cce565b60405180910390fd5b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516142759190615d26565b5f6040518083038185875af1925050503d805f81146142af576040519150601f19603f3d011682016040523d82523d5f602084013e6142b4565b606091505b50915091506142c5878383876142d1565b92505050949350505050565b60608315614332575f83510361432a576142ea85614345565b614329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432090615d86565b60405180910390fd5b5b82905061433d565b61433c8383614367565b5b949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f825111156143795781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143ad91906144c8565b60405180910390fd5b60405180608001604052805f67ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f67ffffffffffffffff1681525090565b60405180604001604052805f6fffffffffffffffffffffffffffffffff1681526020015f6fffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561447557808201518184015260208101905061445a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61449a8261443e565b6144a48185614448565b93506144b4818560208601614458565b6144bd81614480565b840191505092915050565b5f6020820190508181035f8301526144e08184614490565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61452a614525614520846144e8565b614507565b6144e8565b9050919050565b5f61453b82614510565b9050919050565b5f61454c82614531565b9050919050565b61455c81614542565b82525050565b5f6020820190506145755f830184614553565b92915050565b5f80fd5b5f614589826144e8565b9050919050565b6145998161457f565b81146145a3575f80fd5b50565b5f813590506145b481614590565b92915050565b5f819050919050565b6145cc816145ba565b81146145d6575f80fd5b50565b5f813590506145e7816145c3565b92915050565b5f80604083850312156146035761460261457b565b5b5f614610858286016145a6565b9250506020614621858286016145d9565b9150509250929050565b5f8115159050919050565b61463f8161462b565b82525050565b5f6020820190506146585f830184614636565b92915050565b614667816145ba565b82525050565b5f6020820190506146805f83018461465e565b92915050565b5f6020828403121561469b5761469a61457b565b5b5f6146a8848285016145d9565b91505092915050565b5f602082840312156146c6576146c561457b565b5b5f6146d3848285016145a6565b91505092915050565b5f805f606084860312156146f3576146f261457b565b5b5f614700868287016145a6565b9350506020614711868287016145a6565b9250506040614722868287016145d9565b9150509250925092565b5f67ffffffffffffffff82169050919050565b6147488161472c565b8114614752575f80fd5b50565b5f813590506147638161473f565b92915050565b5f805f606084860312156147805761477f61457b565b5b5f61478d86828701614755565b935050602061479e86828701614755565b92505060406147af86828701614755565b9150509250925092565b5f60ff82169050919050565b6147ce816147b9565b82525050565b5f6020820190506147e75f8301846147c5565b92915050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b614811816147ed565b811461481b575f80fd5b50565b5f8135905061482c81614808565b92915050565b5f602082840312156148475761484661457b565b5b5f6148548482850161481e565b91505092915050565b6148668161457f565b82525050565b5f60208201905061487f5f83018461485d565b92915050565b61488e8161472c565b82525050565b5f6080820190506148a75f830187614885565b6148b46020830186614885565b6148c16040830185614885565b6148ce6060830184614885565b95945050505050565b5f80604083850312156148ed576148ec61457b565b5b5f6148fa858286016145a6565b925050602061490b858286016145a6565b9150509250929050565b61491e8161462b565b8114614928575f80fd5b50565b5f8135905061493981614915565b92915050565b5f602082840312156149545761495361457b565b5b5f6149618482850161492b565b91505092915050565b5f69ffffffffffffffffffff82169050919050565b6149888161496a565b82525050565b5f6080820190506149a15f83018761497f565b6149ae602083018661497f565b6149bb604083018561497f565b6149c86060830184614636565b95945050505050565b5f6020820190506149e45f830184614885565b92915050565b5f8060408385031215614a00576149ff61457b565b5b5f614a0d858286016145a6565b9250506020614a1e8582860161492b565b9150509250929050565b614a31816147ed565b82525050565b5f604082019050614a4a5f830185614a28565b614a576020830184614a28565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614aa257607f821691505b602082108103614ab557614ab4614a5e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614aef602083614448565b9150614afa82614abb565b602082019050919050565b5f6020820190508181035f830152614b1c81614ae3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614b5a826145ba565b9150614b65836145ba565b9250828202614b73816145ba565b91508282048414831517614b8a57614b89614b23565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614bc8826145ba565b9150614bd3836145ba565b925082614be357614be2614b91565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614c48603583614448565b9150614c5382614bee565b604082019050919050565b5f6020820190508181035f830152614c7581614c3c565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614cd6603483614448565b9150614ce182614c7c565b604082019050919050565b5f6020820190508181035f830152614d0381614cca565b9050919050565b7f7a65726f206164647265737300000000000000000000000000000000000000005f82015250565b5f614d3e600c83614448565b9150614d4982614d0a565b602082019050919050565b5f6020820190508181035f830152614d6b81614d32565b9050919050565b5f614d7c8261472c565b9150614d878361472c565b9250828201905067ffffffffffffffff811115614da757614da6614b23565b5b92915050565b7f4b656570207461782062656c6f772031302500000000000000000000000000005f82015250565b5f614de1601283614448565b9150614dec82614dad565b602082019050919050565b5f6020820190508181035f830152614e0e81614dd5565b9050919050565b5f614e2f614e2a614e258461472c565b614507565b6145ba565b9050919050565b614e3f81614e15565b82525050565b5f602082019050614e585f830184614e36565b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115614eb357808604811115614e8f57614e8e614b23565b5b6001851615614e9e5780820291505b8081029050614eac85614e5e565b9450614e73565b94509492505050565b5f82614ecb5760019050614f86565b81614ed8575f9050614f86565b8160018114614eee5760028114614ef857614f27565b6001915050614f86565b60ff841115614f0a57614f09614b23565b5b8360020a915084821115614f2157614f20614b23565b5b50614f86565b5060208310610133831016604e8410600b8410161715614f5c5782820a905083811115614f5757614f56614b23565b5b614f86565b614f698484846001614e6a565b92509050818404811115614f8057614f7f614b23565b5b81810290505b9392505050565b5f614f97826145ba565b9150614fa2836147b9565b9250614fcf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614ebc565b905092915050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f61500b600783614448565b915061501682614fd7565b602082019050919050565b5f6020820190508181035f83015261503881614fff565b9050919050565b5f61505961505461504f846147ed565b614507565b6145ba565b9050919050565b6150698161503f565b82525050565b5f6020820190506150825f830184615060565b92915050565b5f615092826145ba565b915061509d836145ba565b92508282019050808211156150b5576150b4614b23565b5b92915050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f6150ef601a83614448565b91506150fa826150bb565b602082019050919050565b5f6020820190508181035f83015261511c816150e3565b9050919050565b5f81519050615131816145c3565b92915050565b5f6020828403121561514c5761514b61457b565b5b5f61515984828501615123565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6151bc602583614448565b91506151c782615162565b604082019050919050565b5f6020820190508181035f8301526151e9816151b0565b9050919050565b7f5a65726f204164647265737300000000000000000000000000000000000000005f82015250565b5f615224600c83614448565b915061522f826151f0565b602082019050919050565b5f6020820190508181035f83015261525181615218565b9050919050565b7f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000005f82015250565b5f61528c601883614448565b915061529782615258565b602082019050919050565b5f6020820190508181035f8301526152b981615280565b9050919050565b5f6040820190506152d35f83018561485d565b6152e06020830184614636565b9392505050565b7f43616e6e6f742072656d6f7665207061697200000000000000000000000000005f82015250565b5f61531b601283614448565b9150615326826152e7565b602082019050919050565b5f6020820190508181035f8301526153488161530f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6153a9602683614448565b91506153b48261534f565b604082019050919050565b5f6020820190508181035f8301526153d68161539d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f615437602483614448565b9150615442826153dd565b604082019050919050565b5f6020820190508181035f8301526154648161542b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154c5602283614448565b91506154d08261546b565b604082019050919050565b5f6020820190508181035f8301526154f2816154b9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61552d601d83614448565b9150615538826154f9565b602082019050919050565b5f6020820190508181035f83015261555a81615521565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f615595601283614448565b91506155a082615561565b602082019050919050565b5f6020820190508181035f8301526155c281615589565b9050919050565b5f6155d3826145ba565b91506155de836145ba565b92508282039050818111156155f6576155f5614b23565b5b92915050565b5f60408201905061560f5f83018561485d565b61561c602083018461465e565b9392505050565b7f4d61782054786e000000000000000000000000000000000000000000000000005f82015250565b5f615657600783614448565b915061566282615623565b602082019050919050565b5f6020820190508181035f8301526156848161564b565b9050919050565b7f4d61782057616c6c6574000000000000000000000000000000000000000000005f82015250565b5f6156bf600a83614448565b91506156ca8261568b565b602082019050919050565b5f6020820190508181035f8301526156ec816156b3565b9050919050565b7f416e7469204d45560000000000000000000000000000000000000000000000005f82015250565b5f615727600883614448565b9150615732826156f3565b602082019050919050565b5f6020820190508181035f8301526157548161571b565b9050919050565b5f615765826147ed565b9150615770836147ed565b925082820261577e816147ed565b91508082146157905761578f614b23565b5b5092915050565b5f6157a1826147ed565b91506157ac836147ed565b9250826157bc576157bb614b91565b5b828204905092915050565b5f6157d18261496a565b91506157dc8361496a565b9250828201905069ffffffffffffffffffff8111156157fe576157fd614b23565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61585e602583614448565b915061586982615804565b604082019050919050565b5f6020820190508181035f83015261588b81615852565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6158ec602383614448565b91506158f782615892565b604082019050919050565b5f6020820190508181035f830152615919816158e0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61597a602683614448565b915061598582615920565b604082019050919050565b5f6020820190508181035f8301526159a78161596e565b9050919050565b5f815190506159bc81614915565b92915050565b5f602082840312156159d7576159d661457b565b5b5f6159e4848285016159ae565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f615a47602a83614448565b9150615a52826159ed565b604082019050919050565b5f6020820190508181035f830152615a7481615a3b565b9050919050565b5f81905092915050565b50565b5f615a935f83615a7b565b9150615a9e82615a85565b5f82019050919050565b5f615ab282615a88565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f615b39615b34615b2f84615b16565b614507565b6145ba565b9050919050565b615b4981615b1f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615b818161457f565b82525050565b5f615b928383615b78565b60208301905092915050565b5f602082019050919050565b5f615bb482615b4f565b615bbe8185615b59565b9350615bc983615b69565b805f5b83811015615bf9578151615be08882615b87565b9750615beb83615b9e565b925050600181019050615bcc565b5085935050505092915050565b5f60a082019050615c195f83018861465e565b615c266020830187615b40565b8181036040830152615c388186615baa565b9050615c47606083018561485d565b615c54608083018461465e565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f5f8201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b5f615cb8602683614448565b9150615cc382615c5e565b604082019050919050565b5f6020820190508181035f830152615ce581615cac565b9050919050565b5f81519050919050565b5f615d0082615cec565b615d0a8185615a7b565b9350615d1a818560208601614458565b80840191505092915050565b5f615d318284615cf6565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000005f82015250565b5f615d70601d83614448565b9150615d7b82615d3c565b602082019050919050565b5f6020820190508181035f830152615d9d81615d64565b905091905056fea264697066735822122025c0439ec04dd6fea21f8dc4b6e2742ff9c184620d3f99224b204754a239d12264736f6c63430008140033

Deployed Bytecode Sourcemap

21582:12501:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4290:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22222:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6650:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5419:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31554:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33701:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7431:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32379:466;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5261:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30914:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8101:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21863:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22194:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21897:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;21739:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33397:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33274:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21627:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22078:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31244:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21952:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;5590:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13204:150;;;;;;;;;;;;;:::i;:::-;;32945:321;;;;;;;;;;;;;:::i;:::-;;33882:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22120:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32853:84;;;;;;;;;;;;;:::i;:::-;;31908:463;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21681:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12990:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4509:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22327:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8842:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21825:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5923:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22256:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21774:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30227:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22155:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21923:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;30554:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6179:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22294:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;13362:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4290:100;4344:13;4377:5;4370:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4290:100;:::o;22222:27::-;;;;;;;;;;;;;:::o;6650:201::-;6733:4;6750:13;6766:12;:10;:12::i;:::-;6750:28;;6789:32;6798:5;6805:7;6814:6;6789:8;:32::i;:::-;6839:4;6832:11;;;6650:201;;;;:::o;5419:108::-;5480:7;5507:12;;5500:19;;5419:108;:::o;31554:346::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31675:6:::1;31670:1;31654:13;:11;:13::i;:::-;:17;;;;:::i;:::-;31653:28;;;;:::i;:::-;31640:9;:41;;31632:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;31793:4;31788:1;31772:13;:11;:13::i;:::-;:17;;;;:::i;:::-;31771:26;;;;:::i;:::-;31758:9;:39;;31750:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;31883:9;31865:15;:27;;;;31554:346:::0;:::o;33701:173::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33809:1:::1;33789:22;;:8;:22;;::::0;33781:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33858:8;33839:16;;:27;;;;;;;;;;;;;;;;;;33701:173:::0;:::o;7431:261::-;7528:4;7545:15;7563:12;:10;:12::i;:::-;7545:30;;7586:38;7602:4;7608:7;7617:6;7586:15;:38::i;:::-;7635:27;7645:4;7651:2;7655:6;7635:9;:27::i;:::-;7680:4;7673:11;;;7431:261;;;;;:::o;32379:466::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32492:18:::1;;:::i;:::-;32542:13;32521:5;:18;;:34;;;;;;;;;::::0;::::1;32587:13;32566:5;:18;;:34;;;;;;;;;::::0;::::1;32626:7;32611:5;:12;;:22;;;;;;;;;::::0;::::1;32693:7;32677:13;32661;:29;;;;:::i;:::-;:39;;;;:::i;:::-;32644:5;:14;;:56;;;;;;;;;::::0;::::1;32738:4;32719:5;:14;;;:23;;;;32711:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;32781:30;32796:5;:14;;;32781:30;;;;;;:::i;:::-;;;;;;;;32832:5;32822:7;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32481:364;32379:466:::0;;;:::o;5261:93::-;5319:5;5344:2;5337:9;;5261:93;:::o;30914:322::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31058:10:::1;:8;:10::i;:::-;31054:2;:14;;;;:::i;:::-;31047:4;31043:1;31027:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;31026:43;;;;:::i;:::-;31008:14;:61;;;;31000:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31150:10;:8;:10::i;:::-;31146:2;:14;;;;:::i;:::-;31128;:33;;;;;;:::i;:::-;31092:8;:25;;;:70;;;;;;;;;;;;;;;;;;31178:50;31202:8;:25;;;;;;;;;;;;31178:50;;;;;;:::i;:::-;;;;;;;;30914:322:::0;:::o;8101:238::-;8189:4;8206:13;8222:12;:10;:12::i;:::-;8206:28;;8245:64;8254:5;8261:7;8298:10;8270:25;8280:5;8287:7;8270:9;:25::i;:::-;:38;;;;:::i;:::-;8245:8;:64::i;:::-;8327:4;8320:11;;;8101:238;;;;:::o;21863:25::-;;;;;;;;;;;;;:::o;22194:21::-;;;;;;;;;;;;;:::o;21897:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21739:26::-;;;;;;;;;;;;;:::o;33397:296::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33504:1:::1;33486:20;;:6;:20;;::::0;33478:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33548:24;33582:6;33575:24;;;33608:4;33575:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33548:66;;33625:60;33655:6;33663:3;33668:16;33625:22;:60::i;:::-;33467:226;33397:296:::0;;:::o;33274:111::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33369:8:::1;33352:14;;:25;;;;;;;;;;;;;;;;;;33274:111:::0;:::o;21627:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;22078:33::-;;;;;;;;;;;;;:::o;31244:302::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31383:10:::1;:8;:10::i;:::-;31379:2;:14;;;;:::i;:::-;31372:4;31368:1;31352:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;31351:43;;;;:::i;:::-;31333:14;:61;;;;31325:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31470:10;:8;:10::i;:::-;31466:2;:14;;;;:::i;:::-;31448;:33;;;;;;:::i;:::-;31417:8;:20;;;:65;;;;;;;;;;;;;;;;;;31498:40;31517:8;:20;;;;;;;;;;;;31498:40;;;;;;:::i;:::-;;;;;;;;31244:302:::0;:::o;21952:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5590:127::-;5664:7;5691:9;:18;5701:7;5691:18;;;;;;;;;;;;;;;;5684:25;;5590:127;;;:::o;13204:150::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13313:1:::1;13276:40;;13297:6;;;;;;;;;;;13276:40;;;;;;;;;;;;13344:1;13327:6;;:19;;;;;;;;;;;;;;;;;;13204:150::o:0;32945:321::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33009:5:::1;32999:7;;:15;;;;;;;;;;;;;;;;;;33025:25;;:::i;:::-;33061:14;33078:13;:11;:13::i;:::-;33061:30;;33139:6;33102:9;:26;;:44;;;;;;;;;::::0;::::1;33189:6;33157:9;:21;;:39;;;;;;;;;::::0;::::1;33218:9;33207:8;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33243:15;;;;;;;;;;32988:278;;32945:321::o:0;33882:161::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33984:1:::1;33964:22;;:8;:22;;::::0;33956:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34027:8;34014:10;;:21;;;;;;;;;;;;;;;;;;33882:161:::0;:::o;22120:26::-;;;;;;;;;;;;;:::o;32853:84::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32925:4:::1;32908:14;;:21;;;;;;;;;;;;;;;;;;32853:84::o:0;31908:463::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32020:18:::1;;:::i;:::-;32070:13;32049:5;:18;;:34;;;;;;;;;::::0;::::1;32115:13;32094:5;:18;;:34;;;;;;;;;::::0;::::1;32154:7;32139:5;:12;;:22;;;;;;;;;::::0;::::1;32221:7;32205:13;32189;:29;;;;:::i;:::-;:39;;;;:::i;:::-;32172:5;:14;;:56;;;;;;;;;::::0;::::1;32266:4;32247:5;:14;;;:23;;;;32239:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;32309:29;32323:5;:14;;;32309:29;;;;;;:::i;:::-;;;;;;;;32358:5;32349:6;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32009:362;31908:463:::0;;;:::o;21681:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;12990:79::-;13028:7;13055:6;;;;;;;;;;;13048:13;;12990:79;:::o;4509:104::-;4565:13;4598:7;4591:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4509:104;:::o;22327:42::-;22364:5;22327:42;:::o;8842:436::-;8935:4;8952:13;8968:12;:10;:12::i;:::-;8952:28;;8991:24;9018:25;9028:5;9035:7;9018:9;:25::i;:::-;8991:52;;9082:15;9062:16;:35;;9054:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9175:60;9184:5;9191:7;9219:15;9200:16;:34;9175:8;:60::i;:::-;9266:4;9259:11;;;;8842:436;;;;:::o;21825:31::-;;;;;;;;;;;;;:::o;5923:193::-;6002:4;6019:13;6035:12;:10;:12::i;:::-;6019:28;;6058;6068:5;6075:2;6079:6;6058:9;:28::i;:::-;6104:4;6097:11;;;5923:193;;;;:::o;22256:29::-;;;:::o;21774:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;30227:319::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30345:1:::1;30325:22;;:8;:22;;::::0;30317:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30403:4;30383:25;;:8;:25;;::::0;30375:62:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30475:9;30448:14;:24;30463:8;30448:24;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30500:38;30518:8;30528:9;30500:38;;;;;;;:::i;:::-;;;;;;;;30227:319:::0;;:::o;22155:30::-;;;;:::o;21923:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30554:352::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30674:1:::1;30654:22;;:8;:22;;::::0;30646:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30708:9;30704:90;;30753:6;;;;;;;;;;;30741:18;;:8;:18;;::::0;30733:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:90;30833:9;30804:16;:26;30821:8;30804:26;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;30858:40;30878:8;30888:9;30858:40;;;;;;;:::i;:::-;;;;;;;;30554:352:::0;;:::o;6179:151::-;6268:7;6295:11;:18;6307:5;6295:18;;;;;;;;;;;;;;;:27;6314:7;6295:27;;;;;;;;;;;;;;;;6288:34;;6179:151;;;;:::o;22294:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13362:244::-;13127:12;:10;:12::i;:::-;13117:22;;:6;;;;;;;;;;;:22;;;13109:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13471:1:::1;13451:22;;:8;:22;;::::0;13443:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13561:8;13532:38;;13553:6;;;;;;;;;;;13532:38;;;;;;;;;;;;13590:8;13581:6;;:17;;;;;;;;;;;;;;;;;;13362:244:::0;:::o;196:98::-;249:7;276:10;269:17;;196:98;:::o;11603:346::-;11722:1;11705:19;;:5;:19;;;11697:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11803:1;11784:21;;:7;:21;;;11776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11887:6;11857:11;:18;11869:5;11857:18;;;;;;;;;;;;;;;:27;11876:7;11857:27;;;;;;;;;;;;;;;:36;;;;11925:7;11909:32;;11918:5;11909:32;;;11934:6;11909:32;;;;;;:::i;:::-;;;;;;;;11603:346;;;:::o;12240:419::-;12341:24;12368:25;12378:5;12385:7;12368:9;:25::i;:::-;12341:52;;12428:17;12408:16;:37;12404:248;;12490:6;12470:16;:26;;12462:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12574:51;12583:5;12590:7;12618:6;12599:16;:25;12574:8;:51::i;:::-;12404:248;12330:329;12240:419;;;:::o;25477:409::-;25623:14;:20;25638:4;25623:20;;;;;;;;;;;;;;;;;;;;;;;;;25622:21;:44;;;;;25648:14;:18;25663:2;25648:18;;;;;;;;;;;;;;;;;;;;;;;;;25647:19;25622:44;25619:216;;;25690:14;;;;;;;;;;;25682:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;25742:29;25754:4;25760:2;25764:6;25742:11;:29::i;:::-;25796:27;25806:4;25812:2;25816:6;25796:9;:27::i;:::-;25786:37;;;;;:::i;:::-;;;25619:216;25847:31;25863:4;25868:2;25871:6;25847:15;:31::i;:::-;25477:409;;;:::o;19776:177::-;19859:86;19879:5;19909:23;;;19934:2;19938:5;19886:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19859:19;:86::i;:::-;19776:177;;;:::o;25894:1171::-;25980:7;;;;;;;;;;;25977:753;;;26003:19;26025:16;:20;26042:2;26025:20;;;;;;;;;;;;;;;;;;;;;;;;;26003:42;;26060:19;26082:13;26092:2;26082:9;:13::i;:::-;26060:35;;26110:25;26138:8;26110:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26185:9;:15;26195:4;26185:15;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;26205:14;26204:15;26185:34;26181:538;;;26258:9;:26;;;26248:36;;:6;:36;;26240:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26347:9;:21;;;26323:45;;26332:11;26323:6;:20;;;;:::i;:::-;:45;;26315:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26181:538;;;26444:9;:13;26454:2;26444:13;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;;26462:16;:22;26479:4;26462:22;;;;;;;;;;;;;;;;;;;;;;;;;26461:23;26444:40;26440:279;;;26523:9;:26;;;26513:36;;:6;:36;;26505:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26440:279;;;26600:14;26596:123;;26667:9;:21;;;26643:45;;26652:11;26643:6;:20;;;;:::i;:::-;:45;;26635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26596:123;26440:279;26181:538;25988:742;;;25977:753;26746:14;;;;;;;;;;;26742:316;;;26779:9;:13;26789:2;26779:13;;;;;;;;;;;;;;;;;;;;;;;;;26776:271;;;26853:12;26820:24;:30;26845:4;26820:30;;;;;;;;;;;;;;;;:45;26812:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26776:271;;;26950:12;26919:24;:28;26944:2;26919:28;;;;;;;;;;;;;;;:43;;;;27019:12;26981:24;:35;27006:9;26981:35;;;;;;;;;;;;;;;:50;;;;26776:271;26742:316;25894:1171;;;:::o;27073:1058::-;27152:7;27204:15;;27176:24;27194:4;27176:9;:24::i;:::-;:43;;:63;;;;;27224:9;:15;27234:4;27224:15;;;;;;;;;;;;;;;;;;;;;;;;;27223:16;27176:63;27173:109;;;27256:14;:12;:14::i;:::-;27173:109;27302:11;27330:18;;:::i;:::-;27365:9;:13;27375:2;27365:13;;;;;;;;;;;;;;;;;;;;;;;;;27361:126;;;27402:7;27394:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27361:126;;;27430:9;:15;27440:4;27430:15;;;;;;;;;;;;;;;;;;;;;;;;;27427:60;;;27469:6;27461:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27427:60;27361:126;27519:1;27502:5;:14;;;:18;;;27499:594;;;27536:38;27577:12;27536:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22364:5;27618:37;;27627:5;:14;;;27618:23;;:6;:23;;;;:::i;:::-;:37;;;;:::i;:::-;27604:52;;27763:3;27746:5;:14;;;27719:41;;27725:5;:18;;;27719:24;;:3;:24;;;;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;27671:18;:37;;:96;;;;;;;:::i;:::-;;;;;;;;;;;;;;27874:3;27857:5;:14;;;27830:41;;27836:5;:18;;;27830:24;;:3;:24;;;;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;27782:18;:37;;:96;;;;;;;:::i;:::-;;;;;;;;;;;;;;27973:3;27956:5;:14;;;27935:35;;27941:5;:12;;;27935:18;;:3;:18;;;;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;27893:18;:31;;:84;;;;;;;:::i;:::-;;;;;;;;;;;;;;28007:18;27992:12;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28040:41;28056:4;28070;28077:3;28040:41;;:15;:41::i;:::-;27521:572;27499:594;28120:3;28113:10;;;;;;27073:1058;;;;;:::o;9748:705::-;9861:1;9845:18;;:4;:18;;;9837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9938:1;9924:16;;:2;:16;;;9916:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9993:19;10015:9;:15;10025:4;10015:15;;;;;;;;;;;;;;;;9993:37;;10064:6;10049:11;:21;;10041:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10181:6;10167:11;:20;10149:9;:15;10159:4;10149:15;;;;;;;;;;;;;;;:38;;;;10384:6;10367:9;:13;10377:2;10367:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10434:2;10419:26;;10428:4;10419:26;;;10438:6;10419:26;;;;;;:::i;:::-;;;;;;;;9826:627;9748:705;;;:::o;20174:333::-;20255:23;20281:69;20309:4;20281:69;;;;;;;;;;;;;;;;;20289:5;20281:27;;;;:69;;;;;:::i;:::-;20255:95;;20385:1;20365:10;:17;:21;20361:139;;;20422:10;20411:30;;;;;;;;;;;;:::i;:::-;20403:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20361:139;20244:263;20174:333;;:::o;28519:1676::-;28564:23;28590:24;28608:4;28590:9;:24::i;:::-;28564:50;;28625:35;28663:12;28625:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28686:25;28788:15;:28;;;28751:15;:34;;;28714:15;:34;;;:71;;;;:::i;:::-;:102;;;;:::i;:::-;28686:130;;;;28859:1;28840:15;:20;:46;;;;28885:1;28864:17;:22;28840:46;28837:60;;;28889:7;;;;;28837:60;28948:2;28930:15;;:20;;;;:::i;:::-;28912:15;:38;28909:107;;;29002:2;28984:15;;:20;;;;:::i;:::-;28966:38;;28909:107;29068:1;29031:15;:34;;;:38;;;29028:407;;;29085:23;29166:17;29129:15;:34;;;29111:52;;:15;:52;;;;:::i;:::-;:72;;;;:::i;:::-;29085:98;;29198:55;29222:4;29229:6;;;;;;;;;;;29237:15;29198;:55::i;:::-;29280:6;;;;;;;;;;;29272:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29268:37;29338:15;29319:34;;;;;:::i;:::-;;;29389:15;:34;;;29368:55;;;;;;;:::i;:::-;;;29070:365;29028:407;29468:1;29450:15;:19;29447:555;;;29487:33;29504:15;29487:16;:33::i;:::-;29549:18;29570:21;29549:42;;29608:12;29671:1;29640:15;:28;;;:32;;;29637:175;;;29705:10;;;;;;;;;;;:15;;29772:17;29741:15;:28;;;29728:41;;:10;:41;;;;:::i;:::-;:61;;;;:::i;:::-;29705:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29692:102;;;;;29637:175;29841:21;29828:34;;29895:1;29882:10;:14;29879:112;;;29929:16;;;;;;;;;;;:21;;29958:10;29929:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29916:57;;;;;29879:112;29470:532;;29447:555;30051:1;30014:15;:34;;:38;;;;;;;;;;;30100:1;30063:15;:34;;:38;;;;;;;;;;;30143:1;30112:15;:28;;:32;;;;;;;;;;;30172:15;30157:12;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28551:1644;;;28519:1676;:::o;14279:229::-;14416:12;14448:52;14470:6;14478:4;14484:1;14487:12;14448:21;:52::i;:::-;14441:59;;14279:229;;;;;:::o;28139:372::-;28204:21;28242:1;28228:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28204:40;;28273:4;28255;28260:1;28255:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28299:4;28289;28294:1;28289:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;28316:9;;;;;;;;;;;:60;;;28391:8;28414:1;28430:4;28457;28477:15;28316:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28191:320;28139:372;:::o;15399:455::-;15569:12;15627:5;15602:21;:30;;15594:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;15687:12;15701:23;15728:6;:11;;15747:5;15754:4;15728:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15686:73;;;;15777:69;15804:6;15812:7;15821:10;15833:12;15777:26;:69::i;:::-;15770:76;;;;15399:455;;;;;;:::o;17972:644::-;18157:12;18186:7;18182:427;;;18235:1;18214:10;:17;:22;18210:290;;18432:18;18443:6;18432:10;:18::i;:::-;18424:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18210:290;18521:10;18514:17;;;;18182:427;18564:33;18572:10;18584:12;18564:7;:33::i;:::-;17972:644;;;;;;;:::o;13636:115::-;13696:4;13742:1;13720:7;:19;;;:23;13713:30;;13636:115;;;:::o;19158:552::-;19339:1;19319:10;:17;:21;19315:388;;;19551:10;19545:17;19608:15;19595:10;19591:2;19587:19;19580:44;19315:388;19678:12;19671:20;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::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:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:60::-;1509:3;1530:5;1523:12;;1481:60;;;:::o;1547:142::-;1597:9;1630:53;1648:34;1657:24;1675:5;1657:24;:::i;:::-;1648:34;:::i;:::-;1630:53;:::i;:::-;1617:66;;1547:142;;;:::o;1695:126::-;1745:9;1778:37;1809:5;1778:37;:::i;:::-;1765:50;;1695:126;;;:::o;1827:145::-;1896:9;1929:37;1960:5;1929:37;:::i;:::-;1916:50;;1827:145;;;:::o;1978:169::-;2084:56;2134:5;2084:56;:::i;:::-;2079:3;2072:69;1978:169;;:::o;2153:260::-;2265:4;2303:2;2292:9;2288:18;2280:26;;2316:90;2403:1;2392:9;2388:17;2379:6;2316:90;:::i;:::-;2153:260;;;;:::o;2500:117::-;2609:1;2606;2599:12;2746:96;2783:7;2812:24;2830:5;2812:24;:::i;:::-;2801:35;;2746:96;;;:::o;2848:122::-;2921:24;2939:5;2921:24;:::i;:::-;2914:5;2911:35;2901:63;;2960:1;2957;2950:12;2901:63;2848:122;:::o;2976:139::-;3022:5;3060:6;3047:20;3038:29;;3076:33;3103:5;3076:33;:::i;:::-;2976:139;;;;:::o;3121:77::-;3158:7;3187:5;3176:16;;3121:77;;;:::o;3204:122::-;3277:24;3295:5;3277:24;:::i;:::-;3270:5;3267:35;3257:63;;3316:1;3313;3306:12;3257:63;3204:122;:::o;3332:139::-;3378:5;3416:6;3403:20;3394:29;;3432:33;3459:5;3432:33;:::i;:::-;3332:139;;;;:::o;3477:474::-;3545:6;3553;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3855:2;3881:53;3926:7;3917:6;3906:9;3902:22;3881:53;:::i;:::-;3871:63;;3826:118;3477:474;;;;;:::o;3957:90::-;3991:7;4034:5;4027:13;4020:21;4009:32;;3957:90;;;:::o;4053:109::-;4134:21;4149:5;4134:21;:::i;:::-;4129:3;4122:34;4053:109;;:::o;4168:210::-;4255:4;4293:2;4282:9;4278:18;4270:26;;4306:65;4368:1;4357:9;4353:17;4344:6;4306:65;:::i;:::-;4168:210;;;;:::o;4384:118::-;4471:24;4489:5;4471:24;:::i;:::-;4466:3;4459:37;4384:118;;:::o;4508:222::-;4601:4;4639:2;4628:9;4624:18;4616:26;;4652:71;4720:1;4709:9;4705:17;4696:6;4652:71;:::i;:::-;4508:222;;;;:::o;4736:329::-;4795:6;4844:2;4832:9;4823:7;4819:23;4815:32;4812:119;;;4850:79;;:::i;:::-;4812:119;4970:1;4995:53;5040:7;5031:6;5020:9;5016:22;4995:53;:::i;:::-;4985:63;;4941:117;4736:329;;;;:::o;5071:::-;5130:6;5179:2;5167:9;5158:7;5154:23;5150:32;5147:119;;;5185:79;;:::i;:::-;5147:119;5305:1;5330:53;5375:7;5366:6;5355:9;5351:22;5330:53;:::i;:::-;5320:63;;5276:117;5071:329;;;;:::o;5406:619::-;5483:6;5491;5499;5548:2;5536:9;5527:7;5523:23;5519:32;5516:119;;;5554:79;;:::i;:::-;5516:119;5674:1;5699:53;5744:7;5735:6;5724:9;5720:22;5699:53;:::i;:::-;5689:63;;5645:117;5801:2;5827:53;5872:7;5863:6;5852:9;5848:22;5827:53;:::i;:::-;5817:63;;5772:118;5929:2;5955:53;6000:7;5991:6;5980:9;5976:22;5955:53;:::i;:::-;5945:63;;5900:118;5406:619;;;;;:::o;6031:101::-;6067:7;6107:18;6100:5;6096:30;6085:41;;6031:101;;;:::o;6138:120::-;6210:23;6227:5;6210:23;:::i;:::-;6203:5;6200:34;6190:62;;6248:1;6245;6238:12;6190:62;6138:120;:::o;6264:137::-;6309:5;6347:6;6334:20;6325:29;;6363:32;6389:5;6363:32;:::i;:::-;6264:137;;;;:::o;6407:613::-;6481:6;6489;6497;6546:2;6534:9;6525:7;6521:23;6517:32;6514:119;;;6552:79;;:::i;:::-;6514:119;6672:1;6697:52;6741:7;6732:6;6721:9;6717:22;6697:52;:::i;:::-;6687:62;;6643:116;6798:2;6824:52;6868:7;6859:6;6848:9;6844:22;6824:52;:::i;:::-;6814:62;;6769:117;6925:2;6951:52;6995:7;6986:6;6975:9;6971:22;6951:52;:::i;:::-;6941:62;;6896:117;6407:613;;;;;:::o;7026:86::-;7061:7;7101:4;7094:5;7090:16;7079:27;;7026:86;;;:::o;7118:112::-;7201:22;7217:5;7201:22;:::i;:::-;7196:3;7189:35;7118:112;;:::o;7236:214::-;7325:4;7363:2;7352:9;7348:18;7340:26;;7376:67;7440:1;7429:9;7425:17;7416:6;7376:67;:::i;:::-;7236:214;;;;:::o;7456:118::-;7493:7;7533:34;7526:5;7522:46;7511:57;;7456:118;;;:::o;7580:122::-;7653:24;7671:5;7653:24;:::i;:::-;7646:5;7643:35;7633:63;;7692:1;7689;7682:12;7633:63;7580:122;:::o;7708:139::-;7754:5;7792:6;7779:20;7770:29;;7808:33;7835:5;7808:33;:::i;:::-;7708:139;;;;:::o;7853:329::-;7912:6;7961:2;7949:9;7940:7;7936:23;7932:32;7929:119;;;7967:79;;:::i;:::-;7929:119;8087:1;8112:53;8157:7;8148:6;8137:9;8133:22;8112:53;:::i;:::-;8102:63;;8058:117;7853:329;;;;:::o;8188:118::-;8275:24;8293:5;8275:24;:::i;:::-;8270:3;8263:37;8188:118;;:::o;8312:222::-;8405:4;8443:2;8432:9;8428:18;8420:26;;8456:71;8524:1;8513:9;8509:17;8500:6;8456:71;:::i;:::-;8312:222;;;;:::o;8540:115::-;8625:23;8642:5;8625:23;:::i;:::-;8620:3;8613:36;8540:115;;:::o;8661:537::-;8830:4;8868:3;8857:9;8853:19;8845:27;;8882:69;8948:1;8937:9;8933:17;8924:6;8882:69;:::i;:::-;8961:70;9027:2;9016:9;9012:18;9003:6;8961:70;:::i;:::-;9041;9107:2;9096:9;9092:18;9083:6;9041:70;:::i;:::-;9121;9187:2;9176:9;9172:18;9163:6;9121:70;:::i;:::-;8661:537;;;;;;;:::o;9204:474::-;9272:6;9280;9329:2;9317:9;9308:7;9304:23;9300:32;9297:119;;;9335:79;;:::i;:::-;9297:119;9455:1;9480:53;9525:7;9516:6;9505:9;9501:22;9480:53;:::i;:::-;9470:63;;9426:117;9582:2;9608:53;9653:7;9644:6;9633:9;9629:22;9608:53;:::i;:::-;9598:63;;9553:118;9204:474;;;;;:::o;9684:116::-;9754:21;9769:5;9754:21;:::i;:::-;9747:5;9744:32;9734:60;;9790:1;9787;9780:12;9734:60;9684:116;:::o;9806:133::-;9849:5;9887:6;9874:20;9865:29;;9903:30;9927:5;9903:30;:::i;:::-;9806:133;;;;:::o;9945:323::-;10001:6;10050:2;10038:9;10029:7;10025:23;10021:32;10018:119;;;10056:79;;:::i;:::-;10018:119;10176:1;10201:50;10243:7;10234:6;10223:9;10219:22;10201:50;:::i;:::-;10191:60;;10147:114;9945:323;;;;:::o;10274:105::-;10310:7;10350:22;10343:5;10339:34;10328:45;;10274:105;;;:::o;10385:115::-;10470:23;10487:5;10470:23;:::i;:::-;10465:3;10458:36;10385:115;;:::o;10506:529::-;10671:4;10709:3;10698:9;10694:19;10686:27;;10723:69;10789:1;10778:9;10774:17;10765:6;10723:69;:::i;:::-;10802:70;10868:2;10857:9;10853:18;10844:6;10802:70;:::i;:::-;10882;10948:2;10937:9;10933:18;10924:6;10882:70;:::i;:::-;10962:66;11024:2;11013:9;11009:18;11000:6;10962:66;:::i;:::-;10506:529;;;;;;;:::o;11041:218::-;11132:4;11170:2;11159:9;11155:18;11147:26;;11183:69;11249:1;11238:9;11234:17;11225:6;11183:69;:::i;:::-;11041:218;;;;:::o;11265:468::-;11330:6;11338;11387:2;11375:9;11366:7;11362:23;11358:32;11355:119;;;11393:79;;:::i;:::-;11355:119;11513:1;11538:53;11583:7;11574:6;11563:9;11559:22;11538:53;:::i;:::-;11528:63;;11484:117;11640:2;11666:50;11708:7;11699:6;11688:9;11684:22;11666:50;:::i;:::-;11656:60;;11611:115;11265:468;;;;;:::o;11739:118::-;11826:24;11844:5;11826:24;:::i;:::-;11821:3;11814:37;11739:118;;:::o;11863:332::-;11984:4;12022:2;12011:9;12007:18;11999:26;;12035:71;12103:1;12092:9;12088:17;12079:6;12035:71;:::i;:::-;12116:72;12184:2;12173:9;12169:18;12160:6;12116:72;:::i;:::-;11863:332;;;;;:::o;12201:180::-;12249:77;12246:1;12239:88;12346:4;12343:1;12336:15;12370:4;12367:1;12360:15;12387:320;12431:6;12468:1;12462:4;12458:12;12448:22;;12515:1;12509:4;12505:12;12536:18;12526:81;;12592:4;12584:6;12580:17;12570:27;;12526:81;12654:2;12646:6;12643:14;12623:18;12620:38;12617:84;;12673:18;;:::i;:::-;12617:84;12438:269;12387:320;;;:::o;12713:182::-;12853:34;12849:1;12841:6;12837:14;12830:58;12713:182;:::o;12901:366::-;13043:3;13064:67;13128:2;13123:3;13064:67;:::i;:::-;13057:74;;13140:93;13229:3;13140:93;:::i;:::-;13258:2;13253:3;13249:12;13242:19;;12901:366;;;:::o;13273:419::-;13439:4;13477:2;13466:9;13462:18;13454:26;;13526:9;13520:4;13516:20;13512:1;13501:9;13497:17;13490:47;13554:131;13680:4;13554:131;:::i;:::-;13546:139;;13273:419;;;:::o;13698:180::-;13746:77;13743:1;13736:88;13843:4;13840:1;13833:15;13867:4;13864:1;13857:15;13884:410;13924:7;13947:20;13965:1;13947:20;:::i;:::-;13942:25;;13981:20;13999:1;13981:20;:::i;:::-;13976:25;;14036:1;14033;14029:9;14058:30;14076:11;14058:30;:::i;:::-;14047:41;;14237:1;14228:7;14224:15;14221:1;14218:22;14198:1;14191:9;14171:83;14148:139;;14267:18;;:::i;:::-;14148:139;13932:362;13884:410;;;;:::o;14300:180::-;14348:77;14345:1;14338:88;14445:4;14442:1;14435:15;14469:4;14466:1;14459:15;14486:185;14526:1;14543:20;14561:1;14543:20;:::i;:::-;14538:25;;14577:20;14595:1;14577:20;:::i;:::-;14572:25;;14616:1;14606:35;;14621:18;;:::i;:::-;14606:35;14663:1;14660;14656:9;14651:14;;14486:185;;;;:::o;14677:240::-;14817:34;14813:1;14805:6;14801:14;14794:58;14886:23;14881:2;14873:6;14869:15;14862:48;14677:240;:::o;14923:366::-;15065:3;15086:67;15150:2;15145:3;15086:67;:::i;:::-;15079:74;;15162:93;15251:3;15162:93;:::i;:::-;15280:2;15275:3;15271:12;15264:19;;14923:366;;;:::o;15295:419::-;15461:4;15499:2;15488:9;15484:18;15476:26;;15548:9;15542:4;15538:20;15534:1;15523:9;15519:17;15512:47;15576:131;15702:4;15576:131;:::i;:::-;15568:139;;15295:419;;;:::o;15720:239::-;15860:34;15856:1;15848:6;15844:14;15837:58;15929:22;15924:2;15916:6;15912:15;15905:47;15720:239;:::o;15965:366::-;16107:3;16128:67;16192:2;16187:3;16128:67;:::i;:::-;16121:74;;16204:93;16293:3;16204:93;:::i;:::-;16322:2;16317:3;16313:12;16306:19;;15965:366;;;:::o;16337:419::-;16503:4;16541:2;16530:9;16526:18;16518:26;;16590:9;16584:4;16580:20;16576:1;16565:9;16561:17;16554:47;16618:131;16744:4;16618:131;:::i;:::-;16610:139;;16337:419;;;:::o;16762:162::-;16902:14;16898:1;16890:6;16886:14;16879:38;16762:162;:::o;16930:366::-;17072:3;17093:67;17157:2;17152:3;17093:67;:::i;:::-;17086:74;;17169:93;17258:3;17169:93;:::i;:::-;17287:2;17282:3;17278:12;17271:19;;16930:366;;;:::o;17302:419::-;17468:4;17506:2;17495:9;17491:18;17483:26;;17555:9;17549:4;17545:20;17541:1;17530:9;17526:17;17519:47;17583:131;17709:4;17583:131;:::i;:::-;17575:139;;17302:419;;;:::o;17727:205::-;17766:3;17785:19;17802:1;17785:19;:::i;:::-;17780:24;;17818:19;17835:1;17818:19;:::i;:::-;17813:24;;17860:1;17857;17853:9;17846:16;;17883:18;17878:3;17875:27;17872:53;;;17905:18;;:::i;:::-;17872:53;17727:205;;;;:::o;17938:168::-;18078:20;18074:1;18066:6;18062:14;18055:44;17938:168;:::o;18112:366::-;18254:3;18275:67;18339:2;18334:3;18275:67;:::i;:::-;18268:74;;18351:93;18440:3;18351:93;:::i;:::-;18469:2;18464:3;18460:12;18453:19;;18112:366;;;:::o;18484:419::-;18650:4;18688:2;18677:9;18673:18;18665:26;;18737:9;18731:4;18727:20;18723:1;18712:9;18708:17;18701:47;18765:131;18891:4;18765:131;:::i;:::-;18757:139;;18484:419;;;:::o;18909:140::-;18958:9;18991:52;19009:33;19018:23;19035:5;19018:23;:::i;:::-;19009:33;:::i;:::-;18991:52;:::i;:::-;18978:65;;18909:140;;;:::o;19055:129::-;19141:36;19171:5;19141:36;:::i;:::-;19136:3;19129:49;19055:129;;:::o;19190:220::-;19282:4;19320:2;19309:9;19305:18;19297:26;;19333:70;19400:1;19389:9;19385:17;19376:6;19333:70;:::i;:::-;19190:220;;;;:::o;19416:102::-;19458:8;19505:5;19502:1;19498:13;19477:34;;19416:102;;;:::o;19524:848::-;19585:5;19592:4;19616:6;19607:15;;19640:5;19631:14;;19654:712;19675:1;19665:8;19662:15;19654:712;;;19770:4;19765:3;19761:14;19755:4;19752:24;19749:50;;;19779:18;;:::i;:::-;19749:50;19829:1;19819:8;19815:16;19812:451;;;20244:4;20237:5;20233:16;20224:25;;19812:451;20294:4;20288;20284:15;20276:23;;20324:32;20347:8;20324:32;:::i;:::-;20312:44;;19654:712;;;19524:848;;;;;;;:::o;20378:1073::-;20432:5;20623:8;20613:40;;20644:1;20635:10;;20646:5;;20613:40;20672:4;20662:36;;20689:1;20680:10;;20691:5;;20662:36;20758:4;20806:1;20801:27;;;;20842:1;20837:191;;;;20751:277;;20801:27;20819:1;20810:10;;20821:5;;;20837:191;20882:3;20872:8;20869:17;20866:43;;;20889:18;;:::i;:::-;20866:43;20938:8;20935:1;20931:16;20922:25;;20973:3;20966:5;20963:14;20960:40;;;20980:18;;:::i;:::-;20960:40;21013:5;;;20751:277;;21137:2;21127:8;21124:16;21118:3;21112:4;21109:13;21105:36;21087:2;21077:8;21074:16;21069:2;21063:4;21060:12;21056:35;21040:111;21037:246;;;21193:8;21187:4;21183:19;21174:28;;21228:3;21221:5;21218:14;21215:40;;;21235:18;;:::i;:::-;21215:40;21268:5;;21037:246;21308:42;21346:3;21336:8;21330:4;21327:1;21308:42;:::i;:::-;21293:57;;;;21382:4;21377:3;21373:14;21366:5;21363:25;21360:51;;;21391:18;;:::i;:::-;21360:51;21440:4;21433:5;21429:16;21420:25;;20378:1073;;;;;;:::o;21457:281::-;21515:5;21539:23;21557:4;21539:23;:::i;:::-;21531:31;;21583:25;21599:8;21583:25;:::i;:::-;21571:37;;21627:104;21664:66;21654:8;21648:4;21627:104;:::i;:::-;21618:113;;21457:281;;;;:::o;21744:157::-;21884:9;21880:1;21872:6;21868:14;21861:33;21744:157;:::o;21907:365::-;22049:3;22070:66;22134:1;22129:3;22070:66;:::i;:::-;22063:73;;22145:93;22234:3;22145:93;:::i;:::-;22263:2;22258:3;22254:12;22247:19;;21907:365;;;:::o;22278:419::-;22444:4;22482:2;22471:9;22467:18;22459:26;;22531:9;22525:4;22521:20;22517:1;22506:9;22502:17;22495:47;22559:131;22685:4;22559:131;:::i;:::-;22551:139;;22278:419;;;:::o;22703:142::-;22753:9;22786:53;22804:34;22813:24;22831:5;22813:24;:::i;:::-;22804:34;:::i;:::-;22786:53;:::i;:::-;22773:66;;22703:142;;;:::o;22851:131::-;22938:37;22969:5;22938:37;:::i;:::-;22933:3;22926:50;22851:131;;:::o;22988:222::-;23081:4;23119:2;23108:9;23104:18;23096:26;;23132:71;23200:1;23189:9;23185:17;23176:6;23132:71;:::i;:::-;22988:222;;;;:::o;23216:191::-;23256:3;23275:20;23293:1;23275:20;:::i;:::-;23270:25;;23309:20;23327:1;23309:20;:::i;:::-;23304:25;;23352:1;23349;23345:9;23338:16;;23373:3;23370:1;23367:10;23364:36;;;23380:18;;:::i;:::-;23364:36;23216:191;;;;:::o;23413:176::-;23553:28;23549:1;23541:6;23537:14;23530:52;23413:176;:::o;23595:366::-;23737:3;23758:67;23822:2;23817:3;23758:67;:::i;:::-;23751:74;;23834:93;23923:3;23834:93;:::i;:::-;23952:2;23947:3;23943:12;23936:19;;23595:366;;;:::o;23967:419::-;24133:4;24171:2;24160:9;24156:18;24148:26;;24220:9;24214:4;24210:20;24206:1;24195:9;24191:17;24184:47;24248:131;24374:4;24248:131;:::i;:::-;24240:139;;23967:419;;;:::o;24392:143::-;24449:5;24480:6;24474:13;24465:22;;24496:33;24523:5;24496:33;:::i;:::-;24392:143;;;;:::o;24541:351::-;24611:6;24660:2;24648:9;24639:7;24635:23;24631:32;24628:119;;;24666:79;;:::i;:::-;24628:119;24786:1;24811:64;24867:7;24858:6;24847:9;24843:22;24811:64;:::i;:::-;24801:74;;24757:128;24541:351;;;;:::o;24898:224::-;25038:34;25034:1;25026:6;25022:14;25015:58;25107:7;25102:2;25094:6;25090:15;25083:32;24898:224;:::o;25128:366::-;25270:3;25291:67;25355:2;25350:3;25291:67;:::i;:::-;25284:74;;25367:93;25456:3;25367:93;:::i;:::-;25485:2;25480:3;25476:12;25469:19;;25128:366;;;:::o;25500:419::-;25666:4;25704:2;25693:9;25689:18;25681:26;;25753:9;25747:4;25743:20;25739:1;25728:9;25724:17;25717:47;25781:131;25907:4;25781:131;:::i;:::-;25773:139;;25500:419;;;:::o;25925:162::-;26065:14;26061:1;26053:6;26049:14;26042:38;25925:162;:::o;26093:366::-;26235:3;26256:67;26320:2;26315:3;26256:67;:::i;:::-;26249:74;;26332:93;26421:3;26332:93;:::i;:::-;26450:2;26445:3;26441:12;26434:19;;26093:366;;;:::o;26465:419::-;26631:4;26669:2;26658:9;26654:18;26646:26;;26718:9;26712:4;26708:20;26704:1;26693:9;26689:17;26682:47;26746:131;26872:4;26746:131;:::i;:::-;26738:139;;26465:419;;;:::o;26890:174::-;27030:26;27026:1;27018:6;27014:14;27007:50;26890:174;:::o;27070:366::-;27212:3;27233:67;27297:2;27292:3;27233:67;:::i;:::-;27226:74;;27309:93;27398:3;27309:93;:::i;:::-;27427:2;27422:3;27418:12;27411:19;;27070:366;;;:::o;27442:419::-;27608:4;27646:2;27635:9;27631:18;27623:26;;27695:9;27689:4;27685:20;27681:1;27670:9;27666:17;27659:47;27723:131;27849:4;27723:131;:::i;:::-;27715:139;;27442:419;;;:::o;27867:320::-;27982:4;28020:2;28009:9;28005:18;27997:26;;28033:71;28101:1;28090:9;28086:17;28077:6;28033:71;:::i;:::-;28114:66;28176:2;28165:9;28161:18;28152:6;28114:66;:::i;:::-;27867:320;;;;;:::o;28193:168::-;28333:20;28329:1;28321:6;28317:14;28310:44;28193:168;:::o;28367:366::-;28509:3;28530:67;28594:2;28589:3;28530:67;:::i;:::-;28523:74;;28606:93;28695:3;28606:93;:::i;:::-;28724:2;28719:3;28715:12;28708:19;;28367:366;;;:::o;28739:419::-;28905:4;28943:2;28932:9;28928:18;28920:26;;28992:9;28986:4;28982:20;28978:1;28967:9;28963:17;28956:47;29020:131;29146:4;29020:131;:::i;:::-;29012:139;;28739:419;;;:::o;29164:225::-;29304:34;29300:1;29292:6;29288:14;29281:58;29373:8;29368:2;29360:6;29356:15;29349:33;29164:225;:::o;29395:366::-;29537:3;29558:67;29622:2;29617:3;29558:67;:::i;:::-;29551:74;;29634:93;29723:3;29634:93;:::i;:::-;29752:2;29747:3;29743:12;29736:19;;29395:366;;;:::o;29767:419::-;29933:4;29971:2;29960:9;29956:18;29948:26;;30020:9;30014:4;30010:20;30006:1;29995:9;29991:17;29984:47;30048:131;30174:4;30048:131;:::i;:::-;30040:139;;29767:419;;;:::o;30192:223::-;30332:34;30328:1;30320:6;30316:14;30309:58;30401:6;30396:2;30388:6;30384:15;30377:31;30192:223;:::o;30421:366::-;30563:3;30584:67;30648:2;30643:3;30584:67;:::i;:::-;30577:74;;30660:93;30749:3;30660:93;:::i;:::-;30778:2;30773:3;30769:12;30762:19;;30421:366;;;:::o;30793:419::-;30959:4;30997:2;30986:9;30982:18;30974:26;;31046:9;31040:4;31036:20;31032:1;31021:9;31017:17;31010:47;31074:131;31200:4;31074:131;:::i;:::-;31066:139;;30793:419;;;:::o;31218:221::-;31358:34;31354:1;31346:6;31342:14;31335:58;31427:4;31422:2;31414:6;31410:15;31403:29;31218:221;:::o;31445:366::-;31587:3;31608:67;31672:2;31667:3;31608:67;:::i;:::-;31601:74;;31684:93;31773:3;31684:93;:::i;:::-;31802:2;31797:3;31793:12;31786:19;;31445:366;;;:::o;31817:419::-;31983:4;32021:2;32010:9;32006:18;31998:26;;32070:9;32064:4;32060:20;32056:1;32045:9;32041:17;32034:47;32098:131;32224:4;32098:131;:::i;:::-;32090:139;;31817:419;;;:::o;32242:179::-;32382:31;32378:1;32370:6;32366:14;32359:55;32242:179;:::o;32427:366::-;32569:3;32590:67;32654:2;32649:3;32590:67;:::i;:::-;32583:74;;32666:93;32755:3;32666:93;:::i;:::-;32784:2;32779:3;32775:12;32768:19;;32427:366;;;:::o;32799:419::-;32965:4;33003:2;32992:9;32988:18;32980:26;;33052:9;33046:4;33042:20;33038:1;33027:9;33023:17;33016:47;33080:131;33206:4;33080:131;:::i;:::-;33072:139;;32799:419;;;:::o;33224:168::-;33364:20;33360:1;33352:6;33348:14;33341:44;33224:168;:::o;33398:366::-;33540:3;33561:67;33625:2;33620:3;33561:67;:::i;:::-;33554:74;;33637:93;33726:3;33637:93;:::i;:::-;33755:2;33750:3;33746:12;33739:19;;33398:366;;;:::o;33770:419::-;33936:4;33974:2;33963:9;33959:18;33951:26;;34023:9;34017:4;34013:20;34009:1;33998:9;33994:17;33987:47;34051:131;34177:4;34051:131;:::i;:::-;34043:139;;33770:419;;;:::o;34195:194::-;34235:4;34255:20;34273:1;34255:20;:::i;:::-;34250:25;;34289:20;34307:1;34289:20;:::i;:::-;34284:25;;34333:1;34330;34326:9;34318:17;;34357:1;34351:4;34348:11;34345:37;;;34362:18;;:::i;:::-;34345:37;34195:194;;;;:::o;34395:332::-;34516:4;34554:2;34543:9;34539:18;34531:26;;34567:71;34635:1;34624:9;34620:17;34611:6;34567:71;:::i;:::-;34648:72;34716:2;34705:9;34701:18;34692:6;34648:72;:::i;:::-;34395:332;;;;;:::o;34733:157::-;34873:9;34869:1;34861:6;34857:14;34850:33;34733:157;:::o;34896:365::-;35038:3;35059:66;35123:1;35118:3;35059:66;:::i;:::-;35052:73;;35134:93;35223:3;35134:93;:::i;:::-;35252:2;35247:3;35243:12;35236:19;;34896:365;;;:::o;35267:419::-;35433:4;35471:2;35460:9;35456:18;35448:26;;35520:9;35514:4;35510:20;35506:1;35495:9;35491:17;35484:47;35548:131;35674:4;35548:131;:::i;:::-;35540:139;;35267:419;;;:::o;35692:160::-;35832:12;35828:1;35820:6;35816:14;35809:36;35692:160;:::o;35858:366::-;36000:3;36021:67;36085:2;36080:3;36021:67;:::i;:::-;36014:74;;36097:93;36186:3;36097:93;:::i;:::-;36215:2;36210:3;36206:12;36199:19;;35858:366;;;:::o;36230:419::-;36396:4;36434:2;36423:9;36419:18;36411:26;;36483:9;36477:4;36473:20;36469:1;36458:9;36454:17;36447:47;36511:131;36637:4;36511:131;:::i;:::-;36503:139;;36230:419;;;:::o;36655:158::-;36795:10;36791:1;36783:6;36779:14;36772:34;36655:158;:::o;36819:365::-;36961:3;36982:66;37046:1;37041:3;36982:66;:::i;:::-;36975:73;;37057:93;37146:3;37057:93;:::i;:::-;37175:2;37170:3;37166:12;37159:19;;36819:365;;;:::o;37190:419::-;37356:4;37394:2;37383:9;37379:18;37371:26;;37443:9;37437:4;37433:20;37429:1;37418:9;37414:17;37407:47;37471:131;37597:4;37471:131;:::i;:::-;37463:139;;37190:419;;;:::o;37615:279::-;37655:7;37678:20;37696:1;37678:20;:::i;:::-;37673:25;;37712:20;37730:1;37712:20;:::i;:::-;37707:25;;37767:1;37764;37760:9;37789:30;37807:11;37789:30;:::i;:::-;37778:41;;37851:11;37842:7;37839:24;37829:58;;37867:18;;:::i;:::-;37829:58;37663:231;37615:279;;;;:::o;37900:185::-;37940:1;37957:20;37975:1;37957:20;:::i;:::-;37952:25;;37991:20;38009:1;37991:20;:::i;:::-;37986:25;;38030:1;38020:35;;38035:18;;:::i;:::-;38020:35;38077:1;38074;38070:9;38065:14;;37900:185;;;;:::o;38091:209::-;38130:3;38149:19;38166:1;38149:19;:::i;:::-;38144:24;;38182:19;38199:1;38182:19;:::i;:::-;38177:24;;38224:1;38221;38217:9;38210:16;;38247:22;38242:3;38239:31;38236:57;;;38273:18;;:::i;:::-;38236:57;38091:209;;;;:::o;38306:224::-;38446:34;38442:1;38434:6;38430:14;38423:58;38515:7;38510:2;38502:6;38498:15;38491:32;38306:224;:::o;38536:366::-;38678:3;38699:67;38763:2;38758:3;38699:67;:::i;:::-;38692:74;;38775:93;38864:3;38775:93;:::i;:::-;38893:2;38888:3;38884:12;38877:19;;38536:366;;;:::o;38908:419::-;39074:4;39112:2;39101:9;39097:18;39089:26;;39161:9;39155:4;39151:20;39147:1;39136:9;39132:17;39125:47;39189:131;39315:4;39189:131;:::i;:::-;39181:139;;38908:419;;;:::o;39333:222::-;39473:34;39469:1;39461:6;39457:14;39450:58;39542:5;39537:2;39529:6;39525:15;39518:30;39333:222;:::o;39561:366::-;39703:3;39724:67;39788:2;39783:3;39724:67;:::i;:::-;39717:74;;39800:93;39889:3;39800:93;:::i;:::-;39918:2;39913:3;39909:12;39902:19;;39561:366;;;:::o;39933:419::-;40099:4;40137:2;40126:9;40122:18;40114:26;;40186:9;40180:4;40176:20;40172:1;40161:9;40157:17;40150:47;40214:131;40340:4;40214:131;:::i;:::-;40206:139;;39933:419;;;:::o;40358:225::-;40498:34;40494:1;40486:6;40482:14;40475:58;40567:8;40562:2;40554:6;40550:15;40543:33;40358:225;:::o;40589:366::-;40731:3;40752:67;40816:2;40811:3;40752:67;:::i;:::-;40745:74;;40828:93;40917:3;40828:93;:::i;:::-;40946:2;40941:3;40937:12;40930:19;;40589:366;;;:::o;40961:419::-;41127:4;41165:2;41154:9;41150:18;41142:26;;41214:9;41208:4;41204:20;41200:1;41189:9;41185:17;41178:47;41242:131;41368:4;41242:131;:::i;:::-;41234:139;;40961:419;;;:::o;41386:137::-;41440:5;41471:6;41465:13;41456:22;;41487:30;41511:5;41487:30;:::i;:::-;41386:137;;;;:::o;41529:345::-;41596:6;41645:2;41633:9;41624:7;41620:23;41616:32;41613:119;;;41651:79;;:::i;:::-;41613:119;41771:1;41796:61;41849:7;41840:6;41829:9;41825:22;41796:61;:::i;:::-;41786:71;;41742:125;41529:345;;;;:::o;41880:229::-;42020:34;42016:1;42008:6;42004:14;41997:58;42089:12;42084:2;42076:6;42072:15;42065:37;41880:229;:::o;42115:366::-;42257:3;42278:67;42342:2;42337:3;42278:67;:::i;:::-;42271:74;;42354:93;42443:3;42354:93;:::i;:::-;42472:2;42467:3;42463:12;42456:19;;42115:366;;;:::o;42487:419::-;42653:4;42691:2;42680:9;42676:18;42668:26;;42740:9;42734:4;42730:20;42726:1;42715:9;42711:17;42704:47;42768:131;42894:4;42768:131;:::i;:::-;42760:139;;42487:419;;;:::o;42912:147::-;43013:11;43050:3;43035:18;;42912:147;;;;:::o;43065:114::-;;:::o;43185:398::-;43344:3;43365:83;43446:1;43441:3;43365:83;:::i;:::-;43358:90;;43457:93;43546:3;43457:93;:::i;:::-;43575:1;43570:3;43566:11;43559:18;;43185:398;;;:::o;43589:379::-;43773:3;43795:147;43938:3;43795:147;:::i;:::-;43788:154;;43959:3;43952:10;;43589:379;;;:::o;43974:180::-;44022:77;44019:1;44012:88;44119:4;44116:1;44109:15;44143:4;44140:1;44133:15;44160:180;44208:77;44205:1;44198:88;44305:4;44302:1;44295:15;44329:4;44326:1;44319:15;44346:85;44391:7;44420:5;44409:16;;44346:85;;;:::o;44437:158::-;44495:9;44528:61;44546:42;44555:32;44581:5;44555:32;:::i;:::-;44546:42;:::i;:::-;44528:61;:::i;:::-;44515:74;;44437:158;;;:::o;44601:147::-;44696:45;44735:5;44696:45;:::i;:::-;44691:3;44684:58;44601:147;;:::o;44754:114::-;44821:6;44855:5;44849:12;44839:22;;44754:114;;;:::o;44874:184::-;44973:11;45007:6;45002:3;44995:19;45047:4;45042:3;45038:14;45023:29;;44874:184;;;;:::o;45064:132::-;45131:4;45154:3;45146:11;;45184:4;45179:3;45175:14;45167:22;;45064:132;;;:::o;45202:108::-;45279:24;45297:5;45279:24;:::i;:::-;45274:3;45267:37;45202:108;;:::o;45316:179::-;45385:10;45406:46;45448:3;45440:6;45406:46;:::i;:::-;45484:4;45479:3;45475:14;45461:28;;45316:179;;;;:::o;45501:113::-;45571:4;45603;45598:3;45594:14;45586:22;;45501:113;;;:::o;45650:732::-;45769:3;45798:54;45846:5;45798:54;:::i;:::-;45868:86;45947:6;45942:3;45868:86;:::i;:::-;45861:93;;45978:56;46028:5;45978:56;:::i;:::-;46057:7;46088:1;46073:284;46098:6;46095:1;46092:13;46073:284;;;46174:6;46168:13;46201:63;46260:3;46245:13;46201:63;:::i;:::-;46194:70;;46287:60;46340:6;46287:60;:::i;:::-;46277:70;;46133:224;46120:1;46117;46113:9;46108:14;;46073:284;;;46077:14;46373:3;46366:10;;45774:608;;;45650:732;;;;:::o;46388:831::-;46651:4;46689:3;46678:9;46674:19;46666:27;;46703:71;46771:1;46760:9;46756:17;46747:6;46703:71;:::i;:::-;46784:80;46860:2;46849:9;46845:18;46836:6;46784:80;:::i;:::-;46911:9;46905:4;46901:20;46896:2;46885:9;46881:18;46874:48;46939:108;47042:4;47033:6;46939:108;:::i;:::-;46931:116;;47057:72;47125:2;47114:9;47110:18;47101:6;47057:72;:::i;:::-;47139:73;47207:3;47196:9;47192:19;47183:6;47139:73;:::i;:::-;46388:831;;;;;;;;:::o;47225:225::-;47365:34;47361:1;47353:6;47349:14;47342:58;47434:8;47429:2;47421:6;47417:15;47410:33;47225:225;:::o;47456:366::-;47598:3;47619:67;47683:2;47678:3;47619:67;:::i;:::-;47612:74;;47695:93;47784:3;47695:93;:::i;:::-;47813:2;47808:3;47804:12;47797:19;;47456:366;;;:::o;47828:419::-;47994:4;48032:2;48021:9;48017:18;48009:26;;48081:9;48075:4;48071:20;48067:1;48056:9;48052:17;48045:47;48109:131;48235:4;48109:131;:::i;:::-;48101:139;;47828:419;;;:::o;48253:98::-;48304:6;48338:5;48332:12;48322:22;;48253:98;;;:::o;48357:386::-;48461:3;48489:38;48521:5;48489:38;:::i;:::-;48543:88;48624:6;48619:3;48543:88;:::i;:::-;48536:95;;48640:65;48698:6;48693:3;48686:4;48679:5;48675:16;48640:65;:::i;:::-;48730:6;48725:3;48721:16;48714:23;;48465:278;48357:386;;;;:::o;48749:271::-;48879:3;48901:93;48990:3;48981:6;48901:93;:::i;:::-;48894:100;;49011:3;49004:10;;48749:271;;;;:::o;49026:179::-;49166:31;49162:1;49154:6;49150:14;49143:55;49026:179;:::o;49211:366::-;49353:3;49374:67;49438:2;49433:3;49374:67;:::i;:::-;49367:74;;49450:93;49539:3;49450:93;:::i;:::-;49568:2;49563:3;49559:12;49552:19;;49211:366;;;:::o;49583:419::-;49749:4;49787:2;49776:9;49772:18;49764:26;;49836:9;49830:4;49826:20;49822:1;49811:9;49807:17;49800:47;49864:131;49990:4;49864:131;:::i;:::-;49856:139;;49583:419;;;:::o

Swarm Source

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