Overview
ETH Balance
0.01 ETH
Eth Value
$30.78 (@ $3,078.36/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 108 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21031896 | 96 days ago | IN | 0 ETH | 0.000318 | ||||
Set Approval For... | 20962059 | 106 days ago | IN | 0 ETH | 0.00075109 | ||||
Set Approval For... | 18746935 | 416 days ago | IN | 0 ETH | 0.00119317 | ||||
Set Approval For... | 16600862 | 718 days ago | IN | 0 ETH | 0.00053458 | ||||
Set Approval For... | 16600862 | 718 days ago | IN | 0 ETH | 0.00053458 | ||||
Set Approval For... | 15364280 | 894 days ago | IN | 0 ETH | 0.00019809 | ||||
Set Approval For... | 14780916 | 989 days ago | IN | 0 ETH | 0.00307283 | ||||
Set Approval For... | 14486537 | 1035 days ago | IN | 0 ETH | 0.00127115 | ||||
Update Mint Stat... | 14392753 | 1050 days ago | IN | 0 ETH | 0.00392915 | ||||
Set Approval For... | 14389077 | 1050 days ago | IN | 0 ETH | 0.00139957 | ||||
Set Approval For... | 14340936 | 1058 days ago | IN | 0 ETH | 0.00123778 | ||||
Set Approval For... | 14325127 | 1060 days ago | IN | 0 ETH | 0.00118657 | ||||
Airdrop | 14323239 | 1061 days ago | IN | 0 ETH | 0.00325305 | ||||
Airdrop | 14323239 | 1061 days ago | IN | 0 ETH | 0.00325216 | ||||
Airdrop | 14323238 | 1061 days ago | IN | 0 ETH | 0.00319377 | ||||
Purchase Dunny | 14228901 | 1075 days ago | IN | 0.01 ETH | 0.00422279 | ||||
Withdraw | 14187398 | 1082 days ago | IN | 0 ETH | 0.00236331 | ||||
Set Approval For... | 14103379 | 1095 days ago | IN | 0 ETH | 0.00467746 | ||||
Set Approval For... | 14102638 | 1095 days ago | IN | 0 ETH | 0.0047149 | ||||
Safe Transfer Fr... | 14034592 | 1105 days ago | IN | 0 ETH | 0.00503536 | ||||
Set Approval For... | 14006373 | 1110 days ago | IN | 0 ETH | 0.00788913 | ||||
Purchase Dunny | 13966691 | 1116 days ago | IN | 0.01 ETH | 0.00717327 | ||||
Purchase Dunny | 13959685 | 1117 days ago | IN | 0.04 ETH | 0.00822789 | ||||
Purchase Dunny | 13953548 | 1118 days ago | IN | 0.02 ETH | 0.00785728 | ||||
Set Approval For... | 13926822 | 1122 days ago | IN | 0 ETH | 0.00324127 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
kingEtherDunny
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-02 */ // File: openzeppelin-solidity/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (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/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.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. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.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 be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.0 (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/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.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: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: dunny.sol // Author: August Rosedale (https://twitter.com/augustfr) pragma solidity ^0.8.0; contract kingEtherDunny is ERC1155Supply, Ownable { using Strings for uint256; uint256 mintActive = 1; uint256 priceStill = 10000000000000000; uint256 priceAniSil = 40000000000000000; uint256 priceAniGol = 100000000000000000; uint256 priceAniPla = 1000000000000000000; uint256 maxStill = 500; uint256 maxAniSil = 100; uint256 maxAniGol = 10; uint256 maxAniPla = 1; string baseURI = 'https://ipfs.io/ipfs/QmbzpE527aKa1ieNHPsz66Lqf2k9Xdsu6BK8K1fjEYN6cs/'; constructor() ERC1155(baseURI) { } function name() external pure returns (string memory) { return "Kidrobot King Ether Dunny"; } function symbol() external pure returns (string memory) { return "KED"; } function updateBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function updatePrices(uint256 _priceStill, uint256 _priceAniSil, uint256 _priceAniGol, uint256 _priceAniPla) public onlyOwner { priceStill = _priceStill; priceAniSil = _priceAniSil; priceAniGol = _priceAniGol; priceAniPla = _priceAniPla; } function mintDunny(uint numberOfTokens, uint optionID) internal { if (optionID == 0 || optionID == 1 || optionID == 2) { _mint(msg.sender, optionID, numberOfTokens, ""); } else if (optionID == 3){ _mint(msg.sender, 3, numberOfTokens, ""); } else if (optionID == 4) { _mint(msg.sender, 4, numberOfTokens, ""); } else if (optionID == 5) { _mint(msg.sender, 5, numberOfTokens, ""); } } function updateMintStatus(uint256 _id) public onlyOwner { require(_id==0 || _id==1 || _id==2, "Not an available state. Options: 0 (open), 1 (paused), 2 (locked)"); require(mintActive != 2, "Minting has been permanently closed"); mintActive = _id; } function purchaseDunny(uint numberOfTokens, uint optionID) public payable { require(optionID >= 0 && optionID < 6, "Option does not exist"); require(mintActive == 0, "Mint has not opened yet or has been locked"); require(numberOfTokens <= 10, "Can only purchase a maximum of 2 tokens at a time"); if (optionID == 0 || optionID == 1 || optionID == 2) { require(totalSupply(optionID) + numberOfTokens <= 500, "Minting would exceed max supply"); require(priceStill * numberOfTokens <= msg.value, "Ether value sent is not correct"); mintDunny(numberOfTokens, optionID); } else if (optionID == 3) { require(totalSupply(3) + numberOfTokens <= 100, "Minting would exceed max supply"); require(priceAniSil * numberOfTokens <= msg.value, "Ether value sent is not correct"); mintDunny(numberOfTokens, optionID); } else if (optionID == 4) { require(totalSupply(4) + numberOfTokens <= 10, "Minting would exceed max supply"); require(priceAniGol * numberOfTokens <= msg.value, "Ether value sent is not correct"); mintDunny(numberOfTokens, optionID); } else if (optionID == 5) { require(totalSupply(5) + numberOfTokens == 1, "Minting would exceed max supply"); require(priceAniPla * numberOfTokens <= msg.value, "Ether value sent is not correct"); mintDunny(numberOfTokens, optionID); } } function mintToAddress(uint numberOfTokens, address address_to_mint, uint optionID) internal { _mint(address_to_mint, optionID, numberOfTokens, ""); } function airdrop(address addresstm, uint numberOfTokens, uint optionID) public onlyOwner { require(optionID >= 0 && optionID < 6, "Option does not exist"); if (optionID == 0 || optionID == 1 || optionID == 2) { require(totalSupply(optionID) + numberOfTokens <= 500, "Minting would exceed max supply"); mintToAddress(numberOfTokens, addresstm, optionID); } else if (optionID == 3){ require(totalSupply(3) + numberOfTokens <= 100, "Minting would exceed max supply"); mintToAddress(numberOfTokens, addresstm, optionID); } else if (optionID == 4) { require(totalSupply(4) + numberOfTokens <= 10, "Minting would exceed max supply"); mintToAddress(numberOfTokens, addresstm, optionID); } else if (optionID == 5) { require(totalSupply(5) + numberOfTokens == 1, "Minting would exceed max supply"); mintToAddress(numberOfTokens, addresstm, optionID); } } function uri(uint256 tokenID) public view override returns(string memory) { if (tokenID > 5) { return 'Token does not exist'; } return string(abi.encodePacked(baseURI,tokenID.toString())); } function withdraw() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"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":"addresstm","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"optionID","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"optionID","type":"uint256"}],"name":"purchaseDunny","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"updateBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"updateMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceStill","type":"uint256"},{"internalType":"uint256","name":"_priceAniSil","type":"uint256"},{"internalType":"uint256","name":"_priceAniGol","type":"uint256"},{"internalType":"uint256","name":"_priceAniPla","type":"uint256"}],"name":"updatePrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600555662386f26fc10000600655668e1bc9bf04000060075567016345785d8a0000600855670de0b6b3a76400006009556101f4600a556064600b55600a600c556001600d556040518060800160405280604481526020016200487660449139600e90805190602001906200007d92919062000241565b503480156200008b57600080fd5b50600e80546200009b90620002f1565b80601f0160208091040260200160405190810160405280929190818152602001828054620000c990620002f1565b80156200011a5780601f10620000ee576101008083540402835291602001916200011a565b820191906000526020600020905b815481529060010190602001808311620000fc57829003601f168201915b505050505062000130816200015760201b60201c565b5062000151620001456200017360201b60201c565b6200017b60201b60201c565b62000356565b80600290805190602001906200016f92919062000241565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024f90620002f1565b90600052602060002090601f016020900481019282620002735760008555620002bf565b82601f106200028e57805160ff1916838001178555620002bf565b82800160010185558215620002bf579182015b82811115620002be578251825591602001919060010190620002a1565b5b509050620002ce9190620002d2565b5090565b5b80821115620002ed576000816000905550600101620002d3565b5090565b600060028204905060018216806200030a57607f821691505b6020821081141562000321576200032062000327565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61451080620003666000396000f3fe6080604052600436106101295760003560e01c8063528dd2a8116100ab578063a22cb4651161006f578063a22cb465146103ce578063bd85b039146103f7578063e1bc296714610434578063e985e9c51461045d578063f242432a1461049a578063f2fde38b146104c357610129565b8063528dd2a81461030f578063715018a6146103385780638da5cb5b1461034f578063931688cb1461037a57806395d89b41146103a357610129565b80633ccfd60b116100f25780633ccfd60b1461023957806340c49313146102505780634e1273f41461026c5780634f558e79146102a957806351f69d06146102e657610129565b8062fdd58e1461012e57806301ffc9a71461016b57806306fdde03146101a85780630e89341c146101d35780632eb2c2d614610210575b600080fd5b34801561013a57600080fd5b5061015560048036038101906101509190612ef6565b6104ec565b6040516101629190613eb9565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190612fed565b6105b5565b60405161019f9190613bfc565b60405180910390f35b3480156101b457600080fd5b506101bd610697565b6040516101ca9190613c17565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190613080565b6106d4565b6040516102079190613c17565b60405180910390f35b34801561021c57600080fd5b5061023760048036038101906102329190612d6c565b61074f565b005b34801561024557600080fd5b5061024e6107f0565b005b61026a600480360381019061026591906130a9565b6108bb565b005b34801561027857600080fd5b50610293600480360381019061028e9190612f81565b610cac565b6040516102a09190613ba3565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613080565b610e5d565b6040516102dd9190613bfc565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906130e5565b610e71565b005b34801561031b57600080fd5b5061033660048036038101906103319190613080565b610f0f565b005b34801561034457600080fd5b5061034d611034565b005b34801561035b57600080fd5b506103646110bc565b6040516103719190613ac6565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c919061303f565b6110e6565b005b3480156103af57600080fd5b506103b861117c565b6040516103c59190613c17565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190612eba565b6111b9565b005b34801561040357600080fd5b5061041e60048036038101906104199190613080565b6111cf565b60405161042b9190613eb9565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190612f32565b6111ec565b005b34801561046957600080fd5b50610484600480360381019061047f9190612d30565b611495565b6040516104919190613bfc565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190612e2b565b611529565b005b3480156104cf57600080fd5b506104ea60048036038101906104e59190612d07565b6115ca565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561055d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055490613c79565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610690575061068f826116c2565b5b9050919050565b60606040518060400160405280601981526020017f4b6964726f626f74204b696e672045746865722044756e6e7900000000000000815250905090565b6060600582111561071c576040518060400160405280601481526020017f546f6b656e20646f6573206e6f74206578697374000000000000000000000000815250905061074a565b600e6107278361172c565b604051602001610738929190613aa2565b60405160208183030381529060405290505b919050565b6107576118d9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079d575061079c856107976118d9565b611495565b5b6107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d390613d19565b60405180910390fd5b6107e985858585856118e1565b5050505050565b6107f86118d9565b73ffffffffffffffffffffffffffffffffffffffff166108166110bc565b73ffffffffffffffffffffffffffffffffffffffff161461086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390613db9565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108b7573d6000803e3d6000fd5b5050565b600081101580156108cc5750600681105b61090b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290613e79565b60405180910390fd5b600060055414610950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094790613d39565b60405180910390fd5b600a821115610994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098b90613d79565b60405180910390fd5b60008114806109a35750600181145b806109ae5750600281145b15610a6a576101f4826109c0836111cf565b6109ca9190614077565b1115610a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0290613d59565b60405180910390fd5b3482600654610a1a91906140fe565b1115610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290613cd9565b60405180910390fd5b610a658282611c41565b610ca8565b6003811415610b2a57606482610a8060036111cf565b610a8a9190614077565b1115610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac290613d59565b60405180910390fd5b3482600754610ada91906140fe565b1115610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290613cd9565b60405180910390fd5b610b258282611c41565b610ca7565b6004811415610bea57600a82610b4060046111cf565b610b4a9190614077565b1115610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613d59565b60405180910390fd5b3482600854610b9a91906140fe565b1115610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613cd9565b60405180910390fd5b610be58282611c41565b610ca6565b6005811415610ca557600182610c0060056111cf565b610c0a9190614077565b14610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190613d59565b60405180910390fd5b3482600954610c5991906140fe565b1115610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9190613cd9565b60405180910390fd5b610ca48282611c41565b5b5b5b5b5050565b60608151835114610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613e19565b60405180910390fd5b6000835167ffffffffffffffff811115610d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d635781602001602082028036833780820191505090505b50905060005b8451811015610e5257610dfc858281518110610dae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610def577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516104ec565b828281518110610e35577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610e4b90614274565b9050610d69565b508091505092915050565b600080610e69836111cf565b119050919050565b610e796118d9565b73ffffffffffffffffffffffffffffffffffffffff16610e976110bc565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613db9565b60405180910390fd5b8360068190555082600781905550816008819055508060098190555050505050565b610f176118d9565b73ffffffffffffffffffffffffffffffffffffffff16610f356110bc565b73ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290613db9565b60405180910390fd5b6000811480610f9a5750600181145b80610fa55750600281145b610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90613dd9565b60405180910390fd5b6002600554141561102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190613e99565b60405180910390fd5b8060058190555050565b61103c6118d9565b73ffffffffffffffffffffffffffffffffffffffff1661105a6110bc565b73ffffffffffffffffffffffffffffffffffffffff16146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790613db9565b60405180910390fd5b6110ba6000611d01565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110ee6118d9565b73ffffffffffffffffffffffffffffffffffffffff1661110c6110bc565b73ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613db9565b60405180910390fd5b80600e90805190602001906111789291906129ff565b5050565b60606040518060400160405280600381526020017f4b45440000000000000000000000000000000000000000000000000000000000815250905090565b6111cb6111c46118d9565b8383611dc7565b5050565b600060036000838152602001908152602001600020549050919050565b6111f46118d9565b73ffffffffffffffffffffffffffffffffffffffff166112126110bc565b73ffffffffffffffffffffffffffffffffffffffff1614611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90613db9565b60405180910390fd5b600081101580156112795750600681105b6112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90613e79565b60405180910390fd5b60008114806112c75750600181145b806112d25750600281145b1561133f576101f4826112e4836111cf565b6112ee9190614077565b111561132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690613d59565b60405180910390fd5b61133a828483611f34565b611490565b60038114156113b05760648261135560036111cf565b61135f9190614077565b11156113a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139790613d59565b60405180910390fd5b6113ab828483611f34565b61148f565b600481141561142157600a826113c660046111cf565b6113d09190614077565b1115611411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140890613d59565b60405180910390fd5b61141c828483611f34565b61148e565b600581141561148d5760018261143760056111cf565b6114419190614077565b14611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613d59565b60405180910390fd5b61148c828483611f34565b5b5b5b5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115316118d9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806115775750611576856115716118d9565b611495565b5b6115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613cb9565b60405180910390fd5b6115c38585858585611f54565b5050505050565b6115d26118d9565b73ffffffffffffffffffffffffffffffffffffffff166115f06110bc565b73ffffffffffffffffffffffffffffffffffffffff1614611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90613db9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613c99565b60405180910390fd5b6116bf81611d01565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415611774576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506118d4565b600082905060005b600082146117a657808061178f90614274565b915050600a8261179f91906140cd565b915061177c565b60008167ffffffffffffffff8111156117e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561181a5781602001600182028036833780820191505090505b5090505b600085146118cd576001826118339190614158565b9150600a8561184291906142bd565b603061184e9190614077565b60f81b81838151811061188a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856118c691906140cd565b945061181e565b8093505050505b919050565b600033905090565b8151835114611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613e39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90613cf9565b60405180910390fd5b600061199f6118d9565b90506119af8187878787876121d6565b60005b8451811015611bac5760008582815181106119f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611a3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613d99565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b919190614077565b9250508190555050505080611ba590614274565b90506119b2565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611c23929190613bc5565b60405180910390a4611c398187878787876123e8565b505050505050565b6000811480611c505750600181145b80611c5b5750600281145b15611c8057611c7b338284604051806020016040528060008152506125b8565b611cfd565b6003811415611caa57611ca533600384604051806020016040528060008152506125b8565b611cfc565b6004811415611cd457611ccf33600484604051806020016040528060008152506125b8565b611cfb565b6005811415611cfa57611cf933600584604051806020016040528060008152506125b8565b5b5b5b5b5050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90613df9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f279190613bfc565b60405180910390a3505050565b611f4f828285604051806020016040528060008152506125b8565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90613cf9565b60405180910390fd5b6000611fce6118d9565b9050611fee818787611fdf8861274e565b611fe88861274e565b876121d6565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90613d99565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213a9190614077565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516121b7929190613ed4565b60405180910390a46121cd828888888888612814565b50505050505050565b6121e48686868686866129e4565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156122e25760005b83518110156122e05782818151811061225e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600360008684815181106122a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546122c89190614077565b92505081905550806122d990614274565b905061221c565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123e05760005b83518110156123de5782818151811061235c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600360008684815181106123a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546123c69190614158565b92505081905550806123d790614274565b905061231a565b505b505050505050565b6124078473ffffffffffffffffffffffffffffffffffffffff166129ec565b156125b0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161244d959493929190613ae1565b602060405180830381600087803b15801561246757600080fd5b505af192505050801561249857506040513d601f19601f820116820180604052508101906124959190613016565b60015b612527576124a46143c8565b806124af57506124ec565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e39190613c17565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e90613c39565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590613c59565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f90613e59565b60405180910390fd5b60006126326118d9565b9050612653816000876126448861274e565b61264d8861274e565b876121d6565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b29190614077565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612730929190613ed4565b60405180910390a461274781600087878787612814565b5050505050565b60606000600167ffffffffffffffff811115612793577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156127c15781602001602082028036833780820191505090505b50905082816000815181106127ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6128338473ffffffffffffffffffffffffffffffffffffffff166129ec565b156129dc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612879959493929190613b49565b602060405180830381600087803b15801561289357600080fd5b505af19250505080156128c457506040513d601f19601f820116820180604052508101906128c19190613016565b60015b612953576128d06143c8565b806128db5750612918565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f9190613c17565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90613c39565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190613c59565b60405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b828054612a0b90614242565b90600052602060002090601f016020900481019282612a2d5760008555612a74565b82601f10612a4657805160ff1916838001178555612a74565b82800160010185558215612a74579182015b82811115612a73578251825591602001919060010190612a58565b5b509050612a819190612a85565b5090565b5b80821115612a9e576000816000905550600101612a86565b5090565b6000612ab5612ab084613f2e565b613efd565b90508083825260208201905082856020860282011115612ad457600080fd5b60005b85811015612b045781612aea8882612bf6565b845260208401935060208301925050600181019050612ad7565b5050509392505050565b6000612b21612b1c84613f5a565b613efd565b90508083825260208201905082856020860282011115612b4057600080fd5b60005b85811015612b705781612b568882612cf2565b845260208401935060208301925050600181019050612b43565b5050509392505050565b6000612b8d612b8884613f86565b613efd565b905082815260208101848484011115612ba557600080fd5b612bb0848285614200565b509392505050565b6000612bcb612bc684613fb6565b613efd565b905082815260208101848484011115612be357600080fd5b612bee848285614200565b509392505050565b600081359050612c058161447e565b92915050565b600082601f830112612c1c57600080fd5b8135612c2c848260208601612aa2565b91505092915050565b600082601f830112612c4657600080fd5b8135612c56848260208601612b0e565b91505092915050565b600081359050612c6e81614495565b92915050565b600081359050612c83816144ac565b92915050565b600081519050612c98816144ac565b92915050565b600082601f830112612caf57600080fd5b8135612cbf848260208601612b7a565b91505092915050565b600082601f830112612cd957600080fd5b8135612ce9848260208601612bb8565b91505092915050565b600081359050612d01816144c3565b92915050565b600060208284031215612d1957600080fd5b6000612d2784828501612bf6565b91505092915050565b60008060408385031215612d4357600080fd5b6000612d5185828601612bf6565b9250506020612d6285828601612bf6565b9150509250929050565b600080600080600060a08688031215612d8457600080fd5b6000612d9288828901612bf6565b9550506020612da388828901612bf6565b945050604086013567ffffffffffffffff811115612dc057600080fd5b612dcc88828901612c35565b935050606086013567ffffffffffffffff811115612de957600080fd5b612df588828901612c35565b925050608086013567ffffffffffffffff811115612e1257600080fd5b612e1e88828901612c9e565b9150509295509295909350565b600080600080600060a08688031215612e4357600080fd5b6000612e5188828901612bf6565b9550506020612e6288828901612bf6565b9450506040612e7388828901612cf2565b9350506060612e8488828901612cf2565b925050608086013567ffffffffffffffff811115612ea157600080fd5b612ead88828901612c9e565b9150509295509295909350565b60008060408385031215612ecd57600080fd5b6000612edb85828601612bf6565b9250506020612eec85828601612c5f565b9150509250929050565b60008060408385031215612f0957600080fd5b6000612f1785828601612bf6565b9250506020612f2885828601612cf2565b9150509250929050565b600080600060608486031215612f4757600080fd5b6000612f5586828701612bf6565b9350506020612f6686828701612cf2565b9250506040612f7786828701612cf2565b9150509250925092565b60008060408385031215612f9457600080fd5b600083013567ffffffffffffffff811115612fae57600080fd5b612fba85828601612c0b565b925050602083013567ffffffffffffffff811115612fd757600080fd5b612fe385828601612c35565b9150509250929050565b600060208284031215612fff57600080fd5b600061300d84828501612c74565b91505092915050565b60006020828403121561302857600080fd5b600061303684828501612c89565b91505092915050565b60006020828403121561305157600080fd5b600082013567ffffffffffffffff81111561306b57600080fd5b61307784828501612cc8565b91505092915050565b60006020828403121561309257600080fd5b60006130a084828501612cf2565b91505092915050565b600080604083850312156130bc57600080fd5b60006130ca85828601612cf2565b92505060206130db85828601612cf2565b9150509250929050565b600080600080608085870312156130fb57600080fd5b600061310987828801612cf2565b945050602061311a87828801612cf2565b935050604061312b87828801612cf2565b925050606061313c87828801612cf2565b91505092959194509250565b60006131548383613a84565b60208301905092915050565b6131698161418c565b82525050565b600061317a8261400b565b6131848185614039565b935061318f83613fe6565b8060005b838110156131c05781516131a78882613148565b97506131b28361402c565b925050600181019050613193565b5085935050505092915050565b6131d68161419e565b82525050565b60006131e782614016565b6131f1818561404a565b935061320181856020860161420f565b61320a816143aa565b840191505092915050565b600061322082614021565b61322a818561405b565b935061323a81856020860161420f565b613243816143aa565b840191505092915050565b600061325982614021565b613263818561406c565b935061327381856020860161420f565b80840191505092915050565b6000815461328c81614242565b613296818661406c565b945060018216600081146132b157600181146132c2576132f5565b60ff198316865281860193506132f5565b6132cb85613ff6565b60005b838110156132ed578154818901526001820191506020810190506132ce565b838801955050505b50505092915050565b600061330b60348361405b565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b600061337160288361405b565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d7602b8361405b565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061343d60268361405b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134a360298361405b565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613509601f8361405b565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374006000830152602082019050919050565b600061354960258361405b565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135af60328361405b565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613615602a8361405b565b91507f4d696e7420686173206e6f74206f70656e656420796574206f7220686173206260008301527f65656e206c6f636b6564000000000000000000000000000000000000000000006020830152604082019050919050565b600061367b601f8361405b565b91507f4d696e74696e6720776f756c6420657863656564206d617820737570706c79006000830152602082019050919050565b60006136bb60318361405b565b91507f43616e206f6e6c792070757263686173652061206d6178696d756d206f66203260008301527f20746f6b656e7320617420612074696d650000000000000000000000000000006020830152604082019050919050565b6000613721602a8361405b565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b600061378760208361405b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006137c760418361405b565b91507f4e6f7420616e20617661696c61626c652073746174652e204f7074696f6e733a60008301527f203020286f70656e292c20312028706175736564292c203220286c6f636b656460208301527f29000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061385360298361405b565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b60006138b960298361405b565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b600061391f60288361405b565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b600061398560218361405b565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139eb60158361405b565b91507f4f7074696f6e20646f6573206e6f7420657869737400000000000000000000006000830152602082019050919050565b6000613a2b60238361405b565b91507f4d696e74696e6720686173206265656e207065726d616e656e746c7920636c6f60008301527f73656400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b613a8d816141f6565b82525050565b613a9c816141f6565b82525050565b6000613aae828561327f565b9150613aba828461324e565b91508190509392505050565b6000602082019050613adb6000830184613160565b92915050565b600060a082019050613af66000830188613160565b613b036020830187613160565b8181036040830152613b15818661316f565b90508181036060830152613b29818561316f565b90508181036080830152613b3d81846131dc565b90509695505050505050565b600060a082019050613b5e6000830188613160565b613b6b6020830187613160565b613b786040830186613a93565b613b856060830185613a93565b8181036080830152613b9781846131dc565b90509695505050505050565b60006020820190508181036000830152613bbd818461316f565b905092915050565b60006040820190508181036000830152613bdf818561316f565b90508181036020830152613bf3818461316f565b90509392505050565b6000602082019050613c1160008301846131cd565b92915050565b60006020820190508181036000830152613c318184613215565b905092915050565b60006020820190508181036000830152613c52816132fe565b9050919050565b60006020820190508181036000830152613c7281613364565b9050919050565b60006020820190508181036000830152613c92816133ca565b9050919050565b60006020820190508181036000830152613cb281613430565b9050919050565b60006020820190508181036000830152613cd281613496565b9050919050565b60006020820190508181036000830152613cf2816134fc565b9050919050565b60006020820190508181036000830152613d128161353c565b9050919050565b60006020820190508181036000830152613d32816135a2565b9050919050565b60006020820190508181036000830152613d5281613608565b9050919050565b60006020820190508181036000830152613d728161366e565b9050919050565b60006020820190508181036000830152613d92816136ae565b9050919050565b60006020820190508181036000830152613db281613714565b9050919050565b60006020820190508181036000830152613dd28161377a565b9050919050565b60006020820190508181036000830152613df2816137ba565b9050919050565b60006020820190508181036000830152613e1281613846565b9050919050565b60006020820190508181036000830152613e32816138ac565b9050919050565b60006020820190508181036000830152613e5281613912565b9050919050565b60006020820190508181036000830152613e7281613978565b9050919050565b60006020820190508181036000830152613e92816139de565b9050919050565b60006020820190508181036000830152613eb281613a1e565b9050919050565b6000602082019050613ece6000830184613a93565b92915050565b6000604082019050613ee96000830185613a93565b613ef66020830184613a93565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715613f2457613f2361437b565b5b8060405250919050565b600067ffffffffffffffff821115613f4957613f4861437b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f7557613f7461437b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fa157613fa061437b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613fd157613fd061437b565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614082826141f6565b915061408d836141f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140c2576140c16142ee565b5b828201905092915050565b60006140d8826141f6565b91506140e3836141f6565b9250826140f3576140f261431d565b5b828204905092915050565b6000614109826141f6565b9150614114836141f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561414d5761414c6142ee565b5b828202905092915050565b6000614163826141f6565b915061416e836141f6565b925082821015614181576141806142ee565b5b828203905092915050565b6000614197826141d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561422d578082015181840152602081019050614212565b8381111561423c576000848401525b50505050565b6000600282049050600182168061425a57607f821691505b6020821081141561426e5761426d61434c565b5b50919050565b600061427f826141f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b2576142b16142ee565b5b600182019050919050565b60006142c8826141f6565b91506142d3836141f6565b9250826142e3576142e261431d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d10156143d85761447b565b60046000803e6143e96000516143bb565b6308c379a081146143fa575061447b565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156144265750505061447b565b808201805167ffffffffffffffff81111561444557505050505061447b565b8060208301013d85018111156144605750505050505061447b565b614469826143aa565b60208401016040528296505050505050505b90565b6144878161418c565b811461449257600080fd5b50565b61449e8161419e565b81146144a957600080fd5b50565b6144b5816141aa565b81146144c057600080fd5b50565b6144cc816141f6565b81146144d757600080fd5b5056fea264697066735822122075310978159466e2b79315be919d64a98fee4151707247f68e97d868b410fa0c64736f6c6343000800003368747470733a2f2f697066732e696f2f697066732f516d627a7045353237614b613169654e4850737a36364c7166326b395864737536424b384b31666a45594e3663732f
Deployed Bytecode
0x6080604052600436106101295760003560e01c8063528dd2a8116100ab578063a22cb4651161006f578063a22cb465146103ce578063bd85b039146103f7578063e1bc296714610434578063e985e9c51461045d578063f242432a1461049a578063f2fde38b146104c357610129565b8063528dd2a81461030f578063715018a6146103385780638da5cb5b1461034f578063931688cb1461037a57806395d89b41146103a357610129565b80633ccfd60b116100f25780633ccfd60b1461023957806340c49313146102505780634e1273f41461026c5780634f558e79146102a957806351f69d06146102e657610129565b8062fdd58e1461012e57806301ffc9a71461016b57806306fdde03146101a85780630e89341c146101d35780632eb2c2d614610210575b600080fd5b34801561013a57600080fd5b5061015560048036038101906101509190612ef6565b6104ec565b6040516101629190613eb9565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190612fed565b6105b5565b60405161019f9190613bfc565b60405180910390f35b3480156101b457600080fd5b506101bd610697565b6040516101ca9190613c17565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190613080565b6106d4565b6040516102079190613c17565b60405180910390f35b34801561021c57600080fd5b5061023760048036038101906102329190612d6c565b61074f565b005b34801561024557600080fd5b5061024e6107f0565b005b61026a600480360381019061026591906130a9565b6108bb565b005b34801561027857600080fd5b50610293600480360381019061028e9190612f81565b610cac565b6040516102a09190613ba3565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613080565b610e5d565b6040516102dd9190613bfc565b60405180910390f35b3480156102f257600080fd5b5061030d600480360381019061030891906130e5565b610e71565b005b34801561031b57600080fd5b5061033660048036038101906103319190613080565b610f0f565b005b34801561034457600080fd5b5061034d611034565b005b34801561035b57600080fd5b506103646110bc565b6040516103719190613ac6565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c919061303f565b6110e6565b005b3480156103af57600080fd5b506103b861117c565b6040516103c59190613c17565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190612eba565b6111b9565b005b34801561040357600080fd5b5061041e60048036038101906104199190613080565b6111cf565b60405161042b9190613eb9565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190612f32565b6111ec565b005b34801561046957600080fd5b50610484600480360381019061047f9190612d30565b611495565b6040516104919190613bfc565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190612e2b565b611529565b005b3480156104cf57600080fd5b506104ea60048036038101906104e59190612d07565b6115ca565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561055d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055490613c79565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610690575061068f826116c2565b5b9050919050565b60606040518060400160405280601981526020017f4b6964726f626f74204b696e672045746865722044756e6e7900000000000000815250905090565b6060600582111561071c576040518060400160405280601481526020017f546f6b656e20646f6573206e6f74206578697374000000000000000000000000815250905061074a565b600e6107278361172c565b604051602001610738929190613aa2565b60405160208183030381529060405290505b919050565b6107576118d9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079d575061079c856107976118d9565b611495565b5b6107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d390613d19565b60405180910390fd5b6107e985858585856118e1565b5050505050565b6107f86118d9565b73ffffffffffffffffffffffffffffffffffffffff166108166110bc565b73ffffffffffffffffffffffffffffffffffffffff161461086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390613db9565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156108b7573d6000803e3d6000fd5b5050565b600081101580156108cc5750600681105b61090b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090290613e79565b60405180910390fd5b600060055414610950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094790613d39565b60405180910390fd5b600a821115610994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098b90613d79565b60405180910390fd5b60008114806109a35750600181145b806109ae5750600281145b15610a6a576101f4826109c0836111cf565b6109ca9190614077565b1115610a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0290613d59565b60405180910390fd5b3482600654610a1a91906140fe565b1115610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290613cd9565b60405180910390fd5b610a658282611c41565b610ca8565b6003811415610b2a57606482610a8060036111cf565b610a8a9190614077565b1115610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac290613d59565b60405180910390fd5b3482600754610ada91906140fe565b1115610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290613cd9565b60405180910390fd5b610b258282611c41565b610ca7565b6004811415610bea57600a82610b4060046111cf565b610b4a9190614077565b1115610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613d59565b60405180910390fd5b3482600854610b9a91906140fe565b1115610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613cd9565b60405180910390fd5b610be58282611c41565b610ca6565b6005811415610ca557600182610c0060056111cf565b610c0a9190614077565b14610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190613d59565b60405180910390fd5b3482600954610c5991906140fe565b1115610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9190613cd9565b60405180910390fd5b610ca48282611c41565b5b5b5b5b5050565b60608151835114610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613e19565b60405180910390fd5b6000835167ffffffffffffffff811115610d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d635781602001602082028036833780820191505090505b50905060005b8451811015610e5257610dfc858281518110610dae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610def577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516104ec565b828281518110610e35577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610e4b90614274565b9050610d69565b508091505092915050565b600080610e69836111cf565b119050919050565b610e796118d9565b73ffffffffffffffffffffffffffffffffffffffff16610e976110bc565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613db9565b60405180910390fd5b8360068190555082600781905550816008819055508060098190555050505050565b610f176118d9565b73ffffffffffffffffffffffffffffffffffffffff16610f356110bc565b73ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290613db9565b60405180910390fd5b6000811480610f9a5750600181145b80610fa55750600281145b610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90613dd9565b60405180910390fd5b6002600554141561102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190613e99565b60405180910390fd5b8060058190555050565b61103c6118d9565b73ffffffffffffffffffffffffffffffffffffffff1661105a6110bc565b73ffffffffffffffffffffffffffffffffffffffff16146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790613db9565b60405180910390fd5b6110ba6000611d01565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110ee6118d9565b73ffffffffffffffffffffffffffffffffffffffff1661110c6110bc565b73ffffffffffffffffffffffffffffffffffffffff1614611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613db9565b60405180910390fd5b80600e90805190602001906111789291906129ff565b5050565b60606040518060400160405280600381526020017f4b45440000000000000000000000000000000000000000000000000000000000815250905090565b6111cb6111c46118d9565b8383611dc7565b5050565b600060036000838152602001908152602001600020549050919050565b6111f46118d9565b73ffffffffffffffffffffffffffffffffffffffff166112126110bc565b73ffffffffffffffffffffffffffffffffffffffff1614611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90613db9565b60405180910390fd5b600081101580156112795750600681105b6112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90613e79565b60405180910390fd5b60008114806112c75750600181145b806112d25750600281145b1561133f576101f4826112e4836111cf565b6112ee9190614077565b111561132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690613d59565b60405180910390fd5b61133a828483611f34565b611490565b60038114156113b05760648261135560036111cf565b61135f9190614077565b11156113a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139790613d59565b60405180910390fd5b6113ab828483611f34565b61148f565b600481141561142157600a826113c660046111cf565b6113d09190614077565b1115611411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140890613d59565b60405180910390fd5b61141c828483611f34565b61148e565b600581141561148d5760018261143760056111cf565b6114419190614077565b14611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613d59565b60405180910390fd5b61148c828483611f34565b5b5b5b5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115316118d9565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806115775750611576856115716118d9565b611495565b5b6115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613cb9565b60405180910390fd5b6115c38585858585611f54565b5050505050565b6115d26118d9565b73ffffffffffffffffffffffffffffffffffffffff166115f06110bc565b73ffffffffffffffffffffffffffffffffffffffff1614611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90613db9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613c99565b60405180910390fd5b6116bf81611d01565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415611774576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506118d4565b600082905060005b600082146117a657808061178f90614274565b915050600a8261179f91906140cd565b915061177c565b60008167ffffffffffffffff8111156117e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561181a5781602001600182028036833780820191505090505b5090505b600085146118cd576001826118339190614158565b9150600a8561184291906142bd565b603061184e9190614077565b60f81b81838151811061188a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856118c691906140cd565b945061181e565b8093505050505b919050565b600033905090565b8151835114611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613e39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90613cf9565b60405180910390fd5b600061199f6118d9565b90506119af8187878787876121d6565b60005b8451811015611bac5760008582815181106119f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611a3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613d99565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b919190614077565b9250508190555050505080611ba590614274565b90506119b2565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611c23929190613bc5565b60405180910390a4611c398187878787876123e8565b505050505050565b6000811480611c505750600181145b80611c5b5750600281145b15611c8057611c7b338284604051806020016040528060008152506125b8565b611cfd565b6003811415611caa57611ca533600384604051806020016040528060008152506125b8565b611cfc565b6004811415611cd457611ccf33600484604051806020016040528060008152506125b8565b611cfb565b6005811415611cfa57611cf933600584604051806020016040528060008152506125b8565b5b5b5b5b5050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90613df9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f279190613bfc565b60405180910390a3505050565b611f4f828285604051806020016040528060008152506125b8565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90613cf9565b60405180910390fd5b6000611fce6118d9565b9050611fee818787611fdf8861274e565b611fe88861274e565b876121d6565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90613d99565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213a9190614077565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516121b7929190613ed4565b60405180910390a46121cd828888888888612814565b50505050505050565b6121e48686868686866129e4565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156122e25760005b83518110156122e05782818151811061225e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600360008684815181106122a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546122c89190614077565b92505081905550806122d990614274565b905061221c565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123e05760005b83518110156123de5782818151811061235c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600360008684815181106123a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546123c69190614158565b92505081905550806123d790614274565b905061231a565b505b505050505050565b6124078473ffffffffffffffffffffffffffffffffffffffff166129ec565b156125b0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161244d959493929190613ae1565b602060405180830381600087803b15801561246757600080fd5b505af192505050801561249857506040513d601f19601f820116820180604052508101906124959190613016565b60015b612527576124a46143c8565b806124af57506124ec565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e39190613c17565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e90613c39565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590613c59565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f90613e59565b60405180910390fd5b60006126326118d9565b9050612653816000876126448861274e565b61264d8861274e565b876121d6565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b29190614077565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612730929190613ed4565b60405180910390a461274781600087878787612814565b5050505050565b60606000600167ffffffffffffffff811115612793577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156127c15781602001602082028036833780820191505090505b50905082816000815181106127ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6128338473ffffffffffffffffffffffffffffffffffffffff166129ec565b156129dc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612879959493929190613b49565b602060405180830381600087803b15801561289357600080fd5b505af19250505080156128c457506040513d601f19601f820116820180604052508101906128c19190613016565b60015b612953576128d06143c8565b806128db5750612918565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f9190613c17565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90613c39565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190613c59565b60405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b828054612a0b90614242565b90600052602060002090601f016020900481019282612a2d5760008555612a74565b82601f10612a4657805160ff1916838001178555612a74565b82800160010185558215612a74579182015b82811115612a73578251825591602001919060010190612a58565b5b509050612a819190612a85565b5090565b5b80821115612a9e576000816000905550600101612a86565b5090565b6000612ab5612ab084613f2e565b613efd565b90508083825260208201905082856020860282011115612ad457600080fd5b60005b85811015612b045781612aea8882612bf6565b845260208401935060208301925050600181019050612ad7565b5050509392505050565b6000612b21612b1c84613f5a565b613efd565b90508083825260208201905082856020860282011115612b4057600080fd5b60005b85811015612b705781612b568882612cf2565b845260208401935060208301925050600181019050612b43565b5050509392505050565b6000612b8d612b8884613f86565b613efd565b905082815260208101848484011115612ba557600080fd5b612bb0848285614200565b509392505050565b6000612bcb612bc684613fb6565b613efd565b905082815260208101848484011115612be357600080fd5b612bee848285614200565b509392505050565b600081359050612c058161447e565b92915050565b600082601f830112612c1c57600080fd5b8135612c2c848260208601612aa2565b91505092915050565b600082601f830112612c4657600080fd5b8135612c56848260208601612b0e565b91505092915050565b600081359050612c6e81614495565b92915050565b600081359050612c83816144ac565b92915050565b600081519050612c98816144ac565b92915050565b600082601f830112612caf57600080fd5b8135612cbf848260208601612b7a565b91505092915050565b600082601f830112612cd957600080fd5b8135612ce9848260208601612bb8565b91505092915050565b600081359050612d01816144c3565b92915050565b600060208284031215612d1957600080fd5b6000612d2784828501612bf6565b91505092915050565b60008060408385031215612d4357600080fd5b6000612d5185828601612bf6565b9250506020612d6285828601612bf6565b9150509250929050565b600080600080600060a08688031215612d8457600080fd5b6000612d9288828901612bf6565b9550506020612da388828901612bf6565b945050604086013567ffffffffffffffff811115612dc057600080fd5b612dcc88828901612c35565b935050606086013567ffffffffffffffff811115612de957600080fd5b612df588828901612c35565b925050608086013567ffffffffffffffff811115612e1257600080fd5b612e1e88828901612c9e565b9150509295509295909350565b600080600080600060a08688031215612e4357600080fd5b6000612e5188828901612bf6565b9550506020612e6288828901612bf6565b9450506040612e7388828901612cf2565b9350506060612e8488828901612cf2565b925050608086013567ffffffffffffffff811115612ea157600080fd5b612ead88828901612c9e565b9150509295509295909350565b60008060408385031215612ecd57600080fd5b6000612edb85828601612bf6565b9250506020612eec85828601612c5f565b9150509250929050565b60008060408385031215612f0957600080fd5b6000612f1785828601612bf6565b9250506020612f2885828601612cf2565b9150509250929050565b600080600060608486031215612f4757600080fd5b6000612f5586828701612bf6565b9350506020612f6686828701612cf2565b9250506040612f7786828701612cf2565b9150509250925092565b60008060408385031215612f9457600080fd5b600083013567ffffffffffffffff811115612fae57600080fd5b612fba85828601612c0b565b925050602083013567ffffffffffffffff811115612fd757600080fd5b612fe385828601612c35565b9150509250929050565b600060208284031215612fff57600080fd5b600061300d84828501612c74565b91505092915050565b60006020828403121561302857600080fd5b600061303684828501612c89565b91505092915050565b60006020828403121561305157600080fd5b600082013567ffffffffffffffff81111561306b57600080fd5b61307784828501612cc8565b91505092915050565b60006020828403121561309257600080fd5b60006130a084828501612cf2565b91505092915050565b600080604083850312156130bc57600080fd5b60006130ca85828601612cf2565b92505060206130db85828601612cf2565b9150509250929050565b600080600080608085870312156130fb57600080fd5b600061310987828801612cf2565b945050602061311a87828801612cf2565b935050604061312b87828801612cf2565b925050606061313c87828801612cf2565b91505092959194509250565b60006131548383613a84565b60208301905092915050565b6131698161418c565b82525050565b600061317a8261400b565b6131848185614039565b935061318f83613fe6565b8060005b838110156131c05781516131a78882613148565b97506131b28361402c565b925050600181019050613193565b5085935050505092915050565b6131d68161419e565b82525050565b60006131e782614016565b6131f1818561404a565b935061320181856020860161420f565b61320a816143aa565b840191505092915050565b600061322082614021565b61322a818561405b565b935061323a81856020860161420f565b613243816143aa565b840191505092915050565b600061325982614021565b613263818561406c565b935061327381856020860161420f565b80840191505092915050565b6000815461328c81614242565b613296818661406c565b945060018216600081146132b157600181146132c2576132f5565b60ff198316865281860193506132f5565b6132cb85613ff6565b60005b838110156132ed578154818901526001820191506020810190506132ce565b838801955050505b50505092915050565b600061330b60348361405b565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b600061337160288361405b565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d7602b8361405b565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061343d60268361405b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134a360298361405b565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613509601f8361405b565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374006000830152602082019050919050565b600061354960258361405b565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135af60328361405b565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613615602a8361405b565b91507f4d696e7420686173206e6f74206f70656e656420796574206f7220686173206260008301527f65656e206c6f636b6564000000000000000000000000000000000000000000006020830152604082019050919050565b600061367b601f8361405b565b91507f4d696e74696e6720776f756c6420657863656564206d617820737570706c79006000830152602082019050919050565b60006136bb60318361405b565b91507f43616e206f6e6c792070757263686173652061206d6178696d756d206f66203260008301527f20746f6b656e7320617420612074696d650000000000000000000000000000006020830152604082019050919050565b6000613721602a8361405b565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b600061378760208361405b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006137c760418361405b565b91507f4e6f7420616e20617661696c61626c652073746174652e204f7074696f6e733a60008301527f203020286f70656e292c20312028706175736564292c203220286c6f636b656460208301527f29000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061385360298361405b565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b60006138b960298361405b565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b600061391f60288361405b565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b600061398560218361405b565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139eb60158361405b565b91507f4f7074696f6e20646f6573206e6f7420657869737400000000000000000000006000830152602082019050919050565b6000613a2b60238361405b565b91507f4d696e74696e6720686173206265656e207065726d616e656e746c7920636c6f60008301527f73656400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b613a8d816141f6565b82525050565b613a9c816141f6565b82525050565b6000613aae828561327f565b9150613aba828461324e565b91508190509392505050565b6000602082019050613adb6000830184613160565b92915050565b600060a082019050613af66000830188613160565b613b036020830187613160565b8181036040830152613b15818661316f565b90508181036060830152613b29818561316f565b90508181036080830152613b3d81846131dc565b90509695505050505050565b600060a082019050613b5e6000830188613160565b613b6b6020830187613160565b613b786040830186613a93565b613b856060830185613a93565b8181036080830152613b9781846131dc565b90509695505050505050565b60006020820190508181036000830152613bbd818461316f565b905092915050565b60006040820190508181036000830152613bdf818561316f565b90508181036020830152613bf3818461316f565b90509392505050565b6000602082019050613c1160008301846131cd565b92915050565b60006020820190508181036000830152613c318184613215565b905092915050565b60006020820190508181036000830152613c52816132fe565b9050919050565b60006020820190508181036000830152613c7281613364565b9050919050565b60006020820190508181036000830152613c92816133ca565b9050919050565b60006020820190508181036000830152613cb281613430565b9050919050565b60006020820190508181036000830152613cd281613496565b9050919050565b60006020820190508181036000830152613cf2816134fc565b9050919050565b60006020820190508181036000830152613d128161353c565b9050919050565b60006020820190508181036000830152613d32816135a2565b9050919050565b60006020820190508181036000830152613d5281613608565b9050919050565b60006020820190508181036000830152613d728161366e565b9050919050565b60006020820190508181036000830152613d92816136ae565b9050919050565b60006020820190508181036000830152613db281613714565b9050919050565b60006020820190508181036000830152613dd28161377a565b9050919050565b60006020820190508181036000830152613df2816137ba565b9050919050565b60006020820190508181036000830152613e1281613846565b9050919050565b60006020820190508181036000830152613e32816138ac565b9050919050565b60006020820190508181036000830152613e5281613912565b9050919050565b60006020820190508181036000830152613e7281613978565b9050919050565b60006020820190508181036000830152613e92816139de565b9050919050565b60006020820190508181036000830152613eb281613a1e565b9050919050565b6000602082019050613ece6000830184613a93565b92915050565b6000604082019050613ee96000830185613a93565b613ef66020830184613a93565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715613f2457613f2361437b565b5b8060405250919050565b600067ffffffffffffffff821115613f4957613f4861437b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f7557613f7461437b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fa157613fa061437b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613fd157613fd061437b565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614082826141f6565b915061408d836141f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140c2576140c16142ee565b5b828201905092915050565b60006140d8826141f6565b91506140e3836141f6565b9250826140f3576140f261431d565b5b828204905092915050565b6000614109826141f6565b9150614114836141f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561414d5761414c6142ee565b5b828202905092915050565b6000614163826141f6565b915061416e836141f6565b925082821015614181576141806142ee565b5b828203905092915050565b6000614197826141d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561422d578082015181840152602081019050614212565b8381111561423c576000848401525b50505050565b6000600282049050600182168061425a57607f821691505b6020821081141561426e5761426d61434c565b5b50919050565b600061427f826141f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b2576142b16142ee565b5b600182019050919050565b60006142c8826141f6565b91506142d3836141f6565b9250826142e3576142e261431d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d10156143d85761447b565b60046000803e6143e96000516143bb565b6308c379a081146143fa575061447b565b60405160043d036004823e80513d602482011167ffffffffffffffff821117156144265750505061447b565b808201805167ffffffffffffffff81111561444557505050505061447b565b8060208301013d85018111156144605750505050505061447b565b614469826143aa565b60208401016040528296505050505050505b90565b6144878161418c565b811461449257600080fd5b50565b61449e8161419e565b81146144a957600080fd5b50565b6144b5816141aa565b81146144c057600080fd5b50565b6144cc816141f6565b81146144d757600080fd5b5056fea264697066735822122075310978159466e2b79315be919d64a98fee4151707247f68e97d868b410fa0c64736f6c63430008000033
Deployed Bytecode Sourcemap
40524:4884:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22580:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21603:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41059:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45042:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24519:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45271:134;;;;;;;;;;;;;:::i;:::-;;42396:1482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22977:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37019:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41364:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42117:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39591:103;;;;;;;;;;;;;:::i;:::-;;38940:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41256:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41169:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23574:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36808:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44052:986;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23801:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24041:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39849:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22580:231;22666:7;22713:1;22694:21;;:7;:21;;;;22686:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22781:9;:13;22791:2;22781:13;;;;;;;;;;;:22;22795:7;22781:22;;;;;;;;;;;;;;;;22774:29;;22580:231;;;;:::o;21603:310::-;21705:4;21757:26;21742:41;;;:11;:41;;;;:110;;;;21815:37;21800:52;;;:11;:52;;;;21742:110;:163;;;;21869:36;21893:11;21869:23;:36::i;:::-;21742:163;21722:183;;21603:310;;;:::o;41059:103::-;41098:13;41122:34;;;;;;;;;;;;;;;;;;;41059:103;:::o;45042:225::-;45101:13;45139:1;45129:7;:11;45125:69;;;45155:29;;;;;;;;;;;;;;;;;;;;;45125:69;45233:7;45241:18;:7;:16;:18::i;:::-;45216:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45202:59;;45042:225;;;;:::o;24519:442::-;24760:12;:10;:12::i;:::-;24752:20;;:4;:20;;;:60;;;;24776:36;24793:4;24799:12;:10;:12::i;:::-;24776:16;:36::i;:::-;24752:60;24730:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24901:52;24924:4;24930:2;24934:3;24939:7;24948:4;24901:22;:52::i;:::-;24519:442;;;;;:::o;45271:134::-;39171:12;:10;:12::i;:::-;39160:23;;:7;:5;:7::i;:::-;:23;;;39152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45317:12:::1;45332:21;45317:36;;45370:10;45362:28;;:37;45391:7;45362:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39231:1;45271:134::o:0;42396:1482::-;42499:1;42487:8;:13;;:29;;;;;42515:1;42504:8;:12;42487:29;42479:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42573:1;42559:10;;:15;42551:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42656:2;42638:14;:20;;42630:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;42738:1;42726:8;:13;:30;;;;42755:1;42743:8;:13;42726:30;:47;;;;42772:1;42760:8;:13;42726:47;42722:1151;;;42839:3;42821:14;42797:21;42809:8;42797:11;:21::i;:::-;:38;;;;:::i;:::-;:45;;42789:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;42931:9;42913:14;42900:10;;:27;;;;:::i;:::-;:40;;42892:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;42990:35;43000:14;43016:8;42990:9;:35::i;:::-;42722:1151;;;43058:1;43046:8;:13;43042:831;;;43118:3;43100:14;43083;43095:1;43083:11;:14::i;:::-;:31;;;;:::i;:::-;:38;;43075:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;43211:9;43193:14;43179:11;;:28;;;;:::i;:::-;:41;;43171:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43270:35;43280:14;43296:8;43270:9;:35::i;:::-;43042:831;;;43338:1;43326:8;:13;43322:551;;;43398:2;43380:14;43363;43375:1;43363:11;:14::i;:::-;:31;;;;:::i;:::-;:37;;43355:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43490:9;43472:14;43458:11;;:28;;;;:::i;:::-;:41;;43450:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43549:35;43559:14;43575:8;43549:9;:35::i;:::-;43322:551;;;43617:1;43605:8;:13;43601:272;;;43677:1;43659:14;43642;43654:1;43642:11;:14::i;:::-;:31;;;;:::i;:::-;:36;43634:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;43768:9;43750:14;43736:11;;:28;;;;:::i;:::-;:41;;43728:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43827:35;43837:14;43853:8;43827:9;:35::i;:::-;43601:272;43322:551;43042:831;42722:1151;42396:1482;;:::o;22977:524::-;23133:16;23194:3;:10;23175:8;:15;:29;23167:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23263:30;23310:8;:15;23296:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23263:63;;23344:9;23339:122;23363:8;:15;23359:1;:19;23339:122;;;23419:30;23429:8;23438:1;23429:11;;;;;;;;;;;;;;;;;;;;;;23442:3;23446:1;23442:6;;;;;;;;;;;;;;;;;;;;;;23419:9;:30::i;:::-;23400:13;23414:1;23400:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;23380:3;;;;:::i;:::-;;;23339:122;;;;23480:13;23473:20;;;22977:524;;;;:::o;37019:122::-;37076:4;37132:1;37100:29;37126:2;37100:25;:29::i;:::-;:33;37093:40;;37019:122;;;:::o;41364:270::-;39171:12;:10;:12::i;:::-;39160:23;;:7;:5;:7::i;:::-;:23;;;39152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41512:11:::1;41499:10;:24;;;;41546:12;41532:11;:26;;;;41581:12;41567:11;:26;;;;41616:12;41602:11;:26;;;;41364:270:::0;;;;:::o;42117:272::-;39171:12;:10;:12::i;:::-;39160:23;;:7;:5;:7::i;:::-;:23;;;39152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42195:1:::1;42190:3;:6;:16;;;;42205:1;42200:3;:6;42190:16;:26;;;;42215:1;42210:3;:6;42190:26;42182:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;42317:1;42303:10;;:15;;42295:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42380:3;42367:10;:16;;;;42117:272:::0;:::o;39591:103::-;39171:12;:10;:12::i;:::-;39160:23;;:7;:5;:7::i;:::-;:23;;;39152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39656:30:::1;39683:1;39656:18;:30::i;:::-;39591:103::o:0;38940:87::-;38986:7;39013:6;;;;;;;;;;;39006:13;;38940:87;:::o;41256:101::-;39171:12;:10;:12::i;:::-;39160:23;;:7;:5;:7::i;:::-;:23;;;39152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41341:10:::1;41331:7;:20;;;;;;;;;;;;:::i;:::-;;41256:101:::0;:::o;41169:83::-;41210:13;41234:12;;;;;;;;;;;;;;;;;;;41169:83;:::o;23574:155::-;23669:52;23688:12;:10;:12::i;:::-;23702:8;23712;23669:18;:52::i;:::-;23574:155;;:::o;36808:113::-;36870:7;36897:12;:16;36910:2;36897:16;;;;;;;;;;;;36890:23;;36808:113;;;:::o;44052:986::-;39171:12;:10;:12::i;:::-;39160:23;;:7;:5;:7::i;:::-;:23;;;39152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44170:1:::1;44158:8;:13;;:29;;;;;44186:1;44175:8;:12;44158:29;44150:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44238:1;44226:8;:13;:30;;;;44255:1;44243:8;:13;44226:30;:47;;;;44272:1;44260:8;:13;44226:47;44222:811;;;44338:3;44320:14;44296:21;44308:8;44296:11;:21::i;:::-;:38;;;;:::i;:::-;:45;;44288:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;44390:50;44404:14;44420:9;44431:8;44390:13;:50::i;:::-;44222:811;;;44473:1;44461:8;:13;44457:576;;;44531:3;44513:14;44496;44508:1;44496:11;:14::i;:::-;:31;;;;:::i;:::-;:38;;44488:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44583:50;44597:14;44613:9;44624:8;44583:13;:50::i;:::-;44457:576;;;44666:1;44654:8;:13;44650:383;;;44726:2;44708:14;44691;44703:1;44691:11;:14::i;:::-;:31;;;;:::i;:::-;:37;;44683:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;44778:50;44792:14;44808:9;44819:8;44778:13;:50::i;:::-;44650:383;;;44861:1;44849:8;:13;44845:188;;;44921:1;44903:14;44886;44898:1;44886:11;:14::i;:::-;:31;;;;:::i;:::-;:36;44878:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44972:50;44986:14;45002:9;45013:8;44972:13;:50::i;:::-;44845:188;44650:383;44457:576;44222:811;44052:986:::0;;;:::o;23801:168::-;23900:4;23924:18;:27;23943:7;23924:27;;;;;;;;;;;;;;;:37;23952:8;23924:37;;;;;;;;;;;;;;;;;;;;;;;;;23917:44;;23801:168;;;;:::o;24041:401::-;24257:12;:10;:12::i;:::-;24249:20;;:4;:20;;;:60;;;;24273:36;24290:4;24296:12;:10;:12::i;:::-;24273:16;:36::i;:::-;24249:60;24227:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24389:45;24407:4;24413:2;24417;24421:6;24429:4;24389:17;:45::i;:::-;24041:401;;;;;:::o;39849:201::-;39171:12;:10;:12::i;:::-;39160:23;;:7;:5;:7::i;:::-;:23;;;39152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39958:1:::1;39938:22;;:8;:22;;;;39930:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40014:28;40033:8;40014:18;:28::i;:::-;39849:201:::0;:::o;12065:157::-;12150:4;12189:25;12174:40;;;:11;:40;;;;12167:47;;12065:157;;;:::o;373:723::-;429:13;659:1;650:5;:10;646:53;;;677:10;;;;;;;;;;;;;;;;;;;;;646:53;709:12;724:5;709:20;;740:14;765:78;780:1;772:4;:9;765:78;;798:8;;;;;:::i;:::-;;;;829:2;821:10;;;;;:::i;:::-;;;765:78;;;853:19;885:6;875:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;853:39;;903:154;919:1;910:5;:10;903:154;;947:1;937:11;;;;;:::i;:::-;;;1014:2;1006:5;:10;;;;:::i;:::-;993:2;:24;;;;:::i;:::-;980:39;;963:6;970;963:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1043:2;1034:11;;;;;:::i;:::-;;;903:154;;;1081:6;1067:21;;;;;373:723;;;;:::o;20312:98::-;20365:7;20392:10;20385:17;;20312:98;:::o;26603:1074::-;26830:7;:14;26816:3;:10;:28;26808:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26922:1;26908:16;;:2;:16;;;;26900:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26979:16;26998:12;:10;:12::i;:::-;26979:31;;27023:60;27044:8;27054:4;27060:2;27064:3;27069:7;27078:4;27023:20;:60::i;:::-;27101:9;27096:421;27120:3;:10;27116:1;:14;27096:421;;;27152:10;27165:3;27169:1;27165:6;;;;;;;;;;;;;;;;;;;;;;27152:19;;27186:14;27203:7;27211:1;27203:10;;;;;;;;;;;;;;;;;;;;;;27186:27;;27230:19;27252:9;:13;27262:2;27252:13;;;;;;;;;;;:19;27266:4;27252:19;;;;;;;;;;;;;;;;27230:41;;27309:6;27294:11;:21;;27286:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27442:6;27428:11;:20;27406:9;:13;27416:2;27406:13;;;;;;;;;;;:19;27420:4;27406:19;;;;;;;;;;;;;;;:42;;;;27499:6;27478:9;:13;27488:2;27478:13;;;;;;;;;;;:17;27492:2;27478:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27096:421;;;27132:3;;;;:::i;:::-;;;27096:421;;;;27564:2;27534:47;;27558:4;27534:47;;27548:8;27534:47;;;27568:3;27573:7;27534:47;;;;;;;:::i;:::-;;;;;;;;27594:75;27630:8;27640:4;27646:2;27650:3;27655:7;27664:4;27594:35;:75::i;:::-;26603:1074;;;;;;:::o;41639:471::-;41728:1;41716:8;:13;:30;;;;41745:1;41733:8;:13;41716:30;:47;;;;41762:1;41750:8;:13;41716:47;41712:393;;;41779:47;41785:10;41797:8;41807:14;41779:47;;;;;;;;;;;;:5;:47::i;:::-;41712:393;;;41859:1;41847:8;:13;41843:262;;;41874:40;41880:10;41892:1;41895:14;41874:40;;;;;;;;;;;;:5;:40::i;:::-;41843:262;;;41947:1;41935:8;:13;41931:174;;;41964:40;41970:10;41982:1;41985:14;41964:40;;;;;;;;;;;;:5;:40::i;:::-;41931:174;;;42037:1;42025:8;:13;42021:84;;;42054:40;42060:10;42072:1;42075:14;42054:40;;;;;;;;;;;;:5;:40::i;:::-;42021:84;41931:174;41843:262;41712:393;41639:471;;:::o;40210:191::-;40284:16;40303:6;;;;;;;;;;;40284:25;;40329:8;40320:6;;:17;;;;;;;;;;;;;;;;;;40384:8;40353:40;;40374:8;40353:40;;;;;;;;;;;;40210:191;;:::o;32789:331::-;32944:8;32935:17;;:5;:17;;;;32927:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33047:8;33009:18;:25;33028:5;33009:25;;;;;;;;;;;;;;;:35;33035:8;33009:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33093:8;33071:41;;33086:5;33071:41;;;33103:8;33071:41;;;;;;:::i;:::-;;;;;;;;32789:331;;;:::o;43883:164::-;43985:52;43991:15;44008:8;44018:14;43985:52;;;;;;;;;;;;:5;:52::i;:::-;43883:164;;;:::o;25425:820::-;25627:1;25613:16;;:2;:16;;;;25605:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25684:16;25703:12;:10;:12::i;:::-;25684:31;;25728:96;25749:8;25759:4;25765:2;25769:21;25787:2;25769:17;:21::i;:::-;25792:25;25810:6;25792:17;:25::i;:::-;25819:4;25728:20;:96::i;:::-;25837:19;25859:9;:13;25869:2;25859:13;;;;;;;;;;;:19;25873:4;25859:19;;;;;;;;;;;;;;;;25837:41;;25912:6;25897:11;:21;;25889:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26037:6;26023:11;:20;26001:9;:13;26011:2;26001:13;;;;;;;;;;;:19;26015:4;26001:19;;;;;;;;;;;;;;;:42;;;;26086:6;26065:9;:13;26075:2;26065:13;;;;;;;;;;;:17;26079:2;26065:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26141:2;26110:46;;26135:4;26110:46;;26125:8;26110:46;;;26145:2;26149:6;26110:46;;;;;;;:::i;:::-;;;;;;;;26169:68;26200:8;26210:4;26216:2;26220;26224:6;26232:4;26169:30;:68::i;:::-;25425:820;;;;;;;:::o;37216:655::-;37455:66;37482:8;37492:4;37498:2;37502:3;37507:7;37516:4;37455:26;:66::i;:::-;37554:1;37538:18;;:4;:18;;;37534:160;;;37578:9;37573:110;37597:3;:10;37593:1;:14;37573:110;;;37657:7;37665:1;37657:10;;;;;;;;;;;;;;;;;;;;;;37633:12;:20;37646:3;37650:1;37646:6;;;;;;;;;;;;;;;;;;;;;;37633:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;37609:3;;;;:::i;:::-;;;37573:110;;;;37534:160;37724:1;37710:16;;:2;:16;;;37706:158;;;37748:9;37743:110;37767:3;:10;37763:1;:14;37743:110;;;37827:7;37835:1;37827:10;;;;;;;;;;;;;;;;;;;;;;37803:12;:20;37816:3;37820:1;37816:6;;;;;;;;;;;;;;;;;;;;;;37803:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;37779:3;;;;:::i;:::-;;;37743:110;;;;37706:158;37216:655;;;;;;:::o;35057:813::-;35297:15;:2;:13;;;:15::i;:::-;35293:570;;;35350:2;35333:43;;;35377:8;35387:4;35393:3;35398:7;35407:4;35333:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35329:523;;;;:::i;:::-;;;;;;;;35725:6;35718:14;;;;;;;;;;;:::i;:::-;;;;;;;;35329:523;35774:62;;;;;;;;;;:::i;:::-;;;;;;;;35329:523;35506:48;;;35494:60;;;:8;:60;;;;35490:159;;35579:50;;;;;;;;;;:::i;:::-;;;;;;;;35490:159;35413:251;35293:570;35057:813;;;;;;:::o;28995:569::-;29162:1;29148:16;;:2;:16;;;;29140:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29215:16;29234:12;:10;:12::i;:::-;29215:31;;29259:102;29280:8;29298:1;29302:2;29306:21;29324:2;29306:17;:21::i;:::-;29329:25;29347:6;29329:17;:25::i;:::-;29356:4;29259:20;:102::i;:::-;29395:6;29374:9;:13;29384:2;29374:13;;;;;;;;;;;:17;29388:2;29374:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29454:2;29417:52;;29450:1;29417:52;;29432:8;29417:52;;;29458:2;29462:6;29417:52;;;;;;;:::i;:::-;;;;;;;;29482:74;29513:8;29531:1;29535:2;29539;29543:6;29551:4;29482:30;:74::i;:::-;28995:569;;;;;:::o;35878:198::-;35944:16;35973:22;36012:1;35998:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35973:41;;36036:7;36025:5;36031:1;36025:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;36063:5;36056:12;;;35878:198;;;:::o;34305:744::-;34520:15;:2;:13;;;:15::i;:::-;34516:526;;;34573:2;34556:38;;;34595:8;34605:4;34611:2;34615:6;34623:4;34556:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34552:479;;;;:::i;:::-;;;;;;;;34904:6;34897:14;;;;;;;;;;;:::i;:::-;;;;;;;;34552:479;34953:62;;;;;;;;;;:::i;:::-;;;;;;;;34552:479;34690:43;;;34678:55;;;:8;:55;;;;34674:154;;34758:50;;;;;;;;;;:::i;:::-;;;;;;;;34674:154;34629:214;34516:526;34305:744;;;;;;:::o;34076:221::-;;;;;;;:::o;2952:387::-;3012:4;3220:12;3287:7;3275:20;3267:28;;3330:1;3323:4;:8;3316:15;;;2952:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:344::-;;1748:65;1763:49;1805:6;1763:49;:::i;:::-;1748:65;:::i;:::-;1739:74;;1836:6;1829:5;1822:21;1874:4;1867:5;1863:16;1912:3;1903:6;1898:3;1894:16;1891:25;1888:2;;;1929:1;1926;1919:12;1888:2;1942:41;1976:6;1971:3;1966;1942:41;:::i;:::-;1729:260;;;;;;:::o;1995:139::-;;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2157:303::-;;2277:3;2270:4;2262:6;2258:17;2254:27;2244:2;;2295:1;2292;2285:12;2244:2;2335:6;2322:20;2360:94;2450:3;2442:6;2435:4;2427:6;2423:17;2360:94;:::i;:::-;2351:103;;2234:226;;;;;:::o;2483:303::-;;2603:3;2596:4;2588:6;2584:17;2580:27;2570:2;;2621:1;2618;2611:12;2570:2;2661:6;2648:20;2686:94;2776:3;2768:6;2761:4;2753:6;2749:17;2686:94;:::i;:::-;2677:103;;2560:226;;;;;:::o;2792:133::-;;2873:6;2860:20;2851:29;;2889:30;2913:5;2889:30;:::i;:::-;2841:84;;;;:::o;2931:137::-;;3014:6;3001:20;2992:29;;3030:32;3056:5;3030:32;:::i;:::-;2982:86;;;;:::o;3074:141::-;;3161:6;3155:13;3146:22;;3177:32;3203:5;3177:32;:::i;:::-;3136:79;;;;:::o;3234:271::-;;3338:3;3331:4;3323:6;3319:17;3315:27;3305:2;;3356:1;3353;3346:12;3305:2;3396:6;3383:20;3421:78;3495:3;3487:6;3480:4;3472:6;3468:17;3421:78;:::i;:::-;3412:87;;3295:210;;;;;:::o;3525:273::-;;3630:3;3623:4;3615:6;3611:17;3607:27;3597:2;;3648:1;3645;3638:12;3597:2;3688:6;3675:20;3713:79;3788:3;3780:6;3773:4;3765:6;3761:17;3713:79;:::i;:::-;3704:88;;3587:211;;;;;:::o;3804:139::-;;3888:6;3875:20;3866:29;;3904:33;3931:5;3904:33;:::i;:::-;3856:87;;;;:::o;3949:262::-;;4057:2;4045:9;4036:7;4032:23;4028:32;4025:2;;;4073:1;4070;4063:12;4025:2;4116:1;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4087:117;4015:196;;;;:::o;4217:407::-;;;4342:2;4330:9;4321:7;4317:23;4313:32;4310:2;;;4358:1;4355;4348:12;4310:2;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4300:324;;;;;:::o;4630:1241::-;;;;;;4865:3;4853:9;4844:7;4840:23;4836:33;4833:2;;;4882:1;4879;4872:12;4833:2;4925:1;4950:53;4995:7;4986:6;4975:9;4971:22;4950:53;:::i;:::-;4940:63;;4896:117;5052:2;5078:53;5123:7;5114:6;5103:9;5099:22;5078:53;:::i;:::-;5068:63;;5023:118;5208:2;5197:9;5193:18;5180:32;5239:18;5231:6;5228:30;5225:2;;;5271:1;5268;5261:12;5225:2;5299:78;5369:7;5360:6;5349:9;5345:22;5299:78;:::i;:::-;5289:88;;5151:236;5454:2;5443:9;5439:18;5426:32;5485:18;5477:6;5474:30;5471:2;;;5517:1;5514;5507:12;5471:2;5545:78;5615:7;5606:6;5595:9;5591:22;5545:78;:::i;:::-;5535:88;;5397:236;5700:3;5689:9;5685:19;5672:33;5732:18;5724:6;5721:30;5718:2;;;5764:1;5761;5754:12;5718:2;5792:62;5846:7;5837:6;5826:9;5822:22;5792:62;:::i;:::-;5782:72;;5643:221;4823:1048;;;;;;;;:::o;5877:955::-;;;;;;6062:3;6050:9;6041:7;6037:23;6033:33;6030:2;;;6079:1;6076;6069:12;6030:2;6122:1;6147:53;6192:7;6183:6;6172:9;6168:22;6147:53;:::i;:::-;6137:63;;6093:117;6249:2;6275:53;6320:7;6311:6;6300:9;6296:22;6275:53;:::i;:::-;6265:63;;6220:118;6377:2;6403:53;6448:7;6439:6;6428:9;6424:22;6403:53;:::i;:::-;6393:63;;6348:118;6505:2;6531:53;6576:7;6567:6;6556:9;6552:22;6531:53;:::i;:::-;6521:63;;6476:118;6661:3;6650:9;6646:19;6633:33;6693:18;6685:6;6682:30;6679:2;;;6725:1;6722;6715:12;6679:2;6753:62;6807:7;6798:6;6787:9;6783:22;6753:62;:::i;:::-;6743:72;;6604:221;6020:812;;;;;;;;:::o;6838:401::-;;;6960:2;6948:9;6939:7;6935:23;6931:32;6928:2;;;6976:1;6973;6966:12;6928:2;7019:1;7044:53;7089:7;7080:6;7069:9;7065:22;7044:53;:::i;:::-;7034:63;;6990:117;7146:2;7172:50;7214:7;7205:6;7194:9;7190:22;7172:50;:::i;:::-;7162:60;;7117:115;6918:321;;;;;:::o;7245:407::-;;;7370:2;7358:9;7349:7;7345:23;7341:32;7338:2;;;7386:1;7383;7376:12;7338:2;7429:1;7454:53;7499:7;7490:6;7479:9;7475:22;7454:53;:::i;:::-;7444:63;;7400:117;7556:2;7582:53;7627:7;7618:6;7607:9;7603:22;7582:53;:::i;:::-;7572:63;;7527:118;7328:324;;;;;:::o;7658:552::-;;;;7800:2;7788:9;7779:7;7775:23;7771:32;7768:2;;;7816:1;7813;7806:12;7768:2;7859:1;7884:53;7929:7;7920:6;7909:9;7905:22;7884:53;:::i;:::-;7874:63;;7830:117;7986:2;8012:53;8057:7;8048:6;8037:9;8033:22;8012:53;:::i;:::-;8002:63;;7957:118;8114:2;8140:53;8185:7;8176:6;8165:9;8161:22;8140:53;:::i;:::-;8130:63;;8085:118;7758:452;;;;;:::o;8216:693::-;;;8391:2;8379:9;8370:7;8366:23;8362:32;8359:2;;;8407:1;8404;8397:12;8359:2;8478:1;8467:9;8463:17;8450:31;8508:18;8500:6;8497:30;8494:2;;;8540:1;8537;8530:12;8494:2;8568:78;8638:7;8629:6;8618:9;8614:22;8568:78;:::i;:::-;8558:88;;8421:235;8723:2;8712:9;8708:18;8695:32;8754:18;8746:6;8743:30;8740:2;;;8786:1;8783;8776:12;8740:2;8814:78;8884:7;8875:6;8864:9;8860:22;8814:78;:::i;:::-;8804:88;;8666:236;8349:560;;;;;:::o;8915:260::-;;9022:2;9010:9;9001:7;8997:23;8993:32;8990:2;;;9038:1;9035;9028:12;8990:2;9081:1;9106:52;9150:7;9141:6;9130:9;9126:22;9106:52;:::i;:::-;9096:62;;9052:116;8980:195;;;;:::o;9181:282::-;;9299:2;9287:9;9278:7;9274:23;9270:32;9267:2;;;9315:1;9312;9305:12;9267:2;9358:1;9383:63;9438:7;9429:6;9418:9;9414:22;9383:63;:::i;:::-;9373:73;;9329:127;9257:206;;;;:::o;9469:375::-;;9587:2;9575:9;9566:7;9562:23;9558:32;9555:2;;;9603:1;9600;9593:12;9555:2;9674:1;9663:9;9659:17;9646:31;9704:18;9696:6;9693:30;9690:2;;;9736:1;9733;9726:12;9690:2;9764:63;9819:7;9810:6;9799:9;9795:22;9764:63;:::i;:::-;9754:73;;9617:220;9545:299;;;;:::o;9850:262::-;;9958:2;9946:9;9937:7;9933:23;9929:32;9926:2;;;9974:1;9971;9964:12;9926:2;10017:1;10042:53;10087:7;10078:6;10067:9;10063:22;10042:53;:::i;:::-;10032:63;;9988:117;9916:196;;;;:::o;10118:407::-;;;10243:2;10231:9;10222:7;10218:23;10214:32;10211:2;;;10259:1;10256;10249:12;10211:2;10302:1;10327:53;10372:7;10363:6;10352:9;10348:22;10327:53;:::i;:::-;10317:63;;10273:117;10429:2;10455:53;10500:7;10491:6;10480:9;10476:22;10455:53;:::i;:::-;10445:63;;10400:118;10201:324;;;;;:::o;10531:698::-;;;;;10690:3;10678:9;10669:7;10665:23;10661:33;10658:2;;;10707:1;10704;10697:12;10658:2;10750:1;10775:53;10820:7;10811:6;10800:9;10796:22;10775:53;:::i;:::-;10765:63;;10721:117;10877:2;10903:53;10948:7;10939:6;10928:9;10924:22;10903:53;:::i;:::-;10893:63;;10848:118;11005:2;11031:53;11076:7;11067:6;11056:9;11052:22;11031:53;:::i;:::-;11021:63;;10976:118;11133:2;11159:53;11204:7;11195:6;11184:9;11180:22;11159:53;:::i;:::-;11149:63;;11104:118;10648:581;;;;;;;:::o;11235:179::-;;11325:46;11367:3;11359:6;11325:46;:::i;:::-;11403:4;11398:3;11394:14;11380:28;;11315:99;;;;:::o;11420:118::-;11507:24;11525:5;11507:24;:::i;:::-;11502:3;11495:37;11485:53;;:::o;11574:732::-;;11722:54;11770:5;11722:54;:::i;:::-;11792:86;11871:6;11866:3;11792:86;:::i;:::-;11785:93;;11902:56;11952:5;11902:56;:::i;:::-;11981:7;12012:1;11997:284;12022:6;12019:1;12016:13;11997:284;;;12098:6;12092:13;12125:63;12184:3;12169:13;12125:63;:::i;:::-;12118:70;;12211:60;12264:6;12211:60;:::i;:::-;12201:70;;12057:224;12044:1;12041;12037:9;12032:14;;11997:284;;;12001:14;12297:3;12290:10;;11698:608;;;;;;;:::o;12312:109::-;12393:21;12408:5;12393:21;:::i;:::-;12388:3;12381:34;12371:50;;:::o;12427:360::-;;12541:38;12573:5;12541:38;:::i;:::-;12595:70;12658:6;12653:3;12595:70;:::i;:::-;12588:77;;12674:52;12719:6;12714:3;12707:4;12700:5;12696:16;12674:52;:::i;:::-;12751:29;12773:6;12751:29;:::i;:::-;12746:3;12742:39;12735:46;;12517:270;;;;;:::o;12793:364::-;;12909:39;12942:5;12909:39;:::i;:::-;12964:71;13028:6;13023:3;12964:71;:::i;:::-;12957:78;;13044:52;13089:6;13084:3;13077:4;13070:5;13066:16;13044:52;:::i;:::-;13121:29;13143:6;13121:29;:::i;:::-;13116:3;13112:39;13105:46;;12885:272;;;;;:::o;13163:377::-;;13297:39;13330:5;13297:39;:::i;:::-;13352:89;13434:6;13429:3;13352:89;:::i;:::-;13345:96;;13450:52;13495:6;13490:3;13483:4;13476:5;13472:16;13450:52;:::i;:::-;13527:6;13522:3;13518:16;13511:23;;13273:267;;;;;:::o;13570:845::-;;13710:5;13704:12;13739:36;13765:9;13739:36;:::i;:::-;13791:89;13873:6;13868:3;13791:89;:::i;:::-;13784:96;;13911:1;13900:9;13896:17;13927:1;13922:137;;;;14073:1;14068:341;;;;13889:520;;13922:137;14006:4;14002:9;13991;13987:25;13982:3;13975:38;14042:6;14037:3;14033:16;14026:23;;13922:137;;14068:341;14135:38;14167:5;14135:38;:::i;:::-;14195:1;14209:154;14223:6;14220:1;14217:13;14209:154;;;14297:7;14291:14;14287:1;14282:3;14278:11;14271:35;14347:1;14338:7;14334:15;14323:26;;14245:4;14242:1;14238:12;14233:17;;14209:154;;;14392:6;14387:3;14383:16;14376:23;;14075:334;;13889:520;;13677:738;;;;;;:::o;14421:384::-;;14584:67;14648:2;14643:3;14584:67;:::i;:::-;14577:74;;14681:34;14677:1;14672:3;14668:11;14661:55;14747:22;14742:2;14737:3;14733:12;14726:44;14796:2;14791:3;14787:12;14780:19;;14567:238;;;:::o;14811:372::-;;14974:67;15038:2;15033:3;14974:67;:::i;:::-;14967:74;;15071:34;15067:1;15062:3;15058:11;15051:55;15137:10;15132:2;15127:3;15123:12;15116:32;15174:2;15169:3;15165:12;15158:19;;14957:226;;;:::o;15189:375::-;;15352:67;15416:2;15411:3;15352:67;:::i;:::-;15345:74;;15449:34;15445:1;15440:3;15436:11;15429:55;15515:13;15510:2;15505:3;15501:12;15494:35;15555:2;15550:3;15546:12;15539:19;;15335:229;;;:::o;15570:370::-;;15733:67;15797:2;15792:3;15733:67;:::i;:::-;15726:74;;15830:34;15826:1;15821:3;15817:11;15810:55;15896:8;15891:2;15886:3;15882:12;15875:30;15931:2;15926:3;15922:12;15915:19;;15716:224;;;:::o;15946:373::-;;16109:67;16173:2;16168:3;16109:67;:::i;:::-;16102:74;;16206:34;16202:1;16197:3;16193:11;16186:55;16272:11;16267:2;16262:3;16258:12;16251:33;16310:2;16305:3;16301:12;16294:19;;16092:227;;;:::o;16325:329::-;;16488:67;16552:2;16547:3;16488:67;:::i;:::-;16481:74;;16585:33;16581:1;16576:3;16572:11;16565:54;16645:2;16640:3;16636:12;16629:19;;16471:183;;;:::o;16660:369::-;;16823:67;16887:2;16882:3;16823:67;:::i;:::-;16816:74;;16920:34;16916:1;16911:3;16907:11;16900:55;16986:7;16981:2;16976:3;16972:12;16965:29;17020:2;17015:3;17011:12;17004:19;;16806:223;;;:::o;17035:382::-;;17198:67;17262:2;17257:3;17198:67;:::i;:::-;17191:74;;17295:34;17291:1;17286:3;17282:11;17275:55;17361:20;17356:2;17351:3;17347:12;17340:42;17408:2;17403:3;17399:12;17392:19;;17181:236;;;:::o;17423:374::-;;17586:67;17650:2;17645:3;17586:67;:::i;:::-;17579:74;;17683:34;17679:1;17674:3;17670:11;17663:55;17749:12;17744:2;17739:3;17735:12;17728:34;17788:2;17783:3;17779:12;17772:19;;17569:228;;;:::o;17803:329::-;;17966:67;18030:2;18025:3;17966:67;:::i;:::-;17959:74;;18063:33;18059:1;18054:3;18050:11;18043:54;18123:2;18118:3;18114:12;18107:19;;17949:183;;;:::o;18138:381::-;;18301:67;18365:2;18360:3;18301:67;:::i;:::-;18294:74;;18398:34;18394:1;18389:3;18385:11;18378:55;18464:19;18459:2;18454:3;18450:12;18443:41;18510:2;18505:3;18501:12;18494:19;;18284:235;;;:::o;18525:374::-;;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18785:34;18781:1;18776:3;18772:11;18765:55;18851:12;18846:2;18841:3;18837:12;18830:34;18890:2;18885:3;18881:12;18874:19;;18671:228;;;:::o;18905:330::-;;19068:67;19132:2;19127:3;19068:67;:::i;:::-;19061:74;;19165:34;19161:1;19156:3;19152:11;19145:55;19226:2;19221:3;19217:12;19210:19;;19051:184;;;:::o;19241:431::-;;19404:67;19468:2;19463:3;19404:67;:::i;:::-;19397:74;;19501:34;19497:1;19492:3;19488:11;19481:55;19567:34;19562:2;19557:3;19553:12;19546:56;19633:3;19628:2;19623:3;19619:12;19612:25;19663:2;19658:3;19654:12;19647:19;;19387:285;;;:::o;19678:373::-;;19841:67;19905:2;19900:3;19841:67;:::i;:::-;19834:74;;19938:34;19934:1;19929:3;19925:11;19918:55;20004:11;19999:2;19994:3;19990:12;19983:33;20042:2;20037:3;20033:12;20026:19;;19824:227;;;:::o;20057:373::-;;20220:67;20284:2;20279:3;20220:67;:::i;:::-;20213:74;;20317:34;20313:1;20308:3;20304:11;20297:55;20383:11;20378:2;20373:3;20369:12;20362:33;20421:2;20416:3;20412:12;20405:19;;20203:227;;;:::o;20436:372::-;;20599:67;20663:2;20658:3;20599:67;:::i;:::-;20592:74;;20696:34;20692:1;20687:3;20683:11;20676:55;20762:10;20757:2;20752:3;20748:12;20741:32;20799:2;20794:3;20790:12;20783:19;;20582:226;;;:::o;20814:365::-;;20977:67;21041:2;21036:3;20977:67;:::i;:::-;20970:74;;21074:34;21070:1;21065:3;21061:11;21054:55;21140:3;21135:2;21130:3;21126:12;21119:25;21170:2;21165:3;21161:12;21154:19;;20960:219;;;:::o;21185:319::-;;21348:67;21412:2;21407:3;21348:67;:::i;:::-;21341:74;;21445:23;21441:1;21436:3;21432:11;21425:44;21495:2;21490:3;21486:12;21479:19;;21331:173;;;:::o;21510:367::-;;21673:67;21737:2;21732:3;21673:67;:::i;:::-;21666:74;;21770:34;21766:1;21761:3;21757:11;21750:55;21836:5;21831:2;21826:3;21822:12;21815:27;21868:2;21863:3;21859:12;21852:19;;21656:221;;;:::o;21883:108::-;21960:24;21978:5;21960:24;:::i;:::-;21955:3;21948:37;21938:53;;:::o;21997:118::-;22084:24;22102:5;22084:24;:::i;:::-;22079:3;22072:37;22062:53;;:::o;22121:429::-;;22320:92;22408:3;22399:6;22320:92;:::i;:::-;22313:99;;22429:95;22520:3;22511:6;22429:95;:::i;:::-;22422:102;;22541:3;22534:10;;22302:248;;;;;:::o;22556:222::-;;22687:2;22676:9;22672:18;22664:26;;22700:71;22768:1;22757:9;22753:17;22744:6;22700:71;:::i;:::-;22654:124;;;;:::o;22784:1053::-;;23145:3;23134:9;23130:19;23122:27;;23159:71;23227:1;23216:9;23212:17;23203:6;23159:71;:::i;:::-;23240:72;23308:2;23297:9;23293:18;23284:6;23240:72;:::i;:::-;23359:9;23353:4;23349:20;23344:2;23333:9;23329:18;23322:48;23387:108;23490:4;23481:6;23387:108;:::i;:::-;23379:116;;23542:9;23536:4;23532:20;23527:2;23516:9;23512:18;23505:48;23570:108;23673:4;23664:6;23570:108;:::i;:::-;23562:116;;23726:9;23720:4;23716:20;23710:3;23699:9;23695:19;23688:49;23754:76;23825:4;23816:6;23754:76;:::i;:::-;23746:84;;23112:725;;;;;;;;:::o;23843:751::-;;24104:3;24093:9;24089:19;24081:27;;24118:71;24186:1;24175:9;24171:17;24162:6;24118:71;:::i;:::-;24199:72;24267:2;24256:9;24252:18;24243:6;24199:72;:::i;:::-;24281;24349:2;24338:9;24334:18;24325:6;24281:72;:::i;:::-;24363;24431:2;24420:9;24416:18;24407:6;24363:72;:::i;:::-;24483:9;24477:4;24473:20;24467:3;24456:9;24452:19;24445:49;24511:76;24582:4;24573:6;24511:76;:::i;:::-;24503:84;;24071:523;;;;;;;;:::o;24600:373::-;;24781:2;24770:9;24766:18;24758:26;;24830:9;24824:4;24820:20;24816:1;24805:9;24801:17;24794:47;24858:108;24961:4;24952:6;24858:108;:::i;:::-;24850:116;;24748:225;;;;:::o;24979:634::-;;25238:2;25227:9;25223:18;25215:26;;25287:9;25281:4;25277:20;25273:1;25262:9;25258:17;25251:47;25315:108;25418:4;25409:6;25315:108;:::i;:::-;25307:116;;25470:9;25464:4;25460:20;25455:2;25444:9;25440:18;25433:48;25498:108;25601:4;25592:6;25498:108;:::i;:::-;25490:116;;25205:408;;;;;:::o;25619:210::-;;25744:2;25733:9;25729:18;25721:26;;25757:65;25819:1;25808:9;25804:17;25795:6;25757:65;:::i;:::-;25711:118;;;;:::o;25835:313::-;;25986:2;25975:9;25971:18;25963:26;;26035:9;26029:4;26025:20;26021:1;26010:9;26006:17;25999:47;26063:78;26136:4;26127:6;26063:78;:::i;:::-;26055:86;;25953:195;;;;:::o;26154:419::-;;26358:2;26347:9;26343:18;26335:26;;26407:9;26401:4;26397:20;26393:1;26382:9;26378:17;26371:47;26435:131;26561:4;26435:131;:::i;:::-;26427:139;;26325:248;;;:::o;26579:419::-;;26783:2;26772:9;26768:18;26760:26;;26832:9;26826:4;26822:20;26818:1;26807:9;26803:17;26796:47;26860:131;26986:4;26860:131;:::i;:::-;26852:139;;26750:248;;;:::o;27004:419::-;;27208:2;27197:9;27193:18;27185:26;;27257:9;27251:4;27247:20;27243:1;27232:9;27228:17;27221:47;27285:131;27411:4;27285:131;:::i;:::-;27277:139;;27175:248;;;:::o;27429:419::-;;27633:2;27622:9;27618:18;27610:26;;27682:9;27676:4;27672:20;27668:1;27657:9;27653:17;27646:47;27710:131;27836:4;27710:131;:::i;:::-;27702:139;;27600:248;;;:::o;27854:419::-;;28058:2;28047:9;28043:18;28035:26;;28107:9;28101:4;28097:20;28093:1;28082:9;28078:17;28071:47;28135:131;28261:4;28135:131;:::i;:::-;28127:139;;28025:248;;;:::o;28279:419::-;;28483:2;28472:9;28468:18;28460:26;;28532:9;28526:4;28522:20;28518:1;28507:9;28503:17;28496:47;28560:131;28686:4;28560:131;:::i;:::-;28552:139;;28450:248;;;:::o;28704:419::-;;28908:2;28897:9;28893:18;28885:26;;28957:9;28951:4;28947:20;28943:1;28932:9;28928:17;28921:47;28985:131;29111:4;28985:131;:::i;:::-;28977:139;;28875:248;;;:::o;29129:419::-;;29333:2;29322:9;29318:18;29310:26;;29382:9;29376:4;29372:20;29368:1;29357:9;29353:17;29346:47;29410:131;29536:4;29410:131;:::i;:::-;29402:139;;29300:248;;;:::o;29554:419::-;;29758:2;29747:9;29743:18;29735:26;;29807:9;29801:4;29797:20;29793:1;29782:9;29778:17;29771:47;29835:131;29961:4;29835:131;:::i;:::-;29827:139;;29725:248;;;:::o;29979:419::-;;30183:2;30172:9;30168:18;30160:26;;30232:9;30226:4;30222:20;30218:1;30207:9;30203:17;30196:47;30260:131;30386:4;30260:131;:::i;:::-;30252:139;;30150:248;;;:::o;30404:419::-;;30608:2;30597:9;30593:18;30585:26;;30657:9;30651:4;30647:20;30643:1;30632:9;30628:17;30621:47;30685:131;30811:4;30685:131;:::i;:::-;30677:139;;30575:248;;;:::o;30829:419::-;;31033:2;31022:9;31018:18;31010:26;;31082:9;31076:4;31072:20;31068:1;31057:9;31053:17;31046:47;31110:131;31236:4;31110:131;:::i;:::-;31102:139;;31000:248;;;:::o;31254:419::-;;31458:2;31447:9;31443:18;31435:26;;31507:9;31501:4;31497:20;31493:1;31482:9;31478:17;31471:47;31535:131;31661:4;31535:131;:::i;:::-;31527:139;;31425:248;;;:::o;31679:419::-;;31883:2;31872:9;31868:18;31860:26;;31932:9;31926:4;31922:20;31918:1;31907:9;31903:17;31896:47;31960:131;32086:4;31960:131;:::i;:::-;31952:139;;31850:248;;;:::o;32104:419::-;;32308:2;32297:9;32293:18;32285:26;;32357:9;32351:4;32347:20;32343:1;32332:9;32328:17;32321:47;32385:131;32511:4;32385:131;:::i;:::-;32377:139;;32275:248;;;:::o;32529:419::-;;32733:2;32722:9;32718:18;32710:26;;32782:9;32776:4;32772:20;32768:1;32757:9;32753:17;32746:47;32810:131;32936:4;32810:131;:::i;:::-;32802:139;;32700:248;;;:::o;32954:419::-;;33158:2;33147:9;33143:18;33135:26;;33207:9;33201:4;33197:20;33193:1;33182:9;33178:17;33171:47;33235:131;33361:4;33235:131;:::i;:::-;33227:139;;33125:248;;;:::o;33379:419::-;;33583:2;33572:9;33568:18;33560:26;;33632:9;33626:4;33622:20;33618:1;33607:9;33603:17;33596:47;33660:131;33786:4;33660:131;:::i;:::-;33652:139;;33550:248;;;:::o;33804:419::-;;34008:2;33997:9;33993:18;33985:26;;34057:9;34051:4;34047:20;34043:1;34032:9;34028:17;34021:47;34085:131;34211:4;34085:131;:::i;:::-;34077:139;;33975:248;;;:::o;34229:419::-;;34433:2;34422:9;34418:18;34410:26;;34482:9;34476:4;34472:20;34468:1;34457:9;34453:17;34446:47;34510:131;34636:4;34510:131;:::i;:::-;34502:139;;34400:248;;;:::o;34654:222::-;;34785:2;34774:9;34770:18;34762:26;;34798:71;34866:1;34855:9;34851:17;34842:6;34798:71;:::i;:::-;34752:124;;;;:::o;34882:332::-;;35041:2;35030:9;35026:18;35018:26;;35054:71;35122:1;35111:9;35107:17;35098:6;35054:71;:::i;:::-;35135:72;35203:2;35192:9;35188:18;35179:6;35135:72;:::i;:::-;35008:206;;;;;:::o;35220:283::-;;35286:2;35280:9;35270:19;;35328:4;35320:6;35316:17;35435:6;35423:10;35420:22;35399:18;35387:10;35384:34;35381:62;35378:2;;;35446:18;;:::i;:::-;35378:2;35486:10;35482:2;35475:22;35260:243;;;;:::o;35509:311::-;;35676:18;35668:6;35665:30;35662:2;;;35698:18;;:::i;:::-;35662:2;35748:4;35740:6;35736:17;35728:25;;35808:4;35802;35798:15;35790:23;;35591:229;;;:::o;35826:311::-;;35993:18;35985:6;35982:30;35979:2;;;36015:18;;:::i;:::-;35979:2;36065:4;36057:6;36053:17;36045:25;;36125:4;36119;36115:15;36107:23;;35908:229;;;:::o;36143:331::-;;36294:18;36286:6;36283:30;36280:2;;;36316:18;;:::i;:::-;36280:2;36401:4;36397:9;36390:4;36382:6;36378:17;36374:33;36366:41;;36462:4;36456;36452:15;36444:23;;36209:265;;;:::o;36480:332::-;;36632:18;36624:6;36621:30;36618:2;;;36654:18;;:::i;:::-;36618:2;36739:4;36735:9;36728:4;36720:6;36716:17;36712:33;36704:41;;36800:4;36794;36790:15;36782:23;;36547:265;;;:::o;36818:132::-;;36908:3;36900:11;;36938:4;36933:3;36929:14;36921:22;;36890:60;;;:::o;36956:141::-;;37028:3;37020:11;;37051:3;37048:1;37041:14;37085:4;37082:1;37072:18;37064:26;;37010:87;;;:::o;37103:114::-;;37204:5;37198:12;37188:22;;37177:40;;;:::o;37223:98::-;;37308:5;37302:12;37292:22;;37281:40;;;:::o;37327:99::-;;37413:5;37407:12;37397:22;;37386:40;;;:::o;37432:113::-;;37534:4;37529:3;37525:14;37517:22;;37507:38;;;:::o;37551:184::-;;37684:6;37679:3;37672:19;37724:4;37719:3;37715:14;37700:29;;37662:73;;;;:::o;37741:168::-;;37858:6;37853:3;37846:19;37898:4;37893:3;37889:14;37874:29;;37836:73;;;;:::o;37915:169::-;;38033:6;38028:3;38021:19;38073:4;38068:3;38064:14;38049:29;;38011:73;;;;:::o;38090:148::-;;38229:3;38214:18;;38204:34;;;;:::o;38244:305::-;;38303:20;38321:1;38303:20;:::i;:::-;38298:25;;38337:20;38355:1;38337:20;:::i;:::-;38332:25;;38491:1;38423:66;38419:74;38416:1;38413:81;38410:2;;;38497:18;;:::i;:::-;38410:2;38541:1;38538;38534:9;38527:16;;38288:261;;;;:::o;38555:185::-;;38612:20;38630:1;38612:20;:::i;:::-;38607:25;;38646:20;38664:1;38646:20;:::i;:::-;38641:25;;38685:1;38675:2;;38690:18;;:::i;:::-;38675:2;38732:1;38729;38725:9;38720:14;;38597:143;;;;:::o;38746:348::-;;38809:20;38827:1;38809:20;:::i;:::-;38804:25;;38843:20;38861:1;38843:20;:::i;:::-;38838:25;;39031:1;38963:66;38959:74;38956:1;38953:81;38948:1;38941:9;38934:17;38930:105;38927:2;;;39038:18;;:::i;:::-;38927:2;39086:1;39083;39079:9;39068:20;;38794:300;;;;:::o;39100:191::-;;39160:20;39178:1;39160:20;:::i;:::-;39155:25;;39194:20;39212:1;39194:20;:::i;:::-;39189:25;;39233:1;39230;39227:8;39224:2;;;39238:18;;:::i;:::-;39224:2;39283:1;39280;39276:9;39268:17;;39145:146;;;;:::o;39297:96::-;;39363:24;39381:5;39363:24;:::i;:::-;39352:35;;39342:51;;;:::o;39399:90::-;;39476:5;39469:13;39462:21;39451:32;;39441:48;;;:::o;39495:149::-;;39571:66;39564:5;39560:78;39549:89;;39539:105;;;:::o;39650:126::-;;39727:42;39720:5;39716:54;39705:65;;39695:81;;;:::o;39782:77::-;;39848:5;39837:16;;39827:32;;;:::o;39865:154::-;39949:6;39944:3;39939;39926:30;40011:1;40002:6;39997:3;39993:16;39986:27;39916:103;;;:::o;40025:307::-;40093:1;40103:113;40117:6;40114:1;40111:13;40103:113;;;40202:1;40197:3;40193:11;40187:18;40183:1;40178:3;40174:11;40167:39;40139:2;40136:1;40132:10;40127:15;;40103:113;;;40234:6;40231:1;40228:13;40225:2;;;40314:1;40305:6;40300:3;40296:16;40289:27;40225:2;40074:258;;;;:::o;40338:320::-;;40419:1;40413:4;40409:12;40399:22;;40466:1;40460:4;40456:12;40487:18;40477:2;;40543:4;40535:6;40531:17;40521:27;;40477:2;40605;40597:6;40594:14;40574:18;40571:38;40568:2;;;40624:18;;:::i;:::-;40568:2;40389:269;;;;:::o;40664:233::-;;40726:24;40744:5;40726:24;:::i;:::-;40717:33;;40772:66;40765:5;40762:77;40759:2;;;40842:18;;:::i;:::-;40759:2;40889:1;40882:5;40878:13;40871:20;;40707:190;;;:::o;40903:176::-;;40952:20;40970:1;40952:20;:::i;:::-;40947:25;;40986:20;41004:1;40986:20;:::i;:::-;40981:25;;41025:1;41015:2;;41030:18;;:::i;:::-;41015:2;41071:1;41068;41064:9;41059:14;;40937:142;;;;:::o;41085:180::-;41133:77;41130:1;41123:88;41230:4;41227:1;41220:15;41254:4;41251:1;41244:15;41271:180;41319:77;41316:1;41309:88;41416:4;41413:1;41406:15;41440:4;41437:1;41430:15;41457:180;41505:77;41502:1;41495:88;41602:4;41599:1;41592:15;41626:4;41623:1;41616:15;41643:180;41691:77;41688:1;41681:88;41788:4;41785:1;41778:15;41812:4;41809:1;41802:15;41829:102;;41921:2;41917:7;41912:2;41905:5;41901:14;41897:28;41887:38;;41877:54;;;:::o;41937:106::-;;42030:5;42025:3;42021:15;42000:36;;41990:53;;;:::o;42049:833::-;;42126:4;42108:16;42105:26;42102:2;;;42134:5;;42102:2;42172:1;42169;42166;42151:23;42194:34;42225:1;42219:8;42194:34;:::i;:::-;42255:10;42250:3;42247:19;42237:2;;42270:5;;;42237:2;42305;42299:9;42363:1;42345:16;42341:24;42338:1;42332:4;42317:49;42396:4;42390:11;42495:16;42488:4;42480:6;42476:17;42473:39;42440:18;42432:6;42429:30;42413:113;42410:2;;;42541:5;;;;;42410:2;42587:6;42581:4;42577:17;42623:3;42617:10;42650:18;42642:6;42639:30;42636:2;;;42672:5;;;;;;;42636:2;42720:6;42713:4;42708:3;42704:14;42700:27;42757:16;42751:4;42747:27;42742:3;42739:36;42736:2;;;42778:5;;;;;;;;42736:2;42826:29;42848:6;42826:29;:::i;:::-;42819:4;42814:3;42810:14;42806:50;42802:2;42795:62;42873:3;42866:10;;42092:790;;;;;;;;:::o;42888:122::-;42961:24;42979:5;42961:24;:::i;:::-;42954:5;42951:35;42941:2;;43000:1;42997;42990:12;42941:2;42931:79;:::o;43016:116::-;43086:21;43101:5;43086:21;:::i;:::-;43079:5;43076:32;43066:2;;43122:1;43119;43112:12;43066:2;43056:76;:::o;43138:120::-;43210:23;43227:5;43210:23;:::i;:::-;43203:5;43200:34;43190:2;;43248:1;43245;43238:12;43190:2;43180:78;:::o;43264:122::-;43337:24;43355:5;43337:24;:::i;:::-;43330:5;43327:35;43317:2;;43376:1;43373;43366:12;43317:2;43307:79;:::o
Swarm Source
ipfs://75310978159466e2b79315be919d64a98fee4151707247f68e97d868b410fa0c
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.