ETH Price: $2,901.45 (+2.82%)
 

Overview

Max Total Supply

77 BHAT

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2.473190513783772213 BHAT

Value
$0.00
0xb30aef7fd48898ff2c4f0e810479432c80ba4c7b
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BHAT

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 6: BHAT.sol
/*

█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
█░░░░░░░░░░░░░░███░░░░░░█████████░░░░░░░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░██░░░░░░░░█░░░░░░██░░░░░░█░░░░░░░░░░░░░░█░░░░░░░░░░░░░░█
█░░▄▀▄▀▄▀▄▀▄▀░░███░░▄▀░░█████████░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀▄▀░░█░░▄▀░░██░░▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█
█░░▄▀░░░░░░▄▀░░███░░▄▀░░█████████░░▄▀░░░░░░▄▀░░█░░▄▀░░░░░░░░░░█░░▄▀░░██░░▄▀░░░░█░░▄▀░░██░░▄▀░░█░░▄▀░░░░░░▄▀░░█░░░░░░▄▀░░░░░░█
█░░▄▀░░██░░▄▀░░███░░▄▀░░█████████░░▄▀░░██░░▄▀░░█░░▄▀░░█████████░░▄▀░░██░░▄▀░░███░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█████░░▄▀░░█████
█░░▄▀░░░░░░▄▀░░░░█░░▄▀░░█████████░░▄▀░░░░░░▄▀░░█░░▄▀░░█████████░░▄▀░░░░░░▄▀░░███░░▄▀░░░░░░▄▀░░█░░▄▀░░░░░░▄▀░░█████░░▄▀░░█████
█░░▄▀▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░█████████░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░█████████░░▄▀▄▀▄▀▄▀▄▀░░███░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█████░░▄▀░░█████
█░░▄▀░░░░░░░░▄▀░░█░░▄▀░░█████████░░▄▀░░░░░░▄▀░░█░░▄▀░░█████████░░▄▀░░░░░░▄▀░░███░░▄▀░░░░░░▄▀░░█░░▄▀░░░░░░▄▀░░█████░░▄▀░░█████
█░░▄▀░░████░░▄▀░░█░░▄▀░░█████████░░▄▀░░██░░▄▀░░█░░▄▀░░█████████░░▄▀░░██░░▄▀░░███░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█████░░▄▀░░█████
█░░▄▀░░░░░░░░▄▀░░█░░▄▀░░░░░░░░░░█░░▄▀░░██░░▄▀░░█░░▄▀░░░░░░░░░░█░░▄▀░░██░░▄▀░░░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█████░░▄▀░░█████
█░░▄▀▄▀▄▀▄▀▄▀▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀░░█░░▄▀▄▀▄▀▄▀▄▀░░█░░▄▀░░██░░▄▀▄▀░░█░░▄▀░░██░░▄▀░░█░░▄▀░░██░░▄▀░░█████░░▄▀░░█████
█░░░░░░░░░░░░░░░░█░░░░░░░░░░░░░░█░░░░░░██░░░░░░█░░░░░░░░░░░░░░█░░░░░░██░░░░░░░░█░░░░░░██░░░░░░█░░░░░░██░░░░░░█████░░░░░░█████
█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
the black shine nft
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.11;
import "./ERC404.sol";
import "./Base64.sol";

contract BHAT is ERC404 {
    constructor(address _owner, uint256 _totalSupply)
        ERC404("BLACKHAT", "BHAT", 18, _totalSupply, _owner)
    {
        balanceOf[_owner] = _totalSupply * 10**18;
        setWhitelist(_owner, true);
    }

    string[] private skinColors = [
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000"
    ];

    string[] private lipColors = [
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000"
    ];
    string[] private shirtColors = [
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000",
        "#000000"
    ];

    function random(string memory input) internal pure returns (uint256) {
        return uint256(keccak256(abi.encodePacked(input)));
    }

    function getSkii2nColor(uint256 tokenId) public view returns (string memory) {
        uint256 rand = random(
            string(abi.encodePacked("SKINCOLOR", toString(tokenId)))
        );
        return skinColors[rand % skinColors.length];
    }

    function getLi2pColor(uint256 tokenId) public view returns (string memory) {
        uint256 rand = random(
            string(abi.encodePacked("LIPCOLOR", toString(tokenId)))
        );
        return lipColors[rand % lipColors.length];
    }

    function getShi2rtColor(uint256 tokenId)
        public
        view
        returns (string memory)
    {
        uint256 rand = random(
            string(abi.encodePacked("SHIRTCOLOR", toString(tokenId)))
        );
        return shirtColors[rand % shirtColors.length];
    }

    function pluck(
        uint256 tokenId,
        string memory keyPrefix,
        string[] memory sourceArray
    ) internal pure returns (string memory) {
        uint256 rand = random(
            string(abi.encodePacked(keyPrefix, toString(tokenId)))
        );
        return sourceArray[rand % sourceArray.length];
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override
        returns (string memory)
    {
        string memory skinColor = getSkii2nColor(tokenId);
        string memory shirtColor = getShi2rtColor(tokenId);
        string memory lipColor = getLi2pColor(tokenId);

        string memory svg = string(
            abi.encodePacked(
                '<svg xmlns="http://www.w3ss.org/2000/svg" width="400" height="400" viewBox="0 0 400 400" fill="none">',
                '<rect width="80" height="40" x="150" y="77" fill="',
                skinColor,
                '"/>',
                '<rect width="80" height="40" x="270" y="77" fill="',
                skinColor,
                '"/>',
                '<rect width="280" height="41" x="110" y="116" fill="',
                skinColor,
                '"/>',
                '<rect width="80" height="41" x="70" y="156" fill="',
                skinColor,
                '"/>',
                '<rect width="40" height="41" x="150" y="156" fill="#ffffff"/>',
                '<rect width="40" height="41" x="190" y="156" fill="#000000"/>',
                '<rect width="80" height="41" x="230" y="156" fill="#ffffff"/>',
                '<rect width="40" height="41" x="310" y="156" fill="#000000"/>',
                '<rect width="40" height="41" x="350" y="156" fill="',
                skinColor,
                '"/>',
                '<rect width="280" height="41" x="70" y="196" fill="',
                skinColor,
                '"/>',
                '<rect width="160" height="41" x="29" y="236" fill="',
                skinColor,
                '"/>',
                '<rect width="161" height="41" x="189" y="236" fill="',
                lipColor,
                '"/>',
                '<rect width="280" height="41" x="29" y="276" fill="',
                skinColor,
                '"/>',
                '<rect width="280" height="41" x="29" y="316" fill="',
                shirtColor,
                '"/>',
                "</svg>"
            )
        );

        string memory json = Base64.encode(
            bytes(
                string(
                    abi.encodePacked(
                        '{"name": "BHAT',
                        toString(tokenId),
                        '", "description": "77 pix format of black hat nft", "image": "data:imagesor/svg+xml;base64,',
                        Base64.encode(bytes(svg)),
                        '"}'
                    )
                )
            )
        );

        return string(abi.encodePacked("data:appldication/json;base64,", json));
    }

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
}

File 1 of 6: Base64.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.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
     */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
}

File 3 of 6: Context.sol
// 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;
    }
}

File 4 of 6: ERC404.sol
// SPDX-License-Identifier: MIT

import "./Ownable2Step.sol";
import "./Ownable.sol";
pragma solidity ^0.8.0;

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

abstract contract ERC404 is Ownable2Step {


    event ERC20Transfer(bytes32 indexed topic0, address indexed from, address indexed to, uint256 tokens) anonymous;
    event Approval(address indexed owner, address indexed spender, uint256 amount);
    event Transfer( address indexed from, address indexed to, uint256 indexed id);
    event ERC721Approval(address indexed owner, address indexed spender, uint256 indexed id );
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved );
    bytes32 constant private TRANSFER_TOPIC = keccak256(bytes("Transfer(address,address,uint256)"));

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

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public immutable totalSupply;

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

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

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

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

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

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

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

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

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

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

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

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

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

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

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

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

            getApproved[amountOrId] = spender;

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

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

        return true;
    }

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

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

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

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

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

            balanceOf[from] -= _getUnit();

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

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

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

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

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

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

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

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

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

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

        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

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

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

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

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

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

        unchecked {
            minted++;
        }

        uint256 id = minted;

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

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

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

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

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

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

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

File 5 of 6: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "./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);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

File 6 of 6: Ownable2Step.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.20;

import {Ownable} from "./Ownable.sol";

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is specified at deployment time in the constructor for `Ownable`. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

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

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

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) {
            revert OwnableUnauthorizedAccount(sender);
        }
        _transferOwnership(sender);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes32","name":"topic0","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getLi2pColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getShi2rtColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSkii2nColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60c0604052604051806102c001604052806040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2330303030303000000000000000000000000000000000000000000000000000815250815250600d9060166200053292919062000e30565b506040518061016001604052806040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2330303030303000000000000000000000000000000000000000000000000000815250815250600e90600b620007d892919062000e8e565b506040518061012001604052806040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030303030300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2330303030303000000000000000000000000000000000000000000000000000815250815250600f90600962000a0892919062000eec565b5034801562000a15575f80fd5b506040516200562338038062005623833981810160405281019062000a3b91906200106e565b6040518060400160405280600881526020017f424c41434b4841540000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f424841540000000000000000000000000000000000000000000000000000000081525060128385805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b1f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000b169190620010c4565b60405180910390fd5b62000b308162000bff60201b60201c565b50846002908162000b4291906200133a565b50836003908162000b5491906200133a565b508260ff1660808160ff1681525050608051600a62000b749190620015a7565b8262000b819190620015f7565b60a081815250505050505050670de0b6b3a76400008162000ba39190620015f7565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000bf782600162000c3760201b60201c565b505062001641565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905562000c348162000c9f60201b60201c565b50565b62000c4762000d6060201b60201c565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000d7062000e0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000d9662000e0960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000e005762000dc262000e0260201b60201c565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040162000df79190620010c4565b60405180910390fd5b565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054828255905f5260205f2090810192821562000e7b579160200282015b8281111562000e7a57825182908162000e6991906200133a565b509160200191906001019062000e4f565b5b50905062000e8a919062000f4a565b5090565b828054828255905f5260205f2090810192821562000ed9579160200282015b8281111562000ed857825182908162000ec791906200133a565b509160200191906001019062000ead565b5b50905062000ee8919062000f4a565b5090565b828054828255905f5260205f2090810192821562000f37579160200282015b8281111562000f3657825182908162000f2591906200133a565b509160200191906001019062000f0b565b5b50905062000f46919062000f4a565b5090565b5b8082111562000f6d575f818162000f63919062000f71565b5060010162000f4b565b5090565b50805462000f7f9062001143565b5f825580601f1062000f92575062000fb1565b601f0160209004905f5260205f209081019062000fb0919062000fb4565b5b50565b5b8082111562000fcd575f815f90555060010162000fb5565b5090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620010008262000fd5565b9050919050565b620010128162000ff4565b81146200101d575f80fd5b50565b5f81519050620010308162001007565b92915050565b5f819050919050565b6200104a8162001036565b811462001055575f80fd5b50565b5f8151905062001068816200103f565b92915050565b5f806040838503121562001087576200108662000fd1565b5b5f620010968582860162001020565b9250506020620010a98582860162001058565b9150509250929050565b620010be8162000ff4565b82525050565b5f602082019050620010d95f830184620010b3565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200115b57607f821691505b60208210810362001171576200117062001116565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620011d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001198565b620011e1868362001198565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620012226200121c620012168462001036565b620011f9565b62001036565b9050919050565b5f819050919050565b6200123d8362001202565b620012556200124c8262001229565b848454620011a4565b825550505050565b5f90565b6200126b6200125d565b6200127881848462001232565b505050565b5b818110156200129f57620012935f8262001261565b6001810190506200127e565b5050565b601f821115620012ee57620012b88162001177565b620012c38462001189565b81016020851015620012d3578190505b620012eb620012e28562001189565b8301826200127d565b50505b505050565b5f82821c905092915050565b5f620013105f1984600802620012f3565b1980831691505092915050565b5f6200132a8383620012ff565b9150826002028217905092915050565b6200134582620010df565b67ffffffffffffffff811115620013615762001360620010e9565b5b6200136d825462001143565b6200137a828285620012a3565b5f60209050601f831160018114620013b0575f84156200139b578287015190505b620013a785826200131d565b86555062001416565b601f198416620013c08662001177565b5f5b82811015620013e957848901518255600182019150602085019450602081019050620013c2565b8683101562001409578489015162001405601f891682620012ff565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620014a85780860481111562001480576200147f6200141e565b5b6001851615620014905780820291505b8081029050620014a0856200144b565b945062001460565b94509492505050565b5f82620014c2576001905062001594565b81620014d1575f905062001594565b8160018114620014ea5760028114620014f5576200152b565b600191505062001594565b60ff8411156200150a57620015096200141e565b5b8360020a9150848211156200152457620015236200141e565b5b5062001594565b5060208310610133831016604e8410600b8410161715620015655782820a9050838111156200155f576200155e6200141e565b5b62001594565b62001574848484600162001457565b925090508184048111156200158e576200158d6200141e565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620015b38262001036565b9150620015c0836200159b565b9250620015ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620014b1565b905092915050565b5f620016038262001036565b9150620016108362001036565b9250828202620016208162001036565b915082820484148315176200163a57620016396200141e565b5b5092915050565b60805160a051613fb96200166a5f395f610a0d01525f81816112270152611d900152613fb95ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c8063715018a6116100f7578063a9059cbb11610095578063dd62ed3e1161006f578063dd62ed3e146104df578063e30c39781461050f578063e985e9c51461052d578063f2fde38b1461055d576101a7565b8063a9059cbb14610463578063b88d4fde14610493578063c87b56dd146104af576101a7565b80638da5cb5b116100d15780638da5cb5b146103db57806395d89b41146103f95780639b19251a14610417578063a22cb46514610447576101a7565b8063715018a61461039757806379ba5097146103a15780638809c059146103ab576101a7565b8063313ce567116101645780634f02c4201161013e5780634f02c420146102fd57806353d6fd591461031b5780636352211e1461033757806370a0823114610367576101a7565b8063313ce5671461029357806342842e0e146102b15780634a854c39146102cd576101a7565b806306fdde03146101ab578063081812fc146101c9578063095ea7b3146101f957806316b175a71461022957806318160ddd1461025957806323b872dd14610277575b5f80fd5b6101b3610579565b6040516101c0919061293e565b60405180910390f35b6101e360048036038101906101de9190612999565b610605565b6040516101f09190612a03565b60405180910390f35b610213600480360381019061020e9190612a46565b610635565b6040516102209190612a9e565b60405180910390f35b610243600480360381019061023e9190612999565b61091c565b604051610250919061293e565b60405180910390f35b610261610a0b565b60405161026e9190612ac6565b60405180910390f35b610291600480360381019061028c9190612adf565b610a2f565b005b61029b611225565b6040516102a89190612b4a565b60405180910390f35b6102cb60048036038101906102c69190612adf565b611249565b005b6102e760048036038101906102e29190612999565b611378565b6040516102f4919061293e565b60405180910390f35b610305611467565b6040516103129190612ac6565b60405180910390f35b61033560048036038101906103309190612b8d565b61146d565b005b610351600480360381019061034c9190612999565b6114cd565b60405161035e9190612a03565b60405180910390f35b610381600480360381019061037c9190612bcb565b61156b565b60405161038e9190612ac6565b60405180910390f35b61039f611580565b005b6103a9611593565b005b6103c560048036038101906103c09190612999565b611621565b6040516103d2919061293e565b60405180910390f35b6103e3611710565b6040516103f09190612a03565b60405180910390f35b610401611737565b60405161040e919061293e565b60405180910390f35b610431600480360381019061042c9190612bcb565b6117c3565b60405161043e9190612a9e565b60405180910390f35b610461600480360381019061045c9190612b8d565b6117e0565b005b61047d60048036038101906104789190612a46565b6118d8565b60405161048a9190612a9e565b60405180910390f35b6104ad60048036038101906104a89190612c57565b6118ec565b005b6104c960048036038101906104c49190612999565b611a21565b6040516104d6919061293e565b60405180910390f35b6104f960048036038101906104f49190612cdb565b611ae5565b6040516105069190612ac6565b60405180910390f35b610517611b05565b6040516105249190612a03565b60405180910390f35b61054760048036038101906105429190612cdb565b611b2d565b6040516105549190612a9e565b60405180910390f35b61057760048036038101906105729190612bcb565b611b57565b005b6002805461058690612d46565b80601f01602080910402602001604051908101604052809291908181526020018280546105b290612d46565b80156105fd5780601f106105d4576101008083540402835291602001916105fd565b820191905f5260205f20905b8154815290600101906020018083116105e057829003601f168201915b505050505081565b6007602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600454821115801561064757505f82115b1561082f575f60095f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561073e575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610775576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360075f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516108219190612ac6565b60405180910390a350610912565b8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109099190612ac6565b60405180910390a35b6001905092915050565b60605f61094f61092b84611c03565b60405160200161093b9190612dfa565b604051602081830303815290604052611d5c565b9050600d8080549050826109639190612e48565b8154811061097457610973612e78565b5b905f5260205f2001805461098790612d46565b80601f01602080910402602001604051908101604052809291908181526020018280546109b390612d46565b80156109fe5780601f106109d5576101008083540402835291602001916109fe565b820191905f5260205f20905b8154815290600101906020018083116109e157829003601f168201915b5050505050915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60045481116110e65760095f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610acd576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b32576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610bf0575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610c58575060075f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610c8f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c97611d8d565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ce29190612ed2565b92505081905550610cf1611d8d565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160095f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610e479190612ed2565b81548110610e5857610e57612e78565b5b905f5260205f200154905080600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f205481548110610ec457610ec3612e78565b5b905f5260205f200181905550600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610f1d57610f1c612f05565b5b600190038181905f5260205f20015f90559055600b5f8381526020019081526020015f2054600b5f8381526020019081526020015f2081905550600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506110059190612ed2565b600b5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001613f6360219139805190602001206110cb611d8d565b6040516110d89190612ac6565b60405180910390a350611220565b5f60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112125781816111959190612ed2565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61121d848484611dc0565b50505b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611254838383610a2f565b5f8273ffffffffffffffffffffffffffffffffffffffff163b1415801561133c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016112da93929190612f65565b6020604051808303815f875af11580156112f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131a9190613002565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611373576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60605f6113ab61138784611c03565b6040516020016113979190613077565b604051602081830303815290604052611d5c565b9050600e8080549050826113bf9190612e48565b815481106113d0576113cf612e78565b5b905f5260205f200180546113e390612d46565b80601f016020809104026020016040519081016040528092919081815260200182805461140f90612d46565b801561145a5780601f106114315761010080835404028352916020019161145a565b820191905f5260205f20905b81548152906001019060200180831161143d57829003601f168201915b5050505050915050919050565b60045481565b61147561210f565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611566576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6005602052805f5260405f205f915090505481565b61158861210f565b6115915f612196565b565b5f61159c6121c6565b90508073ffffffffffffffffffffffffffffffffffffffff166115bd611b05565b73ffffffffffffffffffffffffffffffffffffffff161461161557806040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161160c9190612a03565b60405180910390fd5b61161e81612196565b50565b60605f61165461163084611c03565b60405160200161164091906130e2565b604051602081830303815290604052611d5c565b9050600f8080549050826116689190612e48565b8154811061167957611678612e78565b5b905f5260205f2001805461168c90612d46565b80601f01602080910402602001604051908101604052809291908181526020018280546116b890612d46565b80156117035780601f106116da57610100808354040283529160200191611703565b820191905f5260205f20905b8154815290600101906020018083116116e657829003601f168201915b5050505050915050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003805461174490612d46565b80601f016020809104026020016040519081016040528092919081815260200182805461177090612d46565b80156117bb5780601f10611792576101008083540402835291602001916117bb565b820191905f5260205f20905b81548152906001019060200180831161179e57829003601f168201915b505050505081565b600c602052805f5260405f205f915054906101000a900460ff1681565b8060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118cc9190612a9e565b60405180910390a35050565b5f6118e4338484611dc0565b905092915050565b6118f7858585610a2f565b5f8473ffffffffffffffffffffffffffffffffffffffff163b141580156119e3575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b815260040161198195949392919061313d565b6020604051808303815f875af115801561199d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c19190613002565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611a1a576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60605f611a2d8361091c565b90505f611a3984611621565b90505f611a4585611378565b90505f83848586878889888b8b604051602001611a6b9a999897969594939291906138f9565b60405160208183030381529060405290505f611ab7611a8988611c03565b611a92846121cd565b604051602001611aa3929190613bcc565b6040516020818303038152906040526121cd565b905080604051602001611aca9190613c5a565b60405160208183030381529060405295505050505050919050565b6006602052815f5260405f20602052805f5260405f205f91509150505481565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b611b5f61210f565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16611bbe611710565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f8203611c49576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611d57565b5f8290505f5b5f8214611c78578080611c6190613c7b565b915050600a82611c719190613cc2565b9150611c4f565b5f8167ffffffffffffffff811115611c9357611c92613cf2565b5b6040519080825280601f01601f191660200182016040528015611cc55781602001600182028036833780820191505090505b5090505b5f8514611d5057600182611cdd9190612ed2565b9150600a85611cec9190612e48565b6030611cf89190613d1f565b60f81b818381518110611d0e57611d0d612e78565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611d499190613cc2565b9450611cc9565b8093505050505b919050565b5f81604051602001611d6e9190613d52565b604051602081830303815290604052805190602001205f1c9050919050565b5f7f0000000000000000000000000000000000000000000000000000000000000000600a611dbb9190613e97565b905090565b5f80611dca611d8d565b90505f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611e9a9190612ed2565b925050819055508460055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fc4575f8360055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611f839190613cc2565b8484611f8f9190613cc2565b611f999190612ed2565b90505f5b81811015611fc157611fae8961232c565b8080611fb990613c7b565b915050611f9d565b50505b600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661209d575f838261201f9190613cc2565b8460055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120689190613cc2565b6120729190612ed2565b90505f5b8181101561209a5761208788612571565b808061209290613c7b565b915050612076565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001613f636021913980519060200120876040516120f99190612ac6565b60405180910390a3600193505050509392505050565b6121176121c6565b73ffffffffffffffffffffffffffffffffffffffff16612135611710565b73ffffffffffffffffffffffffffffffffffffffff1614612194576121586121c6565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161218b9190612a03565b60405180910390fd5b565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556121c3816127f3565b50565b5f33905090565b60605f8251036121ed5760405180602001604052805f8152509050612327565b5f604051806060016040528060408152602001613f236040913990505f60036002855161221a9190613d1f565b6122249190613cc2565b60046122309190613ee1565b67ffffffffffffffff81111561224957612248613cf2565b5b6040519080825280601f01601f19166020018201604052801561227b5781602001600182028036833780820191505090505b509050600182016020820185865187015b808210156122e7576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f811685015184536001840193505061228c565b505060038651066001811461230357600281146123165761231e565b603d6001830353603d600283035361231e565b603d60018303535b50505080925050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612391576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061241c9190612ed2565b8154811061242d5761242c612e78565b5b905f5260205f2001549050600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061248557612484612f05565b5b600190038181905f5260205f20015f90559055600b5f8281526020019081526020015f205f905560095f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560075f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125d6576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045f81548092919060010191905055505f60045490505f73ffffffffffffffffffffffffffffffffffffffff1660095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612682576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160095f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061277f9190612ed2565b600b5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156128eb5780820151818401526020810190506128d0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612910826128b4565b61291a81856128be565b935061292a8185602086016128ce565b612933816128f6565b840191505092915050565b5f6020820190508181035f8301526129568184612906565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b61297881612966565b8114612982575f80fd5b50565b5f813590506129938161296f565b92915050565b5f602082840312156129ae576129ad61295e565b5b5f6129bb84828501612985565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129ed826129c4565b9050919050565b6129fd816129e3565b82525050565b5f602082019050612a165f8301846129f4565b92915050565b612a25816129e3565b8114612a2f575f80fd5b50565b5f81359050612a4081612a1c565b92915050565b5f8060408385031215612a5c57612a5b61295e565b5b5f612a6985828601612a32565b9250506020612a7a85828601612985565b9150509250929050565b5f8115159050919050565b612a9881612a84565b82525050565b5f602082019050612ab15f830184612a8f565b92915050565b612ac081612966565b82525050565b5f602082019050612ad95f830184612ab7565b92915050565b5f805f60608486031215612af657612af561295e565b5b5f612b0386828701612a32565b9350506020612b1486828701612a32565b9250506040612b2586828701612985565b9150509250925092565b5f60ff82169050919050565b612b4481612b2f565b82525050565b5f602082019050612b5d5f830184612b3b565b92915050565b612b6c81612a84565b8114612b76575f80fd5b50565b5f81359050612b8781612b63565b92915050565b5f8060408385031215612ba357612ba261295e565b5b5f612bb085828601612a32565b9250506020612bc185828601612b79565b9150509250929050565b5f60208284031215612be057612bdf61295e565b5b5f612bed84828501612a32565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612c1757612c16612bf6565b5b8235905067ffffffffffffffff811115612c3457612c33612bfa565b5b602083019150836001820283011115612c5057612c4f612bfe565b5b9250929050565b5f805f805f60808688031215612c7057612c6f61295e565b5b5f612c7d88828901612a32565b9550506020612c8e88828901612a32565b9450506040612c9f88828901612985565b935050606086013567ffffffffffffffff811115612cc057612cbf612962565b5b612ccc88828901612c02565b92509250509295509295909350565b5f8060408385031215612cf157612cf061295e565b5b5f612cfe85828601612a32565b9250506020612d0f85828601612a32565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612d5d57607f821691505b602082108103612d7057612d6f612d19565b5b50919050565b5f81905092915050565b7f534b494e434f4c4f5200000000000000000000000000000000000000000000005f82015250565b5f612db4600983612d76565b9150612dbf82612d80565b600982019050919050565b5f612dd4826128b4565b612dde8185612d76565b9350612dee8185602086016128ce565b80840191505092915050565b5f612e0482612da8565b9150612e108284612dca565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612e5282612966565b9150612e5d83612966565b925082612e6d57612e6c612e1b565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612edc82612966565b9150612ee783612966565b9250828203905081811115612eff57612efe612ea5565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f612f505f83612f32565b9150612f5b82612f42565b5f82019050919050565b5f608082019050612f785f8301866129f4565b612f8560208301856129f4565b612f926040830184612ab7565b8181036060830152612fa381612f45565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fe181612fad565b8114612feb575f80fd5b50565b5f81519050612ffc81612fd8565b92915050565b5f602082840312156130175761301661295e565b5b5f61302484828501612fee565b91505092915050565b7f4c4950434f4c4f520000000000000000000000000000000000000000000000005f82015250565b5f613061600883612d76565b915061306c8261302d565b600882019050919050565b5f61308182613055565b915061308d8284612dca565b915081905092915050565b7f5348495254434f4c4f52000000000000000000000000000000000000000000005f82015250565b5f6130cc600a83612d76565b91506130d782613098565b600a82019050919050565b5f6130ec826130c0565b91506130f88284612dca565b915081905092915050565b828183375f83830152505050565b5f61311c8385612f32565b9350613129838584613103565b613132836128f6565b840190509392505050565b5f6080820190506131505f8301886129f4565b61315d60208301876129f4565b61316a6040830186612ab7565b818103606083015261317d818486613111565b90509695505050505050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e773373732e6f72672f5f8201527f323030302f737667222077696474683d2234303022206865696768743d22343060208201527f30222076696577426f783d223020302034303020343030222066696c6c3d226e60408201527f6f6e65223e000000000000000000000000000000000000000000000000000000606082015250565b5f61322f606583612d76565b915061323a82613189565b606582019050919050565b7f3c726563742077696474683d22383022206865696768743d2234302220783d225f8201527f3135302220793d223737222066696c6c3d220000000000000000000000000000602082015250565b5f61329f603283612d76565b91506132aa82613245565b603282019050919050565b7f222f3e00000000000000000000000000000000000000000000000000000000005f82015250565b5f6132e9600383612d76565b91506132f4826132b5565b600382019050919050565b7f3c726563742077696474683d22383022206865696768743d2234302220783d225f8201527f3237302220793d223737222066696c6c3d220000000000000000000000000000602082015250565b5f613359603283612d76565b9150613364826132ff565b603282019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f223131302220793d22313136222066696c6c3d22000000000000000000000000602082015250565b5f6133c9603483612d76565b91506133d48261336f565b603482019050919050565b7f3c726563742077696474683d22383022206865696768743d2234312220783d225f8201527f37302220793d22313536222066696c6c3d220000000000000000000000000000602082015250565b5f613439603283612d76565b9150613444826133df565b603282019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3135302220793d22313536222066696c6c3d2223666666666666222f3e000000602082015250565b5f6134a9603d83612d76565b91506134b48261344f565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3139302220793d22313536222066696c6c3d2223303030303030222f3e000000602082015250565b5f613519603d83612d76565b9150613524826134bf565b603d82019050919050565b7f3c726563742077696474683d22383022206865696768743d2234312220783d225f8201527f3233302220793d22313536222066696c6c3d2223666666666666222f3e000000602082015250565b5f613589603d83612d76565b91506135948261352f565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3331302220793d22313536222066696c6c3d2223303030303030222f3e000000602082015250565b5f6135f9603d83612d76565b91506136048261359f565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3335302220793d22313536222066696c6c3d2200000000000000000000000000602082015250565b5f613669603383612d76565b91506136748261360f565b603382019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2237302220793d22313936222066696c6c3d2200000000000000000000000000602082015250565b5f6136d9603383612d76565b91506136e48261367f565b603382019050919050565b7f3c726563742077696474683d2231363022206865696768743d2234312220783d5f8201527f2232392220793d22323336222066696c6c3d2200000000000000000000000000602082015250565b5f613749603383612d76565b9150613754826136ef565b603382019050919050565b7f3c726563742077696474683d2231363122206865696768743d2234312220783d5f8201527f223138392220793d22323336222066696c6c3d22000000000000000000000000602082015250565b5f6137b9603483612d76565b91506137c48261375f565b603482019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2232392220793d22323736222066696c6c3d2200000000000000000000000000602082015250565b5f613829603383612d76565b9150613834826137cf565b603382019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2232392220793d22333136222066696c6c3d2200000000000000000000000000602082015250565b5f613899603383612d76565b91506138a48261383f565b603382019050919050565b7f3c2f7376673e00000000000000000000000000000000000000000000000000005f82015250565b5f6138e3600683612d76565b91506138ee826138af565b600682019050919050565b5f61390382613223565b915061390e82613293565b915061391a828d612dca565b9150613925826132dd565b91506139308261334d565b915061393c828c612dca565b9150613947826132dd565b9150613952826133bd565b915061395e828b612dca565b9150613969826132dd565b91506139748261342d565b9150613980828a612dca565b915061398b826132dd565b91506139968261349d565b91506139a18261350d565b91506139ac8261357d565b91506139b7826135ed565b91506139c28261365d565b91506139ce8289612dca565b91506139d9826132dd565b91506139e4826136cd565b91506139f08288612dca565b91506139fb826132dd565b9150613a068261373d565b9150613a128287612dca565b9150613a1d826132dd565b9150613a28826137ad565b9150613a348286612dca565b9150613a3f826132dd565b9150613a4a8261381d565b9150613a568285612dca565b9150613a61826132dd565b9150613a6c8261388d565b9150613a788284612dca565b9150613a83826132dd565b9150613a8e826138d7565b91508190509b9a5050505050505050505050565b7f7b226e616d65223a2022424841540000000000000000000000000000000000005f82015250565b5f613ad6600e83612d76565b9150613ae182613aa2565b600e82019050919050565b7f222c20226465736372697074696f6e223a202237372070697820666f726d61745f8201527f206f6620626c61636b20686174206e6674222c2022696d616765223a2022646160208201527f74613a696d616765736f722f7376672b786d6c3b6261736536342c0000000000604082015250565b5f613b6c605b83612d76565b9150613b7782613aec565b605b82019050919050565b7f227d0000000000000000000000000000000000000000000000000000000000005f82015250565b5f613bb6600283612d76565b9150613bc182613b82565b600282019050919050565b5f613bd682613aca565b9150613be28285612dca565b9150613bed82613b60565b9150613bf98284612dca565b9150613c0482613baa565b91508190509392505050565b7f646174613a6170706c6469636174696f6e2f6a736f6e3b6261736536342c00005f82015250565b5f613c44601e83612d76565b9150613c4f82613c10565b601e82019050919050565b5f613c6482613c38565b9150613c708284612dca565b915081905092915050565b5f613c8582612966565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cb757613cb6612ea5565b5b600182019050919050565b5f613ccc82612966565b9150613cd783612966565b925082613ce757613ce6612e1b565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f613d2982612966565b9150613d3483612966565b9250828201905080821115613d4c57613d4b612ea5565b5b92915050565b5f613d5d8284612dca565b915081905092915050565b5f8160011c9050919050565b5f808291508390505b6001851115613dbd57808604811115613d9957613d98612ea5565b5b6001851615613da85780820291505b8081029050613db685613d68565b9450613d7d565b94509492505050565b5f82613dd55760019050613e90565b81613de2575f9050613e90565b8160018114613df85760028114613e0257613e31565b6001915050613e90565b60ff841115613e1457613e13612ea5565b5b8360020a915084821115613e2b57613e2a612ea5565b5b50613e90565b5060208310610133831016604e8410600b8410161715613e665782820a905083811115613e6157613e60612ea5565b5b613e90565b613e738484846001613d74565b92509050818404811115613e8a57613e89612ea5565b5b81810290505b9392505050565b5f613ea182612966565b9150613eac83612b2f565b9250613ed97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613dc6565b905092915050565b5f613eeb82612966565b9150613ef683612966565b9250828202613f0481612966565b91508282048414831517613f1b57613f1a612ea5565b5b509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f5472616e7366657228616464726573732c616464726573732c75696e7432353629a264697066735822122018c4455d9ed9569342286372915a4ff1ffb16d72b853ac5d16cf9801df58ddd964736f6c6343000814003300000000000000000000000087162618f52073362ca772cd66103502426ae345000000000000000000000000000000000000000000000000000000000000004d

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101a7575f3560e01c8063715018a6116100f7578063a9059cbb11610095578063dd62ed3e1161006f578063dd62ed3e146104df578063e30c39781461050f578063e985e9c51461052d578063f2fde38b1461055d576101a7565b8063a9059cbb14610463578063b88d4fde14610493578063c87b56dd146104af576101a7565b80638da5cb5b116100d15780638da5cb5b146103db57806395d89b41146103f95780639b19251a14610417578063a22cb46514610447576101a7565b8063715018a61461039757806379ba5097146103a15780638809c059146103ab576101a7565b8063313ce567116101645780634f02c4201161013e5780634f02c420146102fd57806353d6fd591461031b5780636352211e1461033757806370a0823114610367576101a7565b8063313ce5671461029357806342842e0e146102b15780634a854c39146102cd576101a7565b806306fdde03146101ab578063081812fc146101c9578063095ea7b3146101f957806316b175a71461022957806318160ddd1461025957806323b872dd14610277575b5f80fd5b6101b3610579565b6040516101c0919061293e565b60405180910390f35b6101e360048036038101906101de9190612999565b610605565b6040516101f09190612a03565b60405180910390f35b610213600480360381019061020e9190612a46565b610635565b6040516102209190612a9e565b60405180910390f35b610243600480360381019061023e9190612999565b61091c565b604051610250919061293e565b60405180910390f35b610261610a0b565b60405161026e9190612ac6565b60405180910390f35b610291600480360381019061028c9190612adf565b610a2f565b005b61029b611225565b6040516102a89190612b4a565b60405180910390f35b6102cb60048036038101906102c69190612adf565b611249565b005b6102e760048036038101906102e29190612999565b611378565b6040516102f4919061293e565b60405180910390f35b610305611467565b6040516103129190612ac6565b60405180910390f35b61033560048036038101906103309190612b8d565b61146d565b005b610351600480360381019061034c9190612999565b6114cd565b60405161035e9190612a03565b60405180910390f35b610381600480360381019061037c9190612bcb565b61156b565b60405161038e9190612ac6565b60405180910390f35b61039f611580565b005b6103a9611593565b005b6103c560048036038101906103c09190612999565b611621565b6040516103d2919061293e565b60405180910390f35b6103e3611710565b6040516103f09190612a03565b60405180910390f35b610401611737565b60405161040e919061293e565b60405180910390f35b610431600480360381019061042c9190612bcb565b6117c3565b60405161043e9190612a9e565b60405180910390f35b610461600480360381019061045c9190612b8d565b6117e0565b005b61047d60048036038101906104789190612a46565b6118d8565b60405161048a9190612a9e565b60405180910390f35b6104ad60048036038101906104a89190612c57565b6118ec565b005b6104c960048036038101906104c49190612999565b611a21565b6040516104d6919061293e565b60405180910390f35b6104f960048036038101906104f49190612cdb565b611ae5565b6040516105069190612ac6565b60405180910390f35b610517611b05565b6040516105249190612a03565b60405180910390f35b61054760048036038101906105429190612cdb565b611b2d565b6040516105549190612a9e565b60405180910390f35b61057760048036038101906105729190612bcb565b611b57565b005b6002805461058690612d46565b80601f01602080910402602001604051908101604052809291908181526020018280546105b290612d46565b80156105fd5780601f106105d4576101008083540402835291602001916105fd565b820191905f5260205f20905b8154815290600101906020018083116105e057829003601f168201915b505050505081565b6007602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600454821115801561064757505f82115b1561082f575f60095f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561073e575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610775576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360075f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516108219190612ac6565b60405180910390a350610912565b8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109099190612ac6565b60405180910390a35b6001905092915050565b60605f61094f61092b84611c03565b60405160200161093b9190612dfa565b604051602081830303815290604052611d5c565b9050600d8080549050826109639190612e48565b8154811061097457610973612e78565b5b905f5260205f2001805461098790612d46565b80601f01602080910402602001604051908101604052809291908181526020018280546109b390612d46565b80156109fe5780601f106109d5576101008083540402835291602001916109fe565b820191905f5260205f20905b8154815290600101906020018083116109e157829003601f168201915b5050505050915050919050565b7f0000000000000000000000000000000000000000000000042c96f4095914000081565b60045481116110e65760095f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610acd576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b32576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610bf0575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610c58575060075f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610c8f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c97611d8d565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ce29190612ed2565b92505081905550610cf1611d8d565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160095f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610e479190612ed2565b81548110610e5857610e57612e78565b5b905f5260205f200154905080600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f205481548110610ec457610ec3612e78565b5b905f5260205f200181905550600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610f1d57610f1c612f05565b5b600190038181905f5260205f20015f90559055600b5f8381526020019081526020015f2054600b5f8381526020019081526020015f2081905550600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506110059190612ed2565b600b5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001613f6360219139805190602001206110cb611d8d565b6040516110d89190612ac6565b60405180910390a350611220565b5f60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112125781816111959190612ed2565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61121d848484611dc0565b50505b505050565b7f000000000000000000000000000000000000000000000000000000000000001281565b611254838383610a2f565b5f8273ffffffffffffffffffffffffffffffffffffffff163b1415801561133c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016112da93929190612f65565b6020604051808303815f875af11580156112f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131a9190613002565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611373576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60605f6113ab61138784611c03565b6040516020016113979190613077565b604051602081830303815290604052611d5c565b9050600e8080549050826113bf9190612e48565b815481106113d0576113cf612e78565b5b905f5260205f200180546113e390612d46565b80601f016020809104026020016040519081016040528092919081815260200182805461140f90612d46565b801561145a5780601f106114315761010080835404028352916020019161145a565b820191905f5260205f20905b81548152906001019060200180831161143d57829003601f168201915b5050505050915050919050565b60045481565b61147561210f565b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611566576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6005602052805f5260405f205f915090505481565b61158861210f565b6115915f612196565b565b5f61159c6121c6565b90508073ffffffffffffffffffffffffffffffffffffffff166115bd611b05565b73ffffffffffffffffffffffffffffffffffffffff161461161557806040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161160c9190612a03565b60405180910390fd5b61161e81612196565b50565b60605f61165461163084611c03565b60405160200161164091906130e2565b604051602081830303815290604052611d5c565b9050600f8080549050826116689190612e48565b8154811061167957611678612e78565b5b905f5260205f2001805461168c90612d46565b80601f01602080910402602001604051908101604052809291908181526020018280546116b890612d46565b80156117035780601f106116da57610100808354040283529160200191611703565b820191905f5260205f20905b8154815290600101906020018083116116e657829003601f168201915b5050505050915050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003805461174490612d46565b80601f016020809104026020016040519081016040528092919081815260200182805461177090612d46565b80156117bb5780601f10611792576101008083540402835291602001916117bb565b820191905f5260205f20905b81548152906001019060200180831161179e57829003601f168201915b505050505081565b600c602052805f5260405f205f915054906101000a900460ff1681565b8060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118cc9190612a9e565b60405180910390a35050565b5f6118e4338484611dc0565b905092915050565b6118f7858585610a2f565b5f8473ffffffffffffffffffffffffffffffffffffffff163b141580156119e3575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b815260040161198195949392919061313d565b6020604051808303815f875af115801561199d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c19190613002565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611a1a576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60605f611a2d8361091c565b90505f611a3984611621565b90505f611a4585611378565b90505f83848586878889888b8b604051602001611a6b9a999897969594939291906138f9565b60405160208183030381529060405290505f611ab7611a8988611c03565b611a92846121cd565b604051602001611aa3929190613bcc565b6040516020818303038152906040526121cd565b905080604051602001611aca9190613c5a565b60405160208183030381529060405295505050505050919050565b6006602052815f5260405f20602052805f5260405f205f91509150505481565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b611b5f61210f565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16611bbe611710565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f8203611c49576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611d57565b5f8290505f5b5f8214611c78578080611c6190613c7b565b915050600a82611c719190613cc2565b9150611c4f565b5f8167ffffffffffffffff811115611c9357611c92613cf2565b5b6040519080825280601f01601f191660200182016040528015611cc55781602001600182028036833780820191505090505b5090505b5f8514611d5057600182611cdd9190612ed2565b9150600a85611cec9190612e48565b6030611cf89190613d1f565b60f81b818381518110611d0e57611d0d612e78565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611d499190613cc2565b9450611cc9565b8093505050505b919050565b5f81604051602001611d6e9190613d52565b604051602081830303815290604052805190602001205f1c9050919050565b5f7f0000000000000000000000000000000000000000000000000000000000000012600a611dbb9190613e97565b905090565b5f80611dca611d8d565b90505f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611e9a9190612ed2565b925050819055508460055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fc4575f8360055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611f839190613cc2565b8484611f8f9190613cc2565b611f999190612ed2565b90505f5b81811015611fc157611fae8961232c565b8080611fb990613c7b565b915050611f9d565b50505b600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661209d575f838261201f9190613cc2565b8460055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120689190613cc2565b6120729190612ed2565b90505f5b8181101561209a5761208788612571565b808061209290613c7b565b915050612076565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001613f636021913980519060200120876040516120f99190612ac6565b60405180910390a3600193505050509392505050565b6121176121c6565b73ffffffffffffffffffffffffffffffffffffffff16612135611710565b73ffffffffffffffffffffffffffffffffffffffff1614612194576121586121c6565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161218b9190612a03565b60405180910390fd5b565b60015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556121c3816127f3565b50565b5f33905090565b60605f8251036121ed5760405180602001604052805f8152509050612327565b5f604051806060016040528060408152602001613f236040913990505f60036002855161221a9190613d1f565b6122249190613cc2565b60046122309190613ee1565b67ffffffffffffffff81111561224957612248613cf2565b5b6040519080825280601f01601f19166020018201604052801561227b5781602001600182028036833780820191505090505b509050600182016020820185865187015b808210156122e7576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f811685015184536001840193505061228c565b505060038651066001811461230357600281146123165761231e565b603d6001830353603d600283035361231e565b603d60018303535b50505080925050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612391576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061241c9190612ed2565b8154811061242d5761242c612e78565b5b905f5260205f2001549050600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061248557612484612f05565b5b600190038181905f5260205f20015f90559055600b5f8281526020019081526020015f205f905560095f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560075f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125d6576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045f81548092919060010191905055505f60045490505f73ffffffffffffffffffffffffffffffffffffffff1660095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612682576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160095f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061277f9190612ed2565b600b5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156128eb5780820151818401526020810190506128d0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612910826128b4565b61291a81856128be565b935061292a8185602086016128ce565b612933816128f6565b840191505092915050565b5f6020820190508181035f8301526129568184612906565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b61297881612966565b8114612982575f80fd5b50565b5f813590506129938161296f565b92915050565b5f602082840312156129ae576129ad61295e565b5b5f6129bb84828501612985565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129ed826129c4565b9050919050565b6129fd816129e3565b82525050565b5f602082019050612a165f8301846129f4565b92915050565b612a25816129e3565b8114612a2f575f80fd5b50565b5f81359050612a4081612a1c565b92915050565b5f8060408385031215612a5c57612a5b61295e565b5b5f612a6985828601612a32565b9250506020612a7a85828601612985565b9150509250929050565b5f8115159050919050565b612a9881612a84565b82525050565b5f602082019050612ab15f830184612a8f565b92915050565b612ac081612966565b82525050565b5f602082019050612ad95f830184612ab7565b92915050565b5f805f60608486031215612af657612af561295e565b5b5f612b0386828701612a32565b9350506020612b1486828701612a32565b9250506040612b2586828701612985565b9150509250925092565b5f60ff82169050919050565b612b4481612b2f565b82525050565b5f602082019050612b5d5f830184612b3b565b92915050565b612b6c81612a84565b8114612b76575f80fd5b50565b5f81359050612b8781612b63565b92915050565b5f8060408385031215612ba357612ba261295e565b5b5f612bb085828601612a32565b9250506020612bc185828601612b79565b9150509250929050565b5f60208284031215612be057612bdf61295e565b5b5f612bed84828501612a32565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612c1757612c16612bf6565b5b8235905067ffffffffffffffff811115612c3457612c33612bfa565b5b602083019150836001820283011115612c5057612c4f612bfe565b5b9250929050565b5f805f805f60808688031215612c7057612c6f61295e565b5b5f612c7d88828901612a32565b9550506020612c8e88828901612a32565b9450506040612c9f88828901612985565b935050606086013567ffffffffffffffff811115612cc057612cbf612962565b5b612ccc88828901612c02565b92509250509295509295909350565b5f8060408385031215612cf157612cf061295e565b5b5f612cfe85828601612a32565b9250506020612d0f85828601612a32565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612d5d57607f821691505b602082108103612d7057612d6f612d19565b5b50919050565b5f81905092915050565b7f534b494e434f4c4f5200000000000000000000000000000000000000000000005f82015250565b5f612db4600983612d76565b9150612dbf82612d80565b600982019050919050565b5f612dd4826128b4565b612dde8185612d76565b9350612dee8185602086016128ce565b80840191505092915050565b5f612e0482612da8565b9150612e108284612dca565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612e5282612966565b9150612e5d83612966565b925082612e6d57612e6c612e1b565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612edc82612966565b9150612ee783612966565b9250828203905081811115612eff57612efe612ea5565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f612f505f83612f32565b9150612f5b82612f42565b5f82019050919050565b5f608082019050612f785f8301866129f4565b612f8560208301856129f4565b612f926040830184612ab7565b8181036060830152612fa381612f45565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fe181612fad565b8114612feb575f80fd5b50565b5f81519050612ffc81612fd8565b92915050565b5f602082840312156130175761301661295e565b5b5f61302484828501612fee565b91505092915050565b7f4c4950434f4c4f520000000000000000000000000000000000000000000000005f82015250565b5f613061600883612d76565b915061306c8261302d565b600882019050919050565b5f61308182613055565b915061308d8284612dca565b915081905092915050565b7f5348495254434f4c4f52000000000000000000000000000000000000000000005f82015250565b5f6130cc600a83612d76565b91506130d782613098565b600a82019050919050565b5f6130ec826130c0565b91506130f88284612dca565b915081905092915050565b828183375f83830152505050565b5f61311c8385612f32565b9350613129838584613103565b613132836128f6565b840190509392505050565b5f6080820190506131505f8301886129f4565b61315d60208301876129f4565b61316a6040830186612ab7565b818103606083015261317d818486613111565b90509695505050505050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e773373732e6f72672f5f8201527f323030302f737667222077696474683d2234303022206865696768743d22343060208201527f30222076696577426f783d223020302034303020343030222066696c6c3d226e60408201527f6f6e65223e000000000000000000000000000000000000000000000000000000606082015250565b5f61322f606583612d76565b915061323a82613189565b606582019050919050565b7f3c726563742077696474683d22383022206865696768743d2234302220783d225f8201527f3135302220793d223737222066696c6c3d220000000000000000000000000000602082015250565b5f61329f603283612d76565b91506132aa82613245565b603282019050919050565b7f222f3e00000000000000000000000000000000000000000000000000000000005f82015250565b5f6132e9600383612d76565b91506132f4826132b5565b600382019050919050565b7f3c726563742077696474683d22383022206865696768743d2234302220783d225f8201527f3237302220793d223737222066696c6c3d220000000000000000000000000000602082015250565b5f613359603283612d76565b9150613364826132ff565b603282019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f223131302220793d22313136222066696c6c3d22000000000000000000000000602082015250565b5f6133c9603483612d76565b91506133d48261336f565b603482019050919050565b7f3c726563742077696474683d22383022206865696768743d2234312220783d225f8201527f37302220793d22313536222066696c6c3d220000000000000000000000000000602082015250565b5f613439603283612d76565b9150613444826133df565b603282019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3135302220793d22313536222066696c6c3d2223666666666666222f3e000000602082015250565b5f6134a9603d83612d76565b91506134b48261344f565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3139302220793d22313536222066696c6c3d2223303030303030222f3e000000602082015250565b5f613519603d83612d76565b9150613524826134bf565b603d82019050919050565b7f3c726563742077696474683d22383022206865696768743d2234312220783d225f8201527f3233302220793d22313536222066696c6c3d2223666666666666222f3e000000602082015250565b5f613589603d83612d76565b91506135948261352f565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3331302220793d22313536222066696c6c3d2223303030303030222f3e000000602082015250565b5f6135f9603d83612d76565b91506136048261359f565b603d82019050919050565b7f3c726563742077696474683d22343022206865696768743d2234312220783d225f8201527f3335302220793d22313536222066696c6c3d2200000000000000000000000000602082015250565b5f613669603383612d76565b91506136748261360f565b603382019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2237302220793d22313936222066696c6c3d2200000000000000000000000000602082015250565b5f6136d9603383612d76565b91506136e48261367f565b603382019050919050565b7f3c726563742077696474683d2231363022206865696768743d2234312220783d5f8201527f2232392220793d22323336222066696c6c3d2200000000000000000000000000602082015250565b5f613749603383612d76565b9150613754826136ef565b603382019050919050565b7f3c726563742077696474683d2231363122206865696768743d2234312220783d5f8201527f223138392220793d22323336222066696c6c3d22000000000000000000000000602082015250565b5f6137b9603483612d76565b91506137c48261375f565b603482019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2232392220793d22323736222066696c6c3d2200000000000000000000000000602082015250565b5f613829603383612d76565b9150613834826137cf565b603382019050919050565b7f3c726563742077696474683d2232383022206865696768743d2234312220783d5f8201527f2232392220793d22333136222066696c6c3d2200000000000000000000000000602082015250565b5f613899603383612d76565b91506138a48261383f565b603382019050919050565b7f3c2f7376673e00000000000000000000000000000000000000000000000000005f82015250565b5f6138e3600683612d76565b91506138ee826138af565b600682019050919050565b5f61390382613223565b915061390e82613293565b915061391a828d612dca565b9150613925826132dd565b91506139308261334d565b915061393c828c612dca565b9150613947826132dd565b9150613952826133bd565b915061395e828b612dca565b9150613969826132dd565b91506139748261342d565b9150613980828a612dca565b915061398b826132dd565b91506139968261349d565b91506139a18261350d565b91506139ac8261357d565b91506139b7826135ed565b91506139c28261365d565b91506139ce8289612dca565b91506139d9826132dd565b91506139e4826136cd565b91506139f08288612dca565b91506139fb826132dd565b9150613a068261373d565b9150613a128287612dca565b9150613a1d826132dd565b9150613a28826137ad565b9150613a348286612dca565b9150613a3f826132dd565b9150613a4a8261381d565b9150613a568285612dca565b9150613a61826132dd565b9150613a6c8261388d565b9150613a788284612dca565b9150613a83826132dd565b9150613a8e826138d7565b91508190509b9a5050505050505050505050565b7f7b226e616d65223a2022424841540000000000000000000000000000000000005f82015250565b5f613ad6600e83612d76565b9150613ae182613aa2565b600e82019050919050565b7f222c20226465736372697074696f6e223a202237372070697820666f726d61745f8201527f206f6620626c61636b20686174206e6674222c2022696d616765223a2022646160208201527f74613a696d616765736f722f7376672b786d6c3b6261736536342c0000000000604082015250565b5f613b6c605b83612d76565b9150613b7782613aec565b605b82019050919050565b7f227d0000000000000000000000000000000000000000000000000000000000005f82015250565b5f613bb6600283612d76565b9150613bc182613b82565b600282019050919050565b5f613bd682613aca565b9150613be28285612dca565b9150613bed82613b60565b9150613bf98284612dca565b9150613c0482613baa565b91508190509392505050565b7f646174613a6170706c6469636174696f6e2f6a736f6e3b6261736536342c00005f82015250565b5f613c44601e83612d76565b9150613c4f82613c10565b601e82019050919050565b5f613c6482613c38565b9150613c708284612dca565b915081905092915050565b5f613c8582612966565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cb757613cb6612ea5565b5b600182019050919050565b5f613ccc82612966565b9150613cd783612966565b925082613ce757613ce6612e1b565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f613d2982612966565b9150613d3483612966565b9250828201905080821115613d4c57613d4b612ea5565b5b92915050565b5f613d5d8284612dca565b915081905092915050565b5f8160011c9050919050565b5f808291508390505b6001851115613dbd57808604811115613d9957613d98612ea5565b5b6001851615613da85780820291505b8081029050613db685613d68565b9450613d7d565b94509492505050565b5f82613dd55760019050613e90565b81613de2575f9050613e90565b8160018114613df85760028114613e0257613e31565b6001915050613e90565b60ff841115613e1457613e13612ea5565b5b8360020a915084821115613e2b57613e2a612ea5565b5b50613e90565b5060208310610133831016604e8410600b8410161715613e665782820a905083811115613e6157613e60612ea5565b5b613e90565b613e738484846001613d74565b92509050818404811115613e8a57613e89612ea5565b5b81810290505b9392505050565b5f613ea182612966565b9150613eac83612b2f565b9250613ed97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613dc6565b905092915050565b5f613eeb82612966565b9150613ef683612966565b9250828202613f0481612966565b91508282048414831517613f1b57613f1a612ea5565b5b509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f5472616e7366657228616464726573732c616464726573732c75696e7432353629a264697066735822122018c4455d9ed9569342286372915a4ff1ffb16d72b853ac5d16cf9801df58ddd964736f6c63430008140033

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

00000000000000000000000087162618f52073362ca772cd66103502426ae345000000000000000000000000000000000000000000000000000000000000004d

-----Decoded View---------------
Arg [0] : _owner (address): 0x87162618f52073362Ca772cd66103502426aE345
Arg [1] : _totalSupply (uint256): 77

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000087162618f52073362ca772cd66103502426ae345
Arg [1] : 000000000000000000000000000000000000000000000000000000000000004d


Deployed Bytecode Sourcemap

5021:5581:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1208:18:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1897:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3677:621;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6334:248:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1435:36:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4694:1679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1338:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6658:391;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6588:243:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1567:21:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3024:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3202:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1669:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2286:101:4;;;:::i;:::-;;1761:229:5;;;:::i;:::-;;6837:279:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1631:85:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1259:20:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2493:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4346:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6429:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7141:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7453:2626:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1780:64:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;874:99:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2005:68:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1166:178:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1208:18:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1897:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;3677:621::-;3777:4;3811:6;;3797:10;:20;;:38;;;;;3834:1;3821:10;:14;3797:38;3793:477;;;3851:13;3867:8;:20;3876:10;3867:20;;;;;;;;;;;;;;;;;;;;;3851:36;;3920:5;3906:19;;:10;:19;;;;:59;;;;;3930:16;:23;3947:5;3930:23;;;;;;;;;;;;;;;:35;3954:10;3930:35;;;;;;;;;;;;;;;;;;;;;;;;;3929:36;3906:59;3902:119;;;3992:14;;;;;;;;;;;;;;3902:119;4061:7;4035:11;:23;4047:10;4035:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;4104:7;4088:36;;4097:5;4088:36;;;4113:10;4088:36;;;;;;:::i;:::-;;;;;;;;3837:298;3793:477;;;4188:10;4155:9;:21;4165:10;4155:21;;;;;;;;;;;;;;;:30;4177:7;4155:30;;;;;;;;;;;;;;;:43;;;;4239:7;4218:41;;4227:10;4218:41;;;4248:10;4218:41;;;;;;:::i;:::-;;;;;;;;3793:477;4287:4;4280:11;;3677:621;;;;:::o;6334:248:0:-;6396:13;6421:12;6436:86;6493:17;6502:7;6493:8;:17::i;:::-;6463:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;6436:6;:86::i;:::-;6421:101;;6539:10;6557;:17;;;;6550:4;:24;;;;:::i;:::-;6539:36;;;;;;;;:::i;:::-;;;;;;;;;6532:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6334:248;;;:::o;1435:36:3:-;;;:::o;4694:1679::-;4835:6;;4821:10;:20;4817:1550;;4869:8;:20;4878:10;4869:20;;;;;;;;;;;;;;;;;;;;;4861:28;;:4;:28;;;4857:89;;4916:15;;;;;;;;;;;;;;4857:89;4978:1;4964:16;;:2;:16;;;4960:80;;5007:18;;;;;;;;;;;;;;4960:80;5089:4;5075:18;;:10;:18;;;;:73;;;;;5114:16;:22;5131:4;5114:22;;;;;;;;;;;;;;;:34;5137:10;5114:34;;;;;;;;;;;;;;;;;;;;;;;;;5113:35;5075:73;:130;;;;;5182:11;:23;5194:10;5182:23;;;;;;;;;;;;;;;;;;;;;5168:37;;:10;:37;;;;5075:130;5054:220;;;5245:14;;;;;;;;;;;;;;5054:220;5307:10;:8;:10::i;:::-;5288:9;:15;5298:4;5288:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;5377:10;:8;:10::i;:::-;5360:9;:13;5370:2;5360:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;5439:2;5416:8;:20;5425:10;5416:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;5462:11;:23;5474:10;5462:23;;;;;;;;;;;;5455:30;;;;;;;;;;;5540:17;5560:6;:12;5567:4;5560:12;;;;;;;;;;;;;;;5595:1;5573:6;:12;5580:4;5573:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;5560:37;;;;;;;;:::i;:::-;;;;;;;;;;5540:57;;5651:9;5611:6;:12;5618:4;5611:12;;;;;;;;;;;;;;;5624:11;:23;5636:10;5624:23;;;;;;;;;;;;5611:37;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;5693:6;:12;5700:4;5693:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5795:11;:23;5807:10;5795:23;;;;;;;;;;;;5770:11;:22;5782:9;5770:22;;;;;;;;;;;:48;;;;5870:6;:10;5877:2;5870:10;;;;;;;;;;;;;;;5886;5870:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5998:1;5978:6;:10;5985:2;5978:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;5952:11;:23;5964:10;5952:23;;;;;;;;;;;:47;;;;6038:10;6034:2;6019:30;;6028:4;6019:30;;;;;;;;;;;;6104:2;6068:51;;6098:4;6068:51;;930:42;;;;;;;;;;;;;;;;;920:53;;;;;;6108:10;:8;:10::i;:::-;6068:51;;;;;;:::i;:::-;;;;;;;;4843:1287;4817:1550;;;6150:15;6168:9;:15;6178:4;6168:15;;;;;;;;;;;;;;;:27;6184:10;6168:27;;;;;;;;;;;;;;;;6150:45;;6225:17;6214:7;:28;6210:100;;6300:10;6290:7;:20;;;;:::i;:::-;6260:9;:15;6270:4;6260:15;;;;;;;;;;;;;;;:27;6276:10;6260:27;;;;;;;;;;;;;;;:50;;;;6210:100;6325:31;6335:4;6341:2;6345:10;6325:9;:31::i;:::-;;6136:231;4817:1550;4694:1679;;;:::o;1338:31::-;;;:::o;6658:391::-;6777:26;6790:4;6796:2;6800;6777:12;:26::i;:::-;6849:1;6831:2;:14;;;:19;;:152;;;;;6943:40;;;6866:117;;;6881:2;6866:35;;;6902:10;6914:4;6920:2;6866:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:117;;;;;6831:152;6814:229;;;7015:17;;;;;;;;;;;;;;6814:229;6658:391;;;:::o;6588:243:0:-;6648:13;6673:12;6688:85;6744:17;6753:7;6744:8;:17::i;:::-;6715:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;6688:6;:85::i;:::-;6673:100;;6790:9;6807;:16;;;;6800:4;:23;;;;:::i;:::-;6790:34;;;;;;;;:::i;:::-;;;;;;;;;6783:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6588:243;;;:::o;1567:21:3:-;;;;:::o;3024:109::-;1524:13:4;:11;:13::i;:::-;3121:5:3::1;3101:9;:17;3111:6;3101:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;3024:109:::0;;:::o;3202:187::-;3260:13;3293:8;:12;3302:2;3293:12;;;;;;;;;;;;;;;;;;;;;3285:20;;3337:1;3320:19;;:5;:19;;;3316:67;;3362:10;;;;;;;;;;;;;;3316:67;3202:187;;;:::o;1669:44::-;;;;;;;;;;;;;;;;;:::o;2286:101:4:-;1524:13;:11;:13::i;:::-;2350:30:::1;2377:1;2350:18;:30::i;:::-;2286:101::o:0;1761:229:5:-;1813:14;1830:12;:10;:12::i;:::-;1813:29;;1874:6;1856:24;;:14;:12;:14::i;:::-;:24;;;1852:96;;1930:6;1903:34;;;;;;;;;;;:::i;:::-;;;;;;;;1852:96;1957:26;1976:6;1957:18;:26::i;:::-;1803:187;1761:229::o;6837:279:0:-;6923:13;6952:12;6967:87;7025:17;7034:7;7025:8;:17::i;:::-;6994:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;6967:6;:87::i;:::-;6952:102;;7071:11;7090;:18;;;;7083:4;:25;;;;:::i;:::-;7071:38;;;;;;;;:::i;:::-;;;;;;;;;7064:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6837:279;;;:::o;1631:85:4:-;1677:7;1703:6;;;;;;;;;;;1696:13;;1631:85;:::o;1259:20:3:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2493:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4346:203::-;4472:8;4431:16;:28;4448:10;4431:28;;;;;;;;;;;;;;;:38;4460:8;4431:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;4523:8;4496:46;;4511:10;4496:46;;;4533:8;4496:46;;;;;;:::i;:::-;;;;;;;;4346:203;;:::o;6429:155::-;6521:4;6544:33;6554:10;6566:2;6570:6;6544:9;:33::i;:::-;6537:40;;6429:155;;;;:::o;7141:422::-;7289:26;7302:4;7308:2;7312;7289:12;:26::i;:::-;7361:1;7343:2;:14;;;:19;;:154;;;;;7457:40;;;7378:119;;;7393:2;7378:35;;;7414:10;7426:4;7432:2;7436:4;;7378:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:119;;;;;7343:154;7326:231;;;7529:17;;;;;;;;;;;;;;7326:231;7141:422;;;;;:::o;7453:2626:0:-;7550:13;7579:23;7605;7620:7;7605:14;:23::i;:::-;7579:49;;7638:24;7665:23;7680:7;7665:14;:23::i;:::-;7638:50;;7698:22;7723:21;7736:7;7723:12;:21::i;:::-;7698:46;;7755:17;8020:9;8140;8262;8382;8827;8948;9069;9191:8;9311:9;9432:10;7795:1710;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7755:1760;;9526:18;9547:443;9709:17;9718:7;9709:8;:17::i;:::-;9871:25;9891:3;9871:13;:25::i;:::-;9625:323;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9547:13;:443::i;:::-;9526:464;;10066:4;10015:56;;;;;;;;:::i;:::-;;;;;;;;;;;;;10001:71;;;;;;;7453:2626;;;:::o;1780:64:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;874:99:5:-;927:7;953:13;;;;;;;;;;;946:20;;874:99;:::o;2005:68:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1166:178:5:-;1524:13:4;:11;:13::i;:::-;1271:8:5::1;1255:13;;:24;;;;;;;;;;;;;;;;;;1328:8;1294:43;;1319:7;:5;:7::i;:::-;1294:43;;;;;;;;;;;;1166:178:::0;:::o;10085:515:0:-;10141:13;10179:1;10170:5;:10;10166:51;;10196:10;;;;;;;;;;;;;;;;;;;;;10166:51;10226:12;10241:5;10226:20;;10256:14;10280:75;10295:1;10287:4;:9;10280:75;;10312:8;;;;;:::i;:::-;;;;10342:2;10334:10;;;;;:::i;:::-;;;10280:75;;;10364:19;10396:6;10386:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10364:39;;10413:150;10429:1;10420:5;:10;10413:150;;10456:1;10446:11;;;;;:::i;:::-;;;10522:2;10514:5;:10;;;;:::i;:::-;10501:2;:24;;;;:::i;:::-;10488:39;;10471:6;10478;10471:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;10550:2;10541:11;;;;;:::i;:::-;;;10413:150;;;10586:6;10572:21;;;;;10085:515;;;;:::o;6192:136::-;6252:7;6313:5;6296:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;6286:34;;;;;;6278:43;;6271:50;;6192:136;;;:::o;8746:90:3:-;8789:7;8821:8;8815:2;:14;;;;:::i;:::-;8808:21;;8746:90;:::o;7628:1082::-;7745:4;7761:12;7776:10;:8;:10::i;:::-;7761:25;;7796:27;7826:9;:15;7836:4;7826:15;;;;;;;;;;;;;;;;7796:45;;7851:29;7883:9;:13;7893:2;7883:13;;;;;;;;;;;;;;;;7851:45;;7926:6;7907:9;:15;7917:4;7907:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;7984:6;7967:9;:13;7977:2;7967:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;8071:9;:15;8081:4;8071:15;;;;;;;;;;;;;;;;;;;;;;;;;8066:245;;8102:22;8193:4;8175:9;:15;8185:4;8175:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;8150:4;8128:19;:26;;;;:::i;:::-;8127:71;;;;:::i;:::-;8102:96;;8217:9;8212:89;8236:14;8232:1;:18;8212:89;;;8275:11;8281:4;8275:5;:11::i;:::-;8252:3;;;;;:::i;:::-;;;;8212:89;;;;8088:223;8066:245;8384:9;:13;8394:2;8384:13;;;;;;;;;;;;;;;;;;;;;;;;;8379:241;;8413:22;8504:4;8480:21;:28;;;;:::i;:::-;8455:4;8439:9;:13;8449:2;8439:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;8438:71;;;;:::i;:::-;8413:96;;8528:9;8523:87;8547:14;8543:1;:18;8523:87;;;8586:9;8592:2;8586:5;:9::i;:::-;8563:3;;;;;:::i;:::-;;;;8523:87;;;;8399:221;8379:241;8671:2;8635:47;;8665:4;8635:47;;930:42;;;;;;;;;;;;;;;;;920:53;;;;;;8675:6;8635:47;;;;;;:::i;:::-;;;;;;;;8699:4;8692:11;;;;;7628:1082;;;;;:::o;1789:162:4:-;1859:12;:10;:12::i;:::-;1848:23;;:7;:5;:7::i;:::-;:23;;;1844:101;;1921:12;:10;:12::i;:::-;1894:40;;;;;;;;;;;:::i;:::-;;;;;;;;1844:101;1789:162::o;1528:153:5:-;1617:13;;1610:20;;;;;;;;;;;1640:34;1665:8;1640:24;:34::i;:::-;1528:153;:::o;656:96:2:-;709:7;735:10;728:17;;656:96;:::o;476:3026:1:-;534:13;781:1;766:4;:11;:16;762:31;;784:9;;;;;;;;;;;;;;;;762:31;843:19;865:6;;;;;;;;;;;;;;;;;843:28;;1274:20;1333:1;1328;1314:4;:11;:15;;;;:::i;:::-;1313:21;;;;:::i;:::-;1308:1;:27;;;;:::i;:::-;1297:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1274:62;;1511:1;1504:5;1500:13;1612:2;1604:6;1600:15;1719:4;1770;1764:11;1758:4;1754:22;1682:1403;1803:6;1794:7;1791:19;1682:1403;;;1905:1;1896:7;1892:15;1881:26;;1943:7;1937:14;2586:4;2578:5;2574:2;2570:14;2566:25;2556:8;2552:40;2546:47;2535:9;2527:67;2639:1;2628:9;2624:17;2611:30;;2729:4;2721:5;2717:2;2713:14;2709:25;2699:8;2695:40;2689:47;2678:9;2670:67;2782:1;2771:9;2767:17;2754:30;;2871:4;2863:5;2860:1;2856:13;2852:24;2842:8;2838:39;2832:46;2821:9;2813:66;2924:1;2913:9;2909:17;2896:30;;3005:4;2998:5;2994:16;2984:8;2980:31;2974:38;2963:9;2955:58;3058:1;3047:9;3043:17;3030:30;;1828:1257;1682:1403;;;1686:104;;3243:1;3236:4;3230:11;3226:19;3263:1;3258:120;;;;3396:1;3391:71;;;;3219:243;;3258:120;3310:4;3306:1;3295:9;3291:17;3283:32;3359:4;3355:1;3344:9;3340:17;3332:32;3258:120;;3391:71;3443:4;3439:1;3428:9;3424:17;3416:32;3219:243;;1399:2073;;3489:6;3482:13;;;;476:3026;;;;:::o;9302:361:3:-;9378:1;9362:18;;:4;:18;;;9358:71;;9403:15;;;;;;;;;;;;;;9358:71;9439:10;9452:6;:12;9459:4;9452:12;;;;;;;;;;;;;;;9487:1;9465:6;:12;9472:4;9465:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;9452:37;;;;;;;;:::i;:::-;;;;;;;;;;9439:50;;9499:6;:12;9506:4;9499:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9534:11;:15;9546:2;9534:15;;;;;;;;;;;9527:22;;;9566:8;:12;9575:2;9566:12;;;;;;;;;;;;9559:19;;;;;;;;;;;9595:11;:15;9607:2;9595:15;;;;;;;;;;;;9588:22;;;;;;;;;;;9653:2;9649:1;9626:30;;9635:4;9626:30;;;;;;;;;;;;9348:315;9302:361;:::o;8842:454::-;8914:1;8900:16;;:2;:16;;;8896:72;;8939:18;;;;;;;;;;;;;;8896:72;9002:6;;:8;;;;;;;;;;;;;9031:10;9044:6;;9031:19;;9089:1;9065:26;;:8;:12;9074:2;9065:12;;;;;;;;;;;;;;;;;;;;;:26;;;9061:79;;9114:15;;;;;;;;;;;;;;9061:79;9165:2;9150:8;:12;9159:2;9150:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;9177:6;:10;9184:2;9177:10;;;;;;;;;;;;;;;9193:2;9177:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9244:1;9224:6;:10;9231:2;9224:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;9206:11;:15;9218:2;9206:15;;;;;;;;;;;:39;;;;9286:2;9282;9261:28;;9278:1;9261:28;;;;;;;;;;;;8886:410;8842:454;:::o;2905:187:4:-;2978:16;2997:6;;;;;;;;;;;2978:25;;3022:8;3013:6;;:17;;;;;;;;;;;;;;;;;;3076:8;3045:40;;3066:8;3045:40;;;;;;;;;;;;2968:124;2905:187;:::o;7:99:6:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:118::-;2688:24;2706:5;2688:24;:::i;:::-;2683:3;2676:37;2601:118;;:::o;2725:222::-;2818:4;2856:2;2845:9;2841:18;2833:26;;2869:71;2937:1;2926:9;2922:17;2913:6;2869:71;:::i;:::-;2725:222;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:118::-;4220:24;4238:5;4220:24;:::i;:::-;4215:3;4208:37;4133:118;;:::o;4257:222::-;4350:4;4388:2;4377:9;4373:18;4365:26;;4401:71;4469:1;4458:9;4454:17;4445:6;4401:71;:::i;:::-;4257:222;;;;:::o;4485:619::-;4562:6;4570;4578;4627:2;4615:9;4606:7;4602:23;4598:32;4595:119;;;4633:79;;:::i;:::-;4595:119;4753:1;4778:53;4823:7;4814:6;4803:9;4799:22;4778:53;:::i;:::-;4768:63;;4724:117;4880:2;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4851:118;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;4485:619;;;;;:::o;5110:86::-;5145:7;5185:4;5178:5;5174:16;5163:27;;5110:86;;;:::o;5202:112::-;5285:22;5301:5;5285:22;:::i;:::-;5280:3;5273:35;5202:112;;:::o;5320:214::-;5409:4;5447:2;5436:9;5432:18;5424:26;;5460:67;5524:1;5513:9;5509:17;5500:6;5460:67;:::i;:::-;5320:214;;;;:::o;5540:116::-;5610:21;5625:5;5610:21;:::i;:::-;5603:5;5600:32;5590:60;;5646:1;5643;5636:12;5590:60;5540:116;:::o;5662:133::-;5705:5;5743:6;5730:20;5721:29;;5759:30;5783:5;5759:30;:::i;:::-;5662:133;;;;:::o;5801:468::-;5866:6;5874;5923:2;5911:9;5902:7;5898:23;5894:32;5891:119;;;5929:79;;:::i;:::-;5891:119;6049:1;6074:53;6119:7;6110:6;6099:9;6095:22;6074:53;:::i;:::-;6064:63;;6020:117;6176:2;6202:50;6244:7;6235:6;6224:9;6220:22;6202:50;:::i;:::-;6192:60;;6147:115;5801:468;;;;;:::o;6275:329::-;6334:6;6383:2;6371:9;6362:7;6358:23;6354:32;6351:119;;;6389:79;;:::i;:::-;6351:119;6509:1;6534:53;6579:7;6570:6;6559:9;6555:22;6534:53;:::i;:::-;6524:63;;6480:117;6275:329;;;;:::o;6610:117::-;6719:1;6716;6709:12;6733:117;6842:1;6839;6832:12;6856:117;6965:1;6962;6955:12;6992:552;7049:8;7059:6;7109:3;7102:4;7094:6;7090:17;7086:27;7076:122;;7117:79;;:::i;:::-;7076:122;7230:6;7217:20;7207:30;;7260:18;7252:6;7249:30;7246:117;;;7282:79;;:::i;:::-;7246:117;7396:4;7388:6;7384:17;7372:29;;7450:3;7442:4;7434:6;7430:17;7420:8;7416:32;7413:41;7410:128;;;7457:79;;:::i;:::-;7410:128;6992:552;;;;;:::o;7550:963::-;7647:6;7655;7663;7671;7679;7728:3;7716:9;7707:7;7703:23;7699:33;7696:120;;;7735:79;;:::i;:::-;7696:120;7855:1;7880:53;7925:7;7916:6;7905:9;7901:22;7880:53;:::i;:::-;7870:63;;7826:117;7982:2;8008:53;8053:7;8044:6;8033:9;8029:22;8008:53;:::i;:::-;7998:63;;7953:118;8110:2;8136:53;8181:7;8172:6;8161:9;8157:22;8136:53;:::i;:::-;8126:63;;8081:118;8266:2;8255:9;8251:18;8238:32;8297:18;8289:6;8286:30;8283:117;;;8319:79;;:::i;:::-;8283:117;8432:64;8488:7;8479:6;8468:9;8464:22;8432:64;:::i;:::-;8414:82;;;;8209:297;7550:963;;;;;;;;:::o;8519:474::-;8587:6;8595;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8897:2;8923:53;8968:7;8959:6;8948:9;8944:22;8923:53;:::i;:::-;8913:63;;8868:118;8519:474;;;;;:::o;8999:180::-;9047:77;9044:1;9037:88;9144:4;9141:1;9134:15;9168:4;9165:1;9158:15;9185:320;9229:6;9266:1;9260:4;9256:12;9246:22;;9313:1;9307:4;9303:12;9334:18;9324:81;;9390:4;9382:6;9378:17;9368:27;;9324:81;9452:2;9444:6;9441:14;9421:18;9418:38;9415:84;;9471:18;;:::i;:::-;9415:84;9236:269;9185:320;;;:::o;9511:148::-;9613:11;9650:3;9635:18;;9511:148;;;;:::o;9665:159::-;9805:11;9801:1;9793:6;9789:14;9782:35;9665:159;:::o;9830:400::-;9990:3;10011:84;10093:1;10088:3;10011:84;:::i;:::-;10004:91;;10104:93;10193:3;10104:93;:::i;:::-;10222:1;10217:3;10213:11;10206:18;;9830:400;;;:::o;10236:390::-;10342:3;10370:39;10403:5;10370:39;:::i;:::-;10425:89;10507:6;10502:3;10425:89;:::i;:::-;10418:96;;10523:65;10581:6;10576:3;10569:4;10562:5;10558:16;10523:65;:::i;:::-;10613:6;10608:3;10604:16;10597:23;;10346:280;10236:390;;;;:::o;10632:541::-;10865:3;10887:148;11031:3;10887:148;:::i;:::-;10880:155;;11052:95;11143:3;11134:6;11052:95;:::i;:::-;11045:102;;11164:3;11157:10;;10632:541;;;;:::o;11179:180::-;11227:77;11224:1;11217:88;11324:4;11321:1;11314:15;11348:4;11345:1;11338:15;11365:176;11397:1;11414:20;11432:1;11414:20;:::i;:::-;11409:25;;11448:20;11466:1;11448:20;:::i;:::-;11443:25;;11487:1;11477:35;;11492:18;;:::i;:::-;11477:35;11533:1;11530;11526:9;11521:14;;11365:176;;;;:::o;11547:180::-;11595:77;11592:1;11585:88;11692:4;11689:1;11682:15;11716:4;11713:1;11706:15;11733:180;11781:77;11778:1;11771:88;11878:4;11875:1;11868:15;11902:4;11899:1;11892:15;11919:194;11959:4;11979:20;11997:1;11979:20;:::i;:::-;11974:25;;12013:20;12031:1;12013:20;:::i;:::-;12008:25;;12057:1;12054;12050:9;12042:17;;12081:1;12075:4;12072:11;12069:37;;;12086:18;;:::i;:::-;12069:37;11919:194;;;;:::o;12119:180::-;12167:77;12164:1;12157:88;12264:4;12261:1;12254:15;12288:4;12285:1;12278:15;12305:168;12388:11;12422:6;12417:3;12410:19;12462:4;12457:3;12453:14;12438:29;;12305:168;;;;:::o;12479:114::-;;:::o;12599:362::-;12740:3;12761:65;12824:1;12819:3;12761:65;:::i;:::-;12754:72;;12835:93;12924:3;12835:93;:::i;:::-;12953:1;12948:3;12944:11;12937:18;;12599:362;;;:::o;12967:748::-;13216:4;13254:3;13243:9;13239:19;13231:27;;13268:71;13336:1;13325:9;13321:17;13312:6;13268:71;:::i;:::-;13349:72;13417:2;13406:9;13402:18;13393:6;13349:72;:::i;:::-;13431;13499:2;13488:9;13484:18;13475:6;13431:72;:::i;:::-;13550:9;13544:4;13540:20;13535:2;13524:9;13520:18;13513:48;13578:130;13703:4;13578:130;:::i;:::-;13570:138;;12967:748;;;;;;:::o;13721:149::-;13757:7;13797:66;13790:5;13786:78;13775:89;;13721:149;;;:::o;13876:120::-;13948:23;13965:5;13948:23;:::i;:::-;13941:5;13938:34;13928:62;;13986:1;13983;13976:12;13928:62;13876:120;:::o;14002:141::-;14058:5;14089:6;14083:13;14074:22;;14105:32;14131:5;14105:32;:::i;:::-;14002:141;;;;:::o;14149:349::-;14218:6;14267:2;14255:9;14246:7;14242:23;14238:32;14235:119;;;14273:79;;:::i;:::-;14235:119;14393:1;14418:63;14473:7;14464:6;14453:9;14449:22;14418:63;:::i;:::-;14408:73;;14364:127;14149:349;;;;:::o;14504:158::-;14644:10;14640:1;14632:6;14628:14;14621:34;14504:158;:::o;14668:400::-;14828:3;14849:84;14931:1;14926:3;14849:84;:::i;:::-;14842:91;;14942:93;15031:3;14942:93;:::i;:::-;15060:1;15055:3;15051:11;15044:18;;14668:400;;;:::o;15074:541::-;15307:3;15329:148;15473:3;15329:148;:::i;:::-;15322:155;;15494:95;15585:3;15576:6;15494:95;:::i;:::-;15487:102;;15606:3;15599:10;;15074:541;;;;:::o;15621:160::-;15761:12;15757:1;15749:6;15745:14;15738:36;15621:160;:::o;15787:402::-;15947:3;15968:85;16050:2;16045:3;15968:85;:::i;:::-;15961:92;;16062:93;16151:3;16062:93;:::i;:::-;16180:2;16175:3;16171:12;16164:19;;15787:402;;;:::o;16195:541::-;16428:3;16450:148;16594:3;16450:148;:::i;:::-;16443:155;;16615:95;16706:3;16697:6;16615:95;:::i;:::-;16608:102;;16727:3;16720:10;;16195:541;;;;:::o;16742:146::-;16839:6;16834:3;16829;16816:30;16880:1;16871:6;16866:3;16862:16;16855:27;16742:146;;;:::o;16916:314::-;17012:3;17033:70;17096:6;17091:3;17033:70;:::i;:::-;17026:77;;17113:56;17162:6;17157:3;17150:5;17113:56;:::i;:::-;17194:29;17216:6;17194:29;:::i;:::-;17189:3;17185:39;17178:46;;16916:314;;;;;:::o;17236:660::-;17441:4;17479:3;17468:9;17464:19;17456:27;;17493:71;17561:1;17550:9;17546:17;17537:6;17493:71;:::i;:::-;17574:72;17642:2;17631:9;17627:18;17618:6;17574:72;:::i;:::-;17656;17724:2;17713:9;17709:18;17700:6;17656:72;:::i;:::-;17775:9;17769:4;17765:20;17760:2;17749:9;17745:18;17738:48;17803:86;17884:4;17875:6;17867;17803:86;:::i;:::-;17795:94;;17236:660;;;;;;;;:::o;17902:517::-;18042:66;18038:1;18030:6;18026:14;18019:90;18143:66;18138:2;18130:6;18126:15;18119:91;18244:66;18239:2;18231:6;18227:15;18220:91;18345:66;18340:2;18332:6;18328:15;18321:91;17902:517;:::o;18425:404::-;18585:3;18606:86;18688:3;18683;18606:86;:::i;:::-;18599:93;;18701;18790:3;18701:93;:::i;:::-;18819:3;18814;18810:13;18803:20;;18425:404;;;:::o;18835:315::-;18975:66;18971:1;18963:6;18959:14;18952:90;19076:66;19071:2;19063:6;19059:15;19052:91;18835:315;:::o;19156:402::-;19316:3;19337:85;19419:2;19414:3;19337:85;:::i;:::-;19330:92;;19431:93;19520:3;19431:93;:::i;:::-;19549:2;19544:3;19540:12;19533:19;;19156:402;;;:::o;19564:214::-;19704:66;19700:1;19692:6;19688:14;19681:90;19564:214;:::o;19784:400::-;19944:3;19965:84;20047:1;20042:3;19965:84;:::i;:::-;19958:91;;20058:93;20147:3;20058:93;:::i;:::-;20176:1;20171:3;20167:11;20160:18;;19784:400;;;:::o;20190:315::-;20330:66;20326:1;20318:6;20314:14;20307:90;20431:66;20426:2;20418:6;20414:15;20407:91;20190:315;:::o;20511:402::-;20671:3;20692:85;20774:2;20769:3;20692:85;:::i;:::-;20685:92;;20786:93;20875:3;20786:93;:::i;:::-;20904:2;20899:3;20895:12;20888:19;;20511:402;;;:::o;20919:315::-;21059:66;21055:1;21047:6;21043:14;21036:90;21160:66;21155:2;21147:6;21143:15;21136:91;20919:315;:::o;21240:402::-;21400:3;21421:85;21503:2;21498:3;21421:85;:::i;:::-;21414:92;;21515:93;21604:3;21515:93;:::i;:::-;21633:2;21628:3;21624:12;21617:19;;21240:402;;;:::o;21648:315::-;21788:66;21784:1;21776:6;21772:14;21765:90;21889:66;21884:2;21876:6;21872:15;21865:91;21648:315;:::o;21969:402::-;22129:3;22150:85;22232:2;22227:3;22150:85;:::i;:::-;22143:92;;22244:93;22333:3;22244:93;:::i;:::-;22362:2;22357:3;22353:12;22346:19;;21969:402;;;:::o;22377:315::-;22517:66;22513:1;22505:6;22501:14;22494:90;22618:66;22613:2;22605:6;22601:15;22594:91;22377:315;:::o;22698:402::-;22858:3;22879:85;22961:2;22956:3;22879:85;:::i;:::-;22872:92;;22973:93;23062:3;22973:93;:::i;:::-;23091:2;23086:3;23082:12;23075:19;;22698:402;;;:::o;23106:315::-;23246:66;23242:1;23234:6;23230:14;23223:90;23347:66;23342:2;23334:6;23330:15;23323:91;23106:315;:::o;23427:402::-;23587:3;23608:85;23690:2;23685:3;23608:85;:::i;:::-;23601:92;;23702:93;23791:3;23702:93;:::i;:::-;23820:2;23815:3;23811:12;23804:19;;23427:402;;;:::o;23835:315::-;23975:66;23971:1;23963:6;23959:14;23952:90;24076:66;24071:2;24063:6;24059:15;24052:91;23835:315;:::o;24156:402::-;24316:3;24337:85;24419:2;24414:3;24337:85;:::i;:::-;24330:92;;24431:93;24520:3;24431:93;:::i;:::-;24549:2;24544:3;24540:12;24533:19;;24156:402;;;:::o;24564:315::-;24704:66;24700:1;24692:6;24688:14;24681:90;24805:66;24800:2;24792:6;24788:15;24781:91;24564:315;:::o;24885:402::-;25045:3;25066:85;25148:2;25143:3;25066:85;:::i;:::-;25059:92;;25160:93;25249:3;25160:93;:::i;:::-;25278:2;25273:3;25269:12;25262:19;;24885:402;;;:::o;25293:315::-;25433:66;25429:1;25421:6;25417:14;25410:90;25534:66;25529:2;25521:6;25517:15;25510:91;25293:315;:::o;25614:402::-;25774:3;25795:85;25877:2;25872:3;25795:85;:::i;:::-;25788:92;;25889:93;25978:3;25889:93;:::i;:::-;26007:2;26002:3;25998:12;25991:19;;25614:402;;;:::o;26022:315::-;26162:66;26158:1;26150:6;26146:14;26139:90;26263:66;26258:2;26250:6;26246:15;26239:91;26022:315;:::o;26343:402::-;26503:3;26524:85;26606:2;26601:3;26524:85;:::i;:::-;26517:92;;26618:93;26707:3;26618:93;:::i;:::-;26736:2;26731:3;26727:12;26720:19;;26343:402;;;:::o;26751:315::-;26891:66;26887:1;26879:6;26875:14;26868:90;26992:66;26987:2;26979:6;26975:15;26968:91;26751:315;:::o;27072:402::-;27232:3;27253:85;27335:2;27330:3;27253:85;:::i;:::-;27246:92;;27347:93;27436:3;27347:93;:::i;:::-;27465:2;27460:3;27456:12;27449:19;;27072:402;;;:::o;27480:315::-;27620:66;27616:1;27608:6;27604:14;27597:90;27721:66;27716:2;27708:6;27704:15;27697:91;27480:315;:::o;27801:402::-;27961:3;27982:85;28064:2;28059:3;27982:85;:::i;:::-;27975:92;;28076:93;28165:3;28076:93;:::i;:::-;28194:2;28189:3;28185:12;28178:19;;27801:402;;;:::o;28209:315::-;28349:66;28345:1;28337:6;28333:14;28326:90;28450:66;28445:2;28437:6;28433:15;28426:91;28209:315;:::o;28530:402::-;28690:3;28711:85;28793:2;28788:3;28711:85;:::i;:::-;28704:92;;28805:93;28894:3;28805:93;:::i;:::-;28923:2;28918:3;28914:12;28907:19;;28530:402;;;:::o;28938:315::-;29078:66;29074:1;29066:6;29062:14;29055:90;29179:66;29174:2;29166:6;29162:15;29155:91;28938:315;:::o;29259:402::-;29419:3;29440:85;29522:2;29517:3;29440:85;:::i;:::-;29433:92;;29534:93;29623:3;29534:93;:::i;:::-;29652:2;29647:3;29643:12;29636:19;;29259:402;;;:::o;29667:156::-;29807:8;29803:1;29795:6;29791:14;29784:32;29667:156;:::o;29829:400::-;29989:3;30010:84;30092:1;30087:3;30010:84;:::i;:::-;30003:91;;30103:93;30192:3;30103:93;:::i;:::-;30221:1;30216:3;30212:11;30205:18;;29829:400;;;:::o;30235:8631::-;33425:3;33447:148;33591:3;33447:148;:::i;:::-;33440:155;;33612:148;33756:3;33612:148;:::i;:::-;33605:155;;33777:95;33868:3;33859:6;33777:95;:::i;:::-;33770:102;;33889:148;34033:3;33889:148;:::i;:::-;33882:155;;34054:148;34198:3;34054:148;:::i;:::-;34047:155;;34219:95;34310:3;34301:6;34219:95;:::i;:::-;34212:102;;34331:148;34475:3;34331:148;:::i;:::-;34324:155;;34496:148;34640:3;34496:148;:::i;:::-;34489:155;;34661:95;34752:3;34743:6;34661:95;:::i;:::-;34654:102;;34773:148;34917:3;34773:148;:::i;:::-;34766:155;;34938:148;35082:3;34938:148;:::i;:::-;34931:155;;35103:95;35194:3;35185:6;35103:95;:::i;:::-;35096:102;;35215:148;35359:3;35215:148;:::i;:::-;35208:155;;35380:148;35524:3;35380:148;:::i;:::-;35373:155;;35545:148;35689:3;35545:148;:::i;:::-;35538:155;;35710:148;35854:3;35710:148;:::i;:::-;35703:155;;35875:148;36019:3;35875:148;:::i;:::-;35868:155;;36040:148;36184:3;36040:148;:::i;:::-;36033:155;;36205:95;36296:3;36287:6;36205:95;:::i;:::-;36198:102;;36317:148;36461:3;36317:148;:::i;:::-;36310:155;;36482:148;36626:3;36482:148;:::i;:::-;36475:155;;36647:95;36738:3;36729:6;36647:95;:::i;:::-;36640:102;;36759:148;36903:3;36759:148;:::i;:::-;36752:155;;36924:148;37068:3;36924:148;:::i;:::-;36917:155;;37089:95;37180:3;37171:6;37089:95;:::i;:::-;37082:102;;37201:148;37345:3;37201:148;:::i;:::-;37194:155;;37366:148;37510:3;37366:148;:::i;:::-;37359:155;;37531:95;37622:3;37613:6;37531:95;:::i;:::-;37524:102;;37643:148;37787:3;37643:148;:::i;:::-;37636:155;;37808:148;37952:3;37808:148;:::i;:::-;37801:155;;37973:95;38064:3;38055:6;37973:95;:::i;:::-;37966:102;;38085:148;38229:3;38085:148;:::i;:::-;38078:155;;38250:148;38394:3;38250:148;:::i;:::-;38243:155;;38415:95;38506:3;38497:6;38415:95;:::i;:::-;38408:102;;38527:148;38671:3;38527:148;:::i;:::-;38520:155;;38692:148;38836:3;38692:148;:::i;:::-;38685:155;;38857:3;38850:10;;30235:8631;;;;;;;;;;;;;:::o;38872:214::-;39012:66;39008:1;39000:6;38996:14;38989:90;38872:214;:::o;39092:402::-;39252:3;39273:85;39355:2;39350:3;39273:85;:::i;:::-;39266:92;;39367:93;39456:3;39367:93;:::i;:::-;39485:2;39480:3;39476:12;39469:19;;39092:402;;;:::o;39500:379::-;39640:66;39636:1;39628:6;39624:14;39617:90;39741:66;39736:2;39728:6;39724:15;39717:91;39842:29;39837:2;39829:6;39825:15;39818:54;39500:379;:::o;39885:402::-;40045:3;40066:85;40148:2;40143:3;40066:85;:::i;:::-;40059:92;;40160:93;40249:3;40160:93;:::i;:::-;40278:2;40273:3;40269:12;40262:19;;39885:402;;;:::o;40293:214::-;40433:66;40429:1;40421:6;40417:14;40410:90;40293:214;:::o;40513:400::-;40673:3;40694:84;40776:1;40771:3;40694:84;:::i;:::-;40687:91;;40787:93;40876:3;40787:93;:::i;:::-;40905:1;40900:3;40896:11;40889:18;;40513:400;;;:::o;40919:1233::-;41402:3;41424:148;41568:3;41424:148;:::i;:::-;41417:155;;41589:95;41680:3;41671:6;41589:95;:::i;:::-;41582:102;;41701:148;41845:3;41701:148;:::i;:::-;41694:155;;41866:95;41957:3;41948:6;41866:95;:::i;:::-;41859:102;;41978:148;42122:3;41978:148;:::i;:::-;41971:155;;42143:3;42136:10;;40919:1233;;;;;:::o;42158:180::-;42298:32;42294:1;42286:6;42282:14;42275:56;42158:180;:::o;42344:402::-;42504:3;42525:85;42607:2;42602:3;42525:85;:::i;:::-;42518:92;;42619:93;42708:3;42619:93;:::i;:::-;42737:2;42732:3;42728:12;42721:19;;42344:402;;;:::o;42752:541::-;42985:3;43007:148;43151:3;43007:148;:::i;:::-;43000:155;;43172:95;43263:3;43254:6;43172:95;:::i;:::-;43165:102;;43284:3;43277:10;;42752:541;;;;:::o;43299:233::-;43338:3;43361:24;43379:5;43361:24;:::i;:::-;43352:33;;43407:66;43400:5;43397:77;43394:103;;43477:18;;:::i;:::-;43394:103;43524:1;43517:5;43513:13;43506:20;;43299:233;;;:::o;43538:185::-;43578:1;43595:20;43613:1;43595:20;:::i;:::-;43590:25;;43629:20;43647:1;43629:20;:::i;:::-;43624:25;;43668:1;43658:35;;43673:18;;:::i;:::-;43658:35;43715:1;43712;43708:9;43703:14;;43538:185;;;;:::o;43729:180::-;43777:77;43774:1;43767:88;43874:4;43871:1;43864:15;43898:4;43895:1;43888:15;43915:191;43955:3;43974:20;43992:1;43974:20;:::i;:::-;43969:25;;44008:20;44026:1;44008:20;:::i;:::-;44003:25;;44051:1;44048;44044:9;44037:16;;44072:3;44069:1;44066:10;44063:36;;;44079:18;;:::i;:::-;44063:36;43915:191;;;;:::o;44112:275::-;44244:3;44266:95;44357:3;44348:6;44266:95;:::i;:::-;44259:102;;44378:3;44371:10;;44112:275;;;;:::o;44393:102::-;44435:8;44482:5;44479:1;44475:13;44454:34;;44393:102;;;:::o;44501:848::-;44562:5;44569:4;44593:6;44584:15;;44617:5;44608:14;;44631:712;44652:1;44642:8;44639:15;44631:712;;;44747:4;44742:3;44738:14;44732:4;44729:24;44726:50;;;44756:18;;:::i;:::-;44726:50;44806:1;44796:8;44792:16;44789:451;;;45221:4;45214:5;45210:16;45201:25;;44789:451;45271:4;45265;45261:15;45253:23;;45301:32;45324:8;45301:32;:::i;:::-;45289:44;;44631:712;;;44501:848;;;;;;;:::o;45355:1073::-;45409:5;45600:8;45590:40;;45621:1;45612:10;;45623:5;;45590:40;45649:4;45639:36;;45666:1;45657:10;;45668:5;;45639:36;45735:4;45783:1;45778:27;;;;45819:1;45814:191;;;;45728:277;;45778:27;45796:1;45787:10;;45798:5;;;45814:191;45859:3;45849:8;45846:17;45843:43;;;45866:18;;:::i;:::-;45843:43;45915:8;45912:1;45908:16;45899:25;;45950:3;45943:5;45940:14;45937:40;;;45957:18;;:::i;:::-;45937:40;45990:5;;;45728:277;;46114:2;46104:8;46101:16;46095:3;46089:4;46086:13;46082:36;46064:2;46054:8;46051:16;46046:2;46040:4;46037:12;46033:35;46017:111;46014:246;;;46170:8;46164:4;46160:19;46151:28;;46205:3;46198:5;46195:14;46192:40;;;46212:18;;:::i;:::-;46192:40;46245:5;;46014:246;46285:42;46323:3;46313:8;46307:4;46304:1;46285:42;:::i;:::-;46270:57;;;;46359:4;46354:3;46350:14;46343:5;46340:25;46337:51;;;46368:18;;:::i;:::-;46337:51;46417:4;46410:5;46406:16;46397:25;;45355:1073;;;;;;:::o;46434:281::-;46492:5;46516:23;46534:4;46516:23;:::i;:::-;46508:31;;46560:25;46576:8;46560:25;:::i;:::-;46548:37;;46604:104;46641:66;46631:8;46625:4;46604:104;:::i;:::-;46595:113;;46434:281;;;;:::o;46721:410::-;46761:7;46784:20;46802:1;46784:20;:::i;:::-;46779:25;;46818:20;46836:1;46818:20;:::i;:::-;46813:25;;46873:1;46870;46866:9;46895:30;46913:11;46895:30;:::i;:::-;46884:41;;47074:1;47065:7;47061:15;47058:1;47055:22;47035:1;47028:9;47008:83;46985:139;;47104:18;;:::i;:::-;46985:139;46769:362;46721:410;;;;:::o

Swarm Source

ipfs://18c4455d9ed9569342286372915a4ff1ffb16d72b853ac5d16cf9801df58ddd9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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