ETH Price: $3,481.37 (+0.94%)

Token

POCKETBLOCKS (PB)
 

Overview

Max Total Supply

4,600 PB

Holders

404

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
e4c4.eth
0x99d529f064cb498ef7b3798042194175da1f4d8a
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:
POCKETBLOCKS

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

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

pragma solidity ^0.8.13;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./libraries/Base64.sol";

// @author mande.eth
contract POCKETBLOCKS is ERC1155, Ownable {
  string public constant name = "POCKETBLOCKS";
  string public constant symbol = "PB";

  string[2][] private _items;

  string private constant _name1 = '{"name": "';
  string private constant _imag1 = '", "image": "data:image/svg+xml;base64,';
  string private constant _imag2 = '"}';

  constructor() ERC1155(""){}

  function uri(uint256 tokenId_) public view virtual override returns(string memory){
    string memory tokenName = _items[tokenId_ - 1][0];
    string memory tokenSVG = Base64.encode(bytes(_items[tokenId_ - 1][1]));
    string memory encodedJson = Base64.encode(abi.encodePacked(_name1, tokenName, _imag1, tokenSVG, _imag2));

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

  function create(string calldata svg_, string calldata name_, uint256 editions_) external onlyOwner {
    _items.push([name_, svg_]);
    _mint(msg.sender, _items.length, editions_, "");
  }

  // Emergency
  function update(uint256 tokenId_, string calldata name_, string calldata svg_) external onlyOwner {
    _items[tokenId_ - 1] = [name_, svg_];
  }
}

File 2 of 11 : Base64.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

/// [MIT License]
/// @title Base64
/// @notice Provides a function for encoding some bytes in base64
/// @author Brecht Devos <[email protected]>
library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);
        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)
            for {
                let i := 0
            } lt(i, len) {
            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)
                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)
                mstore(resultPtr, out)
                resultPtr := add(resultPtr, 4)
            }
            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
            mstore(result, encodedLen)
        }
        return string(result);
    }
}

File 3 of 11 : 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);
    }
}

File 4 of 11 : ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @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, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 5 of 11 : 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 6 of 11 : 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 7 of 11 : 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 8 of 11 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "../IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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

pragma solidity ^0.8.0;

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

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 10 of 11 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 11 of 11 : 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);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"svg_","type":"string"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"uint256","name":"editions_","type":"uint256"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"svg_","type":"string"}],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200005a60201b60201c565b5062000054620000486200007660201b60201c565b6200007e60201b60201c565b62000258565b80600290805190602001906200007292919062000144565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001529062000223565b90600052602060002090601f016020900481019282620001765760008555620001c2565b82601f106200019157805160ff1916838001178555620001c2565b82800160010185558215620001c2579182015b82811115620001c1578251825591602001919060010190620001a4565b5b509050620001d19190620001d5565b5090565b5b80821115620001f0576000816000905550600101620001d6565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200023c57607f821691505b602082108103620002525762000251620001f4565b5b50919050565b6138cd80620002686000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c8063715018a611610097578063e985e9c511610066578063e985e9c514610271578063f242432a146102a1578063f2fde38b146102bd578063f95e0a54146102d9576100f4565b8063715018a61461020f5780638da5cb5b1461021957806395d89b4114610237578063a22cb46514610255576100f4565b80630e89341c116100d35780630e89341c146101775780632eb2c2d6146101a75780633ca6d100146101c35780634e1273f4146101df576100f4565b8062fdd58e146100f957806301ffc9a71461012957806306fdde0314610159575b600080fd5b610113600480360381019061010e9190612122565b6102f5565b6040516101209190612171565b60405180910390f35b610143600480360381019061013e91906121e4565b6103bd565b604051610150919061222c565b60405180910390f35b61016161049f565b60405161016e91906122e0565b60405180910390f35b610191600480360381019061018c9190612302565b6104d8565b60405161019e91906122e0565b60405180910390f35b6101c160048036038101906101bc919061252c565b610760565b005b6101dd60048036038101906101d89190612656565b610801565b005b6101f960048036038101906101f491906127ae565b61097b565b60405161020691906128e4565b60405180910390f35b610217610a94565b005b610221610b1c565b60405161022e9190612915565b60405180910390f35b61023f610b46565b60405161024c91906122e0565b60405180910390f35b61026f600480360381019061026a919061295c565b610b7f565b005b61028b6004803603810190610286919061299c565b610b95565b604051610298919061222c565b60405180910390f35b6102bb60048036038101906102b691906129dc565b610c29565b005b6102d760048036038101906102d29190612a73565b610cca565b005b6102f360048036038101906102ee9190612aa0565b610dc1565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035c90612ba7565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610498575061049782610f1e565b5b9050919050565b6040518060400160405280600c81526020017f504f434b4554424c4f434b53000000000000000000000000000000000000000081525081565b6060600060046001846104eb9190612bf6565b815481106104fc576104fb612c2a565b5b906000526020600020906002020160006002811061051d5761051c612c2a565b5b01805461052990612c88565b80601f016020809104026020016040519081016040528092919081815260200182805461055590612c88565b80156105a25780601f10610577576101008083540402835291602001916105a2565b820191906000526020600020905b81548152906001019060200180831161058557829003601f168201915b50505050509050600061067e60046001866105bd9190612bf6565b815481106105ce576105cd612c2a565b5b90600052602060002090600202016001600281106105ef576105ee612c2a565b5b0180546105fb90612c88565b80601f016020809104026020016040519081016040528092919081815260200182805461062790612c88565b80156106745780601f1061064957610100808354040283529160200191610674565b820191906000526020600020905b81548152906001019060200180831161065757829003601f168201915b5050505050610f88565b905060006107346040518060400160405280600a81526020017f7b226e616d65223a2022000000000000000000000000000000000000000000008152508460405180606001604052806027815260200161387160279139856040518060400160405280600281526020017f227d000000000000000000000000000000000000000000000000000000000000815250604051602001610720959493929190612cf5565b604051602081830303815290604052610f88565b9050806040516020016107479190612d8c565b6040516020818303038152906040529350505050919050565b61076861111f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107ae57506107ad856107a861111f565b610b95565b5b6107ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e490612e20565b60405180910390fd5b6107fa8585858585611127565b5050505050565b61080961111f565b73ffffffffffffffffffffffffffffffffffffffff16610827610b1c565b73ffffffffffffffffffffffffffffffffffffffff161461087d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087490612e8c565b60405180910390fd5b6004604051806040016040528085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815260200187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509080600181540180825580915050600190039060005260206000209060020201600090919091909150906002610953929190611f20565b50610974336004805490508360405180602001604052806000815250611448565b5050505050565b606081518351146109c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b890612f1e565b60405180910390fd5b6000835167ffffffffffffffff8111156109de576109dd612334565b5b604051908082528060200260200182016040528015610a0c5781602001602082028036833780820191505090505b50905060005b8451811015610a8957610a59858281518110610a3157610a30612c2a565b5b6020026020010151858381518110610a4c57610a4b612c2a565b5b60200260200101516102f5565b828281518110610a6c57610a6b612c2a565b5b60200260200101818152505080610a8290612f3e565b9050610a12565b508091505092915050565b610a9c61111f565b73ffffffffffffffffffffffffffffffffffffffff16610aba610b1c565b73ffffffffffffffffffffffffffffffffffffffff1614610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0790612e8c565b60405180910390fd5b610b1a60006115f8565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600281526020017f504200000000000000000000000000000000000000000000000000000000000081525081565b610b91610b8a61111f565b83836116be565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c3161111f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c775750610c7685610c7161111f565b610b95565b5b610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90612ff8565b60405180910390fd5b610cc3858585858561182a565b5050505050565b610cd261111f565b73ffffffffffffffffffffffffffffffffffffffff16610cf0610b1c565b73ffffffffffffffffffffffffffffffffffffffff1614610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90612e8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac9061308a565b60405180910390fd5b610dbe816115f8565b50565b610dc961111f565b73ffffffffffffffffffffffffffffffffffffffff16610de7610b1c565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490612e8c565b60405180910390fd5b604051806040016040528085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152506004600187610ee99190612bf6565b81548110610efa57610ef9612c2a565b5b9060005260206000209060020201906002610f16929190611f20565b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008251905060008103610fb0576040518060200160405280600081525091505061111a565b60006003600283610fc191906130aa565b610fcb919061312f565b6004610fd79190613160565b90506000602082610fe891906130aa565b67ffffffffffffffff81111561100157611000612334565b5b6040519080825280601f01601f1916602001820160405280156110335781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001613831604091399050600181016020830160005b868110156110d75760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061105e565b5060038606600181146110f157600281146111015761110c565b613d3d60f01b600283035261110c565b603d60f81b60018303525b508484525050819450505050505b919050565b600033905090565b815183511461116b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111629061322c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d1906132be565b60405180910390fd5b60006111e461111f565b90506111f4818787878787611ac5565b60005b84518110156113a557600085828151811061121557611214612c2a565b5b60200260200101519050600085838151811061123457611233612c2a565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613350565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461138a91906130aa565b925050819055505050508061139e90612f3e565b90506111f7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161141c929190613370565b60405180910390a4611432818787878787611acd565b611440818787878787611ad5565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90613419565b60405180910390fd5b60006114c161111f565b905060006114ce85611cac565b905060006114db85611cac565b90506114ec83600089858589611ac5565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461154b91906130aa565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516115c9929190613439565b60405180910390a46115e083600089858589611acd565b6115ef83600089898989611d26565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361172c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611723906134d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161181d919061222c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611890906132be565b60405180910390fd5b60006118a361111f565b905060006118b085611cac565b905060006118bd85611cac565b90506118cd838989858589611ac5565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613350565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a1991906130aa565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611a96929190613439565b60405180910390a4611aac848a8a86868a611acd565b611aba848a8a8a8a8a611d26565b505050505050505050565b505050505050565b505050505050565b611af48473ffffffffffffffffffffffffffffffffffffffff16611efd565b15611ca4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b3a959493929190613549565b6020604051808303816000875af1925050508015611b7657506040513d601f19601f82011682018060405250810190611b7391906135c6565b60015b611c1b57611b82613600565b806308c379a003611bde5750611b96613622565b80611ba15750611be0565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd591906122e0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613724565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c99906137b6565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611ccb57611cca612334565b5b604051908082528060200260200182016040528015611cf95781602001602082028036833780820191505090505b5090508281600081518110611d1157611d10612c2a565b5b60200260200101818152505080915050919050565b611d458473ffffffffffffffffffffffffffffffffffffffff16611efd565b15611ef5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d8b9594939291906137d6565b6020604051808303816000875af1925050508015611dc757506040513d601f19601f82011682018060405250810190611dc491906135c6565b60015b611e6c57611dd3613600565b806308c379a003611e2f5750611de7613622565b80611df25750611e31565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2691906122e0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6390613724565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea906137b6565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8260028101928215611f62579160200282015b82811115611f61578251829080519060200190611f51929190611f73565b5091602001919060010190611f33565b5b509050611f6f9190611ff9565b5090565b828054611f7f90612c88565b90600052602060002090601f016020900481019282611fa15760008555611fe8565b82601f10611fba57805160ff1916838001178555611fe8565b82800160010185558215611fe8579182015b82811115611fe7578251825591602001919060010190611fcc565b5b509050611ff5919061201d565b5090565b5b808211156120195760008181612010919061203a565b50600101611ffa565b5090565b5b8082111561203657600081600090555060010161201e565b5090565b50805461204690612c88565b6000825580601f106120585750612077565b601f016020900490600052602060002090810190612076919061201d565b5b50565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120b98261208e565b9050919050565b6120c9816120ae565b81146120d457600080fd5b50565b6000813590506120e6816120c0565b92915050565b6000819050919050565b6120ff816120ec565b811461210a57600080fd5b50565b60008135905061211c816120f6565b92915050565b6000806040838503121561213957612138612084565b5b6000612147858286016120d7565b92505060206121588582860161210d565b9150509250929050565b61216b816120ec565b82525050565b60006020820190506121866000830184612162565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6121c18161218c565b81146121cc57600080fd5b50565b6000813590506121de816121b8565b92915050565b6000602082840312156121fa576121f9612084565b5b6000612208848285016121cf565b91505092915050565b60008115159050919050565b61222681612211565b82525050565b6000602082019050612241600083018461221d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612281578082015181840152602081019050612266565b83811115612290576000848401525b50505050565b6000601f19601f8301169050919050565b60006122b282612247565b6122bc8185612252565b93506122cc818560208601612263565b6122d581612296565b840191505092915050565b600060208201905081810360008301526122fa81846122a7565b905092915050565b60006020828403121561231857612317612084565b5b60006123268482850161210d565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61236c82612296565b810181811067ffffffffffffffff8211171561238b5761238a612334565b5b80604052505050565b600061239e61207a565b90506123aa8282612363565b919050565b600067ffffffffffffffff8211156123ca576123c9612334565b5b602082029050602081019050919050565b600080fd5b60006123f36123ee846123af565b612394565b90508083825260208201905060208402830185811115612416576124156123db565b5b835b8181101561243f578061242b888261210d565b845260208401935050602081019050612418565b5050509392505050565b600082601f83011261245e5761245d61232f565b5b813561246e8482602086016123e0565b91505092915050565b600080fd5b600067ffffffffffffffff82111561249757612496612334565b5b6124a082612296565b9050602081019050919050565b82818337600083830152505050565b60006124cf6124ca8461247c565b612394565b9050828152602081018484840111156124eb576124ea612477565b5b6124f68482856124ad565b509392505050565b600082601f8301126125135761251261232f565b5b81356125238482602086016124bc565b91505092915050565b600080600080600060a0868803121561254857612547612084565b5b6000612556888289016120d7565b9550506020612567888289016120d7565b945050604086013567ffffffffffffffff81111561258857612587612089565b5b61259488828901612449565b935050606086013567ffffffffffffffff8111156125b5576125b4612089565b5b6125c188828901612449565b925050608086013567ffffffffffffffff8111156125e2576125e1612089565b5b6125ee888289016124fe565b9150509295509295909350565b600080fd5b60008083601f8401126126165761261561232f565b5b8235905067ffffffffffffffff811115612633576126326125fb565b5b60208301915083600182028301111561264f5761264e6123db565b5b9250929050565b60008060008060006060868803121561267257612671612084565b5b600086013567ffffffffffffffff8111156126905761268f612089565b5b61269c88828901612600565b9550955050602086013567ffffffffffffffff8111156126bf576126be612089565b5b6126cb88828901612600565b935093505060406126de8882890161210d565b9150509295509295909350565b600067ffffffffffffffff82111561270657612705612334565b5b602082029050602081019050919050565b600061272a612725846126eb565b612394565b9050808382526020820190506020840283018581111561274d5761274c6123db565b5b835b81811015612776578061276288826120d7565b84526020840193505060208101905061274f565b5050509392505050565b600082601f8301126127955761279461232f565b5b81356127a5848260208601612717565b91505092915050565b600080604083850312156127c5576127c4612084565b5b600083013567ffffffffffffffff8111156127e3576127e2612089565b5b6127ef85828601612780565b925050602083013567ffffffffffffffff8111156128105761280f612089565b5b61281c85828601612449565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61285b816120ec565b82525050565b600061286d8383612852565b60208301905092915050565b6000602082019050919050565b600061289182612826565b61289b8185612831565b93506128a683612842565b8060005b838110156128d75781516128be8882612861565b97506128c983612879565b9250506001810190506128aa565b5085935050505092915050565b600060208201905081810360008301526128fe8184612886565b905092915050565b61290f816120ae565b82525050565b600060208201905061292a6000830184612906565b92915050565b61293981612211565b811461294457600080fd5b50565b60008135905061295681612930565b92915050565b6000806040838503121561297357612972612084565b5b6000612981858286016120d7565b925050602061299285828601612947565b9150509250929050565b600080604083850312156129b3576129b2612084565b5b60006129c1858286016120d7565b92505060206129d2858286016120d7565b9150509250929050565b600080600080600060a086880312156129f8576129f7612084565b5b6000612a06888289016120d7565b9550506020612a17888289016120d7565b9450506040612a288882890161210d565b9350506060612a398882890161210d565b925050608086013567ffffffffffffffff811115612a5a57612a59612089565b5b612a66888289016124fe565b9150509295509295909350565b600060208284031215612a8957612a88612084565b5b6000612a97848285016120d7565b91505092915050565b600080600080600060608688031215612abc57612abb612084565b5b6000612aca8882890161210d565b955050602086013567ffffffffffffffff811115612aeb57612aea612089565b5b612af788828901612600565b9450945050604086013567ffffffffffffffff811115612b1a57612b19612089565b5b612b2688828901612600565b92509250509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612b91602b83612252565b9150612b9c82612b35565b604082019050919050565b60006020820190508181036000830152612bc081612b84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c01826120ec565b9150612c0c836120ec565b925082821015612c1f57612c1e612bc7565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ca057607f821691505b602082108103612cb357612cb2612c59565b5b50919050565b600081905092915050565b6000612ccf82612247565b612cd98185612cb9565b9350612ce9818560208601612263565b80840191505092915050565b6000612d018288612cc4565b9150612d0d8287612cc4565b9150612d198286612cc4565b9150612d258285612cc4565b9150612d318284612cc4565b91508190509695505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612d76601d83612cb9565b9150612d8182612d40565b601d82019050919050565b6000612d9782612d69565b9150612da38284612cc4565b915081905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612e0a603283612252565b9150612e1582612dae565b604082019050919050565b60006020820190508181036000830152612e3981612dfd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e76602083612252565b9150612e8182612e40565b602082019050919050565b60006020820190508181036000830152612ea581612e69565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612f08602983612252565b9150612f1382612eac565b604082019050919050565b60006020820190508181036000830152612f3781612efb565b9050919050565b6000612f49826120ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f7b57612f7a612bc7565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000612fe2602983612252565b9150612fed82612f86565b604082019050919050565b6000602082019050818103600083015261301181612fd5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613074602683612252565b915061307f82613018565b604082019050919050565b600060208201905081810360008301526130a381613067565b9050919050565b60006130b5826120ec565b91506130c0836120ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130f5576130f4612bc7565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061313a826120ec565b9150613145836120ec565b92508261315557613154613100565b5b828204905092915050565b600061316b826120ec565b9150613176836120ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131af576131ae612bc7565b5b828202905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613216602883612252565b9150613221826131ba565b604082019050919050565b6000602082019050818103600083015261324581613209565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132a8602583612252565b91506132b38261324c565b604082019050919050565b600060208201905081810360008301526132d78161329b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061333a602a83612252565b9150613345826132de565b604082019050919050565b600060208201905081810360008301526133698161332d565b9050919050565b6000604082019050818103600083015261338a8185612886565b9050818103602083015261339e8184612886565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613403602183612252565b915061340e826133a7565b604082019050919050565b60006020820190508181036000830152613432816133f6565b9050919050565b600060408201905061344e6000830185612162565b61345b6020830184612162565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006134be602983612252565b91506134c982613462565b604082019050919050565b600060208201905081810360008301526134ed816134b1565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061351b826134f4565b61352581856134ff565b9350613535818560208601612263565b61353e81612296565b840191505092915050565b600060a08201905061355e6000830188612906565b61356b6020830187612906565b818103604083015261357d8186612886565b905081810360608301526135918185612886565b905081810360808301526135a58184613510565b90509695505050505050565b6000815190506135c0816121b8565b92915050565b6000602082840312156135dc576135db612084565b5b60006135ea848285016135b1565b91505092915050565b60008160e01c9050919050565b600060033d111561361f5760046000803e61361c6000516135f3565b90505b90565b600060443d106136af5761363461207a565b60043d036004823e80513d602482011167ffffffffffffffff8211171561365c5750506136af565b808201805167ffffffffffffffff81111561367a57505050506136af565b80602083010160043d0385018111156136975750505050506136af565b6136a682602001850186612363565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061370e603483612252565b9150613719826136b2565b604082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006137a0602883612252565b91506137ab82613744565b604082019050919050565b600060208201905081810360008301526137cf81613793565b9050919050565b600060a0820190506137eb6000830188612906565b6137f86020830187612906565b6138056040830186612162565b6138126060830185612162565b81810360808301526138248184613510565b9050969550505050505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f222c2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b6261736536342ca2646970667358221220a50cfa69eed225df9e790048152fada3f5f969e45bccbe51060de72609b6cff564736f6c634300080d0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f45760003560e01c8063715018a611610097578063e985e9c511610066578063e985e9c514610271578063f242432a146102a1578063f2fde38b146102bd578063f95e0a54146102d9576100f4565b8063715018a61461020f5780638da5cb5b1461021957806395d89b4114610237578063a22cb46514610255576100f4565b80630e89341c116100d35780630e89341c146101775780632eb2c2d6146101a75780633ca6d100146101c35780634e1273f4146101df576100f4565b8062fdd58e146100f957806301ffc9a71461012957806306fdde0314610159575b600080fd5b610113600480360381019061010e9190612122565b6102f5565b6040516101209190612171565b60405180910390f35b610143600480360381019061013e91906121e4565b6103bd565b604051610150919061222c565b60405180910390f35b61016161049f565b60405161016e91906122e0565b60405180910390f35b610191600480360381019061018c9190612302565b6104d8565b60405161019e91906122e0565b60405180910390f35b6101c160048036038101906101bc919061252c565b610760565b005b6101dd60048036038101906101d89190612656565b610801565b005b6101f960048036038101906101f491906127ae565b61097b565b60405161020691906128e4565b60405180910390f35b610217610a94565b005b610221610b1c565b60405161022e9190612915565b60405180910390f35b61023f610b46565b60405161024c91906122e0565b60405180910390f35b61026f600480360381019061026a919061295c565b610b7f565b005b61028b6004803603810190610286919061299c565b610b95565b604051610298919061222c565b60405180910390f35b6102bb60048036038101906102b691906129dc565b610c29565b005b6102d760048036038101906102d29190612a73565b610cca565b005b6102f360048036038101906102ee9190612aa0565b610dc1565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035c90612ba7565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610498575061049782610f1e565b5b9050919050565b6040518060400160405280600c81526020017f504f434b4554424c4f434b53000000000000000000000000000000000000000081525081565b6060600060046001846104eb9190612bf6565b815481106104fc576104fb612c2a565b5b906000526020600020906002020160006002811061051d5761051c612c2a565b5b01805461052990612c88565b80601f016020809104026020016040519081016040528092919081815260200182805461055590612c88565b80156105a25780601f10610577576101008083540402835291602001916105a2565b820191906000526020600020905b81548152906001019060200180831161058557829003601f168201915b50505050509050600061067e60046001866105bd9190612bf6565b815481106105ce576105cd612c2a565b5b90600052602060002090600202016001600281106105ef576105ee612c2a565b5b0180546105fb90612c88565b80601f016020809104026020016040519081016040528092919081815260200182805461062790612c88565b80156106745780601f1061064957610100808354040283529160200191610674565b820191906000526020600020905b81548152906001019060200180831161065757829003601f168201915b5050505050610f88565b905060006107346040518060400160405280600a81526020017f7b226e616d65223a2022000000000000000000000000000000000000000000008152508460405180606001604052806027815260200161387160279139856040518060400160405280600281526020017f227d000000000000000000000000000000000000000000000000000000000000815250604051602001610720959493929190612cf5565b604051602081830303815290604052610f88565b9050806040516020016107479190612d8c565b6040516020818303038152906040529350505050919050565b61076861111f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107ae57506107ad856107a861111f565b610b95565b5b6107ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e490612e20565b60405180910390fd5b6107fa8585858585611127565b5050505050565b61080961111f565b73ffffffffffffffffffffffffffffffffffffffff16610827610b1c565b73ffffffffffffffffffffffffffffffffffffffff161461087d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087490612e8c565b60405180910390fd5b6004604051806040016040528085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815260200187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509080600181540180825580915050600190039060005260206000209060020201600090919091909150906002610953929190611f20565b50610974336004805490508360405180602001604052806000815250611448565b5050505050565b606081518351146109c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b890612f1e565b60405180910390fd5b6000835167ffffffffffffffff8111156109de576109dd612334565b5b604051908082528060200260200182016040528015610a0c5781602001602082028036833780820191505090505b50905060005b8451811015610a8957610a59858281518110610a3157610a30612c2a565b5b6020026020010151858381518110610a4c57610a4b612c2a565b5b60200260200101516102f5565b828281518110610a6c57610a6b612c2a565b5b60200260200101818152505080610a8290612f3e565b9050610a12565b508091505092915050565b610a9c61111f565b73ffffffffffffffffffffffffffffffffffffffff16610aba610b1c565b73ffffffffffffffffffffffffffffffffffffffff1614610b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0790612e8c565b60405180910390fd5b610b1a60006115f8565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600281526020017f504200000000000000000000000000000000000000000000000000000000000081525081565b610b91610b8a61111f565b83836116be565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c3161111f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c775750610c7685610c7161111f565b610b95565b5b610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90612ff8565b60405180910390fd5b610cc3858585858561182a565b5050505050565b610cd261111f565b73ffffffffffffffffffffffffffffffffffffffff16610cf0610b1c565b73ffffffffffffffffffffffffffffffffffffffff1614610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90612e8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac9061308a565b60405180910390fd5b610dbe816115f8565b50565b610dc961111f565b73ffffffffffffffffffffffffffffffffffffffff16610de7610b1c565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3490612e8c565b60405180910390fd5b604051806040016040528085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152506004600187610ee99190612bf6565b81548110610efa57610ef9612c2a565b5b9060005260206000209060020201906002610f16929190611f20565b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008251905060008103610fb0576040518060200160405280600081525091505061111a565b60006003600283610fc191906130aa565b610fcb919061312f565b6004610fd79190613160565b90506000602082610fe891906130aa565b67ffffffffffffffff81111561100157611000612334565b5b6040519080825280601f01601f1916602001820160405280156110335781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001613831604091399050600181016020830160005b868110156110d75760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061105e565b5060038606600181146110f157600281146111015761110c565b613d3d60f01b600283035261110c565b603d60f81b60018303525b508484525050819450505050505b919050565b600033905090565b815183511461116b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111629061322c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d1906132be565b60405180910390fd5b60006111e461111f565b90506111f4818787878787611ac5565b60005b84518110156113a557600085828151811061121557611214612c2a565b5b60200260200101519050600085838151811061123457611233612c2a565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613350565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461138a91906130aa565b925050819055505050508061139e90612f3e565b90506111f7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161141c929190613370565b60405180910390a4611432818787878787611acd565b611440818787878787611ad5565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90613419565b60405180910390fd5b60006114c161111f565b905060006114ce85611cac565b905060006114db85611cac565b90506114ec83600089858589611ac5565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461154b91906130aa565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516115c9929190613439565b60405180910390a46115e083600089858589611acd565b6115ef83600089898989611d26565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361172c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611723906134d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161181d919061222c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611890906132be565b60405180910390fd5b60006118a361111f565b905060006118b085611cac565b905060006118bd85611cac565b90506118cd838989858589611ac5565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613350565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a1991906130aa565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611a96929190613439565b60405180910390a4611aac848a8a86868a611acd565b611aba848a8a8a8a8a611d26565b505050505050505050565b505050505050565b505050505050565b611af48473ffffffffffffffffffffffffffffffffffffffff16611efd565b15611ca4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b3a959493929190613549565b6020604051808303816000875af1925050508015611b7657506040513d601f19601f82011682018060405250810190611b7391906135c6565b60015b611c1b57611b82613600565b806308c379a003611bde5750611b96613622565b80611ba15750611be0565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd591906122e0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613724565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c99906137b6565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611ccb57611cca612334565b5b604051908082528060200260200182016040528015611cf95781602001602082028036833780820191505090505b5090508281600081518110611d1157611d10612c2a565b5b60200260200101818152505080915050919050565b611d458473ffffffffffffffffffffffffffffffffffffffff16611efd565b15611ef5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d8b9594939291906137d6565b6020604051808303816000875af1925050508015611dc757506040513d601f19601f82011682018060405250810190611dc491906135c6565b60015b611e6c57611dd3613600565b806308c379a003611e2f5750611de7613622565b80611df25750611e31565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2691906122e0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6390613724565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea906137b6565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8260028101928215611f62579160200282015b82811115611f61578251829080519060200190611f51929190611f73565b5091602001919060010190611f33565b5b509050611f6f9190611ff9565b5090565b828054611f7f90612c88565b90600052602060002090601f016020900481019282611fa15760008555611fe8565b82601f10611fba57805160ff1916838001178555611fe8565b82800160010185558215611fe8579182015b82811115611fe7578251825591602001919060010190611fcc565b5b509050611ff5919061201d565b5090565b5b808211156120195760008181612010919061203a565b50600101611ffa565b5090565b5b8082111561203657600081600090555060010161201e565b5090565b50805461204690612c88565b6000825580601f106120585750612077565b601f016020900490600052602060002090810190612076919061201d565b5b50565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120b98261208e565b9050919050565b6120c9816120ae565b81146120d457600080fd5b50565b6000813590506120e6816120c0565b92915050565b6000819050919050565b6120ff816120ec565b811461210a57600080fd5b50565b60008135905061211c816120f6565b92915050565b6000806040838503121561213957612138612084565b5b6000612147858286016120d7565b92505060206121588582860161210d565b9150509250929050565b61216b816120ec565b82525050565b60006020820190506121866000830184612162565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6121c18161218c565b81146121cc57600080fd5b50565b6000813590506121de816121b8565b92915050565b6000602082840312156121fa576121f9612084565b5b6000612208848285016121cf565b91505092915050565b60008115159050919050565b61222681612211565b82525050565b6000602082019050612241600083018461221d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612281578082015181840152602081019050612266565b83811115612290576000848401525b50505050565b6000601f19601f8301169050919050565b60006122b282612247565b6122bc8185612252565b93506122cc818560208601612263565b6122d581612296565b840191505092915050565b600060208201905081810360008301526122fa81846122a7565b905092915050565b60006020828403121561231857612317612084565b5b60006123268482850161210d565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61236c82612296565b810181811067ffffffffffffffff8211171561238b5761238a612334565b5b80604052505050565b600061239e61207a565b90506123aa8282612363565b919050565b600067ffffffffffffffff8211156123ca576123c9612334565b5b602082029050602081019050919050565b600080fd5b60006123f36123ee846123af565b612394565b90508083825260208201905060208402830185811115612416576124156123db565b5b835b8181101561243f578061242b888261210d565b845260208401935050602081019050612418565b5050509392505050565b600082601f83011261245e5761245d61232f565b5b813561246e8482602086016123e0565b91505092915050565b600080fd5b600067ffffffffffffffff82111561249757612496612334565b5b6124a082612296565b9050602081019050919050565b82818337600083830152505050565b60006124cf6124ca8461247c565b612394565b9050828152602081018484840111156124eb576124ea612477565b5b6124f68482856124ad565b509392505050565b600082601f8301126125135761251261232f565b5b81356125238482602086016124bc565b91505092915050565b600080600080600060a0868803121561254857612547612084565b5b6000612556888289016120d7565b9550506020612567888289016120d7565b945050604086013567ffffffffffffffff81111561258857612587612089565b5b61259488828901612449565b935050606086013567ffffffffffffffff8111156125b5576125b4612089565b5b6125c188828901612449565b925050608086013567ffffffffffffffff8111156125e2576125e1612089565b5b6125ee888289016124fe565b9150509295509295909350565b600080fd5b60008083601f8401126126165761261561232f565b5b8235905067ffffffffffffffff811115612633576126326125fb565b5b60208301915083600182028301111561264f5761264e6123db565b5b9250929050565b60008060008060006060868803121561267257612671612084565b5b600086013567ffffffffffffffff8111156126905761268f612089565b5b61269c88828901612600565b9550955050602086013567ffffffffffffffff8111156126bf576126be612089565b5b6126cb88828901612600565b935093505060406126de8882890161210d565b9150509295509295909350565b600067ffffffffffffffff82111561270657612705612334565b5b602082029050602081019050919050565b600061272a612725846126eb565b612394565b9050808382526020820190506020840283018581111561274d5761274c6123db565b5b835b81811015612776578061276288826120d7565b84526020840193505060208101905061274f565b5050509392505050565b600082601f8301126127955761279461232f565b5b81356127a5848260208601612717565b91505092915050565b600080604083850312156127c5576127c4612084565b5b600083013567ffffffffffffffff8111156127e3576127e2612089565b5b6127ef85828601612780565b925050602083013567ffffffffffffffff8111156128105761280f612089565b5b61281c85828601612449565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61285b816120ec565b82525050565b600061286d8383612852565b60208301905092915050565b6000602082019050919050565b600061289182612826565b61289b8185612831565b93506128a683612842565b8060005b838110156128d75781516128be8882612861565b97506128c983612879565b9250506001810190506128aa565b5085935050505092915050565b600060208201905081810360008301526128fe8184612886565b905092915050565b61290f816120ae565b82525050565b600060208201905061292a6000830184612906565b92915050565b61293981612211565b811461294457600080fd5b50565b60008135905061295681612930565b92915050565b6000806040838503121561297357612972612084565b5b6000612981858286016120d7565b925050602061299285828601612947565b9150509250929050565b600080604083850312156129b3576129b2612084565b5b60006129c1858286016120d7565b92505060206129d2858286016120d7565b9150509250929050565b600080600080600060a086880312156129f8576129f7612084565b5b6000612a06888289016120d7565b9550506020612a17888289016120d7565b9450506040612a288882890161210d565b9350506060612a398882890161210d565b925050608086013567ffffffffffffffff811115612a5a57612a59612089565b5b612a66888289016124fe565b9150509295509295909350565b600060208284031215612a8957612a88612084565b5b6000612a97848285016120d7565b91505092915050565b600080600080600060608688031215612abc57612abb612084565b5b6000612aca8882890161210d565b955050602086013567ffffffffffffffff811115612aeb57612aea612089565b5b612af788828901612600565b9450945050604086013567ffffffffffffffff811115612b1a57612b19612089565b5b612b2688828901612600565b92509250509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612b91602b83612252565b9150612b9c82612b35565b604082019050919050565b60006020820190508181036000830152612bc081612b84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c01826120ec565b9150612c0c836120ec565b925082821015612c1f57612c1e612bc7565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ca057607f821691505b602082108103612cb357612cb2612c59565b5b50919050565b600081905092915050565b6000612ccf82612247565b612cd98185612cb9565b9350612ce9818560208601612263565b80840191505092915050565b6000612d018288612cc4565b9150612d0d8287612cc4565b9150612d198286612cc4565b9150612d258285612cc4565b9150612d318284612cc4565b91508190509695505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612d76601d83612cb9565b9150612d8182612d40565b601d82019050919050565b6000612d9782612d69565b9150612da38284612cc4565b915081905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612e0a603283612252565b9150612e1582612dae565b604082019050919050565b60006020820190508181036000830152612e3981612dfd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e76602083612252565b9150612e8182612e40565b602082019050919050565b60006020820190508181036000830152612ea581612e69565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612f08602983612252565b9150612f1382612eac565b604082019050919050565b60006020820190508181036000830152612f3781612efb565b9050919050565b6000612f49826120ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f7b57612f7a612bc7565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000612fe2602983612252565b9150612fed82612f86565b604082019050919050565b6000602082019050818103600083015261301181612fd5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613074602683612252565b915061307f82613018565b604082019050919050565b600060208201905081810360008301526130a381613067565b9050919050565b60006130b5826120ec565b91506130c0836120ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130f5576130f4612bc7565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061313a826120ec565b9150613145836120ec565b92508261315557613154613100565b5b828204905092915050565b600061316b826120ec565b9150613176836120ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131af576131ae612bc7565b5b828202905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613216602883612252565b9150613221826131ba565b604082019050919050565b6000602082019050818103600083015261324581613209565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132a8602583612252565b91506132b38261324c565b604082019050919050565b600060208201905081810360008301526132d78161329b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061333a602a83612252565b9150613345826132de565b604082019050919050565b600060208201905081810360008301526133698161332d565b9050919050565b6000604082019050818103600083015261338a8185612886565b9050818103602083015261339e8184612886565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613403602183612252565b915061340e826133a7565b604082019050919050565b60006020820190508181036000830152613432816133f6565b9050919050565b600060408201905061344e6000830185612162565b61345b6020830184612162565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006134be602983612252565b91506134c982613462565b604082019050919050565b600060208201905081810360008301526134ed816134b1565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061351b826134f4565b61352581856134ff565b9350613535818560208601612263565b61353e81612296565b840191505092915050565b600060a08201905061355e6000830188612906565b61356b6020830187612906565b818103604083015261357d8186612886565b905081810360608301526135918185612886565b905081810360808301526135a58184613510565b90509695505050505050565b6000815190506135c0816121b8565b92915050565b6000602082840312156135dc576135db612084565b5b60006135ea848285016135b1565b91505092915050565b60008160e01c9050919050565b600060033d111561361f5760046000803e61361c6000516135f3565b90505b90565b600060443d106136af5761363461207a565b60043d036004823e80513d602482011167ffffffffffffffff8211171561365c5750506136af565b808201805167ffffffffffffffff81111561367a57505050506136af565b80602083010160043d0385018111156136975750505050506136af565b6136a682602001850186612363565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061370e603483612252565b9150613719826136b2565b604082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006137a0602883612252565b91506137ab82613744565b604082019050919050565b600060208201905081810360008301526137cf81613793565b9050919050565b600060a0820190506137eb6000830188612906565b6137f86020830187612906565b6138056040830186612162565b6138126060830185612162565b81810360808301526138248184613510565b9050969550505050505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f222c2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b6261736536342ca2646970667358221220a50cfa69eed225df9e790048152fada3f5f969e45bccbe51060de72609b6cff564736f6c634300080d0033

Deployed Bytecode Sourcemap

227:1137:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2185:228:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1236:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;273:44:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;593:412;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4060:430:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1009:189:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2570:508:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;:::i;:::-;;1036:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;321:36:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3146:153:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3366:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3599:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1918:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1217:145:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2185:228:1;2271:7;2317:1;2298:21;;:7;:21;;;2290:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2384:9;:13;2394:2;2384:13;;;;;;;;;;;:22;2398:7;2384:22;;;;;;;;;;;;;;;;2377:29;;2185:228;;;;:::o;1236:305::-;1338:4;1388:26;1373:41;;;:11;:41;;;;:109;;;;1445:37;1430:52;;;:11;:52;;;;1373:109;:161;;;;1498:36;1522:11;1498:23;:36::i;:::-;1373:161;1354:180;;1236:305;;;:::o;273:44:9:-;;;;;;;;;;;;;;;;;;;:::o;593:412::-;661:13;681:23;707:6;725:1;714:8;:12;;;;:::i;:::-;707:20;;;;;;;;:::i;:::-;;;;;;;;;;;;728:1;707:23;;;;;;;:::i;:::-;;;681:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;736:22;761:45;781:6;799:1;788:8;:12;;;;:::i;:::-;781:20;;;;;;;;:::i;:::-;;;;;;;;;;;;802:1;781:23;;;;;;;:::i;:::-;;;761:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:45::i;:::-;736:70;;812:25;840:76;871:6;;;;;;;;;;;;;;;;;879:9;890:6;;;;;;;;;;;;;;;;;898:8;908:6;;;;;;;;;;;;;;;;;854:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;840:13;:76::i;:::-;812:104;;987:11;937:62;;;;;;;;:::i;:::-;;;;;;;;;;;;;923:77;;;;;593:412;;;:::o;4060:430:1:-;4293:12;:10;:12::i;:::-;4285:20;;:4;:20;;;:60;;;;4309:36;4326:4;4332:12;:10;:12::i;:::-;4309:16;:36::i;:::-;4285:60;4264:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4431:52;4454:4;4460:2;4464:3;4469:7;4478:4;4431:22;:52::i;:::-;4060:430;;;;;:::o;1009:189:9:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1114:6:9::1;:26;;;;;;;;1127:5;;1114:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1134:4;;1114:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1146:47;1152:10;1164:6;:13;;;;1179:9;1146:47;;;;;;;;;;;::::0;:5:::1;:47::i;:::-;1009:189:::0;;;;;:::o;2570:508:1:-;2721:16;2780:3;:10;2761:8;:15;:29;2753:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2847:30;2894:8;:15;2880:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2847:63;;2926:9;2921:120;2945:8;:15;2941:1;:19;2921:120;;;3000:30;3010:8;3019:1;3010:11;;;;;;;;:::i;:::-;;;;;;;;3023:3;3027:1;3023:6;;;;;;;;:::i;:::-;;;;;;;;3000:9;:30::i;:::-;2981:13;2995:1;2981:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2962:3;;;;:::i;:::-;;;2921:120;;;;3058:13;3051:20;;;2570:508;;;;:::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;1036:85::-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;321:36:9:-;;;;;;;;;;;;;;;;;;;:::o;3146:153:1:-;3240:52;3259:12;:10;:12::i;:::-;3273:8;3283;3240:18;:52::i;:::-;3146:153;;:::o;3366:166::-;3465:4;3488:18;:27;3507:7;3488:27;;;;;;;;;;;;;;;:37;3516:8;3488:37;;;;;;;;;;;;;;;;;;;;;;;;;3481:44;;3366:166;;;;:::o;3599:389::-;3807:12;:10;:12::i;:::-;3799:20;;:4;:20;;;:60;;;;3823:36;3840:4;3846:12;:10;:12::i;:::-;3823:16;:36::i;:::-;3799:60;3778:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;3936:45;3954:4;3960:2;3964;3968:6;3976:4;3936:17;:45::i;:::-;3599:389;;;;;:::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;;::::0;1998:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;1217:145:9:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1321:36:9::1;;;;;;;;1345:5;;1321:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1352:4;;1321:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;:6:::1;1339:1;1328:8;:12;;;;:::i;:::-;1321:20;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;1217:145:::0;;;;;:::o;829:155:7:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;397:1548:10:-;455:13;480:11;494:4;:11;480:25;;526:1;519:3;:8;515:23;;529:9;;;;;;;;;;;;;;;;;515:23;587:18;625:1;620;614:3;:7;;;;:::i;:::-;613:13;;;;:::i;:::-;608:1;:19;;;;:::i;:::-;587:40;;682:19;727:2;714:10;:15;;;;:::i;:::-;704:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;682:48;;740:18;761:5;;;;;;;;;;;;;;;;;740:26;;827:1;820:5;816:13;871:2;863:6;859:15;918:1;887:753;940:3;937:1;934:10;887:753;;;991:1;988;984:9;979:14;;1048:8;1043:1;1037:4;1033:12;1027:19;1023:34;1125:4;1117:5;1113:2;1109:14;1105:25;1095:8;1091:40;1085:47;1163:3;1160:1;1156:11;1149:18;;1253:4;1244;1236:5;1232:2;1228:14;1224:25;1214:8;1210:40;1204:47;1200:58;1195:3;1191:68;1184:75;;1290:3;1287:1;1283:11;1276:18;;1379:4;1370;1362:5;1359:1;1355:13;1351:24;1341:8;1337:39;1331:46;1327:57;1322:3;1318:67;1311:74;;1416:3;1413:1;1409:11;1402:18;;1497:4;1488;1481:5;1477:16;1467:8;1463:31;1457:38;1453:49;1448:3;1444:59;1437:66;;1536:3;1531;1527:13;1520:20;;1575:3;1564:9;1557:22;1624:1;1613:9;1609:17;1596:30;;961:679;;887:753;;;891:42;1669:1;1664:3;1660:11;1689:1;1684:82;;;;1784:1;1779:80;;;;1653:206;;1684:82;1744:6;1739:3;1735:16;1731:1;1720:9;1716:17;1709:43;1684:82;;1779:80;1839:4;1834:3;1830:14;1826:1;1815:9;1811:17;1804:41;1653:206;;1887:10;1879:6;1872:26;786:1122;;1931:6;1917:21;;;;;;397:1548;;;;:::o;640:96:6:-;693:7;719:10;712:17;;640:96;:::o;6233:1115:1:-;6453:7;:14;6439:3;:10;:28;6431:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6544:1;6530:16;;:2;:16;;;6522:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6599:16;6618:12;:10;:12::i;:::-;6599:31;;6641:60;6662:8;6672:4;6678:2;6682:3;6687:7;6696:4;6641:20;:60::i;:::-;6717:9;6712:411;6736:3;:10;6732:1;:14;6712:411;;;6767:10;6780:3;6784:1;6780:6;;;;;;;;:::i;:::-;;;;;;;;6767:19;;6800:14;6817:7;6825:1;6817:10;;;;;;;;:::i;:::-;;;;;;;;6800:27;;6842:19;6864:9;:13;6874:2;6864:13;;;;;;;;;;;:19;6878:4;6864:19;;;;;;;;;;;;;;;;6842:41;;6920:6;6905:11;:21;;6897:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7051:6;7037:11;:20;7015:9;:13;7025:2;7015:13;;;;;;;;;;;:19;7029:4;7015:19;;;;;;;;;;;;;;;:42;;;;7106:6;7085:9;:13;7095:2;7085:13;;;;;;;;;;;:17;7099:2;7085:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6753:370;;;6748:3;;;;:::i;:::-;;;6712:411;;;;7168:2;7138:47;;7162:4;7138:47;;7152:8;7138:47;;;7172:3;7177:7;7138:47;;;;;;;:::i;:::-;;;;;;;;7196:59;7216:8;7226:4;7232:2;7236:3;7241:7;7250:4;7196:19;:59::i;:::-;7266:75;7302:8;7312:4;7318:2;7322:3;7327:7;7336:4;7266:35;:75::i;:::-;6421:927;6233:1115;;;;;:::o;8630:709::-;8791:1;8777:16;;:2;:16;;;8769:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8842:16;8861:12;:10;:12::i;:::-;8842:31;;8883:20;8906:21;8924:2;8906:17;:21::i;:::-;8883:44;;8937:24;8964:25;8982:6;8964:17;:25::i;:::-;8937:52;;9000:66;9021:8;9039:1;9043:2;9047:3;9052:7;9061:4;9000:20;:66::i;:::-;9098:6;9077:9;:13;9087:2;9077:13;;;;;;;;;;;:17;9091:2;9077:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;9156:2;9119:52;;9152:1;9119:52;;9134:8;9119:52;;;9160:2;9164:6;9119:52;;;;;;;:::i;:::-;;;;;;;;9182:65;9202:8;9220:1;9224:2;9228:3;9233:7;9242:4;9182:19;:65::i;:::-;9258:74;9289:8;9307:1;9311:2;9315;9319:6;9327:4;9258:30;:74::i;:::-;8759:580;;;8630:709;;;;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;12773:323:1:-;12923:8;12914:17;;:5;:17;;;12906:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13025:8;12987:18;:25;13006:5;12987:25;;;;;;;;;;;;;;;:35;13013:8;12987:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13070:8;13048:41;;13063:5;13048:41;;;13080:8;13048:41;;;;;;:::i;:::-;;;;;;;;12773:323;;;:::o;4940:947::-;5135:1;5121:16;;:2;:16;;;5113:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5190:16;5209:12;:10;:12::i;:::-;5190:31;;5231:20;5254:21;5272:2;5254:17;:21::i;:::-;5231:44;;5285:24;5312:25;5330:6;5312:17;:25::i;:::-;5285:52;;5348:60;5369:8;5379:4;5385:2;5389:3;5394:7;5403:4;5348:20;:60::i;:::-;5419:19;5441:9;:13;5451:2;5441:13;;;;;;;;;;;:19;5455:4;5441:19;;;;;;;;;;;;;;;;5419:41;;5493:6;5478:11;:21;;5470:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5616:6;5602:11;:20;5580:9;:13;5590:2;5580:13;;;;;;;;;;;:19;5594:4;5580:19;;;;;;;;;;;;;;;:42;;;;5663:6;5642:9;:13;5652:2;5642:13;;;;;;;;;;;:17;5656:2;5642:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5716:2;5685:46;;5710:4;5685:46;;5700:8;5685:46;;;5720:2;5724:6;5685:46;;;;;;;:::i;:::-;;;;;;;;5742:59;5762:8;5772:4;5778:2;5782:3;5787:7;5796:4;5742:19;:59::i;:::-;5812:68;5843:8;5853:4;5859:2;5863;5867:6;5875:4;5812:30;:68::i;:::-;5103:784;;;;4940:947;;;;;:::o;14030:214::-;;;;;;;:::o;15177:213::-;;;;;;;:::o;16127:792::-;16359:15;:2;:13;;;:15::i;:::-;16355:558;;;16411:2;16394:43;;;16438:8;16448:4;16454:3;16459:7;16468:4;16394:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16390:513;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16779:6;16772:14;;;;;;;;;;;:::i;:::-;;;;;;;;16390:513;;;16826:62;;;;;;;;;;:::i;:::-;;;;;;;;16390:513;16564:48;;;16552:60;;;:8;:60;;;;16548:157;;16636:50;;;;;;;;;;:::i;:::-;;;;;;;;16548:157;16474:245;16355:558;16127:792;;;;;;:::o;16925:193::-;16991:16;17019:22;17058:1;17044:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17019:41;;17081:7;17070:5;17076:1;17070:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;17106:5;17099:12;;;16925:193;;;:::o;15396:725::-;15603:15;:2;:13;;;:15::i;:::-;15599:516;;;15655:2;15638:38;;;15677:8;15687:4;15693:2;15697:6;15705:4;15638:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15634:471;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15981:6;15974:14;;;;;;;;;;;:::i;:::-;;;;;;;;15634:471;;;16028:62;;;;;;;;;;:::i;:::-;;;;;;;;15634:471;15771:43;;;15759:55;;;:8;:55;;;;15755:152;;15838:50;;;;;;;;;;:::i;:::-;;;;;;;;15755:152;15711:210;15599:516;15396:725;;;;;;:::o;1175:320:5:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;7:75:11:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1509::-;8758:6;8766;8774;8782;8790;8839:3;8827:9;8818:7;8814:23;8810:33;8807:120;;;8846:79;;:::i;:::-;8807:120;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;9249:2;9238:9;9234:18;9221:32;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9407:78;9477:7;9468:6;9457:9;9453:22;9407:78;:::i;:::-;9397:88;;9192:303;9562:2;9551:9;9547:18;9534:32;9593:18;9585:6;9582:30;9579:117;;;9615:79;;:::i;:::-;9579:117;9720:78;9790:7;9781:6;9770:9;9766:22;9720:78;:::i;:::-;9710:88;;9505:303;9875:3;9864:9;9860:19;9847:33;9907:18;9899:6;9896:30;9893:117;;;9929:79;;:::i;:::-;9893:117;10034:62;10088:7;10079:6;10068:9;10064:22;10034:62;:::i;:::-;10024:72;;9818:288;8604:1509;;;;;;;;:::o;10119:117::-;10228:1;10225;10218:12;10256:553;10314:8;10324:6;10374:3;10367:4;10359:6;10355:17;10351:27;10341:122;;10382:79;;:::i;:::-;10341:122;10495:6;10482:20;10472:30;;10525:18;10517:6;10514:30;10511:117;;;10547:79;;:::i;:::-;10511:117;10661:4;10653:6;10649:17;10637:29;;10715:3;10707:4;10699:6;10695:17;10685:8;10681:32;10678:41;10675:128;;;10722:79;;:::i;:::-;10675:128;10256:553;;;;;:::o;10815:1019::-;10916:6;10924;10932;10940;10948;10997:2;10985:9;10976:7;10972:23;10968:32;10965:119;;;11003:79;;:::i;:::-;10965:119;11151:1;11140:9;11136:17;11123:31;11181:18;11173:6;11170:30;11167:117;;;11203:79;;:::i;:::-;11167:117;11316:65;11373:7;11364:6;11353:9;11349:22;11316:65;:::i;:::-;11298:83;;;;11094:297;11458:2;11447:9;11443:18;11430:32;11489:18;11481:6;11478:30;11475:117;;;11511:79;;:::i;:::-;11475:117;11624:65;11681:7;11672:6;11661:9;11657:22;11624:65;:::i;:::-;11606:83;;;;11401:298;11738:2;11764:53;11809:7;11800:6;11789:9;11785:22;11764:53;:::i;:::-;11754:63;;11709:118;10815:1019;;;;;;;;:::o;11840:311::-;11917:4;12007:18;11999:6;11996:30;11993:56;;;12029:18;;:::i;:::-;11993:56;12079:4;12071:6;12067:17;12059:25;;12139:4;12133;12129:15;12121:23;;11840:311;;;:::o;12174:710::-;12270:5;12295:81;12311:64;12368:6;12311:64;:::i;:::-;12295:81;:::i;:::-;12286:90;;12396:5;12425:6;12418:5;12411:21;12459:4;12452:5;12448:16;12441:23;;12512:4;12504:6;12500:17;12492:6;12488:30;12541:3;12533:6;12530:15;12527:122;;;12560:79;;:::i;:::-;12527:122;12675:6;12658:220;12692:6;12687:3;12684:15;12658:220;;;12767:3;12796:37;12829:3;12817:10;12796:37;:::i;:::-;12791:3;12784:50;12863:4;12858:3;12854:14;12847:21;;12734:144;12718:4;12713:3;12709:14;12702:21;;12658:220;;;12662:21;12276:608;;12174:710;;;;;:::o;12907:370::-;12978:5;13027:3;13020:4;13012:6;13008:17;13004:27;12994:122;;13035:79;;:::i;:::-;12994:122;13152:6;13139:20;13177:94;13267:3;13259:6;13252:4;13244:6;13240:17;13177:94;:::i;:::-;13168:103;;12984:293;12907:370;;;;:::o;13283:894::-;13401:6;13409;13458:2;13446:9;13437:7;13433:23;13429:32;13426:119;;;13464:79;;:::i;:::-;13426:119;13612:1;13601:9;13597:17;13584:31;13642:18;13634:6;13631:30;13628:117;;;13664:79;;:::i;:::-;13628:117;13769:78;13839:7;13830:6;13819:9;13815:22;13769:78;:::i;:::-;13759:88;;13555:302;13924:2;13913:9;13909:18;13896:32;13955:18;13947:6;13944:30;13941:117;;;13977:79;;:::i;:::-;13941:117;14082:78;14152:7;14143:6;14132:9;14128:22;14082:78;:::i;:::-;14072:88;;13867:303;13283:894;;;;;:::o;14183:114::-;14250:6;14284:5;14278:12;14268:22;;14183:114;;;:::o;14303:184::-;14402:11;14436:6;14431:3;14424:19;14476:4;14471:3;14467:14;14452:29;;14303:184;;;;:::o;14493:132::-;14560:4;14583:3;14575:11;;14613:4;14608:3;14604:14;14596:22;;14493:132;;;:::o;14631:108::-;14708:24;14726:5;14708:24;:::i;:::-;14703:3;14696:37;14631:108;;:::o;14745:179::-;14814:10;14835:46;14877:3;14869:6;14835:46;:::i;:::-;14913:4;14908:3;14904:14;14890:28;;14745:179;;;;:::o;14930:113::-;15000:4;15032;15027:3;15023:14;15015:22;;14930:113;;;:::o;15079:732::-;15198:3;15227:54;15275:5;15227:54;:::i;:::-;15297:86;15376:6;15371:3;15297:86;:::i;:::-;15290:93;;15407:56;15457:5;15407:56;:::i;:::-;15486:7;15517:1;15502:284;15527:6;15524:1;15521:13;15502:284;;;15603:6;15597:13;15630:63;15689:3;15674:13;15630:63;:::i;:::-;15623:70;;15716:60;15769:6;15716:60;:::i;:::-;15706:70;;15562:224;15549:1;15546;15542:9;15537:14;;15502:284;;;15506:14;15802:3;15795:10;;15203:608;;;15079:732;;;;:::o;15817:373::-;15960:4;15998:2;15987:9;15983:18;15975:26;;16047:9;16041:4;16037:20;16033:1;16022:9;16018:17;16011:47;16075:108;16178:4;16169:6;16075:108;:::i;:::-;16067:116;;15817:373;;;;:::o;16196:118::-;16283:24;16301:5;16283:24;:::i;:::-;16278:3;16271:37;16196:118;;:::o;16320:222::-;16413:4;16451:2;16440:9;16436:18;16428:26;;16464:71;16532:1;16521:9;16517:17;16508:6;16464:71;:::i;:::-;16320:222;;;;:::o;16548:116::-;16618:21;16633:5;16618:21;:::i;:::-;16611:5;16608:32;16598:60;;16654:1;16651;16644:12;16598:60;16548:116;:::o;16670:133::-;16713:5;16751:6;16738:20;16729:29;;16767:30;16791:5;16767:30;:::i;:::-;16670:133;;;;:::o;16809:468::-;16874:6;16882;16931:2;16919:9;16910:7;16906:23;16902:32;16899:119;;;16937:79;;:::i;:::-;16899:119;17057:1;17082:53;17127:7;17118:6;17107:9;17103:22;17082:53;:::i;:::-;17072:63;;17028:117;17184:2;17210:50;17252:7;17243:6;17232:9;17228:22;17210:50;:::i;:::-;17200:60;;17155:115;16809:468;;;;;:::o;17283:474::-;17351:6;17359;17408:2;17396:9;17387:7;17383:23;17379:32;17376:119;;;17414:79;;:::i;:::-;17376:119;17534:1;17559:53;17604:7;17595:6;17584:9;17580:22;17559:53;:::i;:::-;17549:63;;17505:117;17661:2;17687:53;17732:7;17723:6;17712:9;17708:22;17687:53;:::i;:::-;17677:63;;17632:118;17283:474;;;;;:::o;17763:1089::-;17867:6;17875;17883;17891;17899;17948:3;17936:9;17927:7;17923:23;17919:33;17916:120;;;17955:79;;:::i;:::-;17916:120;18075:1;18100:53;18145:7;18136:6;18125:9;18121:22;18100:53;:::i;:::-;18090:63;;18046:117;18202:2;18228:53;18273:7;18264:6;18253:9;18249:22;18228:53;:::i;:::-;18218:63;;18173:118;18330:2;18356:53;18401:7;18392:6;18381:9;18377:22;18356:53;:::i;:::-;18346:63;;18301:118;18458:2;18484:53;18529:7;18520:6;18509:9;18505:22;18484:53;:::i;:::-;18474:63;;18429:118;18614:3;18603:9;18599:19;18586:33;18646:18;18638:6;18635:30;18632:117;;;18668:79;;:::i;:::-;18632:117;18773:62;18827:7;18818:6;18807:9;18803:22;18773:62;:::i;:::-;18763:72;;18557:288;17763:1089;;;;;;;;:::o;18858:329::-;18917:6;18966:2;18954:9;18945:7;18941:23;18937:32;18934:119;;;18972:79;;:::i;:::-;18934:119;19092:1;19117:53;19162:7;19153:6;19142:9;19138:22;19117:53;:::i;:::-;19107:63;;19063:117;18858:329;;;;:::o;19193:1019::-;19294:6;19302;19310;19318;19326;19375:2;19363:9;19354:7;19350:23;19346:32;19343:119;;;19381:79;;:::i;:::-;19343:119;19501:1;19526:53;19571:7;19562:6;19551:9;19547:22;19526:53;:::i;:::-;19516:63;;19472:117;19656:2;19645:9;19641:18;19628:32;19687:18;19679:6;19676:30;19673:117;;;19709:79;;:::i;:::-;19673:117;19822:65;19879:7;19870:6;19859:9;19855:22;19822:65;:::i;:::-;19804:83;;;;19599:298;19964:2;19953:9;19949:18;19936:32;19995:18;19987:6;19984:30;19981:117;;;20017:79;;:::i;:::-;19981:117;20130:65;20187:7;20178:6;20167:9;20163:22;20130:65;:::i;:::-;20112:83;;;;19907:298;19193:1019;;;;;;;;:::o;20218:230::-;20358:34;20354:1;20346:6;20342:14;20335:58;20427:13;20422:2;20414:6;20410:15;20403:38;20218:230;:::o;20454:366::-;20596:3;20617:67;20681:2;20676:3;20617:67;:::i;:::-;20610:74;;20693:93;20782:3;20693:93;:::i;:::-;20811:2;20806:3;20802:12;20795:19;;20454:366;;;:::o;20826:419::-;20992:4;21030:2;21019:9;21015:18;21007:26;;21079:9;21073:4;21069:20;21065:1;21054:9;21050:17;21043:47;21107:131;21233:4;21107:131;:::i;:::-;21099:139;;20826:419;;;:::o;21251:180::-;21299:77;21296:1;21289:88;21396:4;21393:1;21386:15;21420:4;21417:1;21410:15;21437:191;21477:4;21497:20;21515:1;21497:20;:::i;:::-;21492:25;;21531:20;21549:1;21531:20;:::i;:::-;21526:25;;21570:1;21567;21564:8;21561:34;;;21575:18;;:::i;:::-;21561:34;21620:1;21617;21613:9;21605:17;;21437:191;;;;:::o;21634:180::-;21682:77;21679:1;21672:88;21779:4;21776:1;21769:15;21803:4;21800:1;21793:15;21820:180;21868:77;21865:1;21858:88;21965:4;21962:1;21955:15;21989:4;21986:1;21979:15;22006:320;22050:6;22087:1;22081:4;22077:12;22067:22;;22134:1;22128:4;22124:12;22155:18;22145:81;;22211:4;22203:6;22199:17;22189:27;;22145:81;22273:2;22265:6;22262:14;22242:18;22239:38;22236:84;;22292:18;;:::i;:::-;22236:84;22057:269;22006:320;;;:::o;22332:148::-;22434:11;22471:3;22456:18;;22332:148;;;;:::o;22486:377::-;22592:3;22620:39;22653:5;22620:39;:::i;:::-;22675:89;22757:6;22752:3;22675:89;:::i;:::-;22668:96;;22773:52;22818:6;22813:3;22806:4;22799:5;22795:16;22773:52;:::i;:::-;22850:6;22845:3;22841:16;22834:23;;22596:267;22486:377;;;;:::o;22869:915::-;23193:3;23215:95;23306:3;23297:6;23215:95;:::i;:::-;23208:102;;23327:95;23418:3;23409:6;23327:95;:::i;:::-;23320:102;;23439:95;23530:3;23521:6;23439:95;:::i;:::-;23432:102;;23551:95;23642:3;23633:6;23551:95;:::i;:::-;23544:102;;23663:95;23754:3;23745:6;23663:95;:::i;:::-;23656:102;;23775:3;23768:10;;22869:915;;;;;;;;:::o;23790:179::-;23930:31;23926:1;23918:6;23914:14;23907:55;23790:179;:::o;23975:402::-;24135:3;24156:85;24238:2;24233:3;24156:85;:::i;:::-;24149:92;;24250:93;24339:3;24250:93;:::i;:::-;24368:2;24363:3;24359:12;24352:19;;23975:402;;;:::o;24383:541::-;24616:3;24638:148;24782:3;24638:148;:::i;:::-;24631:155;;24803:95;24894:3;24885:6;24803:95;:::i;:::-;24796:102;;24915:3;24908:10;;24383:541;;;;:::o;24930:237::-;25070:34;25066:1;25058:6;25054:14;25047:58;25139:20;25134:2;25126:6;25122:15;25115:45;24930:237;:::o;25173:366::-;25315:3;25336:67;25400:2;25395:3;25336:67;:::i;:::-;25329:74;;25412:93;25501:3;25412:93;:::i;:::-;25530:2;25525:3;25521:12;25514:19;;25173:366;;;:::o;25545:419::-;25711:4;25749:2;25738:9;25734:18;25726:26;;25798:9;25792:4;25788:20;25784:1;25773:9;25769:17;25762:47;25826:131;25952:4;25826:131;:::i;:::-;25818:139;;25545:419;;;:::o;25970:182::-;26110:34;26106:1;26098:6;26094:14;26087:58;25970:182;:::o;26158:366::-;26300:3;26321:67;26385:2;26380:3;26321:67;:::i;:::-;26314:74;;26397:93;26486:3;26397:93;:::i;:::-;26515:2;26510:3;26506:12;26499:19;;26158:366;;;:::o;26530:419::-;26696:4;26734:2;26723:9;26719:18;26711:26;;26783:9;26777:4;26773:20;26769:1;26758:9;26754:17;26747:47;26811:131;26937:4;26811:131;:::i;:::-;26803:139;;26530:419;;;:::o;26955:228::-;27095:34;27091:1;27083:6;27079:14;27072:58;27164:11;27159:2;27151:6;27147:15;27140:36;26955:228;:::o;27189:366::-;27331:3;27352:67;27416:2;27411:3;27352:67;:::i;:::-;27345:74;;27428:93;27517:3;27428:93;:::i;:::-;27546:2;27541:3;27537:12;27530:19;;27189:366;;;:::o;27561:419::-;27727:4;27765:2;27754:9;27750:18;27742:26;;27814:9;27808:4;27804:20;27800:1;27789:9;27785:17;27778:47;27842:131;27968:4;27842:131;:::i;:::-;27834:139;;27561:419;;;:::o;27986:233::-;28025:3;28048:24;28066:5;28048:24;:::i;:::-;28039:33;;28094:66;28087:5;28084:77;28081:103;;28164:18;;:::i;:::-;28081:103;28211:1;28204:5;28200:13;28193:20;;27986:233;;;:::o;28225:228::-;28365:34;28361:1;28353:6;28349:14;28342:58;28434:11;28429:2;28421:6;28417:15;28410:36;28225:228;:::o;28459:366::-;28601:3;28622:67;28686:2;28681:3;28622:67;:::i;:::-;28615:74;;28698:93;28787:3;28698:93;:::i;:::-;28816:2;28811:3;28807:12;28800:19;;28459:366;;;:::o;28831:419::-;28997:4;29035:2;29024:9;29020:18;29012:26;;29084:9;29078:4;29074:20;29070:1;29059:9;29055:17;29048:47;29112:131;29238:4;29112:131;:::i;:::-;29104:139;;28831:419;;;:::o;29256:225::-;29396:34;29392:1;29384:6;29380:14;29373:58;29465:8;29460:2;29452:6;29448:15;29441:33;29256:225;:::o;29487:366::-;29629:3;29650:67;29714:2;29709:3;29650:67;:::i;:::-;29643:74;;29726:93;29815:3;29726:93;:::i;:::-;29844:2;29839:3;29835:12;29828:19;;29487:366;;;:::o;29859:419::-;30025:4;30063:2;30052:9;30048:18;30040:26;;30112:9;30106:4;30102:20;30098:1;30087:9;30083:17;30076:47;30140:131;30266:4;30140:131;:::i;:::-;30132:139;;29859:419;;;:::o;30284:305::-;30324:3;30343:20;30361:1;30343:20;:::i;:::-;30338:25;;30377:20;30395:1;30377:20;:::i;:::-;30372:25;;30531:1;30463:66;30459:74;30456:1;30453:81;30450:107;;;30537:18;;:::i;:::-;30450:107;30581:1;30578;30574:9;30567:16;;30284:305;;;;:::o;30595:180::-;30643:77;30640:1;30633:88;30740:4;30737:1;30730:15;30764:4;30761:1;30754:15;30781:185;30821:1;30838:20;30856:1;30838:20;:::i;:::-;30833:25;;30872:20;30890:1;30872:20;:::i;:::-;30867:25;;30911:1;30901:35;;30916:18;;:::i;:::-;30901:35;30958:1;30955;30951:9;30946:14;;30781:185;;;;:::o;30972:348::-;31012:7;31035:20;31053:1;31035:20;:::i;:::-;31030:25;;31069:20;31087:1;31069:20;:::i;:::-;31064:25;;31257:1;31189:66;31185:74;31182:1;31179:81;31174:1;31167:9;31160:17;31156:105;31153:131;;;31264:18;;:::i;:::-;31153:131;31312:1;31309;31305:9;31294:20;;30972:348;;;;:::o;31326:227::-;31466:34;31462:1;31454:6;31450:14;31443:58;31535:10;31530:2;31522:6;31518:15;31511:35;31326:227;:::o;31559:366::-;31701:3;31722:67;31786:2;31781:3;31722:67;:::i;:::-;31715:74;;31798:93;31887:3;31798:93;:::i;:::-;31916:2;31911:3;31907:12;31900:19;;31559:366;;;:::o;31931:419::-;32097:4;32135:2;32124:9;32120:18;32112:26;;32184:9;32178:4;32174:20;32170:1;32159:9;32155:17;32148:47;32212:131;32338:4;32212:131;:::i;:::-;32204:139;;31931:419;;;:::o;32356:224::-;32496:34;32492:1;32484:6;32480:14;32473:58;32565:7;32560:2;32552:6;32548:15;32541:32;32356:224;:::o;32586:366::-;32728:3;32749:67;32813:2;32808:3;32749:67;:::i;:::-;32742:74;;32825:93;32914:3;32825:93;:::i;:::-;32943:2;32938:3;32934:12;32927:19;;32586:366;;;:::o;32958:419::-;33124:4;33162:2;33151:9;33147:18;33139:26;;33211:9;33205:4;33201:20;33197:1;33186:9;33182:17;33175:47;33239:131;33365:4;33239:131;:::i;:::-;33231:139;;32958:419;;;:::o;33383:229::-;33523:34;33519:1;33511:6;33507:14;33500:58;33592:12;33587:2;33579:6;33575:15;33568:37;33383:229;:::o;33618:366::-;33760:3;33781:67;33845:2;33840:3;33781:67;:::i;:::-;33774:74;;33857:93;33946:3;33857:93;:::i;:::-;33975:2;33970:3;33966:12;33959:19;;33618:366;;;:::o;33990:419::-;34156:4;34194:2;34183:9;34179:18;34171:26;;34243:9;34237:4;34233:20;34229:1;34218:9;34214:17;34207:47;34271:131;34397:4;34271:131;:::i;:::-;34263:139;;33990:419;;;:::o;34415:634::-;34636:4;34674:2;34663:9;34659:18;34651:26;;34723:9;34717:4;34713:20;34709:1;34698:9;34694:17;34687:47;34751:108;34854:4;34845:6;34751:108;:::i;:::-;34743:116;;34906:9;34900:4;34896:20;34891:2;34880:9;34876:18;34869:48;34934:108;35037:4;35028:6;34934:108;:::i;:::-;34926:116;;34415:634;;;;;:::o;35055:220::-;35195:34;35191:1;35183:6;35179:14;35172:58;35264:3;35259:2;35251:6;35247:15;35240:28;35055:220;:::o;35281:366::-;35423:3;35444:67;35508:2;35503:3;35444:67;:::i;:::-;35437:74;;35520:93;35609:3;35520:93;:::i;:::-;35638:2;35633:3;35629:12;35622:19;;35281:366;;;:::o;35653:419::-;35819:4;35857:2;35846:9;35842:18;35834:26;;35906:9;35900:4;35896:20;35892:1;35881:9;35877:17;35870:47;35934:131;36060:4;35934:131;:::i;:::-;35926:139;;35653:419;;;:::o;36078:332::-;36199:4;36237:2;36226:9;36222:18;36214:26;;36250:71;36318:1;36307:9;36303:17;36294:6;36250:71;:::i;:::-;36331:72;36399:2;36388:9;36384:18;36375:6;36331:72;:::i;:::-;36078:332;;;;;:::o;36416:228::-;36556:34;36552:1;36544:6;36540:14;36533:58;36625:11;36620:2;36612:6;36608:15;36601:36;36416:228;:::o;36650:366::-;36792:3;36813:67;36877:2;36872:3;36813:67;:::i;:::-;36806:74;;36889:93;36978:3;36889:93;:::i;:::-;37007:2;37002:3;36998:12;36991:19;;36650:366;;;:::o;37022:419::-;37188:4;37226:2;37215:9;37211:18;37203:26;;37275:9;37269:4;37265:20;37261:1;37250:9;37246:17;37239:47;37303:131;37429:4;37303:131;:::i;:::-;37295:139;;37022:419;;;:::o;37447:98::-;37498:6;37532:5;37526:12;37516:22;;37447:98;;;:::o;37551:168::-;37634:11;37668:6;37663:3;37656:19;37708:4;37703:3;37699:14;37684:29;;37551:168;;;;:::o;37725:360::-;37811:3;37839:38;37871:5;37839:38;:::i;:::-;37893:70;37956:6;37951:3;37893:70;:::i;:::-;37886:77;;37972:52;38017:6;38012:3;38005:4;37998:5;37994:16;37972:52;:::i;:::-;38049:29;38071:6;38049:29;:::i;:::-;38044:3;38040:39;38033:46;;37815:270;37725:360;;;;:::o;38091:1053::-;38414:4;38452:3;38441:9;38437:19;38429:27;;38466:71;38534:1;38523:9;38519:17;38510:6;38466:71;:::i;:::-;38547:72;38615:2;38604:9;38600:18;38591:6;38547:72;:::i;:::-;38666:9;38660:4;38656:20;38651:2;38640:9;38636:18;38629:48;38694:108;38797:4;38788:6;38694:108;:::i;:::-;38686:116;;38849:9;38843:4;38839:20;38834:2;38823:9;38819:18;38812:48;38877:108;38980:4;38971:6;38877:108;:::i;:::-;38869:116;;39033:9;39027:4;39023:20;39017:3;39006:9;39002:19;38995:49;39061:76;39132:4;39123:6;39061:76;:::i;:::-;39053:84;;38091:1053;;;;;;;;:::o;39150:141::-;39206:5;39237:6;39231:13;39222:22;;39253:32;39279:5;39253:32;:::i;:::-;39150:141;;;;:::o;39297:349::-;39366:6;39415:2;39403:9;39394:7;39390:23;39386:32;39383:119;;;39421:79;;:::i;:::-;39383:119;39541:1;39566:63;39621:7;39612:6;39601:9;39597:22;39566:63;:::i;:::-;39556:73;;39512:127;39297:349;;;;:::o;39652:106::-;39696:8;39745:5;39740:3;39736:15;39715:36;;39652:106;;;:::o;39764:183::-;39799:3;39837:1;39819:16;39816:23;39813:128;;;39875:1;39872;39869;39854:23;39897:34;39928:1;39922:8;39897:34;:::i;:::-;39890:41;;39813:128;39764:183;:::o;39953:711::-;39992:3;40030:4;40012:16;40009:26;40038:5;40006:39;40067:20;;:::i;:::-;40142:1;40124:16;40120:24;40117:1;40111:4;40096:49;40175:4;40169:11;40274:16;40267:4;40259:6;40255:17;40252:39;40219:18;40211:6;40208:30;40192:113;40189:146;;;40320:5;;;;40189:146;40366:6;40360:4;40356:17;40402:3;40396:10;40429:18;40421:6;40418:30;40415:43;;;40451:5;;;;;;40415:43;40499:6;40492:4;40487:3;40483:14;40479:27;40558:1;40540:16;40536:24;40530:4;40526:35;40521:3;40518:44;40515:57;;;40565:5;;;;;;;40515:57;40582;40630:6;40624:4;40620:17;40612:6;40608:30;40602:4;40582:57;:::i;:::-;40655:3;40648:10;;39996:668;;;;;39953:711;;:::o;40670:239::-;40810:34;40806:1;40798:6;40794:14;40787:58;40879:22;40874:2;40866:6;40862:15;40855:47;40670:239;:::o;40915:366::-;41057:3;41078:67;41142:2;41137:3;41078:67;:::i;:::-;41071:74;;41154:93;41243:3;41154:93;:::i;:::-;41272:2;41267:3;41263:12;41256:19;;40915:366;;;:::o;41287:419::-;41453:4;41491:2;41480:9;41476:18;41468:26;;41540:9;41534:4;41530:20;41526:1;41515:9;41511:17;41504:47;41568:131;41694:4;41568:131;:::i;:::-;41560:139;;41287:419;;;:::o;41712:227::-;41852:34;41848:1;41840:6;41836:14;41829:58;41921:10;41916:2;41908:6;41904:15;41897:35;41712:227;:::o;41945:366::-;42087:3;42108:67;42172:2;42167:3;42108:67;:::i;:::-;42101:74;;42184:93;42273:3;42184:93;:::i;:::-;42302:2;42297:3;42293:12;42286:19;;41945:366;;;:::o;42317:419::-;42483:4;42521:2;42510:9;42506:18;42498:26;;42570:9;42564:4;42560:20;42556:1;42545:9;42541:17;42534:47;42598:131;42724:4;42598:131;:::i;:::-;42590:139;;42317:419;;;:::o;42742:751::-;42965:4;43003:3;42992:9;42988:19;42980:27;;43017:71;43085:1;43074:9;43070:17;43061:6;43017:71;:::i;:::-;43098:72;43166:2;43155:9;43151:18;43142:6;43098:72;:::i;:::-;43180;43248:2;43237:9;43233:18;43224:6;43180:72;:::i;:::-;43262;43330:2;43319:9;43315:18;43306:6;43262:72;:::i;:::-;43382:9;43376:4;43372:20;43366:3;43355:9;43351:19;43344:49;43410:76;43481:4;43472:6;43410:76;:::i;:::-;43402:84;;42742:751;;;;;;;;:::o

Swarm Source

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