ERC-1155
Overview
Max Total Supply
120
Holders
110
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheToken
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol"; import "@manifoldxyz/royalty-registry-solidity/contracts/specs/IEIP2981.sol"; // The Token // Look beyond the Image, the Token is the only constant. // // @artist: Del // @dev: 0xG contract TheToken is AdminControl, IEIP2981, ERC1155 { struct Royalties { address recipient; uint256 amount; } struct Config { string[] uris; uint256 start; uint256 interval; bool locked; Royalties royalties; } mapping(uint256 => Config) private _configs; constructor() ERC1155("") { } function supportsInterface(bytes4 interfaceId) public view virtual override(AdminControl, ERC1155) returns (bool) { return AdminControl.supportsInterface(interfaceId) || ERC1155.supportsInterface(interfaceId) || interfaceId == type(IEIP2981).interfaceId || super.supportsInterface(interfaceId); } function setConfig(uint256 tokenId, Config calldata config_) external adminRequired { require(!_configs[tokenId].locked, 'The token is locked and you cannot change its metadata.'); _configs[tokenId] = config_; } function lockConfig(uint256 tokenId) external adminRequired { _configs[tokenId].locked = true; } function mint( address to, uint256[] calldata ids, uint256[] calldata amounts ) external adminRequired { for (uint256 i = 0; i < ids.length; ++i) { require(!_configs[ids[i]].locked, 'A token is locked and you cannot mint with this configuration.'); } _mintBatch(to, ids, amounts, ""); } function mintWithConfig( address to, uint256[] calldata ids, uint256[] calldata amounts, Config calldata config_ ) external adminRequired { for (uint256 i = 0; i < ids.length; ++i) { require(!_configs[ids[i]].locked, 'A token is locked and you cannot mint with this configuration.'); _configs[ids[i]] = config_; } _mintBatch(to, ids, amounts, ""); } function burn( uint256[] calldata ids, uint256[] calldata amounts ) external adminRequired { _burnBatch(_msgSender(), ids, amounts); } function setGlobalUri(string calldata newuri) external adminRequired { _setURI(newuri); } function uri(uint256 tokenId) public view virtual override returns (string memory) { Config memory config = _configs[tokenId]; if (config.uris.length == 0) { return super.uri(tokenId); } if (config.uris.length == 1 || block.timestamp <= config.start) { return config.uris[0]; } uint256 i = ((block.timestamp - config.start) / config.interval) % config.uris.length; return config.uris[i < config.uris.length ? i : config.uris.length - 1]; } function setRoyalties(uint256 tokenId, Royalties calldata royaltiesConfig) external adminRequired { require(!_configs[tokenId].locked, 'The token is locked and you cannot change its royalties.'); _configs[tokenId].royalties = royaltiesConfig; } function royaltyInfo(uint256 tokenId, uint256 salePrice) public override view returns (address, uint256) { if (_configs[tokenId].royalties.recipient != address(0)) { return (_configs[tokenId].royalties.recipient, salePrice * _configs[tokenId].royalties.amount / 10000); } return (address(0), 0); } function withdraw(address recipient) external adminRequired { payable(recipient).transfer(address(this).balance); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "./IAdminControl.sol"; abstract contract AdminControl is Ownable, IAdminControl, ERC165 { using EnumerableSet for EnumerableSet.AddressSet; // Track registered admins EnumerableSet.AddressSet private _admins; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IAdminControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Only allows approved admins to call the specified function */ modifier adminRequired() { require(owner() == msg.sender || _admins.contains(msg.sender), "AdminControl: Must be owner or admin"); _; } /** * @dev See {IAdminControl-getAdmins}. */ function getAdmins() external view override returns (address[] memory admins) { admins = new address[](_admins.length()); for (uint i = 0; i < _admins.length(); i++) { admins[i] = _admins.at(i); } return admins; } /** * @dev See {IAdminControl-approveAdmin}. */ function approveAdmin(address admin) external override onlyOwner { if (!_admins.contains(admin)) { emit AdminApproved(admin, msg.sender); _admins.add(admin); } } /** * @dev See {IAdminControl-revokeAdmin}. */ function revokeAdmin(address admin) external override onlyOwner { if (_admins.contains(admin)) { emit AdminRevoked(admin, msg.sender); _admins.remove(admin); } } /** * @dev See {IAdminControl-isAdmin}. */ function isAdmin(address admin) public override view returns (bool) { return (owner() == admin || _admins.contains(admin)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /** * @dev Interface for admin control */ interface IAdminControl is IERC165 { event AdminApproved(address indexed account, address indexed sender); event AdminRevoked(address indexed account, address indexed sender); /** * @dev gets address of all admins */ function getAdmins() external view returns (address[] memory); /** * @dev add an admin. Can only be called by contract owner. */ function approveAdmin(address admin) external; /** * @dev remove an admin. Can only be called by contract owner. */ function revokeAdmin(address admin) external; /** * @dev checks whether or not given address is an admin * Returns True if they are */ function isAdmin(address admin) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * EIP-2981 */ interface IEIP2981 { /** * bytes4(keccak256("royaltyInfo(uint256,uint256)")) == 0x2a55205a * * => 0x2a55205a = 0x2a55205a */ function royaltyInfo(uint256 tokenId, uint256 value) external view returns (address, uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.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(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), 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); _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); _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(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _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); _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(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); 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); } /** * @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); } /** * @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 {} 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.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. 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. 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "london", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"AdminApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"AdminRevoked","type":"event"},{"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":"admin","type":"address"}],"name":"approveAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmins","outputs":[{"internalType":"address[]","name":"admins","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"lockConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"components":[{"internalType":"string[]","name":"uris","type":"string[]"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"bool","name":"locked","type":"bool"},{"components":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct TheToken.Royalties","name":"royalties","type":"tuple"}],"internalType":"struct TheToken.Config","name":"config_","type":"tuple"}],"name":"mintWithConfig","outputs":[],"stateMutability":"nonpayable","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":"admin","type":"address"}],"name":"revokeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"string[]","name":"uris","type":"string[]"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"bool","name":"locked","type":"bool"},{"components":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct TheToken.Royalties","name":"royalties","type":"tuple"}],"internalType":"struct TheToken.Config","name":"config_","type":"tuple"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setGlobalUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct TheToken.Royalties","name":"royaltiesConfig","type":"tuple"}],"name":"setRoyalties","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060200160405280600081525062000042620000366200005a60201b60201c565b6200006260201b60201c565b62000053816200012660201b60201c565b5062000257565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600590805190602001906200013e92919062000142565b5050565b828054620001509062000221565b90600052602060002090601f016020900481019282620001745760008555620001c0565b82601f106200018f57805160ff1916838001178555620001c0565b82800160010185558215620001c0579182015b82811115620001bf578251825591602001919060010190620001a2565b5b509050620001cf9190620001d3565b5090565b5b80821115620001ee576000816000905550600101620001d4565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200023a57607f821691505b60208210811415620002515762000250620001f2565b5b50919050565b6159c980620002676000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c8063715018a6116100c3578063d9a77a131161007c578063d9a77a13146103bf578063e161132b146103db578063e4cbb46e146103f7578063e985e9c514610413578063f242432a14610443578063f2fde38b1461045f57610157565b8063715018a614610327578063734d49f1146103315780638da5cb5b1461034d5780639727756a1461036b578063a22cb46514610387578063c3566989146103a357610157565b80632eb2c2d6116101155780632eb2c2d61461026957806331ae450b146102855780634433e9b1146102a35780634e1273f4146102bf57806351cff8d9146102ef5780636d73e6691461030b57610157565b8062fdd58e1461015c57806301ffc9a71461018c5780630e89341c146101bc57806324d7806c146101ec5780632a55205a1461021c5780632d3456701461024d575b600080fd5b6101766004803603810190610171919061325c565b61047b565b60405161018391906132ab565b60405180910390f35b6101a660048036038101906101a1919061331e565b610545565b6040516101b39190613366565b60405180910390f35b6101d660048036038101906101d19190613381565b6105df565b6040516101e39190613447565b60405180910390f35b61020660048036038101906102019190613469565b610863565b6040516102139190613366565b60405180910390f35b61023660048036038101906102319190613496565b6108bd565b6040516102449291906134e5565b60405180910390f35b61026760048036038101906102629190613469565b6109b1565b005b610283600480360381019061027e919061370b565b610ab9565b005b61028d610b5a565b60405161029a9190613898565b60405180910390f35b6102bd60048036038101906102b89190613915565b610c3c565b005b6102d960048036038101906102d49190613a25565b610d1d565b6040516102e69190613b5b565b60405180910390f35b61030960048036038101906103049190613469565b610e36565b005b61032560048036038101906103209190613469565b610f10565b005b61032f611017565b005b61034b60048036038101906103469190613ba1565b61109f565b005b6103556111ba565b6040516103629190613bfd565b60405180910390f35b61038560048036038101906103809190613c6e565b6111e3565b005b6103a1600480360381019061039c9190613d2f565b6113b4565b005b6103bd60048036038101906103b89190613381565b6113ca565b005b6103d960048036038101906103d49190613d6f565b61148c565b005b6103f560048036038101906103f09190613e51565b61169a565b005b610411600480360381019061040c9190613e91565b6117b8565b005b61042d60048036038101906104289190613f12565b6118e2565b60405161043a9190613366565b60405180910390f35b61045d60048036038101906104589190613f52565b611976565b005b61047960048036038101906104749190613469565b611a17565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e39061405b565b60405180910390fd5b6003600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061055082611b0f565b80610560575061055f82611b89565b5b806105c857507f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d857506105d782611b89565b5b9050919050565b60606000600660008481526020019081526020016000206040518060a001604052908160008201805480602002602001604051908101604052809291908181526020016000905b828210156106d2578382906000526020600020018054610645906140aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610671906140aa565b80156106be5780601f10610693576101008083540402835291602001916106be565b820191906000526020600020905b8154815290600101906020018083116106a157829003601f168201915b505050505081526020019060010190610626565b50505050815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250508152505090506000816000015151141561079e5761079683611c6b565b91505061085e565b600181600001515114806107b6575080602001514211155b156107e35780600001516000815181106107d3576107d26140dc565b5b602002602001015191505061085e565b60008160000151518260400151836020015142610800919061413a565b61080a919061419d565b61081491906141ce565b90508160000151826000015151821061083e576001836000015151610839919061413a565b610840565b815b81518110610851576108506140dc565b5b6020026020010151925050505b919050565b60008173ffffffffffffffffffffffffffffffffffffffff166108846111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806108b657506108b5826001611cff90919063ffffffff16565b5b9050919050565b600080600073ffffffffffffffffffffffffffffffffffffffff166006600086815260200190815260200160002060040160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109a2576006600085815260200190815260200160002060040160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271060066000878152602001908152602001600020600401600101548561098f91906141ff565b610999919061419d565b915091506109aa565b600080915091505b9250929050565b6109b9611d2f565b73ffffffffffffffffffffffffffffffffffffffff166109d76111ba565b73ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a24906142a5565b60405180910390fd5b610a41816001611cff90919063ffffffff16565b15610ab6573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d560405160405180910390a3610ab4816001611d3790919063ffffffff16565b505b50565b610ac1611d2f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b075750610b0685610b01611d2f565b6118e2565b5b610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90614337565b60405180910390fd5b610b538585858585611d67565b5050505050565b6060610b66600161207e565b67ffffffffffffffff811115610b7f57610b7e613513565b5b604051908082528060200260200182016040528015610bad5781602001602082028036833780820191505090505b50905060005b610bbd600161207e565b811015610c3857610bd881600161209390919063ffffffff16565b828281518110610beb57610bea6140dc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080610c3090614357565b915050610bb3565b5090565b3373ffffffffffffffffffffffffffffffffffffffff16610c5b6111ba565b73ffffffffffffffffffffffffffffffffffffffff161480610c8d5750610c8c336001611cff90919063ffffffff16565b5b610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc390614412565b60405180910390fd5b610d1982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506120ad565b5050565b60608151835114610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a906144a4565b60405180910390fd5b6000835167ffffffffffffffff811115610d8057610d7f613513565b5b604051908082528060200260200182016040528015610dae5781602001602082028036833780820191505090505b50905060005b8451811015610e2b57610dfb858281518110610dd357610dd26140dc565b5b6020026020010151858381518110610dee57610ded6140dc565b5b602002602001015161047b565b828281518110610e0e57610e0d6140dc565b5b60200260200101818152505080610e2490614357565b9050610db4565b508091505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16610e556111ba565b73ffffffffffffffffffffffffffffffffffffffff161480610e875750610e86336001611cff90919063ffffffff16565b5b610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90614412565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f0c573d6000803e3d6000fd5b5050565b610f18611d2f565b73ffffffffffffffffffffffffffffffffffffffff16610f366111ba565b73ffffffffffffffffffffffffffffffffffffffff1614610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f83906142a5565b60405180910390fd5b610fa0816001611cff90919063ffffffff16565b611014573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb160405160405180910390a36110128160016120c790919063ffffffff16565b505b50565b61101f611d2f565b73ffffffffffffffffffffffffffffffffffffffff1661103d6111ba565b73ffffffffffffffffffffffffffffffffffffffff1614611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a906142a5565b60405180910390fd5b61109d60006120f7565b565b3373ffffffffffffffffffffffffffffffffffffffff166110be6111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806110f057506110ef336001611cff90919063ffffffff16565b5b61112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690614412565b60405180910390fd5b6006600083815260200190815260200160002060030160009054906101000a900460ff1615611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a90614536565b60405180910390fd5b806006600084815260200190815260200160002081816111b39190614f18565b9050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff166112026111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806112345750611233336001611cff90919063ffffffff16565b5b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614412565b60405180910390fd5b60005b8484905081101561130f5760066000868684818110611298576112976140dc565b5b90506020020135815260200190815260200160002060030160009054906101000a900460ff16156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590614f98565b60405180910390fd5b8061130890614357565b9050611276565b506113ad85858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050604051806020016040528060008152506121bb565b5050505050565b6113c66113bf611d2f565b83836123da565b5050565b3373ffffffffffffffffffffffffffffffffffffffff166113e96111ba565b73ffffffffffffffffffffffffffffffffffffffff16148061141b575061141a336001611cff90919063ffffffff16565b5b61145a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145190614412565b60405180910390fd5b60016006600083815260200190815260200160002060030160006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff166114ab6111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806114dd57506114dc336001611cff90919063ffffffff16565b5b61151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390614412565b60405180910390fd5b60005b858590508110156115f45760066000878784818110611541576115406140dc565b5b90506020020135815260200190815260200160002060030160009054906101000a900460ff16156115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614f98565b60405180910390fd5b81600660008888858181106115bf576115be6140dc565b5b90506020020135815260200190815260200160002081816115e09190614f18565b905050806115ed90614357565b905061151f565b5061169286868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050604051806020016040528060008152506121bb565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff166116b96111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806116eb57506116ea336001611cff90919063ffffffff16565b5b61172a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172190614412565b60405180910390fd5b6006600083815260200190815260200160002060030160009054906101000a900460ff161561178e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117859061502a565b60405180910390fd5b806006600084815260200190815260200160002060040181816117b19190614e6c565b9050505050565b3373ffffffffffffffffffffffffffffffffffffffff166117d76111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806118095750611808336001611cff90919063ffffffff16565b5b611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90614412565b60405180910390fd5b6118dc611853611d2f565b858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612547565b50505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61197e611d2f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806119c457506119c3856119be611d2f565b6118e2565b5b611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906150bc565b60405180910390fd5b611a1085858585856127fa565b5050505050565b611a1f611d2f565b73ffffffffffffffffffffffffffffffffffffffff16611a3d6111ba565b73ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906142a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa9061514e565b60405180910390fd5b611b0c816120f7565b50565b60007f553e757e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b825750611b8182612a7f565b5b9050919050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c5457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c645750611c6382611b0f565b5b9050919050565b606060058054611c7a906140aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca6906140aa565b8015611cf35780601f10611cc857610100808354040283529160200191611cf3565b820191906000526020600020905b815481529060010190602001808311611cd657829003601f168201915b50505050509050919050565b6000611d27836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ae9565b905092915050565b600033905090565b6000611d5f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612b0c565b905092915050565b8151835114611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da2906151e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290615272565b60405180910390fd5b6000611e25611d2f565b9050611e35818787878787612c20565b60005b8451811015611fe9576000858281518110611e5657611e556140dc565b5b602002602001015190506000858381518110611e7557611e746140dc565b5b6020026020010151905060006003600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90615304565b60405180910390fd5b8181036003600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816003600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fce9190615324565b9250508190555050505080611fe290614357565b9050611e38565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161206092919061537a565b60405180910390a4612076818787878787612c28565b505050505050565b600061208c82600001612e00565b9050919050565b60006120a28360000183612e11565b60001c905092915050565b80600590805190602001906120c3929190613111565b5050565b60006120ef836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e3c565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290615423565b60405180910390fd5b815183511461226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906151e0565b60405180910390fd5b6000612279611d2f565b905061228a81600087878787612c20565b60005b8451811015612344578381815181106122a9576122a86140dc565b5b6020026020010151600360008784815181106122c8576122c76140dc565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232a9190615324565b92505081905550808061233c90614357565b91505061228d565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516123bc92919061537a565b60405180910390a46123d381600087878787612c28565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612449576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612440906154b5565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161253a9190613366565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90615547565b60405180910390fd5b80518251146125fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f2906151e0565b60405180910390fd5b6000612605611d2f565b905061262581856000868660405180602001604052806000815250612c20565b60005b8351811015612774576000848281518110612646576126456140dc565b5b602002602001015190506000848381518110612665576126646140dc565b5b6020026020010151905060006003600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe906155d9565b60405180910390fd5b8181036003600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061276c90614357565b915050612628565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516127ec92919061537a565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190615272565b60405180910390fd5b6000612874611d2f565b905061289481878761288588612eac565b61288e88612eac565b87612c20565b60006003600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561292c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292390615304565b60405180910390fd5b8381036003600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836003600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129e39190615324565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612a609291906155f9565b60405180910390a4612a76828888888888612f26565b50505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612c14576000600182612b3e919061413a565b9050600060018660000180549050612b56919061413a565b9050818114612bc5576000866000018281548110612b7757612b766140dc565b5b9060005260206000200154905080876000018481548110612b9b57612b9a6140dc565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612bd957612bd8615622565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612c1a565b60009150505b92915050565b505050505050565b612c478473ffffffffffffffffffffffffffffffffffffffff166130fe565b15612df8578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612c8d9594939291906156a6565b6020604051808303816000875af1925050508015612cc957506040513d601f19601f82011682018060405250810190612cc69190615723565b60015b612d6f57612cd561575d565b806308c379a01415612d325750612cea61577f565b80612cf55750612d34565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d299190613447565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6690615887565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ded90615919565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b6000826000018281548110612e2957612e286140dc565b5b9060005260206000200154905092915050565b6000612e488383612ae9565b612ea1578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612ea6565b600090505b92915050565b60606000600167ffffffffffffffff811115612ecb57612eca613513565b5b604051908082528060200260200182016040528015612ef95781602001602082028036833780820191505090505b5090508281600081518110612f1157612f106140dc565b5b60200260200101818152505080915050919050565b612f458473ffffffffffffffffffffffffffffffffffffffff166130fe565b156130f6578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612f8b959493929190615939565b6020604051808303816000875af1925050508015612fc757506040513d601f19601f82011682018060405250810190612fc49190615723565b60015b61306d57612fd361575d565b806308c379a014156130305750612fe861577f565b80612ff35750613032565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130279190613447565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490615887565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146130f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130eb90615919565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461311d906140aa565b90600052602060002090601f01602090048101928261313f5760008555613186565b82601f1061315857805160ff1916838001178555613186565b82800160010185558215613186579182015b8281111561318557825182559160200191906001019061316a565b5b5090506131939190613197565b5090565b5b808211156131b0576000816000905550600101613198565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131f3826131c8565b9050919050565b613203816131e8565b811461320e57600080fd5b50565b600081359050613220816131fa565b92915050565b6000819050919050565b61323981613226565b811461324457600080fd5b50565b60008135905061325681613230565b92915050565b60008060408385031215613273576132726131be565b5b600061328185828601613211565b925050602061329285828601613247565b9150509250929050565b6132a581613226565b82525050565b60006020820190506132c0600083018461329c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132fb816132c6565b811461330657600080fd5b50565b600081359050613318816132f2565b92915050565b600060208284031215613334576133336131be565b5b600061334284828501613309565b91505092915050565b60008115159050919050565b6133608161334b565b82525050565b600060208201905061337b6000830184613357565b92915050565b600060208284031215613397576133966131be565b5b60006133a584828501613247565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133e85780820151818401526020810190506133cd565b838111156133f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613419826133ae565b61342381856133b9565b93506134338185602086016133ca565b61343c816133fd565b840191505092915050565b60006020820190508181036000830152613461818461340e565b905092915050565b60006020828403121561347f5761347e6131be565b5b600061348d84828501613211565b91505092915050565b600080604083850312156134ad576134ac6131be565b5b60006134bb85828601613247565b92505060206134cc85828601613247565b9150509250929050565b6134df816131e8565b82525050565b60006040820190506134fa60008301856134d6565b613507602083018461329c565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61354b826133fd565b810181811067ffffffffffffffff8211171561356a57613569613513565b5b80604052505050565b600061357d6131b4565b90506135898282613542565b919050565b600067ffffffffffffffff8211156135a9576135a8613513565b5b602082029050602081019050919050565b600080fd5b60006135d26135cd8461358e565b613573565b905080838252602082019050602084028301858111156135f5576135f46135ba565b5b835b8181101561361e578061360a8882613247565b8452602084019350506020810190506135f7565b5050509392505050565b600082601f83011261363d5761363c61350e565b5b813561364d8482602086016135bf565b91505092915050565b600080fd5b600067ffffffffffffffff82111561367657613675613513565b5b61367f826133fd565b9050602081019050919050565b82818337600083830152505050565b60006136ae6136a98461365b565b613573565b9050828152602081018484840111156136ca576136c9613656565b5b6136d584828561368c565b509392505050565b600082601f8301126136f2576136f161350e565b5b813561370284826020860161369b565b91505092915050565b600080600080600060a08688031215613727576137266131be565b5b600061373588828901613211565b955050602061374688828901613211565b945050604086013567ffffffffffffffff811115613767576137666131c3565b5b61377388828901613628565b935050606086013567ffffffffffffffff811115613794576137936131c3565b5b6137a088828901613628565b925050608086013567ffffffffffffffff8111156137c1576137c06131c3565b5b6137cd888289016136dd565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61380f816131e8565b82525050565b60006138218383613806565b60208301905092915050565b6000602082019050919050565b6000613845826137da565b61384f81856137e5565b935061385a836137f6565b8060005b8381101561388b5781516138728882613815565b975061387d8361382d565b92505060018101905061385e565b5085935050505092915050565b600060208201905081810360008301526138b2818461383a565b905092915050565b600080fd5b60008083601f8401126138d5576138d461350e565b5b8235905067ffffffffffffffff8111156138f2576138f16138ba565b5b60208301915083600182028301111561390e5761390d6135ba565b5b9250929050565b6000806020838503121561392c5761392b6131be565b5b600083013567ffffffffffffffff81111561394a576139496131c3565b5b613956858286016138bf565b92509250509250929050565b600067ffffffffffffffff82111561397d5761397c613513565b5b602082029050602081019050919050565b60006139a161399c84613962565b613573565b905080838252602082019050602084028301858111156139c4576139c36135ba565b5b835b818110156139ed57806139d98882613211565b8452602084019350506020810190506139c6565b5050509392505050565b600082601f830112613a0c57613a0b61350e565b5b8135613a1c84826020860161398e565b91505092915050565b60008060408385031215613a3c57613a3b6131be565b5b600083013567ffffffffffffffff811115613a5a57613a596131c3565b5b613a66858286016139f7565b925050602083013567ffffffffffffffff811115613a8757613a866131c3565b5b613a9385828601613628565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ad281613226565b82525050565b6000613ae48383613ac9565b60208301905092915050565b6000602082019050919050565b6000613b0882613a9d565b613b128185613aa8565b9350613b1d83613ab9565b8060005b83811015613b4e578151613b358882613ad8565b9750613b4083613af0565b925050600181019050613b21565b5085935050505092915050565b60006020820190508181036000830152613b758184613afd565b905092915050565b600080fd5b600060c08284031215613b9857613b97613b7d565b5b81905092915050565b60008060408385031215613bb857613bb76131be565b5b6000613bc685828601613247565b925050602083013567ffffffffffffffff811115613be757613be66131c3565b5b613bf385828601613b82565b9150509250929050565b6000602082019050613c1260008301846134d6565b92915050565b60008083601f840112613c2e57613c2d61350e565b5b8235905067ffffffffffffffff811115613c4b57613c4a6138ba565b5b602083019150836020820283011115613c6757613c666135ba565b5b9250929050565b600080600080600060608688031215613c8a57613c896131be565b5b6000613c9888828901613211565b955050602086013567ffffffffffffffff811115613cb957613cb86131c3565b5b613cc588828901613c18565b9450945050604086013567ffffffffffffffff811115613ce857613ce76131c3565b5b613cf488828901613c18565b92509250509295509295909350565b613d0c8161334b565b8114613d1757600080fd5b50565b600081359050613d2981613d03565b92915050565b60008060408385031215613d4657613d456131be565b5b6000613d5485828601613211565b9250506020613d6585828601613d1a565b9150509250929050565b60008060008060008060808789031215613d8c57613d8b6131be565b5b6000613d9a89828a01613211565b965050602087013567ffffffffffffffff811115613dbb57613dba6131c3565b5b613dc789828a01613c18565b9550955050604087013567ffffffffffffffff811115613dea57613de96131c3565b5b613df689828a01613c18565b9350935050606087013567ffffffffffffffff811115613e1957613e186131c3565b5b613e2589828a01613b82565b9150509295509295509295565b600060408284031215613e4857613e47613b7d565b5b81905092915050565b60008060608385031215613e6857613e676131be565b5b6000613e7685828601613247565b9250506020613e8785828601613e32565b9150509250929050565b60008060008060408587031215613eab57613eaa6131be565b5b600085013567ffffffffffffffff811115613ec957613ec86131c3565b5b613ed587828801613c18565b9450945050602085013567ffffffffffffffff811115613ef857613ef76131c3565b5b613f0487828801613c18565b925092505092959194509250565b60008060408385031215613f2957613f286131be565b5b6000613f3785828601613211565b9250506020613f4885828601613211565b9150509250929050565b600080600080600060a08688031215613f6e57613f6d6131be565b5b6000613f7c88828901613211565b9550506020613f8d88828901613211565b9450506040613f9e88828901613247565b9350506060613faf88828901613247565b925050608086013567ffffffffffffffff811115613fd057613fcf6131c3565b5b613fdc888289016136dd565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614045602b836133b9565b915061405082613fe9565b604082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140c257607f821691505b602082108114156140d6576140d561407b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061414582613226565b915061415083613226565b9250828210156141635761416261410b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141a882613226565b91506141b383613226565b9250826141c3576141c261416e565b5b828204905092915050565b60006141d982613226565b91506141e483613226565b9250826141f4576141f361416e565b5b828206905092915050565b600061420a82613226565b915061421583613226565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561424e5761424d61410b565b5b828202905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061428f6020836133b9565b915061429a82614259565b602082019050919050565b600060208201905081810360008301526142be81614282565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006143216032836133b9565b915061432c826142c5565b604082019050919050565b6000602082019050818103600083015261435081614314565b9050919050565b600061436282613226565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143955761439461410b565b5b600182019050919050565b7f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f72206160008201527f646d696e00000000000000000000000000000000000000000000000000000000602082015250565b60006143fc6024836133b9565b9150614407826143a0565b604082019050919050565b6000602082019050818103600083015261442b816143ef565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061448e6029836133b9565b915061449982614432565b604082019050919050565b600060208201905081810360008301526144bd81614481565b9050919050565b7f54686520746f6b656e206973206c6f636b656420616e6420796f752063616e6e60008201527f6f74206368616e676520697473206d657461646174612e000000000000000000602082015250565b60006145206037836133b9565b915061452b826144c4565b604082019050919050565b6000602082019050818103600083015261454f81614513565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126145b1576145b0614585565b5b80840192508235915067ffffffffffffffff8211156145d3576145d261458a565b5b6020830192506020820236038313156145ef576145ee61458f565b5b509250929050565b6000819050919050565b6000808335600160200384360303811261461e5761461d614585565b5b80840192508235915067ffffffffffffffff8211156146405761463f61458a565b5b60208301925060018202360383131561465c5761465b61458f565b5b509250929050565b600081549050919050565b60008190506001806001038301049050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600082821c905092915050565b6146eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026146ae565b815481168255505050565b600082821b905092915050565b6000600883026147337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826146f6565b61473d86836146f6565b95508019841693508086168417925050509392505050565b6000819050919050565b600061477a61477561477084613226565b614755565b613226565b9050919050565b6000819050919050565b6147948361475f565b6147a86147a082614781565b848454614703565b825550505050565b600090565b6147bd6147b0565b6147c881848461478b565b505050565b5b818110156147ec576147e16000826147b5565b6001810190506147ce565b5050565b6000614801600019846008026146ae565b1980831691505092915050565b600061481a83836147f0565b9150826002028217905092915050565b61483381614699565b61483e83825461480e565b8083556000825550505050565b60006020601f8301049050919050565b60208410600081146148b657601f8411600181146148845761487d868561480e565b83556148b0565b61488d83614699565b6148a46148998761484b565b8201600183016147cd565b6148ae878561482a565b505b50614903565b6148bf82614699565b6148c88661484b565b8101601f871680156148e2576148e181600184036146bb565b5b6148f66148ee8861484b565b8401836147cd565b6001886002021785555050505b5050505050565b6801000000000000000084111561492457614923613513565b5b602083106000811461496f57602085106000811461494d57614946868561480e565b8355614969565b8360ff191693508361495e84614699565b556001866002020183555b50614979565b6001856002020182555b5050505050565b805461498b816140aa565b808411156149a05761499f8482848661490a565b5b808410156149b5576149b48482848661485b565b5b50505050565b818110156149d9576149ce6000826147b5565b6001810190506149bb565b5050565b6149e8600082614980565b50565b600082146149fc576149fb614556565b5b614a05816149dd565b5050565b5b81811015614a2857614a1d6000826149eb565b600181019050614a0a565b5050565b81831015614a6557614a3d8261466f565b614a468461466f565b614a4f83614684565b818101838201614a5f8183614a09565b50505050505b505050565b68010000000000000000821115614a8457614a83613513565b5b614a8d81614664565b828255614a9b838284614a2c565b505050565b600082905092915050565b600082905092915050565b601f821115614af757614ac881614699565b614ad18461484b565b81016020851015614ae0578190505b614af4614aec8561484b565b8301826147cd565b50505b505050565b614b068383614aab565b67ffffffffffffffff811115614b1f57614b1e613513565b5b614b2982546140aa565b614b34828285614ab6565b6000601f831160018114614b635760008415614b51578287013590505b614b5b858261480e565b865550614bc3565b601f198416614b7186614699565b60005b82811015614b9957848901358255600182019150602085019450602081019050614b74565b86831015614bb65784890135614bb2601f8916826147f0565b8355505b6001600288020188555050505b50505050505050565b8115614bdb57614bda614556565b5b614be6848483614afc565b50505050565b614bf68383614aa0565b614c008183614a6a565b614c09836145f7565b614c1283614684565b6000805b84811015614c4d57614c288488614601565b614c3481838688614bcc565b6020860195506001850194505050600181019050614c16565b5050505050505050565b614c62838383614bec565b505050565b60008135614c7481613230565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614cb684614c7d565b9350801983169250808416831791505092915050565b614cd58261475f565b614ce8614ce182614781565b8354614c8a565b8255505050565b60008135614cfc81613d03565b80915050919050565b600060ff614d1284614c7d565b9350801983169250808416831791505092915050565b6000614d338261334b565b9050919050565b6000819050919050565b614d4d82614d28565b614d60614d5982614d3a565b8354614d05565b8255505050565b60008135614d74816131fa565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff614d9d84614c7d565b9350801983169250808416831791505092915050565b6000614dce614dc9614dc4846131c8565b614755565b6131c8565b9050919050565b6000614de082614db3565b9050919050565b6000614df282614dd5565b9050919050565b6000819050919050565b614e0c82614de7565b614e1f614e1882614df9565b8354614d7d565b8255505050565b600081016000830180614e3881614d67565b9050614e448184614e03565b505050600181016020830180614e5981614c67565b9050614e658184614ccc565b5050505050565b614e768282614e26565b5050565b6000810160008301614e8c8185614594565b614e97818386614c57565b50505050600181016020830180614ead81614c67565b9050614eb98184614ccc565b505050600281016040830180614ece81614c67565b9050614eda8184614ccc565b505050600381016060830180614eef81614cef565b9050614efb8184614d44565b505050600481016080830180614f118184614e6c565b5050505050565b614f228282614e7a565b5050565b7f4120746f6b656e206973206c6f636b656420616e6420796f752063616e6e6f7460008201527f206d696e742077697468207468697320636f6e66696775726174696f6e2e0000602082015250565b6000614f82603e836133b9565b9150614f8d82614f26565b604082019050919050565b60006020820190508181036000830152614fb181614f75565b9050919050565b7f54686520746f6b656e206973206c6f636b656420616e6420796f752063616e6e60008201527f6f74206368616e67652069747320726f79616c746965732e0000000000000000602082015250565b60006150146038836133b9565b915061501f82614fb8565b604082019050919050565b6000602082019050818103600083015261504381615007565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006150a66029836133b9565b91506150b18261504a565b604082019050919050565b600060208201905081810360008301526150d581615099565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151386026836133b9565b9150615143826150dc565b604082019050919050565b600060208201905081810360008301526151678161512b565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006151ca6028836133b9565b91506151d58261516e565b604082019050919050565b600060208201905081810360008301526151f9816151bd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061525c6025836133b9565b915061526782615200565b604082019050919050565b6000602082019050818103600083015261528b8161524f565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006152ee602a836133b9565b91506152f982615292565b604082019050919050565b6000602082019050818103600083015261531d816152e1565b9050919050565b600061532f82613226565b915061533a83613226565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561536f5761536e61410b565b5b828201905092915050565b600060408201905081810360008301526153948185613afd565b905081810360208301526153a88184613afd565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061540d6021836133b9565b9150615418826153b1565b604082019050919050565b6000602082019050818103600083015261543c81615400565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061549f6029836133b9565b91506154aa82615443565b604082019050919050565b600060208201905081810360008301526154ce81615492565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155316023836133b9565b915061553c826154d5565b604082019050919050565b6000602082019050818103600083015261556081615524565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006155c36024836133b9565b91506155ce82615567565b604082019050919050565b600060208201905081810360008301526155f2816155b6565b9050919050565b600060408201905061560e600083018561329c565b61561b602083018461329c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061567882615651565b615682818561565c565b93506156928185602086016133ca565b61569b816133fd565b840191505092915050565b600060a0820190506156bb60008301886134d6565b6156c860208301876134d6565b81810360408301526156da8186613afd565b905081810360608301526156ee8185613afd565b90508181036080830152615702818461566d565b90509695505050505050565b60008151905061571d816132f2565b92915050565b600060208284031215615739576157386131be565b5b60006157478482850161570e565b91505092915050565b60008160e01c9050919050565b600060033d111561577c5760046000803e615779600051615750565b90505b90565b600060443d101561578f57615812565b6157976131b4565b60043d036004823e80513d602482011167ffffffffffffffff821117156157bf575050615812565b808201805167ffffffffffffffff8111156157dd5750505050615812565b80602083010160043d0385018111156157fa575050505050615812565b61580982602001850186613542565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006158716034836133b9565b915061587c82615815565b604082019050919050565b600060208201905081810360008301526158a081615864565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006159036028836133b9565b915061590e826158a7565b604082019050919050565b60006020820190508181036000830152615932816158f6565b9050919050565b600060a08201905061594e60008301886134d6565b61595b60208301876134d6565b615968604083018661329c565b615975606083018561329c565b8181036080830152615987818461566d565b9050969550505050505056fea2646970667358221220ae70fc461c38951c10c7248b74c77714a6e29c695a91629723a24fb0171e97fd64736f6c634300080a0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101575760003560e01c8063715018a6116100c3578063d9a77a131161007c578063d9a77a13146103bf578063e161132b146103db578063e4cbb46e146103f7578063e985e9c514610413578063f242432a14610443578063f2fde38b1461045f57610157565b8063715018a614610327578063734d49f1146103315780638da5cb5b1461034d5780639727756a1461036b578063a22cb46514610387578063c3566989146103a357610157565b80632eb2c2d6116101155780632eb2c2d61461026957806331ae450b146102855780634433e9b1146102a35780634e1273f4146102bf57806351cff8d9146102ef5780636d73e6691461030b57610157565b8062fdd58e1461015c57806301ffc9a71461018c5780630e89341c146101bc57806324d7806c146101ec5780632a55205a1461021c5780632d3456701461024d575b600080fd5b6101766004803603810190610171919061325c565b61047b565b60405161018391906132ab565b60405180910390f35b6101a660048036038101906101a1919061331e565b610545565b6040516101b39190613366565b60405180910390f35b6101d660048036038101906101d19190613381565b6105df565b6040516101e39190613447565b60405180910390f35b61020660048036038101906102019190613469565b610863565b6040516102139190613366565b60405180910390f35b61023660048036038101906102319190613496565b6108bd565b6040516102449291906134e5565b60405180910390f35b61026760048036038101906102629190613469565b6109b1565b005b610283600480360381019061027e919061370b565b610ab9565b005b61028d610b5a565b60405161029a9190613898565b60405180910390f35b6102bd60048036038101906102b89190613915565b610c3c565b005b6102d960048036038101906102d49190613a25565b610d1d565b6040516102e69190613b5b565b60405180910390f35b61030960048036038101906103049190613469565b610e36565b005b61032560048036038101906103209190613469565b610f10565b005b61032f611017565b005b61034b60048036038101906103469190613ba1565b61109f565b005b6103556111ba565b6040516103629190613bfd565b60405180910390f35b61038560048036038101906103809190613c6e565b6111e3565b005b6103a1600480360381019061039c9190613d2f565b6113b4565b005b6103bd60048036038101906103b89190613381565b6113ca565b005b6103d960048036038101906103d49190613d6f565b61148c565b005b6103f560048036038101906103f09190613e51565b61169a565b005b610411600480360381019061040c9190613e91565b6117b8565b005b61042d60048036038101906104289190613f12565b6118e2565b60405161043a9190613366565b60405180910390f35b61045d60048036038101906104589190613f52565b611976565b005b61047960048036038101906104749190613469565b611a17565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e39061405b565b60405180910390fd5b6003600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061055082611b0f565b80610560575061055f82611b89565b5b806105c857507f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d857506105d782611b89565b5b9050919050565b60606000600660008481526020019081526020016000206040518060a001604052908160008201805480602002602001604051908101604052809291908181526020016000905b828210156106d2578382906000526020600020018054610645906140aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610671906140aa565b80156106be5780601f10610693576101008083540402835291602001916106be565b820191906000526020600020905b8154815290600101906020018083116106a157829003601f168201915b505050505081526020019060010190610626565b50505050815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152602001600482016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250508152505090506000816000015151141561079e5761079683611c6b565b91505061085e565b600181600001515114806107b6575080602001514211155b156107e35780600001516000815181106107d3576107d26140dc565b5b602002602001015191505061085e565b60008160000151518260400151836020015142610800919061413a565b61080a919061419d565b61081491906141ce565b90508160000151826000015151821061083e576001836000015151610839919061413a565b610840565b815b81518110610851576108506140dc565b5b6020026020010151925050505b919050565b60008173ffffffffffffffffffffffffffffffffffffffff166108846111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806108b657506108b5826001611cff90919063ffffffff16565b5b9050919050565b600080600073ffffffffffffffffffffffffffffffffffffffff166006600086815260200190815260200160002060040160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109a2576006600085815260200190815260200160002060040160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271060066000878152602001908152602001600020600401600101548561098f91906141ff565b610999919061419d565b915091506109aa565b600080915091505b9250929050565b6109b9611d2f565b73ffffffffffffffffffffffffffffffffffffffff166109d76111ba565b73ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a24906142a5565b60405180910390fd5b610a41816001611cff90919063ffffffff16565b15610ab6573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d560405160405180910390a3610ab4816001611d3790919063ffffffff16565b505b50565b610ac1611d2f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b075750610b0685610b01611d2f565b6118e2565b5b610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90614337565b60405180910390fd5b610b538585858585611d67565b5050505050565b6060610b66600161207e565b67ffffffffffffffff811115610b7f57610b7e613513565b5b604051908082528060200260200182016040528015610bad5781602001602082028036833780820191505090505b50905060005b610bbd600161207e565b811015610c3857610bd881600161209390919063ffffffff16565b828281518110610beb57610bea6140dc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080610c3090614357565b915050610bb3565b5090565b3373ffffffffffffffffffffffffffffffffffffffff16610c5b6111ba565b73ffffffffffffffffffffffffffffffffffffffff161480610c8d5750610c8c336001611cff90919063ffffffff16565b5b610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc390614412565b60405180910390fd5b610d1982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506120ad565b5050565b60608151835114610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a906144a4565b60405180910390fd5b6000835167ffffffffffffffff811115610d8057610d7f613513565b5b604051908082528060200260200182016040528015610dae5781602001602082028036833780820191505090505b50905060005b8451811015610e2b57610dfb858281518110610dd357610dd26140dc565b5b6020026020010151858381518110610dee57610ded6140dc565b5b602002602001015161047b565b828281518110610e0e57610e0d6140dc565b5b60200260200101818152505080610e2490614357565b9050610db4565b508091505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16610e556111ba565b73ffffffffffffffffffffffffffffffffffffffff161480610e875750610e86336001611cff90919063ffffffff16565b5b610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90614412565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f0c573d6000803e3d6000fd5b5050565b610f18611d2f565b73ffffffffffffffffffffffffffffffffffffffff16610f366111ba565b73ffffffffffffffffffffffffffffffffffffffff1614610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f83906142a5565b60405180910390fd5b610fa0816001611cff90919063ffffffff16565b611014573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb160405160405180910390a36110128160016120c790919063ffffffff16565b505b50565b61101f611d2f565b73ffffffffffffffffffffffffffffffffffffffff1661103d6111ba565b73ffffffffffffffffffffffffffffffffffffffff1614611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a906142a5565b60405180910390fd5b61109d60006120f7565b565b3373ffffffffffffffffffffffffffffffffffffffff166110be6111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806110f057506110ef336001611cff90919063ffffffff16565b5b61112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690614412565b60405180910390fd5b6006600083815260200190815260200160002060030160009054906101000a900460ff1615611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a90614536565b60405180910390fd5b806006600084815260200190815260200160002081816111b39190614f18565b9050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff166112026111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806112345750611233336001611cff90919063ffffffff16565b5b611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90614412565b60405180910390fd5b60005b8484905081101561130f5760066000868684818110611298576112976140dc565b5b90506020020135815260200190815260200160002060030160009054906101000a900460ff16156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590614f98565b60405180910390fd5b8061130890614357565b9050611276565b506113ad85858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050604051806020016040528060008152506121bb565b5050505050565b6113c66113bf611d2f565b83836123da565b5050565b3373ffffffffffffffffffffffffffffffffffffffff166113e96111ba565b73ffffffffffffffffffffffffffffffffffffffff16148061141b575061141a336001611cff90919063ffffffff16565b5b61145a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145190614412565b60405180910390fd5b60016006600083815260200190815260200160002060030160006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff166114ab6111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806114dd57506114dc336001611cff90919063ffffffff16565b5b61151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390614412565b60405180910390fd5b60005b858590508110156115f45760066000878784818110611541576115406140dc565b5b90506020020135815260200190815260200160002060030160009054906101000a900460ff16156115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614f98565b60405180910390fd5b81600660008888858181106115bf576115be6140dc565b5b90506020020135815260200190815260200160002081816115e09190614f18565b905050806115ed90614357565b905061151f565b5061169286868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050604051806020016040528060008152506121bb565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff166116b96111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806116eb57506116ea336001611cff90919063ffffffff16565b5b61172a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172190614412565b60405180910390fd5b6006600083815260200190815260200160002060030160009054906101000a900460ff161561178e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117859061502a565b60405180910390fd5b806006600084815260200190815260200160002060040181816117b19190614e6c565b9050505050565b3373ffffffffffffffffffffffffffffffffffffffff166117d76111ba565b73ffffffffffffffffffffffffffffffffffffffff1614806118095750611808336001611cff90919063ffffffff16565b5b611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90614412565b60405180910390fd5b6118dc611853611d2f565b858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612547565b50505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61197e611d2f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806119c457506119c3856119be611d2f565b6118e2565b5b611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906150bc565b60405180910390fd5b611a1085858585856127fa565b5050505050565b611a1f611d2f565b73ffffffffffffffffffffffffffffffffffffffff16611a3d6111ba565b73ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906142a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa9061514e565b60405180910390fd5b611b0c816120f7565b50565b60007f553e757e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b825750611b8182612a7f565b5b9050919050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c5457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c645750611c6382611b0f565b5b9050919050565b606060058054611c7a906140aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca6906140aa565b8015611cf35780601f10611cc857610100808354040283529160200191611cf3565b820191906000526020600020905b815481529060010190602001808311611cd657829003601f168201915b50505050509050919050565b6000611d27836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ae9565b905092915050565b600033905090565b6000611d5f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612b0c565b905092915050565b8151835114611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da2906151e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290615272565b60405180910390fd5b6000611e25611d2f565b9050611e35818787878787612c20565b60005b8451811015611fe9576000858281518110611e5657611e556140dc565b5b602002602001015190506000858381518110611e7557611e746140dc565b5b6020026020010151905060006003600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90615304565b60405180910390fd5b8181036003600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816003600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fce9190615324565b9250508190555050505080611fe290614357565b9050611e38565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161206092919061537a565b60405180910390a4612076818787878787612c28565b505050505050565b600061208c82600001612e00565b9050919050565b60006120a28360000183612e11565b60001c905092915050565b80600590805190602001906120c3929190613111565b5050565b60006120ef836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e3c565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290615423565b60405180910390fd5b815183511461226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906151e0565b60405180910390fd5b6000612279611d2f565b905061228a81600087878787612c20565b60005b8451811015612344578381815181106122a9576122a86140dc565b5b6020026020010151600360008784815181106122c8576122c76140dc565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232a9190615324565b92505081905550808061233c90614357565b91505061228d565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516123bc92919061537a565b60405180910390a46123d381600087878787612c28565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612449576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612440906154b5565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161253a9190613366565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90615547565b60405180910390fd5b80518251146125fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f2906151e0565b60405180910390fd5b6000612605611d2f565b905061262581856000868660405180602001604052806000815250612c20565b60005b8351811015612774576000848281518110612646576126456140dc565b5b602002602001015190506000848381518110612665576126646140dc565b5b6020026020010151905060006003600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe906155d9565b60405180910390fd5b8181036003600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061276c90614357565b915050612628565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516127ec92919061537a565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190615272565b60405180910390fd5b6000612874611d2f565b905061289481878761288588612eac565b61288e88612eac565b87612c20565b60006003600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561292c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292390615304565b60405180910390fd5b8381036003600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836003600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129e39190615324565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612a609291906155f9565b60405180910390a4612a76828888888888612f26565b50505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612c14576000600182612b3e919061413a565b9050600060018660000180549050612b56919061413a565b9050818114612bc5576000866000018281548110612b7757612b766140dc565b5b9060005260206000200154905080876000018481548110612b9b57612b9a6140dc565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612bd957612bd8615622565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612c1a565b60009150505b92915050565b505050505050565b612c478473ffffffffffffffffffffffffffffffffffffffff166130fe565b15612df8578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612c8d9594939291906156a6565b6020604051808303816000875af1925050508015612cc957506040513d601f19601f82011682018060405250810190612cc69190615723565b60015b612d6f57612cd561575d565b806308c379a01415612d325750612cea61577f565b80612cf55750612d34565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d299190613447565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6690615887565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ded90615919565b60405180910390fd5b505b505050505050565b600081600001805490509050919050565b6000826000018281548110612e2957612e286140dc565b5b9060005260206000200154905092915050565b6000612e488383612ae9565b612ea1578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612ea6565b600090505b92915050565b60606000600167ffffffffffffffff811115612ecb57612eca613513565b5b604051908082528060200260200182016040528015612ef95781602001602082028036833780820191505090505b5090508281600081518110612f1157612f106140dc565b5b60200260200101818152505080915050919050565b612f458473ffffffffffffffffffffffffffffffffffffffff166130fe565b156130f6578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612f8b959493929190615939565b6020604051808303816000875af1925050508015612fc757506040513d601f19601f82011682018060405250810190612fc49190615723565b60015b61306d57612fd361575d565b806308c379a014156130305750612fe861577f565b80612ff35750613032565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130279190613447565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490615887565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146130f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130eb90615919565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461311d906140aa565b90600052602060002090601f01602090048101928261313f5760008555613186565b82601f1061315857805160ff1916838001178555613186565b82800160010185558215613186579182015b8281111561318557825182559160200191906001019061316a565b5b5090506131939190613197565b5090565b5b808211156131b0576000816000905550600101613198565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131f3826131c8565b9050919050565b613203816131e8565b811461320e57600080fd5b50565b600081359050613220816131fa565b92915050565b6000819050919050565b61323981613226565b811461324457600080fd5b50565b60008135905061325681613230565b92915050565b60008060408385031215613273576132726131be565b5b600061328185828601613211565b925050602061329285828601613247565b9150509250929050565b6132a581613226565b82525050565b60006020820190506132c0600083018461329c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132fb816132c6565b811461330657600080fd5b50565b600081359050613318816132f2565b92915050565b600060208284031215613334576133336131be565b5b600061334284828501613309565b91505092915050565b60008115159050919050565b6133608161334b565b82525050565b600060208201905061337b6000830184613357565b92915050565b600060208284031215613397576133966131be565b5b60006133a584828501613247565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133e85780820151818401526020810190506133cd565b838111156133f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613419826133ae565b61342381856133b9565b93506134338185602086016133ca565b61343c816133fd565b840191505092915050565b60006020820190508181036000830152613461818461340e565b905092915050565b60006020828403121561347f5761347e6131be565b5b600061348d84828501613211565b91505092915050565b600080604083850312156134ad576134ac6131be565b5b60006134bb85828601613247565b92505060206134cc85828601613247565b9150509250929050565b6134df816131e8565b82525050565b60006040820190506134fa60008301856134d6565b613507602083018461329c565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61354b826133fd565b810181811067ffffffffffffffff8211171561356a57613569613513565b5b80604052505050565b600061357d6131b4565b90506135898282613542565b919050565b600067ffffffffffffffff8211156135a9576135a8613513565b5b602082029050602081019050919050565b600080fd5b60006135d26135cd8461358e565b613573565b905080838252602082019050602084028301858111156135f5576135f46135ba565b5b835b8181101561361e578061360a8882613247565b8452602084019350506020810190506135f7565b5050509392505050565b600082601f83011261363d5761363c61350e565b5b813561364d8482602086016135bf565b91505092915050565b600080fd5b600067ffffffffffffffff82111561367657613675613513565b5b61367f826133fd565b9050602081019050919050565b82818337600083830152505050565b60006136ae6136a98461365b565b613573565b9050828152602081018484840111156136ca576136c9613656565b5b6136d584828561368c565b509392505050565b600082601f8301126136f2576136f161350e565b5b813561370284826020860161369b565b91505092915050565b600080600080600060a08688031215613727576137266131be565b5b600061373588828901613211565b955050602061374688828901613211565b945050604086013567ffffffffffffffff811115613767576137666131c3565b5b61377388828901613628565b935050606086013567ffffffffffffffff811115613794576137936131c3565b5b6137a088828901613628565b925050608086013567ffffffffffffffff8111156137c1576137c06131c3565b5b6137cd888289016136dd565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61380f816131e8565b82525050565b60006138218383613806565b60208301905092915050565b6000602082019050919050565b6000613845826137da565b61384f81856137e5565b935061385a836137f6565b8060005b8381101561388b5781516138728882613815565b975061387d8361382d565b92505060018101905061385e565b5085935050505092915050565b600060208201905081810360008301526138b2818461383a565b905092915050565b600080fd5b60008083601f8401126138d5576138d461350e565b5b8235905067ffffffffffffffff8111156138f2576138f16138ba565b5b60208301915083600182028301111561390e5761390d6135ba565b5b9250929050565b6000806020838503121561392c5761392b6131be565b5b600083013567ffffffffffffffff81111561394a576139496131c3565b5b613956858286016138bf565b92509250509250929050565b600067ffffffffffffffff82111561397d5761397c613513565b5b602082029050602081019050919050565b60006139a161399c84613962565b613573565b905080838252602082019050602084028301858111156139c4576139c36135ba565b5b835b818110156139ed57806139d98882613211565b8452602084019350506020810190506139c6565b5050509392505050565b600082601f830112613a0c57613a0b61350e565b5b8135613a1c84826020860161398e565b91505092915050565b60008060408385031215613a3c57613a3b6131be565b5b600083013567ffffffffffffffff811115613a5a57613a596131c3565b5b613a66858286016139f7565b925050602083013567ffffffffffffffff811115613a8757613a866131c3565b5b613a9385828601613628565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ad281613226565b82525050565b6000613ae48383613ac9565b60208301905092915050565b6000602082019050919050565b6000613b0882613a9d565b613b128185613aa8565b9350613b1d83613ab9565b8060005b83811015613b4e578151613b358882613ad8565b9750613b4083613af0565b925050600181019050613b21565b5085935050505092915050565b60006020820190508181036000830152613b758184613afd565b905092915050565b600080fd5b600060c08284031215613b9857613b97613b7d565b5b81905092915050565b60008060408385031215613bb857613bb76131be565b5b6000613bc685828601613247565b925050602083013567ffffffffffffffff811115613be757613be66131c3565b5b613bf385828601613b82565b9150509250929050565b6000602082019050613c1260008301846134d6565b92915050565b60008083601f840112613c2e57613c2d61350e565b5b8235905067ffffffffffffffff811115613c4b57613c4a6138ba565b5b602083019150836020820283011115613c6757613c666135ba565b5b9250929050565b600080600080600060608688031215613c8a57613c896131be565b5b6000613c9888828901613211565b955050602086013567ffffffffffffffff811115613cb957613cb86131c3565b5b613cc588828901613c18565b9450945050604086013567ffffffffffffffff811115613ce857613ce76131c3565b5b613cf488828901613c18565b92509250509295509295909350565b613d0c8161334b565b8114613d1757600080fd5b50565b600081359050613d2981613d03565b92915050565b60008060408385031215613d4657613d456131be565b5b6000613d5485828601613211565b9250506020613d6585828601613d1a565b9150509250929050565b60008060008060008060808789031215613d8c57613d8b6131be565b5b6000613d9a89828a01613211565b965050602087013567ffffffffffffffff811115613dbb57613dba6131c3565b5b613dc789828a01613c18565b9550955050604087013567ffffffffffffffff811115613dea57613de96131c3565b5b613df689828a01613c18565b9350935050606087013567ffffffffffffffff811115613e1957613e186131c3565b5b613e2589828a01613b82565b9150509295509295509295565b600060408284031215613e4857613e47613b7d565b5b81905092915050565b60008060608385031215613e6857613e676131be565b5b6000613e7685828601613247565b9250506020613e8785828601613e32565b9150509250929050565b60008060008060408587031215613eab57613eaa6131be565b5b600085013567ffffffffffffffff811115613ec957613ec86131c3565b5b613ed587828801613c18565b9450945050602085013567ffffffffffffffff811115613ef857613ef76131c3565b5b613f0487828801613c18565b925092505092959194509250565b60008060408385031215613f2957613f286131be565b5b6000613f3785828601613211565b9250506020613f4885828601613211565b9150509250929050565b600080600080600060a08688031215613f6e57613f6d6131be565b5b6000613f7c88828901613211565b9550506020613f8d88828901613211565b9450506040613f9e88828901613247565b9350506060613faf88828901613247565b925050608086013567ffffffffffffffff811115613fd057613fcf6131c3565b5b613fdc888289016136dd565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614045602b836133b9565b915061405082613fe9565b604082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140c257607f821691505b602082108114156140d6576140d561407b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061414582613226565b915061415083613226565b9250828210156141635761416261410b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141a882613226565b91506141b383613226565b9250826141c3576141c261416e565b5b828204905092915050565b60006141d982613226565b91506141e483613226565b9250826141f4576141f361416e565b5b828206905092915050565b600061420a82613226565b915061421583613226565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561424e5761424d61410b565b5b828202905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061428f6020836133b9565b915061429a82614259565b602082019050919050565b600060208201905081810360008301526142be81614282565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006143216032836133b9565b915061432c826142c5565b604082019050919050565b6000602082019050818103600083015261435081614314565b9050919050565b600061436282613226565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143955761439461410b565b5b600182019050919050565b7f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f72206160008201527f646d696e00000000000000000000000000000000000000000000000000000000602082015250565b60006143fc6024836133b9565b9150614407826143a0565b604082019050919050565b6000602082019050818103600083015261442b816143ef565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061448e6029836133b9565b915061449982614432565b604082019050919050565b600060208201905081810360008301526144bd81614481565b9050919050565b7f54686520746f6b656e206973206c6f636b656420616e6420796f752063616e6e60008201527f6f74206368616e676520697473206d657461646174612e000000000000000000602082015250565b60006145206037836133b9565b915061452b826144c4565b604082019050919050565b6000602082019050818103600083015261454f81614513565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126145b1576145b0614585565b5b80840192508235915067ffffffffffffffff8211156145d3576145d261458a565b5b6020830192506020820236038313156145ef576145ee61458f565b5b509250929050565b6000819050919050565b6000808335600160200384360303811261461e5761461d614585565b5b80840192508235915067ffffffffffffffff8211156146405761463f61458a565b5b60208301925060018202360383131561465c5761465b61458f565b5b509250929050565b600081549050919050565b60008190506001806001038301049050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600082821c905092915050565b6146eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026146ae565b815481168255505050565b600082821b905092915050565b6000600883026147337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826146f6565b61473d86836146f6565b95508019841693508086168417925050509392505050565b6000819050919050565b600061477a61477561477084613226565b614755565b613226565b9050919050565b6000819050919050565b6147948361475f565b6147a86147a082614781565b848454614703565b825550505050565b600090565b6147bd6147b0565b6147c881848461478b565b505050565b5b818110156147ec576147e16000826147b5565b6001810190506147ce565b5050565b6000614801600019846008026146ae565b1980831691505092915050565b600061481a83836147f0565b9150826002028217905092915050565b61483381614699565b61483e83825461480e565b8083556000825550505050565b60006020601f8301049050919050565b60208410600081146148b657601f8411600181146148845761487d868561480e565b83556148b0565b61488d83614699565b6148a46148998761484b565b8201600183016147cd565b6148ae878561482a565b505b50614903565b6148bf82614699565b6148c88661484b565b8101601f871680156148e2576148e181600184036146bb565b5b6148f66148ee8861484b565b8401836147cd565b6001886002021785555050505b5050505050565b6801000000000000000084111561492457614923613513565b5b602083106000811461496f57602085106000811461494d57614946868561480e565b8355614969565b8360ff191693508361495e84614699565b556001866002020183555b50614979565b6001856002020182555b5050505050565b805461498b816140aa565b808411156149a05761499f8482848661490a565b5b808410156149b5576149b48482848661485b565b5b50505050565b818110156149d9576149ce6000826147b5565b6001810190506149bb565b5050565b6149e8600082614980565b50565b600082146149fc576149fb614556565b5b614a05816149dd565b5050565b5b81811015614a2857614a1d6000826149eb565b600181019050614a0a565b5050565b81831015614a6557614a3d8261466f565b614a468461466f565b614a4f83614684565b818101838201614a5f8183614a09565b50505050505b505050565b68010000000000000000821115614a8457614a83613513565b5b614a8d81614664565b828255614a9b838284614a2c565b505050565b600082905092915050565b600082905092915050565b601f821115614af757614ac881614699565b614ad18461484b565b81016020851015614ae0578190505b614af4614aec8561484b565b8301826147cd565b50505b505050565b614b068383614aab565b67ffffffffffffffff811115614b1f57614b1e613513565b5b614b2982546140aa565b614b34828285614ab6565b6000601f831160018114614b635760008415614b51578287013590505b614b5b858261480e565b865550614bc3565b601f198416614b7186614699565b60005b82811015614b9957848901358255600182019150602085019450602081019050614b74565b86831015614bb65784890135614bb2601f8916826147f0565b8355505b6001600288020188555050505b50505050505050565b8115614bdb57614bda614556565b5b614be6848483614afc565b50505050565b614bf68383614aa0565b614c008183614a6a565b614c09836145f7565b614c1283614684565b6000805b84811015614c4d57614c288488614601565b614c3481838688614bcc565b6020860195506001850194505050600181019050614c16565b5050505050505050565b614c62838383614bec565b505050565b60008135614c7481613230565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614cb684614c7d565b9350801983169250808416831791505092915050565b614cd58261475f565b614ce8614ce182614781565b8354614c8a565b8255505050565b60008135614cfc81613d03565b80915050919050565b600060ff614d1284614c7d565b9350801983169250808416831791505092915050565b6000614d338261334b565b9050919050565b6000819050919050565b614d4d82614d28565b614d60614d5982614d3a565b8354614d05565b8255505050565b60008135614d74816131fa565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff614d9d84614c7d565b9350801983169250808416831791505092915050565b6000614dce614dc9614dc4846131c8565b614755565b6131c8565b9050919050565b6000614de082614db3565b9050919050565b6000614df282614dd5565b9050919050565b6000819050919050565b614e0c82614de7565b614e1f614e1882614df9565b8354614d7d565b8255505050565b600081016000830180614e3881614d67565b9050614e448184614e03565b505050600181016020830180614e5981614c67565b9050614e658184614ccc565b5050505050565b614e768282614e26565b5050565b6000810160008301614e8c8185614594565b614e97818386614c57565b50505050600181016020830180614ead81614c67565b9050614eb98184614ccc565b505050600281016040830180614ece81614c67565b9050614eda8184614ccc565b505050600381016060830180614eef81614cef565b9050614efb8184614d44565b505050600481016080830180614f118184614e6c565b5050505050565b614f228282614e7a565b5050565b7f4120746f6b656e206973206c6f636b656420616e6420796f752063616e6e6f7460008201527f206d696e742077697468207468697320636f6e66696775726174696f6e2e0000602082015250565b6000614f82603e836133b9565b9150614f8d82614f26565b604082019050919050565b60006020820190508181036000830152614fb181614f75565b9050919050565b7f54686520746f6b656e206973206c6f636b656420616e6420796f752063616e6e60008201527f6f74206368616e67652069747320726f79616c746965732e0000000000000000602082015250565b60006150146038836133b9565b915061501f82614fb8565b604082019050919050565b6000602082019050818103600083015261504381615007565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006150a66029836133b9565b91506150b18261504a565b604082019050919050565b600060208201905081810360008301526150d581615099565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151386026836133b9565b9150615143826150dc565b604082019050919050565b600060208201905081810360008301526151678161512b565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006151ca6028836133b9565b91506151d58261516e565b604082019050919050565b600060208201905081810360008301526151f9816151bd565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061525c6025836133b9565b915061526782615200565b604082019050919050565b6000602082019050818103600083015261528b8161524f565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006152ee602a836133b9565b91506152f982615292565b604082019050919050565b6000602082019050818103600083015261531d816152e1565b9050919050565b600061532f82613226565b915061533a83613226565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561536f5761536e61410b565b5b828201905092915050565b600060408201905081810360008301526153948185613afd565b905081810360208301526153a88184613afd565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061540d6021836133b9565b9150615418826153b1565b604082019050919050565b6000602082019050818103600083015261543c81615400565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061549f6029836133b9565b91506154aa82615443565b604082019050919050565b600060208201905081810360008301526154ce81615492565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155316023836133b9565b915061553c826154d5565b604082019050919050565b6000602082019050818103600083015261556081615524565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006155c36024836133b9565b91506155ce82615567565b604082019050919050565b600060208201905081810360008301526155f2816155b6565b9050919050565b600060408201905061560e600083018561329c565b61561b602083018461329c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061567882615651565b615682818561565c565b93506156928185602086016133ca565b61569b816133fd565b840191505092915050565b600060a0820190506156bb60008301886134d6565b6156c860208301876134d6565b81810360408301526156da8186613afd565b905081810360608301526156ee8185613afd565b90508181036080830152615702818461566d565b90509695505050505050565b60008151905061571d816132f2565b92915050565b600060208284031215615739576157386131be565b5b60006157478482850161570e565b91505092915050565b60008160e01c9050919050565b600060033d111561577c5760046000803e615779600051615750565b90505b90565b600060443d101561578f57615812565b6157976131b4565b60043d036004823e80513d602482011167ffffffffffffffff821117156157bf575050615812565b808201805167ffffffffffffffff8111156157dd5750505050615812565b80602083010160043d0385018111156157fa575050505050615812565b61580982602001850186613542565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006158716034836133b9565b915061587c82615815565b604082019050919050565b600060208201905081810360008301526158a081615864565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006159036028836133b9565b915061590e826158a7565b604082019050919050565b60006020820190508181036000830152615932816158f6565b9050919050565b600060a08201905061594e60008301886134d6565b61595b60208301876134d6565b615968604083018661329c565b615975606083018561329c565b8181036080830152615987818461566d565b9050969550505050505056fea2646970667358221220ae70fc461c38951c10c7248b74c77714a6e29c695a91629723a24fb0171e97fd64736f6c634300080a0033
Deployed Bytecode Sourcemap
385:3177:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2170:228:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;717:348:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2374:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1980:137:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3117:318:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1712:205:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4045:430:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1111:261:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2275:95:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2555:508:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3439:121:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1440:205:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1668:101:3;;;:::i;:::-;;1069:221:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1036:85:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1400:320:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3131:153:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1294:102:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1724:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2859:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2121:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3351:166:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3584:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1918:198:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2170:228:4;2256:7;2302:1;2283:21;;:7;:21;;;;2275:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2369:9;:13;2379:2;2369:13;;;;;;;;;;;:22;2383:7;2369:22;;;;;;;;;;;;;;;;2362:29;;2170:228;;;;:::o;717:348:13:-;845:4;872:43;903:11;872:30;:43::i;:::-;:91;;;;925:38;951:11;925:25;:38::i;:::-;872:91;:142;;;;988:26;973:41;;;:11;:41;;;;872:142;:188;;;;1024:36;1048:11;1024:23;:36::i;:::-;872:188;859:201;;717:348;;;:::o;2374:481::-;2442:13;2463:20;2486:8;:17;2495:7;2486:17;;;;;;;;;;;2463:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2535:1;2513:6;:11;;;:18;:23;2509:69;;;2553:18;2563:7;2553:9;:18::i;:::-;2546:25;;;;;2509:69;2609:1;2587:6;:11;;;:18;:23;:58;;;;2633:6;:12;;;2614:15;:31;;2587:58;2583:100;;;2662:6;:11;;;2674:1;2662:14;;;;;;;;:::i;:::-;;;;;;;;2655:21;;;;;2583:100;2688:9;2755:6;:11;;;:18;2736:6;:15;;;2720:6;:12;;;2702:15;:30;;;;:::i;:::-;2701:50;;;;:::i;:::-;2700:73;;;;:::i;:::-;2688:85;;2786:6;:11;;;2802:6;:11;;;:18;2798:1;:22;:51;;2848:1;2827:6;:11;;;:18;:22;;;;:::i;:::-;2798:51;;;2823:1;2798:51;2786:64;;;;;;;;:::i;:::-;;;;;;;;2779:71;;;;2374:481;;;;:::o;1980:137:0:-;2042:4;2077:5;2066:16;;:7;:5;:7::i;:::-;:16;;;:43;;;;2086:23;2103:5;2086:7;:16;;:23;;;;:::i;:::-;2066:43;2058:52;;1980:137;;;:::o;3117:318:13:-;3204:7;3213;3281:1;3232:51;;:8;:17;3241:7;3232:17;;;;;;;;;;;:27;;:37;;;;;;;;;;;;:51;;;3228:174;;3301:8;:17;3310:7;3301:17;;;;;;;;;;;:27;;:37;;;;;;;;;;;;3389:5;3352:8;:17;3361:7;3352:17;;;;;;;;;;;:27;;:34;;;3340:9;:46;;;;:::i;:::-;:54;;;;:::i;:::-;3293:102;;;;;;3228:174;3424:1;3428;3408:22;;;;3117:318;;;;;;:::o;1712:205:0:-;1259:12:3;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1790:23:0::1;1807:5;1790:7;:16;;:23;;;;:::i;:::-;1786:125;;;1854:10;1834:31;;1847:5;1834:31;;;;;;;;;;;;1879:21;1894:5;1879:7;:14;;:21;;;;:::i;:::-;;1786:125;1712:205:::0;:::o;4045:430:4:-;4278:12;:10;:12::i;:::-;4270:20;;:4;:20;;;:60;;;;4294:36;4311:4;4317:12;:10;:12::i;:::-;4294:16;:36::i;:::-;4270:60;4249:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4416:52;4439:4;4445:2;4449:3;4454:7;4463:4;4416:22;:52::i;:::-;4045:430;;;;;:::o;1111:261:0:-;1164:23;1222:16;:7;:14;:16::i;:::-;1208:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1199:40;;1254:6;1249:94;1270:16;:7;:14;:16::i;:::-;1266:1;:20;1249:94;;;1319:13;1330:1;1319:7;:10;;:13;;;;:::i;:::-;1307:6;1314:1;1307:9;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;1288:3;;;;;:::i;:::-;;;;1249:94;;;;1111:261;:::o;2275:95:13:-;942:10:0;931:21;;:7;:5;:7::i;:::-;:21;;;:53;;;;956:28;973:10;956:7;:16;;:28;;;;:::i;:::-;931:53;923:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;2350:15:13::1;2358:6;;2350:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:15::i;:::-;2275:95:::0;;:::o;2555:508:4:-;2706:16;2765:3;:10;2746:8;:15;:29;2738:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2832:30;2879:8;:15;2865:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2832:63;;2911:9;2906:120;2930:8;:15;2926:1;:19;2906:120;;;2985:30;2995:8;3004:1;2995:11;;;;;;;;:::i;:::-;;;;;;;;3008:3;3012:1;3008:6;;;;;;;;:::i;:::-;;;;;;;;2985:9;:30::i;:::-;2966:13;2980:1;2966:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2947:3;;;;:::i;:::-;;;2906:120;;;;3043:13;3036:20;;;2555:508;;;;:::o;3439:121:13:-;942:10:0;931:21;;:7;:5;:7::i;:::-;:21;;;:53;;;;956:28;973:10;956:7;:16;;:28;;;;:::i;:::-;931:53;923:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;3513:9:13::1;3505:27;;:50;3533:21;3505:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3439:121:::0;:::o;1440:205:0:-;1259:12:3;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1520:23:0::1;1537:5;1520:7;:16;;:23;;;;:::i;:::-;1515:124;;1585:10;1564:32;;1578:5;1564:32;;;;;;;;;;;;1610:18;1622:5;1610:7;:11;;:18;;;;:::i;:::-;;1515:124;1440:205:::0;:::o;1668:101:3:-;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;1069:221:13:-;942:10:0;931:21;;:7;:5;:7::i;:::-;:21;;;:53;;;;956:28;973:10;956:7;:16;;:28;;;;:::i;:::-;931:53;923:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;1168:8:13::1;:17;1177:7;1168:17;;;;;;;;;;;:24;;;;;;;;;;;;1167:25;1159:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;1278:7;1258:8;:17;1267:7;1258:17;;;;;;;;;;;:27;;;;;;:::i;:::-;;;;1069:221:::0;;:::o;1036:85:3:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;1400:320:13:-;942:10:0;931:21;;:7;:5;:7::i;:::-;:21;;;:53;;;;956:28;973:10;956:7;:16;;:28;;;;:::i;:::-;931:53;923:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;1528:9:13::1;1523:155;1547:3;;:10;;1543:1;:14;1523:155;;;1581:8;:16;1590:3;;1594:1;1590:6;;;;;;;:::i;:::-;;;;;;;;1581:16;;;;;;;;;;;:23;;;;;;;;;;;;1580:24;1572:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:3;;;;:::i;:::-;;;1523:155;;;;1683:32;1694:2;1698:3;;1683:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1703:7;;1683:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;:10:::1;:32::i;:::-;1400:320:::0;;;;;:::o;3131:153:4:-;3225:52;3244:12;:10;:12::i;:::-;3258:8;3268;3225:18;:52::i;:::-;3131:153;;:::o;1294:102:13:-;942:10:0;931:21;;:7;:5;:7::i;:::-;:21;;;:53;;;;956:28;973:10;956:7;:16;;:28;;;;:::i;:::-;931:53;923:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;1387:4:13::1;1360:8;:17;1369:7;1360:17;;;;;;;;;;;:24;;;:31;;;;;;;;;;;;;;;;;;1294:102:::0;:::o;1724:393::-;942:10:0;931:21;;:7;:5;:7::i;:::-;:21;;;:53;;;;956:28;973:10;956:7;:16;;:28;;;;:::i;:::-;931:53;923:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;1891:9:13::1;1886:189;1910:3;;:10;;1906:1;:14;1886:189;;;1944:8;:16;1953:3;;1957:1;1953:6;;;;;;;:::i;:::-;;;;;;;;1944:16;;;;;;;;;;;:23;;;;;;;;;;;;1943:24;1935:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;2061:7;2042:8;:16;2051:3;;2055:1;2051:6;;;;;;;:::i;:::-;;;;;;;;2042:16;;;;;;;;;;;:26;;;;;;:::i;:::-;;;;1922:3;;;;:::i;:::-;;;1886:189;;;;2080:32;2091:2;2095:3;;2080:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2100:7;;2080:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;:10:::1;:32::i;:::-;1724:393:::0;;;;;;:::o;2859:254::-;942:10:0;931:21;;:7;:5;:7::i;:::-;:21;;;:53;;;;956:28;973:10;956:7;:16;;:28;;;;:::i;:::-;931:53;923:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;2972:8:13::1;:17;2981:7;2972:17;;;;;;;;;;;:24;;;;;;;;;;;;2971:25;2963:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;3093:15;3063:8;:17;3072:7;3063:17;;;;;;;;;;;:27;;:45;;;;;;:::i;:::-;;;;2859:254:::0;;:::o;2121:150::-;942:10:0;931:21;;:7;:5;:7::i;:::-;:21;;;:53;;;;956:28;973:10;956:7;:16;;:28;;;;:::i;:::-;931:53;923:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;2228:38:13::1;2239:12;:10;:12::i;:::-;2253:3;;2228:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2258:7;;2228:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:38::i;:::-;2121:150:::0;;;;:::o;3351:166:4:-;3450:4;3473:18;:27;3492:7;3473:27;;;;;;;;;;;;;;;:37;3501:8;3473:37;;;;;;;;;;;;;;;;;;;;;;;;;3466:44;;3351:166;;;;:::o;3584:389::-;3792:12;:10;:12::i;:::-;3784:20;;:4;:20;;;:60;;;;3808:36;3825:4;3831:12;:10;:12::i;:::-;3808:16;:36::i;:::-;3784:60;3763:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;3921:45;3939:4;3945:2;3949;3953:6;3961:4;3921:17;:45::i;:::-;3584:389;;;;;:::o;1918:198:3:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;565:230:0:-;667:4;705:31;690:46;;;:11;:46;;;;:98;;;;752:36;776:11;752:23;:36::i;:::-;690:98;683:105;;565:230;;;:::o;1221:305:4:-;1323:4;1373:26;1358:41;;;:11;:41;;;;:109;;;;1430:37;1415:52;;;:11;:52;;;;1358:109;:161;;;;1483:36;1507:11;1483:23;:36::i;:::-;1358:161;1339:180;;1221:305;;;:::o;1925:103::-;1985:13;2017:4;2010:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1925:103;;;:::o;8167:165:12:-;8247:4;8270:55;8280:3;:10;;8316:5;8300:23;;8292:32;;8270:9;:55::i;:::-;8263:62;;8167:165;;;;:::o;640:96:9:-;693:7;719:10;712:17;;640:96;:::o;7930:156:12:-;8003:4;8026:53;8034:3;:10;;8070:5;8054:23;;8046:32;;8026:7;:53::i;:::-;8019:60;;7930:156;;;;:::o;6068:1045:4:-;6288:7;:14;6274:3;:10;:28;6266:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6379:1;6365:16;;:2;:16;;;;6357:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6434:16;6453:12;:10;:12::i;:::-;6434:31;;6476:60;6497:8;6507:4;6513:2;6517:3;6522:7;6531:4;6476:20;:60::i;:::-;6552:9;6547:411;6571:3;:10;6567:1;:14;6547:411;;;6602:10;6615:3;6619:1;6615:6;;;;;;;;:::i;:::-;;;;;;;;6602:19;;6635:14;6652:7;6660:1;6652:10;;;;;;;;:::i;:::-;;;;;;;;6635:27;;6677:19;6699:9;:13;6709:2;6699:13;;;;;;;;;;;:19;6713:4;6699:19;;;;;;;;;;;;;;;;6677:41;;6755:6;6740:11;:21;;6732:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6886:6;6872:11;:20;6850:9;:13;6860:2;6850:13;;;;;;;;;;;:19;6864:4;6850:19;;;;;;;;;;;;;;;:42;;;;6941:6;6920:9;:13;6930:2;6920:13;;;;;;;;;;;:17;6934:2;6920:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6588:370;;;6583:3;;;;:::i;:::-;;;6547:411;;;;7003:2;6973:47;;6997:4;6973:47;;6987:8;6973:47;;;7007:3;7012:7;6973:47;;;;;;;:::i;:::-;;;;;;;;7031:75;7067:8;7077:4;7083:2;7087:3;7092:7;7101:4;7031:35;:75::i;:::-;6256:857;6068:1045;;;;;:::o;8413:115:12:-;8476:7;8502:19;8510:3;:10;;8502:7;:19::i;:::-;8495:26;;8413:115;;;:::o;8870:156::-;8944:7;8994:22;8998:3;:10;;9010:5;8994:3;:22::i;:::-;8986:31;;8963:56;;8870:156;;;;:::o;7936:86:4:-;8009:6;8002:4;:13;;;;;;;;;;;;:::i;:::-;;7936:86;:::o;7612:150:12:-;7682:4;7705:50;7710:3;:10;;7746:5;7730:23;;7722:32;;7705:4;:50::i;:::-;7698:57;;7612:150;;;;:::o;2270:187:3:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;9293:715:4:-;9479:1;9465:16;;:2;:16;;;;9457:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9551:7;:14;9537:3;:10;:28;9529:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;9621:16;9640:12;:10;:12::i;:::-;9621:31;;9663:66;9684:8;9702:1;9706:2;9710:3;9715:7;9724:4;9663:20;:66::i;:::-;9745:9;9740:101;9764:3;:10;9760:1;:14;9740:101;;;9820:7;9828:1;9820:10;;;;;;;;:::i;:::-;;;;;;;;9795:9;:17;9805:3;9809:1;9805:6;;;;;;;;:::i;:::-;;;;;;;;9795:17;;;;;;;;;;;:21;9813:2;9795:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;9776:3;;;;;:::i;:::-;;;;9740:101;;;;9892:2;9856:53;;9888:1;9856:53;;9870:8;9856:53;;;9896:3;9901:7;9856:53;;;;;;;:::i;:::-;;;;;;;;9920:81;9956:8;9974:1;9978:2;9982:3;9987:7;9996:4;9920:35;:81::i;:::-;9447:561;9293:715;;;;:::o;12074:323::-;12224:8;12215:17;;:5;:17;;;;12207:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12326:8;12288:18;:25;12307:5;12288:25;;;;;;;;;;;;;;;:35;12314:8;12288:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12371:8;12349:41;;12364:5;12349:41;;;12381:8;12349:41;;;;;;:::i;:::-;;;;;;;;12074:323;;;:::o;11072:867::-;11235:1;11219:18;;:4;:18;;;;11211:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11309:7;:14;11295:3;:10;:28;11287:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11379:16;11398:12;:10;:12::i;:::-;11379:31;;11421:66;11442:8;11452:4;11466:1;11470:3;11475:7;11421:66;;;;;;;;;;;;:20;:66::i;:::-;11503:9;11498:364;11522:3;:10;11518:1;:14;11498:364;;;11553:10;11566:3;11570:1;11566:6;;;;;;;;:::i;:::-;;;;;;;;11553:19;;11586:14;11603:7;11611:1;11603:10;;;;;;;;:::i;:::-;;;;;;;;11586:27;;11628:19;11650:9;:13;11660:2;11650:13;;;;;;;;;;;:19;11664:4;11650:19;;;;;;;;;;;;;;;;11628:41;;11706:6;11691:11;:21;;11683:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11831:6;11817:11;:20;11795:9;:13;11805:2;11795:13;;;;;;;;;;;:19;11809:4;11795:19;;;;;;;;;;;;;;;:42;;;;11539:323;;;11534:3;;;;;:::i;:::-;;;;11498:364;;;;11915:1;11877:55;;11901:4;11877:55;;11891:8;11877:55;;;11919:3;11924:7;11877:55;;;;;;;:::i;:::-;;;;;;;;11201:738;11072:867;;;:::o;4925:797::-;5120:1;5106:16;;:2;:16;;;;5098:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5175:16;5194:12;:10;:12::i;:::-;5175:31;;5217:96;5238:8;5248:4;5254:2;5258:21;5276:2;5258:17;:21::i;:::-;5281:25;5299:6;5281:17;:25::i;:::-;5308:4;5217:20;:96::i;:::-;5324:19;5346:9;:13;5356:2;5346:13;;;;;;;;;;;:19;5360:4;5346:19;;;;;;;;;;;;;;;;5324:41;;5398:6;5383:11;:21;;5375:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5521:6;5507:11;:20;5485:9;:13;5495:2;5485:13;;;;;;;;;;;:19;5499:4;5485:19;;;;;;;;;;;;;;;:42;;;;5568:6;5547:9;:13;5557:2;5547:13;;;;;;;;;;;:17;5561:2;5547:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5621:2;5590:46;;5615:4;5590:46;;5605:8;5590:46;;;5625:2;5629:6;5590:46;;;;;;;:::i;:::-;;;;;;;;5647:68;5678:8;5688:4;5694:2;5698;5702:6;5710:4;5647:30;:68::i;:::-;5088:634;;4925:797;;;;;:::o;829:155:10:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;3738:127:12:-;3811:4;3857:1;3834:3;:12;;:19;3847:5;3834:19;;;;;;;;;;;;:24;;3827:31;;3738:127;;;;:::o;2269:1388::-;2335:4;2451:18;2472:3;:12;;:19;2485:5;2472:19;;;;;;;;;;;;2451:40;;2520:1;2506:10;:15;2502:1149;;2875:21;2912:1;2899:10;:14;;;;:::i;:::-;2875:38;;2927:17;2968:1;2947:3;:11;;:18;;;;:22;;;;:::i;:::-;2927:42;;3001:13;2988:9;:26;2984:398;;3034:17;3054:3;:11;;3066:9;3054:22;;;;;;;;:::i;:::-;;;;;;;;;;3034:42;;3205:9;3176:3;:11;;3188:13;3176:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;3314:10;3288:3;:12;;:23;3301:9;3288:23;;;;;;;;;;;:36;;;;3016:366;2984:398;3460:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3552:3;:12;;:19;3565:5;3552:19;;;;;;;;;;;3545:26;;;3593:4;3586:11;;;;;;;2502:1149;3635:5;3628:12;;;2269:1388;;;;;:::o;13331:214:4:-;;;;;;;:::o;14282:792::-;14514:15;:2;:13;;;:15::i;:::-;14510:558;;;14566:2;14549:43;;;14593:8;14603:4;14609:3;14614:7;14623:4;14549:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14545:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14934:6;14927:14;;;;;;;;;;;:::i;:::-;;;;;;;;14545:513;;;14981:62;;;;;;;;;;:::i;:::-;;;;;;;;14545:513;14719:48;;;14707:60;;;:8;:60;;;;14703:157;;14791:50;;;;;;;;;;:::i;:::-;;;;;;;;14703:157;14629:245;14510:558;14282:792;;;;;;:::o;3946:107:12:-;4002:7;4028:3;:11;;:18;;;;4021:25;;3946:107;;;:::o;4395:118::-;4462:7;4488:3;:11;;4500:5;4488:18;;;;;;;;:::i;:::-;;;;;;;;;;4481:25;;4395:118;;;;:::o;1697:404::-;1760:4;1781:21;1791:3;1796:5;1781:9;:21::i;:::-;1776:319;;1818:3;:11;;1835:5;1818:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1998:3;:11;;:18;;;;1976:3;:12;;:19;1989:5;1976:19;;;;;;;;;;;:40;;;;2037:4;2030:11;;;;1776:319;2079:5;2072:12;;1697:404;;;;;:::o;15080:193:4:-;15146:16;15174:22;15213:1;15199:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15174:41;;15236:7;15225:5;15231:1;15225:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;15261:5;15254:12;;;15080:193;;;:::o;13551:725::-;13758:15;:2;:13;;;:15::i;:::-;13754:516;;;13810:2;13793:38;;;13832:8;13842:4;13848:2;13852:6;13860:4;13793:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13789:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14136:6;14129:14;;;;;;;;;;;:::i;:::-;;;;;;;;13789:471;;;14183:62;;;;;;;;;;:::i;:::-;;;;;;;;13789:471;13926:43;;;13914:55;;;:8;:55;;;;13910:152;;13993:50;;;;;;;;;;:::i;:::-;;;;;;;;13910:152;13866:210;13754:516;13551:725;;;;;;:::o;771:377:8:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:14:-;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:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:99::-;3600:6;3634:5;3628:12;3618:22;;3548:99;;;:::o;3653:169::-;3737:11;3771:6;3766:3;3759:19;3811:4;3806:3;3802:14;3787:29;;3653:169;;;;:::o;3828:307::-;3896:1;3906:113;3920:6;3917:1;3914:13;3906:113;;;4005:1;4000:3;3996:11;3990:18;3986:1;3981:3;3977:11;3970:39;3942:2;3939:1;3935:10;3930:15;;3906:113;;;4037:6;4034:1;4031:13;4028:101;;;4117:1;4108:6;4103:3;4099:16;4092:27;4028:101;3877:258;3828:307;;;:::o;4141:102::-;4182:6;4233:2;4229:7;4224:2;4217:5;4213:14;4209:28;4199:38;;4141:102;;;:::o;4249:364::-;4337:3;4365:39;4398:5;4365:39;:::i;:::-;4420:71;4484:6;4479:3;4420:71;:::i;:::-;4413:78;;4500:52;4545:6;4540:3;4533:4;4526:5;4522:16;4500:52;:::i;:::-;4577:29;4599:6;4577:29;:::i;:::-;4572:3;4568:39;4561:46;;4341:272;4249:364;;;;:::o;4619:313::-;4732:4;4770:2;4759:9;4755:18;4747:26;;4819:9;4813:4;4809:20;4805:1;4794:9;4790:17;4783:47;4847:78;4920:4;4911:6;4847:78;:::i;:::-;4839:86;;4619:313;;;;:::o;4938:329::-;4997:6;5046:2;5034:9;5025:7;5021:23;5017:32;5014:119;;;5052:79;;:::i;:::-;5014:119;5172:1;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5143:117;4938:329;;;;:::o;5273:474::-;5341:6;5349;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5273:474;;;;;:::o;5753:118::-;5840:24;5858:5;5840:24;:::i;:::-;5835:3;5828:37;5753:118;;:::o;5877:332::-;5998:4;6036:2;6025:9;6021:18;6013:26;;6049:71;6117:1;6106:9;6102:17;6093:6;6049:71;:::i;:::-;6130:72;6198:2;6187:9;6183:18;6174:6;6130:72;:::i;:::-;5877:332;;;;;:::o;6215:117::-;6324:1;6321;6314:12;6338:180;6386:77;6383:1;6376:88;6483:4;6480:1;6473:15;6507:4;6504:1;6497:15;6524:281;6607:27;6629:4;6607:27;:::i;:::-;6599:6;6595:40;6737:6;6725:10;6722:22;6701:18;6689:10;6686:34;6683:62;6680:88;;;6748:18;;:::i;:::-;6680:88;6788:10;6784:2;6777:22;6567:238;6524:281;;:::o;6811:129::-;6845:6;6872:20;;:::i;:::-;6862:30;;6901:33;6929:4;6921:6;6901:33;:::i;:::-;6811:129;;;:::o;6946:311::-;7023:4;7113:18;7105:6;7102:30;7099:56;;;7135:18;;:::i;:::-;7099:56;7185:4;7177:6;7173:17;7165:25;;7245:4;7239;7235:15;7227:23;;6946:311;;;:::o;7263:117::-;7372:1;7369;7362:12;7403:710;7499:5;7524:81;7540:64;7597:6;7540:64;:::i;:::-;7524:81;:::i;:::-;7515:90;;7625:5;7654:6;7647:5;7640:21;7688:4;7681:5;7677:16;7670:23;;7741:4;7733:6;7729:17;7721:6;7717:30;7770:3;7762:6;7759:15;7756:122;;;7789:79;;:::i;:::-;7756:122;7904:6;7887:220;7921:6;7916:3;7913:15;7887:220;;;7996:3;8025:37;8058:3;8046:10;8025:37;:::i;:::-;8020:3;8013:50;8092:4;8087:3;8083:14;8076:21;;7963:144;7947:4;7942:3;7938:14;7931:21;;7887:220;;;7891:21;7505:608;;7403:710;;;;;:::o;8136:370::-;8207:5;8256:3;8249:4;8241:6;8237:17;8233:27;8223:122;;8264:79;;:::i;:::-;8223:122;8381:6;8368:20;8406:94;8496:3;8488:6;8481:4;8473:6;8469:17;8406:94;:::i;:::-;8397:103;;8213:293;8136:370;;;;:::o;8512:117::-;8621:1;8618;8611:12;8635:307;8696:4;8786:18;8778:6;8775:30;8772:56;;;8808:18;;:::i;:::-;8772:56;8846:29;8868:6;8846:29;:::i;:::-;8838:37;;8930:4;8924;8920:15;8912:23;;8635:307;;;:::o;8948:154::-;9032:6;9027:3;9022;9009:30;9094:1;9085:6;9080:3;9076:16;9069:27;8948:154;;;:::o;9108:410::-;9185:5;9210:65;9226:48;9267:6;9226:48;:::i;:::-;9210:65;:::i;:::-;9201:74;;9298:6;9291:5;9284:21;9336:4;9329:5;9325:16;9374:3;9365:6;9360:3;9356:16;9353:25;9350:112;;;9381:79;;:::i;:::-;9350:112;9471:41;9505:6;9500:3;9495;9471:41;:::i;:::-;9191:327;9108:410;;;;;:::o;9537:338::-;9592:5;9641:3;9634:4;9626:6;9622:17;9618:27;9608:122;;9649:79;;:::i;:::-;9608:122;9766:6;9753:20;9791:78;9865:3;9857:6;9850:4;9842:6;9838:17;9791:78;:::i;:::-;9782:87;;9598:277;9537:338;;;;:::o;9881:1509::-;10035:6;10043;10051;10059;10067;10116:3;10104:9;10095:7;10091:23;10087:33;10084:120;;;10123:79;;:::i;:::-;10084:120;10243:1;10268:53;10313:7;10304:6;10293:9;10289:22;10268:53;:::i;:::-;10258:63;;10214:117;10370:2;10396:53;10441:7;10432:6;10421:9;10417:22;10396:53;:::i;:::-;10386:63;;10341:118;10526:2;10515:9;10511:18;10498:32;10557:18;10549:6;10546:30;10543:117;;;10579:79;;:::i;:::-;10543:117;10684:78;10754:7;10745:6;10734:9;10730:22;10684:78;:::i;:::-;10674:88;;10469:303;10839:2;10828:9;10824:18;10811:32;10870:18;10862:6;10859:30;10856:117;;;10892:79;;:::i;:::-;10856:117;10997:78;11067:7;11058:6;11047:9;11043:22;10997:78;:::i;:::-;10987:88;;10782:303;11152:3;11141:9;11137:19;11124:33;11184:18;11176:6;11173:30;11170:117;;;11206:79;;:::i;:::-;11170:117;11311:62;11365:7;11356:6;11345:9;11341:22;11311:62;:::i;:::-;11301:72;;11095:288;9881:1509;;;;;;;;:::o;11396:114::-;11463:6;11497:5;11491:12;11481:22;;11396:114;;;:::o;11516:184::-;11615:11;11649:6;11644:3;11637:19;11689:4;11684:3;11680:14;11665:29;;11516:184;;;;:::o;11706:132::-;11773:4;11796:3;11788:11;;11826:4;11821:3;11817:14;11809:22;;11706:132;;;:::o;11844:108::-;11921:24;11939:5;11921:24;:::i;:::-;11916:3;11909:37;11844:108;;:::o;11958:179::-;12027:10;12048:46;12090:3;12082:6;12048:46;:::i;:::-;12126:4;12121:3;12117:14;12103:28;;11958:179;;;;:::o;12143:113::-;12213:4;12245;12240:3;12236:14;12228:22;;12143:113;;;:::o;12292:732::-;12411:3;12440:54;12488:5;12440:54;:::i;:::-;12510:86;12589:6;12584:3;12510:86;:::i;:::-;12503:93;;12620:56;12670:5;12620:56;:::i;:::-;12699:7;12730:1;12715:284;12740:6;12737:1;12734:13;12715:284;;;12816:6;12810:13;12843:63;12902:3;12887:13;12843:63;:::i;:::-;12836:70;;12929:60;12982:6;12929:60;:::i;:::-;12919:70;;12775:224;12762:1;12759;12755:9;12750:14;;12715:284;;;12719:14;13015:3;13008:10;;12416:608;;;12292:732;;;;:::o;13030:373::-;13173:4;13211:2;13200:9;13196:18;13188:26;;13260:9;13254:4;13250:20;13246:1;13235:9;13231:17;13224:47;13288:108;13391:4;13382:6;13288:108;:::i;:::-;13280:116;;13030:373;;;;:::o;13409:117::-;13518:1;13515;13508:12;13546:553;13604:8;13614:6;13664:3;13657:4;13649:6;13645:17;13641:27;13631:122;;13672:79;;:::i;:::-;13631:122;13785:6;13772:20;13762:30;;13815:18;13807:6;13804:30;13801:117;;;13837:79;;:::i;:::-;13801:117;13951:4;13943:6;13939:17;13927:29;;14005:3;13997:4;13989:6;13985:17;13975:8;13971:32;13968:41;13965:128;;;14012:79;;:::i;:::-;13965:128;13546:553;;;;;:::o;14105:529::-;14176:6;14184;14233:2;14221:9;14212:7;14208:23;14204:32;14201:119;;;14239:79;;:::i;:::-;14201:119;14387:1;14376:9;14372:17;14359:31;14417:18;14409:6;14406:30;14403:117;;;14439:79;;:::i;:::-;14403:117;14552:65;14609:7;14600:6;14589:9;14585:22;14552:65;:::i;:::-;14534:83;;;;14330:297;14105:529;;;;;:::o;14640:311::-;14717:4;14807:18;14799:6;14796:30;14793:56;;;14829:18;;:::i;:::-;14793:56;14879:4;14871:6;14867:17;14859:25;;14939:4;14933;14929:15;14921:23;;14640:311;;;:::o;14974:710::-;15070:5;15095:81;15111:64;15168:6;15111:64;:::i;:::-;15095:81;:::i;:::-;15086:90;;15196:5;15225:6;15218:5;15211:21;15259:4;15252:5;15248:16;15241:23;;15312:4;15304:6;15300:17;15292:6;15288:30;15341:3;15333:6;15330:15;15327:122;;;15360:79;;:::i;:::-;15327:122;15475:6;15458:220;15492:6;15487:3;15484:15;15458:220;;;15567:3;15596:37;15629:3;15617:10;15596:37;:::i;:::-;15591:3;15584:50;15663:4;15658:3;15654:14;15647:21;;15534:144;15518:4;15513:3;15509:14;15502:21;;15458:220;;;15462:21;15076:608;;14974:710;;;;;:::o;15707:370::-;15778:5;15827:3;15820:4;15812:6;15808:17;15804:27;15794:122;;15835:79;;:::i;:::-;15794:122;15952:6;15939:20;15977:94;16067:3;16059:6;16052:4;16044:6;16040:17;15977:94;:::i;:::-;15968:103;;15784:293;15707:370;;;;:::o;16083:894::-;16201:6;16209;16258:2;16246:9;16237:7;16233:23;16229:32;16226:119;;;16264:79;;:::i;:::-;16226:119;16412:1;16401:9;16397:17;16384:31;16442:18;16434:6;16431:30;16428:117;;;16464:79;;:::i;:::-;16428:117;16569:78;16639:7;16630:6;16619:9;16615:22;16569:78;:::i;:::-;16559:88;;16355:302;16724:2;16713:9;16709:18;16696:32;16755:18;16747:6;16744:30;16741:117;;;16777:79;;:::i;:::-;16741:117;16882:78;16952:7;16943:6;16932:9;16928:22;16882:78;:::i;:::-;16872:88;;16667:303;16083:894;;;;;:::o;16983:114::-;17050:6;17084:5;17078:12;17068:22;;16983:114;;;:::o;17103:184::-;17202:11;17236:6;17231:3;17224:19;17276:4;17271:3;17267:14;17252:29;;17103:184;;;;:::o;17293:132::-;17360:4;17383:3;17375:11;;17413:4;17408:3;17404:14;17396:22;;17293:132;;;:::o;17431:108::-;17508:24;17526:5;17508:24;:::i;:::-;17503:3;17496:37;17431:108;;:::o;17545:179::-;17614:10;17635:46;17677:3;17669:6;17635:46;:::i;:::-;17713:4;17708:3;17704:14;17690:28;;17545:179;;;;:::o;17730:113::-;17800:4;17832;17827:3;17823:14;17815:22;;17730:113;;;:::o;17879:732::-;17998:3;18027:54;18075:5;18027:54;:::i;:::-;18097:86;18176:6;18171:3;18097:86;:::i;:::-;18090:93;;18207:56;18257:5;18207:56;:::i;:::-;18286:7;18317:1;18302:284;18327:6;18324:1;18321:13;18302:284;;;18403:6;18397:13;18430:63;18489:3;18474:13;18430:63;:::i;:::-;18423:70;;18516:60;18569:6;18516:60;:::i;:::-;18506:70;;18362:224;18349:1;18346;18342:9;18337:14;;18302:284;;;18306:14;18602:3;18595:10;;18003:608;;;17879:732;;;;:::o;18617:373::-;18760:4;18798:2;18787:9;18783:18;18775:26;;18847:9;18841:4;18837:20;18833:1;18822:9;18818:17;18811:47;18875:108;18978:4;18969:6;18875:108;:::i;:::-;18867:116;;18617:373;;;;:::o;18996:117::-;19105:1;19102;19095:12;19149:231;19221:5;19262:3;19253:6;19248:3;19244:16;19240:26;19237:113;;;19269:79;;:::i;:::-;19237:113;19368:6;19359:15;;19149:231;;;;:::o;19386:686::-;19480:6;19488;19537:2;19525:9;19516:7;19512:23;19508:32;19505:119;;;19543:79;;:::i;:::-;19505:119;19663:1;19688:53;19733:7;19724:6;19713:9;19709:22;19688:53;:::i;:::-;19678:63;;19634:117;19818:2;19807:9;19803:18;19790:32;19849:18;19841:6;19838:30;19835:117;;;19871:79;;:::i;:::-;19835:117;19976:79;20047:7;20038:6;20027:9;20023:22;19976:79;:::i;:::-;19966:89;;19761:304;19386:686;;;;;:::o;20078:222::-;20171:4;20209:2;20198:9;20194:18;20186:26;;20222:71;20290:1;20279:9;20275:17;20266:6;20222:71;:::i;:::-;20078:222;;;;:::o;20323:568::-;20396:8;20406:6;20456:3;20449:4;20441:6;20437:17;20433:27;20423:122;;20464:79;;:::i;:::-;20423:122;20577:6;20564:20;20554:30;;20607:18;20599:6;20596:30;20593:117;;;20629:79;;:::i;:::-;20593:117;20743:4;20735:6;20731:17;20719:29;;20797:3;20789:4;20781:6;20777:17;20767:8;20763:32;20760:41;20757:128;;;20804:79;;:::i;:::-;20757:128;20323:568;;;;;:::o;20897:1079::-;21028:6;21036;21044;21052;21060;21109:2;21097:9;21088:7;21084:23;21080:32;21077:119;;;21115:79;;:::i;:::-;21077:119;21235:1;21260:53;21305:7;21296:6;21285:9;21281:22;21260:53;:::i;:::-;21250:63;;21206:117;21390:2;21379:9;21375:18;21362:32;21421:18;21413:6;21410:30;21407:117;;;21443:79;;:::i;:::-;21407:117;21556:80;21628:7;21619:6;21608:9;21604:22;21556:80;:::i;:::-;21538:98;;;;21333:313;21713:2;21702:9;21698:18;21685:32;21744:18;21736:6;21733:30;21730:117;;;21766:79;;:::i;:::-;21730:117;21879:80;21951:7;21942:6;21931:9;21927:22;21879:80;:::i;:::-;21861:98;;;;21656:313;20897:1079;;;;;;;;:::o;21982:116::-;22052:21;22067:5;22052:21;:::i;:::-;22045:5;22042:32;22032:60;;22088:1;22085;22078:12;22032:60;21982:116;:::o;22104:133::-;22147:5;22185:6;22172:20;22163:29;;22201:30;22225:5;22201:30;:::i;:::-;22104:133;;;;:::o;22243:468::-;22308:6;22316;22365:2;22353:9;22344:7;22340:23;22336:32;22333:119;;;22371:79;;:::i;:::-;22333:119;22491:1;22516:53;22561:7;22552:6;22541:9;22537:22;22516:53;:::i;:::-;22506:63;;22462:117;22618:2;22644:50;22686:7;22677:6;22666:9;22662:22;22644:50;:::i;:::-;22634:60;;22589:115;22243:468;;;;;:::o;22717:1437::-;22883:6;22891;22899;22907;22915;22923;22972:3;22960:9;22951:7;22947:23;22943:33;22940:120;;;22979:79;;:::i;:::-;22940:120;23099:1;23124:53;23169:7;23160:6;23149:9;23145:22;23124:53;:::i;:::-;23114:63;;23070:117;23254:2;23243:9;23239:18;23226:32;23285:18;23277:6;23274:30;23271:117;;;23307:79;;:::i;:::-;23271:117;23420:80;23492:7;23483:6;23472:9;23468:22;23420:80;:::i;:::-;23402:98;;;;23197:313;23577:2;23566:9;23562:18;23549:32;23608:18;23600:6;23597:30;23594:117;;;23630:79;;:::i;:::-;23594:117;23743:80;23815:7;23806:6;23795:9;23791:22;23743:80;:::i;:::-;23725:98;;;;23520:313;23900:2;23889:9;23885:18;23872:32;23931:18;23923:6;23920:30;23917:117;;;23953:79;;:::i;:::-;23917:117;24058:79;24129:7;24120:6;24109:9;24105:22;24058:79;:::i;:::-;24048:89;;23843:304;22717:1437;;;;;;;;:::o;24193:233::-;24268:5;24309:2;24300:6;24295:3;24291:16;24287:25;24284:112;;;24315:79;;:::i;:::-;24284:112;24414:6;24405:15;;24193:233;;;;:::o;24432:532::-;24529:6;24537;24586:2;24574:9;24565:7;24561:23;24557:32;24554:119;;;24592:79;;:::i;:::-;24554:119;24712:1;24737:53;24782:7;24773:6;24762:9;24758:22;24737:53;:::i;:::-;24727:63;;24683:117;24839:2;24865:82;24939:7;24930:6;24919:9;24915:22;24865:82;:::i;:::-;24855:92;;24810:147;24432:532;;;;;:::o;24970:934::-;25092:6;25100;25108;25116;25165:2;25153:9;25144:7;25140:23;25136:32;25133:119;;;25171:79;;:::i;:::-;25133:119;25319:1;25308:9;25304:17;25291:31;25349:18;25341:6;25338:30;25335:117;;;25371:79;;:::i;:::-;25335:117;25484:80;25556:7;25547:6;25536:9;25532:22;25484:80;:::i;:::-;25466:98;;;;25262:312;25641:2;25630:9;25626:18;25613:32;25672:18;25664:6;25661:30;25658:117;;;25694:79;;:::i;:::-;25658:117;25807:80;25879:7;25870:6;25859:9;25855:22;25807:80;:::i;:::-;25789:98;;;;25584:313;24970:934;;;;;;;:::o;25910:474::-;25978:6;25986;26035:2;26023:9;26014:7;26010:23;26006:32;26003:119;;;26041:79;;:::i;:::-;26003:119;26161:1;26186:53;26231:7;26222:6;26211:9;26207:22;26186:53;:::i;:::-;26176:63;;26132:117;26288:2;26314:53;26359:7;26350:6;26339:9;26335:22;26314:53;:::i;:::-;26304:63;;26259:118;25910:474;;;;;:::o;26390:1089::-;26494:6;26502;26510;26518;26526;26575:3;26563:9;26554:7;26550:23;26546:33;26543:120;;;26582:79;;:::i;:::-;26543:120;26702:1;26727:53;26772:7;26763:6;26752:9;26748:22;26727:53;:::i;:::-;26717:63;;26673:117;26829:2;26855:53;26900:7;26891:6;26880:9;26876:22;26855:53;:::i;:::-;26845:63;;26800:118;26957:2;26983:53;27028:7;27019:6;27008:9;27004:22;26983:53;:::i;:::-;26973:63;;26928:118;27085:2;27111:53;27156:7;27147:6;27136:9;27132:22;27111:53;:::i;:::-;27101:63;;27056:118;27241:3;27230:9;27226:19;27213:33;27273:18;27265:6;27262:30;27259:117;;;27295:79;;:::i;:::-;27259:117;27400:62;27454:7;27445:6;27434:9;27430:22;27400:62;:::i;:::-;27390:72;;27184:288;26390:1089;;;;;;;;:::o;27485:230::-;27625:34;27621:1;27613:6;27609:14;27602:58;27694:13;27689:2;27681:6;27677:15;27670:38;27485:230;:::o;27721:366::-;27863:3;27884:67;27948:2;27943:3;27884:67;:::i;:::-;27877:74;;27960:93;28049:3;27960:93;:::i;:::-;28078:2;28073:3;28069:12;28062:19;;27721:366;;;:::o;28093:419::-;28259:4;28297:2;28286:9;28282:18;28274:26;;28346:9;28340:4;28336:20;28332:1;28321:9;28317:17;28310:47;28374:131;28500:4;28374:131;:::i;:::-;28366:139;;28093:419;;;:::o;28518:180::-;28566:77;28563:1;28556:88;28663:4;28660:1;28653:15;28687:4;28684:1;28677:15;28704:320;28748:6;28785:1;28779:4;28775:12;28765:22;;28832:1;28826:4;28822:12;28853:18;28843:81;;28909:4;28901:6;28897:17;28887:27;;28843:81;28971:2;28963:6;28960:14;28940:18;28937:38;28934:84;;;28990:18;;:::i;:::-;28934:84;28755:269;28704:320;;;:::o;29030:180::-;29078:77;29075:1;29068:88;29175:4;29172:1;29165:15;29199:4;29196:1;29189:15;29216:180;29264:77;29261:1;29254:88;29361:4;29358:1;29351:15;29385:4;29382:1;29375:15;29402:191;29442:4;29462:20;29480:1;29462:20;:::i;:::-;29457:25;;29496:20;29514:1;29496:20;:::i;:::-;29491:25;;29535:1;29532;29529:8;29526:34;;;29540:18;;:::i;:::-;29526:34;29585:1;29582;29578:9;29570:17;;29402:191;;;;:::o;29599:180::-;29647:77;29644:1;29637:88;29744:4;29741:1;29734:15;29768:4;29765:1;29758:15;29785:185;29825:1;29842:20;29860:1;29842:20;:::i;:::-;29837:25;;29876:20;29894:1;29876:20;:::i;:::-;29871:25;;29915:1;29905:35;;29920:18;;:::i;:::-;29905:35;29962:1;29959;29955:9;29950:14;;29785:185;;;;:::o;29976:176::-;30008:1;30025:20;30043:1;30025:20;:::i;:::-;30020:25;;30059:20;30077:1;30059:20;:::i;:::-;30054:25;;30098:1;30088:35;;30103:18;;:::i;:::-;30088:35;30144:1;30141;30137:9;30132:14;;29976:176;;;;:::o;30158:348::-;30198:7;30221:20;30239:1;30221:20;:::i;:::-;30216:25;;30255:20;30273:1;30255:20;:::i;:::-;30250:25;;30443:1;30375:66;30371:74;30368:1;30365:81;30360:1;30353:9;30346:17;30342:105;30339:131;;;30450:18;;:::i;:::-;30339:131;30498:1;30495;30491:9;30480:20;;30158:348;;;;:::o;30512:182::-;30652:34;30648:1;30640:6;30636:14;30629:58;30512:182;:::o;30700:366::-;30842:3;30863:67;30927:2;30922:3;30863:67;:::i;:::-;30856:74;;30939:93;31028:3;30939:93;:::i;:::-;31057:2;31052:3;31048:12;31041:19;;30700:366;;;:::o;31072:419::-;31238:4;31276:2;31265:9;31261:18;31253:26;;31325:9;31319:4;31315:20;31311:1;31300:9;31296:17;31289:47;31353:131;31479:4;31353:131;:::i;:::-;31345:139;;31072:419;;;:::o;31497:237::-;31637:34;31633:1;31625:6;31621:14;31614:58;31706:20;31701:2;31693:6;31689:15;31682:45;31497:237;:::o;31740:366::-;31882:3;31903:67;31967:2;31962:3;31903:67;:::i;:::-;31896:74;;31979:93;32068:3;31979:93;:::i;:::-;32097:2;32092:3;32088:12;32081:19;;31740:366;;;:::o;32112:419::-;32278:4;32316:2;32305:9;32301:18;32293:26;;32365:9;32359:4;32355:20;32351:1;32340:9;32336:17;32329:47;32393:131;32519:4;32393:131;:::i;:::-;32385:139;;32112:419;;;:::o;32537:233::-;32576:3;32599:24;32617:5;32599:24;:::i;:::-;32590:33;;32645:66;32638:5;32635:77;32632:103;;;32715:18;;:::i;:::-;32632:103;32762:1;32755:5;32751:13;32744:20;;32537:233;;;:::o;32776:223::-;32916:34;32912:1;32904:6;32900:14;32893:58;32985:6;32980:2;32972:6;32968:15;32961:31;32776:223;:::o;33005:366::-;33147:3;33168:67;33232:2;33227:3;33168:67;:::i;:::-;33161:74;;33244:93;33333:3;33244:93;:::i;:::-;33362:2;33357:3;33353:12;33346:19;;33005:366;;;:::o;33377:419::-;33543:4;33581:2;33570:9;33566:18;33558:26;;33630:9;33624:4;33620:20;33616:1;33605:9;33601:17;33594:47;33658:131;33784:4;33658:131;:::i;:::-;33650:139;;33377:419;;;:::o;33802:228::-;33942:34;33938:1;33930:6;33926:14;33919:58;34011:11;34006:2;33998:6;33994:15;33987:36;33802:228;:::o;34036:366::-;34178:3;34199:67;34263:2;34258:3;34199:67;:::i;:::-;34192:74;;34275:93;34364:3;34275:93;:::i;:::-;34393:2;34388:3;34384:12;34377:19;;34036:366;;;:::o;34408:419::-;34574:4;34612:2;34601:9;34597:18;34589:26;;34661:9;34655:4;34651:20;34647:1;34636:9;34632:17;34625:47;34689:131;34815:4;34689:131;:::i;:::-;34681:139;;34408:419;;;:::o;34833:242::-;34973:34;34969:1;34961:6;34957:14;34950:58;35042:25;35037:2;35029:6;35025:15;35018:50;34833:242;:::o;35081:366::-;35223:3;35244:67;35308:2;35303:3;35244:67;:::i;:::-;35237:74;;35320:93;35409:3;35320:93;:::i;:::-;35438:2;35433:3;35429:12;35422:19;;35081:366;;;:::o;35453:419::-;35619:4;35657:2;35646:9;35642:18;35634:26;;35706:9;35700:4;35696:20;35692:1;35681:9;35677:17;35670:47;35734:131;35860:4;35734:131;:::i;:::-;35726:139;;35453:419;;;:::o;35878:180::-;35926:77;35923:1;35916:88;36023:4;36020:1;36013:15;36047:4;36044:1;36037:15;36064:117;36173:1;36170;36163:12;36187:117;36296:1;36293;36286:12;36310:117;36419:1;36416;36409:12;36433:752;36538:4;36544:6;36600:11;36587:25;36700:1;36694:4;36690:12;36679:8;36663:14;36659:29;36655:48;36635:18;36631:73;36621:168;;36708:79;;:::i;:::-;36621:168;36820:18;36810:8;36806:33;36798:41;;36872:4;36859:18;36849:28;;36900:18;36892:6;36889:30;36886:117;;;36922:79;;:::i;:::-;36886:117;37030:2;37024:4;37020:13;37012:21;;37087:4;37079:6;37075:17;37059:14;37055:38;37049:4;37045:49;37042:136;;;37097:79;;:::i;:::-;37042:136;36551:634;36433:752;;;;;:::o;37191:114::-;37272:4;37295:3;37287:11;;37191:114;;;:::o;37311:725::-;37389:4;37395:6;37451:11;37438:25;37551:1;37545:4;37541:12;37530:8;37514:14;37510:29;37506:48;37486:18;37482:73;37472:168;;37559:79;;:::i;:::-;37472:168;37671:18;37661:8;37657:33;37649:41;;37723:4;37710:18;37700:28;;37751:18;37743:6;37740:30;37737:117;;;37773:79;;:::i;:::-;37737:117;37881:2;37875:4;37871:13;37863:21;;37938:4;37930:6;37926:17;37910:14;37906:38;37900:4;37896:49;37893:136;;;37948:79;;:::i;:::-;37893:136;37402:634;37311:725;;;;;:::o;38042:118::-;38113:6;38147:5;38141:12;38131:22;;38042:118;;;:::o;38166:210::-;38254:4;38277:6;38269:14;;38367:1;38362;38359;38355:9;38347:6;38343:22;38339:30;38331:38;;38166:210;;;:::o;38381:163::-;38452:4;38475:3;38467:11;;38498:3;38495:1;38488:14;38532:4;38529:1;38519:18;38511:26;;38381:163;;;:::o;38550:141::-;38599:4;38622:3;38614:11;;38645:3;38642:1;38635:14;38679:4;38676:1;38666:18;38658:26;;38550:141;;;:::o;38697:117::-;38751:8;38801:5;38795:4;38791:16;38770:37;;38697:117;;;;:::o;38820:244::-;38892:121;38946:66;38936:6;38932:2;38928:15;38925:1;38921:23;38892:121;:::i;:::-;39051:4;39045:11;39039:4;39035:22;39029:4;39022:36;38870:194;38820:244;;:::o;39070:107::-;39114:8;39164:5;39158:4;39154:16;39133:37;;39070:107;;;;:::o;39183:393::-;39252:6;39302:1;39290:10;39286:18;39325:97;39355:66;39344:9;39325:97;:::i;:::-;39443:39;39473:8;39462:9;39443:39;:::i;:::-;39431:51;;39515:4;39511:9;39504:5;39500:21;39491:30;;39564:4;39554:8;39550:19;39543:5;39540:30;39530:40;;39259:317;;39183:393;;;;;:::o;39582:60::-;39610:3;39631:5;39624:12;;39582:60;;;:::o;39648:142::-;39698:9;39731:53;39749:34;39758:24;39776:5;39758:24;:::i;:::-;39749:34;:::i;:::-;39731:53;:::i;:::-;39718:66;;39648:142;;;:::o;39796:75::-;39839:3;39860:5;39853:12;;39796:75;;;:::o;39877:269::-;39987:39;40018:7;39987:39;:::i;:::-;40048:91;40097:41;40121:16;40097:41;:::i;:::-;40089:6;40082:4;40076:11;40048:91;:::i;:::-;40042:4;40035:105;39953:193;39877:269;;;:::o;40152:73::-;40197:3;40152:73;:::o;40231:189::-;40308:32;;:::i;:::-;40349:65;40407:6;40399;40393:4;40349:65;:::i;:::-;40284:136;40231:189;;:::o;40426:186::-;40486:120;40503:3;40496:5;40493:14;40486:120;;;40557:39;40594:1;40587:5;40557:39;:::i;:::-;40530:1;40523:5;40519:13;40510:22;;40486:120;;;40426:186;;:::o;40618:169::-;40662:6;40695:51;40743:1;40739:6;40731:5;40728:1;40724:13;40695:51;:::i;:::-;40691:56;40776:4;40770;40766:15;40756:25;;40669:118;40618:169;;;;:::o;40792:295::-;40868:4;41014:29;41039:3;41033:4;41014:29;:::i;:::-;41006:37;;41076:3;41073:1;41069:11;41063:4;41060:21;41052:29;;40792:295;;;;:::o;41092:430::-;41329:38;41361:5;41329:38;:::i;:::-;41388:73;41457:3;41447:7;41441:14;41388:73;:::i;:::-;41484:4;41477:5;41470:19;41514:1;41505:7;41498:18;41163:359;;41092:430;;:::o;41527:93::-;41564:6;41611:2;41606;41599:5;41595:14;41591:23;41581:33;;41527:93;;;:::o;41626:1239::-;41734:2;41726:6;41723:14;41752:1;41746:521;;;;42316:2;42308:6;42305:14;42337:1;42332:383;;;;42768:66;42827:6;42821:4;42768:66;:::i;:::-;42761:5;42754:81;42298:551;;42332:383;42379:38;42411:5;42379:38;:::i;:::-;42520:100;42593:25;42611:6;42593:25;:::i;:::-;42577:14;42573:46;42569:1;42553:14;42549:22;42520:100;:::i;:::-;42637:64;42694:6;42687:5;42637:64;:::i;:::-;42339:376;42298:551;;41716:1143;;41746:521;41790:38;41822:5;41790:38;:::i;:::-;41880:25;41898:6;41880:25;:::i;:::-;41864:14;41860:46;42017:4;42009:6;42005:17;42038:6;42035:69;;;42047:55;42095:6;42091:1;42078:11;42074:19;42047:55;:::i;:::-;42035:69;42118:89;42180:25;42198:6;42180:25;:::i;:::-;42164:14;42160:46;42147:11;42118:89;:::i;:::-;42254:1;42245:6;42242:1;42238:14;42235:21;42228:5;42221:36;41754:513;;;41716:1143;;41626:1239;;;;:::o;42870:916::-;42975:20;42967:6;42964:32;42961:58;;;42999:18;;:::i;:::-;42961:58;43047:2;43039:6;43036:14;43064:1;43059:144;;;;43252:2;43244:6;43241:14;43273:1;43268:291;;;;43688:66;43747:6;43741:4;43688:66;:::i;:::-;43681:5;43674:81;43234:535;;43268:291;43417:4;43410;43406:9;43402:20;43394:28;;43486:4;43446:38;43478:5;43446:38;:::i;:::-;43439:52;43542:1;43533:6;43530:1;43526:14;43522:22;43515:5;43508:37;43234:535;;43029:750;;43059:144;43190:1;43181:6;43178:1;43174:14;43170:22;43163:5;43156:37;43029:750;;42870:916;;;;:::o;43792:402::-;43875:5;43869:12;43904:31;43930:4;43904:31;:::i;:::-;43959:6;43951;43948:18;43945:116;;;43981:70;44044:6;44036;44030:4;44023:5;43981:70;:::i;:::-;43945:116;44085:6;44077;44074:18;44071:116;;;44107:70;44170:6;44162;44156:4;44149:5;44107:70;:::i;:::-;44071:116;43846:348;;43792:402;;:::o;44261:120::-;44278:3;44271:5;44268:14;44261:120;;;44332:39;44369:1;44362:5;44332:39;:::i;:::-;44305:1;44298:5;44294:13;44285:22;;44261:120;;;44200:187;;:::o;44588:108::-;44651:38;44687:1;44681:4;44651:38;:::i;:::-;44588:108;:::o;44702:174::-;44793:1;44785:6;44782:13;44772:47;;44799:18;;:::i;:::-;44772:47;44828:42;44865:4;44828:42;:::i;:::-;44702:174;;:::o;44882:201::-;44950:127;44967:3;44960:5;44957:14;44950:127;;;45021:46;45065:1;45058:5;45021:46;:::i;:::-;44994:1;44987:5;44983:13;44974:22;;44950:127;;;44882:201;;:::o;45089:716::-;45216:3;45204:10;45201:19;45198:600;;;45307:72;45375:3;45307:72;:::i;:::-;45412:79;45480:10;45412:79;:::i;:::-;45526:60;45580:5;45526:60;:::i;:::-;45638:12;45622:14;45618:33;45701:12;45685:14;45681:33;45728:60;45778:9;45765:11;45728:60;:::i;:::-;45221:577;;;;;45198:600;45089:716;;;:::o;45811:409::-;45911:20;45903:6;45900:32;45897:78;;;45947:18;;:::i;:::-;45897:78;45999:58;46051:5;45999:58;:::i;:::-;46109:6;46102:5;46095:21;46126:87;46206:6;46198;46191:5;46126:87;:::i;:::-;45887:333;45811:409;;:::o;46225:124::-;46311:6;46339:3;46329:13;;46225:124;;;;:::o;46355:97::-;46414:6;46442:3;46432:13;;46355:97;;;;:::o;46458:543::-;46559:2;46554:3;46551:11;46548:446;;;46593:38;46625:5;46593:38;:::i;:::-;46677:29;46695:10;46677:29;:::i;:::-;46667:8;46663:44;46860:2;46848:10;46845:18;46842:49;;;46881:8;46866:23;;46842:49;46904:80;46960:22;46978:3;46960:22;:::i;:::-;46950:8;46946:37;46933:11;46904:80;:::i;:::-;46563:431;;46548:446;46458:543;;;:::o;47007:1403::-;47131:44;47171:3;47166;47131:44;:::i;:::-;47240:18;47232:6;47229:30;47226:56;;;47262:18;;:::i;:::-;47226:56;47306:38;47338:4;47332:11;47306:38;:::i;:::-;47391:67;47451:6;47443;47437:4;47391:67;:::i;:::-;47485:1;47514:2;47506:6;47503:14;47531:1;47526:632;;;;48202:1;48219:6;48216:84;;;48275:9;48270:3;48266:19;48253:33;48244:42;;48216:84;48326:67;48386:6;48379:5;48326:67;:::i;:::-;48320:4;48313:81;48175:229;47496:908;;47526:632;47578:4;47574:9;47566:6;47562:22;47612:37;47644:4;47612:37;:::i;:::-;47671:1;47685:215;47699:7;47696:1;47693:14;47685:215;;;47785:9;47780:3;47776:19;47763:33;47755:6;47748:49;47836:1;47828:6;47824:14;47814:24;;47883:2;47872:9;47868:18;47855:31;;47722:4;47719:1;47715:12;47710:17;;47685:215;;;47928:6;47919:7;47916:19;47913:186;;;47993:9;47988:3;47984:19;47971:33;48036:48;48078:4;48070:6;48066:17;48055:9;48036:48;:::i;:::-;48028:6;48021:64;47936:163;47913:186;48145:1;48141;48133:6;48129:14;48125:22;48119:4;48112:36;47533:625;;;47496:908;;47106:1304;;;47007:1403;;;:::o;48416:258::-;48533:6;48530:32;;;48542:18;;:::i;:::-;48530:32;48571:97;48660:7;48651;48645:4;48571:97;:::i;:::-;48416:258;;;;:::o;48680:954::-;48850:73;48919:3;48912:5;48850:73;:::i;:::-;48933:65;48991:6;48985:4;48933:65;:::i;:::-;49022:70;49086:5;49022:70;:::i;:::-;49121:59;49175:4;49121:59;:::i;:::-;49210:1;49236;49221:407;49246:6;49243:1;49240:13;49221:407;;;49337:57;49387:6;49380:5;49337:57;:::i;:::-;49408:122;49515:14;49499;49484:13;49471:11;49408:122;:::i;:::-;49566:2;49558:6;49554:15;49544:25;;49615:1;49602:11;49598:19;49583:34;;49271:357;;49267:1;49264;49260:9;49255:14;;49221:407;;;49225:14;48825:809;;;;48680:954;;;:::o;49640:311::-;49804:141;49937:7;49928;49922:4;49804:141;:::i;:::-;49640:311;;;:::o;49957:186::-;50002:11;50051:3;50038:17;50064:33;50091:5;50064:33;:::i;:::-;50131:5;50107:29;;50014:129;49957:186;;;:::o;50149:92::-;50181:8;50228:5;50225:1;50221:13;50200:34;;50149:92;;;:::o;50247:290::-;50305:6;50334:66;50421:22;50434:8;50421:22;:::i;:::-;50409:34;;50476:4;50472:9;50465:5;50461:21;50452:30;;50525:4;50515:8;50511:19;50504:5;50501:30;50491:40;;50312:225;50247:290;;;;:::o;50543:262::-;50653:39;50684:7;50653:39;:::i;:::-;50714:84;50756:41;50780:16;50756:41;:::i;:::-;50749:4;50743:11;50714:84;:::i;:::-;50708:4;50701:98;50619:186;50543:262;;:::o;50811:180::-;50853:11;50902:3;50889:17;50915:30;50939:5;50915:30;:::i;:::-;50979:5;50955:29;;50865:126;50811:180;;;:::o;50997:226::-;51054:6;51083:3;51107:22;51120:8;51107:22;:::i;:::-;51095:34;;51162:4;51158:9;51151:5;51147:21;51138:30;;51211:4;51201:8;51197:19;51190:5;51187:30;51177:40;;51061:162;50997:226;;;;:::o;51229:104::-;51273:9;51306:21;51321:5;51306:21;:::i;:::-;51293:34;;51229:104;;;:::o;51339:72::-;51379:3;51400:5;51393:12;;51339:72;;;:::o;51417:246::-;51521:33;51546:7;51521:33;:::i;:::-;51576:80;51617:38;51638:16;51617:38;:::i;:::-;51610:4;51604:11;51576:80;:::i;:::-;51570:4;51563:94;51487:176;51417:246;;:::o;51669:186::-;51714:11;51763:3;51750:17;51776:33;51803:5;51776:33;:::i;:::-;51843:5;51819:29;;51726:129;51669:186;;;:::o;51861:266::-;51919:6;51948:42;52011:22;52024:8;52011:22;:::i;:::-;51999:34;;52066:4;52062:9;52055:5;52051:21;52042:30;;52115:4;52105:8;52101:19;52094:5;52091:30;52081:40;;51926:201;51861:266;;;;:::o;52133:142::-;52183:9;52216:53;52234:34;52243:24;52261:5;52243:24;:::i;:::-;52234:34;:::i;:::-;52216:53;:::i;:::-;52203:66;;52133:142;;;:::o;52281:126::-;52331:9;52364:37;52395:5;52364:37;:::i;:::-;52351:50;;52281:126;;;:::o;52413:::-;52463:9;52496:37;52527:5;52496:37;:::i;:::-;52483:50;;52413:126;;;:::o;52545:75::-;52588:3;52609:5;52602:12;;52545:75;;;:::o;52626:262::-;52736:39;52767:7;52736:39;:::i;:::-;52797:84;52839:41;52863:16;52839:41;:::i;:::-;52832:4;52826:11;52797:84;:::i;:::-;52791:4;52784:98;52702:186;52626:262;;:::o;52894:809::-;53074:1;53068:4;53064:12;53120:1;53113:5;53109:13;53170:12;53213:42;53241:13;53213:42;:::i;:::-;53196:59;;53269:78;53333:13;53321:10;53269:78;:::i;:::-;53031:327;;;53411:1;53405:4;53401:12;53457:2;53450:5;53446:14;53508:12;53551:42;53579:13;53551:42;:::i;:::-;53534:59;;53607:78;53671:13;53659:10;53607:78;:::i;:::-;53368:328;;;52894:809;;:::o;53709:264::-;53849:118;53959:7;53953:4;53849:118;:::i;:::-;53709:264;;:::o;53979:1892::-;54153:1;54147:4;54143:12;54199:1;54192:5;54188:13;54264:90;54341:12;54334:5;54264:90;:::i;:::-;54368:161;54515:13;54500;54488:10;54368:161;:::i;:::-;54110:430;;;;54593:1;54587:4;54583:12;54639:2;54632:5;54628:14;54690:12;54733:42;54761:13;54733:42;:::i;:::-;54716:59;;54789:78;54853:13;54841:10;54789:78;:::i;:::-;54550:328;;;54931:1;54925:4;54921:12;54977:2;54970:5;54966:14;55028:12;55071:42;55099:13;55071:42;:::i;:::-;55054:59;;55127:78;55191:13;55179:10;55127:78;:::i;:::-;54888:328;;;55269:1;55263:4;55259:12;55315:2;55308:5;55304:14;55366:12;55409:39;55434:13;55409:39;:::i;:::-;55392:56;;55462:72;55520:13;55508:10;55462:72;:::i;:::-;55226:319;;;55598:1;55592:4;55588:12;55644:3;55637:5;55633:15;55696:12;55722:131;55839:13;55827:10;55722:131;:::i;:::-;55555:309;;;53979:1892;;:::o;55877:252::-;56011:112;56115:7;56109:4;56011:112;:::i;:::-;55877:252;;:::o;56135:249::-;56275:34;56271:1;56263:6;56259:14;56252:58;56344:32;56339:2;56331:6;56327:15;56320:57;56135:249;:::o;56390:366::-;56532:3;56553:67;56617:2;56612:3;56553:67;:::i;:::-;56546:74;;56629:93;56718:3;56629:93;:::i;:::-;56747:2;56742:3;56738:12;56731:19;;56390:366;;;:::o;56762:419::-;56928:4;56966:2;56955:9;56951:18;56943:26;;57015:9;57009:4;57005:20;57001:1;56990:9;56986:17;56979:47;57043:131;57169:4;57043:131;:::i;:::-;57035:139;;56762:419;;;:::o;57187:243::-;57327:34;57323:1;57315:6;57311:14;57304:58;57396:26;57391:2;57383:6;57379:15;57372:51;57187:243;:::o;57436:366::-;57578:3;57599:67;57663:2;57658:3;57599:67;:::i;:::-;57592:74;;57675:93;57764:3;57675:93;:::i;:::-;57793:2;57788:3;57784:12;57777:19;;57436:366;;;:::o;57808:419::-;57974:4;58012:2;58001:9;57997:18;57989:26;;58061:9;58055:4;58051:20;58047:1;58036:9;58032:17;58025:47;58089:131;58215:4;58089:131;:::i;:::-;58081:139;;57808:419;;;:::o;58233:228::-;58373:34;58369:1;58361:6;58357:14;58350:58;58442:11;58437:2;58429:6;58425:15;58418:36;58233:228;:::o;58467:366::-;58609:3;58630:67;58694:2;58689:3;58630:67;:::i;:::-;58623:74;;58706:93;58795:3;58706:93;:::i;:::-;58824:2;58819:3;58815:12;58808:19;;58467:366;;;:::o;58839:419::-;59005:4;59043:2;59032:9;59028:18;59020:26;;59092:9;59086:4;59082:20;59078:1;59067:9;59063:17;59056:47;59120:131;59246:4;59120:131;:::i;:::-;59112:139;;58839:419;;;:::o;59264:225::-;59404:34;59400:1;59392:6;59388:14;59381:58;59473:8;59468:2;59460:6;59456:15;59449:33;59264:225;:::o;59495:366::-;59637:3;59658:67;59722:2;59717:3;59658:67;:::i;:::-;59651:74;;59734:93;59823:3;59734:93;:::i;:::-;59852:2;59847:3;59843:12;59836:19;;59495:366;;;:::o;59867:419::-;60033:4;60071:2;60060:9;60056:18;60048:26;;60120:9;60114:4;60110:20;60106:1;60095:9;60091:17;60084:47;60148:131;60274:4;60148:131;:::i;:::-;60140:139;;59867:419;;;:::o;60292:227::-;60432:34;60428:1;60420:6;60416:14;60409:58;60501:10;60496:2;60488:6;60484:15;60477:35;60292:227;:::o;60525:366::-;60667:3;60688:67;60752:2;60747:3;60688:67;:::i;:::-;60681:74;;60764:93;60853:3;60764:93;:::i;:::-;60882:2;60877:3;60873:12;60866:19;;60525:366;;;:::o;60897:419::-;61063:4;61101:2;61090:9;61086:18;61078:26;;61150:9;61144:4;61140:20;61136:1;61125:9;61121:17;61114:47;61178:131;61304:4;61178:131;:::i;:::-;61170:139;;60897:419;;;:::o;61322:224::-;61462:34;61458:1;61450:6;61446:14;61439:58;61531:7;61526:2;61518:6;61514:15;61507:32;61322:224;:::o;61552:366::-;61694:3;61715:67;61779:2;61774:3;61715:67;:::i;:::-;61708:74;;61791:93;61880:3;61791:93;:::i;:::-;61909:2;61904:3;61900:12;61893:19;;61552:366;;;:::o;61924:419::-;62090:4;62128:2;62117:9;62113:18;62105:26;;62177:9;62171:4;62167:20;62163:1;62152:9;62148:17;62141:47;62205:131;62331:4;62205:131;:::i;:::-;62197:139;;61924:419;;;:::o;62349:229::-;62489:34;62485:1;62477:6;62473:14;62466:58;62558:12;62553:2;62545:6;62541:15;62534:37;62349:229;:::o;62584:366::-;62726:3;62747:67;62811:2;62806:3;62747:67;:::i;:::-;62740:74;;62823:93;62912:3;62823:93;:::i;:::-;62941:2;62936:3;62932:12;62925:19;;62584:366;;;:::o;62956:419::-;63122:4;63160:2;63149:9;63145:18;63137:26;;63209:9;63203:4;63199:20;63195:1;63184:9;63180:17;63173:47;63237:131;63363:4;63237:131;:::i;:::-;63229:139;;62956:419;;;:::o;63381:305::-;63421:3;63440:20;63458:1;63440:20;:::i;:::-;63435:25;;63474:20;63492:1;63474:20;:::i;:::-;63469:25;;63628:1;63560:66;63556:74;63553:1;63550:81;63547:107;;;63634:18;;:::i;:::-;63547:107;63678:1;63675;63671:9;63664:16;;63381:305;;;;:::o;63692:634::-;63913:4;63951:2;63940:9;63936:18;63928:26;;64000:9;63994:4;63990:20;63986:1;63975:9;63971:17;63964:47;64028:108;64131:4;64122:6;64028:108;:::i;:::-;64020:116;;64183:9;64177:4;64173:20;64168:2;64157:9;64153:18;64146:48;64211:108;64314:4;64305:6;64211:108;:::i;:::-;64203:116;;63692:634;;;;;:::o;64332:220::-;64472:34;64468:1;64460:6;64456:14;64449:58;64541:3;64536:2;64528:6;64524:15;64517:28;64332:220;:::o;64558:366::-;64700:3;64721:67;64785:2;64780:3;64721:67;:::i;:::-;64714:74;;64797:93;64886:3;64797:93;:::i;:::-;64915:2;64910:3;64906:12;64899:19;;64558:366;;;:::o;64930:419::-;65096:4;65134:2;65123:9;65119:18;65111:26;;65183:9;65177:4;65173:20;65169:1;65158:9;65154:17;65147:47;65211:131;65337:4;65211:131;:::i;:::-;65203:139;;64930:419;;;:::o;65355:228::-;65495:34;65491:1;65483:6;65479:14;65472:58;65564:11;65559:2;65551:6;65547:15;65540:36;65355:228;:::o;65589:366::-;65731:3;65752:67;65816:2;65811:3;65752:67;:::i;:::-;65745:74;;65828:93;65917:3;65828:93;:::i;:::-;65946:2;65941:3;65937:12;65930:19;;65589:366;;;:::o;65961:419::-;66127:4;66165:2;66154:9;66150:18;66142:26;;66214:9;66208:4;66204:20;66200:1;66189:9;66185:17;66178:47;66242:131;66368:4;66242:131;:::i;:::-;66234:139;;65961:419;;;:::o;66386:222::-;66526:34;66522:1;66514:6;66510:14;66503:58;66595:5;66590:2;66582:6;66578:15;66571:30;66386:222;:::o;66614:366::-;66756:3;66777:67;66841:2;66836:3;66777:67;:::i;:::-;66770:74;;66853:93;66942:3;66853:93;:::i;:::-;66971:2;66966:3;66962:12;66955:19;;66614:366;;;:::o;66986:419::-;67152:4;67190:2;67179:9;67175:18;67167:26;;67239:9;67233:4;67229:20;67225:1;67214:9;67210:17;67203:47;67267:131;67393:4;67267:131;:::i;:::-;67259:139;;66986:419;;;:::o;67411:223::-;67551:34;67547:1;67539:6;67535:14;67528:58;67620:6;67615:2;67607:6;67603:15;67596:31;67411:223;:::o;67640:366::-;67782:3;67803:67;67867:2;67862:3;67803:67;:::i;:::-;67796:74;;67879:93;67968:3;67879:93;:::i;:::-;67997:2;67992:3;67988:12;67981:19;;67640:366;;;:::o;68012:419::-;68178:4;68216:2;68205:9;68201:18;68193:26;;68265:9;68259:4;68255:20;68251:1;68240:9;68236:17;68229:47;68293:131;68419:4;68293:131;:::i;:::-;68285:139;;68012:419;;;:::o;68437:332::-;68558:4;68596:2;68585:9;68581:18;68573:26;;68609:71;68677:1;68666:9;68662:17;68653:6;68609:71;:::i;:::-;68690:72;68758:2;68747:9;68743:18;68734:6;68690:72;:::i;:::-;68437:332;;;;;:::o;68775:180::-;68823:77;68820:1;68813:88;68920:4;68917:1;68910:15;68944:4;68941:1;68934:15;68961:98;69012:6;69046:5;69040:12;69030:22;;68961:98;;;:::o;69065:168::-;69148:11;69182:6;69177:3;69170:19;69222:4;69217:3;69213:14;69198:29;;69065:168;;;;:::o;69239:360::-;69325:3;69353:38;69385:5;69353:38;:::i;:::-;69407:70;69470:6;69465:3;69407:70;:::i;:::-;69400:77;;69486:52;69531:6;69526:3;69519:4;69512:5;69508:16;69486:52;:::i;:::-;69563:29;69585:6;69563:29;:::i;:::-;69558:3;69554:39;69547:46;;69329:270;69239:360;;;;:::o;69605:1053::-;69928:4;69966:3;69955:9;69951:19;69943:27;;69980:71;70048:1;70037:9;70033:17;70024:6;69980:71;:::i;:::-;70061:72;70129:2;70118:9;70114:18;70105:6;70061:72;:::i;:::-;70180:9;70174:4;70170:20;70165:2;70154:9;70150:18;70143:48;70208:108;70311:4;70302:6;70208:108;:::i;:::-;70200:116;;70363:9;70357:4;70353:20;70348:2;70337:9;70333:18;70326:48;70391:108;70494:4;70485:6;70391:108;:::i;:::-;70383:116;;70547:9;70541:4;70537:20;70531:3;70520:9;70516:19;70509:49;70575:76;70646:4;70637:6;70575:76;:::i;:::-;70567:84;;69605:1053;;;;;;;;:::o;70664:141::-;70720:5;70751:6;70745:13;70736:22;;70767:32;70793:5;70767:32;:::i;:::-;70664:141;;;;:::o;70811:349::-;70880:6;70929:2;70917:9;70908:7;70904:23;70900:32;70897:119;;;70935:79;;:::i;:::-;70897:119;71055:1;71080:63;71135:7;71126:6;71115:9;71111:22;71080:63;:::i;:::-;71070:73;;71026:127;70811:349;;;;:::o;71166:106::-;71210:8;71259:5;71254:3;71250:15;71229:36;;71166:106;;;:::o;71278:183::-;71313:3;71351:1;71333:16;71330:23;71327:128;;;71389:1;71386;71383;71368:23;71411:34;71442:1;71436:8;71411:34;:::i;:::-;71404:41;;71327:128;71278:183;:::o;71467:711::-;71506:3;71544:4;71526:16;71523:26;71520:39;;;71552:5;;71520:39;71581:20;;:::i;:::-;71656:1;71638:16;71634:24;71631:1;71625:4;71610:49;71689:4;71683:11;71788:16;71781:4;71773:6;71769:17;71766:39;71733:18;71725:6;71722:30;71706:113;71703:146;;;71834:5;;;;71703:146;71880:6;71874:4;71870:17;71916:3;71910:10;71943:18;71935:6;71932:30;71929:43;;;71965:5;;;;;;71929:43;72013:6;72006:4;72001:3;71997:14;71993:27;72072:1;72054:16;72050:24;72044:4;72040:35;72035:3;72032:44;72029:57;;;72079:5;;;;;;;72029:57;72096;72144:6;72138:4;72134:17;72126:6;72122:30;72116:4;72096:57;:::i;:::-;72169:3;72162:10;;71510:668;;;;;71467:711;;:::o;72184:239::-;72324:34;72320:1;72312:6;72308:14;72301:58;72393:22;72388:2;72380:6;72376:15;72369:47;72184:239;:::o;72429:366::-;72571:3;72592:67;72656:2;72651:3;72592:67;:::i;:::-;72585:74;;72668:93;72757:3;72668:93;:::i;:::-;72786:2;72781:3;72777:12;72770:19;;72429:366;;;:::o;72801:419::-;72967:4;73005:2;72994:9;72990:18;72982:26;;73054:9;73048:4;73044:20;73040:1;73029:9;73025:17;73018:47;73082:131;73208:4;73082:131;:::i;:::-;73074:139;;72801:419;;;:::o;73226:227::-;73366:34;73362:1;73354:6;73350:14;73343:58;73435:10;73430:2;73422:6;73418:15;73411:35;73226:227;:::o;73459:366::-;73601:3;73622:67;73686:2;73681:3;73622:67;:::i;:::-;73615:74;;73698:93;73787:3;73698:93;:::i;:::-;73816:2;73811:3;73807:12;73800:19;;73459:366;;;:::o;73831:419::-;73997:4;74035:2;74024:9;74020:18;74012:26;;74084:9;74078:4;74074:20;74070:1;74059:9;74055:17;74048:47;74112:131;74238:4;74112:131;:::i;:::-;74104:139;;73831:419;;;:::o;74256:751::-;74479:4;74517:3;74506:9;74502:19;74494:27;;74531:71;74599:1;74588:9;74584:17;74575:6;74531:71;:::i;:::-;74612:72;74680:2;74669:9;74665:18;74656:6;74612:72;:::i;:::-;74694;74762:2;74751:9;74747:18;74738:6;74694:72;:::i;:::-;74776;74844:2;74833:9;74829:18;74820:6;74776:72;:::i;:::-;74896:9;74890:4;74886:20;74880:3;74869:9;74865:19;74858:49;74924:76;74995:4;74986:6;74924:76;:::i;:::-;74916:84;;74256:751;;;;;;;;:::o
Swarm Source
ipfs://ae70fc461c38951c10c7248b74c77714a6e29c695a91629723a24fb0171e97fd
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.