Token Poli NFT
Overview ERC-1155
Total Supply:
0 PNFT
Holders:
3 addresses
Profile Summary
Contract:
Balance
0 PNFT
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Poli
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-14 */ // Sources flattened with hardhat v2.9.9 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @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 have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @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: address zero is not a valid owner"); 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 token 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: caller is not token owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {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 `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/Poli.sol pragma solidity ^0.8.0; contract Poli is ERC1155, Ownable { string public name; string public symbol; struct Recipient { address wallet; uint256 tokenId; uint256 amount; } /** * @dev Mapping of addresses that are authorized to add mint new tokens. */ mapping (address => bool) public authorizedAddresses; /** * @dev Only authorized addresses can call a function with this modifier. */ modifier onlyAuthorized() { require(authorizedAddresses[msg.sender] || owner() == msg.sender, "Not authorized"); _; } constructor( string memory _name, string memory _symbol, string memory _uri ) ERC1155(_uri) { name = _name; symbol = _symbol; } /** * @dev Sets or revokes authorized address. * @param addr Address we are setting. * @param isAuthorized True is setting, false if we are revoking. */ function setAuthorizedAddress(address addr, bool isAuthorized) external onlyOwner() { authorizedAddresses[addr] = isAuthorized; } function mintBatch(Recipient[] memory recList) external onlyAuthorized() { for (uint i = 0; i < recList.length; i++) { Recipient memory rec = recList[i]; _mint(rec.wallet, rec.tokenId, rec.amount, ""); } } function setURI(string memory _uri) external onlyAuthorized() { _setURI(_uri); } }
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Poli.Recipient[]","name":"recList","type":"tuple[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isAuthorized","type":"bool"}],"name":"setAuthorizedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003c4b38038062003c4b833981810160405281019062000037919062000317565b8062000049816200009760201b60201c565b506200006a6200005e620000ac60201b60201c565b620000b460201b60201c565b82600490816200007b91906200061b565b5081600590816200008d91906200061b565b5050505062000702565b8060029081620000a891906200061b565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001e38262000198565b810181811067ffffffffffffffff82111715620002055762000204620001a9565b5b80604052505050565b60006200021a6200017a565b9050620002288282620001d8565b919050565b600067ffffffffffffffff8211156200024b576200024a620001a9565b5b620002568262000198565b9050602081019050919050565b60005b838110156200028357808201518184015260208101905062000266565b8381111562000293576000848401525b50505050565b6000620002b0620002aa846200022d565b6200020e565b905082815260208101848484011115620002cf57620002ce62000193565b5b620002dc84828562000263565b509392505050565b600082601f830112620002fc57620002fb6200018e565b5b81516200030e84826020860162000299565b91505092915050565b60008060006060848603121562000333576200033262000184565b5b600084015167ffffffffffffffff81111562000354576200035362000189565b5b6200036286828701620002e4565b935050602084015167ffffffffffffffff81111562000386576200038562000189565b5b6200039486828701620002e4565b925050604084015167ffffffffffffffff811115620003b857620003b762000189565b5b620003c686828701620002e4565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042357607f821691505b602082108103620004395762000438620003db565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000464565b620004af868362000464565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004fc620004f6620004f084620004c7565b620004d1565b620004c7565b9050919050565b6000819050919050565b6200051883620004db565b62000530620005278262000503565b84845462000471565b825550505050565b600090565b6200054762000538565b620005548184846200050d565b505050565b5b818110156200057c57620005706000826200053d565b6001810190506200055a565b5050565b601f821115620005cb5762000595816200043f565b620005a08462000454565b81016020851015620005b0578190505b620005c8620005bf8562000454565b83018262000559565b50505b505050565b600082821c905092915050565b6000620005f060001984600802620005d0565b1980831691505092915050565b60006200060b8383620005dd565b9150826002028217905092915050565b6200062682620003d0565b67ffffffffffffffff811115620006425762000641620001a9565b5b6200064e82546200040a565b6200065b82828562000580565b600060209050601f8311600181146200069357600084156200067e578287015190505b6200068a8582620005fd565b865550620006fa565b601f198416620006a3866200043f565b60005b82811015620006cd57848901518255600182019150602085019450602081019050620006a6565b86831015620006ed5784890151620006e9601f891682620005dd565b8355505b6001600288020188555050505b505050505050565b61353980620007126000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c8063715018a6116100a2578063a9e7619311610071578063a9e76193146102a3578063e985e9c5146102bf578063f19e207e146102ef578063f242432a1461031f578063f2fde38b1461033b5761010a565b8063715018a6146102415780638da5cb5b1461024b57806395d89b4114610269578063a22cb465146102875761010a565b80630e89341c116100de5780630e89341c146101a95780631351cf51146101d95780632eb2c2d6146101f55780634e1273f4146102115761010a565b8062fdd58e1461010f57806301ffc9a71461013f57806302fe53051461016f57806306fdde031461018b575b600080fd5b61012960048036038101906101249190611ca6565b610357565b6040516101369190611cf5565b60405180910390f35b61015960048036038101906101549190611d68565b61041f565b6040516101669190611db0565b60405180910390f35b61018960048036038101906101849190611f11565b610501565b005b6101936105d6565b6040516101a09190611fe2565b60405180910390f35b6101c360048036038101906101be9190612004565b610664565b6040516101d09190611fe2565b60405180910390f35b6101f360048036038101906101ee919061205d565b6106f8565b005b61020f600480360381019061020a9190612206565b61075b565b005b61022b60048036038101906102269190612398565b6107fc565b60405161023891906124ce565b60405180910390f35b610249610915565b005b610253610929565b60405161026091906124ff565b60405180910390f35b610271610953565b60405161027e9190611fe2565b60405180910390f35b6102a1600480360381019061029c919061205d565b6109e1565b005b6102bd60048036038101906102b89190612646565b6109f7565b005b6102d960048036038101906102d4919061268f565b610b2a565b6040516102e69190611db0565b60405180910390f35b610309600480360381019061030491906126cf565b610bbe565b6040516103169190611db0565b60405180910390f35b610339600480360381019061033491906126fc565b610bde565b005b610355600480360381019061035091906126cf565b610c7f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103be90612805565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ea57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104fa57506104f982610d02565b5b9050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061058b57503373ffffffffffffffffffffffffffffffffffffffff16610573610929565b73ffffffffffffffffffffffffffffffffffffffff16145b6105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c190612871565b60405180910390fd5b6105d381610d6c565b50565b600480546105e3906128c0565b80601f016020809104026020016040519081016040528092919081815260200182805461060f906128c0565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b505050505081565b606060028054610673906128c0565b80601f016020809104026020016040519081016040528092919081815260200182805461069f906128c0565b80156106ec5780601f106106c1576101008083540402835291602001916106ec565b820191906000526020600020905b8154815290600101906020018083116106cf57829003601f168201915b50505050509050919050565b610700610d7f565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610763610dfd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107a957506107a8856107a3610dfd565b610b2a565b5b6107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90612963565b60405180910390fd5b6107f58585858585610e05565b5050505050565b60608151835114610842576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610839906129f5565b60405180910390fd5b6000835167ffffffffffffffff81111561085f5761085e611de6565b5b60405190808252806020026020018201604052801561088d5781602001602082028036833780820191505090505b50905060005b845181101561090a576108da8582815181106108b2576108b1612a15565b5b60200260200101518583815181106108cd576108cc612a15565b5b6020026020010151610357565b8282815181106108ed576108ec612a15565b5b6020026020010181815250508061090390612a73565b9050610893565b508091505092915050565b61091d610d7f565b6109276000611126565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610960906128c0565b80601f016020809104026020016040519081016040528092919081815260200182805461098c906128c0565b80156109d95780601f106109ae576101008083540402835291602001916109d9565b820191906000526020600020905b8154815290600101906020018083116109bc57829003601f168201915b505050505081565b6109f36109ec610dfd565b83836111ec565b5050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610a8157503373ffffffffffffffffffffffffffffffffffffffff16610a69610929565b73ffffffffffffffffffffffffffffffffffffffff16145b610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790612871565b60405180910390fd5b60005b8151811015610b26576000828281518110610ae157610ae0612a15565b5b60200260200101519050610b1281600001518260200151836040015160405180602001604052806000815250611358565b508080610b1e90612a73565b915050610ac3565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b610be6610dfd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c2c5750610c2b85610c26610dfd565b610b2a565b5b610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290612963565b60405180910390fd5b610c788585858585611508565b5050505050565b610c87610d7f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90612b2d565b60405180910390fd5b610cff81611126565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8060029081610d7b9190612cf9565b5050565b610d87610dfd565b73ffffffffffffffffffffffffffffffffffffffff16610da5610929565b73ffffffffffffffffffffffffffffffffffffffff1614610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290612e17565b60405180910390fd5b565b600033905090565b8151835114610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090612ea9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90612f3b565b60405180910390fd5b6000610ec2610dfd565b9050610ed28187878787876117a3565b60005b8451811015611083576000858281518110610ef357610ef2612a15565b5b602002602001015190506000858381518110610f1257610f11612a15565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90612fcd565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110689190612fed565b925050819055505050508061107c90612a73565b9050610ed5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110fa929190613043565b60405180910390a46111108187878787876117ab565b61111e8187878787876117b3565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361125a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611251906130ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161134b9190611db0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be9061317e565b60405180910390fd5b60006113d1610dfd565b905060006113de8561198a565b905060006113eb8561198a565b90506113fc836000898585896117a3565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461145b9190612fed565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516114d992919061319e565b60405180910390a46114f0836000898585896117ab565b6114ff83600089898989611a04565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e90612f3b565b60405180910390fd5b6000611581610dfd565b9050600061158e8561198a565b9050600061159b8561198a565b90506115ab8389898585896117a3565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990612fcd565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f79190612fed565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161177492919061319e565b60405180910390a461178a848a8a86868a6117ab565b611798848a8a8a8a8a611a04565b505050505050505050565b505050505050565b505050505050565b6117d28473ffffffffffffffffffffffffffffffffffffffff16611bdb565b15611982578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161181895949392919061321c565b6020604051808303816000875af192505050801561185457506040513d601f19601f820116820180604052508101906118519190613299565b60015b6118f9576118606132d3565b806308c379a0036118bc57506118746132f5565b8061187f57506118be565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b39190611fe2565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f0906133f7565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790613489565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156119a9576119a8611de6565b5b6040519080825280602002602001820160405280156119d75781602001602082028036833780820191505090505b50905082816000815181106119ef576119ee612a15565b5b60200260200101818152505080915050919050565b611a238473ffffffffffffffffffffffffffffffffffffffff16611bdb565b15611bd3578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611a699594939291906134a9565b6020604051808303816000875af1925050508015611aa557506040513d601f19601f82011682018060405250810190611aa29190613299565b60015b611b4a57611ab16132d3565b806308c379a003611b0d5750611ac56132f5565b80611ad05750611b0f565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b049190611fe2565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b41906133f7565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc890613489565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c3d82611c12565b9050919050565b611c4d81611c32565b8114611c5857600080fd5b50565b600081359050611c6a81611c44565b92915050565b6000819050919050565b611c8381611c70565b8114611c8e57600080fd5b50565b600081359050611ca081611c7a565b92915050565b60008060408385031215611cbd57611cbc611c08565b5b6000611ccb85828601611c5b565b9250506020611cdc85828601611c91565b9150509250929050565b611cef81611c70565b82525050565b6000602082019050611d0a6000830184611ce6565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d4581611d10565b8114611d5057600080fd5b50565b600081359050611d6281611d3c565b92915050565b600060208284031215611d7e57611d7d611c08565b5b6000611d8c84828501611d53565b91505092915050565b60008115159050919050565b611daa81611d95565b82525050565b6000602082019050611dc56000830184611da1565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e1e82611dd5565b810181811067ffffffffffffffff82111715611e3d57611e3c611de6565b5b80604052505050565b6000611e50611bfe565b9050611e5c8282611e15565b919050565b600067ffffffffffffffff821115611e7c57611e7b611de6565b5b611e8582611dd5565b9050602081019050919050565b82818337600083830152505050565b6000611eb4611eaf84611e61565b611e46565b905082815260208101848484011115611ed057611ecf611dd0565b5b611edb848285611e92565b509392505050565b600082601f830112611ef857611ef7611dcb565b5b8135611f08848260208601611ea1565b91505092915050565b600060208284031215611f2757611f26611c08565b5b600082013567ffffffffffffffff811115611f4557611f44611c0d565b5b611f5184828501611ee3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f94578082015181840152602081019050611f79565b83811115611fa3576000848401525b50505050565b6000611fb482611f5a565b611fbe8185611f65565b9350611fce818560208601611f76565b611fd781611dd5565b840191505092915050565b60006020820190508181036000830152611ffc8184611fa9565b905092915050565b60006020828403121561201a57612019611c08565b5b600061202884828501611c91565b91505092915050565b61203a81611d95565b811461204557600080fd5b50565b60008135905061205781612031565b92915050565b6000806040838503121561207457612073611c08565b5b600061208285828601611c5b565b925050602061209385828601612048565b9150509250929050565b600067ffffffffffffffff8211156120b8576120b7611de6565b5b602082029050602081019050919050565b600080fd5b60006120e16120dc8461209d565b611e46565b90508083825260208201905060208402830185811115612104576121036120c9565b5b835b8181101561212d57806121198882611c91565b845260208401935050602081019050612106565b5050509392505050565b600082601f83011261214c5761214b611dcb565b5b813561215c8482602086016120ce565b91505092915050565b600067ffffffffffffffff8211156121805761217f611de6565b5b61218982611dd5565b9050602081019050919050565b60006121a96121a484612165565b611e46565b9050828152602081018484840111156121c5576121c4611dd0565b5b6121d0848285611e92565b509392505050565b600082601f8301126121ed576121ec611dcb565b5b81356121fd848260208601612196565b91505092915050565b600080600080600060a0868803121561222257612221611c08565b5b600061223088828901611c5b565b955050602061224188828901611c5b565b945050604086013567ffffffffffffffff81111561226257612261611c0d565b5b61226e88828901612137565b935050606086013567ffffffffffffffff81111561228f5761228e611c0d565b5b61229b88828901612137565b925050608086013567ffffffffffffffff8111156122bc576122bb611c0d565b5b6122c8888289016121d8565b9150509295509295909350565b600067ffffffffffffffff8211156122f0576122ef611de6565b5b602082029050602081019050919050565b600061231461230f846122d5565b611e46565b90508083825260208201905060208402830185811115612337576123366120c9565b5b835b81811015612360578061234c8882611c5b565b845260208401935050602081019050612339565b5050509392505050565b600082601f83011261237f5761237e611dcb565b5b813561238f848260208601612301565b91505092915050565b600080604083850312156123af576123ae611c08565b5b600083013567ffffffffffffffff8111156123cd576123cc611c0d565b5b6123d98582860161236a565b925050602083013567ffffffffffffffff8111156123fa576123f9611c0d565b5b61240685828601612137565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61244581611c70565b82525050565b6000612457838361243c565b60208301905092915050565b6000602082019050919050565b600061247b82612410565b612485818561241b565b93506124908361242c565b8060005b838110156124c15781516124a8888261244b565b97506124b383612463565b925050600181019050612494565b5085935050505092915050565b600060208201905081810360008301526124e88184612470565b905092915050565b6124f981611c32565b82525050565b600060208201905061251460008301846124f0565b92915050565b600067ffffffffffffffff82111561253557612534611de6565b5b602082029050602081019050919050565b600080fd5b60006060828403121561256157612560612546565b5b61256b6060611e46565b9050600061257b84828501611c5b565b600083015250602061258f84828501611c91565b60208301525060406125a384828501611c91565b60408301525092915050565b60006125c26125bd8461251a565b611e46565b905080838252602082019050606084028301858111156125e5576125e46120c9565b5b835b8181101561260e57806125fa888261254b565b8452602084019350506060810190506125e7565b5050509392505050565b600082601f83011261262d5761262c611dcb565b5b813561263d8482602086016125af565b91505092915050565b60006020828403121561265c5761265b611c08565b5b600082013567ffffffffffffffff81111561267a57612679611c0d565b5b61268684828501612618565b91505092915050565b600080604083850312156126a6576126a5611c08565b5b60006126b485828601611c5b565b92505060206126c585828601611c5b565b9150509250929050565b6000602082840312156126e5576126e4611c08565b5b60006126f384828501611c5b565b91505092915050565b600080600080600060a0868803121561271857612717611c08565b5b600061272688828901611c5b565b955050602061273788828901611c5b565b945050604061274888828901611c91565b935050606061275988828901611c91565b925050608086013567ffffffffffffffff81111561277a57612779611c0d565b5b612786888289016121d8565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006127ef602a83611f65565b91506127fa82612793565b604082019050919050565b6000602082019050818103600083015261281e816127e2565b9050919050565b7f4e6f7420617574686f72697a6564000000000000000000000000000000000000600082015250565b600061285b600e83611f65565b915061286682612825565b602082019050919050565b6000602082019050818103600083015261288a8161284e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128d857607f821691505b6020821081036128eb576128ea612891565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b600061294d602f83611f65565b9150612958826128f1565b604082019050919050565b6000602082019050818103600083015261297c81612940565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006129df602983611f65565b91506129ea82612983565b604082019050919050565b60006020820190508181036000830152612a0e816129d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a7e82611c70565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ab057612aaf612a44565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b17602683611f65565b9150612b2282612abb565b604082019050919050565b60006020820190508181036000830152612b4681612b0a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612baf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612b72565b612bb98683612b72565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612bf6612bf1612bec84611c70565b612bd1565b611c70565b9050919050565b6000819050919050565b612c1083612bdb565b612c24612c1c82612bfd565b848454612b7f565b825550505050565b600090565b612c39612c2c565b612c44818484612c07565b505050565b5b81811015612c6857612c5d600082612c31565b600181019050612c4a565b5050565b601f821115612cad57612c7e81612b4d565b612c8784612b62565b81016020851015612c96578190505b612caa612ca285612b62565b830182612c49565b50505b505050565b600082821c905092915050565b6000612cd060001984600802612cb2565b1980831691505092915050565b6000612ce98383612cbf565b9150826002028217905092915050565b612d0282611f5a565b67ffffffffffffffff811115612d1b57612d1a611de6565b5b612d2582546128c0565b612d30828285612c6c565b600060209050601f831160018114612d635760008415612d51578287015190505b612d5b8582612cdd565b865550612dc3565b601f198416612d7186612b4d565b60005b82811015612d9957848901518255600182019150602085019450602081019050612d74565b86831015612db65784890151612db2601f891682612cbf565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e01602083611f65565b9150612e0c82612dcb565b602082019050919050565b60006020820190508181036000830152612e3081612df4565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612e93602883611f65565b9150612e9e82612e37565b604082019050919050565b60006020820190508181036000830152612ec281612e86565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f25602583611f65565b9150612f3082612ec9565b604082019050919050565b60006020820190508181036000830152612f5481612f18565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612fb7602a83611f65565b9150612fc282612f5b565b604082019050919050565b60006020820190508181036000830152612fe681612faa565b9050919050565b6000612ff882611c70565b915061300383611c70565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561303857613037612a44565b5b828201905092915050565b6000604082019050818103600083015261305d8185612470565b905081810360208301526130718184612470565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006130d6602983611f65565b91506130e18261307a565b604082019050919050565b60006020820190508181036000830152613105816130c9565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613168602183611f65565b91506131738261310c565b604082019050919050565b600060208201905081810360008301526131978161315b565b9050919050565b60006040820190506131b36000830185611ce6565b6131c06020830184611ce6565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006131ee826131c7565b6131f881856131d2565b9350613208818560208601611f76565b61321181611dd5565b840191505092915050565b600060a08201905061323160008301886124f0565b61323e60208301876124f0565b81810360408301526132508186612470565b905081810360608301526132648185612470565b9050818103608083015261327881846131e3565b90509695505050505050565b60008151905061329381611d3c565b92915050565b6000602082840312156132af576132ae611c08565b5b60006132bd84828501613284565b91505092915050565b60008160e01c9050919050565b600060033d11156132f25760046000803e6132ef6000516132c6565b90505b90565b600060443d1061338257613307611bfe565b60043d036004823e80513d602482011167ffffffffffffffff8211171561332f575050613382565b808201805167ffffffffffffffff81111561334d5750505050613382565b80602083010160043d03850181111561336a575050505050613382565b61337982602001850186611e15565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006133e1603483611f65565b91506133ec82613385565b604082019050919050565b60006020820190508181036000830152613410816133d4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613473602883611f65565b915061347e82613417565b604082019050919050565b600060208201905081810360008301526134a281613466565b9050919050565b600060a0820190506134be60008301886124f0565b6134cb60208301876124f0565b6134d86040830186611ce6565b6134e56060830185611ce6565b81810360808301526134f781846131e3565b9050969550505050505056fea2646970667358221220ca2003f9d26124ba72135862ec32ff8b1776307aaafc506f0ac6cf23df370d1364736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000008506f6c69204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004504e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f706f6c692d6170692d7374672e6b616c6d69612e73692f746f6b656e732f7b69647d00000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000008506f6c69204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004504e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f706f6c692d6170692d7374672e6b616c6d69612e73692f746f6b656e732f7b69647d00000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Poli NFT
Arg [1] : _symbol (string): PNFT
Arg [2] : _uri (string): https://poli-api-stg.kalmia.si/tokens/{id}
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 506f6c69204e4654000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 504e465400000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000002a
Arg [8] : 68747470733a2f2f706f6c692d6170692d7374672e6b616c6d69612e73692f74
Arg [9] : 6f6b656e732f7b69647d00000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
39369:1388:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21071:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20094:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40664:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39414:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20815:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40270:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23015:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21467:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38487:103;;;:::i;:::-;;37839:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39437:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22064:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40426:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22291:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39648:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22531:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38745:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21071:230;21157:7;21204:1;21185:21;;:7;:21;;;21177:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21271:9;:13;21281:2;21271:13;;;;;;;;;;;:22;21285:7;21271:22;;;;;;;;;;;;;;;;21264:29;;21071:230;;;;:::o;20094:310::-;20196:4;20248:26;20233:41;;;:11;:41;;;;:110;;;;20306:37;20291:52;;;:11;:52;;;;20233:110;:163;;;;20360:36;20384:11;20360:23;:36::i;:::-;20233:163;20213:183;;20094:310;;;:::o;40664:88::-;39839:19;:31;39859:10;39839:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;39885:10;39874:21;;:7;:5;:7::i;:::-;:21;;;39839:56;39831:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;40733:13:::1;40741:4;40733:7;:13::i;:::-;40664:88:::0;:::o;39414:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20815:105::-;20875:13;20908:4;20901:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20815:105;;;:::o;40270:150::-;37725:13;:11;:13::i;:::-;40402:12:::1;40374:19;:25;40394:4;40374:25;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;40270:150:::0;;:::o;23015:439::-;23256:12;:10;:12::i;:::-;23248:20;;:4;:20;;;:60;;;;23272:36;23289:4;23295:12;:10;:12::i;:::-;23272:16;:36::i;:::-;23248:60;23226:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;23394:52;23417:4;23423:2;23427:3;23432:7;23441:4;23394:22;:52::i;:::-;23015:439;;;;;:::o;21467:524::-;21623:16;21684:3;:10;21665:8;:15;:29;21657:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21753:30;21800:8;:15;21786:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21753:63;;21834:9;21829:122;21853:8;:15;21849:1;:19;21829:122;;;21909:30;21919:8;21928:1;21919:11;;;;;;;;:::i;:::-;;;;;;;;21932:3;21936:1;21932:6;;;;;;;;:::i;:::-;;;;;;;;21909:9;:30::i;:::-;21890:13;21904:1;21890:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;21870:3;;;;:::i;:::-;;;21829:122;;;;21970:13;21963:20;;;21467:524;;;;:::o;38487:103::-;37725:13;:11;:13::i;:::-;38552:30:::1;38579:1;38552:18;:30::i;:::-;38487:103::o:0;37839:87::-;37885:7;37912:6;;;;;;;;;;;37905:13;;37839:87;:::o;39437:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22064:155::-;22159:52;22178:12;:10;:12::i;:::-;22192:8;22202;22159:18;:52::i;:::-;22064:155;;:::o;40426:232::-;39839:19;:31;39859:10;39839:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;39885:10;39874:21;;:7;:5;:7::i;:::-;:21;;;39839:56;39831:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;40511:6:::1;40506:147;40527:7;:14;40523:1;:18;40506:147;;;40557:20;40580:7;40588:1;40580:10;;;;;;;;:::i;:::-;;;;;;;;40557:33;;40599:46;40605:3;:10;;;40617:3;:11;;;40630:3;:10;;;40599:46;;;;;;;;;;;::::0;:5:::1;:46::i;:::-;40548:105;40543:3;;;;;:::i;:::-;;;;40506:147;;;;40426:232:::0;:::o;22291:168::-;22390:4;22414:18;:27;22433:7;22414:27;;;;;;;;;;;;;;;:37;22442:8;22414:37;;;;;;;;;;;;;;;;;;;;;;;;;22407:44;;22291:168;;;;:::o;39648:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;22531:407::-;22747:12;:10;:12::i;:::-;22739:20;;:4;:20;;;:60;;;;22763:36;22780:4;22786:12;:10;:12::i;:::-;22763:16;:36::i;:::-;22739:60;22717:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;22885:45;22903:4;22909:2;22913;22917:6;22925:4;22885:17;:45::i;:::-;22531:407;;;;;:::o;38745:201::-;37725:13;:11;:13::i;:::-;38854:1:::1;38834:22;;:8;:22;;::::0;38826:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38910:28;38929:8;38910:18;:28::i;:::-;38745:201:::0;:::o;18832:157::-;18917:4;18956:25;18941:40;;;:11;:40;;;;18934:47;;18832:157;;;:::o;27240:88::-;27314:6;27307:4;:13;;;;;;:::i;:::-;;27240:88;:::o;38004:132::-;38079:12;:10;:12::i;:::-;38068:23;;:7;:5;:7::i;:::-;:23;;;38060:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38004:132::o;17747:98::-;17800:7;17827:10;17820:17;;17747:98;:::o;25250:1146::-;25477:7;:14;25463:3;:10;:28;25455:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25569:1;25555:16;;:2;:16;;;25547:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25626:16;25645:12;:10;:12::i;:::-;25626:31;;25670:60;25691:8;25701:4;25707:2;25711:3;25716:7;25725:4;25670:20;:60::i;:::-;25748:9;25743:421;25767:3;:10;25763:1;:14;25743:421;;;25799:10;25812:3;25816:1;25812:6;;;;;;;;:::i;:::-;;;;;;;;25799:19;;25833:14;25850:7;25858:1;25850:10;;;;;;;;:::i;:::-;;;;;;;;25833:27;;25877:19;25899:9;:13;25909:2;25899:13;;;;;;;;;;;:19;25913:4;25899:19;;;;;;;;;;;;;;;;25877:41;;25956:6;25941:11;:21;;25933:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26089:6;26075:11;:20;26053:9;:13;26063:2;26053:13;;;;;;;;;;;:19;26067:4;26053:19;;;;;;;;;;;;;;;:42;;;;26146:6;26125:9;:13;26135:2;26125:13;;;;;;;;;;;:17;26139:2;26125:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25784:380;;;25779:3;;;;:::i;:::-;;;25743:421;;;;26211:2;26181:47;;26205:4;26181:47;;26195:8;26181:47;;;26215:3;26220:7;26181:47;;;;;;;:::i;:::-;;;;;;;;26241:59;26261:8;26271:4;26277:2;26281:3;26286:7;26295:4;26241:19;:59::i;:::-;26313:75;26349:8;26359:4;26365:2;26369:3;26374:7;26383:4;26313:35;:75::i;:::-;25444:952;25250:1146;;;;;:::o;39106:191::-;39180:16;39199:6;;;;;;;;;;;39180:25;;39225:8;39216:6;;:17;;;;;;;;;;;;;;;;;;39280:8;39249:40;;39270:8;39249:40;;;;;;;;;;;;39169:128;39106:191;:::o;32127:331::-;32282:8;32273:17;;:5;:17;;;32265:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32385:8;32347:18;:25;32366:5;32347:25;;;;;;;;;;;;;;;:35;32373:8;32347:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32431:8;32409:41;;32424:5;32409:41;;;32441:8;32409:41;;;;;;:::i;:::-;;;;;;;;32127:331;;;:::o;27714:729::-;27881:1;27867:16;;:2;:16;;;27859:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27934:16;27953:12;:10;:12::i;:::-;27934:31;;27976:20;27999:21;28017:2;27999:17;:21::i;:::-;27976:44;;28031:24;28058:25;28076:6;28058:17;:25::i;:::-;28031:52;;28096:66;28117:8;28135:1;28139:2;28143:3;28148:7;28157:4;28096:20;:66::i;:::-;28196:6;28175:9;:13;28185:2;28175:13;;;;;;;;;;;:17;28189:2;28175:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28255:2;28218:52;;28251:1;28218:52;;28233:8;28218:52;;;28259:2;28263:6;28218:52;;;;;;;:::i;:::-;;;;;;;;28283:65;28303:8;28321:1;28325:2;28329:3;28334:7;28343:4;28283:19;:65::i;:::-;28361:74;28392:8;28410:1;28414:2;28418;28422:6;28430:4;28361:30;:74::i;:::-;27848:595;;;27714:729;;;;:::o;23918:974::-;24120:1;24106:16;;:2;:16;;;24098:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24177:16;24196:12;:10;:12::i;:::-;24177:31;;24219:20;24242:21;24260:2;24242:17;:21::i;:::-;24219:44;;24274:24;24301:25;24319:6;24301:17;:25::i;:::-;24274:52;;24339:60;24360:8;24370:4;24376:2;24380:3;24385:7;24394:4;24339:20;:60::i;:::-;24412:19;24434:9;:13;24444:2;24434:13;;;;;;;;;;;:19;24448:4;24434:19;;;;;;;;;;;;;;;;24412:41;;24487:6;24472:11;:21;;24464:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24612:6;24598:11;:20;24576:9;:13;24586:2;24576:13;;;;;;;;;;;:19;24590:4;24576:19;;;;;;;;;;;;;;;:42;;;;24661:6;24640:9;:13;24650:2;24640:13;;;;;;;;;;;:17;24654:2;24640:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24716:2;24685:46;;24710:4;24685:46;;24700:8;24685:46;;;24720:2;24724:6;24685:46;;;;;;;:::i;:::-;;;;;;;;24744:59;24764:8;24774:4;24780:2;24784:3;24789:7;24798:4;24744:19;:59::i;:::-;24816:68;24847:8;24857:4;24863:2;24867;24871:6;24879:4;24816:30;:68::i;:::-;24087:805;;;;23918:974;;;;;:::o;33416:221::-;;;;;;;:::o;34592:220::-;;;;;;;:::o;35572:813::-;35812:15;:2;:13;;;:15::i;:::-;35808:570;;;35865:2;35848:43;;;35892:8;35902:4;35908:3;35913:7;35922:4;35848:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35844:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36240:6;36233:14;;;;;;;;;;;:::i;:::-;;;;;;;;35844:523;;;36289:62;;;;;;;;;;:::i;:::-;;;;;;;;35844:523;36021:48;;;36009:60;;;:8;:60;;;;36005:159;;36094:50;;;;;;;;;;:::i;:::-;;;;;;;;36005:159;35928:251;35808:570;35572:813;;;;;;:::o;36393:198::-;36459:16;36488:22;36527:1;36513:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36488:41;;36551:7;36540:5;36546:1;36540:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36578:5;36571:12;;;36393:198;;;:::o;34820:744::-;35035:15;:2;:13;;;:15::i;:::-;35031:526;;;35088:2;35071:38;;;35110:8;35120:4;35126:2;35130:6;35138:4;35071:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35067:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;35419:6;35412:14;;;;;;;;;;;:::i;:::-;;;;;;;;35067:479;;;35468:62;;;;;;;;;;:::i;:::-;;;;;;;;35067:479;35205:43;;;35193:55;;;:8;:55;;;;35189:154;;35273:50;;;;;;;;;;:::i;:::-;;;;;;;;35189:154;35144:214;35031:526;34820:744;;;;;;:::o;9740:326::-;9800:4;10057:1;10035:7;:19;;;:23;10028:30;;9740:326;;;:::o;7:75:1:-;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:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:99::-;5994:6;6028:5;6022:12;6012:22;;5942:99;;;:::o;6047:169::-;6131:11;6165:6;6160:3;6153:19;6205:4;6200:3;6196:14;6181:29;;6047:169;;;;:::o;6222:307::-;6290:1;6300:113;6314:6;6311:1;6308:13;6300:113;;;6399:1;6394:3;6390:11;6384:18;6380:1;6375:3;6371:11;6364:39;6336:2;6333:1;6329:10;6324:15;;6300:113;;;6431:6;6428:1;6425:13;6422:101;;;6511:1;6502:6;6497:3;6493:16;6486:27;6422:101;6271:258;6222:307;;;:::o;6535:364::-;6623:3;6651:39;6684:5;6651:39;:::i;:::-;6706:71;6770:6;6765:3;6706:71;:::i;:::-;6699:78;;6786:52;6831:6;6826:3;6819:4;6812:5;6808:16;6786:52;:::i;:::-;6863:29;6885:6;6863:29;:::i;:::-;6858:3;6854:39;6847:46;;6627:272;6535:364;;;;:::o;6905:313::-;7018:4;7056:2;7045:9;7041:18;7033:26;;7105:9;7099:4;7095:20;7091:1;7080:9;7076:17;7069:47;7133:78;7206:4;7197:6;7133:78;:::i;:::-;7125:86;;6905:313;;;;:::o;7224:329::-;7283:6;7332:2;7320:9;7311:7;7307:23;7303:32;7300:119;;;7338:79;;:::i;:::-;7300:119;7458:1;7483:53;7528:7;7519:6;7508:9;7504:22;7483:53;:::i;:::-;7473:63;;7429:117;7224:329;;;;:::o;7559:116::-;7629:21;7644:5;7629:21;:::i;:::-;7622:5;7619:32;7609:60;;7665:1;7662;7655:12;7609:60;7559:116;:::o;7681:133::-;7724:5;7762:6;7749:20;7740:29;;7778:30;7802:5;7778:30;:::i;:::-;7681:133;;;;:::o;7820:468::-;7885:6;7893;7942:2;7930:9;7921:7;7917:23;7913:32;7910:119;;;7948:79;;:::i;:::-;7910:119;8068:1;8093:53;8138:7;8129:6;8118:9;8114:22;8093:53;:::i;:::-;8083:63;;8039:117;8195:2;8221:50;8263:7;8254:6;8243:9;8239:22;8221:50;:::i;:::-;8211:60;;8166:115;7820:468;;;;;:::o;8294:311::-;8371:4;8461:18;8453:6;8450:30;8447:56;;;8483:18;;:::i;:::-;8447:56;8533:4;8525:6;8521:17;8513:25;;8593:4;8587;8583:15;8575:23;;8294:311;;;:::o;8611:117::-;8720:1;8717;8710:12;8751:710;8847:5;8872:81;8888:64;8945:6;8888:64;:::i;:::-;8872:81;:::i;:::-;8863:90;;8973:5;9002:6;8995:5;8988:21;9036:4;9029:5;9025:16;9018:23;;9089:4;9081:6;9077:17;9069:6;9065:30;9118:3;9110:6;9107:15;9104:122;;;9137:79;;:::i;:::-;9104:122;9252:6;9235:220;9269:6;9264:3;9261:15;9235:220;;;9344:3;9373:37;9406:3;9394:10;9373:37;:::i;:::-;9368:3;9361:50;9440:4;9435:3;9431:14;9424:21;;9311:144;9295:4;9290:3;9286:14;9279:21;;9235:220;;;9239:21;8853:608;;8751:710;;;;;:::o;9484:370::-;9555:5;9604:3;9597:4;9589:6;9585:17;9581:27;9571:122;;9612:79;;:::i;:::-;9571:122;9729:6;9716:20;9754:94;9844:3;9836:6;9829:4;9821:6;9817:17;9754:94;:::i;:::-;9745:103;;9561:293;9484:370;;;;:::o;9860:307::-;9921:4;10011:18;10003:6;10000:30;9997:56;;;10033:18;;:::i;:::-;9997:56;10071:29;10093:6;10071:29;:::i;:::-;10063:37;;10155:4;10149;10145:15;10137:23;;9860:307;;;:::o;10173:410::-;10250:5;10275:65;10291:48;10332:6;10291:48;:::i;:::-;10275:65;:::i;:::-;10266:74;;10363:6;10356:5;10349:21;10401:4;10394:5;10390:16;10439:3;10430:6;10425:3;10421:16;10418:25;10415:112;;;10446:79;;:::i;:::-;10415:112;10536:41;10570:6;10565:3;10560;10536:41;:::i;:::-;10256:327;10173:410;;;;;:::o;10602:338::-;10657:5;10706:3;10699:4;10691:6;10687:17;10683:27;10673:122;;10714:79;;:::i;:::-;10673:122;10831:6;10818:20;10856:78;10930:3;10922:6;10915:4;10907:6;10903:17;10856:78;:::i;:::-;10847:87;;10663:277;10602:338;;;;:::o;10946:1509::-;11100:6;11108;11116;11124;11132;11181:3;11169:9;11160:7;11156:23;11152:33;11149:120;;;11188:79;;:::i;:::-;11149:120;11308:1;11333:53;11378:7;11369:6;11358:9;11354:22;11333:53;:::i;:::-;11323:63;;11279:117;11435:2;11461:53;11506:7;11497:6;11486:9;11482:22;11461:53;:::i;:::-;11451:63;;11406:118;11591:2;11580:9;11576:18;11563:32;11622:18;11614:6;11611:30;11608:117;;;11644:79;;:::i;:::-;11608:117;11749:78;11819:7;11810:6;11799:9;11795:22;11749:78;:::i;:::-;11739:88;;11534:303;11904:2;11893:9;11889:18;11876:32;11935:18;11927:6;11924:30;11921:117;;;11957:79;;:::i;:::-;11921:117;12062:78;12132:7;12123:6;12112:9;12108:22;12062:78;:::i;:::-;12052:88;;11847:303;12217:3;12206:9;12202:19;12189:33;12249:18;12241:6;12238:30;12235:117;;;12271:79;;:::i;:::-;12235:117;12376:62;12430:7;12421:6;12410:9;12406:22;12376:62;:::i;:::-;12366:72;;12160:288;10946:1509;;;;;;;;:::o;12461:311::-;12538:4;12628:18;12620:6;12617:30;12614:56;;;12650:18;;:::i;:::-;12614:56;12700:4;12692:6;12688:17;12680:25;;12760:4;12754;12750:15;12742:23;;12461:311;;;:::o;12795:710::-;12891:5;12916:81;12932:64;12989:6;12932:64;:::i;:::-;12916:81;:::i;:::-;12907:90;;13017:5;13046:6;13039:5;13032:21;13080:4;13073:5;13069:16;13062:23;;13133:4;13125:6;13121:17;13113:6;13109:30;13162:3;13154:6;13151:15;13148:122;;;13181:79;;:::i;:::-;13148:122;13296:6;13279:220;13313:6;13308:3;13305:15;13279:220;;;13388:3;13417:37;13450:3;13438:10;13417:37;:::i;:::-;13412:3;13405:50;13484:4;13479:3;13475:14;13468:21;;13355:144;13339:4;13334:3;13330:14;13323:21;;13279:220;;;13283:21;12897:608;;12795:710;;;;;:::o;13528:370::-;13599:5;13648:3;13641:4;13633:6;13629:17;13625:27;13615:122;;13656:79;;:::i;:::-;13615:122;13773:6;13760:20;13798:94;13888:3;13880:6;13873:4;13865:6;13861:17;13798:94;:::i;:::-;13789:103;;13605:293;13528:370;;;;:::o;13904:894::-;14022:6;14030;14079:2;14067:9;14058:7;14054:23;14050:32;14047:119;;;14085:79;;:::i;:::-;14047:119;14233:1;14222:9;14218:17;14205:31;14263:18;14255:6;14252:30;14249:117;;;14285:79;;:::i;:::-;14249:117;14390:78;14460:7;14451:6;14440:9;14436:22;14390:78;:::i;:::-;14380:88;;14176:302;14545:2;14534:9;14530:18;14517:32;14576:18;14568:6;14565:30;14562:117;;;14598:79;;:::i;:::-;14562:117;14703:78;14773:7;14764:6;14753:9;14749:22;14703:78;:::i;:::-;14693:88;;14488:303;13904:894;;;;;:::o;14804:114::-;14871:6;14905:5;14899:12;14889:22;;14804:114;;;:::o;14924:184::-;15023:11;15057:6;15052:3;15045:19;15097:4;15092:3;15088:14;15073:29;;14924:184;;;;:::o;15114:132::-;15181:4;15204:3;15196:11;;15234:4;15229:3;15225:14;15217:22;;15114:132;;;:::o;15252:108::-;15329:24;15347:5;15329:24;:::i;:::-;15324:3;15317:37;15252:108;;:::o;15366:179::-;15435:10;15456:46;15498:3;15490:6;15456:46;:::i;:::-;15534:4;15529:3;15525:14;15511:28;;15366:179;;;;:::o;15551:113::-;15621:4;15653;15648:3;15644:14;15636:22;;15551:113;;;:::o;15700:732::-;15819:3;15848:54;15896:5;15848:54;:::i;:::-;15918:86;15997:6;15992:3;15918:86;:::i;:::-;15911:93;;16028:56;16078:5;16028:56;:::i;:::-;16107:7;16138:1;16123:284;16148:6;16145:1;16142:13;16123:284;;;16224:6;16218:13;16251:63;16310:3;16295:13;16251:63;:::i;:::-;16244:70;;16337:60;16390:6;16337:60;:::i;:::-;16327:70;;16183:224;16170:1;16167;16163:9;16158:14;;16123:284;;;16127:14;16423:3;16416:10;;15824:608;;;15700:732;;;;:::o;16438:373::-;16581:4;16619:2;16608:9;16604:18;16596:26;;16668:9;16662:4;16658:20;16654:1;16643:9;16639:17;16632:47;16696:108;16799:4;16790:6;16696:108;:::i;:::-;16688:116;;16438:373;;;;:::o;16817:118::-;16904:24;16922:5;16904:24;:::i;:::-;16899:3;16892:37;16817:118;;:::o;16941:222::-;17034:4;17072:2;17061:9;17057:18;17049:26;;17085:71;17153:1;17142:9;17138:17;17129:6;17085:71;:::i;:::-;16941:222;;;;:::o;17169:338::-;17273:4;17363:18;17355:6;17352:30;17349:56;;;17385:18;;:::i;:::-;17349:56;17435:4;17427:6;17423:17;17415:25;;17495:4;17489;17485:15;17477:23;;17169:338;;;:::o;17513:117::-;17622:1;17619;17612:12;17788:744;17864:5;17908:4;17896:9;17891:3;17887:19;17883:30;17880:117;;;17916:79;;:::i;:::-;17880:117;18015:21;18031:4;18015:21;:::i;:::-;18006:30;;18097:1;18137:49;18182:3;18173:6;18162:9;18158:22;18137:49;:::i;:::-;18130:4;18123:5;18119:16;18112:75;18046:152;18260:2;18301:49;18346:3;18337:6;18326:9;18322:22;18301:49;:::i;:::-;18294:4;18287:5;18283:16;18276:75;18208:154;18423:2;18464:49;18509:3;18500:6;18489:9;18485:22;18464:49;:::i;:::-;18457:4;18450:5;18446:16;18439:75;18372:153;17788:744;;;;:::o;18569:791::-;18692:5;18717:108;18733:91;18817:6;18733:91;:::i;:::-;18717:108;:::i;:::-;18708:117;;18845:5;18874:6;18867:5;18860:21;18908:4;18901:5;18897:16;18890:23;;18961:4;18953:6;18949:17;18941:6;18937:30;18990:3;18982:6;18979:15;18976:122;;;19009:79;;:::i;:::-;18976:122;19124:6;19107:247;19141:6;19136:3;19133:15;19107:247;;;19216:3;19245:64;19305:3;19293:10;19245:64;:::i;:::-;19240:3;19233:77;19339:4;19334:3;19330:14;19323:21;;19183:171;19167:4;19162:3;19158:14;19151:21;;19107:247;;;19111:21;18698:662;;18569:791;;;;;:::o;19397:424::-;19495:5;19544:3;19537:4;19529:6;19525:17;19521:27;19511:122;;19552:79;;:::i;:::-;19511:122;19669:6;19656:20;19694:121;19811:3;19803:6;19796:4;19788:6;19784:17;19694:121;:::i;:::-;19685:130;;19501:320;19397:424;;;;:::o;19827:593::-;19938:6;19987:2;19975:9;19966:7;19962:23;19958:32;19955:119;;;19993:79;;:::i;:::-;19955:119;20141:1;20130:9;20126:17;20113:31;20171:18;20163:6;20160:30;20157:117;;;20193:79;;:::i;:::-;20157:117;20298:105;20395:7;20386:6;20375:9;20371:22;20298:105;:::i;:::-;20288:115;;20084:329;19827:593;;;;:::o;20426:474::-;20494:6;20502;20551:2;20539:9;20530:7;20526:23;20522:32;20519:119;;;20557:79;;:::i;:::-;20519:119;20677:1;20702:53;20747:7;20738:6;20727:9;20723:22;20702:53;:::i;:::-;20692:63;;20648:117;20804:2;20830:53;20875:7;20866:6;20855:9;20851:22;20830:53;:::i;:::-;20820:63;;20775:118;20426:474;;;;;:::o;20906:329::-;20965:6;21014:2;21002:9;20993:7;20989:23;20985:32;20982:119;;;21020:79;;:::i;:::-;20982:119;21140:1;21165:53;21210:7;21201:6;21190:9;21186:22;21165:53;:::i;:::-;21155:63;;21111:117;20906:329;;;;:::o;21241:1089::-;21345:6;21353;21361;21369;21377;21426:3;21414:9;21405:7;21401:23;21397:33;21394:120;;;21433:79;;:::i;:::-;21394:120;21553:1;21578:53;21623:7;21614:6;21603:9;21599:22;21578:53;:::i;:::-;21568:63;;21524:117;21680:2;21706:53;21751:7;21742:6;21731:9;21727:22;21706:53;:::i;:::-;21696:63;;21651:118;21808:2;21834:53;21879:7;21870:6;21859:9;21855:22;21834:53;:::i;:::-;21824:63;;21779:118;21936:2;21962:53;22007:7;21998:6;21987:9;21983:22;21962:53;:::i;:::-;21952:63;;21907:118;22092:3;22081:9;22077:19;22064:33;22124:18;22116:6;22113:30;22110:117;;;22146:79;;:::i;:::-;22110:117;22251:62;22305:7;22296:6;22285:9;22281:22;22251:62;:::i;:::-;22241:72;;22035:288;21241:1089;;;;;;;;:::o;22336:229::-;22476:34;22472:1;22464:6;22460:14;22453:58;22545:12;22540:2;22532:6;22528:15;22521:37;22336:229;:::o;22571:366::-;22713:3;22734:67;22798:2;22793:3;22734:67;:::i;:::-;22727:74;;22810:93;22899:3;22810:93;:::i;:::-;22928:2;22923:3;22919:12;22912:19;;22571:366;;;:::o;22943:419::-;23109:4;23147:2;23136:9;23132:18;23124:26;;23196:9;23190:4;23186:20;23182:1;23171:9;23167:17;23160:47;23224:131;23350:4;23224:131;:::i;:::-;23216:139;;22943:419;;;:::o;23368:164::-;23508:16;23504:1;23496:6;23492:14;23485:40;23368:164;:::o;23538:366::-;23680:3;23701:67;23765:2;23760:3;23701:67;:::i;:::-;23694:74;;23777:93;23866:3;23777:93;:::i;:::-;23895:2;23890:3;23886:12;23879:19;;23538:366;;;:::o;23910:419::-;24076:4;24114:2;24103:9;24099:18;24091:26;;24163:9;24157:4;24153:20;24149:1;24138:9;24134:17;24127:47;24191:131;24317:4;24191:131;:::i;:::-;24183:139;;23910:419;;;:::o;24335:180::-;24383:77;24380:1;24373:88;24480:4;24477:1;24470:15;24504:4;24501:1;24494:15;24521:320;24565:6;24602:1;24596:4;24592:12;24582:22;;24649:1;24643:4;24639:12;24670:18;24660:81;;24726:4;24718:6;24714:17;24704:27;;24660:81;24788:2;24780:6;24777:14;24757:18;24754:38;24751:84;;24807:18;;:::i;:::-;24751:84;24572:269;24521:320;;;:::o;24847:234::-;24987:34;24983:1;24975:6;24971:14;24964:58;25056:17;25051:2;25043:6;25039:15;25032:42;24847:234;:::o;25087:366::-;25229:3;25250:67;25314:2;25309:3;25250:67;:::i;:::-;25243:74;;25326:93;25415:3;25326:93;:::i;:::-;25444:2;25439:3;25435:12;25428:19;;25087:366;;;:::o;25459:419::-;25625:4;25663:2;25652:9;25648:18;25640:26;;25712:9;25706:4;25702:20;25698:1;25687:9;25683:17;25676:47;25740:131;25866:4;25740:131;:::i;:::-;25732:139;;25459:419;;;:::o;25884:228::-;26024:34;26020:1;26012:6;26008:14;26001:58;26093:11;26088:2;26080:6;26076:15;26069:36;25884:228;:::o;26118:366::-;26260:3;26281:67;26345:2;26340:3;26281:67;:::i;:::-;26274:74;;26357:93;26446:3;26357:93;:::i;:::-;26475:2;26470:3;26466:12;26459:19;;26118:366;;;:::o;26490:419::-;26656:4;26694:2;26683:9;26679:18;26671:26;;26743:9;26737:4;26733:20;26729:1;26718:9;26714:17;26707:47;26771:131;26897:4;26771:131;:::i;:::-;26763:139;;26490:419;;;:::o;26915:180::-;26963:77;26960:1;26953:88;27060:4;27057:1;27050:15;27084:4;27081:1;27074:15;27101:180;27149:77;27146:1;27139:88;27246:4;27243:1;27236:15;27270:4;27267:1;27260:15;27287:233;27326:3;27349:24;27367:5;27349:24;:::i;:::-;27340:33;;27395:66;27388:5;27385:77;27382:103;;27465:18;;:::i;:::-;27382:103;27512:1;27505:5;27501:13;27494:20;;27287:233;;;:::o;27526:225::-;27666:34;27662:1;27654:6;27650:14;27643:58;27735:8;27730:2;27722:6;27718:15;27711:33;27526:225;:::o;27757:366::-;27899:3;27920:67;27984:2;27979:3;27920:67;:::i;:::-;27913:74;;27996:93;28085:3;27996:93;:::i;:::-;28114:2;28109:3;28105:12;28098:19;;27757:366;;;:::o;28129:419::-;28295:4;28333:2;28322:9;28318:18;28310:26;;28382:9;28376:4;28372:20;28368:1;28357:9;28353:17;28346:47;28410:131;28536:4;28410:131;:::i;:::-;28402:139;;28129:419;;;:::o;28554:141::-;28603:4;28626:3;28618:11;;28649:3;28646:1;28639:14;28683:4;28680:1;28670:18;28662:26;;28554:141;;;:::o;28701:93::-;28738:6;28785:2;28780;28773:5;28769:14;28765:23;28755:33;;28701:93;;;:::o;28800:107::-;28844:8;28894:5;28888:4;28884:16;28863:37;;28800:107;;;;:::o;28913:393::-;28982:6;29032:1;29020:10;29016:18;29055:97;29085:66;29074:9;29055:97;:::i;:::-;29173:39;29203:8;29192:9;29173:39;:::i;:::-;29161:51;;29245:4;29241:9;29234:5;29230:21;29221:30;;29294:4;29284:8;29280:19;29273:5;29270:30;29260:40;;28989:317;;28913:393;;;;;:::o;29312:60::-;29340:3;29361:5;29354:12;;29312:60;;;:::o;29378:142::-;29428:9;29461:53;29479:34;29488:24;29506:5;29488:24;:::i;:::-;29479:34;:::i;:::-;29461:53;:::i;:::-;29448:66;;29378:142;;;:::o;29526:75::-;29569:3;29590:5;29583:12;;29526:75;;;:::o;29607:269::-;29717:39;29748:7;29717:39;:::i;:::-;29778:91;29827:41;29851:16;29827:41;:::i;:::-;29819:6;29812:4;29806:11;29778:91;:::i;:::-;29772:4;29765:105;29683:193;29607:269;;;:::o;29882:73::-;29927:3;29882:73;:::o;29961:189::-;30038:32;;:::i;:::-;30079:65;30137:6;30129;30123:4;30079:65;:::i;:::-;30014:136;29961:189;;:::o;30156:186::-;30216:120;30233:3;30226:5;30223:14;30216:120;;;30287:39;30324:1;30317:5;30287:39;:::i;:::-;30260:1;30253:5;30249:13;30240:22;;30216:120;;;30156:186;;:::o;30348:543::-;30449:2;30444:3;30441:11;30438:446;;;30483:38;30515:5;30483:38;:::i;:::-;30567:29;30585:10;30567:29;:::i;:::-;30557:8;30553:44;30750:2;30738:10;30735:18;30732:49;;;30771:8;30756:23;;30732:49;30794:80;30850:22;30868:3;30850:22;:::i;:::-;30840:8;30836:37;30823:11;30794:80;:::i;:::-;30453:431;;30438:446;30348:543;;;:::o;30897:117::-;30951:8;31001:5;30995:4;30991:16;30970:37;;30897:117;;;;:::o;31020:169::-;31064:6;31097:51;31145:1;31141:6;31133:5;31130:1;31126:13;31097:51;:::i;:::-;31093:56;31178:4;31172;31168:15;31158:25;;31071:118;31020:169;;;;:::o;31194:295::-;31270:4;31416:29;31441:3;31435:4;31416:29;:::i;:::-;31408:37;;31478:3;31475:1;31471:11;31465:4;31462:21;31454:29;;31194:295;;;;:::o;31494:1395::-;31611:37;31644:3;31611:37;:::i;:::-;31713:18;31705:6;31702:30;31699:56;;;31735:18;;:::i;:::-;31699:56;31779:38;31811:4;31805:11;31779:38;:::i;:::-;31864:67;31924:6;31916;31910:4;31864:67;:::i;:::-;31958:1;31982:4;31969:17;;32014:2;32006:6;32003:14;32031:1;32026:618;;;;32688:1;32705:6;32702:77;;;32754:9;32749:3;32745:19;32739:26;32730:35;;32702:77;32805:67;32865:6;32858:5;32805:67;:::i;:::-;32799:4;32792:81;32661:222;31996:887;;32026:618;32078:4;32074:9;32066:6;32062:22;32112:37;32144:4;32112:37;:::i;:::-;32171:1;32185:208;32199:7;32196:1;32193:14;32185:208;;;32278:9;32273:3;32269:19;32263:26;32255:6;32248:42;32329:1;32321:6;32317:14;32307:24;;32376:2;32365:9;32361:18;32348:31;;32222:4;32219:1;32215:12;32210:17;;32185:208;;;32421:6;32412:7;32409:19;32406:179;;;32479:9;32474:3;32470:19;32464:26;32522:48;32564:4;32556:6;32552:17;32541:9;32522:48;:::i;:::-;32514:6;32507:64;32429:156;32406:179;32631:1;32627;32619:6;32615:14;32611:22;32605:4;32598:36;32033:611;;;31996:887;;31586:1303;;;31494:1395;;:::o;32895:182::-;33035:34;33031:1;33023:6;33019:14;33012:58;32895:182;:::o;33083:366::-;33225:3;33246:67;33310:2;33305:3;33246:67;:::i;:::-;33239:74;;33322:93;33411:3;33322:93;:::i;:::-;33440:2;33435:3;33431:12;33424:19;;33083:366;;;:::o;33455:419::-;33621:4;33659:2;33648:9;33644:18;33636:26;;33708:9;33702:4;33698:20;33694:1;33683:9;33679:17;33672:47;33736:131;33862:4;33736:131;:::i;:::-;33728:139;;33455:419;;;:::o;33880:227::-;34020:34;34016:1;34008:6;34004:14;33997:58;34089:10;34084:2;34076:6;34072:15;34065:35;33880:227;:::o;34113:366::-;34255:3;34276:67;34340:2;34335:3;34276:67;:::i;:::-;34269:74;;34352:93;34441:3;34352:93;:::i;:::-;34470:2;34465:3;34461:12;34454:19;;34113:366;;;:::o;34485:419::-;34651:4;34689:2;34678:9;34674:18;34666:26;;34738:9;34732:4;34728:20;34724:1;34713:9;34709:17;34702:47;34766:131;34892:4;34766:131;:::i;:::-;34758:139;;34485:419;;;:::o;34910:224::-;35050:34;35046:1;35038:6;35034:14;35027:58;35119:7;35114:2;35106:6;35102:15;35095:32;34910:224;:::o;35140:366::-;35282:3;35303:67;35367:2;35362:3;35303:67;:::i;:::-;35296:74;;35379:93;35468:3;35379:93;:::i;:::-;35497:2;35492:3;35488:12;35481:19;;35140:366;;;:::o;35512:419::-;35678:4;35716:2;35705:9;35701:18;35693:26;;35765:9;35759:4;35755:20;35751:1;35740:9;35736:17;35729:47;35793:131;35919:4;35793:131;:::i;:::-;35785:139;;35512:419;;;:::o;35937:229::-;36077:34;36073:1;36065:6;36061:14;36054:58;36146:12;36141:2;36133:6;36129:15;36122:37;35937:229;:::o;36172:366::-;36314:3;36335:67;36399:2;36394:3;36335:67;:::i;:::-;36328:74;;36411:93;36500:3;36411:93;:::i;:::-;36529:2;36524:3;36520:12;36513:19;;36172:366;;;:::o;36544:419::-;36710:4;36748:2;36737:9;36733:18;36725:26;;36797:9;36791:4;36787:20;36783:1;36772:9;36768:17;36761:47;36825:131;36951:4;36825:131;:::i;:::-;36817:139;;36544:419;;;:::o;36969:305::-;37009:3;37028:20;37046:1;37028:20;:::i;:::-;37023:25;;37062:20;37080:1;37062:20;:::i;:::-;37057:25;;37216:1;37148:66;37144:74;37141:1;37138:81;37135:107;;;37222:18;;:::i;:::-;37135:107;37266:1;37263;37259:9;37252:16;;36969:305;;;;:::o;37280:634::-;37501:4;37539:2;37528:9;37524:18;37516:26;;37588:9;37582:4;37578:20;37574:1;37563:9;37559:17;37552:47;37616:108;37719:4;37710:6;37616:108;:::i;:::-;37608:116;;37771:9;37765:4;37761:20;37756:2;37745:9;37741:18;37734:48;37799:108;37902:4;37893:6;37799:108;:::i;:::-;37791:116;;37280:634;;;;;:::o;37920:228::-;38060:34;38056:1;38048:6;38044:14;38037:58;38129:11;38124:2;38116:6;38112:15;38105:36;37920:228;:::o;38154:366::-;38296:3;38317:67;38381:2;38376:3;38317:67;:::i;:::-;38310:74;;38393:93;38482:3;38393:93;:::i;:::-;38511:2;38506:3;38502:12;38495:19;;38154:366;;;:::o;38526:419::-;38692:4;38730:2;38719:9;38715:18;38707:26;;38779:9;38773:4;38769:20;38765:1;38754:9;38750:17;38743:47;38807:131;38933:4;38807:131;:::i;:::-;38799:139;;38526:419;;;:::o;38951:220::-;39091:34;39087:1;39079:6;39075:14;39068:58;39160:3;39155:2;39147:6;39143:15;39136:28;38951:220;:::o;39177:366::-;39319:3;39340:67;39404:2;39399:3;39340:67;:::i;:::-;39333:74;;39416:93;39505:3;39416:93;:::i;:::-;39534:2;39529:3;39525:12;39518:19;;39177:366;;;:::o;39549:419::-;39715:4;39753:2;39742:9;39738:18;39730:26;;39802:9;39796:4;39792:20;39788:1;39777:9;39773:17;39766:47;39830:131;39956:4;39830:131;:::i;:::-;39822:139;;39549:419;;;:::o;39974:332::-;40095:4;40133:2;40122:9;40118:18;40110:26;;40146:71;40214:1;40203:9;40199:17;40190:6;40146:71;:::i;:::-;40227:72;40295:2;40284:9;40280:18;40271:6;40227:72;:::i;:::-;39974:332;;;;;:::o;40312:98::-;40363:6;40397:5;40391:12;40381:22;;40312:98;;;:::o;40416:168::-;40499:11;40533:6;40528:3;40521:19;40573:4;40568:3;40564:14;40549:29;;40416:168;;;;:::o;40590:360::-;40676:3;40704:38;40736:5;40704:38;:::i;:::-;40758:70;40821:6;40816:3;40758:70;:::i;:::-;40751:77;;40837:52;40882:6;40877:3;40870:4;40863:5;40859:16;40837:52;:::i;:::-;40914:29;40936:6;40914:29;:::i;:::-;40909:3;40905:39;40898:46;;40680:270;40590:360;;;;:::o;40956:1053::-;41279:4;41317:3;41306:9;41302:19;41294:27;;41331:71;41399:1;41388:9;41384:17;41375:6;41331:71;:::i;:::-;41412:72;41480:2;41469:9;41465:18;41456:6;41412:72;:::i;:::-;41531:9;41525:4;41521:20;41516:2;41505:9;41501:18;41494:48;41559:108;41662:4;41653:6;41559:108;:::i;:::-;41551:116;;41714:9;41708:4;41704:20;41699:2;41688:9;41684:18;41677:48;41742:108;41845:4;41836:6;41742:108;:::i;:::-;41734:116;;41898:9;41892:4;41888:20;41882:3;41871:9;41867:19;41860:49;41926:76;41997:4;41988:6;41926:76;:::i;:::-;41918:84;;40956:1053;;;;;;;;:::o;42015:141::-;42071:5;42102:6;42096:13;42087:22;;42118:32;42144:5;42118:32;:::i;:::-;42015:141;;;;:::o;42162:349::-;42231:6;42280:2;42268:9;42259:7;42255:23;42251:32;42248:119;;;42286:79;;:::i;:::-;42248:119;42406:1;42431:63;42486:7;42477:6;42466:9;42462:22;42431:63;:::i;:::-;42421:73;;42377:127;42162:349;;;;:::o;42517:106::-;42561:8;42610:5;42605:3;42601:15;42580:36;;42517:106;;;:::o;42629:183::-;42664:3;42702:1;42684:16;42681:23;42678:128;;;42740:1;42737;42734;42719:23;42762:34;42793:1;42787:8;42762:34;:::i;:::-;42755:41;;42678:128;42629:183;:::o;42818:711::-;42857:3;42895:4;42877:16;42874:26;42903:5;42871:39;42932:20;;:::i;:::-;43007:1;42989:16;42985:24;42982:1;42976:4;42961:49;43040:4;43034:11;43139:16;43132:4;43124:6;43120:17;43117:39;43084:18;43076:6;43073:30;43057:113;43054:146;;;43185:5;;;;43054:146;43231:6;43225:4;43221:17;43267:3;43261:10;43294:18;43286:6;43283:30;43280:43;;;43316:5;;;;;;43280:43;43364:6;43357:4;43352:3;43348:14;43344:27;43423:1;43405:16;43401:24;43395:4;43391:35;43386:3;43383:44;43380:57;;;43430:5;;;;;;;43380:57;43447;43495:6;43489:4;43485:17;43477:6;43473:30;43467:4;43447:57;:::i;:::-;43520:3;43513:10;;42861:668;;;;;42818:711;;:::o;43535:239::-;43675:34;43671:1;43663:6;43659:14;43652:58;43744:22;43739:2;43731:6;43727:15;43720:47;43535:239;:::o;43780:366::-;43922:3;43943:67;44007:2;44002:3;43943:67;:::i;:::-;43936:74;;44019:93;44108:3;44019:93;:::i;:::-;44137:2;44132:3;44128:12;44121:19;;43780:366;;;:::o;44152:419::-;44318:4;44356:2;44345:9;44341:18;44333:26;;44405:9;44399:4;44395:20;44391:1;44380:9;44376:17;44369:47;44433:131;44559:4;44433:131;:::i;:::-;44425:139;;44152:419;;;:::o;44577:227::-;44717:34;44713:1;44705:6;44701:14;44694:58;44786:10;44781:2;44773:6;44769:15;44762:35;44577:227;:::o;44810:366::-;44952:3;44973:67;45037:2;45032:3;44973:67;:::i;:::-;44966:74;;45049:93;45138:3;45049:93;:::i;:::-;45167:2;45162:3;45158:12;45151:19;;44810:366;;;:::o;45182:419::-;45348:4;45386:2;45375:9;45371:18;45363:26;;45435:9;45429:4;45425:20;45421:1;45410:9;45406:17;45399:47;45463:131;45589:4;45463:131;:::i;:::-;45455:139;;45182:419;;;:::o;45607:751::-;45830:4;45868:3;45857:9;45853:19;45845:27;;45882:71;45950:1;45939:9;45935:17;45926:6;45882:71;:::i;:::-;45963:72;46031:2;46020:9;46016:18;46007:6;45963:72;:::i;:::-;46045;46113:2;46102:9;46098:18;46089:6;46045:72;:::i;:::-;46127;46195:2;46184:9;46180:18;46171:6;46127:72;:::i;:::-;46247:9;46241:4;46237:20;46231:3;46220:9;46216:19;46209:49;46275:76;46346:4;46337:6;46275:76;:::i;:::-;46267:84;;45607:751;;;;;;;;:::o
Swarm Source
ipfs://ca2003f9d26124ba72135862ec32ff8b1776307aaafc506f0ac6cf23df370d13