ETH Price: $2,461.17 (+0.38%)

Riggers (RIG)
 

Overview

TokenID

790

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Riggers

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-09
*/

// SPDX_License_Identifier: Unlicensed


// The first time you see an ERC404 contract...

// (⌐■_■)
// ( •_•)>⌐■-■
// (•_•)

// But the second time...

// (•_•)
// ( •_•)>⌐■-■
// (⌐■_■)


pragma solidity ^0.8.18;


/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Muldiv operation overflow.
     */
    error MathOverflowedMulDiv();

    enum Rounding {
        Floor, // Toward negative infinity
        Ceil, // Toward positive infinity
        Trunc, // Toward zero
        Expand // Away from zero
    }

    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds towards infinity instead
     * of rounding towards zero.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b == 0) {
            // Guarantee the same behavior as in a regular Solidity division.
            return a / b;
        }

        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or
     * denominator == 0.
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by
     * Uniswap Labs also under MIT license.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0 = x * y; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            if (denominator <= prod1) {
                revert MathOverflowedMulDiv();
            }

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.
            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.

            uint256 twos = denominator & (0 - denominator);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also
            // works in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded
     * towards zero.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 2 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 10 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 256 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
        }
    }

    /**
     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.
     */
    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
        return uint8(rounding) % 2 == 1;
    }
}


/**
 * @dev Standard signed math utilities missing in the Solidity language.
 */
library SignedMath {
    /**
     * @dev Returns the largest of two signed numbers.
     */
    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two signed numbers.
     */
    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two signed numbers without overflow.
     * The result is rounded towards zero.
     */
    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    /**
     * @dev Returns the absolute unsigned value of a signed value.
     */
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // must be unchecked in order to support `n = type(int256).min`
            return uint256(n >= 0 ? n : -n);
        }
    }
}


/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;

    /**
     * @dev The `value` string doesn't fit in the specified `length`.
     */
    error StringsInsufficientHexLength(uint256 value, uint256 length);

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `int256` to its ASCII `string` decimal representation.
     */
    function toStringSigned(int256 value) internal pure returns (string memory) {
        return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        uint256 localValue = value;
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = HEX_DIGITS[localValue & 0xf];
            localValue >>= 4;
        }
        if (localValue != 0) {
            revert StringsInsufficientHexLength(value, length);
        }
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal
     * representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
    }

    /**
     * @dev Returns true if the two strings are equal.
     */
    function equal(string memory a, string memory b) internal pure returns (bool) {
        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
    }
}


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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


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

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

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


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

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


/// @dev Custom Ownable implementation.
///
/// @author Cloned from Pandora dev team (https://etherscan.io/address/0x9E9FbDE7C7a83c43913BddC8779158F1368F0413#code).
///
/// @dev No changes made.
abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    error Unauthorized();
    error InvalidOwner();

    address public owner;

    modifier onlyOwner() virtual {
        if (msg.sender != owner) revert Unauthorized();

        _;
    }

    constructor(address _owner) {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}


/// @dev Custom Ownable implementation.
///
/// @author Cloned from Pandora dev team (https://etherscan.io/address/0x9E9FbDE7C7a83c43913BddC8779158F1368F0413#code).
///
/// @dev No changes made.
abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}


/// @notice ERC404
///         A gas-efficient, mixed ERC20 / ERC721 implementation
///         with native liquidity and fractionalization.
///
///         This is an experimental standard designed to integrate
///         with pre-existing ERC20 / ERC721 support as smoothly as
///         possible.
///
/// @dev    In order to support full functionality of ERC20 and ERC721
///         supply assumptions are made that slightly constraint usage.
///         Ensure decimals are sufficiently large (standard 18 recommended)
///         as ids are effectively encoded in the lowest range of amounts.
///
///         NFTs are spent on ERC20 functions in a FILO queue, this is by
///         design.
///
/// @author Forked from Pandora dev team (https://etherscan.io/address/0x9E9FbDE7C7a83c43913BddC8779158F1368F0413#code).
/// @author Prospector Howie 🛢️
///         Telegram: OilRigSheikh
///
/// @dev Changelog:
/// @dev   - add tax
/// @dev   - add pause
/// @dev   - function visibility
/// @dev   - whitespace
/// @dev   - comments
/// @dev   - typos
///
/// @custom:security-contact Telegram: https://t.me/OilRigSheikh
abstract contract ERC404 is Ownable {


    ////
    //// STATE
    ////


    // Metadata

    /// Token name.
    string public name;

    /// Token symbol.
    string public symbol;

    /// Decimals for fractional representation.
    uint8 public immutable decimals;

    /// Total supply in fractionalized representation.
    uint256 public immutable totalSupply;

    /// Current mint counter, monotonically increasing to ensure accurate ownership.
    uint256 public minted;

    /// Contracts for whitelist and tax.
    IUniswapV2Router02 public router;
    address public pair;

    /// Taxed addresses.
    mapping(address to => bool taxed) public isTaxed;
    /// Tax rate.
    uint256 public taxRate;

    /// Pause transfers.
    bool public paused;

    // Mappings

    /// Balance of user in fractional representation.
    mapping(address => uint256) public balanceOf;

    /// Allowance of user in fractional representation.
    mapping(address => mapping(address => uint256)) public allowance;

    /// Approval in native representation.
    mapping(uint256 => address) public getApproved;

    /// Approval for all in native representation.
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// Owner of id in native representation.
    mapping(uint256 => address) internal _ownerOf;

    /// Array of owned ids in native representation.
    mapping(address => uint256[]) internal _owned;

    /// Tracks indices for the _owned mapping.
    mapping(uint256 => uint256) internal _ownedIndex;

    /// Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc).
    mapping(address => bool) public whitelist;

    // Events.

    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );
    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors.

    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();


    ////
    //// INIT
    ////


    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    )
    Ownable(_owner)
    {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** decimals);

        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Ethereum Mainnet Uniswap V2 router.
        // router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); // BSC Testnet Pancakeswap V2 router.
        pair = IUniswapV2Factory(router.factory()).createPair(
            address(this),
            router.WETH()
        );

        taxRate = 25;

        allowance[address(this)][address(router)] = type(uint256).max;

        whitelist[msg.sender] = true;
        whitelist[address(router)] = true;
        whitelist[pair] = true;

        isTaxed[address(router)] = true;
        isTaxed[pair] = true;
    }


    ////
    //// ADMIN
    ////


    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(
        address target,
        bool state
    )
        external
        onlyOwner
    {
        whitelist[target] = state;
    }

    function setTax(
        uint256 _taxRate
    )
        external
        onlyOwner
    {
        taxRate = _taxRate;
    }

    function setTaxed(
        address[] memory accounts,
        bool[] memory _isTaxed
    )
        external
        onlyOwner
    {
        require(accounts.length == _isTaxed.length, "Mismatch");

        for (uint256 i = 0; i < accounts.length; i++) {
            isTaxed[accounts[i]] = _isTaxed[i];
        }
    }


    ////
    //// ERC404
    ////


    /// @notice Function to find owner of a given native token
    function ownerOf(
        uint256 id
    )
        external
        view
        virtual
        returns (address owner)
    {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(
        uint256 id
    )
        external
        view
        virtual
        returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    )
        external
        virtual
        returns (bool)
    {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(
        address operator,
        bool approved
    )
        external
        virtual
    {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    )
        public
        virtual
    {
        if (paused) {
            require(
                msg.sender == owner,
                "Paused. Owner only."
            );
        }

        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

            if (to == address(0)) {
                revert InvalidRecipient();
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ) {
                revert Unauthorized();
            }

            balanceOf[from] -= _getUnit();

            unchecked {
                balanceOf[to] += _getUnit();
            }

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    )
        external
        virtual
        returns (bool)
    {
        if (paused) {
            require(
                msg.sender == owner,
                "Paused. Whitelist only."
            );
        }

        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    )
        external
        virtual
    {
        if (paused) {
            require(
                msg.sender == owner,
                "Paused. Whitelist only."
            );
        }

        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    )
        public
        virtual
    {
        if (paused) {
            require(
                msg.sender == owner,
                "Paused. Whitelist only."
            );
        }

        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    )
        internal
        returns (bool)
    {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;

        uint256 tax;
        if (
            (isTaxed[to] && !whitelist[from])
            || (isTaxed[from] && !whitelist[to])
        ) {
            tax = amount * taxRate / 100;
            unchecked {
                balanceOf[owner] += tax;
            }
            emit ERC20Transfer(from, owner, tax);
        }

        unchecked {
            balanceOf[to] += amount - tax;
        }

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
                (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
                (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit()
        internal
        view
        returns (uint256)
    {
        return 10 ** decimals;
    }

    function _mint(
        address to
    )
        internal
        virtual
    {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _safeSetSupply(
        address to,
        uint256 amount
    )
        external
        onlyOwner
    {
        for (uint256 i = 0; i < amount; i++) {
            if (to == address(0)) {
                revert InvalidRecipient();
            }

            unchecked {
                minted++;
            }

            uint256 id = minted;

            if (_ownerOf[id] != address(0)) {
                revert AlreadyExists();
            }

            _ownerOf[id] = to;
            _owned[to].push(id);
            _ownedIndex[id] = _owned[to].length - 1;

            emit Transfer(address(0), to, id);
        }
    }

    function _burn(
        address from
    )
        internal
        virtual
    {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    )
        internal
    {
        name = _name;
        symbol = _symbol;
    }
}


/// @title A fractionalized-liquidity contract for Riggers.
///
/// @notice Riggers
///             Telegram: https://t.me/riggersfinance
///             Twitter:  https://twitter.com/RiggersFinance
///             Web:      riggers.finance
///
/// @author Forked from Pandora dev team (https://etherscan.io/address/0x9E9FbDE7C7a83c43913BddC8779158F1368F0413#code).
/// @author Prospector Howie 🛢️
///         Telegram: OilRigSheikh
///
/// @dev Changelog:
/// @dev   - add contractURI
/// @dev   - supply
/// @dev   - function visibility
/// @dev   - token names
/// @dev   - uri locations
/// @dev   - whitespace
/// @dev   - comments
///
/// @custom:security-contact Telegram: https://t.me/OilRigSheikh
contract Riggers is ERC404 {


    ////
    //// STATE
    ////


    string public dataURI;
    string public baseTokenURI;
    string private _contractURI;
    event ContractURIUpdated(string prevURI, string newURI);

    ////
    //// INIT
    ////


    constructor(
        address _owner,
        address presale
    )
    ERC404(
        "Riggers",
        "RIG",
        18,
        1000,
        _owner
    ) {
        uint256 balanceTotal = 1000 * 10 ** 18;
        balanceOf[_owner] = balanceTotal * 85 / 100;
        balanceOf[presale] = balanceTotal - balanceOf[_owner];

        dataURI = "https://riggers.s3.eu-central-1.amazonaws.com/";
    }


    ////
    //// ADMIN
    ////


    function setNameSymbol(
        string memory _name,
        string memory _symbol
    )
        external
        onlyOwner
    {
        _setNameSymbol(_name, _symbol);
    }

    function setDataURI(
        string memory _dataURI
    )
        external
        onlyOwner
    {
        dataURI = _dataURI;
    }

    function setTokenURI(
        string memory _tokenURI
    )
        external
        onlyOwner
    {
        baseTokenURI = _tokenURI;
    }

    function setContractURI(
        string memory contractURI_
    )
        external
        onlyOwner
    {
        _contractURI = contractURI_;

        emit ContractURIUpdated(
            _contractURI,
            contractURI_
        );
    }

    /// Returns relevant token data URI.
    ///
    /// @dev Called by OpenSea.
    ///
    /// @param id of token.
    ///
    /// @return string of URI.
    function tokenURI(
        uint256 id
    )
        external
        view
        override
        returns (string memory)
    {
        if (bytes(baseTokenURI).length > 0) {
            return string.concat(baseTokenURI, Strings.toString(id));
        } else {
            uint8 seed = uint8(bytes1(keccak256(abi.encodePacked(id))));
            string memory image;
            string memory rigName;

            if (seed <= 100) {
                image = "1.gif";
                rigName = "AquaForge Frontier";
            } else if (seed <= 160) {
                image = "2.gif";
                rigName = "HydroXtract 3000";
            } else if (seed <= 210) {
                image = "3.gif";
                rigName = "BlueWave Dominion";
            } else if (seed <= 240) {
                image = "4.gif";
                rigName = "Seafire Nexus";
            } else if (seed <= 250) {
                image = "5.gif";
                rigName = "DeepStar Infinity";
            }

            string memory jsonPreImage = string.concat(
                string.concat(
                    string.concat('{"name": "Riggers #', Strings.toString(id)),
                    '","description":"A collection of 1,000 Oil Rigs enabled by ERC404, an experimental token standard.","external_url":"https://riggers.finance","image":"'
                ),
                string.concat(dataURI, image)
            );
            string memory jsonPostImage = string.concat(
                '","attributes":[{"trait_type":"RigName","value":"',
                rigName
            );
            string memory jsonPostTraits = '"}]}';

            return
                string.concat(
                    "data:application/json;utf8,",
                    string.concat(
                        string.concat(jsonPreImage, jsonPostImage),
                        jsonPostTraits
                    )
                );
        }
    }

    function contractURI()
        public
        view
        returns (string memory)
    {
        return _contractURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"prevURI","type":"string"},{"indexed":false,"internalType":"string","name":"newURI","type":"string"}],"name":"ContractURIUpdated","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":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_safeSetSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"isTaxed","outputs":[{"internalType":"bool","name":"taxed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractURI_","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_dataURI","type":"string"}],"name":"setDataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxRate","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool[]","name":"_isTaxed","type":"bool[]"}],"name":"setTaxed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60c06040523480156200001157600080fd5b50604051620060c1380380620060c18339818101604052810190620000379190620008ee565b6040518060400160405280600781526020017f52696767657273000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f524947000000000000000000000000000000000000000000000000000000000081525060126103e88580600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000111576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508460019081620001be919062000baf565b508360029081620001d0919062000baf565b508260ff1660808160ff1681525050608051600a620001f0919062000e26565b82620001fd919062000e77565b60a08181525050737a250d5630b4cf539739df2c5dacb4c659f2488d600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed919062000ec2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039d919062000ec2565b6040518363ffffffff1660e01b8152600401620003bc92919062000f05565b6020604051808303816000875af1158015620003dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000402919062000ec2565b600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060196007819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050506000683635c9adc5dea000009050606460558262000771919062000e77565b6200077d919062000f61565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816200080d919062000f99565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506040518060600160405280602e815260200162006093602e9139601190816200087a919062000baf565b5050505062000fd4565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008b68262000889565b9050919050565b620008c881620008a9565b8114620008d457600080fd5b50565b600081519050620008e881620008bd565b92915050565b6000806040838503121562000908576200090762000884565b5b60006200091885828601620008d7565b92505060206200092b85828601620008d7565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009b757607f821691505b602082108103620009cd57620009cc6200096f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009f8565b62000a438683620009f8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a9062000a8a62000a848462000a5b565b62000a65565b62000a5b565b9050919050565b6000819050919050565b62000aac8362000a6f565b62000ac462000abb8262000a97565b84845462000a05565b825550505050565b600090565b62000adb62000acc565b62000ae881848462000aa1565b505050565b5b8181101562000b105762000b0460008262000ad1565b60018101905062000aee565b5050565b601f82111562000b5f5762000b2981620009d3565b62000b3484620009e8565b8101602085101562000b44578190505b62000b5c62000b5385620009e8565b83018262000aed565b50505b505050565b600082821c905092915050565b600062000b846000198460080262000b64565b1980831691505092915050565b600062000b9f838362000b71565b9150826002028217905092915050565b62000bba8262000935565b67ffffffffffffffff81111562000bd65762000bd562000940565b5b62000be282546200099e565b62000bef82828562000b14565b600060209050601f83116001811462000c27576000841562000c12578287015190505b62000c1e858262000b91565b86555062000c8e565b601f19841662000c3786620009d3565b60005b8281101562000c615784890151825560018201915060208501945060208101905062000c3a565b8683101562000c81578489015162000c7d601f89168262000b71565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d245780860481111562000cfc5762000cfb62000c96565b5b600185161562000d0c5780820291505b808102905062000d1c8562000cc5565b945062000cdc565b94509492505050565b60008262000d3f576001905062000e12565b8162000d4f576000905062000e12565b816001811462000d68576002811462000d735762000da9565b600191505062000e12565b60ff84111562000d885762000d8762000c96565b5b8360020a91508482111562000da25762000da162000c96565b5b5062000e12565b5060208310610133831016604e8410600b841016171562000de35782820a90508381111562000ddd5762000ddc62000c96565b5b62000e12565b62000df2848484600162000cd2565b9250905081840481111562000e0c5762000e0b62000c96565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e338262000a5b565b915062000e408362000e19565b925062000e6f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d2d565b905092915050565b600062000e848262000a5b565b915062000e918362000a5b565b925082820262000ea18162000a5b565b9150828204841483151762000ebb5762000eba62000c96565b5b5092915050565b60006020828403121562000edb5762000eda62000884565b5b600062000eeb84828501620008d7565b91505092915050565b62000eff81620008a9565b82525050565b600060408201905062000f1c600083018562000ef4565b62000f2b602083018462000ef4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f6e8262000a5b565b915062000f7b8362000a5b565b92508262000f8e5762000f8d62000f32565b5b828204905092915050565b600062000fa68262000a5b565b915062000fb38362000a5b565b925082820390508181111562000fce5762000fcd62000c96565b5b92915050565b60805160a051615092620010016000396000610ac401526000818161160d0152612d2701526150926000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c8063938e3d7b11610130578063c5edadd2116100b8578063e8a3d4851161007c578063e8a3d48514610662578063e985e9c514610680578063f28ca1dd146106b0578063f2fde38b146106ce578063f887ea40146106ea57610227565b8063c5edadd2146105ac578063c87b56dd146105c8578063d547cfb7146105f8578063dd62ed3e14610616578063e0df5b6f1461064657610227565b80639b19251a116100ff5780639b19251a146104f6578063a22cb46514610526578063a8aa1b3114610542578063a9059cbb14610560578063b88d4fde1461059057610227565b8063938e3d7b1461047057806395d89b411461048c578063966deac9146104aa5780639a3b50f9146104c657610227565b806342842e0e116101b35780635c975abb116101825780635c975abb146103b65780636352211e146103d457806370a0823114610404578063771a3a1d146104345780638da5cb5b1461045257610227565b806342842e0e146103445780634f02c42014610360578063504334c21461037e57806353d6fd591461039a57610227565b806318d217c3116101fa57806318d217c3146102c857806323b872dd146102e45780632b968958146103005780632e5bb6ff1461030a578063313ce5671461032657610227565b806306fdde031461022c578063081812fc1461024a578063095ea7b31461027a57806318160ddd146102aa575b600080fd5b610234610708565b6040516102419190613af0565b60405180910390f35b610264600480360381019061025f9190613b5c565b610796565b6040516102719190613bca565b60405180910390f35b610294600480360381019061028f9190613c11565b6107c9565b6040516102a19190613c6c565b60405180910390f35b6102b2610ac2565b6040516102bf9190613c96565b60405180910390f35b6102e260048036038101906102dd9190613de6565b610ae6565b005b6102fe60048036038101906102f99190613e2f565b610b7e565b005b610308611459565b005b610324600480360381019061031f9190613b5c565b61157c565b005b61032e61160b565b60405161033b9190613e9e565b60405180910390f35b61035e60048036038101906103599190613e2f565b61162f565b005b610368611806565b6040516103759190613c96565b60405180910390f35b61039860048036038101906103939190613eb9565b61180c565b005b6103b460048036038101906103af9190613f5d565b61189f565b005b6103be61197f565b6040516103cb9190613c6c565b60405180910390f35b6103ee60048036038101906103e99190613b5c565b611992565b6040516103fb9190613bca565b60405180910390f35b61041e60048036038101906104199190613f9d565b611a35565b60405161042b9190613c96565b60405180910390f35b61043c611a4d565b6040516104499190613c96565b60405180910390f35b61045a611a53565b6040516104679190613bca565b60405180910390f35b61048a60048036038101906104859190613de6565b611a77565b005b610494611b49565b6040516104a19190613af0565b60405180910390f35b6104c460048036038101906104bf9190614155565b611bd7565b005b6104e060048036038101906104db9190613f9d565b611d4f565b6040516104ed9190613c6c565b60405180910390f35b610510600480360381019061050b9190613f9d565b611d6f565b60405161051d9190613c6c565b60405180910390f35b610540600480360381019061053b9190613f5d565b611d8f565b005b61054a611e8c565b6040516105579190613bca565b60405180910390f35b61057a60048036038101906105759190613c11565b611eb2565b6040516105879190613c6c565b60405180910390f35b6105aa60048036038101906105a59190614228565b611f6b565b005b6105c660048036038101906105c19190613c11565b612148565b005b6105e260048036038101906105dd9190613b5c565b612483565b6040516105ef9190613af0565b60405180910390f35b6106006128db565b60405161060d9190613af0565b60405180910390f35b610630600480360381019061062b91906142b0565b612969565b60405161063d9190613c96565b60405180910390f35b610660600480360381019061065b9190613de6565b61298e565b005b61066a612a26565b6040516106779190613af0565b60405180910390f35b61069a600480360381019061069591906142b0565b612ab8565b6040516106a79190613c6c565b60405180910390f35b6106b8612ae7565b6040516106c59190613af0565b60405180910390f35b6106e860048036038101906106e39190613f9d565b612b75565b005b6106f2612cfd565b6040516106ff919061434f565b60405180910390f35b6001805461071590614399565b80601f016020809104026020016040519081016040528092919081815260200182805461074190614399565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b505050505081565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060035482111580156107dd5750600082115b156109d1576000600d600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156108dd5750600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610914576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600b600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516109c39190613c96565b60405180910390a350610ab8565b81600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610aaf9190613c96565b60405180910390a35b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060119081610b7a919061456c565b5050565b600860009054906101000a900460ff1615610c225760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061468a565b60405180910390fd5b5b600354811161131157600d600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610cc3576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d29576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610dec5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610e575750600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610e8e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e96612d23565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ee491906146d9565b92505081905550610ef3612d23565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061105791906146d9565b815481106110685761106761470d565b5b9060005260206000200154905080600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600f600085815260200190815260200160002054815481106110da576110d961470d565b5b9060005260206000200181905550600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806111375761113661473c565b5b60019003818190600052602060002001600090559055600f600083815260200190815260200160002054600f600083815260200190815260200160002081905550600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061122d91906146d9565b600f600084815260200190815260200160002081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876112f6612d23565b6040516113039190613c96565b60405180910390a350611454565b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114465781816113c591906146d9565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611451848484612d57565b50505b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114de576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611601576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060078190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600860009054906101000a900460ff16156116d35760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c9906147b7565b60405180910390fd5b5b6116de838383610b7e565b60008273ffffffffffffffffffffffffffffffffffffffff163b141580156117ca575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016117659392919061480e565b6020604051808303816000875af1158015611784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a891906148b0565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611801576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60035481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611891576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61189b8282613329565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611924576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b6000600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a30576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60096020528060005260406000206000915090505481565b60075481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611afc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060139081611b0b919061456c565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a16601382604051611b3e929190614961565b60405180910390a150565b60028054611b5690614399565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8290614399565b8015611bcf5780601f10611ba457610100808354040283529160200191611bcf565b820191906000526020600020905b815481529060010190602001808311611bb257829003601f168201915b505050505081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c5c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051825114611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c97906149e4565b60405180910390fd5b60005b8251811015611d4a57818181518110611cbf57611cbe61470d565b5b602002602001015160066000858481518110611cde57611cdd61470d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d4290614a04565b915050611ca3565b505050565b60066020528060005260406000206000915054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e809190613c6c565b60405180910390a35050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900460ff1615611f585760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e906147b7565b60405180910390fd5b5b611f63338484612d57565b905092915050565b600860009054906101000a900460ff161561200f5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461200e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612005906147b7565b60405180910390fd5b5b61201a858585610b7e565b60008473ffffffffffffffffffffffffffffffffffffffff163b1415801561210a575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016120a5959493929190614a79565b6020604051808303816000875af11580156120c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e891906148b0565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15612141576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561247e57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361223e576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036000815480929190600101919050555060006003549050600073ffffffffffffffffffffffffffffffffffffffff16600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f0576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506123f791906146d9565b600f600083815260200190815260200160002081905550808473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450808061247690614a04565b9150506121d0565b505050565b606060006012805461249490614399565b905011156124ce5760126124a78361334d565b6040516020016124b8929190614b86565b60405160208183030381529060405290506128d6565b6000826040516020016124e19190614bcb565b6040516020818303038152906040528051906020012060f81c905060608060648360ff161161257f576040518060400160405280600581526020017f312e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280601281526020017f41717561466f7267652046726f6e746965720000000000000000000000000000815250905061277f565b60a08360ff16116125ff576040518060400160405280600581526020017f322e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280601081526020017f487964726f587472616374203330303000000000000000000000000000000000815250905061277e565b60d28360ff161161267f576040518060400160405280600581526020017f332e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280601181526020017f426c75655761766520446f6d696e696f6e000000000000000000000000000000815250905061277d565b60f08360ff16116126ff576040518060400160405280600581526020017f342e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600d81526020017f53656166697265204e6578757300000000000000000000000000000000000000815250905061277c565b60fa8360ff161161277b576040518060400160405280600581526020017f352e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280601181526020017f446565705374617220496e66696e69747900000000000000000000000000000081525090505b5b5b5b5b600061278a8661334d565b60405160200161279a9190614c0c565b6040516020818303038152906040526040516020016127b99190614d16565b6040516020818303038152906040526011846040516020016127dc929190614b86565b6040516020818303038152906040526040516020016127fc929190614d38565b60405160208183030381529060405290506000826040516020016128209190614dce565b604051602081830303815290604052905060006040518060400160405280600481526020017f227d5d7d000000000000000000000000000000000000000000000000000000008152509050828260405160200161287e929190614d38565b6040516020818303038152906040528160405160200161289f929190614d38565b6040516020818303038152906040526040516020016128be9190614e16565b60405160208183030381529060405296505050505050505b919050565b601280546128e890614399565b80601f016020809104026020016040519081016040528092919081815260200182805461291490614399565b80156129615780601f1061293657610100808354040283529160200191612961565b820191906000526020600020905b81548152906001019060200180831161294457829003601f168201915b505050505081565b600a602052816000526040600020602052806000526040600020600091509150505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a13576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060129081612a22919061456c565b5050565b606060138054612a3590614399565b80601f0160208091040260200160405190810160405280929190818152602001828054612a6190614399565b8015612aae5780601f10612a8357610100808354040283529160200191612aae565b820191906000526020600020905b815481529060010190602001808311612a9157829003601f168201915b5050505050905090565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60118054612af490614399565b80601f0160208091040260200160405190810160405280929190818152602001828054612b2090614399565b8015612b6d5780601f10612b4257610100808354040283529160200191612b6d565b820191906000526020600020905b815481529060010190602001808311612b5057829003601f168201915b505050505081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bfa576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c60576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f0000000000000000000000000000000000000000000000000000000000000000600a612d529190614f6f565b905090565b600080612d62612d23565b90506000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e3b91906146d9565b925050819055506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee75750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80612f915750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f905750601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156130a657606460075487612fa69190614fba565b612fb0919061502b565b905080600960008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878360405161309d9190613c96565b60405180910390a35b808603600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131d557600084600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613193919061502b565b858561319f919061502b565b6131a991906146d9565b905060005b818110156131d2576131bf8a61341b565b80806131ca90614a04565b9150506131ae565b50505b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132b55760008483613234919061502b565b85600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327f919061502b565b61328991906146d9565b905060005b818110156132b25761329f89613677565b80806132aa90614a04565b91505061328e565b50505b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487886040516133129190613c96565b60405180910390a360019450505050509392505050565b8160019081613338919061456c565b508060029081613348919061456c565b505050565b60606000600161335c8461390d565b01905060008167ffffffffffffffff81111561337b5761337a613cbb565b5b6040519080825280601f01601f1916602001820160405280156133ad5781602001600182028036833780820191505090505b509050600082602001820190505b600115613410578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161340457613403614ffc565b5b049450600085036133bb575b819350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613481576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061351191906146d9565b815481106135225761352161470d565b5b90600052602060002001549050600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061357e5761357d61473c565b5b60019003818190600052602060002001600090559055600f600082815260200190815260200160002060009055600d600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600b600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036136dd576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036000815480929190600101919050555060006003549050600073ffffffffffffffffffffffffffffffffffffffff16600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461378f576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061389691906146d9565b600f600083815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061396b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161396157613960614ffc565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106139a8576d04ee2d6d415b85acef8100000000838161399e5761399d614ffc565b5b0492506020810190505b662386f26fc1000083106139d757662386f26fc1000083816139cd576139cc614ffc565b5b0492506010810190505b6305f5e1008310613a00576305f5e10083816139f6576139f5614ffc565b5b0492506008810190505b6127108310613a25576127108381613a1b57613a1a614ffc565b5b0492506004810190505b60648310613a485760648381613a3e57613a3d614ffc565b5b0492506002810190505b600a8310613a57576001810190505b80915050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a9a578082015181840152602081019050613a7f565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ac282613a60565b613acc8185613a6b565b9350613adc818560208601613a7c565b613ae581613aa6565b840191505092915050565b60006020820190508181036000830152613b0a8184613ab7565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613b3981613b26565b8114613b4457600080fd5b50565b600081359050613b5681613b30565b92915050565b600060208284031215613b7257613b71613b1c565b5b6000613b8084828501613b47565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bb482613b89565b9050919050565b613bc481613ba9565b82525050565b6000602082019050613bdf6000830184613bbb565b92915050565b613bee81613ba9565b8114613bf957600080fd5b50565b600081359050613c0b81613be5565b92915050565b60008060408385031215613c2857613c27613b1c565b5b6000613c3685828601613bfc565b9250506020613c4785828601613b47565b9150509250929050565b60008115159050919050565b613c6681613c51565b82525050565b6000602082019050613c816000830184613c5d565b92915050565b613c9081613b26565b82525050565b6000602082019050613cab6000830184613c87565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613cf382613aa6565b810181811067ffffffffffffffff82111715613d1257613d11613cbb565b5b80604052505050565b6000613d25613b12565b9050613d318282613cea565b919050565b600067ffffffffffffffff821115613d5157613d50613cbb565b5b613d5a82613aa6565b9050602081019050919050565b82818337600083830152505050565b6000613d89613d8484613d36565b613d1b565b905082815260208101848484011115613da557613da4613cb6565b5b613db0848285613d67565b509392505050565b600082601f830112613dcd57613dcc613cb1565b5b8135613ddd848260208601613d76565b91505092915050565b600060208284031215613dfc57613dfb613b1c565b5b600082013567ffffffffffffffff811115613e1a57613e19613b21565b5b613e2684828501613db8565b91505092915050565b600080600060608486031215613e4857613e47613b1c565b5b6000613e5686828701613bfc565b9350506020613e6786828701613bfc565b9250506040613e7886828701613b47565b9150509250925092565b600060ff82169050919050565b613e9881613e82565b82525050565b6000602082019050613eb36000830184613e8f565b92915050565b60008060408385031215613ed057613ecf613b1c565b5b600083013567ffffffffffffffff811115613eee57613eed613b21565b5b613efa85828601613db8565b925050602083013567ffffffffffffffff811115613f1b57613f1a613b21565b5b613f2785828601613db8565b9150509250929050565b613f3a81613c51565b8114613f4557600080fd5b50565b600081359050613f5781613f31565b92915050565b60008060408385031215613f7457613f73613b1c565b5b6000613f8285828601613bfc565b9250506020613f9385828601613f48565b9150509250929050565b600060208284031215613fb357613fb2613b1c565b5b6000613fc184828501613bfc565b91505092915050565b600067ffffffffffffffff821115613fe557613fe4613cbb565b5b602082029050602081019050919050565b600080fd5b600061400e61400984613fca565b613d1b565b9050808382526020820190506020840283018581111561403157614030613ff6565b5b835b8181101561405a57806140468882613bfc565b845260208401935050602081019050614033565b5050509392505050565b600082601f83011261407957614078613cb1565b5b8135614089848260208601613ffb565b91505092915050565b600067ffffffffffffffff8211156140ad576140ac613cbb565b5b602082029050602081019050919050565b60006140d16140cc84614092565b613d1b565b905080838252602082019050602084028301858111156140f4576140f3613ff6565b5b835b8181101561411d57806141098882613f48565b8452602084019350506020810190506140f6565b5050509392505050565b600082601f83011261413c5761413b613cb1565b5b813561414c8482602086016140be565b91505092915050565b6000806040838503121561416c5761416b613b1c565b5b600083013567ffffffffffffffff81111561418a57614189613b21565b5b61419685828601614064565b925050602083013567ffffffffffffffff8111156141b7576141b6613b21565b5b6141c385828601614127565b9150509250929050565b600080fd5b60008083601f8401126141e8576141e7613cb1565b5b8235905067ffffffffffffffff811115614205576142046141cd565b5b60208301915083600182028301111561422157614220613ff6565b5b9250929050565b60008060008060006080868803121561424457614243613b1c565b5b600061425288828901613bfc565b955050602061426388828901613bfc565b945050604061427488828901613b47565b935050606086013567ffffffffffffffff81111561429557614294613b21565b5b6142a1888289016141d2565b92509250509295509295909350565b600080604083850312156142c7576142c6613b1c565b5b60006142d585828601613bfc565b92505060206142e685828601613bfc565b9150509250929050565b6000819050919050565b600061431561431061430b84613b89565b6142f0565b613b89565b9050919050565b6000614327826142fa565b9050919050565b60006143398261431c565b9050919050565b6143498161432e565b82525050565b60006020820190506143646000830184614340565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143b157607f821691505b6020821081036143c4576143c361436a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261442c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826143ef565b61443686836143ef565b95508019841693508086168417925050509392505050565b600061446961446461445f84613b26565b6142f0565b613b26565b9050919050565b6000819050919050565b6144838361444e565b61449761448f82614470565b8484546143fc565b825550505050565b600090565b6144ac61449f565b6144b781848461447a565b505050565b5b818110156144db576144d06000826144a4565b6001810190506144bd565b5050565b601f821115614520576144f1816143ca565b6144fa846143df565b81016020851015614509578190505b61451d614515856143df565b8301826144bc565b50505b505050565b600082821c905092915050565b600061454360001984600802614525565b1980831691505092915050565b600061455c8383614532565b9150826002028217905092915050565b61457582613a60565b67ffffffffffffffff81111561458e5761458d613cbb565b5b6145988254614399565b6145a38282856144df565b600060209050601f8311600181146145d657600084156145c4578287015190505b6145ce8582614550565b865550614636565b601f1984166145e4866143ca565b60005b8281101561460c578489015182556001820191506020850194506020810190506145e7565b868310156146295784890151614625601f891682614532565b8355505b6001600288020188555050505b505050505050565b7f5061757365642e204f776e6572206f6e6c792e00000000000000000000000000600082015250565b6000614674601383613a6b565b915061467f8261463e565b602082019050919050565b600060208201905081810360008301526146a381614667565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146e482613b26565b91506146ef83613b26565b9250828203905081811115614707576147066146aa565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f5061757365642e2057686974656c697374206f6e6c792e000000000000000000600082015250565b60006147a1601783613a6b565b91506147ac8261476b565b602082019050919050565b600060208201905081810360008301526147d081614794565b9050919050565b600082825260208201905092915050565b50565b60006147f86000836147d7565b9150614803826147e8565b600082019050919050565b60006080820190506148236000830186613bbb565b6148306020830185613bbb565b61483d6040830184613c87565b818103606083015261484e816147eb565b9050949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61488d81614858565b811461489857600080fd5b50565b6000815190506148aa81614884565b92915050565b6000602082840312156148c6576148c5613b1c565b5b60006148d48482850161489b565b91505092915050565b600081546148ea81614399565b6148f48186613a6b565b9450600182166000811461490f576001811461492557614958565b60ff198316865281151560200286019350614958565b61492e856143ca565b60005b8381101561495057815481890152600182019150602081019050614931565b808801955050505b50505092915050565b6000604082019050818103600083015261497b81856148dd565b9050818103602083015261498f8184613ab7565b90509392505050565b7f4d69736d61746368000000000000000000000000000000000000000000000000600082015250565b60006149ce600883613a6b565b91506149d982614998565b602082019050919050565b600060208201905081810360008301526149fd816149c1565b9050919050565b6000614a0f82613b26565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a4157614a406146aa565b5b600182019050919050565b6000614a5883856147d7565b9350614a65838584613d67565b614a6e83613aa6565b840190509392505050565b6000608082019050614a8e6000830188613bbb565b614a9b6020830187613bbb565b614aa86040830186613c87565b8181036060830152614abb818486614a4c565b90509695505050505050565b600081905092915050565b60008154614adf81614399565b614ae98186614ac7565b94506001821660008114614b045760018114614b1957614b4c565b60ff1983168652811515820286019350614b4c565b614b22856143ca565b60005b83811015614b4457815481890152600182019150602081019050614b25565b838801955050505b50505092915050565b6000614b6082613a60565b614b6a8185614ac7565b9350614b7a818560208601613a7c565b80840191505092915050565b6000614b928285614ad2565b9150614b9e8284614b55565b91508190509392505050565b6000819050919050565b614bc5614bc082613b26565b614baa565b82525050565b6000614bd78284614bb4565b60208201915081905092915050565b7f7b226e616d65223a202252696767657273202300000000000000000000000000815250565b6000614c1782614be6565b601382019150614c278284614b55565b915081905092915050565b7f222c226465736372697074696f6e223a224120636f6c6c656374696f6e206f6660008201527f20312c303030204f696c205269677320656e61626c656420627920455243343060208201527f342c20616e206578706572696d656e74616c20746f6b656e207374616e64617260408201527f642e222c2265787465726e616c5f75726c223a2268747470733a2f2f7269676760608201527f6572732e66696e616e6365222c22696d616765223a2200000000000000000000608082015250565b6000614d00609683614ac7565b9150614d0b82614c32565b609682019050919050565b6000614d228284614b55565b9150614d2d82614cf3565b915081905092915050565b6000614d448285614b55565b9150614d508284614b55565b91508190509392505050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a225260008201527f69674e616d65222c2276616c7565223a22000000000000000000000000000000602082015250565b6000614db8603183614ac7565b9150614dc382614d5c565b603182019050919050565b6000614dd982614dab565b9150614de58284614b55565b915081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c0000000000815250565b6000614e2182614df0565b601b82019150614e318284614b55565b915081905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614e9357808604811115614e6f57614e6e6146aa565b5b6001851615614e7e5780820291505b8081029050614e8c85614e3c565b9450614e53565b94509492505050565b600082614eac5760019050614f68565b81614eba5760009050614f68565b8160018114614ed05760028114614eda57614f09565b6001915050614f68565b60ff841115614eec57614eeb6146aa565b5b8360020a915084821115614f0357614f026146aa565b5b50614f68565b5060208310610133831016604e8410600b8410161715614f3e5782820a905083811115614f3957614f386146aa565b5b614f68565b614f4b8484846001614e49565b92509050818404811115614f6257614f616146aa565b5b81810290505b9392505050565b6000614f7a82613b26565b9150614f8583613e82565b9250614fb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e9c565b905092915050565b6000614fc582613b26565b9150614fd083613b26565b9250828202614fde81613b26565b91508282048414831517614ff557614ff46146aa565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061503682613b26565b915061504183613b26565b92508261505157615050614ffc565b5b82820490509291505056fea2646970667358221220352d4f85952e9d137a1cad99205d2eccb2ed4b4cefad1b2abeaf0baa844523fb64736f6c6343000812003368747470733a2f2f726967676572732e73332e65752d63656e7472616c2d312e616d617a6f6e6177732e636f6d2f000000000000000000000000c64d54cb82915ca62ade4763440193b304e4b1500000000000000000000000006610e2879efd5482fe4c74ff71791ec246af591b

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063938e3d7b11610130578063c5edadd2116100b8578063e8a3d4851161007c578063e8a3d48514610662578063e985e9c514610680578063f28ca1dd146106b0578063f2fde38b146106ce578063f887ea40146106ea57610227565b8063c5edadd2146105ac578063c87b56dd146105c8578063d547cfb7146105f8578063dd62ed3e14610616578063e0df5b6f1461064657610227565b80639b19251a116100ff5780639b19251a146104f6578063a22cb46514610526578063a8aa1b3114610542578063a9059cbb14610560578063b88d4fde1461059057610227565b8063938e3d7b1461047057806395d89b411461048c578063966deac9146104aa5780639a3b50f9146104c657610227565b806342842e0e116101b35780635c975abb116101825780635c975abb146103b65780636352211e146103d457806370a0823114610404578063771a3a1d146104345780638da5cb5b1461045257610227565b806342842e0e146103445780634f02c42014610360578063504334c21461037e57806353d6fd591461039a57610227565b806318d217c3116101fa57806318d217c3146102c857806323b872dd146102e45780632b968958146103005780632e5bb6ff1461030a578063313ce5671461032657610227565b806306fdde031461022c578063081812fc1461024a578063095ea7b31461027a57806318160ddd146102aa575b600080fd5b610234610708565b6040516102419190613af0565b60405180910390f35b610264600480360381019061025f9190613b5c565b610796565b6040516102719190613bca565b60405180910390f35b610294600480360381019061028f9190613c11565b6107c9565b6040516102a19190613c6c565b60405180910390f35b6102b2610ac2565b6040516102bf9190613c96565b60405180910390f35b6102e260048036038101906102dd9190613de6565b610ae6565b005b6102fe60048036038101906102f99190613e2f565b610b7e565b005b610308611459565b005b610324600480360381019061031f9190613b5c565b61157c565b005b61032e61160b565b60405161033b9190613e9e565b60405180910390f35b61035e60048036038101906103599190613e2f565b61162f565b005b610368611806565b6040516103759190613c96565b60405180910390f35b61039860048036038101906103939190613eb9565b61180c565b005b6103b460048036038101906103af9190613f5d565b61189f565b005b6103be61197f565b6040516103cb9190613c6c565b60405180910390f35b6103ee60048036038101906103e99190613b5c565b611992565b6040516103fb9190613bca565b60405180910390f35b61041e60048036038101906104199190613f9d565b611a35565b60405161042b9190613c96565b60405180910390f35b61043c611a4d565b6040516104499190613c96565b60405180910390f35b61045a611a53565b6040516104679190613bca565b60405180910390f35b61048a60048036038101906104859190613de6565b611a77565b005b610494611b49565b6040516104a19190613af0565b60405180910390f35b6104c460048036038101906104bf9190614155565b611bd7565b005b6104e060048036038101906104db9190613f9d565b611d4f565b6040516104ed9190613c6c565b60405180910390f35b610510600480360381019061050b9190613f9d565b611d6f565b60405161051d9190613c6c565b60405180910390f35b610540600480360381019061053b9190613f5d565b611d8f565b005b61054a611e8c565b6040516105579190613bca565b60405180910390f35b61057a60048036038101906105759190613c11565b611eb2565b6040516105879190613c6c565b60405180910390f35b6105aa60048036038101906105a59190614228565b611f6b565b005b6105c660048036038101906105c19190613c11565b612148565b005b6105e260048036038101906105dd9190613b5c565b612483565b6040516105ef9190613af0565b60405180910390f35b6106006128db565b60405161060d9190613af0565b60405180910390f35b610630600480360381019061062b91906142b0565b612969565b60405161063d9190613c96565b60405180910390f35b610660600480360381019061065b9190613de6565b61298e565b005b61066a612a26565b6040516106779190613af0565b60405180910390f35b61069a600480360381019061069591906142b0565b612ab8565b6040516106a79190613c6c565b60405180910390f35b6106b8612ae7565b6040516106c59190613af0565b60405180910390f35b6106e860048036038101906106e39190613f9d565b612b75565b005b6106f2612cfd565b6040516106ff919061434f565b60405180910390f35b6001805461071590614399565b80601f016020809104026020016040519081016040528092919081815260200182805461074190614399565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b505050505081565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060035482111580156107dd5750600082115b156109d1576000600d600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156108dd5750600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15610914576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600b600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516109c39190613c96565b60405180910390a350610ab8565b81600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610aaf9190613c96565b60405180910390a35b6001905092915050565b7f00000000000000000000000000000000000000000000003635c9adc5dea0000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060119081610b7a919061456c565b5050565b600860009054906101000a900460ff1615610c225760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061468a565b60405180910390fd5b5b600354811161131157600d600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610cc3576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d29576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610dec5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610e575750600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610e8e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e96612d23565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ee491906146d9565b92505081905550610ef3612d23565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061105791906146d9565b815481106110685761106761470d565b5b9060005260206000200154905080600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600f600085815260200190815260200160002054815481106110da576110d961470d565b5b9060005260206000200181905550600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806111375761113661473c565b5b60019003818190600052602060002001600090559055600f600083815260200190815260200160002054600f600083815260200190815260200160002081905550600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061122d91906146d9565b600f600084815260200190815260200160002081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876112f6612d23565b6040516113039190613c96565b60405180910390a350611454565b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114465781816113c591906146d9565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611451848484612d57565b50505b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114de576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611601576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060078190555050565b7f000000000000000000000000000000000000000000000000000000000000001281565b600860009054906101000a900460ff16156116d35760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c9906147b7565b60405180910390fd5b5b6116de838383610b7e565b60008273ffffffffffffffffffffffffffffffffffffffff163b141580156117ca575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016117659392919061480e565b6020604051808303816000875af1158015611784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a891906148b0565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611801576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60035481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611891576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61189b8282613329565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611924576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b6000600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a30576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60096020528060005260406000206000915090505481565b60075481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611afc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060139081611b0b919061456c565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a16601382604051611b3e929190614961565b60405180910390a150565b60028054611b5690614399565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8290614399565b8015611bcf5780601f10611ba457610100808354040283529160200191611bcf565b820191906000526020600020905b815481529060010190602001808311611bb257829003601f168201915b505050505081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c5c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051825114611ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c97906149e4565b60405180910390fd5b60005b8251811015611d4a57818181518110611cbf57611cbe61470d565b5b602002602001015160066000858481518110611cde57611cdd61470d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d4290614a04565b915050611ca3565b505050565b60066020528060005260406000206000915054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e809190613c6c565b60405180910390a35050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900460ff1615611f585760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e906147b7565b60405180910390fd5b5b611f63338484612d57565b905092915050565b600860009054906101000a900460ff161561200f5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461200e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612005906147b7565b60405180910390fd5b5b61201a858585610b7e565b60008473ffffffffffffffffffffffffffffffffffffffff163b1415801561210a575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016120a5959493929190614a79565b6020604051808303816000875af11580156120c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e891906148b0565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15612141576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561247e57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361223e576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036000815480929190600101919050555060006003549050600073ffffffffffffffffffffffffffffffffffffffff16600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f0576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506123f791906146d9565b600f600083815260200190815260200160002081905550808473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450808061247690614a04565b9150506121d0565b505050565b606060006012805461249490614399565b905011156124ce5760126124a78361334d565b6040516020016124b8929190614b86565b60405160208183030381529060405290506128d6565b6000826040516020016124e19190614bcb565b6040516020818303038152906040528051906020012060f81c905060608060648360ff161161257f576040518060400160405280600581526020017f312e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280601281526020017f41717561466f7267652046726f6e746965720000000000000000000000000000815250905061277f565b60a08360ff16116125ff576040518060400160405280600581526020017f322e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280601081526020017f487964726f587472616374203330303000000000000000000000000000000000815250905061277e565b60d28360ff161161267f576040518060400160405280600581526020017f332e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280601181526020017f426c75655761766520446f6d696e696f6e000000000000000000000000000000815250905061277d565b60f08360ff16116126ff576040518060400160405280600581526020017f342e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600d81526020017f53656166697265204e6578757300000000000000000000000000000000000000815250905061277c565b60fa8360ff161161277b576040518060400160405280600581526020017f352e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280601181526020017f446565705374617220496e66696e69747900000000000000000000000000000081525090505b5b5b5b5b600061278a8661334d565b60405160200161279a9190614c0c565b6040516020818303038152906040526040516020016127b99190614d16565b6040516020818303038152906040526011846040516020016127dc929190614b86565b6040516020818303038152906040526040516020016127fc929190614d38565b60405160208183030381529060405290506000826040516020016128209190614dce565b604051602081830303815290604052905060006040518060400160405280600481526020017f227d5d7d000000000000000000000000000000000000000000000000000000008152509050828260405160200161287e929190614d38565b6040516020818303038152906040528160405160200161289f929190614d38565b6040516020818303038152906040526040516020016128be9190614e16565b60405160208183030381529060405296505050505050505b919050565b601280546128e890614399565b80601f016020809104026020016040519081016040528092919081815260200182805461291490614399565b80156129615780601f1061293657610100808354040283529160200191612961565b820191906000526020600020905b81548152906001019060200180831161294457829003601f168201915b505050505081565b600a602052816000526040600020602052806000526040600020600091509150505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a13576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060129081612a22919061456c565b5050565b606060138054612a3590614399565b80601f0160208091040260200160405190810160405280929190818152602001828054612a6190614399565b8015612aae5780601f10612a8357610100808354040283529160200191612aae565b820191906000526020600020905b815481529060010190602001808311612a9157829003601f168201915b5050505050905090565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60118054612af490614399565b80601f0160208091040260200160405190810160405280929190818152602001828054612b2090614399565b8015612b6d5780601f10612b4257610100808354040283529160200191612b6d565b820191906000526020600020905b815481529060010190602001808311612b5057829003601f168201915b505050505081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bfa576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c60576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f0000000000000000000000000000000000000000000000000000000000000012600a612d529190614f6f565b905090565b600080612d62612d23565b90506000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e3b91906146d9565b925050819055506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee75750601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80612f915750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f905750601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156130a657606460075487612fa69190614fba565b612fb0919061502b565b905080600960008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878360405161309d9190613c96565b60405180910390a35b808603600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131d557600084600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613193919061502b565b858561319f919061502b565b6131a991906146d9565b905060005b818110156131d2576131bf8a61341b565b80806131ca90614a04565b9150506131ae565b50505b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132b55760008483613234919061502b565b85600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327f919061502b565b61328991906146d9565b905060005b818110156132b25761329f89613677565b80806132aa90614a04565b91505061328e565b50505b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487886040516133129190613c96565b60405180910390a360019450505050509392505050565b8160019081613338919061456c565b508060029081613348919061456c565b505050565b60606000600161335c8461390d565b01905060008167ffffffffffffffff81111561337b5761337a613cbb565b5b6040519080825280601f01601f1916602001820160405280156133ad5781602001600182028036833780820191505090505b509050600082602001820190505b600115613410578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161340457613403614ffc565b5b049450600085036133bb575b819350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613481576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061351191906146d9565b815481106135225761352161470d565b5b90600052602060002001549050600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061357e5761357d61473c565b5b60019003818190600052602060002001600090559055600f600082815260200190815260200160002060009055600d600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600b600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036136dd576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036000815480929190600101919050555060006003549050600073ffffffffffffffffffffffffffffffffffffffff16600d600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461378f576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600d600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061389691906146d9565b600f600083815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061396b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161396157613960614ffc565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106139a8576d04ee2d6d415b85acef8100000000838161399e5761399d614ffc565b5b0492506020810190505b662386f26fc1000083106139d757662386f26fc1000083816139cd576139cc614ffc565b5b0492506010810190505b6305f5e1008310613a00576305f5e10083816139f6576139f5614ffc565b5b0492506008810190505b6127108310613a25576127108381613a1b57613a1a614ffc565b5b0492506004810190505b60648310613a485760648381613a3e57613a3d614ffc565b5b0492506002810190505b600a8310613a57576001810190505b80915050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a9a578082015181840152602081019050613a7f565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ac282613a60565b613acc8185613a6b565b9350613adc818560208601613a7c565b613ae581613aa6565b840191505092915050565b60006020820190508181036000830152613b0a8184613ab7565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613b3981613b26565b8114613b4457600080fd5b50565b600081359050613b5681613b30565b92915050565b600060208284031215613b7257613b71613b1c565b5b6000613b8084828501613b47565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bb482613b89565b9050919050565b613bc481613ba9565b82525050565b6000602082019050613bdf6000830184613bbb565b92915050565b613bee81613ba9565b8114613bf957600080fd5b50565b600081359050613c0b81613be5565b92915050565b60008060408385031215613c2857613c27613b1c565b5b6000613c3685828601613bfc565b9250506020613c4785828601613b47565b9150509250929050565b60008115159050919050565b613c6681613c51565b82525050565b6000602082019050613c816000830184613c5d565b92915050565b613c9081613b26565b82525050565b6000602082019050613cab6000830184613c87565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613cf382613aa6565b810181811067ffffffffffffffff82111715613d1257613d11613cbb565b5b80604052505050565b6000613d25613b12565b9050613d318282613cea565b919050565b600067ffffffffffffffff821115613d5157613d50613cbb565b5b613d5a82613aa6565b9050602081019050919050565b82818337600083830152505050565b6000613d89613d8484613d36565b613d1b565b905082815260208101848484011115613da557613da4613cb6565b5b613db0848285613d67565b509392505050565b600082601f830112613dcd57613dcc613cb1565b5b8135613ddd848260208601613d76565b91505092915050565b600060208284031215613dfc57613dfb613b1c565b5b600082013567ffffffffffffffff811115613e1a57613e19613b21565b5b613e2684828501613db8565b91505092915050565b600080600060608486031215613e4857613e47613b1c565b5b6000613e5686828701613bfc565b9350506020613e6786828701613bfc565b9250506040613e7886828701613b47565b9150509250925092565b600060ff82169050919050565b613e9881613e82565b82525050565b6000602082019050613eb36000830184613e8f565b92915050565b60008060408385031215613ed057613ecf613b1c565b5b600083013567ffffffffffffffff811115613eee57613eed613b21565b5b613efa85828601613db8565b925050602083013567ffffffffffffffff811115613f1b57613f1a613b21565b5b613f2785828601613db8565b9150509250929050565b613f3a81613c51565b8114613f4557600080fd5b50565b600081359050613f5781613f31565b92915050565b60008060408385031215613f7457613f73613b1c565b5b6000613f8285828601613bfc565b9250506020613f9385828601613f48565b9150509250929050565b600060208284031215613fb357613fb2613b1c565b5b6000613fc184828501613bfc565b91505092915050565b600067ffffffffffffffff821115613fe557613fe4613cbb565b5b602082029050602081019050919050565b600080fd5b600061400e61400984613fca565b613d1b565b9050808382526020820190506020840283018581111561403157614030613ff6565b5b835b8181101561405a57806140468882613bfc565b845260208401935050602081019050614033565b5050509392505050565b600082601f83011261407957614078613cb1565b5b8135614089848260208601613ffb565b91505092915050565b600067ffffffffffffffff8211156140ad576140ac613cbb565b5b602082029050602081019050919050565b60006140d16140cc84614092565b613d1b565b905080838252602082019050602084028301858111156140f4576140f3613ff6565b5b835b8181101561411d57806141098882613f48565b8452602084019350506020810190506140f6565b5050509392505050565b600082601f83011261413c5761413b613cb1565b5b813561414c8482602086016140be565b91505092915050565b6000806040838503121561416c5761416b613b1c565b5b600083013567ffffffffffffffff81111561418a57614189613b21565b5b61419685828601614064565b925050602083013567ffffffffffffffff8111156141b7576141b6613b21565b5b6141c385828601614127565b9150509250929050565b600080fd5b60008083601f8401126141e8576141e7613cb1565b5b8235905067ffffffffffffffff811115614205576142046141cd565b5b60208301915083600182028301111561422157614220613ff6565b5b9250929050565b60008060008060006080868803121561424457614243613b1c565b5b600061425288828901613bfc565b955050602061426388828901613bfc565b945050604061427488828901613b47565b935050606086013567ffffffffffffffff81111561429557614294613b21565b5b6142a1888289016141d2565b92509250509295509295909350565b600080604083850312156142c7576142c6613b1c565b5b60006142d585828601613bfc565b92505060206142e685828601613bfc565b9150509250929050565b6000819050919050565b600061431561431061430b84613b89565b6142f0565b613b89565b9050919050565b6000614327826142fa565b9050919050565b60006143398261431c565b9050919050565b6143498161432e565b82525050565b60006020820190506143646000830184614340565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143b157607f821691505b6020821081036143c4576143c361436a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261442c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826143ef565b61443686836143ef565b95508019841693508086168417925050509392505050565b600061446961446461445f84613b26565b6142f0565b613b26565b9050919050565b6000819050919050565b6144838361444e565b61449761448f82614470565b8484546143fc565b825550505050565b600090565b6144ac61449f565b6144b781848461447a565b505050565b5b818110156144db576144d06000826144a4565b6001810190506144bd565b5050565b601f821115614520576144f1816143ca565b6144fa846143df565b81016020851015614509578190505b61451d614515856143df565b8301826144bc565b50505b505050565b600082821c905092915050565b600061454360001984600802614525565b1980831691505092915050565b600061455c8383614532565b9150826002028217905092915050565b61457582613a60565b67ffffffffffffffff81111561458e5761458d613cbb565b5b6145988254614399565b6145a38282856144df565b600060209050601f8311600181146145d657600084156145c4578287015190505b6145ce8582614550565b865550614636565b601f1984166145e4866143ca565b60005b8281101561460c578489015182556001820191506020850194506020810190506145e7565b868310156146295784890151614625601f891682614532565b8355505b6001600288020188555050505b505050505050565b7f5061757365642e204f776e6572206f6e6c792e00000000000000000000000000600082015250565b6000614674601383613a6b565b915061467f8261463e565b602082019050919050565b600060208201905081810360008301526146a381614667565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146e482613b26565b91506146ef83613b26565b9250828203905081811115614707576147066146aa565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f5061757365642e2057686974656c697374206f6e6c792e000000000000000000600082015250565b60006147a1601783613a6b565b91506147ac8261476b565b602082019050919050565b600060208201905081810360008301526147d081614794565b9050919050565b600082825260208201905092915050565b50565b60006147f86000836147d7565b9150614803826147e8565b600082019050919050565b60006080820190506148236000830186613bbb565b6148306020830185613bbb565b61483d6040830184613c87565b818103606083015261484e816147eb565b9050949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61488d81614858565b811461489857600080fd5b50565b6000815190506148aa81614884565b92915050565b6000602082840312156148c6576148c5613b1c565b5b60006148d48482850161489b565b91505092915050565b600081546148ea81614399565b6148f48186613a6b565b9450600182166000811461490f576001811461492557614958565b60ff198316865281151560200286019350614958565b61492e856143ca565b60005b8381101561495057815481890152600182019150602081019050614931565b808801955050505b50505092915050565b6000604082019050818103600083015261497b81856148dd565b9050818103602083015261498f8184613ab7565b90509392505050565b7f4d69736d61746368000000000000000000000000000000000000000000000000600082015250565b60006149ce600883613a6b565b91506149d982614998565b602082019050919050565b600060208201905081810360008301526149fd816149c1565b9050919050565b6000614a0f82613b26565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a4157614a406146aa565b5b600182019050919050565b6000614a5883856147d7565b9350614a65838584613d67565b614a6e83613aa6565b840190509392505050565b6000608082019050614a8e6000830188613bbb565b614a9b6020830187613bbb565b614aa86040830186613c87565b8181036060830152614abb818486614a4c565b90509695505050505050565b600081905092915050565b60008154614adf81614399565b614ae98186614ac7565b94506001821660008114614b045760018114614b1957614b4c565b60ff1983168652811515820286019350614b4c565b614b22856143ca565b60005b83811015614b4457815481890152600182019150602081019050614b25565b838801955050505b50505092915050565b6000614b6082613a60565b614b6a8185614ac7565b9350614b7a818560208601613a7c565b80840191505092915050565b6000614b928285614ad2565b9150614b9e8284614b55565b91508190509392505050565b6000819050919050565b614bc5614bc082613b26565b614baa565b82525050565b6000614bd78284614bb4565b60208201915081905092915050565b7f7b226e616d65223a202252696767657273202300000000000000000000000000815250565b6000614c1782614be6565b601382019150614c278284614b55565b915081905092915050565b7f222c226465736372697074696f6e223a224120636f6c6c656374696f6e206f6660008201527f20312c303030204f696c205269677320656e61626c656420627920455243343060208201527f342c20616e206578706572696d656e74616c20746f6b656e207374616e64617260408201527f642e222c2265787465726e616c5f75726c223a2268747470733a2f2f7269676760608201527f6572732e66696e616e6365222c22696d616765223a2200000000000000000000608082015250565b6000614d00609683614ac7565b9150614d0b82614c32565b609682019050919050565b6000614d228284614b55565b9150614d2d82614cf3565b915081905092915050565b6000614d448285614b55565b9150614d508284614b55565b91508190509392505050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a225260008201527f69674e616d65222c2276616c7565223a22000000000000000000000000000000602082015250565b6000614db8603183614ac7565b9150614dc382614d5c565b603182019050919050565b6000614dd982614dab565b9150614de58284614b55565b915081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c0000000000815250565b6000614e2182614df0565b601b82019150614e318284614b55565b915081905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614e9357808604811115614e6f57614e6e6146aa565b5b6001851615614e7e5780820291505b8081029050614e8c85614e3c565b9450614e53565b94509492505050565b600082614eac5760019050614f68565b81614eba5760009050614f68565b8160018114614ed05760028114614eda57614f09565b6001915050614f68565b60ff841115614eec57614eeb6146aa565b5b8360020a915084821115614f0357614f026146aa565b5b50614f68565b5060208310610133831016604e8410600b8410161715614f3e5782820a905083811115614f3957614f386146aa565b5b614f68565b614f4b8484846001614e49565b92509050818404811115614f6257614f616146aa565b5b81810290505b9392505050565b6000614f7a82613b26565b9150614f8583613e82565b9250614fb27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614e9c565b905092915050565b6000614fc582613b26565b9150614fd083613b26565b9250828202614fde81613b26565b91508282048414831517614ff557614ff46146aa565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061503682613b26565b915061504183613b26565b92508261505157615050614ffc565b5b82820490509291505056fea2646970667358221220352d4f85952e9d137a1cad99205d2eccb2ed4b4cefad1b2abeaf0baa844523fb64736f6c63430008120033

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

000000000000000000000000c64d54cb82915ca62ade4763440193b304e4b1500000000000000000000000006610e2879efd5482fe4c74ff71791ec246af591b

-----Decoded View---------------
Arg [0] : _owner (address): 0xC64D54CB82915ca62Ade4763440193B304E4B150
Arg [1] : presale (address): 0x6610E2879EFd5482Fe4C74FF71791Ec246af591B

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c64d54cb82915ca62ade4763440193b304e4b150
Arg [1] : 0000000000000000000000006610e2879efd5482fe4c74ff71791ec246af591b


Deployed Bytecode Sourcemap

42206:3791:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28179:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29158:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33179:676;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28403:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43139:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34312:1890;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26271:151;;;:::i;:::-;;31997:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28307:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36687:585;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28534:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42948:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31828:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28830:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32578:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28931:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28773:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25712:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43441:257;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28229:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32134:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28699:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29749:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33906:257;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28645:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36261:349;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37367:615;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40199:664;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43869:1988;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42312:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29041:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43286:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45865:129;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29265:68;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42284:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26044:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28606:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28179:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29158:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;33179:676::-;33311:4;33351:6;;33337:10;:20;;:38;;;;;33374:1;33361:10;:14;33337:38;33333:491;;;33392:13;33408:8;:20;33417:10;33408:20;;;;;;;;;;;;;;;;;;;;;33392:36;;33463:5;33449:19;;:10;:19;;;;:59;;;;;33473:16;:23;33490:5;33473:23;;;;;;;;;;;;;;;:35;33497:10;33473:35;;;;;;;;;;;;;;;;;;;;;;;;;33472:36;33449:59;33445:121;;;33536:14;;;;;;;;;;;;;;33445:121;33608:7;33582:11;:23;33594:10;33582:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;33653:7;33637:36;;33646:5;33637:36;;;33662:10;33637:36;;;;;;:::i;:::-;;;;;;;;33377:308;33333:491;;;33739:10;33706:9;:21;33716:10;33706:21;;;;;;;;;;;;;;;:30;33728:7;33706:30;;;;;;;;;;;;;;;:43;;;;33792:7;33771:41;;33780:10;33771:41;;;33801:10;33771:41;;;;;;:::i;:::-;;;;;;;;33333:491;33843:4;33836:11;;33179:676;;;;:::o;28403:36::-;;;:::o;43139:139::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;43262:8:::1;43252:7;:18;;;;;;:::i;:::-;;43139:139:::0;:::o;34312:1890::-;34467:6;;;;;;;;;;;34463:139;;;34530:5;;;;;;;;;;34516:19;;:10;:19;;;34490:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;34463:139;34632:6;;34618:10;:20;34614:1581;;34667:8;:20;34676:10;34667:20;;;;;;;;;;;;;;;;;;;;;34659:28;;:4;:28;;;34655:91;;34715:15;;;;;;;;;;;;;;34655:91;34780:1;34766:16;;:2;:16;;;34762:82;;34810:18;;;;;;;;;;;;;;34762:82;34896:4;34882:18;;:10;:18;;;;:74;;;;;34922:16;:22;34939:4;34922:22;;;;;;;;;;;;;;;:34;34945:10;34922:34;;;;;;;;;;;;;;;;;;;;;;;;;34921:35;34882:74;:132;;;;;34991:11;:23;35003:10;34991:23;;;;;;;;;;;;;;;;;;;;;34977:37;;:10;:37;;;;34882:132;34860:226;;;35056:14;;;;;;;;;;;;;;34860:226;35121:10;:8;:10::i;:::-;35102:9;:15;35112:4;35102:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;35194:10;:8;:10::i;:::-;35177:9;:13;35187:2;35177:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;35259:2;35236:8;:20;35245:10;35236:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;35283:11;:23;35295:10;35283:23;;;;;;;;;;;;35276:30;;;;;;;;;;;35364:17;35384:6;:12;35391:4;35384:12;;;;;;;;;;;;;;;35419:1;35397:6;:12;35404:4;35397:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;35384:37;;;;;;;;:::i;:::-;;;;;;;;;;35364:57;;35476:9;35436:6;:12;35443:4;35436:12;;;;;;;;;;;;;;;35449:11;:23;35461:10;35449:23;;;;;;;;;;;;35436:37;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;35520:6;:12;35527:4;35520:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35624:11;:23;35636:10;35624:23;;;;;;;;;;;;35599:11;:22;35611:9;35599:22;;;;;;;;;;;:48;;;;35701:6;:10;35708:2;35701:10;;;;;;;;;;;;;;;35717;35701:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35831:1;35811:6;:10;35818:2;35811:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;35785:11;:23;35797:10;35785:23;;;;;;;;;;;:47;;;;35873:10;35869:2;35854:30;;35863:4;35854:30;;;;;;;;;;;;35924:2;35904:35;;35918:4;35904:35;;;35928:10;:8;:10::i;:::-;35904:35;;;;;;:::i;:::-;;;;;;;;34640:1311;34614:1581;;;35972:15;35990:9;:15;36000:4;35990:15;;;;;;;;;;;;;;;:27;36006:10;35990:27;;;;;;;;;;;;;;;;35972:45;;36049:17;36038:7;:28;36034:101;;36125:10;36115:7;:20;;;;:::i;:::-;36085:9;:15;36095:4;36085:15;;;;;;;;;;;;;;;:27;36101:10;36085:27;;;;;;;;;;;;;;;:50;;;;36034:101;36152:31;36162:4;36168:2;36172:10;36152:9;:31::i;:::-;;35957:238;34614:1581;34312:1890;;;:::o;26271:151::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;26350:1:::1;26334:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;26411:1;26370:44;;26391:10;26370:44;;;;;;;;;;;;26271:151::o:0;31997:129::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;32110:8:::1;32100:7;:18;;;;31997:129:::0;:::o;28307:31::-;;;:::o;36687:585::-;36840:6;;;;;;;;;;;36836:143;;;36903:5;;;;;;;;;;36889:19;;:10;:19;;;36863:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;36836:143;36991:26;37004:4;37010:2;37014;36991:12;:26::i;:::-;37066:1;37048:2;:14;;;:19;;:154;;;;;37162:40;;;37084:118;;;37099:2;37084:35;;;37120:10;37132:4;37138:2;37084:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:118;;;;;37048:154;37030:235;;;37236:17;;;;;;;;;;;;;;37030:235;36687:585;;;:::o;28534:21::-;;;;:::o;42948:183::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;43093:30:::1;43108:5;43115:7;43093:14;:30::i;:::-;42948:183:::0;;:::o;31828:161::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;31976:5:::1;31956:9;:17;31966:6;31956:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;31828:161:::0;;:::o;28830:18::-;;;;;;;;;;;;;:::o;32578:252::-;32690:13;32729:8;:12;32738:2;32729:12;;;;;;;;;;;;;;;;;;;;;32721:20;;32775:1;32758:19;;:5;:19;;;32754:69;;32801:10;;;;;;;;;;;;;;32754:69;32578:252;;;:::o;28931:44::-;;;;;;;;;;;;;;;;;:::o;28773:22::-;;;;:::o;25712:20::-;;;;;;;;;;;;:::o;43441:257::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;43577:12:::1;43562;:27;;;;;;:::i;:::-;;43607:83;43640:12;43667;43607:83;;;;;;;:::i;:::-;;;;;;;;43441:257:::0;:::o;28229:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32134:329::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;32308:8:::1;:15;32289:8;:15;:34;32281:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32354:9;32349:107;32373:8;:15;32369:1;:19;32349:107;;;32433:8;32442:1;32433:11;;;;;;;;:::i;:::-;;;;;;;;32410:7;:20;32418:8;32427:1;32418:11;;;;;;;;:::i;:::-;;;;;;;;32410:20;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32390:3;;;;;:::i;:::-;;;;32349:107;;;;32134:329:::0;;:::o;28699:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;29749:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;33906:257::-;34083:8;34042:16;:28;34059:10;34042:28;;;;;;;;;;;;;;;:38;34071:8;34042:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;34136:8;34109:46;;34124:10;34109:46;;;34146:8;34109:46;;;;;;:::i;:::-;;;;;;;;33906:257;;:::o;28645:19::-;;;;;;;;;;;;;:::o;36261:349::-;36385:4;36411:6;;;;;;;;;;;36407:143;;;36474:5;;;;;;;;;;36460:19;;:10;:19;;;36434:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;36407:143;36569:33;36579:10;36591:2;36595:6;36569:9;:33::i;:::-;36562:40;;36261:349;;;;:::o;37367:615::-;37548:6;;;;;;;;;;;37544:143;;;37611:5;;;;;;;;;;37597:19;;:10;:19;;;37571:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;37544:143;37699:26;37712:4;37718:2;37722;37699:12;:26::i;:::-;37774:1;37756:2;:14;;;:19;;:156;;;;;37872:40;;;37792:120;;;37807:2;37792:35;;;37828:10;37840:4;37846:2;37850:4;;37792:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:120;;;;;37756:156;37738:237;;;37946:17;;;;;;;;;;;;;;37738:237;37367:615;;;;;:::o;40199:664::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;40334:9:::1;40329:527;40353:6;40349:1;:10;40329:527;;;40399:1;40385:16;;:2;:16;;::::0;40381:82:::1;;40429:18;;;;;;;;;;;;;;40381:82;40508:6;;:8;;;;;;;;;;;;;40548:10;40561:6;;40548:19;;40612:1;40588:26;;:8;:12;40597:2;40588:12;;;;;;;;;;;;;;;;;;;;;:26;;;40584:89;;40642:15;;;;;;;;;;;;;;40584:89;40704:2;40689:8;:12;40698:2;40689:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;40721:6;:10;40728:2;40721:10;;;;;;;;;;;;;;;40737:2;40721:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40793:1;40773:6;:10;40780:2;40773:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;40755:11;:15;40767:2;40755:15;;;;;;;;;;;:39;;;;40841:2;40837;40816:28;;40833:1;40816:28;;;;;;;;;;;;40366:490;40361:3;;;;;:::i;:::-;;;;40329:527;;;;40199:664:::0;;:::o;43869:1988::-;43983:13;44047:1;44024:12;44018:26;;;;;:::i;:::-;;;:30;44014:1836;;;44086:12;44100:20;44117:2;44100:16;:20::i;:::-;44072:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44065:56;;;;44014:1836;44154:10;44207:2;44190:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;44180:31;;;;;;44167:46;;44154:59;;44228:19;44262:21;44312:3;44304:4;:11;;;44300:595;;44336:15;;;;;;;;;;;;;;;;;;;44370:30;;;;;;;;;;;;;;;;;;;44300:595;;;44434:3;44426:4;:11;;;44422:473;;44458:15;;;;;;;;;;;;;;;;;;;44492:28;;;;;;;;;;;;;;;;;;;44422:473;;;44554:3;44546:4;:11;;;44542:353;;44578:15;;;;;;;;;;;;;;;;;;;44612:29;;;;;;;;;;;;;;;;;;;44542:353;;;44675:3;44667:4;:11;;;44663:232;;44699:15;;;;;;;;;;;;;;;;;;;44733:25;;;;;;;;;;;;;;;;;;;44663:232;;;44792:3;44784:4;:11;;;44780:115;;44816:15;;;;;;;;;;;;;;;;;;;44850:29;;;;;;;;;;;;;;;;;;;44780:115;44663:232;44542:353;44422:473;44300:595;44911:26;45045:20;45062:2;45045:16;:20::i;:::-;45008:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;44972:288;;;;;;;;:::i;:::-;;;;;;;;;;;;;45293:7;45302:5;45279:29;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44940:383;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44911:412;;45338:27;45470:7;45368:124;;;;;;;;:::i;:::-;;;;;;;;;;;;;45338:154;;45507:28;:37;;;;;;;;;;;;;;;;;;;45727:12;45741:13;45713:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45782:14;45673:146;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45585:253;;;;;;;;:::i;:::-;;;;;;;;;;;;;45561:277;;;;;;;;43869:1988;;;;:::o;42312:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29041:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43286:147::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;43416:9:::1;43401:12;:24;;;;;;:::i;:::-;;43286:147:::0;:::o;45865:129::-;45936:13;45974:12;45967:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45865:129;:::o;29265:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42284:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26044:219::-;25799:5;;;;;;;;;;25785:19;;:10;:19;;;25781:46;;25813:14;;;;;;;;;;;;;;25781:46;26145:1:::1;26127:20;;:6;:20;;::::0;26123:47:::1;;26156:14;;;;;;;;;;;;;;26123:47;26191:6;26183:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;26248:6;26215:40;;26236:10;26215:40;;;;;;;;;;;;26044:219:::0;:::o;28606:32::-;;;;;;;;;;;;;:::o;39546:124::-;39616:7;39654:8;39648:2;:14;;;;:::i;:::-;39641:21;;39546:124;:::o;38050:1457::-;38181:4;38203:12;38218:10;:8;:10::i;:::-;38203:25;;38239:27;38269:9;:15;38279:4;38269:15;;;;;;;;;;;;;;;;38239:45;;38295:29;38327:9;:13;38337:2;38327:13;;;;;;;;;;;;;;;;38295:45;;38372:6;38353:9;:15;38363:4;38353:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;38391:11;38432:7;:11;38440:2;38432:11;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;;38448:9;:15;38458:4;38448:15;;;;;;;;;;;;;;;;;;;;;;;;;38447:16;38432:31;38431:83;;;;38482:7;:13;38490:4;38482:13;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;;38500:9;:13;38510:2;38500:13;;;;;;;;;;;;;;;;;;;;;;;;;38499:14;38482:31;38431:83;38413:301;;;38566:3;38556:7;;38547:6;:16;;;;:::i;:::-;:22;;;;:::i;:::-;38541:28;;38633:3;38613:9;:16;38623:5;;;;;;;;;;;38613:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;38691:5;;;;;;;;;;38671:31;;38685:4;38671:31;;;38698:3;38671:31;;;;;;:::i;:::-;;;;;;;;38413:301;38777:3;38768:6;:12;38751:9;:13;38761:2;38751:13;;;;;;;;;;;;;;;;:29;;;;;;;;;;;38865:9;:15;38875:4;38865:15;;;;;;;;;;;;;;;;;;;;;;;;;38860:251;;38897:22;38989:4;38971:9;:15;38981:4;38971:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;38945:4;38923:19;:26;;;;:::i;:::-;38922:72;;;;:::i;:::-;38897:97;;39014:9;39009:91;39033:14;39029:1;:18;39009:91;;;39073:11;39079:4;39073:5;:11::i;:::-;39049:3;;;;;:::i;:::-;;;;39009:91;;;;38882:229;38860:251;39187:9;:13;39197:2;39187:13;;;;;;;;;;;;;;;;;;;;;;;;;39182:247;;39217:22;39309:4;39285:21;:28;;;;:::i;:::-;39259:4;39243:9;:13;39253:2;39243:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;39242:72;;;;:::i;:::-;39217:97;;39334:9;39329:89;39353:14;39349:1;:18;39329:89;;;39393:9;39399:2;39393:5;:9::i;:::-;39369:3;;;;;:::i;:::-;;;;39329:89;;;;39202:227;39182:247;39466:2;39446:31;;39460:4;39446:31;;;39470:6;39446:31;;;;;;:::i;:::-;;;;;;;;39495:4;39488:11;;;;;;38050:1457;;;;;:::o;41291:174::-;41425:5;41418:4;:12;;;;;;:::i;:::-;;41450:7;41441:6;:16;;;;;;:::i;:::-;;41291:174;;:::o;17284:718::-;17340:13;17391:14;17428:1;17408:17;17419:5;17408:10;:17::i;:::-;:21;17391:38;;17444:20;17478:6;17467:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17444:41;;17500:11;17629:6;17625:2;17621:15;17613:6;17609:28;17602:35;;17666:290;17673:4;17666:290;;;17698:5;;;;;;;;17840:10;17835:2;17828:5;17824:14;17819:32;17814:3;17806:46;17898:2;17889:11;;;;;;:::i;:::-;;;;;17932:1;17923:5;:10;17666:290;17919:21;17666:290;17977:6;17970:13;;;;;17284:718;;;:::o;40871:412::-;40987:1;40971:18;;:4;:18;;;40967:73;;41013:15;;;;;;;;;;;;;;40967:73;41052:10;41065:6;:12;41072:4;41065:12;;;;;;;;;;;;;;;41100:1;41078:6;:12;41085:4;41078:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;41065:37;;;;;;;;:::i;:::-;;;;;;;;;;41052:50;;41113:6;:12;41120:4;41113:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41149:11;:15;41161:2;41149:15;;;;;;;;;;;41142:22;;;41182:8;:12;41191:2;41182:12;;;;;;;;;;;;41175:19;;;;;;;;;;;41212:11;:15;41224:2;41212:15;;;;;;;;;;;;41205:22;;;;;;;;;;;41272:2;41268:1;41245:30;;41254:4;41245:30;;;;;;;;;;;;40956:327;40871:412;:::o;39678:513::-;39790:1;39776:16;;:2;:16;;;39772:74;;39816:18;;;;;;;;;;;;;;39772:74;39883:6;;:8;;;;;;;;;;;;;39915:10;39928:6;;39915:19;;39975:1;39951:26;;:8;:12;39960:2;39951:12;;;;;;;;;;;;;;;;;;;;;:26;;;39947:81;;40001:15;;;;;;;;;;;;;;39947:81;40055:2;40040:8;:12;40049:2;40040:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;40068:6;:10;40075:2;40068:10;;;;;;;;;;;;;;;40084:2;40068:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40136:1;40116:6;:10;40123:2;40116:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;40098:11;:15;40110:2;40098:15;;;;;;;;;;;:39;;;;40180:2;40176;40155:28;;40172:1;40155:28;;;;;;;;;;;;39761:430;39678:513;:::o;12674:948::-;12727:7;12747:14;12764:1;12747:18;;12814:8;12805:5;:17;12801:106;;12852:8;12843:17;;;;;;:::i;:::-;;;;;12889:2;12879:12;;;;12801:106;12934:8;12925:5;:17;12921:106;;12972:8;12963:17;;;;;;:::i;:::-;;;;;13009:2;12999:12;;;;12921:106;13054:8;13045:5;:17;13041:106;;13092:8;13083:17;;;;;;:::i;:::-;;;;;13129:2;13119:12;;;;13041:106;13174:7;13165:5;:16;13161:103;;13211:7;13202:16;;;;;;:::i;:::-;;;;;13247:1;13237:11;;;;13161:103;13291:7;13282:5;:16;13278:103;;13328:7;13319:16;;;;;;:::i;:::-;;;;;13364:1;13354:11;;;;13278:103;13408:7;13399:5;:16;13395:103;;13445:7;13436:16;;;;;;:::i;:::-;;;;;13481:1;13471:11;;;;13395:103;13525:7;13516:5;:16;13512:68;;13563:1;13553:11;;;;13512:68;13608:6;13601:13;;;12674:948;;;:::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:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:118::-;2688:24;2706:5;2688:24;:::i;:::-;2683:3;2676:37;2601:118;;:::o;2725:222::-;2818:4;2856:2;2845:9;2841:18;2833:26;;2869:71;2937:1;2926:9;2922:17;2913:6;2869:71;:::i;:::-;2725:222;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:118::-;4220:24;4238:5;4220:24;:::i;:::-;4215:3;4208:37;4133:118;;:::o;4257:222::-;4350:4;4388:2;4377:9;4373:18;4365:26;;4401:71;4469:1;4458:9;4454:17;4445:6;4401:71;:::i;:::-;4257:222;;;;:::o;4485:117::-;4594:1;4591;4584:12;4608:117;4717:1;4714;4707:12;4731:180;4779:77;4776:1;4769:88;4876:4;4873:1;4866:15;4900:4;4897:1;4890:15;4917:281;5000:27;5022:4;5000:27;:::i;:::-;4992:6;4988:40;5130:6;5118:10;5115:22;5094:18;5082:10;5079:34;5076:62;5073:88;;;5141:18;;:::i;:::-;5073:88;5181:10;5177:2;5170:22;4960:238;4917:281;;:::o;5204:129::-;5238:6;5265:20;;:::i;:::-;5255:30;;5294:33;5322:4;5314:6;5294:33;:::i;:::-;5204:129;;;:::o;5339:308::-;5401:4;5491:18;5483:6;5480:30;5477:56;;;5513:18;;:::i;:::-;5477:56;5551:29;5573:6;5551:29;:::i;:::-;5543:37;;5635:4;5629;5625:15;5617:23;;5339:308;;;:::o;5653:146::-;5750:6;5745:3;5740;5727:30;5791:1;5782:6;5777:3;5773:16;5766:27;5653:146;;;:::o;5805:425::-;5883:5;5908:66;5924:49;5966:6;5924:49;:::i;:::-;5908:66;:::i;:::-;5899:75;;5997:6;5990:5;5983:21;6035:4;6028:5;6024:16;6073:3;6064:6;6059:3;6055:16;6052:25;6049:112;;;6080:79;;:::i;:::-;6049:112;6170:54;6217:6;6212:3;6207;6170:54;:::i;:::-;5889:341;5805:425;;;;;:::o;6250:340::-;6306:5;6355:3;6348:4;6340:6;6336:17;6332:27;6322:122;;6363:79;;:::i;:::-;6322:122;6480:6;6467:20;6505:79;6580:3;6572:6;6565:4;6557:6;6553:17;6505:79;:::i;:::-;6496:88;;6312:278;6250:340;;;;:::o;6596:509::-;6665:6;6714:2;6702:9;6693:7;6689:23;6685:32;6682:119;;;6720:79;;:::i;:::-;6682:119;6868:1;6857:9;6853:17;6840:31;6898:18;6890:6;6887:30;6884:117;;;6920:79;;:::i;:::-;6884:117;7025:63;7080:7;7071:6;7060:9;7056:22;7025:63;:::i;:::-;7015:73;;6811:287;6596:509;;;;:::o;7111:619::-;7188:6;7196;7204;7253:2;7241:9;7232:7;7228:23;7224:32;7221:119;;;7259:79;;:::i;:::-;7221:119;7379:1;7404:53;7449:7;7440:6;7429:9;7425:22;7404:53;:::i;:::-;7394:63;;7350:117;7506:2;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7477:118;7634:2;7660:53;7705:7;7696:6;7685:9;7681:22;7660:53;:::i;:::-;7650:63;;7605:118;7111:619;;;;;:::o;7736:86::-;7771:7;7811:4;7804:5;7800:16;7789:27;;7736:86;;;:::o;7828:112::-;7911:22;7927:5;7911:22;:::i;:::-;7906:3;7899:35;7828:112;;:::o;7946:214::-;8035:4;8073:2;8062:9;8058:18;8050:26;;8086:67;8150:1;8139:9;8135:17;8126:6;8086:67;:::i;:::-;7946:214;;;;:::o;8166:834::-;8254:6;8262;8311:2;8299:9;8290:7;8286:23;8282:32;8279:119;;;8317:79;;:::i;:::-;8279:119;8465:1;8454:9;8450:17;8437:31;8495:18;8487:6;8484:30;8481:117;;;8517:79;;:::i;:::-;8481:117;8622:63;8677:7;8668:6;8657:9;8653:22;8622:63;:::i;:::-;8612:73;;8408:287;8762:2;8751:9;8747:18;8734:32;8793:18;8785:6;8782:30;8779:117;;;8815:79;;:::i;:::-;8779:117;8920:63;8975:7;8966:6;8955:9;8951:22;8920:63;:::i;:::-;8910:73;;8705:288;8166:834;;;;;:::o;9006:116::-;9076:21;9091:5;9076:21;:::i;:::-;9069:5;9066:32;9056:60;;9112:1;9109;9102:12;9056:60;9006:116;:::o;9128:133::-;9171:5;9209:6;9196:20;9187:29;;9225:30;9249:5;9225:30;:::i;:::-;9128:133;;;;:::o;9267:468::-;9332:6;9340;9389:2;9377:9;9368:7;9364:23;9360:32;9357:119;;;9395:79;;:::i;:::-;9357:119;9515:1;9540:53;9585:7;9576:6;9565:9;9561:22;9540:53;:::i;:::-;9530:63;;9486:117;9642:2;9668:50;9710:7;9701:6;9690:9;9686:22;9668:50;:::i;:::-;9658:60;;9613:115;9267:468;;;;;:::o;9741:329::-;9800:6;9849:2;9837:9;9828:7;9824:23;9820:32;9817:119;;;9855:79;;:::i;:::-;9817:119;9975:1;10000:53;10045:7;10036:6;10025:9;10021:22;10000:53;:::i;:::-;9990:63;;9946:117;9741:329;;;;:::o;10076:311::-;10153:4;10243:18;10235:6;10232:30;10229:56;;;10265:18;;:::i;:::-;10229:56;10315:4;10307:6;10303:17;10295:25;;10375:4;10369;10365:15;10357:23;;10076:311;;;:::o;10393:117::-;10502:1;10499;10492:12;10533:710;10629:5;10654:81;10670:64;10727:6;10670:64;:::i;:::-;10654:81;:::i;:::-;10645:90;;10755:5;10784:6;10777:5;10770:21;10818:4;10811:5;10807:16;10800:23;;10871:4;10863:6;10859:17;10851:6;10847:30;10900:3;10892:6;10889:15;10886:122;;;10919:79;;:::i;:::-;10886:122;11034:6;11017:220;11051:6;11046:3;11043:15;11017:220;;;11126:3;11155:37;11188:3;11176:10;11155:37;:::i;:::-;11150:3;11143:50;11222:4;11217:3;11213:14;11206:21;;11093:144;11077:4;11072:3;11068:14;11061:21;;11017:220;;;11021:21;10635:608;;10533:710;;;;;:::o;11266:370::-;11337:5;11386:3;11379:4;11371:6;11367:17;11363:27;11353:122;;11394:79;;:::i;:::-;11353:122;11511:6;11498:20;11536:94;11626:3;11618:6;11611:4;11603:6;11599:17;11536:94;:::i;:::-;11527:103;;11343:293;11266:370;;;;:::o;11642:308::-;11716:4;11806:18;11798:6;11795:30;11792:56;;;11828:18;;:::i;:::-;11792:56;11878:4;11870:6;11866:17;11858:25;;11938:4;11932;11928:15;11920:23;;11642:308;;;:::o;11970:701::-;12063:5;12088:78;12104:61;12158:6;12104:61;:::i;:::-;12088:78;:::i;:::-;12079:87;;12186:5;12215:6;12208:5;12201:21;12249:4;12242:5;12238:16;12231:23;;12302:4;12294:6;12290:17;12282:6;12278:30;12331:3;12323:6;12320:15;12317:122;;;12350:79;;:::i;:::-;12317:122;12465:6;12448:217;12482:6;12477:3;12474:15;12448:217;;;12557:3;12586:34;12616:3;12604:10;12586:34;:::i;:::-;12581:3;12574:47;12650:4;12645:3;12641:14;12634:21;;12524:141;12508:4;12503:3;12499:14;12492:21;;12448:217;;;12452:21;12069:602;;11970:701;;;;;:::o;12691:364::-;12759:5;12808:3;12801:4;12793:6;12789:17;12785:27;12775:122;;12816:79;;:::i;:::-;12775:122;12933:6;12920:20;12958:91;13045:3;13037:6;13030:4;13022:6;13018:17;12958:91;:::i;:::-;12949:100;;12765:290;12691:364;;;;:::o;13061:888::-;13176:6;13184;13233:2;13221:9;13212:7;13208:23;13204:32;13201:119;;;13239:79;;:::i;:::-;13201:119;13387:1;13376:9;13372:17;13359:31;13417:18;13409:6;13406:30;13403:117;;;13439:79;;:::i;:::-;13403:117;13544:78;13614:7;13605:6;13594:9;13590:22;13544:78;:::i;:::-;13534:88;;13330:302;13699:2;13688:9;13684:18;13671:32;13730:18;13722:6;13719:30;13716:117;;;13752:79;;:::i;:::-;13716:117;13857:75;13924:7;13915:6;13904:9;13900:22;13857:75;:::i;:::-;13847:85;;13642:300;13061:888;;;;;:::o;13955:117::-;14064:1;14061;14054:12;14091:552;14148:8;14158:6;14208:3;14201:4;14193:6;14189:17;14185:27;14175:122;;14216:79;;:::i;:::-;14175:122;14329:6;14316:20;14306:30;;14359:18;14351:6;14348:30;14345:117;;;14381:79;;:::i;:::-;14345:117;14495:4;14487:6;14483:17;14471:29;;14549:3;14541:4;14533:6;14529:17;14519:8;14515:32;14512:41;14509:128;;;14556:79;;:::i;:::-;14509:128;14091:552;;;;;:::o;14649:963::-;14746:6;14754;14762;14770;14778;14827:3;14815:9;14806:7;14802:23;14798:33;14795:120;;;14834:79;;:::i;:::-;14795:120;14954:1;14979:53;15024:7;15015:6;15004:9;15000:22;14979:53;:::i;:::-;14969:63;;14925:117;15081:2;15107:53;15152:7;15143:6;15132:9;15128:22;15107:53;:::i;:::-;15097:63;;15052:118;15209:2;15235:53;15280:7;15271:6;15260:9;15256:22;15235:53;:::i;:::-;15225:63;;15180:118;15365:2;15354:9;15350:18;15337:32;15396:18;15388:6;15385:30;15382:117;;;15418:79;;:::i;:::-;15382:117;15531:64;15587:7;15578:6;15567:9;15563:22;15531:64;:::i;:::-;15513:82;;;;15308:297;14649:963;;;;;;;;:::o;15618:474::-;15686:6;15694;15743:2;15731:9;15722:7;15718:23;15714:32;15711:119;;;15749:79;;:::i;:::-;15711:119;15869:1;15894:53;15939:7;15930:6;15919:9;15915:22;15894:53;:::i;:::-;15884:63;;15840:117;15996:2;16022:53;16067:7;16058:6;16047:9;16043:22;16022:53;:::i;:::-;16012:63;;15967:118;15618:474;;;;;:::o;16098:60::-;16126:3;16147:5;16140:12;;16098:60;;;:::o;16164:142::-;16214:9;16247:53;16265:34;16274:24;16292:5;16274:24;:::i;:::-;16265:34;:::i;:::-;16247:53;:::i;:::-;16234:66;;16164:142;;;:::o;16312:126::-;16362:9;16395:37;16426:5;16395:37;:::i;:::-;16382:50;;16312:126;;;:::o;16444:153::-;16521:9;16554:37;16585:5;16554:37;:::i;:::-;16541:50;;16444:153;;;:::o;16603:185::-;16717:64;16775:5;16717:64;:::i;:::-;16712:3;16705:77;16603:185;;:::o;16794:276::-;16914:4;16952:2;16941:9;16937:18;16929:26;;16965:98;17060:1;17049:9;17045:17;17036:6;16965:98;:::i;:::-;16794:276;;;;:::o;17076:180::-;17124:77;17121:1;17114:88;17221:4;17218:1;17211:15;17245:4;17242:1;17235:15;17262:320;17306:6;17343:1;17337:4;17333:12;17323:22;;17390:1;17384:4;17380:12;17411:18;17401:81;;17467:4;17459:6;17455:17;17445:27;;17401:81;17529:2;17521:6;17518:14;17498:18;17495:38;17492:84;;17548:18;;:::i;:::-;17492:84;17313:269;17262:320;;;:::o;17588:141::-;17637:4;17660:3;17652:11;;17683:3;17680:1;17673:14;17717:4;17714:1;17704:18;17696:26;;17588:141;;;:::o;17735:93::-;17772:6;17819:2;17814;17807:5;17803:14;17799:23;17789:33;;17735:93;;;:::o;17834:107::-;17878:8;17928:5;17922:4;17918:16;17897:37;;17834:107;;;;:::o;17947:393::-;18016:6;18066:1;18054:10;18050:18;18089:97;18119:66;18108:9;18089:97;:::i;:::-;18207:39;18237:8;18226:9;18207:39;:::i;:::-;18195:51;;18279:4;18275:9;18268:5;18264:21;18255:30;;18328:4;18318:8;18314:19;18307:5;18304:30;18294:40;;18023:317;;17947:393;;;;;:::o;18346:142::-;18396:9;18429:53;18447:34;18456:24;18474:5;18456:24;:::i;:::-;18447:34;:::i;:::-;18429:53;:::i;:::-;18416:66;;18346:142;;;:::o;18494:75::-;18537:3;18558:5;18551:12;;18494:75;;;:::o;18575:269::-;18685:39;18716:7;18685:39;:::i;:::-;18746:91;18795:41;18819:16;18795:41;:::i;:::-;18787:6;18780:4;18774:11;18746:91;:::i;:::-;18740:4;18733:105;18651:193;18575:269;;;:::o;18850:73::-;18895:3;18850:73;:::o;18929:189::-;19006:32;;:::i;:::-;19047:65;19105:6;19097;19091:4;19047:65;:::i;:::-;18982:136;18929:189;;:::o;19124:186::-;19184:120;19201:3;19194:5;19191:14;19184:120;;;19255:39;19292:1;19285:5;19255:39;:::i;:::-;19228:1;19221:5;19217:13;19208:22;;19184:120;;;19124:186;;:::o;19316:543::-;19417:2;19412:3;19409:11;19406:446;;;19451:38;19483:5;19451:38;:::i;:::-;19535:29;19553:10;19535:29;:::i;:::-;19525:8;19521:44;19718:2;19706:10;19703:18;19700:49;;;19739:8;19724:23;;19700:49;19762:80;19818:22;19836:3;19818:22;:::i;:::-;19808:8;19804:37;19791:11;19762:80;:::i;:::-;19421:431;;19406:446;19316:543;;;:::o;19865:117::-;19919:8;19969:5;19963:4;19959:16;19938:37;;19865:117;;;;:::o;19988:169::-;20032:6;20065:51;20113:1;20109:6;20101:5;20098:1;20094:13;20065:51;:::i;:::-;20061:56;20146:4;20140;20136:15;20126:25;;20039:118;19988:169;;;;:::o;20162:295::-;20238:4;20384:29;20409:3;20403:4;20384:29;:::i;:::-;20376:37;;20446:3;20443:1;20439:11;20433:4;20430:21;20422:29;;20162:295;;;;:::o;20462:1395::-;20579:37;20612:3;20579:37;:::i;:::-;20681:18;20673:6;20670:30;20667:56;;;20703:18;;:::i;:::-;20667:56;20747:38;20779:4;20773:11;20747:38;:::i;:::-;20832:67;20892:6;20884;20878:4;20832:67;:::i;:::-;20926:1;20950:4;20937:17;;20982:2;20974:6;20971:14;20999:1;20994:618;;;;21656:1;21673:6;21670:77;;;21722:9;21717:3;21713:19;21707:26;21698:35;;21670:77;21773:67;21833:6;21826:5;21773:67;:::i;:::-;21767:4;21760:81;21629:222;20964:887;;20994:618;21046:4;21042:9;21034:6;21030:22;21080:37;21112:4;21080:37;:::i;:::-;21139:1;21153:208;21167:7;21164:1;21161:14;21153:208;;;21246:9;21241:3;21237:19;21231:26;21223:6;21216:42;21297:1;21289:6;21285:14;21275:24;;21344:2;21333:9;21329:18;21316:31;;21190:4;21187:1;21183:12;21178:17;;21153:208;;;21389:6;21380:7;21377:19;21374:179;;;21447:9;21442:3;21438:19;21432:26;21490:48;21532:4;21524:6;21520:17;21509:9;21490:48;:::i;:::-;21482:6;21475:64;21397:156;21374:179;21599:1;21595;21587:6;21583:14;21579:22;21573:4;21566:36;21001:611;;;20964:887;;20554:1303;;;20462:1395;;:::o;21863:169::-;22003:21;21999:1;21991:6;21987:14;21980:45;21863:169;:::o;22038:366::-;22180:3;22201:67;22265:2;22260:3;22201:67;:::i;:::-;22194:74;;22277:93;22366:3;22277:93;:::i;:::-;22395:2;22390:3;22386:12;22379:19;;22038:366;;;:::o;22410:419::-;22576:4;22614:2;22603:9;22599:18;22591:26;;22663:9;22657:4;22653:20;22649:1;22638:9;22634:17;22627:47;22691:131;22817:4;22691:131;:::i;:::-;22683:139;;22410:419;;;:::o;22835:180::-;22883:77;22880:1;22873:88;22980:4;22977:1;22970:15;23004:4;23001:1;22994:15;23021:194;23061:4;23081:20;23099:1;23081:20;:::i;:::-;23076:25;;23115:20;23133:1;23115:20;:::i;:::-;23110:25;;23159:1;23156;23152:9;23144:17;;23183:1;23177:4;23174:11;23171:37;;;23188:18;;:::i;:::-;23171:37;23021:194;;;;:::o;23221:180::-;23269:77;23266:1;23259:88;23366:4;23363:1;23356:15;23390:4;23387:1;23380:15;23407:180;23455:77;23452:1;23445:88;23552:4;23549:1;23542:15;23576:4;23573:1;23566:15;23593:173;23733:25;23729:1;23721:6;23717:14;23710:49;23593:173;:::o;23772:366::-;23914:3;23935:67;23999:2;23994:3;23935:67;:::i;:::-;23928:74;;24011:93;24100:3;24011:93;:::i;:::-;24129:2;24124:3;24120:12;24113:19;;23772:366;;;:::o;24144:419::-;24310:4;24348:2;24337:9;24333:18;24325:26;;24397:9;24391:4;24387:20;24383:1;24372:9;24368:17;24361:47;24425:131;24551:4;24425:131;:::i;:::-;24417:139;;24144:419;;;:::o;24569:168::-;24652:11;24686:6;24681:3;24674:19;24726:4;24721:3;24717:14;24702:29;;24569:168;;;;:::o;24743:114::-;;:::o;24863:362::-;25004:3;25025:65;25088:1;25083:3;25025:65;:::i;:::-;25018:72;;25099:93;25188:3;25099:93;:::i;:::-;25217:1;25212:3;25208:11;25201:18;;24863:362;;;:::o;25231:748::-;25480:4;25518:3;25507:9;25503:19;25495:27;;25532:71;25600:1;25589:9;25585:17;25576:6;25532:71;:::i;:::-;25613:72;25681:2;25670:9;25666:18;25657:6;25613:72;:::i;:::-;25695;25763:2;25752:9;25748:18;25739:6;25695:72;:::i;:::-;25814:9;25808:4;25804:20;25799:2;25788:9;25784:18;25777:48;25842:130;25967:4;25842:130;:::i;:::-;25834:138;;25231:748;;;;;;:::o;25985:149::-;26021:7;26061:66;26054:5;26050:78;26039:89;;25985:149;;;:::o;26140:120::-;26212:23;26229:5;26212:23;:::i;:::-;26205:5;26202:34;26192:62;;26250:1;26247;26240:12;26192:62;26140:120;:::o;26266:141::-;26322:5;26353:6;26347:13;26338:22;;26369:32;26395:5;26369:32;:::i;:::-;26266:141;;;;:::o;26413:349::-;26482:6;26531:2;26519:9;26510:7;26506:23;26502:32;26499:119;;;26537:79;;:::i;:::-;26499:119;26657:1;26682:63;26737:7;26728:6;26717:9;26713:22;26682:63;:::i;:::-;26672:73;;26628:127;26413:349;;;;:::o;26792:831::-;26877:3;26914:5;26908:12;26943:36;26969:9;26943:36;:::i;:::-;26995:71;27059:6;27054:3;26995:71;:::i;:::-;26988:78;;27097:1;27086:9;27082:17;27113:1;27108:164;;;;27286:1;27281:336;;;;27075:542;;27108:164;27192:4;27188:9;27177;27173:25;27168:3;27161:38;27252:6;27245:14;27238:22;27232:4;27228:33;27223:3;27219:43;27212:50;;27108:164;;27281:336;27348:38;27380:5;27348:38;:::i;:::-;27408:1;27422:154;27436:6;27433:1;27430:13;27422:154;;;27510:7;27504:14;27500:1;27495:3;27491:11;27484:35;27560:1;27551:7;27547:15;27536:26;;27458:4;27455:1;27451:12;27446:17;;27422:154;;;27605:1;27600:3;27596:11;27589:18;;27288:329;;27075:542;;26881:742;;26792:831;;;;:::o;27629:508::-;27787:4;27825:2;27814:9;27810:18;27802:26;;27874:9;27868:4;27864:20;27860:1;27849:9;27845:17;27838:47;27902:75;27972:4;27963:6;27902:75;:::i;:::-;27894:83;;28024:9;28018:4;28014:20;28009:2;27998:9;27994:18;27987:48;28052:78;28125:4;28116:6;28052:78;:::i;:::-;28044:86;;27629:508;;;;;:::o;28143:158::-;28283:10;28279:1;28271:6;28267:14;28260:34;28143:158;:::o;28307:365::-;28449:3;28470:66;28534:1;28529:3;28470:66;:::i;:::-;28463:73;;28545:93;28634:3;28545:93;:::i;:::-;28663:2;28658:3;28654:12;28647:19;;28307:365;;;:::o;28678:419::-;28844:4;28882:2;28871:9;28867:18;28859:26;;28931:9;28925:4;28921:20;28917:1;28906:9;28902:17;28895:47;28959:131;29085:4;28959:131;:::i;:::-;28951:139;;28678:419;;;:::o;29103:233::-;29142:3;29165:24;29183:5;29165:24;:::i;:::-;29156:33;;29211:66;29204:5;29201:77;29198:103;;29281:18;;:::i;:::-;29198:103;29328:1;29321:5;29317:13;29310:20;;29103:233;;;:::o;29364:314::-;29460:3;29481:70;29544:6;29539:3;29481:70;:::i;:::-;29474:77;;29561:56;29610:6;29605:3;29598:5;29561:56;:::i;:::-;29642:29;29664:6;29642:29;:::i;:::-;29637:3;29633:39;29626:46;;29364:314;;;;;:::o;29684:660::-;29889:4;29927:3;29916:9;29912:19;29904:27;;29941:71;30009:1;29998:9;29994:17;29985:6;29941:71;:::i;:::-;30022:72;30090:2;30079:9;30075:18;30066:6;30022:72;:::i;:::-;30104;30172:2;30161:9;30157:18;30148:6;30104:72;:::i;:::-;30223:9;30217:4;30213:20;30208:2;30197:9;30193:18;30186:48;30251:86;30332:4;30323:6;30315;30251:86;:::i;:::-;30243:94;;29684:660;;;;;;;;:::o;30350:148::-;30452:11;30489:3;30474:18;;30350:148;;;;:::o;30528:874::-;30631:3;30668:5;30662:12;30697:36;30723:9;30697:36;:::i;:::-;30749:89;30831:6;30826:3;30749:89;:::i;:::-;30742:96;;30869:1;30858:9;30854:17;30885:1;30880:166;;;;31060:1;31055:341;;;;30847:549;;30880:166;30964:4;30960:9;30949;30945:25;30940:3;30933:38;31026:6;31019:14;31012:22;31004:6;31000:35;30995:3;30991:45;30984:52;;30880:166;;31055:341;31122:38;31154:5;31122:38;:::i;:::-;31182:1;31196:154;31210:6;31207:1;31204:13;31196:154;;;31284:7;31278:14;31274:1;31269:3;31265:11;31258:35;31334:1;31325:7;31321:15;31310:26;;31232:4;31229:1;31225:12;31220:17;;31196:154;;;31379:6;31374:3;31370:16;31363:23;;31062:334;;30847:549;;30635:767;;30528:874;;;;:::o;31408:390::-;31514:3;31542:39;31575:5;31542:39;:::i;:::-;31597:89;31679:6;31674:3;31597:89;:::i;:::-;31590:96;;31695:65;31753:6;31748:3;31741:4;31734:5;31730:16;31695:65;:::i;:::-;31785:6;31780:3;31776:16;31769:23;;31518:280;31408:390;;;;:::o;31804:429::-;31981:3;32003:92;32091:3;32082:6;32003:92;:::i;:::-;31996:99;;32112:95;32203:3;32194:6;32112:95;:::i;:::-;32105:102;;32224:3;32217:10;;31804:429;;;;;:::o;32239:79::-;32278:7;32307:5;32296:16;;32239:79;;;:::o;32324:157::-;32429:45;32449:24;32467:5;32449:24;:::i;:::-;32429:45;:::i;:::-;32424:3;32417:58;32324:157;;:::o;32487:256::-;32599:3;32614:75;32685:3;32676:6;32614:75;:::i;:::-;32714:2;32709:3;32705:12;32698:19;;32734:3;32727:10;;32487:256;;;;:::o;32749:242::-;32918:66;32913:3;32906:79;32749:242;:::o;32997:542::-;33220:3;33235:138;33369:3;33235:138;:::i;:::-;33398:2;33393:3;33389:12;33382:19;;33418:95;33509:3;33500:6;33418:95;:::i;:::-;33411:102;;33530:3;33523:10;;32997:542;;;;:::o;33545:555::-;33685:66;33681:1;33673:6;33669:14;33662:90;33786:34;33781:2;33773:6;33769:15;33762:59;33855:34;33850:2;33842:6;33838:15;33831:59;33924:66;33919:2;33911:6;33907:15;33900:91;34026:66;34020:3;34012:6;34008:16;34001:92;33545:555;:::o;34106:404::-;34266:3;34287:86;34369:3;34364;34287:86;:::i;:::-;34280:93;;34382;34471:3;34382:93;:::i;:::-;34500:3;34495;34491:13;34484:20;;34106:404;;;:::o;34516:541::-;34749:3;34771:95;34862:3;34853:6;34771:95;:::i;:::-;34764:102;;34883:148;35027:3;34883:148;:::i;:::-;34876:155;;35048:3;35041:10;;34516:541;;;;:::o;35063:435::-;35243:3;35265:95;35356:3;35347:6;35265:95;:::i;:::-;35258:102;;35377:95;35468:3;35459:6;35377:95;:::i;:::-;35370:102;;35489:3;35482:10;;35063:435;;;;;:::o;35504:315::-;35644:66;35640:1;35632:6;35628:14;35621:90;35745:66;35740:2;35732:6;35728:15;35721:91;35504:315;:::o;35825:402::-;35985:3;36006:85;36088:2;36083:3;36006:85;:::i;:::-;35999:92;;36100:93;36189:3;36100:93;:::i;:::-;36218:2;36213:3;36209:12;36202:19;;35825:402;;;:::o;36233:541::-;36466:3;36488:148;36632:3;36488:148;:::i;:::-;36481:155;;36653:95;36744:3;36735:6;36653:95;:::i;:::-;36646:102;;36765:3;36758:10;;36233:541;;;;:::o;36780:205::-;36949:29;36944:3;36937:42;36780:205;:::o;36991:542::-;37214:3;37229:138;37363:3;37229:138;:::i;:::-;37392:2;37387:3;37383:12;37376:19;;37412:95;37503:3;37494:6;37412:95;:::i;:::-;37405:102;;37524:3;37517:10;;36991:542;;;;:::o;37539:102::-;37581:8;37628:5;37625:1;37621:13;37600:34;;37539:102;;;:::o;37647:848::-;37708:5;37715:4;37739:6;37730:15;;37763:5;37754:14;;37777:712;37798:1;37788:8;37785:15;37777:712;;;37893:4;37888:3;37884:14;37878:4;37875:24;37872:50;;;37902:18;;:::i;:::-;37872:50;37952:1;37942:8;37938:16;37935:451;;;38367:4;38360:5;38356:16;38347:25;;37935:451;38417:4;38411;38407:15;38399:23;;38447:32;38470:8;38447:32;:::i;:::-;38435:44;;37777:712;;;37647:848;;;;;;;:::o;38501:1073::-;38555:5;38746:8;38736:40;;38767:1;38758:10;;38769:5;;38736:40;38795:4;38785:36;;38812:1;38803:10;;38814:5;;38785:36;38881:4;38929:1;38924:27;;;;38965:1;38960:191;;;;38874:277;;38924:27;38942:1;38933:10;;38944:5;;;38960:191;39005:3;38995:8;38992:17;38989:43;;;39012:18;;:::i;:::-;38989:43;39061:8;39058:1;39054:16;39045:25;;39096:3;39089:5;39086:14;39083:40;;;39103:18;;:::i;:::-;39083:40;39136:5;;;38874:277;;39260:2;39250:8;39247:16;39241:3;39235:4;39232:13;39228:36;39210:2;39200:8;39197:16;39192:2;39186:4;39183:12;39179:35;39163:111;39160:246;;;39316:8;39310:4;39306:19;39297:28;;39351:3;39344:5;39341:14;39338:40;;;39358:18;;:::i;:::-;39338:40;39391:5;;39160:246;39431:42;39469:3;39459:8;39453:4;39450:1;39431:42;:::i;:::-;39416:57;;;;39505:4;39500:3;39496:14;39489:5;39486:25;39483:51;;;39514:18;;:::i;:::-;39483:51;39563:4;39556:5;39552:16;39543:25;;38501:1073;;;;;;:::o;39580:281::-;39638:5;39662:23;39680:4;39662:23;:::i;:::-;39654:31;;39706:25;39722:8;39706:25;:::i;:::-;39694:37;;39750:104;39787:66;39777:8;39771:4;39750:104;:::i;:::-;39741:113;;39580:281;;;;:::o;39867:410::-;39907:7;39930:20;39948:1;39930:20;:::i;:::-;39925:25;;39964:20;39982:1;39964:20;:::i;:::-;39959:25;;40019:1;40016;40012:9;40041:30;40059:11;40041:30;:::i;:::-;40030:41;;40220:1;40211:7;40207:15;40204:1;40201:22;40181:1;40174:9;40154:83;40131:139;;40250:18;;:::i;:::-;40131:139;39915:362;39867:410;;;;:::o;40283:180::-;40331:77;40328:1;40321:88;40428:4;40425:1;40418:15;40452:4;40449:1;40442:15;40469:185;40509:1;40526:20;40544:1;40526:20;:::i;:::-;40521:25;;40560:20;40578:1;40560:20;:::i;:::-;40555:25;;40599:1;40589:35;;40604:18;;:::i;:::-;40589:35;40646:1;40643;40639:9;40634:14;;40469:185;;;;:::o

Swarm Source

ipfs://352d4f85952e9d137a1cad99205d2eccb2ed4b4cefad1b2abeaf0baa844523fb
Loading...
Loading
Loading...
Loading
[ 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.