APE Price: $1.00 (-1.18%)
    /

    Token

    yarts (YART)

    Overview

    Max Total Supply

    8,899 YART

    Holders

    7,711

    Market

    Volume (24H)

    N/A

    Min Price (24H)

    N/A

    Max Price (24H)

    N/A
    Balance
    1 YART
    0xebe326d8de3413f8132518dcfd45e6cbff7e5c27
    Loading...
    Loading
    Loading...
    Loading
    Loading...
    Loading

    Click here to update the token information / general information

    Contract Source Code Verified (Exact Match)

    Contract Name:
    Yarts

    Compiler Version
    v0.8.27+commit.40a35a09

    Optimization Enabled:
    Yes with 200 runs

    Other Settings:
    paris EvmVersion
    File 1 of 22 : Yarts.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.27;
    /**
    * _
    * | |
    * _ _ __ _ _ __ | |_ ___
    * | | | | / _` || '__|| __|/ __|
    * | |_| || (_| || | | |_ \__ \
    * \__, | \__,_||_| \__||___/
    * __/ |
    * |___/
    *
    *
    * (c) 2024 by Laidback Ventures
    *
    * Yarts is an experimental art project on blockchain.
    * Each yart that is minted is a unique piece of art.
    * It belongs to the owner and can be traded or sold.
    * Laidback Ventures is not responsible for any loss of funds.
    *
    * Use at your own risk.
    *
    * @title Yarts
    * @author Laidback Ventures
    * @notice This is the main contract for the Yarts platform
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 22 : Ownable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
    pragma solidity ^0.8.20;
    import {Context} from "../utils/Context.sol";
    /**
    * @dev Contract module which provides a basic access control mechanism, where
    * there is an account (an owner) that can be granted exclusive access to
    * specific functions.
    *
    * The initial owner is set to the address provided by the deployer. This can
    * later be changed with {transferOwnership}.
    *
    * This module is used through inheritance. It will make available the modifier
    * `onlyOwner`, which can be applied to your functions to restrict their use to
    * the owner.
    */
    abstract contract Ownable is Context {
    address private _owner;
    /**
    * @dev The caller account is not authorized to perform an operation.
    */
    error OwnableUnauthorizedAccount(address account);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 22 : draft-IERC6093.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Standard ERC-20 Errors
    * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
    */
    interface IERC20Errors {
    /**
    * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    * @param balance Current balance for the interacting account.
    * @param needed Minimum amount required to perform a transfer.
    */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    /**
    * @dev Indicates a failure with the token `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    */
    error ERC20InvalidSender(address sender);
    /**
    * @dev Indicates a failure with the token `receiver`. Used in transfers.
    * @param receiver Address to which tokens are being transferred.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 22 : IERC2981.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC2981.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../utils/introspection/IERC165.sol";
    /**
    * @dev Interface for the NFT Royalty Standard.
    *
    * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
    * support for royalty payments across all NFT marketplaces and ecosystem participants.
    */
    interface IERC2981 is IERC165 {
    /**
    * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
    * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
    *
    * NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the
    * royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.
    */
    function royaltyInfo(
    uint256 tokenId,
    uint256 salePrice
    ) external view returns (address receiver, uint256 royaltyAmount);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 22 : ERC2981.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/common/ERC2981.sol)
    pragma solidity ^0.8.20;
    import {IERC2981} from "../../interfaces/IERC2981.sol";
    import {IERC165, ERC165} from "../../utils/introspection/ERC165.sol";
    /**
    * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
    *
    * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
    * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
    *
    * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
    * fee is specified in basis points by default.
    *
    * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
    * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to
    * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
    */
    abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
    address receiver;
    uint96 royaltyFraction;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 22 : ERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/ERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "./IERC721.sol";
    import {IERC721Metadata} from "./extensions/IERC721Metadata.sol";
    import {ERC721Utils} from "./utils/ERC721Utils.sol";
    import {Context} from "../../utils/Context.sol";
    import {Strings} from "../../utils/Strings.sol";
    import {IERC165, ERC165} from "../../utils/introspection/ERC165.sol";
    import {IERC721Errors} from "../../interfaces/draft-IERC6093.sol";
    /**
    * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including
    * the Metadata extension, but not including the Enumerable extension, which is available separately as
    * {ERC721Enumerable}.
    */
    abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors {
    using Strings for uint256;
    // Token name
    string private _name;
    // Token symbol
    string private _symbol;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 22 : ERC721Burnable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Burnable.sol)
    pragma solidity ^0.8.20;
    import {ERC721} from "../ERC721.sol";
    import {Context} from "../../../utils/Context.sol";
    /**
    * @title ERC-721 Burnable Token
    * @dev ERC-721 Token that can be burned (destroyed).
    */
    abstract contract ERC721Burnable is Context, ERC721 {
    /**
    * @dev Burns `tokenId`. See {ERC721-_burn}.
    *
    * Requirements:
    *
    * - The caller must own `tokenId` or be an approved operator.
    */
    function burn(uint256 tokenId) public virtual {
    // Setting an "auth" arguments enables the `_isAuthorized` check which verifies that the token exists
    // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here.
    _update(address(0), tokenId, _msgSender());
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 22 : ERC721Royalty.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Royalty.sol)
    pragma solidity ^0.8.20;
    import {ERC721} from "../ERC721.sol";
    import {ERC2981} from "../../common/ERC2981.sol";
    /**
    * @dev Extension of ERC-721 with the ERC-2981 NFT Royalty Standard, a standardized way to retrieve royalty payment
    * information.
    *
    * Royalty information can be specified globally for all token ids via {ERC2981-_setDefaultRoyalty}, and/or individually
    * for specific token ids via {ERC2981-_setTokenRoyalty}. The latter takes precedence over the first.
    *
    * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
    * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to
    * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
    */
    abstract contract ERC721Royalty is ERC2981, ERC721 {
    /**
    * @dev See {IERC165-supportsInterface}.
    */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC2981) returns (bool) {
    return super.supportsInterface(interfaceId);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 22 : IERC721Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "../IERC721.sol";
    /**
    * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
    * @dev See https://eips.ethereum.org/EIPS/eip-721
    */
    interface IERC721Metadata is IERC721 {
    /**
    * @dev Returns the token collection name.
    */
    function name() external view returns (string memory);
    /**
    * @dev Returns the token collection symbol.
    */
    function symbol() external view returns (string memory);
    /**
    * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    */
    function tokenURI(uint256 tokenId) external view returns (string memory);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 22 : IERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../../utils/introspection/IERC165.sol";
    /**
    * @dev Required interface of an ERC-721 compliant contract.
    */
    interface IERC721 is IERC165 {
    /**
    * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
    */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 22 : IERC721Receiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721Receiver.sol)
    pragma solidity ^0.8.20;
    /**
    * @title ERC-721 token receiver interface
    * @dev Interface for any contract that wants to support safeTransfers
    * from ERC-721 asset contracts.
    */
    interface IERC721Receiver {
    /**
    * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
    * by `operator` from `from`, this function is called.
    *
    * It must return its Solidity selector to confirm the token transfer.
    * If any other value is returned or the interface is not implemented by the recipient, the transfer will be
    * reverted.
    *
    * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
    */
    function onERC721Received(
    address operator,
    address from,
    uint256 tokenId,
    bytes calldata data
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 22 : ERC721Utils.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/utils/ERC721Utils.sol)
    pragma solidity ^0.8.20;
    import {IERC721Receiver} from "../IERC721Receiver.sol";
    import {IERC721Errors} from "../../../interfaces/draft-IERC6093.sol";
    /**
    * @dev Library that provide common ERC-721 utility functions.
    *
    * See https://eips.ethereum.org/EIPS/eip-721[ERC-721].
    *
    * _Available since v5.1._
    */
    library ERC721Utils {
    /**
    * @dev Performs an acceptance check for the provided `operator` by calling {IERC721-onERC721Received}
    * on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).
    *
    * The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).
    * Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept
    * the transfer.
    */
    function checkOnERC721Received(
    address operator,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 22 : Base64.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Base64.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Provides a set of functions to operate with Base64 strings.
    */
    library Base64 {
    /**
    * @dev Base64 Encoding/Decoding Table
    * See sections 4 and 5 of https://datatracker.ietf.org/doc/html/rfc4648
    */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    string internal constant _TABLE_URL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
    /**
    * @dev Converts a `bytes` to its Bytes64 `string` representation.
    */
    function encode(bytes memory data) internal pure returns (string memory) {
    return _encode(data, _TABLE, true);
    }
    /**
    * @dev Converts a `bytes` to its Bytes64Url `string` representation.
    * Output is not padded with `=` as specified in https://www.rfc-editor.org/rfc/rfc4648[rfc4648].
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 22 : Context.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Provides information about the current execution context, including the
    * sender of the transaction and its data. While these are generally available
    * via msg.sender and msg.data, they should not be accessed in such a direct
    * manner, since when dealing with meta-transactions the account sending and
    * paying for execution may not be the actual sender (as far as an application
    * is concerned).
    *
    * This contract is only required for intermediate, library-like contracts.
    */
    abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
    return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
    return msg.data;
    }
    function _contextSuffixLength() internal view virtual returns (uint256) {
    return 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 22 : ERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "./IERC165.sol";
    /**
    * @dev Implementation of the {IERC165} interface.
    *
    * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
    * for the additional interface id that will be supported. For example:
    *
    * ```solidity
    * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
    * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
    * }
    * ```
    */
    abstract contract ERC165 is IERC165 {
    /**
    * @dev See {IERC165-supportsInterface}.
    */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
    return interfaceId == type(IERC165).interfaceId;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 22 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-165 standard, as defined in the
    * https://eips.ethereum.org/EIPS/eip-165[ERC].
    *
    * Implementers can declare support of contract interfaces, which can then be
    * queried by others ({ERC165Checker}).
    *
    * For an implementation, see {ERC165}.
    */
    interface IERC165 {
    /**
    * @dev Returns true if this contract implements the interface defined by
    * `interfaceId`. See the corresponding
    * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
    * to learn more about how these ids are created.
    *
    * This function call must use less than 30 000 gas.
    */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 22 : Math.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)
    pragma solidity ^0.8.20;
    import {Panic} from "../Panic.sol";
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    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 success flag (no overflow).
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
    unchecked {
    uint256 c = a + b;
    if (c < a) return (false, 0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 22 : SafeCast.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)
    // This file was procedurally generated from scripts/generate/templates/SafeCast.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
    * checks.
    *
    * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
    * easily result in undesired exploitation or bugs, since developers usually
    * assume that overflows raise errors. `SafeCast` restores this intuition by
    * reverting the transaction when such an operation overflows.
    *
    * Using this library instead of the unchecked operations eliminates an entire
    * class of bugs, so it's recommended to use it always.
    */
    library SafeCast {
    /**
    * @dev Value doesn't fit in an uint of `bits` size.
    */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
    /**
    * @dev An int value doesn't fit in an uint of `bits` size.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 22 : SignedMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SignedMath.sol)
    pragma solidity ^0.8.20;
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard signed math utilities missing in the Solidity language.
    */
    library SignedMath {
    /**
    * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.
    *
    * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.
    * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute
    * one branch when needed, making this function more expensive.
    */
    function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {
    unchecked {
    // branchless ternary works because:
    // b ^ (a ^ b) == a
    // b ^ 0 == b
    return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 22 : Panic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Helper library for emitting standardized panic codes.
    *
    * ```solidity
    * contract Example {
    * using Panic for uint256;
    *
    * // Use any of the declared internal constants
    * function foo() { Panic.GENERIC.panic(); }
    *
    * // Alternatively
    * function foo() { Panic.panic(Panic.GENERIC); }
    * }
    * ```
    *
    * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
    *
    * _Available since v5.1._
    */
    // slither-disable-next-line unused-state
    library Panic {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 22 : Strings.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Strings.sol)
    pragma solidity ^0.8.20;
    import {Math} from "./math/Math.sol";
    import {SignedMath} from "./math/SignedMath.sol";
    /**
    * @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;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 22 : console.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.4.22 <0.9.0;
    library console {
    address constant CONSOLE_ADDRESS =
    0x000000000000000000636F6e736F6c652e6c6f67;
    function _sendLogPayloadImplementation(bytes memory payload) internal view {
    address consoleAddress = CONSOLE_ADDRESS;
    /// @solidity memory-safe-assembly
    assembly {
    pop(
    staticcall(
    gas(),
    consoleAddress,
    add(payload, 32),
    mload(payload),
    0,
    0
    )
    )
    }
    }
    function _castToPure(
    function(bytes memory) internal view fnIn
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    {
    "optimizer": {
    "enabled": true,
    "runs": 200
    },
    "viaIR": true,
    "evmVersion": "paris",
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    "devdoc",
    "userdoc",
    "metadata",
    "abi"
    ]
    }
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    [{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AllShipsMinted","type":"error"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidDefaultRoyalty","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidDefaultRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"ERC2981InvalidTokenRoyalty","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC2981InvalidTokenRoyaltyReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"InsufficientFunds","type":"error"},{"inputs":[{"internalType":"uint8","name":"position","type":"uint8"}],"name":"InvalidPosition","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"NotGameContract","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","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":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"string","name":"tokenURI","type":"string"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"UpdatePrice","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnByGameContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gameContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getColors","outputs":[{"components":[{"internalType":"uint8","name":"r","type":"uint8"},{"internalType":"uint8","name":"g","type":"uint8"},{"internalType":"uint8","name":"b","type":"uint8"}],"internalType":"struct Color[10]","name":"","type":"tuple[10]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getImage","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRange","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getShipTypeName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getShootingRange","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"tokenId","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":"address","name":"_receiver","type":"address"},{"internalType":"uint96","name":"_royalty","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gameContract","type":"address"}],"name":"setGameContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

    60a0604052346105cc5761587f6040813803918261001c816105f0565b9384928339810103126105cc5780516001600160a01b03811691908290036105cc576020015161004c60406105f0565b916005835264796172747360d81b602084015261006960406105f0565b60048152631650549560e21b602082015283519092906001600160401b0381116104eb57600254600181811c911680156105c2575b60208210146104cb57601f8111610573575b50602094601f821160011461050c57948192939495600092610501575b50508160011b916000199060031b1c1916176002555b82516001600160401b0381116104eb57600354600181811c911680156104e1575b60208210146104cb57601f8111610471575b506020601f821160011461040a57819293946000926103ff575b50508160011b916000199060031b1c1916176003555b81156103e957600880546001600160a01b03198116841790915582906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36101986105d1565b71c00000008000000000000000000000000000815271fe000000fc000000f8000000f0000000e000602082015260406000808052600c602052209060005b600281106103cc575050506101e96105d1565b72d9f3e00059f3c00019f3800001f000000000008152730fd9f3800fd9f3c007d9f3e003d9f3f001d9f3f060208201526040600060018152600c602052209060005b600281106103af5750505061023e6105d1565b73010f3cfc000f3cfc000f3cf8000f3cf000003c008152733f0f3ce01f0f3cf00f0f3cf8070f3cfc030f3cfc60208201526040600060028152600c602052209060005b60028110610392575050506102946105d1565b72339cfe00339cfc00339cf800039cf000039ce08152737c339ce03c339cf01c339cf80c339cfc04339cfe60208201526040600060038152600c602052209060005b60028110610375575050506102e96105d1565b60008152600060208201526040600060048152600c602052209060005b6002811061035e5750505060016009556080526000906101f460206103296105d1565b83815201526001600160a01b0316607d60a21b179055604051615252908161062d823960805181818161085301526110040152f35b600190602060ff8451169301928185015501610306565b81516001600160a01b0316818401556020909101906001016102d6565b81516001600160a01b031681840155602090910190600101610281565b81516001600160a01b03168184015560209091019060010161022b565b81516001600160901b0316818401556020909101906001016101d6565b631e4fbdf760e01b600052600060045260246000fd5b015190503880610130565b601f198216906003600052806000209160005b81811061045957509583600195969710610440575b505050811b01600355610146565b015160001960f88460031b161c19169055388080610432565b9192602060018192868b01518155019401920161041d565b60036000526104bb907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106104c1575b601f0160051c0190610615565b38610116565b90915081906104ae565b634e487b7160e01b600052602260045260246000fd5b90607f1690610104565b634e487b7160e01b600052604160045260246000fd5b0151905038806100cd565b601f198216956002600052806000209160005b88811061055b57508360019596979810610542575b505050811b016002556100e3565b015160001960f88460031b161c19169055388080610534565b9192602060018192868501518155019401920161051f565b60026000526105bc907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f840160051c810191602085106104c157601f0160051c0190610615565b386100b0565b90607f169061009e565b600080fd5b60408051919082016001600160401b038111838210176104eb57604052565b6040519190601f01601f191682016001600160401b038111838210176104eb57604052565b818110610620575050565b6000815560010161061556fe6105a0806040526004361015610025575b503615610023573461001e57005b600080fd5b005b60003560e01c90816301ffc9a7146113f45750806304634d8d1461131657806306fdde0314611257578063081812fc14611219578063095ea7b31461112a57806318160ddd1461110c57806323b872dd146110f55780632607aafa146110b35780632a55205a1461102757806332cb6b0c14610fec5780633ccfd60b14610f9c578063405ebd4d14610f5957806342842e0e14610f2957806342966c6814610ef65780634490e0f314610eba5780636352211e14610e8a57806370a0823114610e34578063715018a614610dd7578063835f396714610cb45780638da5cb5b14610c8b57806395d89b4114610b93578063a144819414610828578063a22cb46514610787578063b88d4fde146106f2578063c87b56dd1461045a578063c8ab9d1a1461041f578063cc364f48146103d9578063d3f33009146103b0578063e985e9c514610355578063f2fde38b146102cb5763f3119682146101875738610010565b3461001e57602036600319011261001e576004356101a3611755565b506000818152600460205260409020546001600160a01b0316156102b75760405160208101918252602081526101da60408261155f565b51902061026a6101e8611755565b916101f281611cdd565b83526101fd81611d2e565b602084015261020b81611d5e565b604084015261021981611d8e565b606084015261022781611dbe565b608084015261023581611dee565b60a084015261024381611e1e565b60c084015261025181611e4e565b60e084015261025f81611e7e565b610100840152611eae565b610120820152604051906000825b600a8210610286576103c084f35b6020606060019260ff6040875182815116845282868201511686850152015116604082015201930191019091610278565b637e27328960e01b60005260045260246000fd5b3461001e57602036600319011261001e576102e4611479565b6102ec61178b565b6001600160a01b0316801561033f57600880546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b631e4fbdf760e01b600052600060045260246000fd5b3461001e57604036600319011261001e5761036e611479565b61037661148f565b9060018060a01b0316600052600760205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461001e57600036600319011261001e57600a546040516001600160a01b039091168152602090f35b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b757610414602091611c8e565b60ff60405191168152f35b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b757610414602091611c14565b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b7576106866105236104e86002600f8560256104a66106ee98614eb0565b9160266104bd60ff6104b784611c8e565b16614eb0565b9160596104ce60ff6104b784611c14565b60306104f26104ed6104e86104e287611981565b96611ede565b614df3565b611903565b95816040519d8e809b6f7b226e616d65223a202279617274202360801b6020830152602081519485930191016114a5565b89017f222c20226465736372697074696f6e223a20227920617274202d206f6e636861838201527f696e222c202261747472696275746573223a205b7b2274726169745f7479706560508201527f223a20226d6f76656d656e74222c202276616c7565223a20220000000000000060708201526105aa8251809360206089850191016114a5565b01017f227d2c207b2274726169745f74797065223a202272616e6765222c202276616c83820152653ab2911d101160d11b60798201526105f4825180936020607f850191016114a5565b01017f227d2c207b2274726169745f74797065223a202274797065222c202276616c75838201526432911d101160d91b604682015261063d825180936020604b850191016114a5565b01016e113eae96101134b6b0b3b2911d101160891b8382015261066a8251809360206034850191016114a5565b010161227d60f01b838201520301601d1981018452018261155f565b6106da603d60405180937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000060208301526106c981518092602086860191016114a5565b81010301601f19810183528261155f565b6040519182916020835260208301906114c8565b0390f35b3461001e57608036600319011261001e5761070b611479565b61071361148f565b906044356064359267ffffffffffffffff841161001e573660238501121561001e5783600401359261074484611581565b93610752604051958661155f565b808552366024828801011161001e5760208160009260246100239901838901378601015261078183838361159d565b33611aa0565b3461001e57604036600319011261001e576107a0611479565b6024359081151580920361001e576001600160a01b031690811561081357336000526007602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b50630b61174360e31b60005260045260246000fd5b3461001e57604036600319011261001e57610841611479565b6024356009546108518282611729565b7f000000000000000000000000000000000000000000000000000000000000000010610b825761087f61178b565b8115610b3d5761088f8282611729565b1115610b0d576001600160a01b0382169160208315801560005b8581106108c1576108bc86600b54611729565b600b55005b6009546000198114610af75760018101600955604051906108e2868361155f565b8460008352610ae15760008181526004875260408120546001600160a01b03168015159183908c90839060008051602061519d833981519152908a87610aab575b610a94575b84815260048d526040812080546001600160a01b0319168517905580a450610a7e57863b61095b575b50506001016108a9565b9461099991819897966040519384928392630a85bd0160e11b84523360048501526000602485015260448401526080606484015260848301906114c8565b038160008c5af18091600091610a39575b5090610a015787873d156109fa573d6109c281611581565b906109d0604051928361155f565b81523d60008383013e5b805191826109f75783633250574960e11b60005260045260246000fd5b01fd5b60606109da565b949593946001600160e01b03191663757a42ff60e11b01610a2457600188610951565b86633250574960e11b60005260045260246000fd5b8881813d8311610a77575b610a4e818361155f565b81010312610a735751906001600160e01b031982168203610a705750896109aa565b80fd5b5080fd5b503d610a44565b6339e3563760e11b600052600060045260246000fd5b83815260058d526040812060018154019055610928565b50600085815260066020526040902080546001600160a01b031916905582815260058d526040812080546000190190558a610923565b633250574960e11b600052600060045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b81526020600482015260086024820152674f766572666c6f7760c01b6044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606490fd5b63e076d21b60e01b60005260046000fd5b3461001e57600036600319011261001e5760405160006003548060011c90600181168015610c81575b602083108114610c6d57828552908115610c495750600114610be9575b6106ee836106da8185038261155f565b91905060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b916000905b808210610c2f575090915081016020016106da610bd9565b919260018160209254838588010152019101909291610c17565b60ff191660208086019190915291151560051b840190910191506106da9050610bd9565b634e487b7160e01b84526022600452602484fd5b91607f1691610bbc565b3461001e57600036600319011261001e576008546040516001600160a01b039091168152602090f35b3461001e57602036600319011261001e57600a54600435906001600160a01b03163303610dc257610ce4816117b4565b6000828152600460205260408120546001600160a01b031680159184908315610d8d575b81815260046020526040812080546001600160a01b03191690558260008051602061519d8339815191528280a450610d7857610d45600b5461171c565b600b556001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5600080a3005b50637e27328960e01b60005260045260246000fd5b600082815260066020526040902080546001600160a01b03191690558281526005602052604081208054600019019055610d08565b6308af8d7160e41b6000523360045260246000fd5b3461001e57600036600319011261001e57610df061178b565b600880546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461001e57602036600319011261001e576001600160a01b03610e55611479565b168015610e745760005260056020526020604060002054604051908152f35b6322718ad960e21b600052600060045260246000fd5b3461001e57602036600319011261001e576020610ea86004356117b4565b6040516001600160a01b039091168152f35b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b7576106da6106ee91611981565b3461001e57602036600319011261001e57600435610f13816117b4565b610f1d33836117d7565b50610d45600b5461171c565b3461001e57610023610f3a366114ed565b9060405192610f4a60208561155f565b6000845261078183838361159d565b3461001e57602036600319011261001e57610f72611479565b610f7a61178b565b600a80546001600160a01b0319166001600160a01b0392909216919091179055005b3461001e57600036600319011261001e57610fb561178b565b600080808060018060a01b03600854164790828215610fe3575bf115610fd757005b6040513d6000823e3d90fd5b506108fc610fcf565b3461001e57600036600319011261001e5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461001e57604036600319011261001e57600435600090815260016020526040902054602435906001600160a01b0381169060a01c811561109b575b6001600160601b031691828102928184041490151715610af757604080516001600160a01b0390921682526127109092046020820152f35b50506000546001600160a01b0381169060a01c611063565b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b7576106da6104ed6104e86106ee93611ede565b3461001e57610023611106366114ed565b9161159d565b3461001e57600036600319011261001e576020600b54604051908152f35b3461001e57604036600319011261001e57611143611479565b60243561114f816117b4565b33151580611206575b806111d8575b6111c35781906001600160a01b0384811691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4600090815260066020526040902080546001600160a01b0319166001600160a01b03909216919091179055005b63a9fbf51f60e01b6000523360045260246000fd5b506001600160a01b038116600090815260076020908152604080832033845290915290205460ff161561115e565b506001600160a01b038116331415611158565b3461001e57602036600319011261001e57600435611236816117b4565b506000526006602052602060018060a01b0360406000205416604051908152f35b3461001e57600036600319011261001e5760405160006002548060011c9060018116801561130c575b602083108114610c6d57828552908115610c4957506001146112ac576106ee836106da8185038261155f565b91905060026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace916000905b8082106112f2575090915081016020016106da610bd9565b9192600181602092548385880101520191019092916112da565b91607f1691611280565b3461001e57604036600319011261001e5761132f611479565b602435906001600160601b0382169081830361001e5761134d61178b565b61271082116113d9576001600160a01b03169081156113c357604051604081019080821067ffffffffffffffff8311176113ad57604091909152828152602001526001600160a01b031660a09190911b6001600160a01b03191617600055005b634e487b7160e01b600052604160045260246000fd5b635b6cc80560e11b600052600060045260246000fd5b50636f483d0960e01b60005260045261271060245260446000fd5b3461001e57602036600319011261001e576004359063ffffffff60e01b821680920361001e576020916380ac58cd60e01b8114908115611468575b811561143d575b5015158152f35b63152a902d60e11b811491508115611457575b5083611436565b6301ffc9a760e01b14905083611450565b635b5e139f60e01b8114915061142f565b600435906001600160a01b038216820361001e57565b602435906001600160a01b038216820361001e57565b60005b8381106114b85750506000910152565b81810151838201526020016114a8565b906020916114e1815180928185528580860191016114a5565b601f01601f1916010190565b606090600319011261001e576004356001600160a01b038116810361001e57906024356001600160a01b038116810361001e579060443590565b6060810190811067ffffffffffffffff8211176113ad57604052565b60a0810190811067ffffffffffffffff8211176113ad57604052565b90601f8019910116810190811067ffffffffffffffff8211176113ad57604052565b67ffffffffffffffff81116113ad57601f01601f191660200190565b6001600160a01b0390911691908215610ae1576000828152600460205260408120546001600160a01b0316938391859033151580611684575b5060008051602061519d833981519152908261164f575b83815260056020526040812060018154019055848152600460205260408120846001600160601b0360a01b82541617905580a46001600160a01b031680830361163557505050565b6364283d7b60e01b60005260045260245260445260646000fd5b600085815260066020526040902080546001600160a01b031916905582815260056020526040812080546000190190556115ed565b9150919250806116cd575b1561169e5790848492386115d6565b8390856116b757602491637e27328960e01b8252600452fd5b60449163177e802f60e01b825233600452602452fd5b5033851480156116fb575b8061168f5750838152600660205260408120546001600160a01b0316331461168f565b5084815260076020908152604080832033845290915281205460ff166116d8565b8015610af7576000190190565b91908201809211610af757565b6040519061174382611527565b60006040838281528260208201520152565b60405190610140611766818461155f565b8260005b82811061177657505050565b602090611781611736565b818401520161176a565b6008546001600160a01b0316330361179f57565b63118cdaa760e01b6000523360045260246000fd5b6000818152600460205260409020546001600160a01b03169081156102b7575090565b6000818152600460205260409020546001600160a01b0390811692168015158061186d575b505081611836575b600081815260046020526040812080546001600160a01b03191690558260008051602061519d8339815191528280a490565b600081815260066020526040902080546001600160a01b031916905581600052600560205260406000206000198154019055611804565b806118af575b1561187e57806117fc565b826118985750637e27328960e01b60005260045260246000fd5b63177e802f60e01b60005260045260245260446000fd5b5080831480156118df575b8061187357506000828152600660205260409020546001600160a01b03168114611873565b5082600052600760205260406000208160005260205260ff604060002054166118ba565b90611958603a60405180947f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000602083015261194781518092602086860191016114a5565b81010301601f19810184528361155f565b565b90600581101561196b5760051b0190565b634e487b7160e01b600052603260045260246000fd5b611a6f6040519161199183611543565b6040805161199f828261155f565b600a8152693bb4b732103934b232b960b11b6020820152845280516119c4828261155f565b600f81526e3a3934b232b73a1031b93ab4b9b2b960891b6020820152602085015280516119f1828261155f565b60128152713337bab91036b0b9ba1032bc383637b932b960711b6020820152818501528051611a20828261155f565b600f81526e1c9bde585b08199a5d99481b585cdd608a1b60208201526060850152611a4d8151918261155f565b600b81526a19dc985b99081e5858da1d60aa1b60208201526080840152614e5a565b906005821015611a8a5760ff611a8692169061195a565b5190565b634e487b7160e01b600052602160045260246000fd5b823b611aae575b5050505050565b604051630a85bd0160e11b81526001600160a01b039182166004820152918116602483015260448201939093526080606482015291169160209082908190611afa9060848301906114c8565b03816000865af18091600091611b9a575b5090611b6457503d15611b5d573d611b2281611581565b90611b30604051928361155f565b81523d6000602083013e5b80519081611b585782633250574960e11b60005260045260246000fd5b602001fd5b6060611b3b565b6001600160e01b03191663757a42ff60e11b01611b8657503880808080611aa7565b633250574960e11b60005260045260246000fd5b6020813d602011611bd5575b81611bb36020938361155f565b81010312610a735751906001600160e01b031982168203610a70575038611b0b565b3d9150611ba6565b9060ff16908115611bef5760ff160690565b634e487b7160e01b600052601260045260246000fd5b60ff166005811015611a8a5790565b611c71611c6c600560ff60405194611c2b86611543565b600286526003602087015260046040870152826060870152600660808701526040516020810191825260208152611c6360408261155f565b51902016611bdd565b611c05565b6005811015611a8a5760ff9182611c8992169061195a565b511690565b611c71611c6c600560ff60405194611ca586611543565b600686528260208701526004604087015260036060870152600260808701526040516020810191825260208152611c6360408261155f565b611ce5611736565b50611cf1816002614ffa565b90611cfd816003614ffa565b60ff918290611d0d906004614ffa565b918160405195611d1c87611527565b16855216602084015216604082015290565b611d36611736565b50611d42816005614ffa565b90611d4e816006614ffa565b60ff918290611d0d906007614ffa565b611d66611736565b50611d72816008614ffa565b90611d7e816009614ffa565b60ff918290611d0d90600a614ffa565b611d96611736565b50611da281600b614ffa565b90611dae81600c614ffa565b60ff918290611d0d90600d614ffa565b611dc6611736565b50611dd281600e614ffa565b90611dde81600f614ffa565b60ff918290611d0d906010614ffa565b611df6611736565b50611e02816011614ffa565b90611e0e816012614ffa565b60ff918290611d0d906013614ffa565b611e26611736565b50611e32816014614ffa565b90611e3e816015614ffa565b60ff918290611d0d906016614ffa565b611e56611736565b50611e62816017614ffa565b90611e6e816018614ffa565b60ff918290611d0d906019614ffa565b611e86611736565b50611e9281601a614ffa565b90611e9e81601b614ffa565b60ff918290611d0d90601c614ffa565b611eb6611736565b50611ec281601d614ffa565b90611ece81601e614ffa565b60ff918290611d0d90601f614ffa565b90611f05604051602081019084825260208152611efc60408261155f565b51902092614e5a565b6105205260006104c052600882901c60011615614de85760016104c0525b611f2c82611cdd565b61050052611f3982611d2e565b6103e052611f4682611d5e565b61040052611f5382611d8e565b61042052611f6082611dbe565b61056052611f6d82611dee565b6104e052611f7a82611e1e565b61044052611f8782611e4e565b61046052611f9482611e7e565b61048052611fa182611eae565b6104a05260606105408190526040519290611fbc908461155f565b6002835261054051601f1901366020850137611fda61052051615036565b548116611fe68461504f565b52604051602081019182526020815261200060408261155f565b519020600161201161052051615036565b01541661201d8361505c565b5261282060405161058052612035816105805161155f565b6101406105805152601f190136602061058051013760005b60ff811660a08110156120855760ff9160019161207d61206c8761504f565b5184831b161515916105805161506c565b52011661204d565b50509060005b60a061ffff821610156120da576120a18261505c565b5160a061ffff8316019161ffff8311610af75761ffff926120d284600194858286161b16151592166105805161506c565b52011661208b565b505060c06103c08190526040516103a08190526120f7919061155f565b6103a051608690526103a0516020017f3c3f786d6c2076657273696f6e3d22312e3022203f3e3c73766720786d6c6e7390526103a0516040017f3d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076699052610540516103a051017f6577426f783d223020302035303020353030222070726573657276654173706590526103a0516080017f6374526174696f3d22784d696e594d696e206d656574222076657273696f6e3d90526511189718911f60d11b6103a05160a00152610560515160ff166121cc90614eb0565b61038052610560516020015160ff166121e490614eb0565b61012052610560516040015160ff166121fc90614eb0565b610160526104e0515160ff1661221190614eb0565b6104e05160200190815160ff1661222790614eb0565b916104e05160400191825160ff1661223e90614eb0565b92610560515160ff1661225090614eb0565b92610560516020015160ff1661226590614eb0565b95610560516040015160ff1661227a90614eb0565b6104e0515160ff1661228b90614eb0565b925160ff1661229990614eb0565b935160ff166122a790614eb0565b94610500515160ff166122b990614eb0565b96610500516020015160ff166122ce90614eb0565b99610500516040015160ff166122e390614eb0565b6103e0515160ff166122f490614eb0565b926103e0516020015160ff1661230990614eb0565b6080526103e0516040015160ff1661232090614eb0565b60a052610400515160ff1661233490614eb0565b60e052610400516020015160ff1661234b90614eb0565b61036052610400516040015160ff1661236390614eb0565b61034052610420515160ff1661237890614eb0565b61032052610420516020015160ff1661239090614eb0565b61030052610420516040015160ff166123a890614eb0565b6102e052610440515160ff166123bd90614eb0565b6102c052610440516020015160ff166123d590614eb0565b6102a052610440516040015160ff166123ed90614eb0565b61028052610460515160ff1661240290614eb0565b61026052610460516020015160ff1661241a90614eb0565b61024052610460516040015160ff1661243290614eb0565b61022052610480515160ff1661244790614eb0565b61020052610480516020015160ff1661245f90614eb0565b6101e052610480516040015160ff1661247790614eb0565b6101c0526104a0515160ff1661248c90614eb0565b6101a0526104a0516020015160ff166124a490614eb0565b610180526104a0516040015160ff166124bc90614eb0565b610140526000610100526104c05160001460196001612da09f60c89f601b9f839f849f869f869f879f899f899f8a9f8c9f8c9f8d9f9c8f9c8f9e9c8f809e9d601c829f9e60189f849f859f849f879f889e8960169e81809e6022829a98838e98819b614dc35760405161253060408261155f565b828152603160f81b6020820152610100525b60405160c052651e3232b3399f60d11b602060c05101527f3c7374796c6520747970653d22746578742f637373223e000000000000000000602660c05101527f2e6261636b67726f756e64207b2066696c6c3a20233230323432343b207d2e73603d60c05101527f61696c546f70207b2073746f702d636f6c6f723a207267622800000000000000605d60c051015281607661038051516125ee818360c05101602061038051016114a5565b60c05101600b60fa1b828201526101205151906126158260778301602061012051016114a5565b0101600b60fa1b8282015261016051519061263a8260028301602061016051016114a5565b010163293b207d60e01b838201527f2e7361696c426f74746f6d207b2073746f702d636f6c6f723a2072676228000060058201526126828251809360206023850191016114a5565b0101600b60fa1b838201526126a18251809360206023850191016114a5565b0101600b60fa1b838201526126c08251809360206002850191016114a5565b010163293b207d60e01b838201527f2e626f6479436f6c6f7231207b2066696c6c3a207267622800000000000000006005820152612708825180936020601d850191016114a5565b0101600b60fa1b83820152612727825180936020601d850191016114a5565b0101600b60fa1b838201526127468251809360206002850191016114a5565b010163293b207d60e01b838201527f2e626f6479436f6c6f7232207b2066696c6c3a20726762280000000000000000600582015261278e825180936020601d850191016114a5565b0101600b60fa1b838201526127ad825180936020601d850191016114a5565b0101600b60fa1b838201526127cc8251809360206002850191016114a5565b010163293b207d60e01b838201527105cd0ead8d840f640ccd2d8d87440e4cec4560731b60058201526128098251809360206017850191016114a5565b0101600b60fa1b838201526128288251809360206017850191016114a5565b0101600b60fa1b838201526128478251809360206002850191016114a5565b010163293b207d60e01b838201527f2e77696e646f774c696e65207b2066696c6c3a20726762280000000000000000600582015261288f825180936020601d850191016114a5565b0101600b60fa1b8282015260805151906128b282601d83016020608051016114a5565b0101600b60fa1b8282015260a05151906128d58260028301602060a051016114a5565b010163293b207d60e01b828201527305ceed2dcc8deee40f640ccd2d8d87440e4cec4560631b600582015260e051519061291782888301602060e051016114a5565b0101600b60fa1b8282015261036051519061293b82878301602061036051016114a5565b0101600b60fa1b828201526103405151906129608260028301602061034051016114a5565b010163293b207d60e01b828201527405cdac2e6e8e640f640e6e8e4ded6ca7440e4cec45605b1b60058201526103205151906129a682601a8301602061032051016114a5565b0101600b60fa1b828201526103005151906129cb82601a8301602061030051016114a5565b0101600b60fa1b828201526102e05151906129f0826002830160206102e051016114a5565b010163293b207d60e01b828201527405cccd8c2cee640f640e6e8e4ded6ca7440e4cec45605b1b60058201526102c0515190612a3682601a830160206102c051016114a5565b0101600b60fa1b828201526102a0515190612a5b82601a830160206102a051016114a5565b0101600b60fa1b82820152610280515190612a808260028301602061028051016114a5565b010163293b207d60e01b828201527405ce6d2cedccae86240f640ccd2d8d87440e4cec45605b1b6005820152610260515190612ac682601a8301602061026051016114a5565b0101600b60fa1b82820152610240515190612aeb82601a8301602061024051016114a5565b0101600b60fa1b82820152610220515190612b108260028301602061022051016114a5565b010163293b207d60e01b828201527405ce6d2cedccae86440f640ccd2d8d87440e4cec45605b1b6005820152610200515190612b5682601a8301602061020051016114a5565b0101600b60fa1b828201526101e0515190612b7b82601a830160206101e051016114a5565b0101600b60fa1b828201526101c0515190612ba0826002830160206101c051016114a5565b010163293b207d60e01b828201527405ce6d2cedccae86640f640ccd2d8d87440e4cec45605b1b60058201526101a0515190612be682601a830160206101a051016114a5565b0101600b60fa1b82820152610180515190612c0b82601a8301602061018051016114a5565b0101600b60fa1b82820152610140515190612c308260028301602061014051016114a5565b010163293b207d60e01b828201527f2e666c616773426f72646572207b206f7061636974793a0000000000000000006005820152610100515190612c7e82601c8301602061010051016114a5565b0101623b207d60e81b82820152752e626f72646572207b2066696c6c3a2023666666207d60501b601e820152671e17b9ba3cb6329f60c11b60348201527f3c6c696e6561724772616469656e742069643d227361696c4772616469656e74603c8201527f22206772616469656e745472616e73666f726d3d22726f746174652839302922605c8201527f3e203c73746f70206f66667365743d223525222020636c6173733d227361696c607c8201527f546f70222f3e203c73746f70206f66667365743d223935252220636c6173733d609c8201527f227361696c426f74746f6d222f3e203c2f6c696e6561724772616469656e743e60bc820152661e17b232b3399f60c91b60dc82015260c05190030160a8810160c051520160c05161155f565b6005610520511015611a8a5760006105205115600014614dac5750604051612dca6103208261155f565b6102eb81526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d3620313520683220762d3220683120762d31206831207660a08201527f2d3120683120762d3120683120762d3120683120762d3120683120762d3120686103c0518201527f3120762d3120683320763920683820763320682d3120763120682d312076312060e08201527f682d3120763120682d313420762d3120682d3220762d3220682d31207a22202f6101008201527f3e203c6720636c6173733d22666c616773426f72646572223e203c70617468206101208201527f643d224d3133203520683520763320682d357a22202f3e203c2f673e203c2f676101408201527f3e203c673e203c706174682069643d2268756c6c2220643d224d3720313620686101608201527f20313820763120682d3120763120682d3120763120682d3120763120682d31326101808201527f20762d3120682d3220762d322020682d3120207a2220636c6173733d2268756c6101a08201527f6c22202f3e203c706174682069643d2277696e646f774c696e652220643d224d6101c08201527f372031362068313820763120682d3138207a2220636c6173733d2277696e646f6101e08201527f772d6c696e6522202f3e203c2f673e203c672069643d226d617374732220636c6102008201527f6173733d226d61737473223e203c7061746820643d224d31362e3520372076396102208201527f22202f3e203c2f673e203c672069643d22666c6167732220636c6173733d22666102408201527f6c61677320666c616773426f72646572223e203c7061746820643d224d3134206102608201527f362e3520683322202f3e203c2f673e203c672069643d227361696c73222066696102808201527f6c6c3d2275726c28237361696c4772616469656e7429223e203c7061746820646102a08201527f3d224d3920313520762d3120683120762d3120683120762d3120683120762d316102c08201527f20683120762d3120683120762d3120683120762d31206831207637207a22202f6102e08201526a1f101e17b39f101e17b39f60a91b610300820152905b60009160016105205114600014614d955760405161313c6105408261155f565b61050481526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d33203920683120762d3120683120762d3120683120762d60a08201527f3120683320762d3120683720762d3120683320763220683120762d31206833206103c0518201527f763220683120763120683120763120683120763120683120763120683120763160e08201527f20683120763620682d3220763120682d3120763120682d3120763120682d31206101008201527f763120682d313720762d3420682d3220762d3420682d3120762d3120682d31206101208201527f7a222f3e203c6720636c6173733d22666c616773426f72646572223e203c70616101408201527f746820643d224d37203420683520763320682d357a22202f3e203c70617468206101608201527f643d224d3134203320683520763320682d357a22202f3e203c7061746820643d6101808201527f224d3139203420683420763320682d347a22202f3e203c2f673e203c2f673e206101a08201527f3c673e203c706174682069643d2268756c6c2220643d224d36203136206820326101c08201527f3220763120682d3220763120682d3120763120682d3120763120682d312076316101e08201527f20682d313520762d3120683120762d3120683120762d3120682d3220762d31206102008201527f682d32207a2220636c6173733d2268756c6c22202f3e203c706174682069643d6102208201527f2277696e646f772d6c696e652220643d224d31302031382068313520763120686102408201527f2d3135207a2220636c6173733d2277696e646f774c696e65222f3e203c6720696102608201527f643d2277696e646f77732220636c6173733d2277696e646f77223e203c7061746102808201527f682069643d2277696e646f772d312220643d224d3132203138206831207631206102a08201527f682d31207a22202f3e203c706174682069643d2277696e646f772d312220643d6102c08201527f224d313220313820683120763120682d31207a22202f3e203c706174682069646102e08201527f3d2277696e646f772d322220643d224d313220313820683120763120682d31206103008201527f7a22202f3e203c2f673e203c2f673e203c672069643d226d617374732220636c6103208201527f6173733d226d61737473223e203c7061746820643d224d31302e3520362076316103408201527f3022202f3e203c7061746820643d224d31372e3520352076313122202f3e203c6103608201527f7061746820643d224d32312e3520362076313022202f3e203c2f673e203c67206103808201527f69643d22666c6167732220636c6173733d22666c61677320666c616773426f726103a08201527f646572223e203c7061746820643d224d3820352e3520683322202f3e203c70616103c08201527f746820643d224d313520342e3520683322202f3e203c7061746820643d224d326103e08201527f3020352e3520683222202f3e203c2f673e203c672069643d227361696c7322206104008201527f66696c6c3d2275726c28237361696c4772616469656e7429223e203c726563746104208201527f20783d2231322220793d2236222077696474683d223522206865696768743d226104408201527f3922202f3e203c7265637420783d2231392220793d2237222077696474683d226104608201527f3222206865696768743d223822202f3e203c7061746820643d224d37203720686104808201527f3320763820682d3320762d3120682d3120762d3120682d3120762d3120682d316104a08201527f2020762d3220683120762d3120683120762d31206831207a222f3e203c7061746104c08201527f6820643d22204d323220382068312076312068312076312068312076312068316104e08201527f2076312068312076312020683120763220682d36207a22202f3e203c2f673e20610500820152631e17b39f60e11b610520820152925b50600060026105205114600014614d7e575060405161373f6105808261155f565b61055281526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d31203720683120762d3120683120762d3120683420762d60a08201527f3120683620762d3120683320763220683320762d3120683320763320683320766103c0518201527f312068312076312068312076312068312076312068312076312068312076312060e08201527f683120763520682d3320763120682d3120763120682d3120763120682d3120766101008201527f3220682d323120762d3320683120762d3220682d3220762d3420682d31762d316101208201527f20682d31207a222f3e203c6720636c6173733d22666c616773426f72646572226101408201527f3e203c7061746820643d224d35203320683520763320682d357a22202f3e203c6101608201527f7061746820643d224d3131203220683520763320682d357a22202f3e203c70616101808201527f746820643d224d3138203320683420763320682d347a22202f3e203c706174686101a08201527f20643d224d3231203620683420763320682d347a22202f3e203c2f673e203c2f6101c08201527f673e203c673e203c706174682069643d2268756c6c2220643d224d34203136206101e08201527f6820323620763120682d3320763120682d3120763120682d3120763120682d316102008201527f20763220682d313920762d3120683120762d3120683120762d3120683120762d6102208201527f3120682d3220762d3120682d32207a2220636c6173733d2268756c6c22202f3e6102408201527f203c706174682069643d2277696e646f772d6c696e652220643d224d382031386102608201527f2068313820763120682d3138207a2220636c6173733d2277696e646f774c696e6102808201527f65222f3e203c672069643d2277696e646f77732220636c6173733d2277696e646102a08201527f6f77223e203c7061746820643d224d313320313820683120763120682d31207a6102c08201527f22202f3e203c7061746820643d224d313020313820683120763120682d31207a6102e08201527f22202f3e203c7061746820643d224d313920313820683120763120682d31207a6103008201527f22202f3e203c7061746820643d224d323220313820683120763120682d31207a6103208201527f22202f3e203c2f673e203c2f673e203c672069643d226d617374732220636c616103408201527f73733d226d61737473223e203c7061746820643d224d382e35203520763131226103608201527f202f3e203c7061746820643d224d31342e3520342076313222202f3e203c70616103808201527f746820643d224d32302e3520352076313122202f3e203c7061746820643d224d6103a08201527f32332e35203820763822202f3e203c2f673e203c672069643d22666c616773226103c08201527f20636c6173733d22666c61677320666c616773426f72646572223e203c7061746103e08201527f6820643d224d3620342e3520683322202f3e203c7061746820643d224d3132206104008201527f332e3520683322202f3e203c7061746820643d224d313920342e3520683222206104208201527f2f3e203c7061746820643d224d323220372e3520683222202f3e203c2f673e206104408201527f3c672069643d227361696c73222066696c6c3d2275726c28237361696c4772616104608201527f6469656e7429223e203c7265637420783d2231302220793d22352220776964746104808201527f683d223422206865696768743d22313022202f3e203c7265637420783d2231366104a08201527f2220793d2236222077696474683d223422206865696768743d223922202f3e206104c08201527f3c7061746820643d224d34203620683420763920682d3320762d3120682d31206104e08201527f762d3120682d3120762d3120682d312020762d3420683120762d3120683120766105008201527f2d31206831207a222f3e203c7061746820643d22204d323420392068312076316105208201527f206831207631206831207631206831207631206831207631206831207631206861054082015271169b103d1110179f101e17b39f101e17b39f60711b610560820152915b60009360036105205114600014614d6757604051613d9d6106408261155f565b61061e81526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d30203820683120762d3120683120762d3120683120762d60a08201527f3120683120762d3120683320762d3120683320763120683220762d31206833206103c0518201527f763120683220762d3120683320763320683120762d312068332076332068332060e08201527f76312068312076312068312076312068312076312068312076312068312076356101008201527f20682d3320763120682d3120763120682d3120763120682d3120763220682d326101208201527f3220762d3320683120762d3220682d3220762d3420682d3120762d3120682d316101408201527f20762d3120682d31207a22202f3e203c6720636c6173733d22666c616773426f6101608201527f72646572223e203c7061746820643d224d35203220683520763320682d357a226101808201527f202f3e203c7061746820643d224d3130203220683520763320682d357a22202f6101a08201527f3e203c7061746820643d224d3135203220683520763320682d357a22202f3e206101c08201527f3c7061746820643d224d3230203420683420763320682d347a22202f3e203c706101e08201527f61746820643d224d3233203720683420763320682d347a22202f3e203c2f673e6102008201527f203c2f673e203c673e203c706174682069643d2268756c6c2220643d224d34206102208201527f3136206820323720763120682d3320763120682d3120763120682d31207631206102408201527f682d3120763220682d323020762d3120683120762d3120683120762d312068316102608201527f20762d3120682d3220762d3120682d32207a2220636c6173733d2268756c6c226102808201527f202f3e203c706174682069643d2277696e646f772d6c696e652220643d224d386102a08201527f2031382068313920763120682d3139207a2220636c6173733d2277696e646f776102c08201527f4c696e6522202f3e203c672069643d2277696e646f77732220636c6173733d226102e08201527f77696e646f77223e203c7061746820643d224d313120313820683120763120686103008201527f2d31207a22202f3e203c7061746820643d224d313420313820683120763120686103208201527f2d31207a22202f3e203c7061746820643d224d313720313820683120763120686103408201527f2d31207a22202f3e203c7061746820643d224d323020313820683120763120686103608201527f2d31207a22202f3e203c7061746820643d224d323320313820683120763120686103808201527f2d31207a22202f3e203c2f673e203c2f673e203c672069643d226d61737473226103a08201527f20636c6173733d226d61737473223e203c7061746820643d224d382e352034206103c08201527f76313222202f3e203c7061746820643d224d31332e3520342076313222202f3e6103e08201527f203c7061746820643d224d31382e3520342076313222202f3e203c70617468206104008201527f643d224d32322e3520362076313022202f3e203c7061746820643d224d32352e6104208201527f35203920763722202f3e203c2f673e203c672069643d22666c6167732220636c6104408201527f6173733d22666c61677320666c616773426f72646572223e203c7061746820646104608201527f3d224d3620332e3520683322202f3e203c7061746820643d224d313120332e356104808201527f20683322202f3e203c7061746820643d224d313620332e3520683322202f3e206104a08201527f3c7061746820643d224d323120352e3520683222202f3e203c7061746820643d6104c08201527f224d323420382e3520683222202f3e203c2f673e203c672069643d227361696c6104e08201527f73222066696c6c3d2275726c28237361696c4772616469656e7429223e203c726105008201527f65637420783d2231302220793d2235222077696474683d2233222068656967686105208201527f743d22313022202f3e203c7265637420783d2231352220793d223522207769646105408201527f74683d223322206865696768743d22313022202f3e203c7265637420783d22326105608201527f302220793d2237222077696474683d223222206865696768743d223822202f3e6105808201527f203c7061746820643d224d31203920683120762d3120683120762d31206831206105a08201527f762d3120683120762d312068332076313020682d3320762d3120682d3120762d6105c08201527f3120682d3120762d3120682d3120762d3120682d31207a22202f3e203c7061746105e08201527f6820643d224d32362031302068312076312020683120763120683120763120686106008201527f3120763120683120763120682d35207a22202f3e203c2f673e203c2f673e0000610620820152945b50600060046105205114600014614d5057506040516144f16104e08261155f565b6104b481526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d3120313220683520762d3120683220762d31206832207660a08201527f2d3120683220762d3120683220762d3120683120762d312068332076312068316103c0518201527f207631206832207631206832207631206832207631206832207631206835207660e08201527f3320682d3220763120682d3120763120682d3120763120682d3120763120682d6101008201527f323720762d33206831207a22202f3e203c6720636c6173733d22666c616773426101208201527f6f72646572223e203c7061746820643d224d3133203520683520763320682d356101408201527f7a22202f3e203c2f673e203c2f673e203c673e203c706174682069643d2268756101608201527f6c6c2220643d224d32203133206820323920763120682d3220763120682d31206101808201527f763120682d3120763120682d3120763120682d323520762d3120683120762d316101a08201527f20683120762d3120683120762d3120682d32207a2220636c6173733d2268756c6101c08201527f6c22202f3e203c706174682069643d2277696e646f772d6c696e652220643d226101e08201527f4d322031332068323920763120682d3220763120682d323520762d3120682d326102008201527f207a2220636c6173733d2277696e646f774c696e6522202f3e203c672069643d6102208201527f2277696e646f77732220636c6173733d2277696e646f77223e203c70617468206102408201527f643d224d3920313420683120763120682d31207a22202f3e203c7061746820646102608201527f3d224d313320313420683120763120682d31207a22202f3e203c7061746820646102808201527f3d224d313720313420683120763120682d31207a22202f3e203c7061746820646102a08201527f3d224d323120313420683120763120682d31207a22202f3e203c7061746820646102c08201527f3d224d313120313320683120763120682d31207a22202f3e203c7061746820646102e08201527f3d224d313520313320683120763120682d31207a22202f3e203c7061746820646103008201527f3d224d313920313320683120763120682d31207a22202f3e203c7061746820646103208201527f3d224d323320313320683120763120682d31207a22202f3e203c2f673e203c2f6103408201527f673e203c672069643d226d617374732220636c6173733d226d61737473223e206103608201527f3c7061746820643d224d31362e35203720763122202f3e203c2f673e203c67206103808201527f69643d22666c6167732220636c6173733d22666c61677320666c616773426f726103a08201527f646572223e203c7061746820643d224d313420362e3520683322202f3e203c2f6103c08201527f673e203c672069643d22626f6479223e203c6720636c6173733d22626f6479436103e08201527f6f6c6f7231223e203c7061746820643d224d372031322068313920763120682d6104008201527f3139207a22202f3e203c7061746820643d224d313120313020683131207631206104208201527f682d3131207a22202f3e203c7061746820643d224d31352038206833207631206104408201527f682d33207a22202f3e203c2f673e203c6720636c6173733d22626f6479436f6c6104608201527f6f7232223e203c7061746820643d224d392031312068313520763120682d31356104808201527f207a22202f3e203c7061746820643d224d3133203920683720763120682d37206104a0820152733d1110179f101e17b39f101e17b39f101e17b39f60611b6104c0820152925b604051614a7c60808261155f565b605781527f3c672069643d227369676e65747322207472616e73666f726d3d227363616c6560208201527f28313029207472616e736c617465283920313329223e203c672069643d22736960408201527f676e6574312220636c6173733d227369676e657431223e000000000000000000610540518201529560005b610580515161ffff821690811015614c0657614b17906105805161506c565b51614b32575b61ffff1661ffff8114610af757600101614af8565b96601f881661ffff8111610af757614b4990614eb0565b60056107ff8a821c160161ffff8111610af7576010600161ffff94600a614b7487614bfe9616614eb0565b60206040519784614b8e8a9651809285808a0191016114a5565b8501693c7061746820643d224d60b01b83820152614bb58251809385602a850191016114a5565b0101600160fd1b83820152614bd4825180936020600b850191016114a5565b01016f103418903b1890341698903d1110179f60811b838201520301600f1981018452018261155f565b979050614b1d565b50509295909394919460405190816020810193848151602081930191614c2b926114a5565b810160208101681e17b39f101e17b39f60b91b90520360200160161981018352600901614c58908361155f565b604094855194614c68878761155f565b600686526020860196651e17b9bb339f60d11b8852519889986103a0515160208b01816103a05160200191614c9c926114a5565b8a0160c0515190602081018260c05160200191614cb8926114a5565b01602001808251602081940191614cce926114a5565b01808251602081940191614ce1926114a5565b01808251602081940191614cf4926114a5565b01808251602081940191614d07926114a5565b01808251602081940191614d1a926114a5565b01918291518093614d2a926114a5565b01918291518093614d3a926114a5565b0103601f1981018252614d4d908261155f565b90565b60405190614d5f60208361155f565b815292614a6e565b604051614d7560208261155f565b858152946144d0565b60405190614d8d60208361155f565b815291613d7d565b604051614da360208261155f565b8381529261371e565b60405190614dbb60208361155f565b81529061311c565b6040805190614dd2908261155f565b828152600360fc1b602082015261010052612542565b60006104c052611f23565b604051614d4d91614e0560608361155f565b604082527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208301527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040830152615080565b611c6c600560ff614d4d936040516020810191825260208152611c6360408261155f565b90614e8882611581565b614e95604051918261155f565b8281528092614ea6601f1991611581565b0190602036910137565b8060009172184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b821015614fd7575b806d04ee2d6d415b85acef8100000000600a921015614fbc575b662386f26fc10000811015614fa8575b6305f5e100811015614f97575b612710811015614f88575b6064811015614f7a575b1015614f6f575b600a6021614f3660018501614e7e565b938401015b60001901916f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353048015614f6a57600a9091614f3b565b505090565b600190910190614f26565b606460029104930192614f1f565b61271060049104930192614f15565b6305f5e10060089104930192614f0a565b662386f26fc1000060109104930192614efd565b6d04ee2d6d415b85acef810000000060209104930192614eed565b506040915072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8104614ed3565b60ff8116601f8111615022575060031b906107f860f8831692168203610af75760ff911c1690565b634e6153af60e11b60005260045260246000fd5b6005811015611a8a57600052600c602052604060002090565b80511561196b5760200190565b80516001101561196b5760400190565b805182101561196b5760209160051b010190565b91909180511561516457805160028101809111610af75760039004600281901b906001600160fe1b03811603610af7576150b990614e7e565b9060208201908081518201956020870190815192600083525b8881106151165750506003939495965052510680600114615103576002146150f8575090565b603d90600019015390565b50603d9081600019820153600119015390565b600360049199969901986001603f8b5182828260121c16870101518453828282600c1c16870101518385015382828260061c16870101516002850153168401015160038201530194976150d2565b50905060405161517560208261155f565b600081529056fe3c672069643d22626f726465722220636c6173733d22626f72646572223e203cddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef20636c6173733d226261636b67726f756e6422202f3e3c67207472616e73666f726d3d227363616c6528313029207472616e736c617465283920313329223e203c726563742077696474683d223130302522206865696768743d223130302522a264697066735822122099b3153f0ad00be3ebc0476ffc2657b939bdd2ecfbcd3c2548b2aca7fe4dbd8464736f6c634300081b0033000000000000000000000000fd173ce20f447e95a9b53748530acd6a662c9a9f00000000000000000000000000000000000000000000000000000000000022c4

    Deployed Bytecode

    0x6105a0806040526004361015610025575b503615610023573461001e57005b600080fd5b005b60003560e01c90816301ffc9a7146113f45750806304634d8d1461131657806306fdde0314611257578063081812fc14611219578063095ea7b31461112a57806318160ddd1461110c57806323b872dd146110f55780632607aafa146110b35780632a55205a1461102757806332cb6b0c14610fec5780633ccfd60b14610f9c578063405ebd4d14610f5957806342842e0e14610f2957806342966c6814610ef65780634490e0f314610eba5780636352211e14610e8a57806370a0823114610e34578063715018a614610dd7578063835f396714610cb45780638da5cb5b14610c8b57806395d89b4114610b93578063a144819414610828578063a22cb46514610787578063b88d4fde146106f2578063c87b56dd1461045a578063c8ab9d1a1461041f578063cc364f48146103d9578063d3f33009146103b0578063e985e9c514610355578063f2fde38b146102cb5763f3119682146101875738610010565b3461001e57602036600319011261001e576004356101a3611755565b506000818152600460205260409020546001600160a01b0316156102b75760405160208101918252602081526101da60408261155f565b51902061026a6101e8611755565b916101f281611cdd565b83526101fd81611d2e565b602084015261020b81611d5e565b604084015261021981611d8e565b606084015261022781611dbe565b608084015261023581611dee565b60a084015261024381611e1e565b60c084015261025181611e4e565b60e084015261025f81611e7e565b610100840152611eae565b610120820152604051906000825b600a8210610286576103c084f35b6020606060019260ff6040875182815116845282868201511686850152015116604082015201930191019091610278565b637e27328960e01b60005260045260246000fd5b3461001e57602036600319011261001e576102e4611479565b6102ec61178b565b6001600160a01b0316801561033f57600880546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b631e4fbdf760e01b600052600060045260246000fd5b3461001e57604036600319011261001e5761036e611479565b61037661148f565b9060018060a01b0316600052600760205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461001e57600036600319011261001e57600a546040516001600160a01b039091168152602090f35b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b757610414602091611c8e565b60ff60405191168152f35b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b757610414602091611c14565b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b7576106866105236104e86002600f8560256104a66106ee98614eb0565b9160266104bd60ff6104b784611c8e565b16614eb0565b9160596104ce60ff6104b784611c14565b60306104f26104ed6104e86104e287611981565b96611ede565b614df3565b611903565b95816040519d8e809b6f7b226e616d65223a202279617274202360801b6020830152602081519485930191016114a5565b89017f222c20226465736372697074696f6e223a20227920617274202d206f6e636861838201527f696e222c202261747472696275746573223a205b7b2274726169745f7479706560508201527f223a20226d6f76656d656e74222c202276616c7565223a20220000000000000060708201526105aa8251809360206089850191016114a5565b01017f227d2c207b2274726169745f74797065223a202272616e6765222c202276616c83820152653ab2911d101160d11b60798201526105f4825180936020607f850191016114a5565b01017f227d2c207b2274726169745f74797065223a202274797065222c202276616c75838201526432911d101160d91b604682015261063d825180936020604b850191016114a5565b01016e113eae96101134b6b0b3b2911d101160891b8382015261066a8251809360206034850191016114a5565b010161227d60f01b838201520301601d1981018452018261155f565b6106da603d60405180937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000060208301526106c981518092602086860191016114a5565b81010301601f19810183528261155f565b6040519182916020835260208301906114c8565b0390f35b3461001e57608036600319011261001e5761070b611479565b61071361148f565b906044356064359267ffffffffffffffff841161001e573660238501121561001e5783600401359261074484611581565b93610752604051958661155f565b808552366024828801011161001e5760208160009260246100239901838901378601015261078183838361159d565b33611aa0565b3461001e57604036600319011261001e576107a0611479565b6024359081151580920361001e576001600160a01b031690811561081357336000526007602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b50630b61174360e31b60005260045260246000fd5b3461001e57604036600319011261001e57610841611479565b6024356009546108518282611729565b7f00000000000000000000000000000000000000000000000000000000000022c410610b825761087f61178b565b8115610b3d5761088f8282611729565b1115610b0d576001600160a01b0382169160208315801560005b8581106108c1576108bc86600b54611729565b600b55005b6009546000198114610af75760018101600955604051906108e2868361155f565b8460008352610ae15760008181526004875260408120546001600160a01b03168015159183908c90839060008051602061519d833981519152908a87610aab575b610a94575b84815260048d526040812080546001600160a01b0319168517905580a450610a7e57863b61095b575b50506001016108a9565b9461099991819897966040519384928392630a85bd0160e11b84523360048501526000602485015260448401526080606484015260848301906114c8565b038160008c5af18091600091610a39575b5090610a015787873d156109fa573d6109c281611581565b906109d0604051928361155f565b81523d60008383013e5b805191826109f75783633250574960e11b60005260045260246000fd5b01fd5b60606109da565b949593946001600160e01b03191663757a42ff60e11b01610a2457600188610951565b86633250574960e11b60005260045260246000fd5b8881813d8311610a77575b610a4e818361155f565b81010312610a735751906001600160e01b031982168203610a705750896109aa565b80fd5b5080fd5b503d610a44565b6339e3563760e11b600052600060045260246000fd5b83815260058d526040812060018154019055610928565b50600085815260066020526040902080546001600160a01b031916905582815260058d526040812080546000190190558a610923565b633250574960e11b600052600060045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b81526020600482015260086024820152674f766572666c6f7760c01b6044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606490fd5b63e076d21b60e01b60005260046000fd5b3461001e57600036600319011261001e5760405160006003548060011c90600181168015610c81575b602083108114610c6d57828552908115610c495750600114610be9575b6106ee836106da8185038261155f565b91905060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b916000905b808210610c2f575090915081016020016106da610bd9565b919260018160209254838588010152019101909291610c17565b60ff191660208086019190915291151560051b840190910191506106da9050610bd9565b634e487b7160e01b84526022600452602484fd5b91607f1691610bbc565b3461001e57600036600319011261001e576008546040516001600160a01b039091168152602090f35b3461001e57602036600319011261001e57600a54600435906001600160a01b03163303610dc257610ce4816117b4565b6000828152600460205260408120546001600160a01b031680159184908315610d8d575b81815260046020526040812080546001600160a01b03191690558260008051602061519d8339815191528280a450610d7857610d45600b5461171c565b600b556001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5600080a3005b50637e27328960e01b60005260045260246000fd5b600082815260066020526040902080546001600160a01b03191690558281526005602052604081208054600019019055610d08565b6308af8d7160e41b6000523360045260246000fd5b3461001e57600036600319011261001e57610df061178b565b600880546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461001e57602036600319011261001e576001600160a01b03610e55611479565b168015610e745760005260056020526020604060002054604051908152f35b6322718ad960e21b600052600060045260246000fd5b3461001e57602036600319011261001e576020610ea86004356117b4565b6040516001600160a01b039091168152f35b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b7576106da6106ee91611981565b3461001e57602036600319011261001e57600435610f13816117b4565b610f1d33836117d7565b50610d45600b5461171c565b3461001e57610023610f3a366114ed565b9060405192610f4a60208561155f565b6000845261078183838361159d565b3461001e57602036600319011261001e57610f72611479565b610f7a61178b565b600a80546001600160a01b0319166001600160a01b0392909216919091179055005b3461001e57600036600319011261001e57610fb561178b565b600080808060018060a01b03600854164790828215610fe3575bf115610fd757005b6040513d6000823e3d90fd5b506108fc610fcf565b3461001e57600036600319011261001e5760206040517f00000000000000000000000000000000000000000000000000000000000022c48152f35b3461001e57604036600319011261001e57600435600090815260016020526040902054602435906001600160a01b0381169060a01c811561109b575b6001600160601b031691828102928184041490151715610af757604080516001600160a01b0390921682526127109092046020820152f35b50506000546001600160a01b0381169060a01c611063565b3461001e57602036600319011261001e5760043580600052600460205260018060a01b0360406000205416156102b7576106da6104ed6104e86106ee93611ede565b3461001e57610023611106366114ed565b9161159d565b3461001e57600036600319011261001e576020600b54604051908152f35b3461001e57604036600319011261001e57611143611479565b60243561114f816117b4565b33151580611206575b806111d8575b6111c35781906001600160a01b0384811691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4600090815260066020526040902080546001600160a01b0319166001600160a01b03909216919091179055005b63a9fbf51f60e01b6000523360045260246000fd5b506001600160a01b038116600090815260076020908152604080832033845290915290205460ff161561115e565b506001600160a01b038116331415611158565b3461001e57602036600319011261001e57600435611236816117b4565b506000526006602052602060018060a01b0360406000205416604051908152f35b3461001e57600036600319011261001e5760405160006002548060011c9060018116801561130c575b602083108114610c6d57828552908115610c4957506001146112ac576106ee836106da8185038261155f565b91905060026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace916000905b8082106112f2575090915081016020016106da610bd9565b9192600181602092548385880101520191019092916112da565b91607f1691611280565b3461001e57604036600319011261001e5761132f611479565b602435906001600160601b0382169081830361001e5761134d61178b565b61271082116113d9576001600160a01b03169081156113c357604051604081019080821067ffffffffffffffff8311176113ad57604091909152828152602001526001600160a01b031660a09190911b6001600160a01b03191617600055005b634e487b7160e01b600052604160045260246000fd5b635b6cc80560e11b600052600060045260246000fd5b50636f483d0960e01b60005260045261271060245260446000fd5b3461001e57602036600319011261001e576004359063ffffffff60e01b821680920361001e576020916380ac58cd60e01b8114908115611468575b811561143d575b5015158152f35b63152a902d60e11b811491508115611457575b5083611436565b6301ffc9a760e01b14905083611450565b635b5e139f60e01b8114915061142f565b600435906001600160a01b038216820361001e57565b602435906001600160a01b038216820361001e57565b60005b8381106114b85750506000910152565b81810151838201526020016114a8565b906020916114e1815180928185528580860191016114a5565b601f01601f1916010190565b606090600319011261001e576004356001600160a01b038116810361001e57906024356001600160a01b038116810361001e579060443590565b6060810190811067ffffffffffffffff8211176113ad57604052565b60a0810190811067ffffffffffffffff8211176113ad57604052565b90601f8019910116810190811067ffffffffffffffff8211176113ad57604052565b67ffffffffffffffff81116113ad57601f01601f191660200190565b6001600160a01b0390911691908215610ae1576000828152600460205260408120546001600160a01b0316938391859033151580611684575b5060008051602061519d833981519152908261164f575b83815260056020526040812060018154019055848152600460205260408120846001600160601b0360a01b82541617905580a46001600160a01b031680830361163557505050565b6364283d7b60e01b60005260045260245260445260646000fd5b600085815260066020526040902080546001600160a01b031916905582815260056020526040812080546000190190556115ed565b9150919250806116cd575b1561169e5790848492386115d6565b8390856116b757602491637e27328960e01b8252600452fd5b60449163177e802f60e01b825233600452602452fd5b5033851480156116fb575b8061168f5750838152600660205260408120546001600160a01b0316331461168f565b5084815260076020908152604080832033845290915281205460ff166116d8565b8015610af7576000190190565b91908201809211610af757565b6040519061174382611527565b60006040838281528260208201520152565b60405190610140611766818461155f565b8260005b82811061177657505050565b602090611781611736565b818401520161176a565b6008546001600160a01b0316330361179f57565b63118cdaa760e01b6000523360045260246000fd5b6000818152600460205260409020546001600160a01b03169081156102b7575090565b6000818152600460205260409020546001600160a01b0390811692168015158061186d575b505081611836575b600081815260046020526040812080546001600160a01b03191690558260008051602061519d8339815191528280a490565b600081815260066020526040902080546001600160a01b031916905581600052600560205260406000206000198154019055611804565b806118af575b1561187e57806117fc565b826118985750637e27328960e01b60005260045260246000fd5b63177e802f60e01b60005260045260245260446000fd5b5080831480156118df575b8061187357506000828152600660205260409020546001600160a01b03168114611873565b5082600052600760205260406000208160005260205260ff604060002054166118ba565b90611958603a60405180947f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000602083015261194781518092602086860191016114a5565b81010301601f19810184528361155f565b565b90600581101561196b5760051b0190565b634e487b7160e01b600052603260045260246000fd5b611a6f6040519161199183611543565b6040805161199f828261155f565b600a8152693bb4b732103934b232b960b11b6020820152845280516119c4828261155f565b600f81526e3a3934b232b73a1031b93ab4b9b2b960891b6020820152602085015280516119f1828261155f565b60128152713337bab91036b0b9ba1032bc383637b932b960711b6020820152818501528051611a20828261155f565b600f81526e1c9bde585b08199a5d99481b585cdd608a1b60208201526060850152611a4d8151918261155f565b600b81526a19dc985b99081e5858da1d60aa1b60208201526080840152614e5a565b906005821015611a8a5760ff611a8692169061195a565b5190565b634e487b7160e01b600052602160045260246000fd5b823b611aae575b5050505050565b604051630a85bd0160e11b81526001600160a01b039182166004820152918116602483015260448201939093526080606482015291169160209082908190611afa9060848301906114c8565b03816000865af18091600091611b9a575b5090611b6457503d15611b5d573d611b2281611581565b90611b30604051928361155f565b81523d6000602083013e5b80519081611b585782633250574960e11b60005260045260246000fd5b602001fd5b6060611b3b565b6001600160e01b03191663757a42ff60e11b01611b8657503880808080611aa7565b633250574960e11b60005260045260246000fd5b6020813d602011611bd5575b81611bb36020938361155f565b81010312610a735751906001600160e01b031982168203610a70575038611b0b565b3d9150611ba6565b9060ff16908115611bef5760ff160690565b634e487b7160e01b600052601260045260246000fd5b60ff166005811015611a8a5790565b611c71611c6c600560ff60405194611c2b86611543565b600286526003602087015260046040870152826060870152600660808701526040516020810191825260208152611c6360408261155f565b51902016611bdd565b611c05565b6005811015611a8a5760ff9182611c8992169061195a565b511690565b611c71611c6c600560ff60405194611ca586611543565b600686528260208701526004604087015260036060870152600260808701526040516020810191825260208152611c6360408261155f565b611ce5611736565b50611cf1816002614ffa565b90611cfd816003614ffa565b60ff918290611d0d906004614ffa565b918160405195611d1c87611527565b16855216602084015216604082015290565b611d36611736565b50611d42816005614ffa565b90611d4e816006614ffa565b60ff918290611d0d906007614ffa565b611d66611736565b50611d72816008614ffa565b90611d7e816009614ffa565b60ff918290611d0d90600a614ffa565b611d96611736565b50611da281600b614ffa565b90611dae81600c614ffa565b60ff918290611d0d90600d614ffa565b611dc6611736565b50611dd281600e614ffa565b90611dde81600f614ffa565b60ff918290611d0d906010614ffa565b611df6611736565b50611e02816011614ffa565b90611e0e816012614ffa565b60ff918290611d0d906013614ffa565b611e26611736565b50611e32816014614ffa565b90611e3e816015614ffa565b60ff918290611d0d906016614ffa565b611e56611736565b50611e62816017614ffa565b90611e6e816018614ffa565b60ff918290611d0d906019614ffa565b611e86611736565b50611e9281601a614ffa565b90611e9e81601b614ffa565b60ff918290611d0d90601c614ffa565b611eb6611736565b50611ec281601d614ffa565b90611ece81601e614ffa565b60ff918290611d0d90601f614ffa565b90611f05604051602081019084825260208152611efc60408261155f565b51902092614e5a565b6105205260006104c052600882901c60011615614de85760016104c0525b611f2c82611cdd565b61050052611f3982611d2e565b6103e052611f4682611d5e565b61040052611f5382611d8e565b61042052611f6082611dbe565b61056052611f6d82611dee565b6104e052611f7a82611e1e565b61044052611f8782611e4e565b61046052611f9482611e7e565b61048052611fa182611eae565b6104a05260606105408190526040519290611fbc908461155f565b6002835261054051601f1901366020850137611fda61052051615036565b548116611fe68461504f565b52604051602081019182526020815261200060408261155f565b519020600161201161052051615036565b01541661201d8361505c565b5261282060405161058052612035816105805161155f565b6101406105805152601f190136602061058051013760005b60ff811660a08110156120855760ff9160019161207d61206c8761504f565b5184831b161515916105805161506c565b52011661204d565b50509060005b60a061ffff821610156120da576120a18261505c565b5160a061ffff8316019161ffff8311610af75761ffff926120d284600194858286161b16151592166105805161506c565b52011661208b565b505060c06103c08190526040516103a08190526120f7919061155f565b6103a051608690526103a0516020017f3c3f786d6c2076657273696f6e3d22312e3022203f3e3c73766720786d6c6e7390526103a0516040017f3d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076699052610540516103a051017f6577426f783d223020302035303020353030222070726573657276654173706590526103a0516080017f6374526174696f3d22784d696e594d696e206d656574222076657273696f6e3d90526511189718911f60d11b6103a05160a00152610560515160ff166121cc90614eb0565b61038052610560516020015160ff166121e490614eb0565b61012052610560516040015160ff166121fc90614eb0565b610160526104e0515160ff1661221190614eb0565b6104e05160200190815160ff1661222790614eb0565b916104e05160400191825160ff1661223e90614eb0565b92610560515160ff1661225090614eb0565b92610560516020015160ff1661226590614eb0565b95610560516040015160ff1661227a90614eb0565b6104e0515160ff1661228b90614eb0565b925160ff1661229990614eb0565b935160ff166122a790614eb0565b94610500515160ff166122b990614eb0565b96610500516020015160ff166122ce90614eb0565b99610500516040015160ff166122e390614eb0565b6103e0515160ff166122f490614eb0565b926103e0516020015160ff1661230990614eb0565b6080526103e0516040015160ff1661232090614eb0565b60a052610400515160ff1661233490614eb0565b60e052610400516020015160ff1661234b90614eb0565b61036052610400516040015160ff1661236390614eb0565b61034052610420515160ff1661237890614eb0565b61032052610420516020015160ff1661239090614eb0565b61030052610420516040015160ff166123a890614eb0565b6102e052610440515160ff166123bd90614eb0565b6102c052610440516020015160ff166123d590614eb0565b6102a052610440516040015160ff166123ed90614eb0565b61028052610460515160ff1661240290614eb0565b61026052610460516020015160ff1661241a90614eb0565b61024052610460516040015160ff1661243290614eb0565b61022052610480515160ff1661244790614eb0565b61020052610480516020015160ff1661245f90614eb0565b6101e052610480516040015160ff1661247790614eb0565b6101c0526104a0515160ff1661248c90614eb0565b6101a0526104a0516020015160ff166124a490614eb0565b610180526104a0516040015160ff166124bc90614eb0565b610140526000610100526104c05160001460196001612da09f60c89f601b9f839f849f869f869f879f899f899f8a9f8c9f8c9f8d9f9c8f9c8f9e9c8f809e9d601c829f9e60189f849f859f849f879f889e8960169e81809e6022829a98838e98819b614dc35760405161253060408261155f565b828152603160f81b6020820152610100525b60405160c052651e3232b3399f60d11b602060c05101527f3c7374796c6520747970653d22746578742f637373223e000000000000000000602660c05101527f2e6261636b67726f756e64207b2066696c6c3a20233230323432343b207d2e73603d60c05101527f61696c546f70207b2073746f702d636f6c6f723a207267622800000000000000605d60c051015281607661038051516125ee818360c05101602061038051016114a5565b60c05101600b60fa1b828201526101205151906126158260778301602061012051016114a5565b0101600b60fa1b8282015261016051519061263a8260028301602061016051016114a5565b010163293b207d60e01b838201527f2e7361696c426f74746f6d207b2073746f702d636f6c6f723a2072676228000060058201526126828251809360206023850191016114a5565b0101600b60fa1b838201526126a18251809360206023850191016114a5565b0101600b60fa1b838201526126c08251809360206002850191016114a5565b010163293b207d60e01b838201527f2e626f6479436f6c6f7231207b2066696c6c3a207267622800000000000000006005820152612708825180936020601d850191016114a5565b0101600b60fa1b83820152612727825180936020601d850191016114a5565b0101600b60fa1b838201526127468251809360206002850191016114a5565b010163293b207d60e01b838201527f2e626f6479436f6c6f7232207b2066696c6c3a20726762280000000000000000600582015261278e825180936020601d850191016114a5565b0101600b60fa1b838201526127ad825180936020601d850191016114a5565b0101600b60fa1b838201526127cc8251809360206002850191016114a5565b010163293b207d60e01b838201527105cd0ead8d840f640ccd2d8d87440e4cec4560731b60058201526128098251809360206017850191016114a5565b0101600b60fa1b838201526128288251809360206017850191016114a5565b0101600b60fa1b838201526128478251809360206002850191016114a5565b010163293b207d60e01b838201527f2e77696e646f774c696e65207b2066696c6c3a20726762280000000000000000600582015261288f825180936020601d850191016114a5565b0101600b60fa1b8282015260805151906128b282601d83016020608051016114a5565b0101600b60fa1b8282015260a05151906128d58260028301602060a051016114a5565b010163293b207d60e01b828201527305ceed2dcc8deee40f640ccd2d8d87440e4cec4560631b600582015260e051519061291782888301602060e051016114a5565b0101600b60fa1b8282015261036051519061293b82878301602061036051016114a5565b0101600b60fa1b828201526103405151906129608260028301602061034051016114a5565b010163293b207d60e01b828201527405cdac2e6e8e640f640e6e8e4ded6ca7440e4cec45605b1b60058201526103205151906129a682601a8301602061032051016114a5565b0101600b60fa1b828201526103005151906129cb82601a8301602061030051016114a5565b0101600b60fa1b828201526102e05151906129f0826002830160206102e051016114a5565b010163293b207d60e01b828201527405cccd8c2cee640f640e6e8e4ded6ca7440e4cec45605b1b60058201526102c0515190612a3682601a830160206102c051016114a5565b0101600b60fa1b828201526102a0515190612a5b82601a830160206102a051016114a5565b0101600b60fa1b82820152610280515190612a808260028301602061028051016114a5565b010163293b207d60e01b828201527405ce6d2cedccae86240f640ccd2d8d87440e4cec45605b1b6005820152610260515190612ac682601a8301602061026051016114a5565b0101600b60fa1b82820152610240515190612aeb82601a8301602061024051016114a5565b0101600b60fa1b82820152610220515190612b108260028301602061022051016114a5565b010163293b207d60e01b828201527405ce6d2cedccae86440f640ccd2d8d87440e4cec45605b1b6005820152610200515190612b5682601a8301602061020051016114a5565b0101600b60fa1b828201526101e0515190612b7b82601a830160206101e051016114a5565b0101600b60fa1b828201526101c0515190612ba0826002830160206101c051016114a5565b010163293b207d60e01b828201527405ce6d2cedccae86640f640ccd2d8d87440e4cec45605b1b60058201526101a0515190612be682601a830160206101a051016114a5565b0101600b60fa1b82820152610180515190612c0b82601a8301602061018051016114a5565b0101600b60fa1b82820152610140515190612c308260028301602061014051016114a5565b010163293b207d60e01b828201527f2e666c616773426f72646572207b206f7061636974793a0000000000000000006005820152610100515190612c7e82601c8301602061010051016114a5565b0101623b207d60e81b82820152752e626f72646572207b2066696c6c3a2023666666207d60501b601e820152671e17b9ba3cb6329f60c11b60348201527f3c6c696e6561724772616469656e742069643d227361696c4772616469656e74603c8201527f22206772616469656e745472616e73666f726d3d22726f746174652839302922605c8201527f3e203c73746f70206f66667365743d223525222020636c6173733d227361696c607c8201527f546f70222f3e203c73746f70206f66667365743d223935252220636c6173733d609c8201527f227361696c426f74746f6d222f3e203c2f6c696e6561724772616469656e743e60bc820152661e17b232b3399f60c91b60dc82015260c05190030160a8810160c051520160c05161155f565b6005610520511015611a8a5760006105205115600014614dac5750604051612dca6103208261155f565b6102eb81526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d3620313520683220762d3220683120762d31206831207660a08201527f2d3120683120762d3120683120762d3120683120762d3120683120762d3120686103c0518201527f3120762d3120683320763920683820763320682d3120763120682d312076312060e08201527f682d3120763120682d313420762d3120682d3220762d3220682d31207a22202f6101008201527f3e203c6720636c6173733d22666c616773426f72646572223e203c70617468206101208201527f643d224d3133203520683520763320682d357a22202f3e203c2f673e203c2f676101408201527f3e203c673e203c706174682069643d2268756c6c2220643d224d3720313620686101608201527f20313820763120682d3120763120682d3120763120682d3120763120682d31326101808201527f20762d3120682d3220762d322020682d3120207a2220636c6173733d2268756c6101a08201527f6c22202f3e203c706174682069643d2277696e646f774c696e652220643d224d6101c08201527f372031362068313820763120682d3138207a2220636c6173733d2277696e646f6101e08201527f772d6c696e6522202f3e203c2f673e203c672069643d226d617374732220636c6102008201527f6173733d226d61737473223e203c7061746820643d224d31362e3520372076396102208201527f22202f3e203c2f673e203c672069643d22666c6167732220636c6173733d22666102408201527f6c61677320666c616773426f72646572223e203c7061746820643d224d3134206102608201527f362e3520683322202f3e203c2f673e203c672069643d227361696c73222066696102808201527f6c6c3d2275726c28237361696c4772616469656e7429223e203c7061746820646102a08201527f3d224d3920313520762d3120683120762d3120683120762d3120683120762d316102c08201527f20683120762d3120683120762d3120683120762d31206831207637207a22202f6102e08201526a1f101e17b39f101e17b39f60a91b610300820152905b60009160016105205114600014614d955760405161313c6105408261155f565b61050481526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d33203920683120762d3120683120762d3120683120762d60a08201527f3120683320762d3120683720762d3120683320763220683120762d31206833206103c0518201527f763220683120763120683120763120683120763120683120763120683120763160e08201527f20683120763620682d3220763120682d3120763120682d3120763120682d31206101008201527f763120682d313720762d3420682d3220762d3420682d3120762d3120682d31206101208201527f7a222f3e203c6720636c6173733d22666c616773426f72646572223e203c70616101408201527f746820643d224d37203420683520763320682d357a22202f3e203c70617468206101608201527f643d224d3134203320683520763320682d357a22202f3e203c7061746820643d6101808201527f224d3139203420683420763320682d347a22202f3e203c2f673e203c2f673e206101a08201527f3c673e203c706174682069643d2268756c6c2220643d224d36203136206820326101c08201527f3220763120682d3220763120682d3120763120682d3120763120682d312076316101e08201527f20682d313520762d3120683120762d3120683120762d3120682d3220762d31206102008201527f682d32207a2220636c6173733d2268756c6c22202f3e203c706174682069643d6102208201527f2277696e646f772d6c696e652220643d224d31302031382068313520763120686102408201527f2d3135207a2220636c6173733d2277696e646f774c696e65222f3e203c6720696102608201527f643d2277696e646f77732220636c6173733d2277696e646f77223e203c7061746102808201527f682069643d2277696e646f772d312220643d224d3132203138206831207631206102a08201527f682d31207a22202f3e203c706174682069643d2277696e646f772d312220643d6102c08201527f224d313220313820683120763120682d31207a22202f3e203c706174682069646102e08201527f3d2277696e646f772d322220643d224d313220313820683120763120682d31206103008201527f7a22202f3e203c2f673e203c2f673e203c672069643d226d617374732220636c6103208201527f6173733d226d61737473223e203c7061746820643d224d31302e3520362076316103408201527f3022202f3e203c7061746820643d224d31372e3520352076313122202f3e203c6103608201527f7061746820643d224d32312e3520362076313022202f3e203c2f673e203c67206103808201527f69643d22666c6167732220636c6173733d22666c61677320666c616773426f726103a08201527f646572223e203c7061746820643d224d3820352e3520683322202f3e203c70616103c08201527f746820643d224d313520342e3520683322202f3e203c7061746820643d224d326103e08201527f3020352e3520683222202f3e203c2f673e203c672069643d227361696c7322206104008201527f66696c6c3d2275726c28237361696c4772616469656e7429223e203c726563746104208201527f20783d2231322220793d2236222077696474683d223522206865696768743d226104408201527f3922202f3e203c7265637420783d2231392220793d2237222077696474683d226104608201527f3222206865696768743d223822202f3e203c7061746820643d224d37203720686104808201527f3320763820682d3320762d3120682d3120762d3120682d3120762d3120682d316104a08201527f2020762d3220683120762d3120683120762d31206831207a222f3e203c7061746104c08201527f6820643d22204d323220382068312076312068312076312068312076312068316104e08201527f2076312068312076312020683120763220682d36207a22202f3e203c2f673e20610500820152631e17b39f60e11b610520820152925b50600060026105205114600014614d7e575060405161373f6105808261155f565b61055281526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d31203720683120762d3120683120762d3120683420762d60a08201527f3120683620762d3120683320763220683320762d3120683320763320683320766103c0518201527f312068312076312068312076312068312076312068312076312068312076312060e08201527f683120763520682d3320763120682d3120763120682d3120763120682d3120766101008201527f3220682d323120762d3320683120762d3220682d3220762d3420682d31762d316101208201527f20682d31207a222f3e203c6720636c6173733d22666c616773426f72646572226101408201527f3e203c7061746820643d224d35203320683520763320682d357a22202f3e203c6101608201527f7061746820643d224d3131203220683520763320682d357a22202f3e203c70616101808201527f746820643d224d3138203320683420763320682d347a22202f3e203c706174686101a08201527f20643d224d3231203620683420763320682d347a22202f3e203c2f673e203c2f6101c08201527f673e203c673e203c706174682069643d2268756c6c2220643d224d34203136206101e08201527f6820323620763120682d3320763120682d3120763120682d3120763120682d316102008201527f20763220682d313920762d3120683120762d3120683120762d3120683120762d6102208201527f3120682d3220762d3120682d32207a2220636c6173733d2268756c6c22202f3e6102408201527f203c706174682069643d2277696e646f772d6c696e652220643d224d382031386102608201527f2068313820763120682d3138207a2220636c6173733d2277696e646f774c696e6102808201527f65222f3e203c672069643d2277696e646f77732220636c6173733d2277696e646102a08201527f6f77223e203c7061746820643d224d313320313820683120763120682d31207a6102c08201527f22202f3e203c7061746820643d224d313020313820683120763120682d31207a6102e08201527f22202f3e203c7061746820643d224d313920313820683120763120682d31207a6103008201527f22202f3e203c7061746820643d224d323220313820683120763120682d31207a6103208201527f22202f3e203c2f673e203c2f673e203c672069643d226d617374732220636c616103408201527f73733d226d61737473223e203c7061746820643d224d382e35203520763131226103608201527f202f3e203c7061746820643d224d31342e3520342076313222202f3e203c70616103808201527f746820643d224d32302e3520352076313122202f3e203c7061746820643d224d6103a08201527f32332e35203820763822202f3e203c2f673e203c672069643d22666c616773226103c08201527f20636c6173733d22666c61677320666c616773426f72646572223e203c7061746103e08201527f6820643d224d3620342e3520683322202f3e203c7061746820643d224d3132206104008201527f332e3520683322202f3e203c7061746820643d224d313920342e3520683222206104208201527f2f3e203c7061746820643d224d323220372e3520683222202f3e203c2f673e206104408201527f3c672069643d227361696c73222066696c6c3d2275726c28237361696c4772616104608201527f6469656e7429223e203c7265637420783d2231302220793d22352220776964746104808201527f683d223422206865696768743d22313022202f3e203c7265637420783d2231366104a08201527f2220793d2236222077696474683d223422206865696768743d223922202f3e206104c08201527f3c7061746820643d224d34203620683420763920682d3320762d3120682d31206104e08201527f762d3120682d3120762d3120682d312020762d3420683120762d3120683120766105008201527f2d31206831207a222f3e203c7061746820643d22204d323420392068312076316105208201527f206831207631206831207631206831207631206831207631206831207631206861054082015271169b103d1110179f101e17b39f101e17b39f60711b610560820152915b60009360036105205114600014614d6757604051613d9d6106408261155f565b61061e81526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d30203820683120762d3120683120762d3120683120762d60a08201527f3120683120762d3120683320762d3120683320763120683220762d31206833206103c0518201527f763120683220762d3120683320763320683120762d312068332076332068332060e08201527f76312068312076312068312076312068312076312068312076312068312076356101008201527f20682d3320763120682d3120763120682d3120763120682d3120763220682d326101208201527f3220762d3320683120762d3220682d3220762d3420682d3120762d3120682d316101408201527f20762d3120682d31207a22202f3e203c6720636c6173733d22666c616773426f6101608201527f72646572223e203c7061746820643d224d35203220683520763320682d357a226101808201527f202f3e203c7061746820643d224d3130203220683520763320682d357a22202f6101a08201527f3e203c7061746820643d224d3135203220683520763320682d357a22202f3e206101c08201527f3c7061746820643d224d3230203420683420763320682d347a22202f3e203c706101e08201527f61746820643d224d3233203720683420763320682d347a22202f3e203c2f673e6102008201527f203c2f673e203c673e203c706174682069643d2268756c6c2220643d224d34206102208201527f3136206820323720763120682d3320763120682d3120763120682d31207631206102408201527f682d3120763220682d323020762d3120683120762d3120683120762d312068316102608201527f20762d3120682d3220762d3120682d32207a2220636c6173733d2268756c6c226102808201527f202f3e203c706174682069643d2277696e646f772d6c696e652220643d224d386102a08201527f2031382068313920763120682d3139207a2220636c6173733d2277696e646f776102c08201527f4c696e6522202f3e203c672069643d2277696e646f77732220636c6173733d226102e08201527f77696e646f77223e203c7061746820643d224d313120313820683120763120686103008201527f2d31207a22202f3e203c7061746820643d224d313420313820683120763120686103208201527f2d31207a22202f3e203c7061746820643d224d313720313820683120763120686103408201527f2d31207a22202f3e203c7061746820643d224d323020313820683120763120686103608201527f2d31207a22202f3e203c7061746820643d224d323320313820683120763120686103808201527f2d31207a22202f3e203c2f673e203c2f673e203c672069643d226d61737473226103a08201527f20636c6173733d226d61737473223e203c7061746820643d224d382e352034206103c08201527f76313222202f3e203c7061746820643d224d31332e3520342076313222202f3e6103e08201527f203c7061746820643d224d31382e3520342076313222202f3e203c70617468206104008201527f643d224d32322e3520362076313022202f3e203c7061746820643d224d32352e6104208201527f35203920763722202f3e203c2f673e203c672069643d22666c6167732220636c6104408201527f6173733d22666c61677320666c616773426f72646572223e203c7061746820646104608201527f3d224d3620332e3520683322202f3e203c7061746820643d224d313120332e356104808201527f20683322202f3e203c7061746820643d224d313620332e3520683322202f3e206104a08201527f3c7061746820643d224d323120352e3520683222202f3e203c7061746820643d6104c08201527f224d323420382e3520683222202f3e203c2f673e203c672069643d227361696c6104e08201527f73222066696c6c3d2275726c28237361696c4772616469656e7429223e203c726105008201527f65637420783d2231302220793d2235222077696474683d2233222068656967686105208201527f743d22313022202f3e203c7265637420783d2231352220793d223522207769646105408201527f74683d223322206865696768743d22313022202f3e203c7265637420783d22326105608201527f302220793d2237222077696474683d223222206865696768743d223822202f3e6105808201527f203c7061746820643d224d31203920683120762d3120683120762d31206831206105a08201527f762d3120683120762d312068332076313020682d3320762d3120682d3120762d6105c08201527f3120682d3120762d3120682d3120762d3120682d31207a22202f3e203c7061746105e08201527f6820643d224d32362031302068312076312020683120763120683120763120686106008201527f3120763120683120763120682d35207a22202f3e203c2f673e203c2f673e0000610620820152945b50600060046105205114600014614d5057506040516144f16104e08261155f565b6104b481526000805160206151fd83398151915260208201526000805160206151bd83398151915260408201526000805160206151dd8339815191526105405182015260008051602061517d83398151915260808201527f7061746820643d224d3120313220683520762d3120683220762d31206832207660a08201527f2d3120683220762d3120683220762d3120683120762d312068332076312068316103c0518201527f207631206832207631206832207631206832207631206832207631206835207660e08201527f3320682d3220763120682d3120763120682d3120763120682d3120763120682d6101008201527f323720762d33206831207a22202f3e203c6720636c6173733d22666c616773426101208201527f6f72646572223e203c7061746820643d224d3133203520683520763320682d356101408201527f7a22202f3e203c2f673e203c2f673e203c673e203c706174682069643d2268756101608201527f6c6c2220643d224d32203133206820323920763120682d3220763120682d31206101808201527f763120682d3120763120682d3120763120682d323520762d3120683120762d316101a08201527f20683120762d3120683120762d3120682d32207a2220636c6173733d2268756c6101c08201527f6c22202f3e203c706174682069643d2277696e646f772d6c696e652220643d226101e08201527f4d322031332068323920763120682d3220763120682d323520762d3120682d326102008201527f207a2220636c6173733d2277696e646f774c696e6522202f3e203c672069643d6102208201527f2277696e646f77732220636c6173733d2277696e646f77223e203c70617468206102408201527f643d224d3920313420683120763120682d31207a22202f3e203c7061746820646102608201527f3d224d313320313420683120763120682d31207a22202f3e203c7061746820646102808201527f3d224d313720313420683120763120682d31207a22202f3e203c7061746820646102a08201527f3d224d323120313420683120763120682d31207a22202f3e203c7061746820646102c08201527f3d224d313120313320683120763120682d31207a22202f3e203c7061746820646102e08201527f3d224d313520313320683120763120682d31207a22202f3e203c7061746820646103008201527f3d224d313920313320683120763120682d31207a22202f3e203c7061746820646103208201527f3d224d323320313320683120763120682d31207a22202f3e203c2f673e203c2f6103408201527f673e203c672069643d226d617374732220636c6173733d226d61737473223e206103608201527f3c7061746820643d224d31362e35203720763122202f3e203c2f673e203c67206103808201527f69643d22666c6167732220636c6173733d22666c61677320666c616773426f726103a08201527f646572223e203c7061746820643d224d313420362e3520683322202f3e203c2f6103c08201527f673e203c672069643d22626f6479223e203c6720636c6173733d22626f6479436103e08201527f6f6c6f7231223e203c7061746820643d224d372031322068313920763120682d6104008201527f3139207a22202f3e203c7061746820643d224d313120313020683131207631206104208201527f682d3131207a22202f3e203c7061746820643d224d31352038206833207631206104408201527f682d33207a22202f3e203c2f673e203c6720636c6173733d22626f6479436f6c6104608201527f6f7232223e203c7061746820643d224d392031312068313520763120682d31356104808201527f207a22202f3e203c7061746820643d224d3133203920683720763120682d37206104a0820152733d1110179f101e17b39f101e17b39f101e17b39f60611b6104c0820152925b604051614a7c60808261155f565b605781527f3c672069643d227369676e65747322207472616e73666f726d3d227363616c6560208201527f28313029207472616e736c617465283920313329223e203c672069643d22736960408201527f676e6574312220636c6173733d227369676e657431223e000000000000000000610540518201529560005b610580515161ffff821690811015614c0657614b17906105805161506c565b51614b32575b61ffff1661ffff8114610af757600101614af8565b96601f881661ffff8111610af757614b4990614eb0565b60056107ff8a821c160161ffff8111610af7576010600161ffff94600a614b7487614bfe9616614eb0565b60206040519784614b8e8a9651809285808a0191016114a5565b8501693c7061746820643d224d60b01b83820152614bb58251809385602a850191016114a5565b0101600160fd1b83820152614bd4825180936020600b850191016114a5565b01016f103418903b1890341698903d1110179f60811b838201520301600f1981018452018261155f565b979050614b1d565b50509295909394919460405190816020810193848151602081930191614c2b926114a5565b810160208101681e17b39f101e17b39f60b91b90520360200160161981018352600901614c58908361155f565b604094855194614c68878761155f565b600686526020860196651e17b9bb339f60d11b8852519889986103a0515160208b01816103a05160200191614c9c926114a5565b8a0160c0515190602081018260c05160200191614cb8926114a5565b01602001808251602081940191614cce926114a5565b01808251602081940191614ce1926114a5565b01808251602081940191614cf4926114a5565b01808251602081940191614d07926114a5565b01808251602081940191614d1a926114a5565b01918291518093614d2a926114a5565b01918291518093614d3a926114a5565b0103601f1981018252614d4d908261155f565b90565b60405190614d5f60208361155f565b815292614a6e565b604051614d7560208261155f565b858152946144d0565b60405190614d8d60208361155f565b815291613d7d565b604051614da360208261155f565b8381529261371e565b60405190614dbb60208361155f565b81529061311c565b6040805190614dd2908261155f565b828152600360fc1b602082015261010052612542565b60006104c052611f23565b604051614d4d91614e0560608361155f565b604082527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208301527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040830152615080565b611c6c600560ff614d4d936040516020810191825260208152611c6360408261155f565b90614e8882611581565b614e95604051918261155f565b8281528092614ea6601f1991611581565b0190602036910137565b8060009172184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b821015614fd7575b806d04ee2d6d415b85acef8100000000600a921015614fbc575b662386f26fc10000811015614fa8575b6305f5e100811015614f97575b612710811015614f88575b6064811015614f7a575b1015614f6f575b600a6021614f3660018501614e7e565b938401015b60001901916f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353048015614f6a57600a9091614f3b565b505090565b600190910190614f26565b606460029104930192614f1f565b61271060049104930192614f15565b6305f5e10060089104930192614f0a565b662386f26fc1000060109104930192614efd565b6d04ee2d6d415b85acef810000000060209104930192614eed565b506040915072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8104614ed3565b60ff8116601f8111615022575060031b906107f860f8831692168203610af75760ff911c1690565b634e6153af60e11b60005260045260246000fd5b6005811015611a8a57600052600c602052604060002090565b80511561196b5760200190565b80516001101561196b5760400190565b805182101561196b5760209160051b010190565b91909180511561516457805160028101809111610af75760039004600281901b906001600160fe1b03811603610af7576150b990614e7e565b9060208201908081518201956020870190815192600083525b8881106151165750506003939495965052510680600114615103576002146150f8575090565b603d90600019015390565b50603d9081600019820153600119015390565b600360049199969901986001603f8b5182828260121c16870101518453828282600c1c16870101518385015382828260061c16870101516002850153168401015160038201530194976150d2565b50905060405161517560208261155f565b600081529056fe3c672069643d22626f726465722220636c6173733d22626f72646572223e203cddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef20636c6173733d226261636b67726f756e6422202f3e3c67207472616e73666f726d3d227363616c6528313029207472616e736c617465283920313329223e203c726563742077696474683d223130302522206865696768743d223130302522a264697066735822122099b3153f0ad00be3ebc0476ffc2657b939bdd2ecfbcd3c2548b2aca7fe4dbd8464736f6c634300081b0033

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

    000000000000000000000000fd173ce20f447e95a9b53748530acd6a662c9a9f00000000000000000000000000000000000000000000000000000000000022c4

    -----Decoded View---------------
    Arg [0] : _initialOwner (address): 0xfD173ce20f447e95A9b53748530aCd6A662C9A9f
    Arg [1] : _maxSupply (uint256): 8900

    -----Encoded View---------------
    2 Constructor Arguments found :
    Arg [0] : 000000000000000000000000fd173ce20f447e95a9b53748530acd6a662c9a9f
    Arg [1] : 00000000000000000000000000000000000000000000000000000000000022c4


    [ Download: CSV Export  ]
    [ Download: CSV Export  ]

    A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.