ETH Price: $3,153.86 (+1.35%)

Token

Terroir by GEN.ART (TRO)
 

Overview

Max Total Supply

650 TRO

Holders

322

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
0xsatori.eth
Balance
1 TRO
0x05e189e1bbaf77f1654f0983872fd938ae592edd
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:
GenArtERC721Script

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 22 : GenArtERC721Script.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/interfaces/IERC165.sol";
import "@openzeppelin/contracts/interfaces/IERC2981.sol";
import "@openzeppelin/contracts/interfaces/IERC20.sol";
import "./GenArtAccess.sol";
import "./MintStateDefault.sol";
import "./IGenArtMembership.sol";
import "./IGenArtPaymentSplitterV2.sol";
import "./IGenArtInterfaceV3.sol";

/**
 * @dev GEN.ART ERC721 V2
 * Implements the extentions {IERC721Enumerable} and {IERC2981}.
 * Inherits access control from {GenArtAccess}.
 * Sends all ETH to a {PaymentSplitter} contract.
 * Restricts minting to GEN.ART Membership holders.
 * IMPORTANT: This implementation requires the royalties to be send to the contracts address
 * in order to split the funds between payees automatically.
 */
contract GenArtERC721Script is ERC721Enumerable, GenArtAccess, IERC2981 {
    using Strings for uint256;
    using MintStateDefault for MintStateDefault.State;

    uint256 public _mintPrice;
    string public _script;
    uint256 public _mintSupply;
    address public _royaltyReceiver = address(this);
    uint256 public _collectionId;
    bool private _reservedMinted;
    address public _genartInterface;
    address public _paymentSplitter;
    address public _wethAddress;
    string private _uri;
    bool public _paused = true;

    MintStateDefault.State public _mintstate;

    /**
     *@dev Emitted on mint
     */
    event Mint(
        uint256 tokenId,
        uint256 collectionId,
        uint256 membershipId,
        address to,
        bytes32 hash
    );

    constructor(
        string memory name_,
        string memory symbol_,
        string memory uri_,
        string memory script_,
        uint256 collectionId_,
        uint8 standardSupply_,
        uint8 goldSupply_,
        uint256 mintPrice_,
        uint256 mintSupply_,
        address[3] memory addresses
    ) ERC721(name_, symbol_) GenArtAccess() {
        _uri = uri_;
        _collectionId = collectionId_;
        _mintPrice = mintPrice_;
        _mintSupply = mintSupply_;
        _genartInterface = addresses[0];
        _paymentSplitter = addresses[1];
        _wethAddress = addresses[2];
        _script = script_;
        _mintstate.init(standardSupply_, goldSupply_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC721Enumerable, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC2981).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     *@dev Get amount of mints for a membershipId
     */
    function getMembershipMints(uint256 membershipId)
        public
        view
        returns (uint256)
    {
        return _mintstate.getMints(membershipId);
    }

    /**
     *@dev Get available mints for a membershipId
     */
    function getAvailableMintsForMembership(uint256 membershipId)
        public
        view
        returns (uint256)
    {
        return
            _mintstate.getAvailableMints(
                membershipId,
                IGenArtInterfaceV3(_genartInterface).isGoldToken(membershipId),
                _mintSupply,
                totalSupply()
            );
    }

    /**
     *@dev Check if minter has available mint slots and has sent the required amount of ETH
     * Revert in case minting is paused or checks fail.
     */
    function checkMint(uint256 amount, uint256 availableMints) internal view {
        require(!_paused, "GenArtERC721Script: minting is paused");
        require(availableMints > 0, "GenArtERC721Script: no mints available");
        require(
            availableMints >= amount,
            "GenArtERC721Script: amount exceeds availableMints"
        );
        uint256 ethAmount;
        unchecked {
            ethAmount = _mintPrice * amount;
        }
        require(
            ethAmount <= msg.value,
            "GenArtERC721Script: transaction underpriced"
        );
    }

    /**
     *@dev Public function to mint the desired amount of tokens
     * Requirments:
     * - sender must be GEN.ART Membership owner
     */
    function mint(address to, uint256 amount) public payable {
        // get all available mints for sender
        uint256 availableMints = IGenArtInterfaceV3(_genartInterface)
            .getAvailableMintsForAccount(address(this), _msgSender());
        checkMint(amount, availableMints);
        // get all memberships for sender
        uint256[] memory memberships = IGenArtInterfaceV3(_genartInterface)
            .getMembershipsOf(_msgSender());
        uint256 minted;
        uint256 i;

        // loop until the desired amount of tokens was minted
        while (minted < amount && i < memberships.length) {
            // check if membership is gold
            bool isGold = IGenArtInterfaceV3(_genartInterface).isGoldToken(
                memberships[i]
            );
            // get available mints for membership
            uint256 mints = _mintstate.getAvailableMints(
                memberships[i],
                isGold,
                _mintSupply,
                totalSupply()
            );
            // mint tokens with membership and stop if desired amount reached
            for (uint256 j; j < mints && minted < amount; j++) {
                mintForMembership(to, memberships[i]);
                minted++;
            }
            i++;
        }
        // send funds to PaymentSplitter
        IGenArtPaymentSplitterV2(_paymentSplitter).splitPayment{
            value: msg.value
        }(address(this));
    }

    /**
     *@dev Public function to mint one token for a GEN.ART Membership
     * Requirments:
     * - sender must own the membership
     */
    function mintOne(address to, uint256 membershipId) public payable {
        // check if sender is owner of membership
        require(
            IGenArtInterfaceV3(_genartInterface).ownerOfMembership(
                membershipId
            ) == _msgSender(),
            "GenArtERC721Script: sender is not membership owner"
        );
        // get available mints for membership
        uint256 availableMints = getAvailableMintsForMembership(membershipId);

        checkMint(1, availableMints);
        // mint token
        mintForMembership(to, membershipId);
        // send funds to PaymentSplitter
        IGenArtPaymentSplitterV2(_paymentSplitter).splitPayment{
            value: msg.value
        }(address(this));
    }

    /**
     *@dev Mint token for membership
     */
    function mintForMembership(address to, uint256 membershipId) internal {
        // update mint state once membership minted a token
        _mintstate.update(membershipId, 1);
        _mintOne(to, membershipId);
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     * Emits a {Mint} event.
     */
    function _mintOne(address to, uint256 membershipId) internal virtual {
        uint256 tokenId = _collectionId * 100_000 + totalSupply() + 1;
        bytes32 hash = keccak256(
            abi.encodePacked(tokenId, block.number, block.timestamp, to)
        );
        _safeMint(to, tokenId);
        emit Mint(tokenId, _collectionId, membershipId, to, hash);
    }

    function burn(uint256 tokenId) public {
        address owner = ERC721.ownerOf(tokenId);
        // check if sender is owner of token
        require(
            _msgSender() == owner,
            "GenArtERC721Script: burn caller is not owner"
        );
        _burn(tokenId);
    }

    /**
     * @dev Get royalty info see {IERC2981}
     */
    function royaltyInfo(uint256, uint256 salePrice_)
        external
        view
        virtual
        override
        returns (address, uint256)
    {
        return (
            _royaltyReceiver,
            ((
                IGenArtPaymentSplitterV2(_paymentSplitter)
                    .getTotalSharesOfCollection(address(this), 1)
            ) * salePrice_) / 10_000
        );
    }

    /**
     *@dev Get all tokens owned by an address
     */
    function getTokensByOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](tokenCount);
        for (uint256 i; i < tokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }

        return tokenIds;
    }

    /**
     *@dev Release WETH royalties and send them to {PaymentSplitter}
     */
    function releaseWETHRoyalties() public {
        IERC20 weth = IERC20(_wethAddress);
        uint256 wethAmount = weth.balanceOf(address(this));
        weth.transfer(_paymentSplitter, wethAmount);
        IGenArtPaymentSplitterV2(_paymentSplitter).splitPaymentRoyaltyWETH(
            address(this),
            wethAmount
        );
    }

    /**
     *@dev Pause and unpause minting
     */
    function setPaused(bool paused) public onlyAdmin {
        _paused = paused;
    }

    /**
     *@dev Reserved mints can only be called by admins
     * Only one possible mint.
     */
    function mintReserved() public onlyAdmin {
        require(
            !_reservedMinted,
            "GenArtERC721Script: reserved already minted"
        );
        _mintOne(genartAdmin, 0);
        _reservedMinted = true;
    }

    /**
     *@dev Set {PaymentSplitter} address
     */
    function setPaymentSplitter(address paymentSplitter)
        public
        onlyGenArtAdmin
    {
        _paymentSplitter = paymentSplitter;
    }

    /**
     *@dev Set receiver of royalties
     */
    function setRoyaltyReceiver(address receiver) public onlyGenArtAdmin {
        _royaltyReceiver = receiver;
    }

    /**
     * @dev Set base uri
     */
    function setBaseURI(string memory uri) public onlyGenArtAdmin {
        _uri = uri;
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual override returns (string memory) {
        return _uri;
    }

    /**
     *@dev Royalties are forwarded to {PaymentSplitter}
     */
    receive() external payable {
        IGenArtPaymentSplitterV2(_paymentSplitter).splitPaymentRoyalty{
            value: msg.value
        }(address(this));
    }
}

File 2 of 22 : ERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "../ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

File 3 of 22 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

File 4 of 22 : IERC2981.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be payed in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

File 5 of 22 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)

pragma solidity ^0.8.0;

import "../token/ERC20/IERC20.sol";

File 6 of 22 : GenArtAccess.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @dev This implements access control for owner and admins
 */
abstract contract GenArtAccess is Ownable {
    mapping(address => bool) public admins;
    address public genartAdmin;

    constructor() Ownable() {
        genartAdmin = _msgSender();
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyAdmin() {
        address sender = _msgSender();
        require(
            owner() == sender || admins[sender],
            "GenArtAccess: caller is not the owner nor admin"
        );
        _;
    }

    /**
     * @dev Throws if called by any account other than the GEN.ART admin.
     */
    modifier onlyGenArtAdmin() {
        address sender = _msgSender();
        require(
            genartAdmin == sender,
            "GenArtAccess: caller is not genart admin"
        );
        _;
    }

    function setGenArtAdmin(address admin) public onlyGenArtAdmin {
        genartAdmin = admin;
    }

    function setAdminAccess(address admin, bool access) public onlyGenArtAdmin {
        admins[admin] = access;
    }
}

File 7 of 22 : MintStateDefault.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

library MintStateDefault {
    struct State {
        uint8 allowedMintGold;
        uint8 allowedMintStandard;
        // maps membershipIds to the amount of mints
        mapping(uint256 => uint256) _mints;
    }

    function init(
        State storage state,
        uint8 allowedMintStandard,
        uint8 allowedMintGold
    ) internal {
        state.allowedMintStandard = allowedMintStandard;
        state.allowedMintGold = allowedMintGold;
    }

    function getMints(State storage state, uint256 membershipId)
        internal
        view
        returns (uint256)
    {
        return state._mints[membershipId];
    }

    function getAllowedMints(State storage state, bool isGold)
        internal
        view
        returns (uint256)
    {
        return (isGold ? state.allowedMintGold : state.allowedMintStandard);
    }

    function getAvailableMints(
        State storage state,
        uint256 membershipId,
        bool isGold,
        uint256 collectionSupply,
        uint256 currentSupply
    ) internal view returns (uint256) {
        uint256 availableMints = collectionSupply - currentSupply;

        return
            availableMints > 0
                ? getAllowedMints(state, isGold) - getMints(state, membershipId)
                : 0;
    }

    function update(
        State storage state,
        uint256 membershipId,
        uint256 value
    ) internal {
        unchecked {
            state._mints[membershipId] += value;
        }
    }
}

File 8 of 22 : IGenArtMembership.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IGenArtMembership {
    function getTokensByOwner(address owner)
        external
        view
        returns (uint256[] memory);

    function ownerOf(uint256 tokenId) external view returns (address);

    function isGoldToken(uint256 _tokenId) external view returns (bool);
}

File 9 of 22 : IGenArtPaymentSplitterV2.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IGenArtPaymentSplitterV2 {
    function addCollectionPayment(
        address collection,
        address[] memory payees,
        uint256[] memory shares
    ) external;

    function addCollectionPaymentRoyalty(
        address collection,
        address[] memory payees,
        uint256[] memory shares
    ) external;

    function splitPayment(address collection) external payable;

    function splitPaymentRoyalty(address collection) external payable;

    function splitPaymentRoyaltyWETH(address collection, uint256 wethAmount)
        external
        payable;

    function getTotalSharesOfCollection(address collection, uint8 _payment)
        external
        view
        returns (uint256);

    function release(address account) external;

    function updatePayee(
        address collection,
        uint8 paymentType,
        uint256 payeeIndex,
        address newPayee
    ) external;
}

File 10 of 22 : IGenArtInterfaceV3.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IGenArtInterfaceV3 {
    function isGoldToken(uint256 _membershipId) external view returns (bool);

    function getAvailableMintsForAccount(address collection, address account)
        external
        view
        returns (uint256);

    function getMembershipsOf(address account)
        external
        view
        returns (uint256[] memory);

    function ownerOfMembership(uint256 _membershipId) external view returns (address);
}

File 11 of 22 : ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./extensions/IERC721Metadata.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/Strings.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 12 of 22 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 13 of 22 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 14 of 22 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 15 of 22 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 16 of 22 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 17 of 22 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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;
    }
}

File 18 of 22 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

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

File 19 of 22 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 20 of 22 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 21 of 22 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 22 of 22 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"uri_","type":"string"},{"internalType":"string","name":"script_","type":"string"},{"internalType":"uint256","name":"collectionId_","type":"uint256"},{"internalType":"uint8","name":"standardSupply_","type":"uint8"},{"internalType":"uint8","name":"goldSupply_","type":"uint8"},{"internalType":"uint256","name":"mintPrice_","type":"uint256"},{"internalType":"uint256","name":"mintSupply_","type":"uint256"},{"internalType":"address[3]","name":"addresses","type":"address[3]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"collectionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"membershipId","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_collectionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_genartInterface","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintstate","outputs":[{"internalType":"uint8","name":"allowedMintGold","type":"uint8"},{"internalType":"uint8","name":"allowedMintStandard","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paymentSplitter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_royaltyReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_script","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wethAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genartAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"membershipId","type":"uint256"}],"name":"getAvailableMintsForMembership","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"membershipId","type":"uint256"}],"name":"getMembershipMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"membershipId","type":"uint256"}],"name":"mintOne","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseWETHRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"salePrice_","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"bool","name":"access","type":"bool"}],"name":"setAdminAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"setGenArtAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"paymentSplitter","type":"address"}],"name":"setPaymentSplitter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"setRoyaltyReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405230601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601660006101000a81548160ff0219169083151502179055503480156200006d57600080fd5b506040516200691938038062006919833981810160405281019062000093919062000637565b89898160009080519060200190620000ad9291906200043a565b508060019080519060200190620000c69291906200043a565b505050620000e9620000dd6200032d60201b60201c565b6200033560201b60201c565b620000f96200032d60201b60201c565b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508760159080519060200190620001519291906200043a565b508560118190555082600d8190555081600f8190555080600060038110620001a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016003811062000222577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260038110620002a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600e9080519060200190620002ff9291906200043a565b506200031d85856017620003fb60201b620028e0179092919060201c565b50505050505050505050620009bd565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b818360000160016101000a81548160ff021916908360ff160217905550808360000160006101000a81548160ff021916908360ff160217905550505050565b828054620004489062000894565b90600052602060002090601f0160209004810192826200046c5760008555620004b8565b82601f106200048757805160ff1916838001178555620004b8565b82800160010185558215620004b8579182015b82811115620004b75782518255916020019190600101906200049a565b5b509050620004c79190620004cb565b5090565b5b80821115620004e6576000816000905550600101620004cc565b5090565b600062000501620004fb84620007b4565b6200078b565b905080828560208602820111156200051857600080fd5b60005b858110156200054c57816200053188826200059b565b8452602084019350602083019250506001810190506200051b565b5050509392505050565b60006200056d6200056784620007dd565b6200078b565b9050828152602081018484840111156200058657600080fd5b620005938482856200085e565b509392505050565b600081519050620005ac816200096f565b92915050565b600082601f830112620005c457600080fd5b6003620005d3848285620004ea565b91505092915050565b600082601f830112620005ee57600080fd5b81516200060084826020860162000556565b91505092915050565b6000815190506200061a8162000989565b92915050565b6000815190506200063181620009a3565b92915050565b6000806000806000806000806000806101808b8d0312156200065857600080fd5b60008b015167ffffffffffffffff8111156200067357600080fd5b620006818d828e01620005dc565b9a505060208b015167ffffffffffffffff8111156200069f57600080fd5b620006ad8d828e01620005dc565b99505060408b015167ffffffffffffffff811115620006cb57600080fd5b620006d98d828e01620005dc565b98505060608b015167ffffffffffffffff811115620006f757600080fd5b620007058d828e01620005dc565b9750506080620007188d828e0162000609565b96505060a06200072b8d828e0162000620565b95505060c06200073e8d828e0162000620565b94505060e0620007518d828e0162000609565b935050610100620007658d828e0162000609565b925050610120620007798d828e01620005b2565b9150509295989b9194979a5092959850565b600062000797620007aa565b9050620007a58282620008ca565b919050565b6000604051905090565b600067ffffffffffffffff821115620007d257620007d16200092f565b5b602082029050919050565b600067ffffffffffffffff821115620007fb57620007fa6200092f565b5b62000806826200095e565b9050602081019050919050565b6000620008208262000827565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200087e57808201518184015260208101905062000861565b838111156200088e576000848401525b50505050565b60006002820490506001821680620008ad57607f821691505b60208210811415620008c457620008c362000900565b5b50919050565b620008d5826200095e565b810181811067ffffffffffffffff82111715620008f757620008f66200092f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200097a8162000813565b81146200098657600080fd5b50565b620009948162000847565b8114620009a057600080fd5b50565b620009ae8162000851565b8114620009ba57600080fd5b50565b615f4c80620009cd6000396000f3fe6080604052600436106102815760003560e01c80636b29b79f1161014f5780639828a590116100c1578063e637f98f1161007a578063e637f98f14610a51578063e985e9c514610a7c578063ec8c890414610ab9578063f00e9e1f14610ad0578063f2fde38b14610afb578063f65a0b3e14610b2457610316565b80639828a59014610966578063998637541461097d578063a22cb465146109a6578063b88d4fde146109cf578063c87b56dd146109f8578063d48e13c314610a3557610316565b80638a016249116101135780638a016249146108655780638da5cb5b146108905780638dc251e3146108bb57806390aafc01146108e457806391a1104d1461090f57806395d89b411461093b57610316565b80636b29b79f146107805780636eaef5bb146107a957806370a08231146107e6578063715018a6146108235780638296a2e81461083a57610316565b80632a55205a116101f357806342842e0e116101ac57806342842e0e1461064e57806342966c6814610677578063429b62e5146106a05780634f6ccce7146106dd57806355f804b31461071a5780636352211e1461074357610316565b80632a55205a146105125780632f745c59146105505780633c3f2d411461058d5780634017465c146105b857806340398d67146105f557806340c10f191461063257610316565b80630e0aff94116102455780630e0aff941461041457806316c38b3c1461043f57806316c61ccc1461046857806318160ddd146104935780631b2119b8146104be57806323b872dd146104e957610316565b806301ffc9a71461031b5780630387da421461035857806306fdde0314610383578063081812fc146103ae578063095ea7b3146103eb57610316565b3661031657601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329a72ca334306040518363ffffffff1660e01b81526004016102e29190614cbd565b6000604051808303818588803b1580156102fb57600080fd5b505af115801561030f573d6000803e3d6000fd5b5050505050005b600080fd5b34801561032757600080fd5b50610342600480360381019061033d91906145c9565b610b4d565b60405161034f9190614dc1565b60405180910390f35b34801561036457600080fd5b5061036d610bc7565b60405161037a919061515e565b60405180910390f35b34801561038f57600080fd5b50610398610bcd565b6040516103a59190614ddc565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d0919061465c565b610c5f565b6040516103e29190614cbd565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d91906144fa565b610ce4565b005b34801561042057600080fd5b50610429610dfc565b6040516104369190614cbd565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614577565b610e22565b005b34801561047457600080fd5b5061047d610f15565b60405161048a9190614dc1565b60405180910390f35b34801561049f57600080fd5b506104a8610f28565b6040516104b5919061515e565b60405180910390f35b3480156104ca57600080fd5b506104d3610f35565b6040516104e0919061515e565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b91906143f4565b610f3b565b005b34801561051e57600080fd5b50610539600480360381019061053491906146ae565b610f9b565b604051610547929190614d76565b60405180910390f35b34801561055c57600080fd5b50610577600480360381019061057291906144fa565b611092565b604051610584919061515e565b60405180910390f35b34801561059957600080fd5b506105a2611137565b6040516105af9190614cbd565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da919061465c565b61115d565b6040516105ec919061515e565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190614366565b61117a565b6040516106299190614d9f565b60405180910390f35b61064c600480360381019061064791906144fa565b611274565b005b34801561065a57600080fd5b50610675600480360381019061067091906143f4565b61168c565b005b34801561068357600080fd5b5061069e6004803603810190610699919061465c565b6116ac565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190614366565b61173b565b6040516106d49190614dc1565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061465c565b61175b565b604051610711919061515e565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c919061461b565b6117f2565b005b34801561074f57600080fd5b5061076a6004803603810190610765919061465c565b6118a9565b6040516107779190614cbd565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190614366565b61195b565b005b3480156107b557600080fd5b506107d060048036038101906107cb919061465c565b611a3c565b6040516107dd919061515e565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190614366565b611b12565b60405161081a919061515e565b60405180910390f35b34801561082f57600080fd5b50610838611bca565b005b34801561084657600080fd5b5061084f611c52565b60405161085c919061515e565b60405180910390f35b34801561087157600080fd5b5061087a611c58565b6040516108879190614ddc565b60405180910390f35b34801561089c57600080fd5b506108a5611ce6565b6040516108b29190614cbd565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190614366565b611d10565b005b3480156108f057600080fd5b506108f9611df1565b6040516109069190614cbd565b60405180910390f35b34801561091b57600080fd5b50610924611e17565b6040516109329291906151cc565b60405180910390f35b34801561094757600080fd5b50610950611e43565b60405161095d9190614ddc565b60405180910390f35b34801561097257600080fd5b5061097b611ed5565b005b34801561098957600080fd5b506109a4600480360381019061099f9190614366565b6120cc565b005b3480156109b257600080fd5b506109cd60048036038101906109c891906144be565b6121ad565b005b3480156109db57600080fd5b506109f660048036038101906109f19190614443565b6121c3565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a919061465c565b612225565b604051610a2c9190614ddc565b60405180910390f35b610a4f6004803603810190610a4a91906144fa565b6122cc565b005b348015610a5d57600080fd5b50610a666124a0565b604051610a739190614cbd565b60405180910390f35b348015610a8857600080fd5b50610aa36004803603810190610a9e91906143b8565b6124c6565b604051610ab09190614dc1565b60405180910390f35b348015610ac557600080fd5b50610ace61255a565b005b348015610adc57600080fd5b50610ae56126ca565b604051610af29190614cbd565b60405180910390f35b348015610b0757600080fd5b50610b226004803603810190610b1d9190614366565b6126f0565b005b348015610b3057600080fd5b50610b4b6004803603810190610b4691906144be565b6127e8565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bc05750610bbf8261291f565b5b9050919050565b600d5481565b606060008054610bdc90615518565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0890615518565b8015610c555780601f10610c2a57610100808354040283529160200191610c55565b820191906000526020600020905b815481529060010190602001808311610c3857829003601f168201915b5050505050905090565b6000610c6a82612999565b610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090614ffe565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cef826118a9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d579061509e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d7f612a05565b73ffffffffffffffffffffffffffffffffffffffff161480610dae5750610dad81610da8612a05565b6124c6565b5b610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490614f7e565b60405180910390fd5b610df78383612a0d565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610e2c612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16610e4d611ce6565b73ffffffffffffffffffffffffffffffffffffffff161480610eb85750600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee9061513e565b60405180910390fd5b81601660006101000a81548160ff0219169083151502179055505050565b601660009054906101000a900460ff1681565b6000600880549050905090565b600f5481565b610f4c610f46612a05565b82612ac6565b610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f82906150de565b60405180910390fd5b610f96838383612ba4565b505050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271084601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663306e38be3060016040518363ffffffff1660e01b8152600401611023929190614d4d565b60206040518083038186803b15801561103b57600080fd5b505afa15801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190614685565b61107d91906153ab565b611087919061537a565b915091509250929050565b600061109d83611b12565b82106110de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d590614e1e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611173826017612e0b90919063ffffffff16565b9050919050565b6060600061118783611b12565b905060008167ffffffffffffffff8111156111cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111f95781602001602082028036833780820191505090505b50905060005b82811015611269576112118582611092565b82828151811061124a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806112619061557b565b9150506111ff565b508092505050919050565b6000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8bc51ac306112bd612a05565b6040518363ffffffff1660e01b81526004016112da929190614cd8565b60206040518083038186803b1580156112f257600080fd5b505afa158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a9190614685565b90506113368282612e2b565b6000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea85b1e561137e612a05565b6040518263ffffffff1660e01b815260040161139a9190614cbd565b60006040518083038186803b1580156113b257600080fd5b505afa1580156113c6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113ef9190614536565b90506000805b84821080156114045750825181105b156115f6576000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4ed4d15858481518110611482577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016114a6919061515e565b60206040518083038186803b1580156114be57600080fd5b505afa1580156114d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f691906145a0565b9050600061155d858481518110611536577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183600f5461154a610f28565b6017612f5290949392919063ffffffff16565b905060005b818110801561157057508785105b156115e0576115bf898786815181106115b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151612f9d565b84806115ca9061557b565b95505080806115d89061557b565b915050611562565b5082806115ec9061557b565b93505050506113f5565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf58b8ea34306040518363ffffffff1660e01b81526004016116529190614cbd565b6000604051808303818588803b15801561166b57600080fd5b505af115801561167f573d6000803e3d6000fd5b5050505050505050505050565b6116a7838383604051806020016040528060008152506121c3565b505050565b60006116b7826118a9565b90508073ffffffffffffffffffffffffffffffffffffffff166116d8612a05565b73ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117259061507e565b60405180910390fd5b61173782612fc2565b5050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000611765610f28565b82106117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d9061511e565b60405180910390fd5b600882815481106117e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b60006117fc612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611885906150fe565b60405180910390fd5b81601590805190602001906118a49291906140b5565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614fbe565b60405180910390fd5b80915050919050565b6000611965612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee906150fe565b60405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000611b0b82601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4ed4d15856040518263ffffffff1660e01b8152600401611a9d919061515e565b60206040518083038186803b158015611ab557600080fd5b505afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed91906145a0565b600f54611af8610f28565b6017612f5290949392919063ffffffff16565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90614f9e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bd2612a05565b73ffffffffffffffffffffffffffffffffffffffff16611bf0611ce6565b73ffffffffffffffffffffffffffffffffffffffff1614611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d9061501e565b60405180910390fd5b611c5060006130df565b565b60115481565b600e8054611c6590615518565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9190615518565b8015611cde5780601f10611cb357610100808354040283529160200191611cde565b820191906000526020600020905b815481529060010190602001808311611cc157829003601f168201915b505050505081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611d1a612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da3906150fe565b60405180910390fd5b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60178060000160009054906101000a900460ff16908060000160019054906101000a900460ff16905082565b606060018054611e5290615518565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7e90615518565b8015611ecb5780601f10611ea057610100808354040283529160200191611ecb565b820191906000526020600020905b815481529060010190602001808311611eae57829003601f168201915b5050505050905090565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f379190614cbd565b60206040518083038186803b158015611f4f57600080fd5b505afa158015611f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f879190614685565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611fe6929190614d76565b602060405180830381600087803b15801561200057600080fd5b505af1158015612014573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203891906145a0565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aee68a130836040518363ffffffff1660e01b8152600401612096929190614d76565b600060405180830381600087803b1580156120b057600080fd5b505af11580156120c4573d6000803e3d6000fd5b505050505050565b60006120d6612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f906150fe565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6121bf6121b8612a05565b83836131a5565b5050565b6121d46121ce612a05565b83612ac6565b612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a906150de565b60405180910390fd5b61221f84848484613312565b50505050565b606061223082612999565b61226f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122669061505e565b60405180910390fd5b600061227961336e565b9050600081511161229957604051806020016040528060008152506122c4565b806122a384613400565b6040516020016122b4929190614c4b565b6040516020818303038152906040525b915050919050565b6122d4612a05565b73ffffffffffffffffffffffffffffffffffffffff16601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a47dc5f0836040518263ffffffff1660e01b8152600401612345919061515e565b60206040518083038186803b15801561235d57600080fd5b505afa158015612371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612395919061438f565b73ffffffffffffffffffffffffffffffffffffffff16146123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290614f3e565b60405180910390fd5b60006123f682611a3c565b9050612403600182612e2b565b61240d8383612f9d565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf58b8ea34306040518363ffffffff1660e01b81526004016124699190614cbd565b6000604051808303818588803b15801561248257600080fd5b505af1158015612496573d6000803e3d6000fd5b5050505050505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000612564612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16612585611ce6565b73ffffffffffffffffffffffffffffffffffffffff1614806125f05750600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61262f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126269061513e565b60405180910390fd5b601260009054906101000a900460ff161561267f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267690614ede565b60405180910390fd5b6126ac600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006135ad565b6001601260006101000a81548160ff02191690831515021790555050565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126f8612a05565b73ffffffffffffffffffffffffffffffffffffffff16612716611ce6565b73ffffffffffffffffffffffffffffffffffffffff161461276c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127639061501e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d390614e5e565b60405180910390fd5b6127e5816130df565b50565b60006127f2612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287b906150fe565b60405180910390fd5b81600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b818360000160016101000a81548160ff021916908360ff160217905550808360000160006101000a81548160ff021916908360ff160217905550505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612992575061299182613662565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a80836118a9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612ad182612999565b612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0790614f5e565b60405180910390fd5b6000612b1b836118a9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b8a57508373ffffffffffffffffffffffffffffffffffffffff16612b7284610c5f565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b9b5750612b9a81856124c6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612bc4826118a9565b73ffffffffffffffffffffffffffffffffffffffff1614612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1190614e7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8190614ebe565b60405180910390fd5b612c95838383613744565b612ca0600082612a0d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cf09190615405565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d479190615324565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e06838383613858565b505050565b600082600101600083815260200190815260200160002054905092915050565b601660009054906101000a900460ff1615612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e729061503e565b60405180910390fd5b60008111612ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb590614f1e565b60405180910390fd5b81811015612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef8906150be565b60405180910390fd5b600082600d5402905034811115612f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4490614dfe565b60405180910390fd5b505050565b6000808284612f619190615405565b905060008111612f72576000612f91565b612f7c8787612e0b565b612f86888761385d565b612f909190615405565b5b91505095945050505050565b612fb481600160176138999092919063ffffffff16565b612fbe82826135ad565b5050565b6000612fcd826118a9565b9050612fdb81600084613744565b612fe6600083612a0d565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130369190615405565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130db81600084613858565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320b90614efe565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133059190614dc1565b60405180910390a3505050565b61331d848484612ba4565b613329848484846138c1565b613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614e3e565b60405180910390fd5b50505050565b60606015805461337d90615518565b80601f01602080910402602001604051908101604052809291908181526020018280546133a990615518565b80156133f65780601f106133cb576101008083540402835291602001916133f6565b820191906000526020600020905b8154815290600101906020018083116133d957829003601f168201915b5050505050905090565b60606000821415613448576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135a8565b600082905060005b6000821461347a5780806134639061557b565b915050600a82613473919061537a565b9150613450565b60008167ffffffffffffffff8111156134bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156134ee5781602001600182028036833780820191505090505b5090505b600085146135a1576001826135079190615405565b9150600a8561351691906155f2565b60306135229190615324565b60f81b81838151811061355e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561359a919061537a565b94506134f2565b8093505050505b919050565b600060016135b9610f28565b620186a06011546135ca91906153ab565b6135d49190615324565b6135de9190615324565b90506000814342866040516020016135f99493929190614c6f565b60405160208183030381529060405280519060200120905061361b8483613a58565b7f45bb2f23e93e3ce1e0ac83c6a2a2be3d211bd77b0528874929dd09e8e0bf7d5582601154858785604051613654959493929190615179565b60405180910390a150505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061372d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061373d575061373c82613a76565b5b9050919050565b61374f838383613ae0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137925761378d81613ae5565b6137d1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146137d0576137cf8382613b2e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138145761380f81613c9b565b613853565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613852576138518282613dde565b5b5b505050565b505050565b60008161387b578260000160019054906101000a900460ff1661388e565b8260000160009054906101000a900460ff165b60ff16905092915050565b8083600101600084815260200190815260200160002060008282540192505081905550505050565b60006138e28473ffffffffffffffffffffffffffffffffffffffff16613e5d565b15613a4b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261390b612a05565b8786866040518563ffffffff1660e01b815260040161392d9493929190614d01565b602060405180830381600087803b15801561394757600080fd5b505af192505050801561397857506040513d601f19601f8201168201806040525081019061397591906145f2565b60015b6139fb573d80600081146139a8576040519150601f19603f3d011682016040523d82523d6000602084013e6139ad565b606091505b506000815114156139f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ea90614e3e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a50565b600190505b949350505050565b613a72828260405180602001604052806000815250613e80565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b3b84611b12565b613b459190615405565b9050600060076000848152602001908152602001600020549050818114613c2a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613caf9190615405565b9050600060096000848152602001908152602001600020549050600060088381548110613d05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613d4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613dc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613de983611b12565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b613e8a8383613edb565b613e9760008484846138c1565b613ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ecd90614e3e565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f4290614fde565b60405180910390fd5b613f5481612999565b15613f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8b90614e9e565b60405180910390fd5b613fa060008383613744565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ff09190615324565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46140b160008383613858565b5050565b8280546140c190615518565b90600052602060002090601f0160209004810192826140e3576000855561412a565b82601f106140fc57805160ff191683800117855561412a565b8280016001018555821561412a579182015b8281111561412957825182559160200191906001019061410e565b5b509050614137919061413b565b5090565b5b8082111561415457600081600090555060010161413c565b5090565b600061416b6141668461521a565b6151f5565b9050808382526020820190508285602086028201111561418a57600080fd5b60005b858110156141ba57816141a08882614351565b84526020840193506020830192505060018101905061418d565b5050509392505050565b60006141d76141d284615246565b6151f5565b9050828152602081018484840111156141ef57600080fd5b6141fa8482856154d6565b509392505050565b600061421561421084615277565b6151f5565b90508281526020810184848401111561422d57600080fd5b6142388482856154d6565b509392505050565b60008135905061424f81615eba565b92915050565b60008151905061426481615eba565b92915050565b600082601f83011261427b57600080fd5b815161428b848260208601614158565b91505092915050565b6000813590506142a381615ed1565b92915050565b6000815190506142b881615ed1565b92915050565b6000813590506142cd81615ee8565b92915050565b6000815190506142e281615ee8565b92915050565b600082601f8301126142f957600080fd5b81356143098482602086016141c4565b91505092915050565b600082601f83011261432357600080fd5b8135614333848260208601614202565b91505092915050565b60008135905061434b81615eff565b92915050565b60008151905061436081615eff565b92915050565b60006020828403121561437857600080fd5b600061438684828501614240565b91505092915050565b6000602082840312156143a157600080fd5b60006143af84828501614255565b91505092915050565b600080604083850312156143cb57600080fd5b60006143d985828601614240565b92505060206143ea85828601614240565b9150509250929050565b60008060006060848603121561440957600080fd5b600061441786828701614240565b935050602061442886828701614240565b92505060406144398682870161433c565b9150509250925092565b6000806000806080858703121561445957600080fd5b600061446787828801614240565b945050602061447887828801614240565b93505060406144898782880161433c565b925050606085013567ffffffffffffffff8111156144a657600080fd5b6144b2878288016142e8565b91505092959194509250565b600080604083850312156144d157600080fd5b60006144df85828601614240565b92505060206144f085828601614294565b9150509250929050565b6000806040838503121561450d57600080fd5b600061451b85828601614240565b925050602061452c8582860161433c565b9150509250929050565b60006020828403121561454857600080fd5b600082015167ffffffffffffffff81111561456257600080fd5b61456e8482850161426a565b91505092915050565b60006020828403121561458957600080fd5b600061459784828501614294565b91505092915050565b6000602082840312156145b257600080fd5b60006145c0848285016142a9565b91505092915050565b6000602082840312156145db57600080fd5b60006145e9848285016142be565b91505092915050565b60006020828403121561460457600080fd5b6000614612848285016142d3565b91505092915050565b60006020828403121561462d57600080fd5b600082013567ffffffffffffffff81111561464757600080fd5b61465384828501614312565b91505092915050565b60006020828403121561466e57600080fd5b600061467c8482850161433c565b91505092915050565b60006020828403121561469757600080fd5b60006146a584828501614351565b91505092915050565b600080604083850312156146c157600080fd5b60006146cf8582860161433c565b92505060206146e08582860161433c565b9150509250929050565b60006146f68383614c07565b60208301905092915050565b61470b81615439565b82525050565b61472261471d82615439565b6155c4565b82525050565b6000614733826152b8565b61473d81856152e6565b9350614748836152a8565b8060005b8381101561477957815161476088826146ea565b975061476b836152d9565b92505060018101905061474c565b5085935050505092915050565b61478f8161544b565b82525050565b61479e81615457565b82525050565b60006147af826152c3565b6147b981856152f7565b93506147c98185602086016154e5565b6147d2816156df565b840191505092915050565b6147e6816154c4565b82525050565b60006147f7826152ce565b6148018185615308565b93506148118185602086016154e5565b61481a816156df565b840191505092915050565b6000614830826152ce565b61483a8185615319565b935061484a8185602086016154e5565b80840191505092915050565b6000614863602b83615308565b915061486e826156fd565b604082019050919050565b6000614886602b83615308565b91506148918261574c565b604082019050919050565b60006148a9603283615308565b91506148b48261579b565b604082019050919050565b60006148cc602683615308565b91506148d7826157ea565b604082019050919050565b60006148ef602583615308565b91506148fa82615839565b604082019050919050565b6000614912601c83615308565b915061491d82615888565b602082019050919050565b6000614935602483615308565b9150614940826158b1565b604082019050919050565b6000614958602b83615308565b915061496382615900565b604082019050919050565b600061497b601983615308565b91506149868261594f565b602082019050919050565b600061499e602683615308565b91506149a982615978565b604082019050919050565b60006149c1603283615308565b91506149cc826159c7565b604082019050919050565b60006149e4602c83615308565b91506149ef82615a16565b604082019050919050565b6000614a07603883615308565b9150614a1282615a65565b604082019050919050565b6000614a2a602a83615308565b9150614a3582615ab4565b604082019050919050565b6000614a4d602983615308565b9150614a5882615b03565b604082019050919050565b6000614a70602083615308565b9150614a7b82615b52565b602082019050919050565b6000614a93602c83615308565b9150614a9e82615b7b565b604082019050919050565b6000614ab6602083615308565b9150614ac182615bca565b602082019050919050565b6000614ad9602583615308565b9150614ae482615bf3565b604082019050919050565b6000614afc602f83615308565b9150614b0782615c42565b604082019050919050565b6000614b1f602c83615308565b9150614b2a82615c91565b604082019050919050565b6000614b42602183615308565b9150614b4d82615ce0565b604082019050919050565b6000614b65603183615308565b9150614b7082615d2f565b604082019050919050565b6000614b88603183615308565b9150614b9382615d7e565b604082019050919050565b6000614bab602883615308565b9150614bb682615dcd565b604082019050919050565b6000614bce602c83615308565b9150614bd982615e1c565b604082019050919050565b6000614bf1602f83615308565b9150614bfc82615e6b565b604082019050919050565b614c10816154ad565b82525050565b614c1f816154ad565b82525050565b614c36614c31826154ad565b6155e8565b82525050565b614c45816154b7565b82525050565b6000614c578285614825565b9150614c638284614825565b91508190509392505050565b6000614c7b8287614c25565b602082019150614c8b8286614c25565b602082019150614c9b8285614c25565b602082019150614cab8284614711565b60148201915081905095945050505050565b6000602082019050614cd26000830184614702565b92915050565b6000604082019050614ced6000830185614702565b614cfa6020830184614702565b9392505050565b6000608082019050614d166000830187614702565b614d236020830186614702565b614d306040830185614c16565b8181036060830152614d4281846147a4565b905095945050505050565b6000604082019050614d626000830185614702565b614d6f60208301846147dd565b9392505050565b6000604082019050614d8b6000830185614702565b614d986020830184614c16565b9392505050565b60006020820190508181036000830152614db98184614728565b905092915050565b6000602082019050614dd66000830184614786565b92915050565b60006020820190508181036000830152614df681846147ec565b905092915050565b60006020820190508181036000830152614e1781614856565b9050919050565b60006020820190508181036000830152614e3781614879565b9050919050565b60006020820190508181036000830152614e578161489c565b9050919050565b60006020820190508181036000830152614e77816148bf565b9050919050565b60006020820190508181036000830152614e97816148e2565b9050919050565b60006020820190508181036000830152614eb781614905565b9050919050565b60006020820190508181036000830152614ed781614928565b9050919050565b60006020820190508181036000830152614ef78161494b565b9050919050565b60006020820190508181036000830152614f178161496e565b9050919050565b60006020820190508181036000830152614f3781614991565b9050919050565b60006020820190508181036000830152614f57816149b4565b9050919050565b60006020820190508181036000830152614f77816149d7565b9050919050565b60006020820190508181036000830152614f97816149fa565b9050919050565b60006020820190508181036000830152614fb781614a1d565b9050919050565b60006020820190508181036000830152614fd781614a40565b9050919050565b60006020820190508181036000830152614ff781614a63565b9050919050565b6000602082019050818103600083015261501781614a86565b9050919050565b6000602082019050818103600083015261503781614aa9565b9050919050565b6000602082019050818103600083015261505781614acc565b9050919050565b6000602082019050818103600083015261507781614aef565b9050919050565b6000602082019050818103600083015261509781614b12565b9050919050565b600060208201905081810360008301526150b781614b35565b9050919050565b600060208201905081810360008301526150d781614b58565b9050919050565b600060208201905081810360008301526150f781614b7b565b9050919050565b6000602082019050818103600083015261511781614b9e565b9050919050565b6000602082019050818103600083015261513781614bc1565b9050919050565b6000602082019050818103600083015261515781614be4565b9050919050565b60006020820190506151736000830184614c16565b92915050565b600060a08201905061518e6000830188614c16565b61519b6020830187614c16565b6151a86040830186614c16565b6151b56060830185614702565b6151c26080830184614795565b9695505050505050565b60006040820190506151e16000830185614c3c565b6151ee6020830184614c3c565b9392505050565b60006151ff615210565b905061520b828261554a565b919050565b6000604051905090565b600067ffffffffffffffff821115615235576152346156b0565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615261576152606156b0565b5b61526a826156df565b9050602081019050919050565b600067ffffffffffffffff821115615292576152916156b0565b5b61529b826156df565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061532f826154ad565b915061533a836154ad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561536f5761536e615623565b5b828201905092915050565b6000615385826154ad565b9150615390836154ad565b9250826153a05761539f615652565b5b828204905092915050565b60006153b6826154ad565b91506153c1836154ad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153fa576153f9615623565b5b828202905092915050565b6000615410826154ad565b915061541b836154ad565b92508282101561542e5761542d615623565b5b828203905092915050565b60006154448261548d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006154cf826154b7565b9050919050565b82818337600083830152505050565b60005b838110156155035780820151818401526020810190506154e8565b83811115615512576000848401525b50505050565b6000600282049050600182168061553057607f821691505b6020821081141561554457615543615681565b5b50919050565b615553826156df565b810181811067ffffffffffffffff82111715615572576155716156b0565b5b80604052505050565b6000615586826154ad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155b9576155b8615623565b5b600182019050919050565b60006155cf826155d6565b9050919050565b60006155e1826156f0565b9050919050565b6000819050919050565b60006155fd826154ad565b9150615608836154ad565b92508261561857615617615652565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f47656e4172744552433732315363726970743a207472616e73616374696f6e2060008201527f756e646572707269636564000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f47656e4172744552433732315363726970743a20726573657276656420616c7260008201527f65616479206d696e746564000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f47656e4172744552433732315363726970743a206e6f206d696e74732061766160008201527f696c61626c650000000000000000000000000000000000000000000000000000602082015250565b7f47656e4172744552433732315363726970743a2073656e646572206973206e6f60008201527f74206d656d62657273686970206f776e65720000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f47656e4172744552433732315363726970743a206d696e74696e67206973207060008201527f6175736564000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f47656e4172744552433732315363726970743a206275726e2063616c6c65722060008201527f6973206e6f74206f776e65720000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f47656e4172744552433732315363726970743a20616d6f756e7420657863656560008201527f647320617661696c61626c654d696e7473000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f47656e4172744163636573733a2063616c6c6572206973206e6f742067656e6160008201527f72742061646d696e000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f47656e4172744163636573733a2063616c6c6572206973206e6f74207468652060008201527f6f776e6572206e6f722061646d696e0000000000000000000000000000000000602082015250565b615ec381615439565b8114615ece57600080fd5b50565b615eda8161544b565b8114615ee557600080fd5b50565b615ef181615461565b8114615efc57600080fd5b50565b615f08816154ad565b8114615f1357600080fd5b5056fea2646970667358221220abe0a61bae040a6268f11722d91c6e9f149c46bdf72129fb203fa889abaa292e64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000075300000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000f09473b9e7d00f505f467b344f3907a948e38da0000000000000000000000000b42970b84c25aa3b1fd145fc41d2f301ec4bb9ad000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000012546572726f69722062792047454e2e4152540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000354524f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f6170692e67656e2e6172742f7075626c69632f617474726962757465732f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002df53c686561643e203c6d657461206e616d653d2276696577706f72742220636f6e74656e743d2277696474683d6465766963652d77696474682c736872696e6b2d746f2d6669743d302c757365722d7363616c61626c653d6e6f2c6d696e696d756d2d7363616c653d312c6d6178696d756d2d7363616c653d31223e203c7469746c653e546572726f6972202d204b656c6c79204d696c6c6967616e3c2f7469746c653e203c7374796c653e68746d6c2c20626f64797b77696474683a20313030253b206865696768743a20313030253b206d617267696e3a20303b7d626f64797b646973706c61793a20666c65783b206a7573746966792d636f6e74656e743a2063656e7465723b20616c69676e2d6974656d733a2063656e7465723b7d3c2f7374796c653e3c2f686561643e3c626f64793e203c7363726970743e77696e646f772e4d455441444154413d7b7d3b2066756e6374696f6e206f6e4d6574616461746128297b77696e646f772e746f703f2e706f73744d65737361676528206067656e6172743a6d657461646174613a247b4a534f4e2e737472696e676966792877696e646f772e4d45544144415441297d602c20222a2220293b7d66756e6374696f6e206f6e446f6e6528297b77696e646f772e746f703f2e706f73744d657373616765286067656e6172743a646f6e65602c20222a22293b2077696e646f772e6f6e496d61676552656e64657265642026262077696e646f772e6f6e496d61676552656e646572656428293b7d66756e6374696f6e2072616e646f6d5f6861736828297b6c65742063686172733d2230313233343536373839616263646566223b206c657420726573756c743d223078223b20666f7220286c657420693d36343b2069203e20303b202d2d692920726573756c74202b3d63686172735b4d6174682e666c6f6f72284d6174682e72616e646f6d2829202a2063686172732e6c656e677468295d3b2072657475726e20726573756c743b7d636c6173732052616e646f6d7b736565643b20646563696d616c733b20636f6e7374727563746f7228686173682c20646563696d616c733d33297b746869732e736565643d7061727365496e7428686173682e736c69636528302c203136292c203136293b20746869732e646563696d616c733d646563696d616c733b7d72616e646f6d5f64656328297b746869732e73656564205e3d746869732e73656564203c3c2031333b20746869732e73656564205e3d746869732e73656564203e3e2031373b20746869732e73656564205e3d746869732e73656564203c3c20353b2072657475726e2028202828746869732e73656564203c2030203f207e746869732e73656564202b2031203a20746869732e73656564292025203130202a2a20746869732e646563696d616c7329202f203130202a2a20746869732e646563696d616c7320293b7d72616e646f6d5f6265747765656e28612c2062297b72657475726e2061202b202862202d206129202a20746869732e72616e646f6d5f64656328293b7d72616e646f6d5f696e7428612c2062297b72657475726e204d6174682e666c6f6f7228746869732e72616e646f6d5f6265747765656e28612c2062202b203129293b7d72616e646f6d5f63686f6963652878297b72657475726e20785b4d6174682e666c6f6f7228746869732e72616e646f6d5f6265747765656e28302c20782e6c656e677468202a20302e393929295d3b7d7d3c2f7363726970743e203c7363726970743e2828293d3e7b2275736520737472696374223b20636f6e737420653d4d6174682e706f7728322c202d3332292c20743d33323535372c206f3d31393630352c206e3d6e65772055696e74313641727261792834292c20723d6e6577204461746156696577286e2e627566666572292c20613d28293d3e7b636f6e737420723d6e5b305d2c20613d6e5b315d2c20633d6e5b325d2c20693d6e5b335d2c20733d30207c203333313033202b2074202a20722c20753d30207c203633333335202b2074202a2061202b20286f202a2072202b202873203e3e3e20313629292c20763d30207c203331363134202b2074202a2063202b206f202a2061202b20283632353039202a2072202b202875203e3e3e20313629293b206e5b305d3d732c206e5b315d3d752c206e5b325d3d762c206e5b335d3d35313235202b2074202a2069202b20286f202a2063202b203632353039202a206129202b20283232363039202a2072202b202876203e3e3e20313629293b20636f6e737420663d2869203c3c20323129202b20282869203e3e2032205e206329203c3c203529202b20282863203e3e2032205e206129203e3e203131293b2072657475726e2065202a20282866203e3e3e202869203e3e20313129207c2066203c3c202833312026202d2869203e3e203131292929203e3e3e2030297d2c20633d28652c20743d30293d3e7b636f6e7374206f3d31362c206e3d36353533352c20723d3235353b20666f72202876617220612c20633d313534303438333437372c20693d652e6c656e6774682c20733d74205e20692c20753d303b2034203c3d693b29613d2828613d655b755d20262072207c2028655b2b2b755d2026207229203c3c2038207c2028655b2b2b755d2026207229203c3c203136207c2028655b2b2b755d2026207229203c3c203234292026206e29202a2063202b2028282861203e3e3e206f29202a20632026206e29203c3c206f292c20733d28732026206e29202a2063202b2028282873203e3e3e206f29202a20632026206e29203c3c206f29205e2028613d282861205e3d61203e3e3e203234292026206e29202a2063202b2028282861203e3e3e206f29202a20632026206e29203c3c206f29292c2069202d3d342c202b2b753b20737769746368202869297b6361736520333a2073205e3d28655b75202b20325d2026207229203c3c206f3b206361736520323a2073205e3d28655b75202b20315d2026207229203c3c20383b206361736520313a20733d282873205e3d655b755d20262072292026206e29202a2063202b2028282873203e3e3e206f29202a20632026206e29203c3c206f297d72657475726e20733d282873205e3d73203e3e3e203133292026206e29202a2063202b2028282873203e3e3e20313629202a20632026206e29203c3c203136292c202873205e3d73203e3e3e20313529203e3e3e20307d2c20693d28653d2e35293d3e20612829203c2065203f2031203a20303b20636f6e737420733d28652c20742c206f293d3e7b636f6e7374206e3d652e6372656174655368616465722874293b2072657475726e20652e736861646572536f75726365286e2c206f292c20652e636f6d70696c65536861646572286e292c20652e676574536861646572506172616d65746572286e2c20652e434f4d50494c455f53544154555329203f206e203a20766f696420652e64656c657465536861646572286e297d3b2076617220753d28652c20742c206f293d3e206173796e63206e3d3e7b636f6e737420723d6e2e676574436f6e746578742822776562676c22292c20613d6e2e77696474682c20633d6e2e6865696768743b20722e76696577706f727428302c20302c20612c2063293b20636f6e737420693d2828652c20742c206f293d3e7b636f6e7374206e3d652e63726561746550726f6772616d28293b2072657475726e20652e617474616368536861646572286e2c2074292c20652e617474616368536861646572286e2c206f292c20652e6c696e6b50726f6772616d286e292c20652e67657450726f6772616d506172616d65746572286e2c20652e4c494e4b5f53544154555329203f206e203a20766f696420652e64656c65746550726f6772616d286e297d2928722c207328722c20722e5645525445585f5348414445522c2022617474726962757465207665633320706f736974696f6e3b22202b2065292c207328722c20722e465241474d454e545f5348414445522c207429292c20753d722e6765744174747269624c6f636174696f6e28692c2022706f736974696f6e22292c20763d722e63726561746542756666657228293b20722e62696e6442756666657228722e41525241595f4255464645522c2076292c20722e6275666665724461746128722e41525241595f4255464645522c206e657720466c6f617433324172726179285b2d312c202d312c202d312c20332c20332c202d315d292c20722e5354415449435f44524157292c20722e636c656172436f6c6f7228302c20302c20302c2030292c20722e636c65617228722e434f4c4f525f4255464645525f424954292c20722e75736550726f6772616d2869292c20722e656e61626c6556657274657841747472696241727261792875292c20722e62696e6442756666657228722e41525241595f4255464645522c2076292c20722e766572746578417474726962506f696e74657228752c20322c20722e464c4f41542c2021312c20302c2030292c205b5b227557222c20227632222c205b612c20635d5d2c202e2e2e6f5d2e6d61702828285b652c20742c206f5d293d3e205b742c206f2c20722e676574556e69666f726d4c6f636174696f6e28692c2065295d29292e6d61702828653d3e7b2828652c205b742c206f2c206e5d293d3e7b2262223d3d3d74203f20652e756e69666f726d3169286e2c2021303d3d3d6f203f2031203a203029203a202269223d3d3d74203f20652e756e69666f726d3169286e2c206f29203a202266223d3d3d74203f20652e756e69666f726d3166286e2c206f29203a2028227632223d3d3d74207c7c20227633223d3d3d74207c7c20227634223d3d3d742920262620652e756e69666f726d3266286e2c202e2e2e6f297d2928722c2065297d29292c20722e6472617741727261797328722e545249414e474c45532c20302c2033297d3b20636f6e737420763d5b32202f20332c20312c20312e352c20312e362c203136202f20392c2039202f2031362c202e352c2039202f2031392c2039202f2031392e352c202e34355d2c20663d22756e646566696e65642220213d747970656f66206f7074696f6e73202626206f7074696f6e732c206c3d662e68617368207c7c202828293d3e7b6c657420653d223078223b20666f7220286c657420743d36343b2030203c20743b202d2d742965202b3d2230313233343536373839616263646566225b7e7e283136202a204d6174682e72616e646f6d2829295d3b2072657475726e20657d2928293b20286173796e632028293d3e7b76617220653d4d6174682e6d696e2c20743d4d6174682e6d61783b20636f6e7374206f3d77696e646f772c206e3d646f63756d656e742c20733d28293d3e20706572666f726d616e63652e6e6f7728292c206d3d6e2e626f64792e617070656e644368696c64286e2e637265617465456c656d656e74282263616e7661732229292c20703d6e2e626f64792e617070656e644368696c64286e2e637265617465456c656d656e74282263616e7661732229293b206f2e746572726f69723d7b7d3b206c657420642c20782c20622c20683d765b305d2c20673d302c20793d302c20773d312c20413d21312c20523d702e676574436f6e746578742822326422293b20636f6e737420453d6173796e6320287b6578706f7274696e673a206e3d21312c206c6f673a20413d21302c20697353686966743a20543d21317d3d7b7d293d3e7b76617220433d4d6174682e737172743b20636f6e7374204c3d7328293b20643d6f2e696e6e657257696474682c20783d6f2e696e6e65724865696768743b20636f6e737420463d683d3d3d765b305d207c7c20683d3d3d765b325d203f2032346536203a2033333137373630303b206c657420533d7e7e432846202a2068292c20423d7e7e432846202f2068293b20636f6e737420553d742842202d20383139322c203029202f20423b2053202a3d31202d20552c2042202a3d31202d20552c2064202f2078203e3d68203f202878202d3d7820252032302c20643d7e7e2878202a20682929203a202864202d3d6420252032302c20783d7e7e2864202f206829292c20623d32202a2028662e706978656c44656e73697479207c7c206f2e646576696365506978656c526174696f292c206d2e77696474683d532c206d2e6865696768743d422c20702e77696474683d652864202a20622c2053292c20702e6865696768743d652878202a20622c2042292c20702e7374796c652e77696474683d60247b647d7078602c20702e7374796c652e6865696768743d60247b787d7078602c206d2e7374796c652e706f736974696f6e3d226162736f6c757465222c206d2e7374796c652e6c6566743d2d53202b20227078222c206d2e7374796c652e746f703d2d42202b20227078223b20636f6e737420443d617761697420286173796e632028652c20742c7b70616e3a206f2c20626f726465723a206e2c206c6f673a20737d293d3e7b636f6e737420753d743b207320262620636f6e736f6c652e6c6f6728602d2d2d5c6e486173683a5c6e247b757d60292c2028653d3e7b636f6e737420743d7e7e2828652e6c656e677468202d203229202f2032292c206f3d5b5d3b20666f7220286c6574206e3d303b206e203c20743b206e2b2b297b636f6e737420743d32202b2032202a206e3b206f2e70757368287061727365496e7428652e736c69636528742c2074202b2032292c20313629297d636f6e7374206e3d63286f2c2031363930333832393235292c20613d63286f2c203732393730343730293b20722e73657455696e74333228302c206e292c20722e73657455696e74333228342c2061297d292875293b20636f6e737420763d5b5b227553222c20227632222c205b6128292c206128295d5d2c205b22755a222c202266222c206128295d2c205b227554222c202266222c206128295d2c205b227541222c202266222c206128295d2c205b22754d222c202266222c206128295d2c205b227543222c202266222c206128295d2c205b227552222c202266222c206128295d2c205b227547222c202266222c206128295d2c205b227542222c202266222c206128295d2c205b227531222c202266222c2069282e3034292c202243686172636f616c225d2c205b227532222c202266222c2069282e3034292c202247726964225d2c205b227533222c202266222c2069282e3032292c20224c697175696679225d2c205b227534222c202266222c2069282e3136292c2022466c6970225d2c205b227535222c202266222c2069282e3132292c202244697363225d2c205b227536222c202266222c2069282e3038292c202257617679225d2c205b227537222c202266222c2069282e3132292c202243686f707079225d2c205b227538222c202266222c2069282e3034292c202254696e746564225d2c205b227539222c202266222c2069282e3032292c202253706972616c225d2c205b22753130222c202266222c2069282e3032292c20225265647368696674225d2c205b22753131222c202266222c2069282e3032292c20224d6f6f6e6c6974225d2c205b22753132222c202266222c2069282e3136292c2022427269676874225d2c205b227545222c202266222c2069282e3038292c20224578706c6f7261626c65225d2c205b22754c222c20227632222c206f5d2c205b22754f222c202266222c206e5d5d3b20666f7220286c657420653d303b203133203e20653b20652b2b297b636f6e737420743d765b39202b20655d3b2077696e646f772e4d45544144415441202626202877696e646f772e4d455441444154415b745b335d5d3d30203c20745b325d203f202259657322203a20224e6f22292c2030203c20745b325d20262620745b335d202626207320262620636f6e736f6c652e6c6f67286054726169743a20247b745b335d7d60297d696620282266756e6374696f6e223d3d747970656f66206f6e4d65746164617461202626206f6e4d6574616461746128292c20762e66696e642828653d3e20227545223d3d3d655b305d29295b325d297b636f6e7374205b652c20745d3d762e66696e642828653d3e2022754c223d3d3d655b305d29295b325d3b20636f6e736f6c652e6c6f6728224c6f636174696f6e3a222c20225b22202b2065202b20222c2022202b2074202b20225d22297d72657475726e206173796e63206f3d3e7b636f6e7374206e3d6528225c6e76617279696e672076656332207655763b5c6e766f6964206d61696e28297b676c5f506f736974696f6e3d7665633428706f736974696f6e2c20312e30293b207655763d706f736974696f6e2e78793b7d5c6e222c20225c6e707265636973696f6e20686967687020666c6f61743b5c6e76617279696e672076656332207655763b5c6e756e69666f726d20766563322075572c2075532c20754c3b5c6e756e69666f726d20666c6f617420755a2c2075542c2075412c20754d2c2075432c2075522c2075472c2075422c20754f2c2075312c2075322c2075332c2075342c2075352c2075362c2075372c2075382c2075392c207531302c207531312c207531322c2075453b5c6e5c6e23646566696e6520504920332e313431353932363533355c6e23646566696e65204220302e3038355c6e23646566696e65204f20375c6e5c6e2f2f2049616e204d634577616e202d20417368696d6120417274732e20436f7079726967687420284329203230313120417368696d6120417274732e20416c6c207269676874732072657365727665642e204d4954204c6963656e73652e5c6e76656333206d6f6432383928766563332078297b72657475726e20782d666c6f6f7228782a28312e302f3238392e3029292a3238392e303b7d76656332206d6f6432383928766563322078297b72657475726e20782d666c6f6f7228782a28312e302f3238392e3029292a3238392e303b7d76656333207065726d75746528766563332078297b72657475726e206d6f64323839282828782a33342e30292b312e30292a78293b7d666c6f6174206e6f69736528766563322076297b636f6e7374207665633420433d7665633428302e3231313332343836353430353138372c302e3336363032353430333738343433392c2d302e3537373335303236393138393632362c302e303234333930323433393032343339293b7665633220693d666c6f6f7228762b646f7428762c432e797929293b766563322078303d762d692b646f7428692c432e7878293b766563322069313b69313d2878302e783e78302e79293f7665633228312e302c302e30293a7665633228302e302c312e30293b76656334207831323d78302e787978792b432e78787a7a3b7831322e78792d3d69313b693d6d6f643238392869293b7665633320703d7065726d757465287065726d75746528692e792b7665633328302e302c69312e792c312e3029292b692e782b7665633328302e302c69312e782c312e3029293b76656333206d3d6d617828302e352d7665633328646f742878302c7830292c646f74287831322e78792c7831322e7879292c646f74287831322e7a772c7831322e7a7729292c302e30293b6d3d6d2a6d3b6d3d6d2a6d3b7665633320783d322e302a667261637428702a432e777777292d312e303b7665633320683d6162732878292d302e353b76656333206f783d666c6f6f7228782b302e35293b766563332061303d782d6f783b6d202a3d312e37393238343239313430303135392d302e38353337333437323039353331342a2861302a61302b682a68293b7665633320673b672e783d61302e782a78302e782b682e782a78302e793b672e797a3d61302e797a2a7831322e787a2b682e797a2a7831322e79773b72657475726e203133302e302a646f74286d2c67293b7d666c6f61742072616e64287665633220636f297b72657475726e2066726163742873696e28646f7428636f2e78792c766563322831322e393839382c37382e3233332929292a34333735382e35343533293b7d5c6e5c6e666c6f61742066626d28696e2076656332207576297b666c6f617420763d302e302c20613d302e3632202b20302e3332202a2075413b206d61743220726f743d6d61743228636f7328302e35292c2073696e28302e35292c2d73696e28302e35292c20636f7328302e3529293b20666f722028696e7420693d303b2069203c204f3b202b2b69297b76202b3d61202a206e6f697365287576202b20287553202a2031302e30202d20352e3029293b2075763d726f74202a207576202a202d322e303b2061202a3d302e34393531202b20302e3037202a20706f7728754d2c20322e35293b7d72657475726e20763b7d5c6e666c6f61742066726d28696e207665633220702c20666c6f61742073297b72657475726e2066626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702a73292929292929292929293b7d5c6e6d6174322072326428666c6f6174207468657461297b72657475726e206d61743228636f73287468657461292c2073696e287468657461292c2d73696e287468657461292c20636f7328746865746129293b7d5c6e5c6e766f6964206d61696e28297b5c6e666c6f61742061723d75572e78202f2075572e793b5c6e766563322075763d7655763b5c6e666c6f61742075764f3d312e30202d20312e30202a206d696e287535202b2075392c20312e30293b5c6e7665633220706f733d287576202b2075764f29202a202828302e35202b20302e37202a20755a29202a2028312e30202d20753329202b2028302e3235202a2075332929202a206d61782861722c20312e30293b5c6e706f73202b3d754c202a20302e3235202a2075453b5c6e706f732e79202f3d61723b5c6e6d61743220723d723264285049202a20282d302e3031202b20302e303235202a20287554202a20322e30202d20312e302929293b5c6e706f73202a3d723b5c6e6d6174322072463d723264285049202a20302e35202a207534293b5c6e706f73202a3d72463b5c6e6d6174322072533d723264287539202a205049202a206672616374286c656e67746828706f73202a2033302e302929293b5c6e706f73202a3d72533b5c6e6d6174322072443d723264287535202a205049202a20302e3231202a20666c6f6f72286c656e67746828706f73202a20372e302929293b5c6e706f73202a3d72443b5c6e6d6174322072573d723264287536202a205049202a202d302e3036293b5c6e706f73202a3d72573b5c6e706f73202b3d7536202a207665633228706f732e782c202873696e28706f732e79202a2031352e30202a2028312e30202d20302e32202a2075322929202a20302e35202b20302e3529202a20302e3131202a2028312e30202d20302e33202a20753229293b5c6e706f73202b3d7537202a20766563322873696e28706f732e79202a2031352e30202a2028312e30202d20302e33202a2075322929202a20302e3038202a2028312e30202d20302e32202a207532292c20706f732e78293b5c6e7665633220753275763d7576202a2028312e30202b2042202a2028312e30202b204229293b5c6e666c6f6174207532733d322e30202b20286d61782861722c20312e3029202d20312e30293b5c6e706f73202b3d7532202a20766563322866726163742828312e30202d20753275762e7829202a2028753273202d20302e35202a2075332929202a20302e30392c2066726163742828312e30202d20753275762e79202f20617229202a2028753273202d20302e35202a2075332929202a20302e3039202f206172293b5c6e7665633320623d766563332835312e302f3235352e302c35332e302f3235352e302c3131382e302f3235352e30293b5c6e7665633320626173653d7665633328312e30202a2075522c20302e34202a2075472c20302e32202a207542293b5c6e626173653d6d697828626173652c20622c20753131293b5c6e7665633320633d626173653b5c6e63202b3d2820302e35202b20302e35202a2075432029202a2066726d2820706f732c20755a20293b5c6e63202b3d322e35202a20766563332820302e362c20302e332c20302e31352029202a2066726d2820706f73202a20302e31372c20755a202a20302e383820293b5c6e63202b3d322e35202a207665633328207552202a20302e382c207547202a20302e342c207542202a20302e322029202a2066726d2820706f73202a20302e36362c20755a202a20312e393320293b5c6e63202a3d302e373b5c6e63202a3d312e30202d20302e3939202a20753131202b2062202a20312e39202a207531313b5c6e63202b3d302e32202a207531313b5c6e666c6f61742062543d2842202a20754f29202f206d6178286172202b20302e332c20312e30293b5c6e666c6f61742062463d302e303030353b5c6e766563332062723d6d697828626173652c207665633328312e30292c206d696e28302e32352c20312e30202d2075313129293b5c6e62723d6d69782862722c207665633328302e3034372c20302e3034372c20302e303433292c207531293b5c6e633d6d697828632c2062722c20736d6f6f7468737465702875762e78202d206246202a20302e352c2075762e78202b206246202a20302e352c202d312e30202b20625429293b5c6e633d6d69782862722c20632c20736d6f6f7468737465702875762e78202d206246202a20302e352c2075762e78202b206246202a20302e352c20312e30202d20625429293b5c6e633d6d697828632c2062722c20736d6f6f7468737465702875762e79202d206246202a20302e352c2075762e79202b206246202a20302e352c202d312e30202b206254202a20617229293b5c6e633d6d69782862722c20632c20736d6f6f7468737465702875762e79202d206246202a20302e352c2075762e79202b206246202a20302e352c20312e30202d206254202a20617229293b5c6e632e72202a3d312e30202b20753130202a20312e35202a202875762e78202d20332e30293b5c6e632e67202a3d312e30202d20753130202a20302e343b5c6e633d6d697828632c206d696e286d617828632e727272202a20632e676767202f20632e6262622c20302e31292c20312e30292c20753120293b5c6e633d6d697828632c206d69782862722c2063202a20322e30202b2063202a20342e30202a2075312c207374657028632e72202b20632e67202b20632e622c20302e363729292c207538293b5c6e63202b3d28302e35202d20302e3333202a207531202d20302e33202a2075313129202a207531323b5c6e676c5f46726167436f6c6f723d7665633428632c20312e30293b5c6e7d5c6e222c2076293b206177616974206e286f2c2074297d7d2928752c206c2c7b70616e3a205b672c20795d2c20626f726465723a20772c206c6f673a20417d293b2061776169742044286d293b20636f6e7374204d3d64202a2062203e2053203f2062202a2053202f202864202a206229203a20623b20522e7363616c65284d2c204d292c20522e64726177496d616765286d2c20302c20302c20642c2078292c206e203f2028636f6e736f6c652e6c6f6728672c2079292c20617761697420286173796e632028652c20742c206f3d2131293d3e7b636f6e7374206e3d646f63756d656e742c20723d77696e646f773f2e706172656e743b20636f6e736f6c652e6c6f672822446f776e6c6f6164696e6720696d6167652e2e2e22293b20636f6e737420613d28653d3e7b6c657420743d77696e646f772e61746f6228652e73706c697428222c22295b315d292c206f3d6e657720417272617942756666657228742e6c656e677468292c206e3d6e65772055696e74384172726179286f293b20666f7220286c657420653d303b2065203c20742e6c656e6774683b20652b2b296e5b655d3d742e63686172436f646541742865293b206c657420723d6e6577204461746156696577286f293b2072657475726e206e657720426c6f62285b725d2c7b747970653a20652e73706c697428222c22295b305d2e73706c697428223a22295b315d2e73706c697428223b22295b305d7d297d292865292c20633d723f2e55524c2e6372656174654f626a65637455524c2861293b20696620286f2920723f2e6f70656e2863293b20656c73657b636f6e737420653d6e2e626f64792e617070656e644368696c64286e2e637265617465456c656d656e742822612229293b20652e687265663d632c20652e646f776e6c6f61643d742c20652e636c69636b28292c206e2e626f64792e72656d6f76654368696c642865297d723f2e55524c2e7265766f6b654f626a65637455524c2863297d29286d2e746f4461746155524c2822696d6167652f6a70656722292c2060746572726f69722d247b6c7d247b67207c7c2079203f20602d5b247b677d2c247b797d5d60203a2022227d2e6a7067602c2054292c20636f6e736f6c652e6c6f6728604578706f72742074696d653a20247b7e7e28732829202d204c297d6d735c6e2d2d2d60292c2045287b6c6f673a2021317d2929203a204120262620636f6e736f6c652e6c6f67286050726f636573732074696d653a20247b7e7e28732829202d204c297d6d735c6e2d2d2d60292c202266756e6374696f6e223d3d747970656f66206f6e446f6e65202626206f6e446f6e6528297d2c20543d6f3d3e7b683d652874286f2c202e3435292c20332e3536292c20636f6e736f6c652e6c6f672860417370656374207365743a20247b687d60292c2045287b6c6f673a2021317d297d3b206f2e746572726f69722e7365744173706563743d543b20636f6e737420433d28653d302c20743d30293d3e7b67202b3d2e35202a20652c2079202b3d2e35202a20742c202865207c7c2074292026262045287b6c6f673a2021317d297d3b206f2e746572726f69722e676f546f3d28653d302c20743d30293d3e7b673d652c20793d742c2045287b6c6f673a2021317d297d3b20636f6e7374204c3d28293d3e7b773d30203c2077203f2030203a20312c2045287b6c6f673a2021317d297d3b206f2e746572726f69722e746f67676c65426f726465723d4c3b20636f6e737420463d653d3e7b45287b6578706f7274696e673a2021302c20697353686966743a20657d292c20413d21317d3b206f2e746572726f69722e736176653d462c206f2e6164644576656e744c697374656e65722822726573697a65222c202828293d3e2045287b6c6f673a2021317d2929292c206f2e6164644576656e744c697374656e657228226b6579646f776e222c2028653d3e7b28652e6374726c4b6579207c7c20652e6d6574614b657929202626202273223d3d3d652e6b65792e746f4c6f7765724361736528292026262028652e70726576656e7444656661756c7428292c2021412026262028413d21302c204628652e73686966744b65792929297d29292c206f2e6164644576656e744c697374656e657228226b65797570222c2028653d3e7b636f6e737420743d7061727365496e7428652e6b65792c203130293b2073776974636820282169734e614e2874292026262074203c3d762e6c656e677468202626205428765b303d3d3d74203f2039203a2074202d20315d207c7c20765b305d292c20652e6b6579297b6361736520224172726f774c656674223a2043282d312c2030293b20627265616b3b206361736520224172726f775269676874223a204328312c2030293b20627265616b3b206361736520224172726f775570223a204328302c2031293b20627265616b3b206361736520224172726f77446f776e223a204328302c202d31293b20627265616b3b2063617365202262223a2063617365202242223a204c28297d7d29292c20702e6164644576656e744c697374656e65722822636c69636b222c2028653d3e7b636f6e73747b6162733a20742c207369676e3a206f7d3d4d6174682c206e3d652e6f666673657458202f2064202a2032202d20312c20723d652e6f666673657459202f2078202a2032202d20313b2043282e35203c2074286e29203f206f286e29203a20302c202e35203c2074287229203f206f282d7229203a2030297d29292c204528297d2928297d2928293b3c2f7363726970743e3c2f626f64793e0000000000000000000000

Deployed Bytecode

0x6080604052600436106102815760003560e01c80636b29b79f1161014f5780639828a590116100c1578063e637f98f1161007a578063e637f98f14610a51578063e985e9c514610a7c578063ec8c890414610ab9578063f00e9e1f14610ad0578063f2fde38b14610afb578063f65a0b3e14610b2457610316565b80639828a59014610966578063998637541461097d578063a22cb465146109a6578063b88d4fde146109cf578063c87b56dd146109f8578063d48e13c314610a3557610316565b80638a016249116101135780638a016249146108655780638da5cb5b146108905780638dc251e3146108bb57806390aafc01146108e457806391a1104d1461090f57806395d89b411461093b57610316565b80636b29b79f146107805780636eaef5bb146107a957806370a08231146107e6578063715018a6146108235780638296a2e81461083a57610316565b80632a55205a116101f357806342842e0e116101ac57806342842e0e1461064e57806342966c6814610677578063429b62e5146106a05780634f6ccce7146106dd57806355f804b31461071a5780636352211e1461074357610316565b80632a55205a146105125780632f745c59146105505780633c3f2d411461058d5780634017465c146105b857806340398d67146105f557806340c10f191461063257610316565b80630e0aff94116102455780630e0aff941461041457806316c38b3c1461043f57806316c61ccc1461046857806318160ddd146104935780631b2119b8146104be57806323b872dd146104e957610316565b806301ffc9a71461031b5780630387da421461035857806306fdde0314610383578063081812fc146103ae578063095ea7b3146103eb57610316565b3661031657601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329a72ca334306040518363ffffffff1660e01b81526004016102e29190614cbd565b6000604051808303818588803b1580156102fb57600080fd5b505af115801561030f573d6000803e3d6000fd5b5050505050005b600080fd5b34801561032757600080fd5b50610342600480360381019061033d91906145c9565b610b4d565b60405161034f9190614dc1565b60405180910390f35b34801561036457600080fd5b5061036d610bc7565b60405161037a919061515e565b60405180910390f35b34801561038f57600080fd5b50610398610bcd565b6040516103a59190614ddc565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d0919061465c565b610c5f565b6040516103e29190614cbd565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d91906144fa565b610ce4565b005b34801561042057600080fd5b50610429610dfc565b6040516104369190614cbd565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614577565b610e22565b005b34801561047457600080fd5b5061047d610f15565b60405161048a9190614dc1565b60405180910390f35b34801561049f57600080fd5b506104a8610f28565b6040516104b5919061515e565b60405180910390f35b3480156104ca57600080fd5b506104d3610f35565b6040516104e0919061515e565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b91906143f4565b610f3b565b005b34801561051e57600080fd5b50610539600480360381019061053491906146ae565b610f9b565b604051610547929190614d76565b60405180910390f35b34801561055c57600080fd5b50610577600480360381019061057291906144fa565b611092565b604051610584919061515e565b60405180910390f35b34801561059957600080fd5b506105a2611137565b6040516105af9190614cbd565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da919061465c565b61115d565b6040516105ec919061515e565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190614366565b61117a565b6040516106299190614d9f565b60405180910390f35b61064c600480360381019061064791906144fa565b611274565b005b34801561065a57600080fd5b50610675600480360381019061067091906143f4565b61168c565b005b34801561068357600080fd5b5061069e6004803603810190610699919061465c565b6116ac565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190614366565b61173b565b6040516106d49190614dc1565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061465c565b61175b565b604051610711919061515e565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c919061461b565b6117f2565b005b34801561074f57600080fd5b5061076a6004803603810190610765919061465c565b6118a9565b6040516107779190614cbd565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a29190614366565b61195b565b005b3480156107b557600080fd5b506107d060048036038101906107cb919061465c565b611a3c565b6040516107dd919061515e565b60405180910390f35b3480156107f257600080fd5b5061080d60048036038101906108089190614366565b611b12565b60405161081a919061515e565b60405180910390f35b34801561082f57600080fd5b50610838611bca565b005b34801561084657600080fd5b5061084f611c52565b60405161085c919061515e565b60405180910390f35b34801561087157600080fd5b5061087a611c58565b6040516108879190614ddc565b60405180910390f35b34801561089c57600080fd5b506108a5611ce6565b6040516108b29190614cbd565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd9190614366565b611d10565b005b3480156108f057600080fd5b506108f9611df1565b6040516109069190614cbd565b60405180910390f35b34801561091b57600080fd5b50610924611e17565b6040516109329291906151cc565b60405180910390f35b34801561094757600080fd5b50610950611e43565b60405161095d9190614ddc565b60405180910390f35b34801561097257600080fd5b5061097b611ed5565b005b34801561098957600080fd5b506109a4600480360381019061099f9190614366565b6120cc565b005b3480156109b257600080fd5b506109cd60048036038101906109c891906144be565b6121ad565b005b3480156109db57600080fd5b506109f660048036038101906109f19190614443565b6121c3565b005b348015610a0457600080fd5b50610a1f6004803603810190610a1a919061465c565b612225565b604051610a2c9190614ddc565b60405180910390f35b610a4f6004803603810190610a4a91906144fa565b6122cc565b005b348015610a5d57600080fd5b50610a666124a0565b604051610a739190614cbd565b60405180910390f35b348015610a8857600080fd5b50610aa36004803603810190610a9e91906143b8565b6124c6565b604051610ab09190614dc1565b60405180910390f35b348015610ac557600080fd5b50610ace61255a565b005b348015610adc57600080fd5b50610ae56126ca565b604051610af29190614cbd565b60405180910390f35b348015610b0757600080fd5b50610b226004803603810190610b1d9190614366565b6126f0565b005b348015610b3057600080fd5b50610b4b6004803603810190610b4691906144be565b6127e8565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bc05750610bbf8261291f565b5b9050919050565b600d5481565b606060008054610bdc90615518565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0890615518565b8015610c555780601f10610c2a57610100808354040283529160200191610c55565b820191906000526020600020905b815481529060010190602001808311610c3857829003601f168201915b5050505050905090565b6000610c6a82612999565b610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090614ffe565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cef826118a9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d579061509e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d7f612a05565b73ffffffffffffffffffffffffffffffffffffffff161480610dae5750610dad81610da8612a05565b6124c6565b5b610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490614f7e565b60405180910390fd5b610df78383612a0d565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610e2c612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16610e4d611ce6565b73ffffffffffffffffffffffffffffffffffffffff161480610eb85750600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee9061513e565b60405180910390fd5b81601660006101000a81548160ff0219169083151502179055505050565b601660009054906101000a900460ff1681565b6000600880549050905090565b600f5481565b610f4c610f46612a05565b82612ac6565b610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f82906150de565b60405180910390fd5b610f96838383612ba4565b505050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271084601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663306e38be3060016040518363ffffffff1660e01b8152600401611023929190614d4d565b60206040518083038186803b15801561103b57600080fd5b505afa15801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190614685565b61107d91906153ab565b611087919061537a565b915091509250929050565b600061109d83611b12565b82106110de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d590614e1e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611173826017612e0b90919063ffffffff16565b9050919050565b6060600061118783611b12565b905060008167ffffffffffffffff8111156111cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111f95781602001602082028036833780820191505090505b50905060005b82811015611269576112118582611092565b82828151811061124a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806112619061557b565b9150506111ff565b508092505050919050565b6000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8bc51ac306112bd612a05565b6040518363ffffffff1660e01b81526004016112da929190614cd8565b60206040518083038186803b1580156112f257600080fd5b505afa158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a9190614685565b90506113368282612e2b565b6000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ea85b1e561137e612a05565b6040518263ffffffff1660e01b815260040161139a9190614cbd565b60006040518083038186803b1580156113b257600080fd5b505afa1580156113c6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113ef9190614536565b90506000805b84821080156114045750825181105b156115f6576000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4ed4d15858481518110611482577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016114a6919061515e565b60206040518083038186803b1580156114be57600080fd5b505afa1580156114d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f691906145a0565b9050600061155d858481518110611536577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183600f5461154a610f28565b6017612f5290949392919063ffffffff16565b905060005b818110801561157057508785105b156115e0576115bf898786815181106115b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151612f9d565b84806115ca9061557b565b95505080806115d89061557b565b915050611562565b5082806115ec9061557b565b93505050506113f5565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf58b8ea34306040518363ffffffff1660e01b81526004016116529190614cbd565b6000604051808303818588803b15801561166b57600080fd5b505af115801561167f573d6000803e3d6000fd5b5050505050505050505050565b6116a7838383604051806020016040528060008152506121c3565b505050565b60006116b7826118a9565b90508073ffffffffffffffffffffffffffffffffffffffff166116d8612a05565b73ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117259061507e565b60405180910390fd5b61173782612fc2565b5050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000611765610f28565b82106117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d9061511e565b60405180910390fd5b600882815481106117e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b60006117fc612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611885906150fe565b60405180910390fd5b81601590805190602001906118a49291906140b5565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990614fbe565b60405180910390fd5b80915050919050565b6000611965612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee906150fe565b60405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000611b0b82601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4ed4d15856040518263ffffffff1660e01b8152600401611a9d919061515e565b60206040518083038186803b158015611ab557600080fd5b505afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed91906145a0565b600f54611af8610f28565b6017612f5290949392919063ffffffff16565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90614f9e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bd2612a05565b73ffffffffffffffffffffffffffffffffffffffff16611bf0611ce6565b73ffffffffffffffffffffffffffffffffffffffff1614611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d9061501e565b60405180910390fd5b611c5060006130df565b565b60115481565b600e8054611c6590615518565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9190615518565b8015611cde5780601f10611cb357610100808354040283529160200191611cde565b820191906000526020600020905b815481529060010190602001808311611cc157829003601f168201915b505050505081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611d1a612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da3906150fe565b60405180910390fd5b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60178060000160009054906101000a900460ff16908060000160019054906101000a900460ff16905082565b606060018054611e5290615518565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7e90615518565b8015611ecb5780601f10611ea057610100808354040283529160200191611ecb565b820191906000526020600020905b815481529060010190602001808311611eae57829003601f168201915b5050505050905090565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f379190614cbd565b60206040518083038186803b158015611f4f57600080fd5b505afa158015611f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f879190614685565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611fe6929190614d76565b602060405180830381600087803b15801561200057600080fd5b505af1158015612014573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203891906145a0565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634aee68a130836040518363ffffffff1660e01b8152600401612096929190614d76565b600060405180830381600087803b1580156120b057600080fd5b505af11580156120c4573d6000803e3d6000fd5b505050505050565b60006120d6612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f906150fe565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6121bf6121b8612a05565b83836131a5565b5050565b6121d46121ce612a05565b83612ac6565b612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a906150de565b60405180910390fd5b61221f84848484613312565b50505050565b606061223082612999565b61226f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122669061505e565b60405180910390fd5b600061227961336e565b9050600081511161229957604051806020016040528060008152506122c4565b806122a384613400565b6040516020016122b4929190614c4b565b6040516020818303038152906040525b915050919050565b6122d4612a05565b73ffffffffffffffffffffffffffffffffffffffff16601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a47dc5f0836040518263ffffffff1660e01b8152600401612345919061515e565b60206040518083038186803b15801561235d57600080fd5b505afa158015612371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612395919061438f565b73ffffffffffffffffffffffffffffffffffffffff16146123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290614f3e565b60405180910390fd5b60006123f682611a3c565b9050612403600182612e2b565b61240d8383612f9d565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf58b8ea34306040518363ffffffff1660e01b81526004016124699190614cbd565b6000604051808303818588803b15801561248257600080fd5b505af1158015612496573d6000803e3d6000fd5b5050505050505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000612564612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16612585611ce6565b73ffffffffffffffffffffffffffffffffffffffff1614806125f05750600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61262f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126269061513e565b60405180910390fd5b601260009054906101000a900460ff161561267f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267690614ede565b60405180910390fd5b6126ac600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006135ad565b6001601260006101000a81548160ff02191690831515021790555050565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126f8612a05565b73ffffffffffffffffffffffffffffffffffffffff16612716611ce6565b73ffffffffffffffffffffffffffffffffffffffff161461276c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127639061501e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d390614e5e565b60405180910390fd5b6127e5816130df565b50565b60006127f2612a05565b90508073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287b906150fe565b60405180910390fd5b81600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b818360000160016101000a81548160ff021916908360ff160217905550808360000160006101000a81548160ff021916908360ff160217905550505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612992575061299182613662565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a80836118a9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612ad182612999565b612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0790614f5e565b60405180910390fd5b6000612b1b836118a9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b8a57508373ffffffffffffffffffffffffffffffffffffffff16612b7284610c5f565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b9b5750612b9a81856124c6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612bc4826118a9565b73ffffffffffffffffffffffffffffffffffffffff1614612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1190614e7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8190614ebe565b60405180910390fd5b612c95838383613744565b612ca0600082612a0d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cf09190615405565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d479190615324565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e06838383613858565b505050565b600082600101600083815260200190815260200160002054905092915050565b601660009054906101000a900460ff1615612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e729061503e565b60405180910390fd5b60008111612ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb590614f1e565b60405180910390fd5b81811015612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef8906150be565b60405180910390fd5b600082600d5402905034811115612f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4490614dfe565b60405180910390fd5b505050565b6000808284612f619190615405565b905060008111612f72576000612f91565b612f7c8787612e0b565b612f86888761385d565b612f909190615405565b5b91505095945050505050565b612fb481600160176138999092919063ffffffff16565b612fbe82826135ad565b5050565b6000612fcd826118a9565b9050612fdb81600084613744565b612fe6600083612a0d565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130369190615405565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130db81600084613858565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320b90614efe565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133059190614dc1565b60405180910390a3505050565b61331d848484612ba4565b613329848484846138c1565b613368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335f90614e3e565b60405180910390fd5b50505050565b60606015805461337d90615518565b80601f01602080910402602001604051908101604052809291908181526020018280546133a990615518565b80156133f65780601f106133cb576101008083540402835291602001916133f6565b820191906000526020600020905b8154815290600101906020018083116133d957829003601f168201915b5050505050905090565b60606000821415613448576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135a8565b600082905060005b6000821461347a5780806134639061557b565b915050600a82613473919061537a565b9150613450565b60008167ffffffffffffffff8111156134bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156134ee5781602001600182028036833780820191505090505b5090505b600085146135a1576001826135079190615405565b9150600a8561351691906155f2565b60306135229190615324565b60f81b81838151811061355e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561359a919061537a565b94506134f2565b8093505050505b919050565b600060016135b9610f28565b620186a06011546135ca91906153ab565b6135d49190615324565b6135de9190615324565b90506000814342866040516020016135f99493929190614c6f565b60405160208183030381529060405280519060200120905061361b8483613a58565b7f45bb2f23e93e3ce1e0ac83c6a2a2be3d211bd77b0528874929dd09e8e0bf7d5582601154858785604051613654959493929190615179565b60405180910390a150505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061372d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061373d575061373c82613a76565b5b9050919050565b61374f838383613ae0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137925761378d81613ae5565b6137d1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146137d0576137cf8382613b2e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138145761380f81613c9b565b613853565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613852576138518282613dde565b5b5b505050565b505050565b60008161387b578260000160019054906101000a900460ff1661388e565b8260000160009054906101000a900460ff165b60ff16905092915050565b8083600101600084815260200190815260200160002060008282540192505081905550505050565b60006138e28473ffffffffffffffffffffffffffffffffffffffff16613e5d565b15613a4b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261390b612a05565b8786866040518563ffffffff1660e01b815260040161392d9493929190614d01565b602060405180830381600087803b15801561394757600080fd5b505af192505050801561397857506040513d601f19601f8201168201806040525081019061397591906145f2565b60015b6139fb573d80600081146139a8576040519150601f19603f3d011682016040523d82523d6000602084013e6139ad565b606091505b506000815114156139f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ea90614e3e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a50565b600190505b949350505050565b613a72828260405180602001604052806000815250613e80565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b3b84611b12565b613b459190615405565b9050600060076000848152602001908152602001600020549050818114613c2a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613caf9190615405565b9050600060096000848152602001908152602001600020549050600060088381548110613d05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613d4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613dc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613de983611b12565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b613e8a8383613edb565b613e9760008484846138c1565b613ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ecd90614e3e565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f4290614fde565b60405180910390fd5b613f5481612999565b15613f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8b90614e9e565b60405180910390fd5b613fa060008383613744565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ff09190615324565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46140b160008383613858565b5050565b8280546140c190615518565b90600052602060002090601f0160209004810192826140e3576000855561412a565b82601f106140fc57805160ff191683800117855561412a565b8280016001018555821561412a579182015b8281111561412957825182559160200191906001019061410e565b5b509050614137919061413b565b5090565b5b8082111561415457600081600090555060010161413c565b5090565b600061416b6141668461521a565b6151f5565b9050808382526020820190508285602086028201111561418a57600080fd5b60005b858110156141ba57816141a08882614351565b84526020840193506020830192505060018101905061418d565b5050509392505050565b60006141d76141d284615246565b6151f5565b9050828152602081018484840111156141ef57600080fd5b6141fa8482856154d6565b509392505050565b600061421561421084615277565b6151f5565b90508281526020810184848401111561422d57600080fd5b6142388482856154d6565b509392505050565b60008135905061424f81615eba565b92915050565b60008151905061426481615eba565b92915050565b600082601f83011261427b57600080fd5b815161428b848260208601614158565b91505092915050565b6000813590506142a381615ed1565b92915050565b6000815190506142b881615ed1565b92915050565b6000813590506142cd81615ee8565b92915050565b6000815190506142e281615ee8565b92915050565b600082601f8301126142f957600080fd5b81356143098482602086016141c4565b91505092915050565b600082601f83011261432357600080fd5b8135614333848260208601614202565b91505092915050565b60008135905061434b81615eff565b92915050565b60008151905061436081615eff565b92915050565b60006020828403121561437857600080fd5b600061438684828501614240565b91505092915050565b6000602082840312156143a157600080fd5b60006143af84828501614255565b91505092915050565b600080604083850312156143cb57600080fd5b60006143d985828601614240565b92505060206143ea85828601614240565b9150509250929050565b60008060006060848603121561440957600080fd5b600061441786828701614240565b935050602061442886828701614240565b92505060406144398682870161433c565b9150509250925092565b6000806000806080858703121561445957600080fd5b600061446787828801614240565b945050602061447887828801614240565b93505060406144898782880161433c565b925050606085013567ffffffffffffffff8111156144a657600080fd5b6144b2878288016142e8565b91505092959194509250565b600080604083850312156144d157600080fd5b60006144df85828601614240565b92505060206144f085828601614294565b9150509250929050565b6000806040838503121561450d57600080fd5b600061451b85828601614240565b925050602061452c8582860161433c565b9150509250929050565b60006020828403121561454857600080fd5b600082015167ffffffffffffffff81111561456257600080fd5b61456e8482850161426a565b91505092915050565b60006020828403121561458957600080fd5b600061459784828501614294565b91505092915050565b6000602082840312156145b257600080fd5b60006145c0848285016142a9565b91505092915050565b6000602082840312156145db57600080fd5b60006145e9848285016142be565b91505092915050565b60006020828403121561460457600080fd5b6000614612848285016142d3565b91505092915050565b60006020828403121561462d57600080fd5b600082013567ffffffffffffffff81111561464757600080fd5b61465384828501614312565b91505092915050565b60006020828403121561466e57600080fd5b600061467c8482850161433c565b91505092915050565b60006020828403121561469757600080fd5b60006146a584828501614351565b91505092915050565b600080604083850312156146c157600080fd5b60006146cf8582860161433c565b92505060206146e08582860161433c565b9150509250929050565b60006146f68383614c07565b60208301905092915050565b61470b81615439565b82525050565b61472261471d82615439565b6155c4565b82525050565b6000614733826152b8565b61473d81856152e6565b9350614748836152a8565b8060005b8381101561477957815161476088826146ea565b975061476b836152d9565b92505060018101905061474c565b5085935050505092915050565b61478f8161544b565b82525050565b61479e81615457565b82525050565b60006147af826152c3565b6147b981856152f7565b93506147c98185602086016154e5565b6147d2816156df565b840191505092915050565b6147e6816154c4565b82525050565b60006147f7826152ce565b6148018185615308565b93506148118185602086016154e5565b61481a816156df565b840191505092915050565b6000614830826152ce565b61483a8185615319565b935061484a8185602086016154e5565b80840191505092915050565b6000614863602b83615308565b915061486e826156fd565b604082019050919050565b6000614886602b83615308565b91506148918261574c565b604082019050919050565b60006148a9603283615308565b91506148b48261579b565b604082019050919050565b60006148cc602683615308565b91506148d7826157ea565b604082019050919050565b60006148ef602583615308565b91506148fa82615839565b604082019050919050565b6000614912601c83615308565b915061491d82615888565b602082019050919050565b6000614935602483615308565b9150614940826158b1565b604082019050919050565b6000614958602b83615308565b915061496382615900565b604082019050919050565b600061497b601983615308565b91506149868261594f565b602082019050919050565b600061499e602683615308565b91506149a982615978565b604082019050919050565b60006149c1603283615308565b91506149cc826159c7565b604082019050919050565b60006149e4602c83615308565b91506149ef82615a16565b604082019050919050565b6000614a07603883615308565b9150614a1282615a65565b604082019050919050565b6000614a2a602a83615308565b9150614a3582615ab4565b604082019050919050565b6000614a4d602983615308565b9150614a5882615b03565b604082019050919050565b6000614a70602083615308565b9150614a7b82615b52565b602082019050919050565b6000614a93602c83615308565b9150614a9e82615b7b565b604082019050919050565b6000614ab6602083615308565b9150614ac182615bca565b602082019050919050565b6000614ad9602583615308565b9150614ae482615bf3565b604082019050919050565b6000614afc602f83615308565b9150614b0782615c42565b604082019050919050565b6000614b1f602c83615308565b9150614b2a82615c91565b604082019050919050565b6000614b42602183615308565b9150614b4d82615ce0565b604082019050919050565b6000614b65603183615308565b9150614b7082615d2f565b604082019050919050565b6000614b88603183615308565b9150614b9382615d7e565b604082019050919050565b6000614bab602883615308565b9150614bb682615dcd565b604082019050919050565b6000614bce602c83615308565b9150614bd982615e1c565b604082019050919050565b6000614bf1602f83615308565b9150614bfc82615e6b565b604082019050919050565b614c10816154ad565b82525050565b614c1f816154ad565b82525050565b614c36614c31826154ad565b6155e8565b82525050565b614c45816154b7565b82525050565b6000614c578285614825565b9150614c638284614825565b91508190509392505050565b6000614c7b8287614c25565b602082019150614c8b8286614c25565b602082019150614c9b8285614c25565b602082019150614cab8284614711565b60148201915081905095945050505050565b6000602082019050614cd26000830184614702565b92915050565b6000604082019050614ced6000830185614702565b614cfa6020830184614702565b9392505050565b6000608082019050614d166000830187614702565b614d236020830186614702565b614d306040830185614c16565b8181036060830152614d4281846147a4565b905095945050505050565b6000604082019050614d626000830185614702565b614d6f60208301846147dd565b9392505050565b6000604082019050614d8b6000830185614702565b614d986020830184614c16565b9392505050565b60006020820190508181036000830152614db98184614728565b905092915050565b6000602082019050614dd66000830184614786565b92915050565b60006020820190508181036000830152614df681846147ec565b905092915050565b60006020820190508181036000830152614e1781614856565b9050919050565b60006020820190508181036000830152614e3781614879565b9050919050565b60006020820190508181036000830152614e578161489c565b9050919050565b60006020820190508181036000830152614e77816148bf565b9050919050565b60006020820190508181036000830152614e97816148e2565b9050919050565b60006020820190508181036000830152614eb781614905565b9050919050565b60006020820190508181036000830152614ed781614928565b9050919050565b60006020820190508181036000830152614ef78161494b565b9050919050565b60006020820190508181036000830152614f178161496e565b9050919050565b60006020820190508181036000830152614f3781614991565b9050919050565b60006020820190508181036000830152614f57816149b4565b9050919050565b60006020820190508181036000830152614f77816149d7565b9050919050565b60006020820190508181036000830152614f97816149fa565b9050919050565b60006020820190508181036000830152614fb781614a1d565b9050919050565b60006020820190508181036000830152614fd781614a40565b9050919050565b60006020820190508181036000830152614ff781614a63565b9050919050565b6000602082019050818103600083015261501781614a86565b9050919050565b6000602082019050818103600083015261503781614aa9565b9050919050565b6000602082019050818103600083015261505781614acc565b9050919050565b6000602082019050818103600083015261507781614aef565b9050919050565b6000602082019050818103600083015261509781614b12565b9050919050565b600060208201905081810360008301526150b781614b35565b9050919050565b600060208201905081810360008301526150d781614b58565b9050919050565b600060208201905081810360008301526150f781614b7b565b9050919050565b6000602082019050818103600083015261511781614b9e565b9050919050565b6000602082019050818103600083015261513781614bc1565b9050919050565b6000602082019050818103600083015261515781614be4565b9050919050565b60006020820190506151736000830184614c16565b92915050565b600060a08201905061518e6000830188614c16565b61519b6020830187614c16565b6151a86040830186614c16565b6151b56060830185614702565b6151c26080830184614795565b9695505050505050565b60006040820190506151e16000830185614c3c565b6151ee6020830184614c3c565b9392505050565b60006151ff615210565b905061520b828261554a565b919050565b6000604051905090565b600067ffffffffffffffff821115615235576152346156b0565b5b602082029050602081019050919050565b600067ffffffffffffffff821115615261576152606156b0565b5b61526a826156df565b9050602081019050919050565b600067ffffffffffffffff821115615292576152916156b0565b5b61529b826156df565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061532f826154ad565b915061533a836154ad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561536f5761536e615623565b5b828201905092915050565b6000615385826154ad565b9150615390836154ad565b9250826153a05761539f615652565b5b828204905092915050565b60006153b6826154ad565b91506153c1836154ad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153fa576153f9615623565b5b828202905092915050565b6000615410826154ad565b915061541b836154ad565b92508282101561542e5761542d615623565b5b828203905092915050565b60006154448261548d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006154cf826154b7565b9050919050565b82818337600083830152505050565b60005b838110156155035780820151818401526020810190506154e8565b83811115615512576000848401525b50505050565b6000600282049050600182168061553057607f821691505b6020821081141561554457615543615681565b5b50919050565b615553826156df565b810181811067ffffffffffffffff82111715615572576155716156b0565b5b80604052505050565b6000615586826154ad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155b9576155b8615623565b5b600182019050919050565b60006155cf826155d6565b9050919050565b60006155e1826156f0565b9050919050565b6000819050919050565b60006155fd826154ad565b9150615608836154ad565b92508261561857615617615652565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f47656e4172744552433732315363726970743a207472616e73616374696f6e2060008201527f756e646572707269636564000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f47656e4172744552433732315363726970743a20726573657276656420616c7260008201527f65616479206d696e746564000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f47656e4172744552433732315363726970743a206e6f206d696e74732061766160008201527f696c61626c650000000000000000000000000000000000000000000000000000602082015250565b7f47656e4172744552433732315363726970743a2073656e646572206973206e6f60008201527f74206d656d62657273686970206f776e65720000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f47656e4172744552433732315363726970743a206d696e74696e67206973207060008201527f6175736564000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f47656e4172744552433732315363726970743a206275726e2063616c6c65722060008201527f6973206e6f74206f776e65720000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f47656e4172744552433732315363726970743a20616d6f756e7420657863656560008201527f647320617661696c61626c654d696e7473000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f47656e4172744163636573733a2063616c6c6572206973206e6f742067656e6160008201527f72742061646d696e000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f47656e4172744163636573733a2063616c6c6572206973206e6f74207468652060008201527f6f776e6572206e6f722061646d696e0000000000000000000000000000000000602082015250565b615ec381615439565b8114615ece57600080fd5b50565b615eda8161544b565b8114615ee557600080fd5b50565b615ef181615461565b8114615efc57600080fd5b50565b615f08816154ad565b8114615f1357600080fd5b5056fea2646970667358221220abe0a61bae040a6268f11722d91c6e9f149c46bdf72129fb203fa889abaa292e64736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000075300000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000f09473b9e7d00f505f467b344f3907a948e38da0000000000000000000000000b42970b84c25aa3b1fd145fc41d2f301ec4bb9ad000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000012546572726f69722062792047454e2e4152540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000354524f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f6170692e67656e2e6172742f7075626c69632f617474726962757465732f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002df53c686561643e203c6d657461206e616d653d2276696577706f72742220636f6e74656e743d2277696474683d6465766963652d77696474682c736872696e6b2d746f2d6669743d302c757365722d7363616c61626c653d6e6f2c6d696e696d756d2d7363616c653d312c6d6178696d756d2d7363616c653d31223e203c7469746c653e546572726f6972202d204b656c6c79204d696c6c6967616e3c2f7469746c653e203c7374796c653e68746d6c2c20626f64797b77696474683a20313030253b206865696768743a20313030253b206d617267696e3a20303b7d626f64797b646973706c61793a20666c65783b206a7573746966792d636f6e74656e743a2063656e7465723b20616c69676e2d6974656d733a2063656e7465723b7d3c2f7374796c653e3c2f686561643e3c626f64793e203c7363726970743e77696e646f772e4d455441444154413d7b7d3b2066756e6374696f6e206f6e4d6574616461746128297b77696e646f772e746f703f2e706f73744d65737361676528206067656e6172743a6d657461646174613a247b4a534f4e2e737472696e676966792877696e646f772e4d45544144415441297d602c20222a2220293b7d66756e6374696f6e206f6e446f6e6528297b77696e646f772e746f703f2e706f73744d657373616765286067656e6172743a646f6e65602c20222a22293b2077696e646f772e6f6e496d61676552656e64657265642026262077696e646f772e6f6e496d61676552656e646572656428293b7d66756e6374696f6e2072616e646f6d5f6861736828297b6c65742063686172733d2230313233343536373839616263646566223b206c657420726573756c743d223078223b20666f7220286c657420693d36343b2069203e20303b202d2d692920726573756c74202b3d63686172735b4d6174682e666c6f6f72284d6174682e72616e646f6d2829202a2063686172732e6c656e677468295d3b2072657475726e20726573756c743b7d636c6173732052616e646f6d7b736565643b20646563696d616c733b20636f6e7374727563746f7228686173682c20646563696d616c733d33297b746869732e736565643d7061727365496e7428686173682e736c69636528302c203136292c203136293b20746869732e646563696d616c733d646563696d616c733b7d72616e646f6d5f64656328297b746869732e73656564205e3d746869732e73656564203c3c2031333b20746869732e73656564205e3d746869732e73656564203e3e2031373b20746869732e73656564205e3d746869732e73656564203c3c20353b2072657475726e2028202828746869732e73656564203c2030203f207e746869732e73656564202b2031203a20746869732e73656564292025203130202a2a20746869732e646563696d616c7329202f203130202a2a20746869732e646563696d616c7320293b7d72616e646f6d5f6265747765656e28612c2062297b72657475726e2061202b202862202d206129202a20746869732e72616e646f6d5f64656328293b7d72616e646f6d5f696e7428612c2062297b72657475726e204d6174682e666c6f6f7228746869732e72616e646f6d5f6265747765656e28612c2062202b203129293b7d72616e646f6d5f63686f6963652878297b72657475726e20785b4d6174682e666c6f6f7228746869732e72616e646f6d5f6265747765656e28302c20782e6c656e677468202a20302e393929295d3b7d7d3c2f7363726970743e203c7363726970743e2828293d3e7b2275736520737472696374223b20636f6e737420653d4d6174682e706f7728322c202d3332292c20743d33323535372c206f3d31393630352c206e3d6e65772055696e74313641727261792834292c20723d6e6577204461746156696577286e2e627566666572292c20613d28293d3e7b636f6e737420723d6e5b305d2c20613d6e5b315d2c20633d6e5b325d2c20693d6e5b335d2c20733d30207c203333313033202b2074202a20722c20753d30207c203633333335202b2074202a2061202b20286f202a2072202b202873203e3e3e20313629292c20763d30207c203331363134202b2074202a2063202b206f202a2061202b20283632353039202a2072202b202875203e3e3e20313629293b206e5b305d3d732c206e5b315d3d752c206e5b325d3d762c206e5b335d3d35313235202b2074202a2069202b20286f202a2063202b203632353039202a206129202b20283232363039202a2072202b202876203e3e3e20313629293b20636f6e737420663d2869203c3c20323129202b20282869203e3e2032205e206329203c3c203529202b20282863203e3e2032205e206129203e3e203131293b2072657475726e2065202a20282866203e3e3e202869203e3e20313129207c2066203c3c202833312026202d2869203e3e203131292929203e3e3e2030297d2c20633d28652c20743d30293d3e7b636f6e7374206f3d31362c206e3d36353533352c20723d3235353b20666f72202876617220612c20633d313534303438333437372c20693d652e6c656e6774682c20733d74205e20692c20753d303b2034203c3d693b29613d2828613d655b755d20262072207c2028655b2b2b755d2026207229203c3c2038207c2028655b2b2b755d2026207229203c3c203136207c2028655b2b2b755d2026207229203c3c203234292026206e29202a2063202b2028282861203e3e3e206f29202a20632026206e29203c3c206f292c20733d28732026206e29202a2063202b2028282873203e3e3e206f29202a20632026206e29203c3c206f29205e2028613d282861205e3d61203e3e3e203234292026206e29202a2063202b2028282861203e3e3e206f29202a20632026206e29203c3c206f29292c2069202d3d342c202b2b753b20737769746368202869297b6361736520333a2073205e3d28655b75202b20325d2026207229203c3c206f3b206361736520323a2073205e3d28655b75202b20315d2026207229203c3c20383b206361736520313a20733d282873205e3d655b755d20262072292026206e29202a2063202b2028282873203e3e3e206f29202a20632026206e29203c3c206f297d72657475726e20733d282873205e3d73203e3e3e203133292026206e29202a2063202b2028282873203e3e3e20313629202a20632026206e29203c3c203136292c202873205e3d73203e3e3e20313529203e3e3e20307d2c20693d28653d2e35293d3e20612829203c2065203f2031203a20303b20636f6e737420733d28652c20742c206f293d3e7b636f6e7374206e3d652e6372656174655368616465722874293b2072657475726e20652e736861646572536f75726365286e2c206f292c20652e636f6d70696c65536861646572286e292c20652e676574536861646572506172616d65746572286e2c20652e434f4d50494c455f53544154555329203f206e203a20766f696420652e64656c657465536861646572286e297d3b2076617220753d28652c20742c206f293d3e206173796e63206e3d3e7b636f6e737420723d6e2e676574436f6e746578742822776562676c22292c20613d6e2e77696474682c20633d6e2e6865696768743b20722e76696577706f727428302c20302c20612c2063293b20636f6e737420693d2828652c20742c206f293d3e7b636f6e7374206e3d652e63726561746550726f6772616d28293b2072657475726e20652e617474616368536861646572286e2c2074292c20652e617474616368536861646572286e2c206f292c20652e6c696e6b50726f6772616d286e292c20652e67657450726f6772616d506172616d65746572286e2c20652e4c494e4b5f53544154555329203f206e203a20766f696420652e64656c65746550726f6772616d286e297d2928722c207328722c20722e5645525445585f5348414445522c2022617474726962757465207665633320706f736974696f6e3b22202b2065292c207328722c20722e465241474d454e545f5348414445522c207429292c20753d722e6765744174747269624c6f636174696f6e28692c2022706f736974696f6e22292c20763d722e63726561746542756666657228293b20722e62696e6442756666657228722e41525241595f4255464645522c2076292c20722e6275666665724461746128722e41525241595f4255464645522c206e657720466c6f617433324172726179285b2d312c202d312c202d312c20332c20332c202d315d292c20722e5354415449435f44524157292c20722e636c656172436f6c6f7228302c20302c20302c2030292c20722e636c65617228722e434f4c4f525f4255464645525f424954292c20722e75736550726f6772616d2869292c20722e656e61626c6556657274657841747472696241727261792875292c20722e62696e6442756666657228722e41525241595f4255464645522c2076292c20722e766572746578417474726962506f696e74657228752c20322c20722e464c4f41542c2021312c20302c2030292c205b5b227557222c20227632222c205b612c20635d5d2c202e2e2e6f5d2e6d61702828285b652c20742c206f5d293d3e205b742c206f2c20722e676574556e69666f726d4c6f636174696f6e28692c2065295d29292e6d61702828653d3e7b2828652c205b742c206f2c206e5d293d3e7b2262223d3d3d74203f20652e756e69666f726d3169286e2c2021303d3d3d6f203f2031203a203029203a202269223d3d3d74203f20652e756e69666f726d3169286e2c206f29203a202266223d3d3d74203f20652e756e69666f726d3166286e2c206f29203a2028227632223d3d3d74207c7c20227633223d3d3d74207c7c20227634223d3d3d742920262620652e756e69666f726d3266286e2c202e2e2e6f297d2928722c2065297d29292c20722e6472617741727261797328722e545249414e474c45532c20302c2033297d3b20636f6e737420763d5b32202f20332c20312c20312e352c20312e362c203136202f20392c2039202f2031362c202e352c2039202f2031392c2039202f2031392e352c202e34355d2c20663d22756e646566696e65642220213d747970656f66206f7074696f6e73202626206f7074696f6e732c206c3d662e68617368207c7c202828293d3e7b6c657420653d223078223b20666f7220286c657420743d36343b2030203c20743b202d2d742965202b3d2230313233343536373839616263646566225b7e7e283136202a204d6174682e72616e646f6d2829295d3b2072657475726e20657d2928293b20286173796e632028293d3e7b76617220653d4d6174682e6d696e2c20743d4d6174682e6d61783b20636f6e7374206f3d77696e646f772c206e3d646f63756d656e742c20733d28293d3e20706572666f726d616e63652e6e6f7728292c206d3d6e2e626f64792e617070656e644368696c64286e2e637265617465456c656d656e74282263616e7661732229292c20703d6e2e626f64792e617070656e644368696c64286e2e637265617465456c656d656e74282263616e7661732229293b206f2e746572726f69723d7b7d3b206c657420642c20782c20622c20683d765b305d2c20673d302c20793d302c20773d312c20413d21312c20523d702e676574436f6e746578742822326422293b20636f6e737420453d6173796e6320287b6578706f7274696e673a206e3d21312c206c6f673a20413d21302c20697353686966743a20543d21317d3d7b7d293d3e7b76617220433d4d6174682e737172743b20636f6e7374204c3d7328293b20643d6f2e696e6e657257696474682c20783d6f2e696e6e65724865696768743b20636f6e737420463d683d3d3d765b305d207c7c20683d3d3d765b325d203f2032346536203a2033333137373630303b206c657420533d7e7e432846202a2068292c20423d7e7e432846202f2068293b20636f6e737420553d742842202d20383139322c203029202f20423b2053202a3d31202d20552c2042202a3d31202d20552c2064202f2078203e3d68203f202878202d3d7820252032302c20643d7e7e2878202a20682929203a202864202d3d6420252032302c20783d7e7e2864202f206829292c20623d32202a2028662e706978656c44656e73697479207c7c206f2e646576696365506978656c526174696f292c206d2e77696474683d532c206d2e6865696768743d422c20702e77696474683d652864202a20622c2053292c20702e6865696768743d652878202a20622c2042292c20702e7374796c652e77696474683d60247b647d7078602c20702e7374796c652e6865696768743d60247b787d7078602c206d2e7374796c652e706f736974696f6e3d226162736f6c757465222c206d2e7374796c652e6c6566743d2d53202b20227078222c206d2e7374796c652e746f703d2d42202b20227078223b20636f6e737420443d617761697420286173796e632028652c20742c7b70616e3a206f2c20626f726465723a206e2c206c6f673a20737d293d3e7b636f6e737420753d743b207320262620636f6e736f6c652e6c6f6728602d2d2d5c6e486173683a5c6e247b757d60292c2028653d3e7b636f6e737420743d7e7e2828652e6c656e677468202d203229202f2032292c206f3d5b5d3b20666f7220286c6574206e3d303b206e203c20743b206e2b2b297b636f6e737420743d32202b2032202a206e3b206f2e70757368287061727365496e7428652e736c69636528742c2074202b2032292c20313629297d636f6e7374206e3d63286f2c2031363930333832393235292c20613d63286f2c203732393730343730293b20722e73657455696e74333228302c206e292c20722e73657455696e74333228342c2061297d292875293b20636f6e737420763d5b5b227553222c20227632222c205b6128292c206128295d5d2c205b22755a222c202266222c206128295d2c205b227554222c202266222c206128295d2c205b227541222c202266222c206128295d2c205b22754d222c202266222c206128295d2c205b227543222c202266222c206128295d2c205b227552222c202266222c206128295d2c205b227547222c202266222c206128295d2c205b227542222c202266222c206128295d2c205b227531222c202266222c2069282e3034292c202243686172636f616c225d2c205b227532222c202266222c2069282e3034292c202247726964225d2c205b227533222c202266222c2069282e3032292c20224c697175696679225d2c205b227534222c202266222c2069282e3136292c2022466c6970225d2c205b227535222c202266222c2069282e3132292c202244697363225d2c205b227536222c202266222c2069282e3038292c202257617679225d2c205b227537222c202266222c2069282e3132292c202243686f707079225d2c205b227538222c202266222c2069282e3034292c202254696e746564225d2c205b227539222c202266222c2069282e3032292c202253706972616c225d2c205b22753130222c202266222c2069282e3032292c20225265647368696674225d2c205b22753131222c202266222c2069282e3032292c20224d6f6f6e6c6974225d2c205b22753132222c202266222c2069282e3136292c2022427269676874225d2c205b227545222c202266222c2069282e3038292c20224578706c6f7261626c65225d2c205b22754c222c20227632222c206f5d2c205b22754f222c202266222c206e5d5d3b20666f7220286c657420653d303b203133203e20653b20652b2b297b636f6e737420743d765b39202b20655d3b2077696e646f772e4d45544144415441202626202877696e646f772e4d455441444154415b745b335d5d3d30203c20745b325d203f202259657322203a20224e6f22292c2030203c20745b325d20262620745b335d202626207320262620636f6e736f6c652e6c6f67286054726169743a20247b745b335d7d60297d696620282266756e6374696f6e223d3d747970656f66206f6e4d65746164617461202626206f6e4d6574616461746128292c20762e66696e642828653d3e20227545223d3d3d655b305d29295b325d297b636f6e7374205b652c20745d3d762e66696e642828653d3e2022754c223d3d3d655b305d29295b325d3b20636f6e736f6c652e6c6f6728224c6f636174696f6e3a222c20225b22202b2065202b20222c2022202b2074202b20225d22297d72657475726e206173796e63206f3d3e7b636f6e7374206e3d6528225c6e76617279696e672076656332207655763b5c6e766f6964206d61696e28297b676c5f506f736974696f6e3d7665633428706f736974696f6e2c20312e30293b207655763d706f736974696f6e2e78793b7d5c6e222c20225c6e707265636973696f6e20686967687020666c6f61743b5c6e76617279696e672076656332207655763b5c6e756e69666f726d20766563322075572c2075532c20754c3b5c6e756e69666f726d20666c6f617420755a2c2075542c2075412c20754d2c2075432c2075522c2075472c2075422c20754f2c2075312c2075322c2075332c2075342c2075352c2075362c2075372c2075382c2075392c207531302c207531312c207531322c2075453b5c6e5c6e23646566696e6520504920332e313431353932363533355c6e23646566696e65204220302e3038355c6e23646566696e65204f20375c6e5c6e2f2f2049616e204d634577616e202d20417368696d6120417274732e20436f7079726967687420284329203230313120417368696d6120417274732e20416c6c207269676874732072657365727665642e204d4954204c6963656e73652e5c6e76656333206d6f6432383928766563332078297b72657475726e20782d666c6f6f7228782a28312e302f3238392e3029292a3238392e303b7d76656332206d6f6432383928766563322078297b72657475726e20782d666c6f6f7228782a28312e302f3238392e3029292a3238392e303b7d76656333207065726d75746528766563332078297b72657475726e206d6f64323839282828782a33342e30292b312e30292a78293b7d666c6f6174206e6f69736528766563322076297b636f6e7374207665633420433d7665633428302e3231313332343836353430353138372c302e3336363032353430333738343433392c2d302e3537373335303236393138393632362c302e303234333930323433393032343339293b7665633220693d666c6f6f7228762b646f7428762c432e797929293b766563322078303d762d692b646f7428692c432e7878293b766563322069313b69313d2878302e783e78302e79293f7665633228312e302c302e30293a7665633228302e302c312e30293b76656334207831323d78302e787978792b432e78787a7a3b7831322e78792d3d69313b693d6d6f643238392869293b7665633320703d7065726d757465287065726d75746528692e792b7665633328302e302c69312e792c312e3029292b692e782b7665633328302e302c69312e782c312e3029293b76656333206d3d6d617828302e352d7665633328646f742878302c7830292c646f74287831322e78792c7831322e7879292c646f74287831322e7a772c7831322e7a7729292c302e30293b6d3d6d2a6d3b6d3d6d2a6d3b7665633320783d322e302a667261637428702a432e777777292d312e303b7665633320683d6162732878292d302e353b76656333206f783d666c6f6f7228782b302e35293b766563332061303d782d6f783b6d202a3d312e37393238343239313430303135392d302e38353337333437323039353331342a2861302a61302b682a68293b7665633320673b672e783d61302e782a78302e782b682e782a78302e793b672e797a3d61302e797a2a7831322e787a2b682e797a2a7831322e79773b72657475726e203133302e302a646f74286d2c67293b7d666c6f61742072616e64287665633220636f297b72657475726e2066726163742873696e28646f7428636f2e78792c766563322831322e393839382c37382e3233332929292a34333735382e35343533293b7d5c6e5c6e666c6f61742066626d28696e2076656332207576297b666c6f617420763d302e302c20613d302e3632202b20302e3332202a2075413b206d61743220726f743d6d61743228636f7328302e35292c2073696e28302e35292c2d73696e28302e35292c20636f7328302e3529293b20666f722028696e7420693d303b2069203c204f3b202b2b69297b76202b3d61202a206e6f697365287576202b20287553202a2031302e30202d20352e3029293b2075763d726f74202a207576202a202d322e303b2061202a3d302e34393531202b20302e3037202a20706f7728754d2c20322e35293b7d72657475726e20763b7d5c6e666c6f61742066726d28696e207665633220702c20666c6f61742073297b72657475726e2066626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702a73292929292929292929293b7d5c6e6d6174322072326428666c6f6174207468657461297b72657475726e206d61743228636f73287468657461292c2073696e287468657461292c2d73696e287468657461292c20636f7328746865746129293b7d5c6e5c6e766f6964206d61696e28297b5c6e666c6f61742061723d75572e78202f2075572e793b5c6e766563322075763d7655763b5c6e666c6f61742075764f3d312e30202d20312e30202a206d696e287535202b2075392c20312e30293b5c6e7665633220706f733d287576202b2075764f29202a202828302e35202b20302e37202a20755a29202a2028312e30202d20753329202b2028302e3235202a2075332929202a206d61782861722c20312e30293b5c6e706f73202b3d754c202a20302e3235202a2075453b5c6e706f732e79202f3d61723b5c6e6d61743220723d723264285049202a20282d302e3031202b20302e303235202a20287554202a20322e30202d20312e302929293b5c6e706f73202a3d723b5c6e6d6174322072463d723264285049202a20302e35202a207534293b5c6e706f73202a3d72463b5c6e6d6174322072533d723264287539202a205049202a206672616374286c656e67746828706f73202a2033302e302929293b5c6e706f73202a3d72533b5c6e6d6174322072443d723264287535202a205049202a20302e3231202a20666c6f6f72286c656e67746828706f73202a20372e302929293b5c6e706f73202a3d72443b5c6e6d6174322072573d723264287536202a205049202a202d302e3036293b5c6e706f73202a3d72573b5c6e706f73202b3d7536202a207665633228706f732e782c202873696e28706f732e79202a2031352e30202a2028312e30202d20302e32202a2075322929202a20302e35202b20302e3529202a20302e3131202a2028312e30202d20302e33202a20753229293b5c6e706f73202b3d7537202a20766563322873696e28706f732e79202a2031352e30202a2028312e30202d20302e33202a2075322929202a20302e3038202a2028312e30202d20302e32202a207532292c20706f732e78293b5c6e7665633220753275763d7576202a2028312e30202b2042202a2028312e30202b204229293b5c6e666c6f6174207532733d322e30202b20286d61782861722c20312e3029202d20312e30293b5c6e706f73202b3d7532202a20766563322866726163742828312e30202d20753275762e7829202a2028753273202d20302e35202a2075332929202a20302e30392c2066726163742828312e30202d20753275762e79202f20617229202a2028753273202d20302e35202a2075332929202a20302e3039202f206172293b5c6e7665633320623d766563332835312e302f3235352e302c35332e302f3235352e302c3131382e302f3235352e30293b5c6e7665633320626173653d7665633328312e30202a2075522c20302e34202a2075472c20302e32202a207542293b5c6e626173653d6d697828626173652c20622c20753131293b5c6e7665633320633d626173653b5c6e63202b3d2820302e35202b20302e35202a2075432029202a2066726d2820706f732c20755a20293b5c6e63202b3d322e35202a20766563332820302e362c20302e332c20302e31352029202a2066726d2820706f73202a20302e31372c20755a202a20302e383820293b5c6e63202b3d322e35202a207665633328207552202a20302e382c207547202a20302e342c207542202a20302e322029202a2066726d2820706f73202a20302e36362c20755a202a20312e393320293b5c6e63202a3d302e373b5c6e63202a3d312e30202d20302e3939202a20753131202b2062202a20312e39202a207531313b5c6e63202b3d302e32202a207531313b5c6e666c6f61742062543d2842202a20754f29202f206d6178286172202b20302e332c20312e30293b5c6e666c6f61742062463d302e303030353b5c6e766563332062723d6d697828626173652c207665633328312e30292c206d696e28302e32352c20312e30202d2075313129293b5c6e62723d6d69782862722c207665633328302e3034372c20302e3034372c20302e303433292c207531293b5c6e633d6d697828632c2062722c20736d6f6f7468737465702875762e78202d206246202a20302e352c2075762e78202b206246202a20302e352c202d312e30202b20625429293b5c6e633d6d69782862722c20632c20736d6f6f7468737465702875762e78202d206246202a20302e352c2075762e78202b206246202a20302e352c20312e30202d20625429293b5c6e633d6d697828632c2062722c20736d6f6f7468737465702875762e79202d206246202a20302e352c2075762e79202b206246202a20302e352c202d312e30202b206254202a20617229293b5c6e633d6d69782862722c20632c20736d6f6f7468737465702875762e79202d206246202a20302e352c2075762e79202b206246202a20302e352c20312e30202d206254202a20617229293b5c6e632e72202a3d312e30202b20753130202a20312e35202a202875762e78202d20332e30293b5c6e632e67202a3d312e30202d20753130202a20302e343b5c6e633d6d697828632c206d696e286d617828632e727272202a20632e676767202f20632e6262622c20302e31292c20312e30292c20753120293b5c6e633d6d697828632c206d69782862722c2063202a20322e30202b2063202a20342e30202a2075312c207374657028632e72202b20632e67202b20632e622c20302e363729292c207538293b5c6e63202b3d28302e35202d20302e3333202a207531202d20302e33202a2075313129202a207531323b5c6e676c5f46726167436f6c6f723d7665633428632c20312e30293b5c6e7d5c6e222c2076293b206177616974206e286f2c2074297d7d2928752c206c2c7b70616e3a205b672c20795d2c20626f726465723a20772c206c6f673a20417d293b2061776169742044286d293b20636f6e7374204d3d64202a2062203e2053203f2062202a2053202f202864202a206229203a20623b20522e7363616c65284d2c204d292c20522e64726177496d616765286d2c20302c20302c20642c2078292c206e203f2028636f6e736f6c652e6c6f6728672c2079292c20617761697420286173796e632028652c20742c206f3d2131293d3e7b636f6e7374206e3d646f63756d656e742c20723d77696e646f773f2e706172656e743b20636f6e736f6c652e6c6f672822446f776e6c6f6164696e6720696d6167652e2e2e22293b20636f6e737420613d28653d3e7b6c657420743d77696e646f772e61746f6228652e73706c697428222c22295b315d292c206f3d6e657720417272617942756666657228742e6c656e677468292c206e3d6e65772055696e74384172726179286f293b20666f7220286c657420653d303b2065203c20742e6c656e6774683b20652b2b296e5b655d3d742e63686172436f646541742865293b206c657420723d6e6577204461746156696577286f293b2072657475726e206e657720426c6f62285b725d2c7b747970653a20652e73706c697428222c22295b305d2e73706c697428223a22295b315d2e73706c697428223b22295b305d7d297d292865292c20633d723f2e55524c2e6372656174654f626a65637455524c2861293b20696620286f2920723f2e6f70656e2863293b20656c73657b636f6e737420653d6e2e626f64792e617070656e644368696c64286e2e637265617465456c656d656e742822612229293b20652e687265663d632c20652e646f776e6c6f61643d742c20652e636c69636b28292c206e2e626f64792e72656d6f76654368696c642865297d723f2e55524c2e7265766f6b654f626a65637455524c2863297d29286d2e746f4461746155524c2822696d6167652f6a70656722292c2060746572726f69722d247b6c7d247b67207c7c2079203f20602d5b247b677d2c247b797d5d60203a2022227d2e6a7067602c2054292c20636f6e736f6c652e6c6f6728604578706f72742074696d653a20247b7e7e28732829202d204c297d6d735c6e2d2d2d60292c2045287b6c6f673a2021317d2929203a204120262620636f6e736f6c652e6c6f67286050726f636573732074696d653a20247b7e7e28732829202d204c297d6d735c6e2d2d2d60292c202266756e6374696f6e223d3d747970656f66206f6e446f6e65202626206f6e446f6e6528297d2c20543d6f3d3e7b683d652874286f2c202e3435292c20332e3536292c20636f6e736f6c652e6c6f672860417370656374207365743a20247b687d60292c2045287b6c6f673a2021317d297d3b206f2e746572726f69722e7365744173706563743d543b20636f6e737420433d28653d302c20743d30293d3e7b67202b3d2e35202a20652c2079202b3d2e35202a20742c202865207c7c2074292026262045287b6c6f673a2021317d297d3b206f2e746572726f69722e676f546f3d28653d302c20743d30293d3e7b673d652c20793d742c2045287b6c6f673a2021317d297d3b20636f6e7374204c3d28293d3e7b773d30203c2077203f2030203a20312c2045287b6c6f673a2021317d297d3b206f2e746572726f69722e746f67676c65426f726465723d4c3b20636f6e737420463d653d3e7b45287b6578706f7274696e673a2021302c20697353686966743a20657d292c20413d21317d3b206f2e746572726f69722e736176653d462c206f2e6164644576656e744c697374656e65722822726573697a65222c202828293d3e2045287b6c6f673a2021317d2929292c206f2e6164644576656e744c697374656e657228226b6579646f776e222c2028653d3e7b28652e6374726c4b6579207c7c20652e6d6574614b657929202626202273223d3d3d652e6b65792e746f4c6f7765724361736528292026262028652e70726576656e7444656661756c7428292c2021412026262028413d21302c204628652e73686966744b65792929297d29292c206f2e6164644576656e744c697374656e657228226b65797570222c2028653d3e7b636f6e737420743d7061727365496e7428652e6b65792c203130293b2073776974636820282169734e614e2874292026262074203c3d762e6c656e677468202626205428765b303d3d3d74203f2039203a2074202d20315d207c7c20765b305d292c20652e6b6579297b6361736520224172726f774c656674223a2043282d312c2030293b20627265616b3b206361736520224172726f775269676874223a204328312c2030293b20627265616b3b206361736520224172726f775570223a204328302c2031293b20627265616b3b206361736520224172726f77446f776e223a204328302c202d31293b20627265616b3b2063617365202262223a2063617365202242223a204c28297d7d29292c20702e6164644576656e744c697374656e65722822636c69636b222c2028653d3e7b636f6e73747b6162733a20742c207369676e3a206f7d3d4d6174682c206e3d652e6f666673657458202f2064202a2032202d20312c20723d652e6f666673657459202f2078202a2032202d20313b2043282e35203c2074286e29203f206f286e29203a20302c202e35203c2074287229203f206f282d7229203a2030297d29292c204528297d2928297d2928293b3c2f7363726970743e3c2f626f64793e0000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Terroir by GEN.ART
Arg [1] : symbol_ (string): TRO
Arg [2] : uri_ (string): https://api.gen.art/public/attributes/
Arg [3] : script_ (string): <head> <meta name="viewport" content="width=device-width,shrink-to-fit=0,user-scalable=no,minimum-scale=1,maximum-scale=1"> <title>Terroir - Kelly Milligan</title> <style>html, body{width: 100%; height: 100%; margin: 0;}body{display: flex; justify-content: center; align-items: center;}</style></head><body> <script>window.METADATA={}; function onMetadata(){window.top?.postMessage( `genart:metadata:${JSON.stringify(window.METADATA)}`, "*" );}function onDone(){window.top?.postMessage(`genart:done`, "*"); window.onImageRendered && window.onImageRendered();}function random_hash(){let chars="0123456789abcdef"; let result="0x"; for (let i=64; i > 0; --i) result +=chars[Math.floor(Math.random() * chars.length)]; return result;}class Random{seed; decimals; constructor(hash, decimals=3){this.seed=parseInt(hash.slice(0, 16), 16); this.decimals=decimals;}random_dec(){this.seed ^=this.seed << 13; this.seed ^=this.seed >> 17; this.seed ^=this.seed << 5; return ( ((this.seed < 0 ? ~this.seed + 1 : this.seed) % 10 ** this.decimals) / 10 ** this.decimals );}random_between(a, b){return a + (b - a) * this.random_dec();}random_int(a, b){return Math.floor(this.random_between(a, b + 1));}random_choice(x){return x[Math.floor(this.random_between(0, x.length * 0.99))];}}</script> <script>(()=>{"use strict"; const e=Math.pow(2, -32), t=32557, o=19605, n=new Uint16Array(4), r=new DataView(n.buffer), a=()=>{const r=n[0], a=n[1], c=n[2], i=n[3], s=0 | 33103 + t * r, u=0 | 63335 + t * a + (o * r + (s >>> 16)), v=0 | 31614 + t * c + o * a + (62509 * r + (u >>> 16)); n[0]=s, n[1]=u, n[2]=v, n[3]=5125 + t * i + (o * c + 62509 * a) + (22609 * r + (v >>> 16)); const f=(i << 21) + ((i >> 2 ^ c) << 5) + ((c >> 2 ^ a) >> 11); return e * ((f >>> (i >> 11) | f << (31 & -(i >> 11))) >>> 0)}, c=(e, t=0)=>{const o=16, n=65535, r=255; for (var a, c=1540483477, i=e.length, s=t ^ i, u=0; 4 <=i;)a=((a=e[u] & r | (e[++u] & r) << 8 | (e[++u] & r) << 16 | (e[++u] & r) << 24) & n) * c + (((a >>> o) * c & n) << o), s=(s & n) * c + (((s >>> o) * c & n) << o) ^ (a=((a ^=a >>> 24) & n) * c + (((a >>> o) * c & n) << o)), i -=4, ++u; switch (i){case 3: s ^=(e[u + 2] & r) << o; case 2: s ^=(e[u + 1] & r) << 8; case 1: s=((s ^=e[u] & r) & n) * c + (((s >>> o) * c & n) << o)}return s=((s ^=s >>> 13) & n) * c + (((s >>> 16) * c & n) << 16), (s ^=s >>> 15) >>> 0}, i=(e=.5)=> a() < e ? 1 : 0; const s=(e, t, o)=>{const n=e.createShader(t); return e.shaderSource(n, o), e.compileShader(n), e.getShaderParameter(n, e.COMPILE_STATUS) ? n : void e.deleteShader(n)}; var u=(e, t, o)=> async n=>{const r=n.getContext("webgl"), a=n.width, c=n.height; r.viewport(0, 0, a, c); const i=((e, t, o)=>{const n=e.createProgram(); return e.attachShader(n, t), e.attachShader(n, o), e.linkProgram(n), e.getProgramParameter(n, e.LINK_STATUS) ? n : void e.deleteProgram(n)})(r, s(r, r.VERTEX_SHADER, "attribute vec3 position;" + e), s(r, r.FRAGMENT_SHADER, t)), u=r.getAttribLocation(i, "position"), v=r.createBuffer(); r.bindBuffer(r.ARRAY_BUFFER, v), r.bufferData(r.ARRAY_BUFFER, new Float32Array([-1, -1, -1, 3, 3, -1]), r.STATIC_DRAW), r.clearColor(0, 0, 0, 0), r.clear(r.COLOR_BUFFER_BIT), r.useProgram(i), r.enableVertexAttribArray(u), r.bindBuffer(r.ARRAY_BUFFER, v), r.vertexAttribPointer(u, 2, r.FLOAT, !1, 0, 0), [["uW", "v2", [a, c]], ...o].map((([e, t, o])=> [t, o, r.getUniformLocation(i, e)])).map((e=>{((e, [t, o, n])=>{"b"===t ? e.uniform1i(n, !0===o ? 1 : 0) : "i"===t ? e.uniform1i(n, o) : "f"===t ? e.uniform1f(n, o) : ("v2"===t || "v3"===t || "v4"===t) && e.uniform2f(n, ...o)})(r, e)})), r.drawArrays(r.TRIANGLES, 0, 3)}; const v=[2 / 3, 1, 1.5, 1.6, 16 / 9, 9 / 16, .5, 9 / 19, 9 / 19.5, .45], f="undefined" !=typeof options && options, l=f.hash || (()=>{let e="0x"; for (let t=64; 0 < t; --t)e +="0123456789abcdef"[~~(16 * Math.random())]; return e})(); (async ()=>{var e=Math.min, t=Math.max; const o=window, n=document, s=()=> performance.now(), m=n.body.appendChild(n.createElement("canvas")), p=n.body.appendChild(n.createElement("canvas")); o.terroir={}; let d, x, b, h=v[0], g=0, y=0, w=1, A=!1, R=p.getContext("2d"); const E=async ({exporting: n=!1, log: A=!0, isShift: T=!1}={})=>{var C=Math.sqrt; const L=s(); d=o.innerWidth, x=o.innerHeight; const F=h===v[0] || h===v[2] ? 24e6 : 33177600; let S=~~C(F * h), B=~~C(F / h); const U=t(B - 8192, 0) / B; S *=1 - U, B *=1 - U, d / x >=h ? (x -=x % 20, d=~~(x * h)) : (d -=d % 20, x=~~(d / h)), b=2 * (f.pixelDensity || o.devicePixelRatio), m.width=S, m.height=B, p.width=e(d * b, S), p.height=e(x * b, B), p.style.width=`${d}px`, p.style.height=`${x}px`, m.style.position="absolute", m.style.left=-S + "px", m.style.top=-B + "px"; const D=await (async (e, t,{pan: o, border: n, log: s})=>{const u=t; s && console.log(`---\nHash:\n${u}`), (e=>{const t=~~((e.length - 2) / 2), o=[]; for (let n=0; n < t; n++){const t=2 + 2 * n; o.push(parseInt(e.slice(t, t + 2), 16))}const n=c(o, 1690382925), a=c(o, 72970470); r.setUint32(0, n), r.setUint32(4, a)})(u); const v=[["uS", "v2", [a(), a()]], ["uZ", "f", a()], ["uT", "f", a()], ["uA", "f", a()], ["uM", "f", a()], ["uC", "f", a()], ["uR", "f", a()], ["uG", "f", a()], ["uB", "f", a()], ["u1", "f", i(.04), "Charcoal"], ["u2", "f", i(.04), "Grid"], ["u3", "f", i(.02), "Liquify"], ["u4", "f", i(.16), "Flip"], ["u5", "f", i(.12), "Disc"], ["u6", "f", i(.08), "Wavy"], ["u7", "f", i(.12), "Choppy"], ["u8", "f", i(.04), "Tinted"], ["u9", "f", i(.02), "Spiral"], ["u10", "f", i(.02), "Redshift"], ["u11", "f", i(.02), "Moonlit"], ["u12", "f", i(.16), "Bright"], ["uE", "f", i(.08), "Explorable"], ["uL", "v2", o], ["uO", "f", n]]; for (let e=0; 13 > e; e++){const t=v[9 + e]; window.METADATA && (window.METADATA[t[3]]=0 < t[2] ? "Yes" : "No"), 0 < t[2] && t[3] && s && console.log(`Trait: ${t[3]}`)}if ("function"==typeof onMetadata && onMetadata(), v.find((e=> "uE"===e[0]))[2]){const [e, t]=v.find((e=> "uL"===e[0]))[2]; console.log("Location:", "[" + e + ", " + t + "]")}return async o=>{const n=e("\nvarying vec2 vUv;\nvoid main(){gl_Position=vec4(position, 1.0); vUv=position.xy;}\n", "\nprecision highp float;\nvarying vec2 vUv;\nuniform vec2 uW, uS, uL;\nuniform float uZ, uT, uA, uM, uC, uR, uG, uB, uO, u1, u2, u3, u4, u5, u6, u7, u8, u9, u10, u11, u12, uE;\n\n#define PI 3.1415926535\n#define B 0.085\n#define O 7\n\n// Ian McEwan - Ashima Arts. Copyright (C) 2011 Ashima Arts. All rights reserved. MIT License.\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}vec2 mod289(vec2 x){return x-floor(x*(1.0/289.0))*289.0;}vec3 permute(vec3 x){return mod289(((x*34.0)+1.0)*x);}float noise(vec2 v){const vec4 C=vec4(0.211324865405187,0.366025403784439,-0.577350269189626,0.024390243902439);vec2 i=floor(v+dot(v,C.yy));vec2 x0=v-i+dot(i,C.xx);vec2 i1;i1=(x0.x>x0.y)?vec2(1.0,0.0):vec2(0.0,1.0);vec4 x12=x0.xyxy+C.xxzz;x12.xy-=i1;i=mod289(i);vec3 p=permute(permute(i.y+vec3(0.0,i1.y,1.0))+i.x+vec3(0.0,i1.x,1.0));vec3 m=max(0.5-vec3(dot(x0,x0),dot(x12.xy,x12.xy),dot(x12.zw,x12.zw)),0.0);m=m*m;m=m*m;vec3 x=2.0*fract(p*C.www)-1.0;vec3 h=abs(x)-0.5;vec3 ox=floor(x+0.5);vec3 a0=x-ox;m *=1.79284291400159-0.85373472095314*(a0*a0+h*h);vec3 g;g.x=a0.x*x0.x+h.x*x0.y;g.yz=a0.yz*x12.xz+h.yz*x12.yw;return 130.0*dot(m,g);}float rand(vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}\n\nfloat fbm(in vec2 uv){float v=0.0, a=0.62 + 0.32 * uA; mat2 rot=mat2(cos(0.5), sin(0.5),-sin(0.5), cos(0.5)); for (int i=0; i < O; ++i){v +=a * noise(uv + (uS * 10.0 - 5.0)); uv=rot * uv * -2.0; a *=0.4951 + 0.07 * pow(uM, 2.5);}return v;}\nfloat frm(in vec2 p, float s){return fbm(p+fbm(p+fbm(p+fbm(p+fbm(p+fbm(p+fbm(p+fbm(p+fbm(p+fbm(p*s))))))))));}\nmat2 r2d(float theta){return mat2(cos(theta), sin(theta),-sin(theta), cos(theta));}\n\nvoid main(){\nfloat ar=uW.x / uW.y;\nvec2 uv=vUv;\nfloat uvO=1.0 - 1.0 * min(u5 + u9, 1.0);\nvec2 pos=(uv + uvO) * ((0.5 + 0.7 * uZ) * (1.0 - u3) + (0.25 * u3)) * max(ar, 1.0);\npos +=uL * 0.25 * uE;\npos.y /=ar;\nmat2 r=r2d(PI * (-0.01 + 0.025 * (uT * 2.0 - 1.0)));\npos *=r;\nmat2 rF=r2d(PI * 0.5 * u4);\npos *=rF;\nmat2 rS=r2d(u9 * PI * fract(length(pos * 30.0)));\npos *=rS;\nmat2 rD=r2d(u5 * PI * 0.21 * floor(length(pos * 7.0)));\npos *=rD;\nmat2 rW=r2d(u6 * PI * -0.06);\npos *=rW;\npos +=u6 * vec2(pos.x, (sin(pos.y * 15.0 * (1.0 - 0.2 * u2)) * 0.5 + 0.5) * 0.11 * (1.0 - 0.3 * u2));\npos +=u7 * vec2(sin(pos.y * 15.0 * (1.0 - 0.3 * u2)) * 0.08 * (1.0 - 0.2 * u2), pos.x);\nvec2 u2uv=uv * (1.0 + B * (1.0 + B));\nfloat u2s=2.0 + (max(ar, 1.0) - 1.0);\npos +=u2 * vec2(fract((1.0 - u2uv.x) * (u2s - 0.5 * u3)) * 0.09, fract((1.0 - u2uv.y / ar) * (u2s - 0.5 * u3)) * 0.09 / ar);\nvec3 b=vec3(51.0/255.0,53.0/255.0,118.0/255.0);\nvec3 base=vec3(1.0 * uR, 0.4 * uG, 0.2 * uB);\nbase=mix(base, b, u11);\nvec3 c=base;\nc +=( 0.5 + 0.5 * uC ) * frm( pos, uZ );\nc +=2.5 * vec3( 0.6, 0.3, 0.15 ) * frm( pos * 0.17, uZ * 0.88 );\nc +=2.5 * vec3( uR * 0.8, uG * 0.4, uB * 0.2 ) * frm( pos * 0.66, uZ * 1.93 );\nc *=0.7;\nc *=1.0 - 0.99 * u11 + b * 1.9 * u11;\nc +=0.2 * u11;\nfloat bT=(B * uO) / max(ar + 0.3, 1.0);\nfloat bF=0.0005;\nvec3 br=mix(base, vec3(1.0), min(0.25, 1.0 - u11));\nbr=mix(br, vec3(0.047, 0.047, 0.043), u1);\nc=mix(c, br, smoothstep(uv.x - bF * 0.5, uv.x + bF * 0.5, -1.0 + bT));\nc=mix(br, c, smoothstep(uv.x - bF * 0.5, uv.x + bF * 0.5, 1.0 - bT));\nc=mix(c, br, smoothstep(uv.y - bF * 0.5, uv.y + bF * 0.5, -1.0 + bT * ar));\nc=mix(br, c, smoothstep(uv.y - bF * 0.5, uv.y + bF * 0.5, 1.0 - bT * ar));\nc.r *=1.0 + u10 * 1.5 * (uv.x - 3.0);\nc.g *=1.0 - u10 * 0.4;\nc=mix(c, min(max(c.rrr * c.ggg / c.bbb, 0.1), 1.0), u1 );\nc=mix(c, mix(br, c * 2.0 + c * 4.0 * u1, step(c.r + c.g + c.b, 0.67)), u8);\nc +=(0.5 - 0.33 * u1 - 0.3 * u11) * u12;\ngl_FragColor=vec4(c, 1.0);\n}\n", v); await n(o, t)}})(u, l,{pan: [g, y], border: w, log: A}); await D(m); const M=d * b > S ? b * S / (d * b) : b; R.scale(M, M), R.drawImage(m, 0, 0, d, x), n ? (console.log(g, y), await (async (e, t, o=!1)=>{const n=document, r=window?.parent; console.log("Downloading image..."); const a=(e=>{let t=window.atob(e.split(",")[1]), o=new ArrayBuffer(t.length), n=new Uint8Array(o); for (let e=0; e < t.length; e++)n[e]=t.charCodeAt(e); let r=new DataView(o); return new Blob([r],{type: e.split(",")[0].split(":")[1].split(";")[0]})})(e), c=r?.URL.createObjectURL(a); if (o) r?.open(c); else{const e=n.body.appendChild(n.createElement("a")); e.href=c, e.download=t, e.click(), n.body.removeChild(e)}r?.URL.revokeObjectURL(c)})(m.toDataURL("image/jpeg"), `terroir-${l}${g || y ? `-[${g},${y}]` : ""}.jpg`, T), console.log(`Export time: ${~~(s() - L)}ms\n---`), E({log: !1})) : A && console.log(`Process time: ${~~(s() - L)}ms\n---`), "function"==typeof onDone && onDone()}, T=o=>{h=e(t(o, .45), 3.56), console.log(`Aspect set: ${h}`), E({log: !1})}; o.terroir.setAspect=T; const C=(e=0, t=0)=>{g +=.5 * e, y +=.5 * t, (e || t) && E({log: !1})}; o.terroir.goTo=(e=0, t=0)=>{g=e, y=t, E({log: !1})}; const L=()=>{w=0 < w ? 0 : 1, E({log: !1})}; o.terroir.toggleBorder=L; const F=e=>{E({exporting: !0, isShift: e}), A=!1}; o.terroir.save=F, o.addEventListener("resize", (()=> E({log: !1}))), o.addEventListener("keydown", (e=>{(e.ctrlKey || e.metaKey) && "s"===e.key.toLowerCase() && (e.preventDefault(), !A && (A=!0, F(e.shiftKey)))})), o.addEventListener("keyup", (e=>{const t=parseInt(e.key, 10); switch (!isNaN(t) && t <=v.length && T(v[0===t ? 9 : t - 1] || v[0]), e.key){case "ArrowLeft": C(-1, 0); break; case "ArrowRight": C(1, 0); break; case "ArrowUp": C(0, 1); break; case "ArrowDown": C(0, -1); break; case "b": case "B": L()}})), p.addEventListener("click", (e=>{const{abs: t, sign: o}=Math, n=e.offsetX / d * 2 - 1, r=e.offsetY / x * 2 - 1; C(.5 < t(n) ? o(n) : 0, .5 < t(r) ? o(-r) : 0)})), E()})()})();</script></body>
Arg [4] : collectionId_ (uint256): 30000
Arg [5] : standardSupply_ (uint8): 1
Arg [6] : goldSupply_ (uint8): 5
Arg [7] : mintPrice_ (uint256): 125000000000000000
Arg [8] : mintSupply_ (uint256): 650
Arg [9] : addresses (address[3]): 0xf09473B9e7D00F505f467B344f3907a948E38Da0,0xB42970B84C25aa3b1FD145fC41d2F301EC4BB9ad,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
388 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [4] : 0000000000000000000000000000000000000000000000000000000000007530
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 00000000000000000000000000000000000000000000000001bc16d674ec8000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000028a
Arg [9] : 000000000000000000000000f09473b9e7d00f505f467b344f3907a948e38da0
Arg [10] : 000000000000000000000000b42970b84c25aa3b1fd145fc41d2f301ec4bb9ad
Arg [11] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [13] : 546572726f69722062792047454e2e4152540000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [15] : 54524f0000000000000000000000000000000000000000000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000026
Arg [17] : 68747470733a2f2f6170692e67656e2e6172742f7075626c69632f6174747269
Arg [18] : 62757465732f0000000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000002df5
Arg [20] : 3c686561643e203c6d657461206e616d653d2276696577706f72742220636f6e
Arg [21] : 74656e743d2277696474683d6465766963652d77696474682c736872696e6b2d
Arg [22] : 746f2d6669743d302c757365722d7363616c61626c653d6e6f2c6d696e696d75
Arg [23] : 6d2d7363616c653d312c6d6178696d756d2d7363616c653d31223e203c746974
Arg [24] : 6c653e546572726f6972202d204b656c6c79204d696c6c6967616e3c2f746974
Arg [25] : 6c653e203c7374796c653e68746d6c2c20626f64797b77696474683a20313030
Arg [26] : 253b206865696768743a20313030253b206d617267696e3a20303b7d626f6479
Arg [27] : 7b646973706c61793a20666c65783b206a7573746966792d636f6e74656e743a
Arg [28] : 2063656e7465723b20616c69676e2d6974656d733a2063656e7465723b7d3c2f
Arg [29] : 7374796c653e3c2f686561643e3c626f64793e203c7363726970743e77696e64
Arg [30] : 6f772e4d455441444154413d7b7d3b2066756e6374696f6e206f6e4d65746164
Arg [31] : 61746128297b77696e646f772e746f703f2e706f73744d657373616765282060
Arg [32] : 67656e6172743a6d657461646174613a247b4a534f4e2e737472696e67696679
Arg [33] : 2877696e646f772e4d45544144415441297d602c20222a2220293b7d66756e63
Arg [34] : 74696f6e206f6e446f6e6528297b77696e646f772e746f703f2e706f73744d65
Arg [35] : 7373616765286067656e6172743a646f6e65602c20222a22293b2077696e646f
Arg [36] : 772e6f6e496d61676552656e64657265642026262077696e646f772e6f6e496d
Arg [37] : 61676552656e646572656428293b7d66756e6374696f6e2072616e646f6d5f68
Arg [38] : 61736828297b6c65742063686172733d22303132333435363738396162636465
Arg [39] : 66223b206c657420726573756c743d223078223b20666f7220286c657420693d
Arg [40] : 36343b2069203e20303b202d2d692920726573756c74202b3d63686172735b4d
Arg [41] : 6174682e666c6f6f72284d6174682e72616e646f6d2829202a2063686172732e
Arg [42] : 6c656e677468295d3b2072657475726e20726573756c743b7d636c6173732052
Arg [43] : 616e646f6d7b736565643b20646563696d616c733b20636f6e7374727563746f
Arg [44] : 7228686173682c20646563696d616c733d33297b746869732e736565643d7061
Arg [45] : 727365496e7428686173682e736c69636528302c203136292c203136293b2074
Arg [46] : 6869732e646563696d616c733d646563696d616c733b7d72616e646f6d5f6465
Arg [47] : 6328297b746869732e73656564205e3d746869732e73656564203c3c2031333b
Arg [48] : 20746869732e73656564205e3d746869732e73656564203e3e2031373b207468
Arg [49] : 69732e73656564205e3d746869732e73656564203c3c20353b2072657475726e
Arg [50] : 2028202828746869732e73656564203c2030203f207e746869732e7365656420
Arg [51] : 2b2031203a20746869732e73656564292025203130202a2a20746869732e6465
Arg [52] : 63696d616c7329202f203130202a2a20746869732e646563696d616c7320293b
Arg [53] : 7d72616e646f6d5f6265747765656e28612c2062297b72657475726e2061202b
Arg [54] : 202862202d206129202a20746869732e72616e646f6d5f64656328293b7d7261
Arg [55] : 6e646f6d5f696e7428612c2062297b72657475726e204d6174682e666c6f6f72
Arg [56] : 28746869732e72616e646f6d5f6265747765656e28612c2062202b203129293b
Arg [57] : 7d72616e646f6d5f63686f6963652878297b72657475726e20785b4d6174682e
Arg [58] : 666c6f6f7228746869732e72616e646f6d5f6265747765656e28302c20782e6c
Arg [59] : 656e677468202a20302e393929295d3b7d7d3c2f7363726970743e203c736372
Arg [60] : 6970743e2828293d3e7b2275736520737472696374223b20636f6e737420653d
Arg [61] : 4d6174682e706f7728322c202d3332292c20743d33323535372c206f3d313936
Arg [62] : 30352c206e3d6e65772055696e74313641727261792834292c20723d6e657720
Arg [63] : 4461746156696577286e2e627566666572292c20613d28293d3e7b636f6e7374
Arg [64] : 20723d6e5b305d2c20613d6e5b315d2c20633d6e5b325d2c20693d6e5b335d2c
Arg [65] : 20733d30207c203333313033202b2074202a20722c20753d30207c2036333333
Arg [66] : 35202b2074202a2061202b20286f202a2072202b202873203e3e3e2031362929
Arg [67] : 2c20763d30207c203331363134202b2074202a2063202b206f202a2061202b20
Arg [68] : 283632353039202a2072202b202875203e3e3e20313629293b206e5b305d3d73
Arg [69] : 2c206e5b315d3d752c206e5b325d3d762c206e5b335d3d35313235202b207420
Arg [70] : 2a2069202b20286f202a2063202b203632353039202a206129202b2028323236
Arg [71] : 3039202a2072202b202876203e3e3e20313629293b20636f6e737420663d2869
Arg [72] : 203c3c20323129202b20282869203e3e2032205e206329203c3c203529202b20
Arg [73] : 282863203e3e2032205e206129203e3e203131293b2072657475726e2065202a
Arg [74] : 20282866203e3e3e202869203e3e20313129207c2066203c3c20283331202620
Arg [75] : 2d2869203e3e203131292929203e3e3e2030297d2c20633d28652c20743d3029
Arg [76] : 3d3e7b636f6e7374206f3d31362c206e3d36353533352c20723d3235353b2066
Arg [77] : 6f72202876617220612c20633d313534303438333437372c20693d652e6c656e
Arg [78] : 6774682c20733d74205e20692c20753d303b2034203c3d693b29613d2828613d
Arg [79] : 655b755d20262072207c2028655b2b2b755d2026207229203c3c2038207c2028
Arg [80] : 655b2b2b755d2026207229203c3c203136207c2028655b2b2b755d2026207229
Arg [81] : 203c3c203234292026206e29202a2063202b2028282861203e3e3e206f29202a
Arg [82] : 20632026206e29203c3c206f292c20733d28732026206e29202a2063202b2028
Arg [83] : 282873203e3e3e206f29202a20632026206e29203c3c206f29205e2028613d28
Arg [84] : 2861205e3d61203e3e3e203234292026206e29202a2063202b2028282861203e
Arg [85] : 3e3e206f29202a20632026206e29203c3c206f29292c2069202d3d342c202b2b
Arg [86] : 753b20737769746368202869297b6361736520333a2073205e3d28655b75202b
Arg [87] : 20325d2026207229203c3c206f3b206361736520323a2073205e3d28655b7520
Arg [88] : 2b20315d2026207229203c3c20383b206361736520313a20733d282873205e3d
Arg [89] : 655b755d20262072292026206e29202a2063202b2028282873203e3e3e206f29
Arg [90] : 202a20632026206e29203c3c206f297d72657475726e20733d282873205e3d73
Arg [91] : 203e3e3e203133292026206e29202a2063202b2028282873203e3e3e20313629
Arg [92] : 202a20632026206e29203c3c203136292c202873205e3d73203e3e3e20313529
Arg [93] : 203e3e3e20307d2c20693d28653d2e35293d3e20612829203c2065203f203120
Arg [94] : 3a20303b20636f6e737420733d28652c20742c206f293d3e7b636f6e7374206e
Arg [95] : 3d652e6372656174655368616465722874293b2072657475726e20652e736861
Arg [96] : 646572536f75726365286e2c206f292c20652e636f6d70696c65536861646572
Arg [97] : 286e292c20652e676574536861646572506172616d65746572286e2c20652e43
Arg [98] : 4f4d50494c455f53544154555329203f206e203a20766f696420652e64656c65
Arg [99] : 7465536861646572286e297d3b2076617220753d28652c20742c206f293d3e20
Arg [100] : 6173796e63206e3d3e7b636f6e737420723d6e2e676574436f6e746578742822
Arg [101] : 776562676c22292c20613d6e2e77696474682c20633d6e2e6865696768743b20
Arg [102] : 722e76696577706f727428302c20302c20612c2063293b20636f6e737420693d
Arg [103] : 2828652c20742c206f293d3e7b636f6e7374206e3d652e63726561746550726f
Arg [104] : 6772616d28293b2072657475726e20652e617474616368536861646572286e2c
Arg [105] : 2074292c20652e617474616368536861646572286e2c206f292c20652e6c696e
Arg [106] : 6b50726f6772616d286e292c20652e67657450726f6772616d506172616d6574
Arg [107] : 6572286e2c20652e4c494e4b5f53544154555329203f206e203a20766f696420
Arg [108] : 652e64656c65746550726f6772616d286e297d2928722c207328722c20722e56
Arg [109] : 45525445585f5348414445522c2022617474726962757465207665633320706f
Arg [110] : 736974696f6e3b22202b2065292c207328722c20722e465241474d454e545f53
Arg [111] : 48414445522c207429292c20753d722e6765744174747269624c6f636174696f
Arg [112] : 6e28692c2022706f736974696f6e22292c20763d722e63726561746542756666
Arg [113] : 657228293b20722e62696e6442756666657228722e41525241595f4255464645
Arg [114] : 522c2076292c20722e6275666665724461746128722e41525241595f42554646
Arg [115] : 45522c206e657720466c6f617433324172726179285b2d312c202d312c202d31
Arg [116] : 2c20332c20332c202d315d292c20722e5354415449435f44524157292c20722e
Arg [117] : 636c656172436f6c6f7228302c20302c20302c2030292c20722e636c65617228
Arg [118] : 722e434f4c4f525f4255464645525f424954292c20722e75736550726f677261
Arg [119] : 6d2869292c20722e656e61626c65566572746578417474726962417272617928
Arg [120] : 75292c20722e62696e6442756666657228722e41525241595f4255464645522c
Arg [121] : 2076292c20722e766572746578417474726962506f696e74657228752c20322c
Arg [122] : 20722e464c4f41542c2021312c20302c2030292c205b5b227557222c20227632
Arg [123] : 222c205b612c20635d5d2c202e2e2e6f5d2e6d61702828285b652c20742c206f
Arg [124] : 5d293d3e205b742c206f2c20722e676574556e69666f726d4c6f636174696f6e
Arg [125] : 28692c2065295d29292e6d61702828653d3e7b2828652c205b742c206f2c206e
Arg [126] : 5d293d3e7b2262223d3d3d74203f20652e756e69666f726d3169286e2c202130
Arg [127] : 3d3d3d6f203f2031203a203029203a202269223d3d3d74203f20652e756e6966
Arg [128] : 6f726d3169286e2c206f29203a202266223d3d3d74203f20652e756e69666f72
Arg [129] : 6d3166286e2c206f29203a2028227632223d3d3d74207c7c20227633223d3d3d
Arg [130] : 74207c7c20227634223d3d3d742920262620652e756e69666f726d3266286e2c
Arg [131] : 202e2e2e6f297d2928722c2065297d29292c20722e6472617741727261797328
Arg [132] : 722e545249414e474c45532c20302c2033297d3b20636f6e737420763d5b3220
Arg [133] : 2f20332c20312c20312e352c20312e362c203136202f20392c2039202f203136
Arg [134] : 2c202e352c2039202f2031392c2039202f2031392e352c202e34355d2c20663d
Arg [135] : 22756e646566696e65642220213d747970656f66206f7074696f6e7320262620
Arg [136] : 6f7074696f6e732c206c3d662e68617368207c7c202828293d3e7b6c65742065
Arg [137] : 3d223078223b20666f7220286c657420743d36343b2030203c20743b202d2d74
Arg [138] : 2965202b3d2230313233343536373839616263646566225b7e7e283136202a20
Arg [139] : 4d6174682e72616e646f6d2829295d3b2072657475726e20657d2928293b2028
Arg [140] : 6173796e632028293d3e7b76617220653d4d6174682e6d696e2c20743d4d6174
Arg [141] : 682e6d61783b20636f6e7374206f3d77696e646f772c206e3d646f63756d656e
Arg [142] : 742c20733d28293d3e20706572666f726d616e63652e6e6f7728292c206d3d6e
Arg [143] : 2e626f64792e617070656e644368696c64286e2e637265617465456c656d656e
Arg [144] : 74282263616e7661732229292c20703d6e2e626f64792e617070656e64436869
Arg [145] : 6c64286e2e637265617465456c656d656e74282263616e7661732229293b206f
Arg [146] : 2e746572726f69723d7b7d3b206c657420642c20782c20622c20683d765b305d
Arg [147] : 2c20673d302c20793d302c20773d312c20413d21312c20523d702e676574436f
Arg [148] : 6e746578742822326422293b20636f6e737420453d6173796e6320287b657870
Arg [149] : 6f7274696e673a206e3d21312c206c6f673a20413d21302c2069735368696674
Arg [150] : 3a20543d21317d3d7b7d293d3e7b76617220433d4d6174682e737172743b2063
Arg [151] : 6f6e7374204c3d7328293b20643d6f2e696e6e657257696474682c20783d6f2e
Arg [152] : 696e6e65724865696768743b20636f6e737420463d683d3d3d765b305d207c7c
Arg [153] : 20683d3d3d765b325d203f2032346536203a2033333137373630303b206c6574
Arg [154] : 20533d7e7e432846202a2068292c20423d7e7e432846202f2068293b20636f6e
Arg [155] : 737420553d742842202d20383139322c203029202f20423b2053202a3d31202d
Arg [156] : 20552c2042202a3d31202d20552c2064202f2078203e3d68203f202878202d3d
Arg [157] : 7820252032302c20643d7e7e2878202a20682929203a202864202d3d64202520
Arg [158] : 32302c20783d7e7e2864202f206829292c20623d32202a2028662e706978656c
Arg [159] : 44656e73697479207c7c206f2e646576696365506978656c526174696f292c20
Arg [160] : 6d2e77696474683d532c206d2e6865696768743d422c20702e77696474683d65
Arg [161] : 2864202a20622c2053292c20702e6865696768743d652878202a20622c204229
Arg [162] : 2c20702e7374796c652e77696474683d60247b647d7078602c20702e7374796c
Arg [163] : 652e6865696768743d60247b787d7078602c206d2e7374796c652e706f736974
Arg [164] : 696f6e3d226162736f6c757465222c206d2e7374796c652e6c6566743d2d5320
Arg [165] : 2b20227078222c206d2e7374796c652e746f703d2d42202b20227078223b2063
Arg [166] : 6f6e737420443d617761697420286173796e632028652c20742c7b70616e3a20
Arg [167] : 6f2c20626f726465723a206e2c206c6f673a20737d293d3e7b636f6e73742075
Arg [168] : 3d743b207320262620636f6e736f6c652e6c6f6728602d2d2d5c6e486173683a
Arg [169] : 5c6e247b757d60292c2028653d3e7b636f6e737420743d7e7e2828652e6c656e
Arg [170] : 677468202d203229202f2032292c206f3d5b5d3b20666f7220286c6574206e3d
Arg [171] : 303b206e203c20743b206e2b2b297b636f6e737420743d32202b2032202a206e
Arg [172] : 3b206f2e70757368287061727365496e7428652e736c69636528742c2074202b
Arg [173] : 2032292c20313629297d636f6e7374206e3d63286f2c20313639303338323932
Arg [174] : 35292c20613d63286f2c203732393730343730293b20722e73657455696e7433
Arg [175] : 3228302c206e292c20722e73657455696e74333228342c2061297d292875293b
Arg [176] : 20636f6e737420763d5b5b227553222c20227632222c205b6128292c20612829
Arg [177] : 5d5d2c205b22755a222c202266222c206128295d2c205b227554222c20226622
Arg [178] : 2c206128295d2c205b227541222c202266222c206128295d2c205b22754d222c
Arg [179] : 202266222c206128295d2c205b227543222c202266222c206128295d2c205b22
Arg [180] : 7552222c202266222c206128295d2c205b227547222c202266222c206128295d
Arg [181] : 2c205b227542222c202266222c206128295d2c205b227531222c202266222c20
Arg [182] : 69282e3034292c202243686172636f616c225d2c205b227532222c202266222c
Arg [183] : 2069282e3034292c202247726964225d2c205b227533222c202266222c206928
Arg [184] : 2e3032292c20224c697175696679225d2c205b227534222c202266222c206928
Arg [185] : 2e3136292c2022466c6970225d2c205b227535222c202266222c2069282e3132
Arg [186] : 292c202244697363225d2c205b227536222c202266222c2069282e3038292c20
Arg [187] : 2257617679225d2c205b227537222c202266222c2069282e3132292c20224368
Arg [188] : 6f707079225d2c205b227538222c202266222c2069282e3034292c202254696e
Arg [189] : 746564225d2c205b227539222c202266222c2069282e3032292c202253706972
Arg [190] : 616c225d2c205b22753130222c202266222c2069282e3032292c202252656473
Arg [191] : 68696674225d2c205b22753131222c202266222c2069282e3032292c20224d6f
Arg [192] : 6f6e6c6974225d2c205b22753132222c202266222c2069282e3136292c202242
Arg [193] : 7269676874225d2c205b227545222c202266222c2069282e3038292c20224578
Arg [194] : 706c6f7261626c65225d2c205b22754c222c20227632222c206f5d2c205b2275
Arg [195] : 4f222c202266222c206e5d5d3b20666f7220286c657420653d303b203133203e
Arg [196] : 20653b20652b2b297b636f6e737420743d765b39202b20655d3b2077696e646f
Arg [197] : 772e4d45544144415441202626202877696e646f772e4d455441444154415b74
Arg [198] : 5b335d5d3d30203c20745b325d203f202259657322203a20224e6f22292c2030
Arg [199] : 203c20745b325d20262620745b335d202626207320262620636f6e736f6c652e
Arg [200] : 6c6f67286054726169743a20247b745b335d7d60297d696620282266756e6374
Arg [201] : 696f6e223d3d747970656f66206f6e4d65746164617461202626206f6e4d6574
Arg [202] : 616461746128292c20762e66696e642828653d3e20227545223d3d3d655b305d
Arg [203] : 29295b325d297b636f6e7374205b652c20745d3d762e66696e642828653d3e20
Arg [204] : 22754c223d3d3d655b305d29295b325d3b20636f6e736f6c652e6c6f6728224c
Arg [205] : 6f636174696f6e3a222c20225b22202b2065202b20222c2022202b2074202b20
Arg [206] : 225d22297d72657475726e206173796e63206f3d3e7b636f6e7374206e3d6528
Arg [207] : 225c6e76617279696e672076656332207655763b5c6e766f6964206d61696e28
Arg [208] : 297b676c5f506f736974696f6e3d7665633428706f736974696f6e2c20312e30
Arg [209] : 293b207655763d706f736974696f6e2e78793b7d5c6e222c20225c6e70726563
Arg [210] : 6973696f6e20686967687020666c6f61743b5c6e76617279696e672076656332
Arg [211] : 207655763b5c6e756e69666f726d20766563322075572c2075532c20754c3b5c
Arg [212] : 6e756e69666f726d20666c6f617420755a2c2075542c2075412c20754d2c2075
Arg [213] : 432c2075522c2075472c2075422c20754f2c2075312c2075322c2075332c2075
Arg [214] : 342c2075352c2075362c2075372c2075382c2075392c207531302c207531312c
Arg [215] : 207531322c2075453b5c6e5c6e23646566696e6520504920332e313431353932
Arg [216] : 363533355c6e23646566696e65204220302e3038355c6e23646566696e65204f
Arg [217] : 20375c6e5c6e2f2f2049616e204d634577616e202d20417368696d6120417274
Arg [218] : 732e20436f7079726967687420284329203230313120417368696d6120417274
Arg [219] : 732e20416c6c207269676874732072657365727665642e204d4954204c696365
Arg [220] : 6e73652e5c6e76656333206d6f6432383928766563332078297b72657475726e
Arg [221] : 20782d666c6f6f7228782a28312e302f3238392e3029292a3238392e303b7d76
Arg [222] : 656332206d6f6432383928766563322078297b72657475726e20782d666c6f6f
Arg [223] : 7228782a28312e302f3238392e3029292a3238392e303b7d7665633320706572
Arg [224] : 6d75746528766563332078297b72657475726e206d6f64323839282828782a33
Arg [225] : 342e30292b312e30292a78293b7d666c6f6174206e6f69736528766563322076
Arg [226] : 297b636f6e7374207665633420433d7665633428302e32313133323438363534
Arg [227] : 30353138372c302e3336363032353430333738343433392c2d302e3537373335
Arg [228] : 303236393138393632362c302e303234333930323433393032343339293b7665
Arg [229] : 633220693d666c6f6f7228762b646f7428762c432e797929293b766563322078
Arg [230] : 303d762d692b646f7428692c432e7878293b766563322069313b69313d287830
Arg [231] : 2e783e78302e79293f7665633228312e302c302e30293a7665633228302e302c
Arg [232] : 312e30293b76656334207831323d78302e787978792b432e78787a7a3b783132
Arg [233] : 2e78792d3d69313b693d6d6f643238392869293b7665633320703d7065726d75
Arg [234] : 7465287065726d75746528692e792b7665633328302e302c69312e792c312e30
Arg [235] : 29292b692e782b7665633328302e302c69312e782c312e3029293b7665633320
Arg [236] : 6d3d6d617828302e352d7665633328646f742878302c7830292c646f74287831
Arg [237] : 322e78792c7831322e7879292c646f74287831322e7a772c7831322e7a772929
Arg [238] : 2c302e30293b6d3d6d2a6d3b6d3d6d2a6d3b7665633320783d322e302a667261
Arg [239] : 637428702a432e777777292d312e303b7665633320683d6162732878292d302e
Arg [240] : 353b76656333206f783d666c6f6f7228782b302e35293b766563332061303d78
Arg [241] : 2d6f783b6d202a3d312e37393238343239313430303135392d302e3835333733
Arg [242] : 3437323039353331342a2861302a61302b682a68293b7665633320673b672e78
Arg [243] : 3d61302e782a78302e782b682e782a78302e793b672e797a3d61302e797a2a78
Arg [244] : 31322e787a2b682e797a2a7831322e79773b72657475726e203133302e302a64
Arg [245] : 6f74286d2c67293b7d666c6f61742072616e64287665633220636f297b726574
Arg [246] : 75726e2066726163742873696e28646f7428636f2e78792c766563322831322e
Arg [247] : 393839382c37382e3233332929292a34333735382e35343533293b7d5c6e5c6e
Arg [248] : 666c6f61742066626d28696e2076656332207576297b666c6f617420763d302e
Arg [249] : 302c20613d302e3632202b20302e3332202a2075413b206d61743220726f743d
Arg [250] : 6d61743228636f7328302e35292c2073696e28302e35292c2d73696e28302e35
Arg [251] : 292c20636f7328302e3529293b20666f722028696e7420693d303b2069203c20
Arg [252] : 4f3b202b2b69297b76202b3d61202a206e6f697365287576202b20287553202a
Arg [253] : 2031302e30202d20352e3029293b2075763d726f74202a207576202a202d322e
Arg [254] : 303b2061202a3d302e34393531202b20302e3037202a20706f7728754d2c2032
Arg [255] : 2e35293b7d72657475726e20763b7d5c6e666c6f61742066726d28696e207665
Arg [256] : 633220702c20666c6f61742073297b72657475726e2066626d28702b66626d28
Arg [257] : 702b66626d28702b66626d28702b66626d28702b66626d28702b66626d28702b
Arg [258] : 66626d28702b66626d28702b66626d28702a73292929292929292929293b7d5c
Arg [259] : 6e6d6174322072326428666c6f6174207468657461297b72657475726e206d61
Arg [260] : 743228636f73287468657461292c2073696e287468657461292c2d73696e2874
Arg [261] : 68657461292c20636f7328746865746129293b7d5c6e5c6e766f6964206d6169
Arg [262] : 6e28297b5c6e666c6f61742061723d75572e78202f2075572e793b5c6e766563
Arg [263] : 322075763d7655763b5c6e666c6f61742075764f3d312e30202d20312e30202a
Arg [264] : 206d696e287535202b2075392c20312e30293b5c6e7665633220706f733d2875
Arg [265] : 76202b2075764f29202a202828302e35202b20302e37202a20755a29202a2028
Arg [266] : 312e30202d20753329202b2028302e3235202a2075332929202a206d61782861
Arg [267] : 722c20312e30293b5c6e706f73202b3d754c202a20302e3235202a2075453b5c
Arg [268] : 6e706f732e79202f3d61723b5c6e6d61743220723d723264285049202a20282d
Arg [269] : 302e3031202b20302e303235202a20287554202a20322e30202d20312e302929
Arg [270] : 293b5c6e706f73202a3d723b5c6e6d6174322072463d723264285049202a2030
Arg [271] : 2e35202a207534293b5c6e706f73202a3d72463b5c6e6d6174322072533d7232
Arg [272] : 64287539202a205049202a206672616374286c656e67746828706f73202a2033
Arg [273] : 302e302929293b5c6e706f73202a3d72533b5c6e6d6174322072443d72326428
Arg [274] : 7535202a205049202a20302e3231202a20666c6f6f72286c656e67746828706f
Arg [275] : 73202a20372e302929293b5c6e706f73202a3d72443b5c6e6d6174322072573d
Arg [276] : 723264287536202a205049202a202d302e3036293b5c6e706f73202a3d72573b
Arg [277] : 5c6e706f73202b3d7536202a207665633228706f732e782c202873696e28706f
Arg [278] : 732e79202a2031352e30202a2028312e30202d20302e32202a2075322929202a
Arg [279] : 20302e35202b20302e3529202a20302e3131202a2028312e30202d20302e3320
Arg [280] : 2a20753229293b5c6e706f73202b3d7537202a20766563322873696e28706f73
Arg [281] : 2e79202a2031352e30202a2028312e30202d20302e33202a2075322929202a20
Arg [282] : 302e3038202a2028312e30202d20302e32202a207532292c20706f732e78293b
Arg [283] : 5c6e7665633220753275763d7576202a2028312e30202b2042202a2028312e30
Arg [284] : 202b204229293b5c6e666c6f6174207532733d322e30202b20286d6178286172
Arg [285] : 2c20312e3029202d20312e30293b5c6e706f73202b3d7532202a207665633228
Arg [286] : 66726163742828312e30202d20753275762e7829202a2028753273202d20302e
Arg [287] : 35202a2075332929202a20302e30392c2066726163742828312e30202d207532
Arg [288] : 75762e79202f20617229202a2028753273202d20302e35202a2075332929202a
Arg [289] : 20302e3039202f206172293b5c6e7665633320623d766563332835312e302f32
Arg [290] : 35352e302c35332e302f3235352e302c3131382e302f3235352e30293b5c6e76
Arg [291] : 65633320626173653d7665633328312e30202a2075522c20302e34202a207547
Arg [292] : 2c20302e32202a207542293b5c6e626173653d6d697828626173652c20622c20
Arg [293] : 753131293b5c6e7665633320633d626173653b5c6e63202b3d2820302e35202b
Arg [294] : 20302e35202a2075432029202a2066726d2820706f732c20755a20293b5c6e63
Arg [295] : 202b3d322e35202a20766563332820302e362c20302e332c20302e3135202920
Arg [296] : 2a2066726d2820706f73202a20302e31372c20755a202a20302e383820293b5c
Arg [297] : 6e63202b3d322e35202a207665633328207552202a20302e382c207547202a20
Arg [298] : 302e342c207542202a20302e322029202a2066726d2820706f73202a20302e36
Arg [299] : 362c20755a202a20312e393320293b5c6e63202a3d302e373b5c6e63202a3d31
Arg [300] : 2e30202d20302e3939202a20753131202b2062202a20312e39202a207531313b
Arg [301] : 5c6e63202b3d302e32202a207531313b5c6e666c6f61742062543d2842202a20
Arg [302] : 754f29202f206d6178286172202b20302e332c20312e30293b5c6e666c6f6174
Arg [303] : 2062463d302e303030353b5c6e766563332062723d6d697828626173652c2076
Arg [304] : 65633328312e30292c206d696e28302e32352c20312e30202d2075313129293b
Arg [305] : 5c6e62723d6d69782862722c207665633328302e3034372c20302e3034372c20
Arg [306] : 302e303433292c207531293b5c6e633d6d697828632c2062722c20736d6f6f74
Arg [307] : 68737465702875762e78202d206246202a20302e352c2075762e78202b206246
Arg [308] : 202a20302e352c202d312e30202b20625429293b5c6e633d6d69782862722c20
Arg [309] : 632c20736d6f6f7468737465702875762e78202d206246202a20302e352c2075
Arg [310] : 762e78202b206246202a20302e352c20312e30202d20625429293b5c6e633d6d
Arg [311] : 697828632c2062722c20736d6f6f7468737465702875762e79202d206246202a
Arg [312] : 20302e352c2075762e79202b206246202a20302e352c202d312e30202b206254
Arg [313] : 202a20617229293b5c6e633d6d69782862722c20632c20736d6f6f7468737465
Arg [314] : 702875762e79202d206246202a20302e352c2075762e79202b206246202a2030
Arg [315] : 2e352c20312e30202d206254202a20617229293b5c6e632e72202a3d312e3020
Arg [316] : 2b20753130202a20312e35202a202875762e78202d20332e30293b5c6e632e67
Arg [317] : 202a3d312e30202d20753130202a20302e343b5c6e633d6d697828632c206d69
Arg [318] : 6e286d617828632e727272202a20632e676767202f20632e6262622c20302e31
Arg [319] : 292c20312e30292c20753120293b5c6e633d6d697828632c206d69782862722c
Arg [320] : 2063202a20322e30202b2063202a20342e30202a2075312c207374657028632e
Arg [321] : 72202b20632e67202b20632e622c20302e363729292c207538293b5c6e63202b
Arg [322] : 3d28302e35202d20302e3333202a207531202d20302e33202a2075313129202a
Arg [323] : 207531323b5c6e676c5f46726167436f6c6f723d7665633428632c20312e3029
Arg [324] : 3b5c6e7d5c6e222c2076293b206177616974206e286f2c2074297d7d2928752c
Arg [325] : 206c2c7b70616e3a205b672c20795d2c20626f726465723a20772c206c6f673a
Arg [326] : 20417d293b2061776169742044286d293b20636f6e7374204d3d64202a206220
Arg [327] : 3e2053203f2062202a2053202f202864202a206229203a20623b20522e736361
Arg [328] : 6c65284d2c204d292c20522e64726177496d616765286d2c20302c20302c2064
Arg [329] : 2c2078292c206e203f2028636f6e736f6c652e6c6f6728672c2079292c206177
Arg [330] : 61697420286173796e632028652c20742c206f3d2131293d3e7b636f6e737420
Arg [331] : 6e3d646f63756d656e742c20723d77696e646f773f2e706172656e743b20636f
Arg [332] : 6e736f6c652e6c6f672822446f776e6c6f6164696e6720696d6167652e2e2e22
Arg [333] : 293b20636f6e737420613d28653d3e7b6c657420743d77696e646f772e61746f
Arg [334] : 6228652e73706c697428222c22295b315d292c206f3d6e657720417272617942
Arg [335] : 756666657228742e6c656e677468292c206e3d6e65772055696e743841727261
Arg [336] : 79286f293b20666f7220286c657420653d303b2065203c20742e6c656e677468
Arg [337] : 3b20652b2b296e5b655d3d742e63686172436f646541742865293b206c657420
Arg [338] : 723d6e6577204461746156696577286f293b2072657475726e206e657720426c
Arg [339] : 6f62285b725d2c7b747970653a20652e73706c697428222c22295b305d2e7370
Arg [340] : 6c697428223a22295b315d2e73706c697428223b22295b305d7d297d29286529
Arg [341] : 2c20633d723f2e55524c2e6372656174654f626a65637455524c2861293b2069
Arg [342] : 6620286f2920723f2e6f70656e2863293b20656c73657b636f6e737420653d6e
Arg [343] : 2e626f64792e617070656e644368696c64286e2e637265617465456c656d656e
Arg [344] : 742822612229293b20652e687265663d632c20652e646f776e6c6f61643d742c
Arg [345] : 20652e636c69636b28292c206e2e626f64792e72656d6f76654368696c642865
Arg [346] : 297d723f2e55524c2e7265766f6b654f626a65637455524c2863297d29286d2e
Arg [347] : 746f4461746155524c2822696d6167652f6a70656722292c2060746572726f69
Arg [348] : 722d247b6c7d247b67207c7c2079203f20602d5b247b677d2c247b797d5d6020
Arg [349] : 3a2022227d2e6a7067602c2054292c20636f6e736f6c652e6c6f672860457870
Arg [350] : 6f72742074696d653a20247b7e7e28732829202d204c297d6d735c6e2d2d2d60
Arg [351] : 292c2045287b6c6f673a2021317d2929203a204120262620636f6e736f6c652e
Arg [352] : 6c6f67286050726f636573732074696d653a20247b7e7e28732829202d204c29
Arg [353] : 7d6d735c6e2d2d2d60292c202266756e6374696f6e223d3d747970656f66206f
Arg [354] : 6e446f6e65202626206f6e446f6e6528297d2c20543d6f3d3e7b683d65287428
Arg [355] : 6f2c202e3435292c20332e3536292c20636f6e736f6c652e6c6f672860417370
Arg [356] : 656374207365743a20247b687d60292c2045287b6c6f673a2021317d297d3b20
Arg [357] : 6f2e746572726f69722e7365744173706563743d543b20636f6e737420433d28
Arg [358] : 653d302c20743d30293d3e7b67202b3d2e35202a20652c2079202b3d2e35202a
Arg [359] : 20742c202865207c7c2074292026262045287b6c6f673a2021317d297d3b206f
Arg [360] : 2e746572726f69722e676f546f3d28653d302c20743d30293d3e7b673d652c20
Arg [361] : 793d742c2045287b6c6f673a2021317d297d3b20636f6e7374204c3d28293d3e
Arg [362] : 7b773d30203c2077203f2030203a20312c2045287b6c6f673a2021317d297d3b
Arg [363] : 206f2e746572726f69722e746f67676c65426f726465723d4c3b20636f6e7374
Arg [364] : 20463d653d3e7b45287b6578706f7274696e673a2021302c2069735368696674
Arg [365] : 3a20657d292c20413d21317d3b206f2e746572726f69722e736176653d462c20
Arg [366] : 6f2e6164644576656e744c697374656e65722822726573697a65222c20282829
Arg [367] : 3d3e2045287b6c6f673a2021317d2929292c206f2e6164644576656e744c6973
Arg [368] : 74656e657228226b6579646f776e222c2028653d3e7b28652e6374726c4b6579
Arg [369] : 207c7c20652e6d6574614b657929202626202273223d3d3d652e6b65792e746f
Arg [370] : 4c6f7765724361736528292026262028652e70726576656e7444656661756c74
Arg [371] : 28292c2021412026262028413d21302c204628652e73686966744b6579292929
Arg [372] : 7d29292c206f2e6164644576656e744c697374656e657228226b65797570222c
Arg [373] : 2028653d3e7b636f6e737420743d7061727365496e7428652e6b65792c203130
Arg [374] : 293b2073776974636820282169734e614e2874292026262074203c3d762e6c65
Arg [375] : 6e677468202626205428765b303d3d3d74203f2039203a2074202d20315d207c
Arg [376] : 7c20765b305d292c20652e6b6579297b6361736520224172726f774c65667422
Arg [377] : 3a2043282d312c2030293b20627265616b3b206361736520224172726f775269
Arg [378] : 676874223a204328312c2030293b20627265616b3b206361736520224172726f
Arg [379] : 775570223a204328302c2031293b20627265616b3b206361736520224172726f
Arg [380] : 77446f776e223a204328302c202d31293b20627265616b3b2063617365202262
Arg [381] : 223a2063617365202242223a204c28297d7d29292c20702e6164644576656e74
Arg [382] : 4c697374656e65722822636c69636b222c2028653d3e7b636f6e73747b616273
Arg [383] : 3a20742c207369676e3a206f7d3d4d6174682c206e3d652e6f66667365745820
Arg [384] : 2f2064202a2032202d20312c20723d652e6f666673657459202f2078202a2032
Arg [385] : 202d20313b2043282e35203c2074286e29203f206f286e29203a20302c202e35
Arg [386] : 203c2074287229203f206f282d7229203a2030297d29292c204528297d292829
Arg [387] : 7d2928293b3c2f7363726970743e3c2f626f64793e0000000000000000000000


Deployed Bytecode Sourcemap

883:9853:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10635:16;;;;;;;;;;;10610:62;;;10693:9;10721:4;10610:117;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;883:9853;;;;;2425:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1048:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2488:98:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3999:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3537:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;271:26:16;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9213:82:17;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1391:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1615:111:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1106:26:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4726:330:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7893:394:17;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1291:253:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1296:31:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2788:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8355:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4299:1452;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5122:179:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7542:285:17;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;227:38:16;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1798:230:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10062:89:17;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2191:235:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9696:147:17;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3025:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1929:205:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;;;;;;;;;;;:::i;:::-;;1191:28:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1079:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1036:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9902:113:17;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1333:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1424:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2650:102:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8814:340:17;;;;;;;;;;;;;:::i;:::-;;980:98:16;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4283:153:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5367:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2818:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5903:736:17;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1138:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4502:162:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9403:230:17;;;;;;;;;;;;;:::i;:::-;;1259:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1084:114:16;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2425:291:17;2577:4;2631:26;2616:41;;;:11;:41;;;;:93;;;;2673:36;2697:11;2673:23;:36::i;:::-;2616:93;2597:112;;2425:291;;;:::o;1048:25::-;;;;:::o;2488:98:5:-;2542:13;2574:5;2567:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2488:98;:::o;3999:217::-;4075:7;4102:16;4110:7;4102;:16::i;:::-;4094:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4185:15;:24;4201:7;4185:24;;;;;;;;;;;;;;;;;;;;;4178:31;;3999:217;;;:::o;3537:401::-;3617:13;3633:23;3648:7;3633:14;:23::i;:::-;3617:39;;3680:5;3674:11;;:2;:11;;;;3666:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:5;3755:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3780:37;3797:5;3804:12;:10;:12::i;:::-;3780:16;:37::i;:::-;3755:62;3734:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3910:21;3919:2;3923:7;3910:8;:21::i;:::-;3537:401;;;:::o;271:26:16:-;;;;;;;;;;;;;:::o;9213:82:17:-;490:14:16;507:12;:10;:12::i;:::-;490:29;;561:6;550:17;;:7;:5;:7::i;:::-;:17;;;:35;;;;571:6;:14;578:6;571:14;;;;;;;;;;;;;;;;;;;;;;;;;550:35;529:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;9282:6:17::1;9272:7;;:16;;;;;;;;;;;;;;;;;;9213:82:::0;;:::o;1391:26::-;;;;;;;;;;;;;:::o;1615:111:8:-;1676:7;1702:10;:17;;;;1695:24;;1615:111;:::o;1106:26:17:-;;;;:::o;4726:330:5:-;4915:41;4934:12;:10;:12::i;:::-;4948:7;4915:18;:41::i;:::-;4907:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5021:28;5031:4;5037:2;5041:7;5021:9;:28::i;:::-;4726:330;;;:::o;7893:394:17:-;8023:7;8032;8076:16;;;;;;;;;;;8264:6;8250:10;8150:16;;;;;;;;;;;8125:90;;;8224:4;8231:1;8125:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8107:153;;;;:::i;:::-;8106:164;;;;:::i;:::-;8055:225;;;;7893:394;;;;;:::o;1291:253:8:-;1388:7;1423:23;1440:5;1423:16;:23::i;:::-;1415:5;:31;1407:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1511:12;:19;1524:5;1511:19;;;;;;;;;;;;;;;:26;1531:5;1511:26;;;;;;;;;;;;1504:33;;1291:253;;;;:::o;1296:31:17:-;;;;;;;;;;;;;:::o;2788:165::-;2883:7;2913:33;2933:12;2913:10;:19;;:33;;;;:::i;:::-;2906:40;;2788:165;;;:::o;8355:368::-;8442:16;8474:18;8495:17;8505:6;8495:9;:17::i;:::-;8474:38;;8522:25;8564:10;8550:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8522:53;;8590:9;8585:106;8605:10;8601:1;:14;8585:106;;;8650:30;8670:6;8678:1;8650:19;:30::i;:::-;8636:8;8645:1;8636:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;8617:3;;;;;:::i;:::-;;;;8585:106;;;;8708:8;8701:15;;;;8355:368;;;:::o;4299:1452::-;4412:22;4456:16;;;;;;;;;;;4437:77;;;4523:4;4530:12;:10;:12::i;:::-;4437:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4412:131;;4553:33;4563:6;4571:14;4553:9;:33::i;:::-;4638:28;4688:16;;;;;;;;;;;4669:66;;;4736:12;:10;:12::i;:::-;4669:80;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4638:111;;4759:14;4783:9;4865:719;4881:6;4872;:15;:41;;;;;4895:11;:18;4891:1;:22;4872:41;4865:719;;;4972:11;5005:16;;;;;;;;;;;4986:48;;;5052:11;5064:1;5052:14;;;;;;;;;;;;;;;;;;;;;;4986:94;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4972:108;;5144:13;5160:158;5206:11;5218:1;5206:14;;;;;;;;;;;;;;;;;;;;;;5238:6;5262:11;;5291:13;:11;:13::i;:::-;5160:10;:28;;:158;;;;;;;:::i;:::-;5144:174;;5415:9;5410:147;5430:5;5426:1;:9;:28;;;;;5448:6;5439;:15;5426:28;5410:147;;;5479:37;5497:2;5501:11;5513:1;5501:14;;;;;;;;;;;;;;;;;;;;;;5479:17;:37::i;:::-;5534:8;;;;;:::i;:::-;;;;5456:3;;;;;:::i;:::-;;;;5410:147;;;;5570:3;;;;;:::i;:::-;;;;4865:719;;;;;5659:16;;;;;;;;;;;5634:55;;;5710:9;5738:4;5634:110;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4299:1452;;;;;;:::o;5122:179:5:-;5255:39;5272:4;5278:2;5282:7;5255:39;;;;;;;;;;;;:16;:39::i;:::-;5122:179;;;:::o;7542:285:17:-;7590:13;7606:23;7621:7;7606:14;:23::i;:::-;7590:39;;7721:5;7705:21;;:12;:10;:12::i;:::-;:21;;;7684:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;7806:14;7812:7;7806:5;:14::i;:::-;7542:285;;:::o;227:38:16:-;;;;;;;;;;;;;;;;;;;;;;:::o;1798:230:8:-;1873:7;1908:30;:28;:30::i;:::-;1900:5;:38;1892:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2004:10;2015:5;2004:17;;;;;;;;;;;;;;;;;;;;;;;;1997:24;;1798:230;;;:::o;10062:89:17:-;809:14:16;826:12;:10;:12::i;:::-;809:29;;884:6;869:21;;:11;;;;;;;;;;;:21;;;848:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;10141:3:17::1;10134:4;:10;;;;;;;;;;;;:::i;:::-;;10062:89:::0;;:::o;2191:235:5:-;2263:7;2282:13;2298:7;:16;2306:7;2298:16;;;;;;;;;;;;;;;;;;;;;2282:32;;2349:1;2332:19;;:5;:19;;;;2324:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2414:5;2407:12;;;2191:235;;;:::o;9696:147:17:-;809:14:16;826:12;:10;:12::i;:::-;809:29;;884:6;869:21;;:11;;;;;;;;;;;:21;;;848:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;9821:15:17::1;9802:16;;:34;;;;;;;;;;;;;;;;;;9696:147:::0;;:::o;3025:368::-;3132:7;3174:212;3220:12;3269:16;;;;;;;;;;;3250:48;;;3299:12;3250:62;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3330:11;;3359:13;:11;:13::i;:::-;3174:10;:28;;:212;;;;;;;:::i;:::-;3155:231;;3025:368;;;:::o;1929:205:5:-;2001:7;2045:1;2028:19;;:5;:19;;;;2020:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2111:9;:16;2121:5;2111:16;;;;;;;;;;;;;;;;2104:23;;1929:205;;;:::o;1668:101:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;1191:28:17:-;;;;:::o;1079:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;9902:113:17:-;809:14:16;826:12;:10;:12::i;:::-;809:29;;884:6;869:21;;:11;;;;;;;;;;;:21;;;848:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;10000:8:17::1;9981:16;;:27;;;;;;;;;;;;;;;;;;9902:113:::0;;:::o;1333:27::-;;;;;;;;;;;;;:::o;1424:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2650:102:5:-;2706:13;2738:7;2731:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:102;:::o;8814:340:17:-;8863:11;8884:12;;;;;;;;;;;8863:34;;8907:18;8928:4;:14;;;8951:4;8928:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8907:50;;8967:4;:13;;;8981:16;;;;;;;;;;;8999:10;8967:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9045:16;;;;;;;;;;;9020:66;;;9108:4;9127:10;9020:127;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8814:340;;:::o;980:98:16:-;809:14;826:12;:10;:12::i;:::-;809:29;;884:6;869:21;;:11;;;;;;;;;;;:21;;;848:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;1066:5:::1;1052:11;;:19;;;;;;;;;;;;;;;;;;980:98:::0;;:::o;4283:153:5:-;4377:52;4396:12;:10;:12::i;:::-;4410:8;4420;4377:18;:52::i;:::-;4283:153;;:::o;5367:320::-;5536:41;5555:12;:10;:12::i;:::-;5569:7;5536:18;:41::i;:::-;5528:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5641:39;5655:4;5661:2;5665:7;5674:5;5641:13;:39::i;:::-;5367:320;;;;:::o;2818:329::-;2891:13;2924:16;2932:7;2924;:16::i;:::-;2916:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3003:21;3027:10;:8;:10::i;:::-;3003:34;;3078:1;3060:7;3054:21;:25;:86;;;;;;;;;;;;;;;;;3106:7;3115:18;:7;:16;:18::i;:::-;3089:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3054:86;3047:93;;;2818:329;;;:::o;5903:736:17:-;6152:12;:10;:12::i;:::-;6050:114;;6069:16;;;;;;;;;;;6050:54;;;6122:12;6050:98;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:114;;;6029:211;;;;;;;;;;;;:::i;:::-;;;;;;;;;6296:22;6321:44;6352:12;6321:30;:44::i;:::-;6296:69;;6376:28;6386:1;6389:14;6376:9;:28::i;:::-;6436:35;6454:2;6458:12;6436:17;:35::i;:::-;6547:16;;;;;;;;;;;6522:55;;;6598:9;6626:4;6522:110;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5903:736;;;:::o;1138:47::-;;;;;;;;;;;;;:::o;4502:162:5:-;4599:4;4622:18;:25;4641:5;4622:25;;;;;;;;;;;;;;;:35;4648:8;4622:35;;;;;;;;;;;;;;;;;;;;;;;;;4615:42;;4502:162;;;;:::o;9403:230:17:-;490:14:16;507:12;:10;:12::i;:::-;490:29;;561:6;550:17;;:7;:5;:7::i;:::-;:17;;;:35;;;;571:6;:14;578:6;571:14;;;;;;;;;;;;;;;;;;;;;;;;;550:35;529:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;9476:15:17::1;;;;;;;;;;;9475:16;9454:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;9570:24;9579:11;;;;;;;;;;;9592:1;9570:8;:24::i;:::-;9622:4;9604:15;;:22;;;;;;;;;;;;;;;;;;9403:230:::0;:::o;1259:31::-;;;;;;;;;;;;;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;1084:114:16:-;809:14;826:12;:10;:12::i;:::-;809:29;;884:6;869:21;;:11;;;;;;;;;;;:21;;;848:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;1185:6:::1;1169;:13;1176:5;1169:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;1084:114:::0;;;:::o;277:237:21:-;439:19;411:5;:25;;;:47;;;;;;;;;;;;;;;;;;492:15;468:5;:21;;;:39;;;;;;;;;;;;;;;;;;277:237;;;:::o;990:222:8:-;1092:4;1130:35;1115:50;;;:11;:50;;;;:90;;;;1169:36;1193:11;1169:23;:36::i;:::-;1115:90;1108:97;;990:222;;;:::o;7159:125:5:-;7224:4;7275:1;7247:30;;:7;:16;7255:7;7247:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7240:37;;7159:125;;;:::o;640:96:12:-;693:7;719:10;712:17;;640:96;:::o;11168:171:5:-;11269:2;11242:15;:24;11258:7;11242:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11324:7;11320:2;11286:46;;11295:23;11310:7;11295:14;:23::i;:::-;11286:46;;;;;;;;;;;;11168:171;;:::o;7442:344::-;7535:4;7559:16;7567:7;7559;:16::i;:::-;7551:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7634:13;7650:23;7665:7;7650:14;:23::i;:::-;7634:39;;7702:5;7691:16;;:7;:16;;;:51;;;;7735:7;7711:31;;:20;7723:7;7711:11;:20::i;:::-;:31;;;7691:51;:87;;;;7746:32;7763:5;7770:7;7746:16;:32::i;:::-;7691:87;7683:96;;;7442:344;;;;:::o;10452:605::-;10606:4;10579:31;;:23;10594:7;10579:14;:23::i;:::-;:31;;;10571:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10684:1;10670:16;;:2;:16;;;;10662:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10738:39;10759:4;10765:2;10769:7;10738:20;:39::i;:::-;10839:29;10856:1;10860:7;10839:8;:29::i;:::-;10898:1;10879:9;:15;10889:4;10879:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10926:1;10909:9;:13;10919:2;10909:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10956:2;10937:7;:16;10945:7;10937:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10993:7;10989:2;10974:27;;10983:4;10974:27;;;;;;;;;;;;11012:38;11032:4;11038:2;11042:7;11012:19;:38::i;:::-;10452:605;;;:::o;520:171:21:-;628:7;658:5;:12;;:26;671:12;658:26;;;;;;;;;;;;651:33;;520:171;;;;:::o;3563:581:17:-;3655:7;;;;;;;;;;;3654:8;3646:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;3739:1;3722:14;:18;3714:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;3832:6;3814:14;:24;;3793:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;3923:17;3999:6;3986:10;;:19;3974:31;;4059:9;4046;:22;;4025:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;3563:581;;;:::o;906:433:21:-;1107:7;1126:22;1170:13;1151:16;:32;;;;:::i;:::-;1126:57;;1230:1;1213:14;:18;:119;;1331:1;1213:119;;;1283:29;1292:5;1299:12;1283:8;:29::i;:::-;1250:30;1266:5;1273:6;1250:15;:30::i;:::-;:62;;;;:::i;:::-;1213:119;1194:138;;;906:433;;;;;;;:::o;6698:217:17:-;6838:34;6856:12;6870:1;6838:10;:17;;:34;;;;;:::i;:::-;6882:26;6891:2;6895:12;6882:8;:26::i;:::-;6698:217;;:::o;9722:406:5:-;9781:13;9797:23;9812:7;9797:14;:23::i;:::-;9781:39;;9831:48;9852:5;9867:1;9871:7;9831:20;:48::i;:::-;9917:29;9934:1;9938:7;9917:8;:29::i;:::-;9977:1;9957:9;:16;9967:5;9957:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;9995:7;:16;10003:7;9995:16;;;;;;;;;;;;9988:23;;;;;;;;;;;10055:7;10051:1;10027:36;;10036:5;10027:36;;;;;;;;;;;;10074:47;10094:5;10109:1;10113:7;10074:19;:47::i;:::-;9722:406;;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2270:187;;:::o;11474:307:5:-;11624:8;11615:17;;:5;:17;;;;11607:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11710:8;11672:18;:25;11691:5;11672:25;;;;;;;;;;;;;;;:35;11698:8;11672:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11755:8;11733:41;;11748:5;11733:41;;;11765:8;11733:41;;;;;;:::i;:::-;;;;;;;;11474:307;;;:::o;6549:::-;6700:28;6710:4;6716:2;6720:7;6700:9;:28::i;:::-;6746:48;6769:4;6775:2;6779:7;6788:5;6746:22;:48::i;:::-;6738:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6549:307;;;;:::o;10392:103:17:-;10452:13;10484:4;10477:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10392:103;:::o;328:703:13:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;7172:364:17:-;7251:15;7311:1;7295:13;:11;:13::i;:::-;7285:7;7269:13;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;:43;;;;:::i;:::-;7251:61;;7322:12;7377:7;7386:12;7400:15;7417:2;7360:60;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7337:93;;;;;;7322:108;;7440:22;7450:2;7454:7;7440:9;:22::i;:::-;7477:52;7482:7;7491:13;;7506:12;7520:2;7524:4;7477:52;;;;;;;;;;:::i;:::-;;;;;;;;7172:364;;;;:::o;1570:300:5:-;1672:4;1722:25;1707:40;;;:11;:40;;;;:104;;;;1778:33;1763:48;;;:11;:48;;;;1707:104;:156;;;;1827:36;1851:11;1827:23;:36::i;:::-;1707:156;1688:175;;1570:300;;;:::o;2624:572:8:-;2763:45;2790:4;2796:2;2800:7;2763:26;:45::i;:::-;2839:1;2823:18;;:4;:18;;;2819:183;;;2857:40;2889:7;2857:31;:40::i;:::-;2819:183;;;2926:2;2918:10;;:4;:10;;;2914:88;;2944:47;2977:4;2983:7;2944:32;:47::i;:::-;2914:88;2819:183;3029:1;3015:16;;:2;:16;;;3011:179;;;3047:45;3084:7;3047:36;:45::i;:::-;3011:179;;;3119:4;3113:10;;:2;:10;;;3109:81;;3139:40;3167:2;3171:7;3139:27;:40::i;:::-;3109:81;3011:179;2624:572;;;:::o;14162:121:5:-;;;;:::o;697:203:21:-;803:7;834:6;:58;;867:5;:25;;;;;;;;;;;;834:58;;;843:5;:21;;;;;;;;;;;;834:58;826:67;;;;697:203;;;;:::o;1345:199::-;1522:5;1492;:12;;:26;1505:12;1492:26;;;;;;;;;;;;:35;;;;;;;;;;;1345:199;;;:::o;12334:778:5:-;12484:4;12504:15;:2;:13;;;:15::i;:::-;12500:606;;;12555:2;12539:36;;;12576:12;:10;:12::i;:::-;12590:4;12596:7;12605:5;12539:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12535:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12795:1;12778:6;:13;:18;12774:266;;;12820:60;;;;;;;;;;:::i;:::-;;;;;;;;12774:266;12992:6;12986:13;12977:6;12973:2;12969:15;12962:38;12535:519;12671:41;;;12661:51;;;:6;:51;;;;12654:58;;;;;12500:606;13091:4;13084:11;;12334:778;;;;;;;:::o;8116:108::-;8191:26;8201:2;8205:7;8191:26;;;;;;;;;;;;:9;:26::i;:::-;8116:108;;:::o;829:155:14:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;13668:122:5:-;;;;:::o;3902:161:8:-;4005:10;:17;;;;3978:15;:24;3994:7;3978:24;;;;;;;;;;;:44;;;;4032:10;4048:7;4032:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3902:161;:::o;4680:970::-;4942:22;4992:1;4967:22;4984:4;4967:16;:22::i;:::-;:26;;;;:::i;:::-;4942:51;;5003:18;5024:17;:26;5042:7;5024:26;;;;;;;;;;;;5003:47;;5168:14;5154:10;:28;5150:323;;5198:19;5220:12;:18;5233:4;5220:18;;;;;;;;;;;;;;;:34;5239:14;5220:34;;;;;;;;;;;;5198:56;;5302:11;5269:12;:18;5282:4;5269:18;;;;;;;;;;;;;;;:30;5288:10;5269:30;;;;;;;;;;;:44;;;;5418:10;5385:17;:30;5403:11;5385:30;;;;;;;;;;;:43;;;;5150:323;;5566:17;:26;5584:7;5566:26;;;;;;;;;;;5559:33;;;5609:12;:18;5622:4;5609:18;;;;;;;;;;;;;;;:34;5628:14;5609:34;;;;;;;;;;;5602:41;;;4680:970;;;;:::o;5938:1061::-;6187:22;6232:1;6212:10;:17;;;;:21;;;;:::i;:::-;6187:46;;6243:18;6264:15;:24;6280:7;6264:24;;;;;;;;;;;;6243:45;;6610:19;6632:10;6643:14;6632:26;;;;;;;;;;;;;;;;;;;;;;;;6610:48;;6694:11;6669:10;6680;6669:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;6804:10;6773:15;:28;6789:11;6773:28;;;;;;;;;;;:41;;;;6942:15;:24;6958:7;6942:24;;;;;;;;;;;6935:31;;;6976:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5938:1061;;;;:::o;3490:217::-;3574:14;3591:20;3608:2;3591:16;:20::i;:::-;3574:37;;3648:7;3621:12;:16;3634:2;3621:16;;;;;;;;;;;;;;;:24;3638:6;3621:24;;;;;;;;;;;:34;;;;3694:6;3665:17;:26;3683:7;3665:26;;;;;;;;;;;:35;;;;3490:217;;;:::o;1175:320:11:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;8445:311:5:-;8570:18;8576:2;8580:7;8570:5;:18::i;:::-;8619:54;8650:1;8654:2;8658:7;8667:5;8619:22;:54::i;:::-;8598:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8445:311;;;:::o;9078:427::-;9171:1;9157:16;;:2;:16;;;;9149:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9229:16;9237:7;9229;:16::i;:::-;9228:17;9220:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9289:45;9318:1;9322:2;9326:7;9289:20;:45::i;:::-;9362:1;9345:9;:13;9355:2;9345:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9392:2;9373:7;:16;9381:7;9373:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9435:7;9431:2;9410:33;;9427:1;9410:33;;;;;;;;;;;;9454:44;9482:1;9486:2;9490:7;9454:19;:44::i;:::-;9078:427;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:677:22:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:2;;;425:1;422;415:12;361:2;461:1;446:249;471:6;468:1;465:13;446:249;;;539:3;568:48;612:3;600:10;568:48;:::i;:::-;563:3;556:61;646:4;641:3;637:14;630:21;;680:4;675:3;671:14;664:21;;506:189;493:1;490;486:9;481:14;;446:249;;;450:14;137:564;;;;;;;:::o;707:343::-;784:5;809:65;825:48;866:6;825:48;:::i;:::-;809:65;:::i;:::-;800:74;;897:6;890:5;883:21;935:4;928:5;924:16;973:3;964:6;959:3;955:16;952:25;949:2;;;990:1;987;980:12;949:2;1003:41;1037:6;1032:3;1027;1003:41;:::i;:::-;790:260;;;;;;:::o;1056:345::-;1134:5;1159:66;1175:49;1217:6;1175:49;:::i;:::-;1159:66;:::i;:::-;1150:75;;1248:6;1241:5;1234:21;1286:4;1279:5;1275:16;1324:3;1315:6;1310:3;1306:16;1303:25;1300:2;;;1341:1;1338;1331:12;1300:2;1354:41;1388:6;1383:3;1378;1354:41;:::i;:::-;1140:261;;;;;;:::o;1407:139::-;1453:5;1491:6;1478:20;1469:29;;1507:33;1534:5;1507:33;:::i;:::-;1459:87;;;;:::o;1552:143::-;1609:5;1640:6;1634:13;1625:22;;1656:33;1683:5;1656:33;:::i;:::-;1615:80;;;;:::o;1718:318::-;1800:5;1849:3;1842:4;1834:6;1830:17;1826:27;1816:2;;1867:1;1864;1857:12;1816:2;1900:6;1894:13;1925:105;2026:3;2018:6;2011:4;2003:6;1999:17;1925:105;:::i;:::-;1916:114;;1806:230;;;;;:::o;2042:133::-;2085:5;2123:6;2110:20;2101:29;;2139:30;2163:5;2139:30;:::i;:::-;2091:84;;;;:::o;2181:137::-;2235:5;2266:6;2260:13;2251:22;;2282:30;2306:5;2282:30;:::i;:::-;2241:77;;;;:::o;2324:137::-;2369:5;2407:6;2394:20;2385:29;;2423:32;2449:5;2423:32;:::i;:::-;2375:86;;;;:::o;2467:141::-;2523:5;2554:6;2548:13;2539:22;;2570:32;2596:5;2570:32;:::i;:::-;2529:79;;;;:::o;2627:271::-;2682:5;2731:3;2724:4;2716:6;2712:17;2708:27;2698:2;;2749:1;2746;2739:12;2698:2;2789:6;2776:20;2814:78;2888:3;2880:6;2873:4;2865:6;2861:17;2814:78;:::i;:::-;2805:87;;2688:210;;;;;:::o;2918:273::-;2974:5;3023:3;3016:4;3008:6;3004:17;3000:27;2990:2;;3041:1;3038;3031:12;2990:2;3081:6;3068:20;3106:79;3181:3;3173:6;3166:4;3158:6;3154:17;3106:79;:::i;:::-;3097:88;;2980:211;;;;;:::o;3197:139::-;3243:5;3281:6;3268:20;3259:29;;3297:33;3324:5;3297:33;:::i;:::-;3249:87;;;;:::o;3342:143::-;3399:5;3430:6;3424:13;3415:22;;3446:33;3473:5;3446:33;:::i;:::-;3405:80;;;;:::o;3491:262::-;3550:6;3599:2;3587:9;3578:7;3574:23;3570:32;3567:2;;;3615:1;3612;3605:12;3567:2;3658:1;3683:53;3728:7;3719:6;3708:9;3704:22;3683:53;:::i;:::-;3673:63;;3629:117;3557:196;;;;:::o;3759:284::-;3829:6;3878:2;3866:9;3857:7;3853:23;3849:32;3846:2;;;3894:1;3891;3884:12;3846:2;3937:1;3962:64;4018:7;4009:6;3998:9;3994:22;3962:64;:::i;:::-;3952:74;;3908:128;3836:207;;;;:::o;4049:407::-;4117:6;4125;4174:2;4162:9;4153:7;4149:23;4145:32;4142:2;;;4190:1;4187;4180:12;4142:2;4233:1;4258:53;4303:7;4294:6;4283:9;4279:22;4258:53;:::i;:::-;4248:63;;4204:117;4360:2;4386:53;4431:7;4422:6;4411:9;4407:22;4386:53;:::i;:::-;4376:63;;4331:118;4132:324;;;;;:::o;4462:552::-;4539:6;4547;4555;4604:2;4592:9;4583:7;4579:23;4575:32;4572:2;;;4620:1;4617;4610:12;4572:2;4663:1;4688:53;4733:7;4724:6;4713:9;4709:22;4688:53;:::i;:::-;4678:63;;4634:117;4790:2;4816:53;4861:7;4852:6;4841:9;4837:22;4816:53;:::i;:::-;4806:63;;4761:118;4918:2;4944:53;4989:7;4980:6;4969:9;4965:22;4944:53;:::i;:::-;4934:63;;4889:118;4562:452;;;;;:::o;5020:809::-;5115:6;5123;5131;5139;5188:3;5176:9;5167:7;5163:23;5159:33;5156:2;;;5205:1;5202;5195:12;5156:2;5248:1;5273:53;5318:7;5309:6;5298:9;5294:22;5273:53;:::i;:::-;5263:63;;5219:117;5375:2;5401:53;5446:7;5437:6;5426:9;5422:22;5401:53;:::i;:::-;5391:63;;5346:118;5503:2;5529:53;5574:7;5565:6;5554:9;5550:22;5529:53;:::i;:::-;5519:63;;5474:118;5659:2;5648:9;5644:18;5631:32;5690:18;5682:6;5679:30;5676:2;;;5722:1;5719;5712:12;5676:2;5750:62;5804:7;5795:6;5784:9;5780:22;5750:62;:::i;:::-;5740:72;;5602:220;5146:683;;;;;;;:::o;5835:401::-;5900:6;5908;5957:2;5945:9;5936:7;5932:23;5928:32;5925:2;;;5973:1;5970;5963:12;5925:2;6016:1;6041:53;6086:7;6077:6;6066:9;6062:22;6041:53;:::i;:::-;6031:63;;5987:117;6143:2;6169:50;6211:7;6202:6;6191:9;6187:22;6169:50;:::i;:::-;6159:60;;6114:115;5915:321;;;;;:::o;6242:407::-;6310:6;6318;6367:2;6355:9;6346:7;6342:23;6338:32;6335:2;;;6383:1;6380;6373:12;6335:2;6426:1;6451:53;6496:7;6487:6;6476:9;6472:22;6451:53;:::i;:::-;6441:63;;6397:117;6553:2;6579:53;6624:7;6615:6;6604:9;6600:22;6579:53;:::i;:::-;6569:63;;6524:118;6325:324;;;;;:::o;6655:420::-;6750:6;6799:2;6787:9;6778:7;6774:23;6770:32;6767:2;;;6815:1;6812;6805:12;6767:2;6879:1;6868:9;6864:17;6858:24;6909:18;6901:6;6898:30;6895:2;;;6941:1;6938;6931:12;6895:2;6969:89;7050:7;7041:6;7030:9;7026:22;6969:89;:::i;:::-;6959:99;;6829:239;6757:318;;;;:::o;7081:256::-;7137:6;7186:2;7174:9;7165:7;7161:23;7157:32;7154:2;;;7202:1;7199;7192:12;7154:2;7245:1;7270:50;7312:7;7303:6;7292:9;7288:22;7270:50;:::i;:::-;7260:60;;7216:114;7144:193;;;;:::o;7343:278::-;7410:6;7459:2;7447:9;7438:7;7434:23;7430:32;7427:2;;;7475:1;7472;7465:12;7427:2;7518:1;7543:61;7596:7;7587:6;7576:9;7572:22;7543:61;:::i;:::-;7533:71;;7489:125;7417:204;;;;:::o;7627:260::-;7685:6;7734:2;7722:9;7713:7;7709:23;7705:32;7702:2;;;7750:1;7747;7740:12;7702:2;7793:1;7818:52;7862:7;7853:6;7842:9;7838:22;7818:52;:::i;:::-;7808:62;;7764:116;7692:195;;;;:::o;7893:282::-;7962:6;8011:2;7999:9;7990:7;7986:23;7982:32;7979:2;;;8027:1;8024;8017:12;7979:2;8070:1;8095:63;8150:7;8141:6;8130:9;8126:22;8095:63;:::i;:::-;8085:73;;8041:127;7969:206;;;;:::o;8181:375::-;8250:6;8299:2;8287:9;8278:7;8274:23;8270:32;8267:2;;;8315:1;8312;8305:12;8267:2;8386:1;8375:9;8371:17;8358:31;8416:18;8408:6;8405:30;8402:2;;;8448:1;8445;8438:12;8402:2;8476:63;8531:7;8522:6;8511:9;8507:22;8476:63;:::i;:::-;8466:73;;8329:220;8257:299;;;;:::o;8562:262::-;8621:6;8670:2;8658:9;8649:7;8645:23;8641:32;8638:2;;;8686:1;8683;8676:12;8638:2;8729:1;8754:53;8799:7;8790:6;8779:9;8775:22;8754:53;:::i;:::-;8744:63;;8700:117;8628:196;;;;:::o;8830:284::-;8900:6;8949:2;8937:9;8928:7;8924:23;8920:32;8917:2;;;8965:1;8962;8955:12;8917:2;9008:1;9033:64;9089:7;9080:6;9069:9;9065:22;9033:64;:::i;:::-;9023:74;;8979:128;8907:207;;;;:::o;9120:407::-;9188:6;9196;9245:2;9233:9;9224:7;9220:23;9216:32;9213:2;;;9261:1;9258;9251:12;9213:2;9304:1;9329:53;9374:7;9365:6;9354:9;9350:22;9329:53;:::i;:::-;9319:63;;9275:117;9431:2;9457:53;9502:7;9493:6;9482:9;9478:22;9457:53;:::i;:::-;9447:63;;9402:118;9203:324;;;;;:::o;9533:179::-;9602:10;9623:46;9665:3;9657:6;9623:46;:::i;:::-;9701:4;9696:3;9692:14;9678:28;;9613:99;;;;:::o;9718:118::-;9805:24;9823:5;9805:24;:::i;:::-;9800:3;9793:37;9783:53;;:::o;9842:157::-;9947:45;9967:24;9985:5;9967:24;:::i;:::-;9947:45;:::i;:::-;9942:3;9935:58;9925:74;;:::o;10035:732::-;10154:3;10183:54;10231:5;10183:54;:::i;:::-;10253:86;10332:6;10327:3;10253:86;:::i;:::-;10246:93;;10363:56;10413:5;10363:56;:::i;:::-;10442:7;10473:1;10458:284;10483:6;10480:1;10477:13;10458:284;;;10559:6;10553:13;10586:63;10645:3;10630:13;10586:63;:::i;:::-;10579:70;;10672:60;10725:6;10672:60;:::i;:::-;10662:70;;10518:224;10505:1;10502;10498:9;10493:14;;10458:284;;;10462:14;10758:3;10751:10;;10159:608;;;;;;;:::o;10773:109::-;10854:21;10869:5;10854:21;:::i;:::-;10849:3;10842:34;10832:50;;:::o;10888:118::-;10975:24;10993:5;10975:24;:::i;:::-;10970:3;10963:37;10953:53;;:::o;11012:360::-;11098:3;11126:38;11158:5;11126:38;:::i;:::-;11180:70;11243:6;11238:3;11180:70;:::i;:::-;11173:77;;11259:52;11304:6;11299:3;11292:4;11285:5;11281:16;11259:52;:::i;:::-;11336:29;11358:6;11336:29;:::i;:::-;11331:3;11327:39;11320:46;;11102:270;;;;;:::o;11378:143::-;11471:43;11508:5;11471:43;:::i;:::-;11466:3;11459:56;11449:72;;:::o;11527:364::-;11615:3;11643:39;11676:5;11643:39;:::i;:::-;11698:71;11762:6;11757:3;11698:71;:::i;:::-;11691:78;;11778:52;11823:6;11818:3;11811:4;11804:5;11800:16;11778:52;:::i;:::-;11855:29;11877:6;11855:29;:::i;:::-;11850:3;11846:39;11839:46;;11619:272;;;;;:::o;11897:377::-;12003:3;12031:39;12064:5;12031:39;:::i;:::-;12086:89;12168:6;12163:3;12086:89;:::i;:::-;12079:96;;12184:52;12229:6;12224:3;12217:4;12210:5;12206:16;12184:52;:::i;:::-;12261:6;12256:3;12252:16;12245:23;;12007:267;;;;;:::o;12280:366::-;12422:3;12443:67;12507:2;12502:3;12443:67;:::i;:::-;12436:74;;12519:93;12608:3;12519:93;:::i;:::-;12637:2;12632:3;12628:12;12621:19;;12426:220;;;:::o;12652:366::-;12794:3;12815:67;12879:2;12874:3;12815:67;:::i;:::-;12808:74;;12891:93;12980:3;12891:93;:::i;:::-;13009:2;13004:3;13000:12;12993:19;;12798:220;;;:::o;13024:366::-;13166:3;13187:67;13251:2;13246:3;13187:67;:::i;:::-;13180:74;;13263:93;13352:3;13263:93;:::i;:::-;13381:2;13376:3;13372:12;13365:19;;13170:220;;;:::o;13396:366::-;13538:3;13559:67;13623:2;13618:3;13559:67;:::i;:::-;13552:74;;13635:93;13724:3;13635:93;:::i;:::-;13753:2;13748:3;13744:12;13737:19;;13542:220;;;:::o;13768:366::-;13910:3;13931:67;13995:2;13990:3;13931:67;:::i;:::-;13924:74;;14007:93;14096:3;14007:93;:::i;:::-;14125:2;14120:3;14116:12;14109:19;;13914:220;;;:::o;14140:366::-;14282:3;14303:67;14367:2;14362:3;14303:67;:::i;:::-;14296:74;;14379:93;14468:3;14379:93;:::i;:::-;14497:2;14492:3;14488:12;14481:19;;14286:220;;;:::o;14512:366::-;14654:3;14675:67;14739:2;14734:3;14675:67;:::i;:::-;14668:74;;14751:93;14840:3;14751:93;:::i;:::-;14869:2;14864:3;14860:12;14853:19;;14658:220;;;:::o;14884:366::-;15026:3;15047:67;15111:2;15106:3;15047:67;:::i;:::-;15040:74;;15123:93;15212:3;15123:93;:::i;:::-;15241:2;15236:3;15232:12;15225:19;;15030:220;;;:::o;15256:366::-;15398:3;15419:67;15483:2;15478:3;15419:67;:::i;:::-;15412:74;;15495:93;15584:3;15495:93;:::i;:::-;15613:2;15608:3;15604:12;15597:19;;15402:220;;;:::o;15628:366::-;15770:3;15791:67;15855:2;15850:3;15791:67;:::i;:::-;15784:74;;15867:93;15956:3;15867:93;:::i;:::-;15985:2;15980:3;15976:12;15969:19;;15774:220;;;:::o;16000:366::-;16142:3;16163:67;16227:2;16222:3;16163:67;:::i;:::-;16156:74;;16239:93;16328:3;16239:93;:::i;:::-;16357:2;16352:3;16348:12;16341:19;;16146:220;;;:::o;16372:366::-;16514:3;16535:67;16599:2;16594:3;16535:67;:::i;:::-;16528:74;;16611:93;16700:3;16611:93;:::i;:::-;16729:2;16724:3;16720:12;16713:19;;16518:220;;;:::o;16744:366::-;16886:3;16907:67;16971:2;16966:3;16907:67;:::i;:::-;16900:74;;16983:93;17072:3;16983:93;:::i;:::-;17101:2;17096:3;17092:12;17085:19;;16890:220;;;:::o;17116:366::-;17258:3;17279:67;17343:2;17338:3;17279:67;:::i;:::-;17272:74;;17355:93;17444:3;17355:93;:::i;:::-;17473:2;17468:3;17464:12;17457:19;;17262:220;;;:::o;17488:366::-;17630:3;17651:67;17715:2;17710:3;17651:67;:::i;:::-;17644:74;;17727:93;17816:3;17727:93;:::i;:::-;17845:2;17840:3;17836:12;17829:19;;17634:220;;;:::o;17860:366::-;18002:3;18023:67;18087:2;18082:3;18023:67;:::i;:::-;18016:74;;18099:93;18188:3;18099:93;:::i;:::-;18217:2;18212:3;18208:12;18201:19;;18006:220;;;:::o;18232:366::-;18374:3;18395:67;18459:2;18454:3;18395:67;:::i;:::-;18388:74;;18471:93;18560:3;18471:93;:::i;:::-;18589:2;18584:3;18580:12;18573:19;;18378:220;;;:::o;18604:366::-;18746:3;18767:67;18831:2;18826:3;18767:67;:::i;:::-;18760:74;;18843:93;18932:3;18843:93;:::i;:::-;18961:2;18956:3;18952:12;18945:19;;18750:220;;;:::o;18976:366::-;19118:3;19139:67;19203:2;19198:3;19139:67;:::i;:::-;19132:74;;19215:93;19304:3;19215:93;:::i;:::-;19333:2;19328:3;19324:12;19317:19;;19122:220;;;:::o;19348:366::-;19490:3;19511:67;19575:2;19570:3;19511:67;:::i;:::-;19504:74;;19587:93;19676:3;19587:93;:::i;:::-;19705:2;19700:3;19696:12;19689:19;;19494:220;;;:::o;19720:366::-;19862:3;19883:67;19947:2;19942:3;19883:67;:::i;:::-;19876:74;;19959:93;20048:3;19959:93;:::i;:::-;20077:2;20072:3;20068:12;20061:19;;19866:220;;;:::o;20092:366::-;20234:3;20255:67;20319:2;20314:3;20255:67;:::i;:::-;20248:74;;20331:93;20420:3;20331:93;:::i;:::-;20449:2;20444:3;20440:12;20433:19;;20238:220;;;:::o;20464:366::-;20606:3;20627:67;20691:2;20686:3;20627:67;:::i;:::-;20620:74;;20703:93;20792:3;20703:93;:::i;:::-;20821:2;20816:3;20812:12;20805:19;;20610:220;;;:::o;20836:366::-;20978:3;20999:67;21063:2;21058:3;20999:67;:::i;:::-;20992:74;;21075:93;21164:3;21075:93;:::i;:::-;21193:2;21188:3;21184:12;21177:19;;20982:220;;;:::o;21208:366::-;21350:3;21371:67;21435:2;21430:3;21371:67;:::i;:::-;21364:74;;21447:93;21536:3;21447:93;:::i;:::-;21565:2;21560:3;21556:12;21549:19;;21354:220;;;:::o;21580:366::-;21722:3;21743:67;21807:2;21802:3;21743:67;:::i;:::-;21736:74;;21819:93;21908:3;21819:93;:::i;:::-;21937:2;21932:3;21928:12;21921:19;;21726:220;;;:::o;21952:366::-;22094:3;22115:67;22179:2;22174:3;22115:67;:::i;:::-;22108:74;;22191:93;22280:3;22191:93;:::i;:::-;22309:2;22304:3;22300:12;22293:19;;22098:220;;;:::o;22324:108::-;22401:24;22419:5;22401:24;:::i;:::-;22396:3;22389:37;22379:53;;:::o;22438:118::-;22525:24;22543:5;22525:24;:::i;:::-;22520:3;22513:37;22503:53;;:::o;22562:157::-;22667:45;22687:24;22705:5;22687:24;:::i;:::-;22667:45;:::i;:::-;22662:3;22655:58;22645:74;;:::o;22725:112::-;22808:22;22824:5;22808:22;:::i;:::-;22803:3;22796:35;22786:51;;:::o;22843:435::-;23023:3;23045:95;23136:3;23127:6;23045:95;:::i;:::-;23038:102;;23157:95;23248:3;23239:6;23157:95;:::i;:::-;23150:102;;23269:3;23262:10;;23027:251;;;;;:::o;23284:679::-;23480:3;23495:75;23566:3;23557:6;23495:75;:::i;:::-;23595:2;23590:3;23586:12;23579:19;;23608:75;23679:3;23670:6;23608:75;:::i;:::-;23708:2;23703:3;23699:12;23692:19;;23721:75;23792:3;23783:6;23721:75;:::i;:::-;23821:2;23816:3;23812:12;23805:19;;23834:75;23905:3;23896:6;23834:75;:::i;:::-;23934:2;23929:3;23925:12;23918:19;;23954:3;23947:10;;23484:479;;;;;;;:::o;23969:222::-;24062:4;24100:2;24089:9;24085:18;24077:26;;24113:71;24181:1;24170:9;24166:17;24157:6;24113:71;:::i;:::-;24067:124;;;;:::o;24197:332::-;24318:4;24356:2;24345:9;24341:18;24333:26;;24369:71;24437:1;24426:9;24422:17;24413:6;24369:71;:::i;:::-;24450:72;24518:2;24507:9;24503:18;24494:6;24450:72;:::i;:::-;24323:206;;;;;:::o;24535:640::-;24730:4;24768:3;24757:9;24753:19;24745:27;;24782:71;24850:1;24839:9;24835:17;24826:6;24782:71;:::i;:::-;24863:72;24931:2;24920:9;24916:18;24907:6;24863:72;:::i;:::-;24945;25013:2;25002:9;24998:18;24989:6;24945:72;:::i;:::-;25064:9;25058:4;25054:20;25049:2;25038:9;25034:18;25027:48;25092:76;25163:4;25154:6;25092:76;:::i;:::-;25084:84;;24735:440;;;;;;;:::o;25181:344::-;25308:4;25346:2;25335:9;25331:18;25323:26;;25359:71;25427:1;25416:9;25412:17;25403:6;25359:71;:::i;:::-;25440:78;25514:2;25503:9;25499:18;25490:6;25440:78;:::i;:::-;25313:212;;;;;:::o;25531:332::-;25652:4;25690:2;25679:9;25675:18;25667:26;;25703:71;25771:1;25760:9;25756:17;25747:6;25703:71;:::i;:::-;25784:72;25852:2;25841:9;25837:18;25828:6;25784:72;:::i;:::-;25657:206;;;;;:::o;25869:373::-;26012:4;26050:2;26039:9;26035:18;26027:26;;26099:9;26093:4;26089:20;26085:1;26074:9;26070:17;26063:47;26127:108;26230:4;26221:6;26127:108;:::i;:::-;26119:116;;26017:225;;;;:::o;26248:210::-;26335:4;26373:2;26362:9;26358:18;26350:26;;26386:65;26448:1;26437:9;26433:17;26424:6;26386:65;:::i;:::-;26340:118;;;;:::o;26464:313::-;26577:4;26615:2;26604:9;26600:18;26592:26;;26664:9;26658:4;26654:20;26650:1;26639:9;26635:17;26628:47;26692:78;26765:4;26756:6;26692:78;:::i;:::-;26684:86;;26582:195;;;;:::o;26783:419::-;26949:4;26987:2;26976:9;26972:18;26964:26;;27036:9;27030:4;27026:20;27022:1;27011:9;27007:17;27000:47;27064:131;27190:4;27064:131;:::i;:::-;27056:139;;26954:248;;;:::o;27208:419::-;27374:4;27412:2;27401:9;27397:18;27389:26;;27461:9;27455:4;27451:20;27447:1;27436:9;27432:17;27425:47;27489:131;27615:4;27489:131;:::i;:::-;27481:139;;27379:248;;;:::o;27633:419::-;27799:4;27837:2;27826:9;27822:18;27814:26;;27886:9;27880:4;27876:20;27872:1;27861:9;27857:17;27850:47;27914:131;28040:4;27914:131;:::i;:::-;27906:139;;27804:248;;;:::o;28058:419::-;28224:4;28262:2;28251:9;28247:18;28239:26;;28311:9;28305:4;28301:20;28297:1;28286:9;28282:17;28275:47;28339:131;28465:4;28339:131;:::i;:::-;28331:139;;28229:248;;;:::o;28483:419::-;28649:4;28687:2;28676:9;28672:18;28664:26;;28736:9;28730:4;28726:20;28722:1;28711:9;28707:17;28700:47;28764:131;28890:4;28764:131;:::i;:::-;28756:139;;28654:248;;;:::o;28908:419::-;29074:4;29112:2;29101:9;29097:18;29089:26;;29161:9;29155:4;29151:20;29147:1;29136:9;29132:17;29125:47;29189:131;29315:4;29189:131;:::i;:::-;29181:139;;29079:248;;;:::o;29333:419::-;29499:4;29537:2;29526:9;29522:18;29514:26;;29586:9;29580:4;29576:20;29572:1;29561:9;29557:17;29550:47;29614:131;29740:4;29614:131;:::i;:::-;29606:139;;29504:248;;;:::o;29758:419::-;29924:4;29962:2;29951:9;29947:18;29939:26;;30011:9;30005:4;30001:20;29997:1;29986:9;29982:17;29975:47;30039:131;30165:4;30039:131;:::i;:::-;30031:139;;29929:248;;;:::o;30183:419::-;30349:4;30387:2;30376:9;30372:18;30364:26;;30436:9;30430:4;30426:20;30422:1;30411:9;30407:17;30400:47;30464:131;30590:4;30464:131;:::i;:::-;30456:139;;30354:248;;;:::o;30608:419::-;30774:4;30812:2;30801:9;30797:18;30789:26;;30861:9;30855:4;30851:20;30847:1;30836:9;30832:17;30825:47;30889:131;31015:4;30889:131;:::i;:::-;30881:139;;30779:248;;;:::o;31033:419::-;31199:4;31237:2;31226:9;31222:18;31214:26;;31286:9;31280:4;31276:20;31272:1;31261:9;31257:17;31250:47;31314:131;31440:4;31314:131;:::i;:::-;31306:139;;31204:248;;;:::o;31458:419::-;31624:4;31662:2;31651:9;31647:18;31639:26;;31711:9;31705:4;31701:20;31697:1;31686:9;31682:17;31675:47;31739:131;31865:4;31739:131;:::i;:::-;31731:139;;31629:248;;;:::o;31883:419::-;32049:4;32087:2;32076:9;32072:18;32064:26;;32136:9;32130:4;32126:20;32122:1;32111:9;32107:17;32100:47;32164:131;32290:4;32164:131;:::i;:::-;32156:139;;32054:248;;;:::o;32308:419::-;32474:4;32512:2;32501:9;32497:18;32489:26;;32561:9;32555:4;32551:20;32547:1;32536:9;32532:17;32525:47;32589:131;32715:4;32589:131;:::i;:::-;32581:139;;32479:248;;;:::o;32733:419::-;32899:4;32937:2;32926:9;32922:18;32914:26;;32986:9;32980:4;32976:20;32972:1;32961:9;32957:17;32950:47;33014:131;33140:4;33014:131;:::i;:::-;33006:139;;32904:248;;;:::o;33158:419::-;33324:4;33362:2;33351:9;33347:18;33339:26;;33411:9;33405:4;33401:20;33397:1;33386:9;33382:17;33375:47;33439:131;33565:4;33439:131;:::i;:::-;33431:139;;33329:248;;;:::o;33583:419::-;33749:4;33787:2;33776:9;33772:18;33764:26;;33836:9;33830:4;33826:20;33822:1;33811:9;33807:17;33800:47;33864:131;33990:4;33864:131;:::i;:::-;33856:139;;33754:248;;;:::o;34008:419::-;34174:4;34212:2;34201:9;34197:18;34189:26;;34261:9;34255:4;34251:20;34247:1;34236:9;34232:17;34225:47;34289:131;34415:4;34289:131;:::i;:::-;34281:139;;34179:248;;;:::o;34433:419::-;34599:4;34637:2;34626:9;34622:18;34614:26;;34686:9;34680:4;34676:20;34672:1;34661:9;34657:17;34650:47;34714:131;34840:4;34714:131;:::i;:::-;34706:139;;34604:248;;;:::o;34858:419::-;35024:4;35062:2;35051:9;35047:18;35039:26;;35111:9;35105:4;35101:20;35097:1;35086:9;35082:17;35075:47;35139:131;35265:4;35139:131;:::i;:::-;35131:139;;35029:248;;;:::o;35283:419::-;35449:4;35487:2;35476:9;35472:18;35464:26;;35536:9;35530:4;35526:20;35522:1;35511:9;35507:17;35500:47;35564:131;35690:4;35564:131;:::i;:::-;35556:139;;35454:248;;;:::o;35708:419::-;35874:4;35912:2;35901:9;35897:18;35889:26;;35961:9;35955:4;35951:20;35947:1;35936:9;35932:17;35925:47;35989:131;36115:4;35989:131;:::i;:::-;35981:139;;35879:248;;;:::o;36133:419::-;36299:4;36337:2;36326:9;36322:18;36314:26;;36386:9;36380:4;36376:20;36372:1;36361:9;36357:17;36350:47;36414:131;36540:4;36414:131;:::i;:::-;36406:139;;36304:248;;;:::o;36558:419::-;36724:4;36762:2;36751:9;36747:18;36739:26;;36811:9;36805:4;36801:20;36797:1;36786:9;36782:17;36775:47;36839:131;36965:4;36839:131;:::i;:::-;36831:139;;36729:248;;;:::o;36983:419::-;37149:4;37187:2;37176:9;37172:18;37164:26;;37236:9;37230:4;37226:20;37222:1;37211:9;37207:17;37200:47;37264:131;37390:4;37264:131;:::i;:::-;37256:139;;37154:248;;;:::o;37408:419::-;37574:4;37612:2;37601:9;37597:18;37589:26;;37661:9;37655:4;37651:20;37647:1;37636:9;37632:17;37625:47;37689:131;37815:4;37689:131;:::i;:::-;37681:139;;37579:248;;;:::o;37833:419::-;37999:4;38037:2;38026:9;38022:18;38014:26;;38086:9;38080:4;38076:20;38072:1;38061:9;38057:17;38050:47;38114:131;38240:4;38114:131;:::i;:::-;38106:139;;38004:248;;;:::o;38258:222::-;38351:4;38389:2;38378:9;38374:18;38366:26;;38402:71;38470:1;38459:9;38455:17;38446:6;38402:71;:::i;:::-;38356:124;;;;:::o;38486:664::-;38691:4;38729:3;38718:9;38714:19;38706:27;;38743:71;38811:1;38800:9;38796:17;38787:6;38743:71;:::i;:::-;38824:72;38892:2;38881:9;38877:18;38868:6;38824:72;:::i;:::-;38906;38974:2;38963:9;38959:18;38950:6;38906:72;:::i;:::-;38988;39056:2;39045:9;39041:18;39032:6;38988:72;:::i;:::-;39070:73;39138:3;39127:9;39123:19;39114:6;39070:73;:::i;:::-;38696:454;;;;;;;;:::o;39156:316::-;39269:4;39307:2;39296:9;39292:18;39284:26;;39320:67;39384:1;39373:9;39369:17;39360:6;39320:67;:::i;:::-;39397:68;39461:2;39450:9;39446:18;39437:6;39397:68;:::i;:::-;39274:198;;;;;:::o;39478:129::-;39512:6;39539:20;;:::i;:::-;39529:30;;39568:33;39596:4;39588:6;39568:33;:::i;:::-;39519:88;;;:::o;39613:75::-;39646:6;39679:2;39673:9;39663:19;;39653:35;:::o;39694:311::-;39771:4;39861:18;39853:6;39850:30;39847:2;;;39883:18;;:::i;:::-;39847:2;39933:4;39925:6;39921:17;39913:25;;39993:4;39987;39983:15;39975:23;;39776:229;;;:::o;40011:307::-;40072:4;40162:18;40154:6;40151:30;40148:2;;;40184:18;;:::i;:::-;40148:2;40222:29;40244:6;40222:29;:::i;:::-;40214:37;;40306:4;40300;40296:15;40288:23;;40077:241;;;:::o;40324:308::-;40386:4;40476:18;40468:6;40465:30;40462:2;;;40498:18;;:::i;:::-;40462:2;40536:29;40558:6;40536:29;:::i;:::-;40528:37;;40620:4;40614;40610:15;40602:23;;40391:241;;;:::o;40638:132::-;40705:4;40728:3;40720:11;;40758:4;40753:3;40749:14;40741:22;;40710:60;;;:::o;40776:114::-;40843:6;40877:5;40871:12;40861:22;;40850:40;;;:::o;40896:98::-;40947:6;40981:5;40975:12;40965:22;;40954:40;;;:::o;41000:99::-;41052:6;41086:5;41080:12;41070:22;;41059:40;;;:::o;41105:113::-;41175:4;41207;41202:3;41198:14;41190:22;;41180:38;;;:::o;41224:184::-;41323:11;41357:6;41352:3;41345:19;41397:4;41392:3;41388:14;41373:29;;41335:73;;;;:::o;41414:168::-;41497:11;41531:6;41526:3;41519:19;41571:4;41566:3;41562:14;41547:29;;41509:73;;;;:::o;41588:169::-;41672:11;41706:6;41701:3;41694:19;41746:4;41741:3;41737:14;41722:29;;41684:73;;;;:::o;41763:148::-;41865:11;41902:3;41887:18;;41877:34;;;;:::o;41917:305::-;41957:3;41976:20;41994:1;41976:20;:::i;:::-;41971:25;;42010:20;42028:1;42010:20;:::i;:::-;42005:25;;42164:1;42096:66;42092:74;42089:1;42086:81;42083:2;;;42170:18;;:::i;:::-;42083:2;42214:1;42211;42207:9;42200:16;;41961:261;;;;:::o;42228:185::-;42268:1;42285:20;42303:1;42285:20;:::i;:::-;42280:25;;42319:20;42337:1;42319:20;:::i;:::-;42314:25;;42358:1;42348:2;;42363:18;;:::i;:::-;42348:2;42405:1;42402;42398:9;42393:14;;42270:143;;;;:::o;42419:348::-;42459:7;42482:20;42500:1;42482:20;:::i;:::-;42477:25;;42516:20;42534:1;42516:20;:::i;:::-;42511:25;;42704:1;42636:66;42632:74;42629:1;42626:81;42621:1;42614:9;42607:17;42603:105;42600:2;;;42711:18;;:::i;:::-;42600:2;42759:1;42756;42752:9;42741:20;;42467:300;;;;:::o;42773:191::-;42813:4;42833:20;42851:1;42833:20;:::i;:::-;42828:25;;42867:20;42885:1;42867:20;:::i;:::-;42862:25;;42906:1;42903;42900:8;42897:2;;;42911:18;;:::i;:::-;42897:2;42956:1;42953;42949:9;42941:17;;42818:146;;;;:::o;42970:96::-;43007:7;43036:24;43054:5;43036:24;:::i;:::-;43025:35;;43015:51;;;:::o;43072:90::-;43106:7;43149:5;43142:13;43135:21;43124:32;;43114:48;;;:::o;43168:77::-;43205:7;43234:5;43223:16;;43213:32;;;:::o;43251:149::-;43287:7;43327:66;43320:5;43316:78;43305:89;;43295:105;;;:::o;43406:126::-;43443:7;43483:42;43476:5;43472:54;43461:65;;43451:81;;;:::o;43538:77::-;43575:7;43604:5;43593:16;;43583:32;;;:::o;43621:86::-;43656:7;43696:4;43689:5;43685:16;43674:27;;43664:43;;;:::o;43713:117::-;43769:9;43802:22;43818:5;43802:22;:::i;:::-;43789:35;;43779:51;;;:::o;43836:154::-;43920:6;43915:3;43910;43897:30;43982:1;43973:6;43968:3;43964:16;43957:27;43887:103;;;:::o;43996:307::-;44064:1;44074:113;44088:6;44085:1;44082:13;44074:113;;;44173:1;44168:3;44164:11;44158:18;44154:1;44149:3;44145:11;44138:39;44110:2;44107:1;44103:10;44098:15;;44074:113;;;44205:6;44202:1;44199:13;44196:2;;;44285:1;44276:6;44271:3;44267:16;44260:27;44196:2;44045:258;;;;:::o;44309:320::-;44353:6;44390:1;44384:4;44380:12;44370:22;;44437:1;44431:4;44427:12;44458:18;44448:2;;44514:4;44506:6;44502:17;44492:27;;44448:2;44576;44568:6;44565:14;44545:18;44542:38;44539:2;;;44595:18;;:::i;:::-;44539:2;44360:269;;;;:::o;44635:281::-;44718:27;44740:4;44718:27;:::i;:::-;44710:6;44706:40;44848:6;44836:10;44833:22;44812:18;44800:10;44797:34;44794:62;44791:2;;;44859:18;;:::i;:::-;44791:2;44899:10;44895:2;44888:22;44678:238;;;:::o;44922:233::-;44961:3;44984:24;45002:5;44984:24;:::i;:::-;44975:33;;45030:66;45023:5;45020:77;45017:2;;;45100:18;;:::i;:::-;45017:2;45147:1;45140:5;45136:13;45129:20;;44965:190;;;:::o;45161:100::-;45200:7;45229:26;45249:5;45229:26;:::i;:::-;45218:37;;45208:53;;;:::o;45267:94::-;45306:7;45335:20;45349:5;45335:20;:::i;:::-;45324:31;;45314:47;;;:::o;45367:79::-;45406:7;45435:5;45424:16;;45414:32;;;:::o;45452:176::-;45484:1;45501:20;45519:1;45501:20;:::i;:::-;45496:25;;45535:20;45553:1;45535:20;:::i;:::-;45530:25;;45574:1;45564:2;;45579:18;;:::i;:::-;45564:2;45620:1;45617;45613:9;45608:14;;45486:142;;;;:::o;45634:180::-;45682:77;45679:1;45672:88;45779:4;45776:1;45769:15;45803:4;45800:1;45793:15;45820:180;45868:77;45865:1;45858:88;45965:4;45962:1;45955:15;45989:4;45986:1;45979:15;46006:180;46054:77;46051:1;46044:88;46151:4;46148:1;46141:15;46175:4;46172:1;46165:15;46192:180;46240:77;46237:1;46230:88;46337:4;46334:1;46327:15;46361:4;46358:1;46351:15;46378:102;46419:6;46470:2;46466:7;46461:2;46454:5;46450:14;46446:28;46436:38;;46426:54;;;:::o;46486:94::-;46519:8;46567:5;46563:2;46559:14;46538:35;;46528:52;;;:::o;46586:230::-;46726:34;46722:1;46714:6;46710:14;46703:58;46795:13;46790:2;46782:6;46778:15;46771:38;46692:124;:::o;46822:230::-;46962:34;46958:1;46950:6;46946:14;46939:58;47031:13;47026:2;47018:6;47014:15;47007:38;46928:124;:::o;47058:237::-;47198:34;47194:1;47186:6;47182:14;47175:58;47267:20;47262:2;47254:6;47250:15;47243:45;47164:131;:::o;47301:225::-;47441:34;47437:1;47429:6;47425:14;47418:58;47510:8;47505:2;47497:6;47493:15;47486:33;47407:119;:::o;47532:224::-;47672:34;47668:1;47660:6;47656:14;47649:58;47741:7;47736:2;47728:6;47724:15;47717:32;47638:118;:::o;47762:178::-;47902:30;47898:1;47890:6;47886:14;47879:54;47868:72;:::o;47946:223::-;48086:34;48082:1;48074:6;48070:14;48063:58;48155:6;48150:2;48142:6;48138:15;48131:31;48052:117;:::o;48175:230::-;48315:34;48311:1;48303:6;48299:14;48292:58;48384:13;48379:2;48371:6;48367:15;48360:38;48281:124;:::o;48411:175::-;48551:27;48547:1;48539:6;48535:14;48528:51;48517:69;:::o;48592:225::-;48732:34;48728:1;48720:6;48716:14;48709:58;48801:8;48796:2;48788:6;48784:15;48777:33;48698:119;:::o;48823:237::-;48963:34;48959:1;48951:6;48947:14;48940:58;49032:20;49027:2;49019:6;49015:15;49008:45;48929:131;:::o;49066:231::-;49206:34;49202:1;49194:6;49190:14;49183:58;49275:14;49270:2;49262:6;49258:15;49251:39;49172:125;:::o;49303:243::-;49443:34;49439:1;49431:6;49427:14;49420:58;49512:26;49507:2;49499:6;49495:15;49488:51;49409:137;:::o;49552:229::-;49692:34;49688:1;49680:6;49676:14;49669:58;49761:12;49756:2;49748:6;49744:15;49737:37;49658:123;:::o;49787:228::-;49927:34;49923:1;49915:6;49911:14;49904:58;49996:11;49991:2;49983:6;49979:15;49972:36;49893:122;:::o;50021:182::-;50161:34;50157:1;50149:6;50145:14;50138:58;50127:76;:::o;50209:231::-;50349:34;50345:1;50337:6;50333:14;50326:58;50418:14;50413:2;50405:6;50401:15;50394:39;50315:125;:::o;50446:182::-;50586:34;50582:1;50574:6;50570:14;50563:58;50552:76;:::o;50634:224::-;50774:34;50770:1;50762:6;50758:14;50751:58;50843:7;50838:2;50830:6;50826:15;50819:32;50740:118;:::o;50864:234::-;51004:34;51000:1;50992:6;50988:14;50981:58;51073:17;51068:2;51060:6;51056:15;51049:42;50970:128;:::o;51104:231::-;51244:34;51240:1;51232:6;51228:14;51221:58;51313:14;51308:2;51300:6;51296:15;51289:39;51210:125;:::o;51341:220::-;51481:34;51477:1;51469:6;51465:14;51458:58;51550:3;51545:2;51537:6;51533:15;51526:28;51447:114;:::o;51567:236::-;51707:34;51703:1;51695:6;51691:14;51684:58;51776:19;51771:2;51763:6;51759:15;51752:44;51673:130;:::o;51809:236::-;51949:34;51945:1;51937:6;51933:14;51926:58;52018:19;52013:2;52005:6;52001:15;51994:44;51915:130;:::o;52051:227::-;52191:34;52187:1;52179:6;52175:14;52168:58;52260:10;52255:2;52247:6;52243:15;52236:35;52157:121;:::o;52284:231::-;52424:34;52420:1;52412:6;52408:14;52401:58;52493:14;52488:2;52480:6;52476:15;52469:39;52390:125;:::o;52521:234::-;52661:34;52657:1;52649:6;52645:14;52638:58;52730:17;52725:2;52717:6;52713:15;52706:42;52627:128;:::o;52761:122::-;52834:24;52852:5;52834:24;:::i;:::-;52827:5;52824:35;52814:2;;52873:1;52870;52863:12;52814:2;52804:79;:::o;52889:116::-;52959:21;52974:5;52959:21;:::i;:::-;52952:5;52949:32;52939:2;;52995:1;52992;52985:12;52939:2;52929:76;:::o;53011:120::-;53083:23;53100:5;53083:23;:::i;:::-;53076:5;53073:34;53063:2;;53121:1;53118;53111:12;53063:2;53053:78;:::o;53137:122::-;53210:24;53228:5;53210:24;:::i;:::-;53203:5;53200:35;53190:2;;53249:1;53246;53239:12;53190:2;53180:79;:::o

Swarm Source

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