Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
163 AXONS
Holders
106
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 AXONSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Axons
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-06 */ // File: contracts/AnonymiceLibrary.sol pragma solidity ^0.8.0; library AnonymiceLibrary { string internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ""; // load the table into memory string memory table = TABLE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for { } lt(dataPtr, endPtr) { } { dataPtr := add(dataPtr, 3) // read 3 bytes let input := mload(dataPtr) // write 4 characters mstore( resultPtr, shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F)))) ) resultPtr := add(resultPtr, 1) mstore( resultPtr, shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F)))) ) resultPtr := add(resultPtr, 1) mstore( resultPtr, shl(248, mload(add(tablePtr, and(shr(6, input), 0x3F)))) ) resultPtr := add(resultPtr, 1) mstore( resultPtr, shl(248, mload(add(tablePtr, and(input, 0x3F)))) ) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { 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); } function parseInt(string memory _a) internal pure returns (uint8 _parsedInt) { bytes memory bresult = bytes(_a); uint8 mint = 0; for (uint8 i = 0; i < bresult.length; i++) { if ( (uint8(uint8(bresult[i])) >= 48) && (uint8(uint8(bresult[i])) <= 57) ) { mint *= 10; mint += uint8(bresult[i]) - 48; } } return mint; } function substring( string memory str, uint256 startIndex, uint256 endIndex ) internal pure returns (string memory) { bytes memory strBytes = bytes(str); bytes memory result = new bytes(endIndex - startIndex); for (uint256 i = startIndex; i < endIndex; i++) { result[i - startIndex] = strBytes[i]; } return string(result); } 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; } } // File: @openzeppelin/contracts/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/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/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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/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/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/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 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/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: contracts/interfaces/IAxons.sol /// @title Interface for Axons pragma solidity ^0.8.6; interface IAxons is IERC721Enumerable { event AxonCreated(uint256 indexed tokenId); event AxonBurned(uint256 indexed tokenId); event MinterUpdated(address minter); event MinterLocked(); function mint(uint256 axonId) external returns (uint256); function burn(uint256 tokenId) external; function dataURI(uint256 tokenId) external returns (string memory); function setMinter(address minter) external; function lockMinter() external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/Axons.sol // contracts/Axons.sol pragma solidity ^0.8.0; contract Axons is IAxons, ERC721Enumerable, Ownable { /* _ _ _ _ _ / \ / \ / \ / \ / \ ( A | X | O | N | S | \_/ \_/ \_/ \_/ \_/ credit to mouse dev and 0xinuarashi for making amazing on chain project with Anonymice that was used as the basis for Filaments and this contract */ using AnonymiceLibrary for uint8; // An address who has permissions to mint Axons address public minter; // Whether the minter can be updated bool public isMinterLocked; // IPFS content hash of contract-level metadata string private _contractURIHash = ''; //Mappings mapping(uint256 => bool) internal axonNumberToMinted; mapping(uint256 => uint256) internal tokenIdToNumber; //p5js url string p5jsUrl = 'https%3A%2F%2Fcdnjs.cloudflare.com%2Fajax%2Flibs%2Fp5.js%2F1.4.0%2Fp5.js'; string p5jsIntegrity = 'sha256-maU2GxaUCz5WChkAGR40nt9sbWRPEfF8qo%2FprxhoKPQ%3D'; string imageUrl = 'https://axons.art/api/axons/image/'; string animationUrl = 'ipfs://QmepMLoRLNUX2ratx24a12oQFuRhLsgMhM6ni3HfMzK3Fu?x='; /** * @notice Require that the minter has not been locked. */ modifier whenMinterNotLocked() { require(!isMinterLocked, 'Minter is locked'); _; } constructor() ERC721("Axons", "AXONS") { } /* __ __ _ _ _ ___ _ _ | \/ (_)_ _| |_(_)_ _ __ _ | __| _ _ _ __| |_(_)___ _ _ ___ | |\/| | | ' \ _| | ' \/ _` | | _| || | ' \/ _| _| / _ \ ' \(_-< |_| |_|_|_||_\__|_|_||_\__, | |_| \_,_|_||_\__|\__|_\___/_||_/__/ |___/ */ /** * @dev Generates a random axon number * @param _a The address to be used within the hash. */ function randomAxonNumber( address _a, uint256 _c ) internal returns (uint256) { uint256 _rand = uint256( uint256( keccak256( abi.encodePacked( block.timestamp, block.difficulty, _a, _c ) ) ) % 900719925474000 ); if (axonNumberToMinted[_rand]) return randomAxonNumber(_a, _c + 1); return _rand; } /** * @notice Require that the sender is the minter. */ modifier onlyMinter() { require(msg.sender == minter, 'Sender is not the minter'); _; } /** * @dev Mints new tokens. */ function mint(uint256 axonId) public override onlyMinter returns (uint256) { if (totalSupply() <= 1830 && totalSupply() % 30 == 0 && totalSupply() > 0) { _mintTo(owner(), randomAxonNumber(msg.sender, 1000)); // Mint every 30th Axon to creator } return _mintTo(msg.sender, axonId); } function _mintTo(address to, uint256 axonId) internal returns (uint256) { uint256 thisTokenId = totalSupply(); tokenIdToNumber[thisTokenId] = axonId; axonNumberToMinted[tokenIdToNumber[thisTokenId]] = true; _mint(to, thisTokenId); return thisTokenId; } /** * @notice Burn an axon. */ function burn(uint256 axonId) public override onlyMinter { _burn(axonId); emit AxonBurned(axonId); } /* ____ ___ ____ ___ _____ __ __ ____ __ ______ ____ ___ ____ _____ | \ / _] / || \ | || | || \ / ] || |/ \ | \ / ___/ | D ) / [_ | o || \ | __|| | || _ | / /| | | || || _ ( \_ | / | _]| || D | | |_ | | || | |/ / |_| |_| | || O || | |\__ | | \ | [_ | _ || | | _] | : || | / \_ | | | || || | |/ \ | | . \| || | || | | | | || | \ | | | | || || | |\ | |__|\_||_____||__|__||_____| |__| \__,_||__|__|\____| |__| |____|\___/ |__|__| \___| */ /** * @notice The IPFS URI of contract-level metadata. */ function contractURI() public view returns (string memory) { return string(abi.encodePacked('ipfs://', _contractURIHash)); } /** * @dev Number to HTML function */ function dataURI(uint256 _tokenId) public override view returns (string memory) { require(_exists(_tokenId)); uint256 axonNumber = tokenIdToNumber[_tokenId]; string memory htmlString = string( abi.encodePacked( 'data:text/html,%3Chtml%3E%3Chead%3E%3Cscript%20src%3D%22', p5jsUrl, '%22%20integrity%3D%22', p5jsIntegrity, '%22%20crossorigin%3D%22anonymous%22%3E%3C%2Fscript%3E%3Cstyle%3Ehtml%7Bheight%3A100%25%3Boverflow%3Ahidden%7Dbody%7Bmin-height%3A100%25%3Bmargin%3A0%3Bpadding%3A0%3Boverflow%3Ahidden%3Bbackground-color%3A%23111%7Dcanvas%7Bpadding%3A0%3Bmargin%3Aauto%3Bdisplay%3Ablock%3Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bright%3A0%3Bimage-rendering%3Apixelated%7D%3C%2Fstyle%3E%3Cmeta%20charset%3D%22utf-8%22%3E%3C%2Fhead%3E%3Cbody%3E%3Cscript%3Evar%20gs%3DparseInt%28', AnonymiceLibrary.toString(axonNumber), '%29%3Bclass%20Mx%7Bconstructor%28t%2Cr%29%7Bthis.rZ%3Dt%2Cthis.cols%3Dr%2Cthis.data%3DArray%28this.rZ%29.fill%28%29.map%28%28%28%29%3D%3EArray%28this.cols%29.fill%280%29%29%29%7Dcopy%28%29%7Blet%20t%3Dnew%20Mx%28this.rZ%2Cthis.cols%29%3Bfor%28let%20r%3D0%3Br%3Cthis.rZ%3Br%2B%2B%29for%28let%20s%3D0%3Bs%3Cthis.cols%3Bs%2B%2B%29t.data%5Br%5D%5Bs%5D%3Dthis.data%5Br%5D%5Bs%5D%3Breturn%20t%7Dstatic%20fromArray%28t%29%7Breturn%20new%20Mx%28t.length%2C1%29.map%28%28%28r%2Cs%29%3D%3Et%5Bs%5D%29%29%7Dstatic%20subtract%28t%2Cr%29%7Bif%28t.rZ%3D%3D%3Dr.rZ%26%26t.cols%3D%3D%3Dr.cols%29return%20new%20Mx%28t.rZ%2Ct.cols%29.map%28%28%28s%2Ca%2Ci%29%3D%3Et.data%5Ba%5D%5Bi%5D-r.data%5Ba%5D%5Bi%5D%29%29%7DtoArray%28%29%7Blet%20t%3D%5B%5D%3Bfor%28let%20r%3D0%3Br%3Cthis.rZ%3Br%2B%2B%29for%28let%20s%3D0%3Bs%3Cthis.cols%3Bs%2B%2B%29t.push%28this.data%5Br%5D%5Bs%5D%29%3Breturn%20t%7Drdz%28%29%7Breturn%20this.map%28%28t%3D%3E2%2Arng%28%29-1%29%29%7Dadd%28t%29%7Bif%28t%20instanceof%20Mx%29%7Bif%28this.rZ%21%3D%3Dt.rZ%7C%7Cthis.cols%21%3D%3Dt.cols%29return%3Breturn%20this.map%28%28%28r%2Cs%2Ca%29%3D%3Er%2Bt.data%5Bs%5D%5Ba%5D%29%29%7Dreturn%20this.map%28%28r%3D%3Er%2Bt%29%29%7Dstatic%20trp%28t%29%7Breturn%20new%20Mx%28t.cols%2Ct.rZ%29.map%28%28%28r%2Cs%2Ca%29%3D%3Et.data%5Ba%5D%5Bs%5D%29%29%7Dstatic%20mtp%28t%2Cr%29%7Bif%28t.cols%3D%3D%3Dr.rZ%29return%20new%20Mx%28t.rZ%2Cr.cols%29.map%28%28%28s%2Ca%2Ci%29%3D%3E%7Blet%20o%3D0%3Bfor%28let%20s%3D0%3Bs%3Ct.cols%3Bs%2B%2B%29o%2B%3Dt.data%5Ba%5D%5Bs%5D%2Ar.data%5Bs%5D%5Bi%5D%3Breturn%20o%7D%29%29%7Dmtp%28t%29%7Bif%28t%20instanceof%20Mx%29%7Bif%28this.rZ%21%3D%3Dt.rZ%7C%7Cthis.cols%21%3D%3Dt.cols%29return%3Breturn%20this.map%28%28%28r%2Cs%2Ca%29%3D%3Er%2At.data%5Bs%5D%5Ba%5D%29%29%7Dreturn%20this.map%28%28r%3D%3Er%2At%29%29%7Dmap%28t%29%7Bfor%28let%20r%3D0%3Br%3Cthis.rZ%3Br%2B%2B%29for%28let%20s%3D0%3Bs%3Cthis.cols%3Bs%2B%2B%29%7Blet%20a%3Dthis.data%5Br%5D%5Bs%5D%3Bthis.data%5Br%5D%5Bs%5D%3Dt%28a%2Cr%2Cs%29%7Dreturn%20this%7Dstatic%20map%28t%2Cr%29%7Breturn%20new%20Mx%28t.rZ%2Ct.cols%29.map%28%28%28s%2Ca%2Ci%29%3D%3Er%28t.data%5Ba%5D%5Bi%5D%2Ca%2Ci%29%29%29%7Dserialize%28%29%7Breturn%20JSON.stringify%28this%29%7Dstatic%20dsr%28t%29%7B%22string%22%3D%3Dtypeof%20t%26%26%28t%3DJSON.parse%28t%29%29%3Blet%20r%3Dnew%20Mx%28t.rZ%2Ct.cols%29%3Breturn%20r.data%3Dt.data%2Cr%7D%7D%22undefined%22%21%3Dtypeof%20module%26%26%28module.exports%3DMx%29%3C%2Fscript%3E%3Cscript%3Eclass%20AAF%7Bconstructor%28i%2Ct%29%7Bthis.func%3Di%2Cthis.dfunc%3Dt%7D%7Dlet%20sigmoid%3Dnew%20AAF%28%28i%3D%3E1%2F%281%2BMath.exp%28-i%29%29%29%2C%28i%3D%3Ei%2A%281-i%29%29%29%3Bclass%20NNN%7Bconstructor%28i%2Ct%2Cs%29%7B%28this.seed%3Dgs%2Crng%3Dsrand%28this.seed%29%2Cthis.i_n%3Di%2Cthis.h_n%3Dt%2Cthis.o_n%3Ds%2Cthis.w_hi%3Dnew%20Mx%28this.h_n%2Cthis.i_n%29%2Cthis.w_ho%3Dnew%20Mx%28this.o_n%2Cthis.h_n%29%2Cthis.w_hi.rdz%28%29%2Cthis.w_ho.rdz%28%29%2Cthis.bias_h%3Dnew%20Mx%28this.h_n%2C1%29%2Cthis.bias_o%3Dnew%20Mx%28this.o_n%2C1%29%2Cthis.bias_h.rdz%28%29%2Cthis.bias_o.rdz%28%29%29%2Cthis.setLearningRate%28%29%2Cthis.setAAF%28%29%7Dpredict%28i%29%7Blet%20t%3DMx.fromArray%28i%29%2Cs%3DMx.mtp%28this.w_hi%2Ct%29%3Bs.add%28this.bias_h%29%2Cs.map%28this.a_f.func%29%3Blet%20e%3DMx.mtp%28this.w_ho%2Cs%29%3Breturn%20e.add%28this.bias_o%29%2Ce.map%28this.a_f.func%29%2Ce.toArray%28%29%7DsetLearningRate%28i%3D.1%29%7Bthis.l_r%3Di%7DsetAAF%28i%3Dsigmoid%29%7Bthis.a_f%3Di%7Dserialize%28%29%7Breturn%20JSON.stringify%28this%29%7Dstatic%20dsr%28i%29%7B%22string%22%3D%3Dtypeof%20i%26%26%28i%3DJSON.parse%28i%29%29%3Blet%20t%3Dnew%20NNN%28i.i_n%2Ci.h_n%2Ci.o_n%29%3Breturn%20t.w_hi%3DMx.dsr%28i.w_hi%29%2Ct.w_ho%3DMx.dsr%28i.w_ho%29%2Ct.bias_h%3DMx.dsr%28i.bias_h%29%2Ct.bias_o%3DMx.dsr%28i.bias_o%29%2Ct.l_r%3Di.l_r%2Ct%7Dcopy%28%29%7Breturn%20new%20NNN%28this%29%7DmtT%28i%29%7Bfunction%20t%28t%29%7Breturn%20rng%28%29%3Ci%3Ft%2BrandomGaussian%280%2C.1%29%3At%7Dthis.w_hi.map%28t%29%2Cthis.w_ho.map%28t%29%2Cthis.bias_h.map%28t%29%2Cthis.bias_o.map%28t%29%7D%7D%3C%2Fscript%3E%3Cscript%3Eclass%20Art%7Bconstructor%28t%29%7Bthis.score%3D0%2Cthis.fitness%3D0%2Cthis.frame%3D0%2Cthis.rate%3D1%2Cthis.brain%3Dt%3Ft.copy%28%29%3Anew%20NNN%281%2C8%2C38%29%7DcvC%28t%2Cr%2Ce%29%7Breturn%5BMath.round%28255%2At%5B0%5D%2B.35%2Ar%2Athis.ouT%5B35%5D%29%2CMath.round%28255%2At%5B1%5D%2B.35%2Ar%2Athis.ouT%5B36%5D%29%2CMath.round%28255%2At%5B2%5D%29%2B.35%2Ar%2Athis.ouT%5B37%5D%5D%7DgCN%28t%2Cr%2Ce%29%7Bt%25%3D35%2Ct%3DMath.round%28%28Math.sin%28t%29%2B1%29%2F2%2A55%29-1%2Cthis.brain.seed%253%3D%3D0%3Ft%3D-1%2AMath.abs%28t%29%3Athis.brain.seed%253%3D%3D1%26%26%28t%3DMath.abs%28t%29%29%3Breturn%20this.ouT%5B6%2B3%2At%5D%3F%5Bthis.ouT%5B6%2B3%2At%5D%2Cthis.ouT%5B6%2B4%2At%5D%2Cthis.ouT%5B6%2B5%2At%5D%5D%3A%5B-1%2C-1%2C-1%5D%7Dshow%28t%2Cr%2Ce%29%7BpF%7C%7C%28pF%3Dcolor%280%29%2Cfill%28pF%29%29%3Bvar%20i%2Cn%3D0%2BMath.round%285%2Athis.ouT%5B0%5D%29%2Ca%3DMath.max%28this.ouT%5B1%5D%2B3e-7%2At%2C.01%29%2At%2F12%2Cs%3DMath.max%28this.ouT%5B2%5D%2B3e-7%2Ar%2C.01%29%2Ar%2F12%2Co%3D12e3%2Athis.ouT%5B4%5D%2B%281-8e3%2Athis.ouT%5B3%5D%29%2Cu%3DMath.round%28a%2Ao%2Bs%2A%281-o%29%2An%29%2Ch%3Dthis.gCN%28u%29%3B-1%3D%3Dh%5B0%5D%3Fthis.cf%3DpF%3A%28i%3Dthis.cvC%28h%2Ct%2Cr%29%2CdrawingContext.fillStyle%3D%22rgb%28%22%2Bi%5B0%5D%2B%22%2C%22%2Bi%5B1%5D%2B%22%2C%22%2Bi%5B2%5D%2B%22%29%22%2Cthis.cf%3Di%2C%22rgba%280%2C%200%2C%200%2C%200.00%29%22%3D%3D%3DdrawingContext.fillStyle%3F%28drawingContext.fillStyle%3D%60rgb%28%24%7BpF%5B0%5D%7D%2C%20%24%7BpF%5B1%5D%7D%2C%20%24%7BpF%5B2%5D%7D%29%60%2Cthis.cf%3DpF%29%3ApF%3Di%29%3Blet%20l%3D4%2A%28r%2Ae%2Awidth%2Bt%2Ae%29%2Cc%3D%5Bpixels%5Bl%5D%2Cpixels%5Bl%2B1%5D%2Cpixels%5Bl%2B2%5D%2Cpixels%5Bl%2B3%5D%5D%3Bc%5B0%5D%3D%3Dthis.cf%5B0%5D%26%26c%5B1%5D%3D%3Dthis.cf%5B1%5D%26%26c%5B2%5D%3D%3Dthis.cf%5B2%5D%7C%7CdrawingContext.fillRect%28t%2Ae%2Cr%2Ae%2Ce%2Ce%29%7DmtT%28%29%7Bthis.brain.mtT%28.9%29%7Dthink%28%29%7Bthis.frame%2B%3Dthis.rate%2C5e-6%2Athis.frame%3E15%26%26%28this.frame%3D-5%2CcrA.brain.mtT%28.9%29%29%3Blet%20t%3D%5B%5D%3Bt%5B0%5D%3D5e-6%2Athis.frame-5%3Blet%20r%3Dthis.brain.predict%28t%29%3Bthis.ouT%3Dr%7Dupdate%28%29%7Bthis.score%2B%2B%7D%7Dvar%20pF%3Bfunction%20pickOne%28%29%7Blet%20t%3D0%2Cr%3Drandom%281%29%3Bfor%28%3Br%3E0%3B%29r-%3DsvA%5Bt%5D.fitness%2Ct%2B%2B%3Bt--%3Blet%20e%3DsvA%5Bt%5D%2Ci%3Dnew%20Art%28e.brain%29%3Breturn%20i.mtT%28%29%2Ci%7Dfunction%20ccF%28%29%7Blet%20t%3D0%3Bfor%28let%20r%20of%20svA%29t%2B%3Dr.score%3Bfor%28let%20r%20of%20svA%29r.fitness%3Dr.score%2Ft%7Dfunction%20srand%28t%29%7Breturn%20function%28%29%7Bvar%20r%3Dt%2B%3D1831565813%3Breturn%20r%3DMath.imul%28r%5Er%3E%3E%3E15%2C1%7Cr%29%2C%28%28%28r%5E%3Dr%2BMath.imul%28r%5Er%3E%3E%3E7%2C61%7Cr%29%29%5Er%3E%3E%3E14%29%3E%3E%3E0%29%2F4294967296%7D%7Dconst%20TOTAL%3D10%3Blet%20crA%2ClastFill%2Crng%2Carts%3D%5B%5D%2CsvA%3D%5B%5D%2Ccnt%3D0%2CartIndex%3D0%3Bvar%20pS%3D5%2Ccol%3D%22black%22%3Bfunction%20windowResized%28%29%7BpS%3DMath.max%28Math.round%28Math.min%281e3%2CwindowWidth%29%2F200%29%2C3%29%2CresizeCanvas%28Math.min%281e3%2CMath.max%28windowWidth%2C500%29%29%2CMath.min%281e3%2CMath.max%28windowHeight%2C500%29%29%29%7Dfunction%20setup%28%29%7BpixelDensity%281%29%2CcolorMode%28RGB%29%2CcreateCanvas%28Math.min%281e3%2CMath.max%28windowWidth%2C500%29%29%2CMath.min%281e3%2CMath.max%28windowHeight%2C500%29%29%29%2CpS%3DMath.max%28Math.round%28Math.min%281e3%2CwindowWidth%29%2F200%29%2C3%29%3Bfor%28var%20t%3D0%3Bt%3CTOTAL%3Bt%2B%2B%29arts.push%28new%20Art%29%3BframeRate%2810%29%2CnextArt%28%29%7Dfunction%20nextArt%28%29%7BcrA%3Darts.shift%28%29%2CcrA.update%28%29%2Cconsole.log%28btoa%28crA.brain.seed%29%29%2Credraw%28%29%7Dfunction%20draw%28%29%7BnoStroke%28%29%2CloadPixels%28%29%2CcrA.think%28%29%3Bfor%28var%20t%3D0%3Bt%3Cheight%2FpS%3Bt%2B%2B%29for%28var%20r%3D0%3Br%3Cwidth%2FpS%3Br%2B%2B%29crA.show%28r%2Ct%2CpS%29%7Dfunction%20keyPressed%28%29%7B%22z%22%3D%3D%3Dkey%26%26crA.brain.mtT%28.1%29%2C%22d%22%3D%3D%3Dkey%26%26crA.rate%2B%2B%2C%22a%22%3D%3D%3Dkey%26%26crA.rate--%7D%3C%2Fscript%3E%3C%2Fbody%3E%3C%2Fhtml%3E' ) ); return htmlString; } /** * @dev Returns the SVG and metadata for a token Id * @param _tokenId The tokenId to return the SVG and metadata for. */ function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId)); string memory description = '", "description": "Axons is an infinite collection of generative pixel art, looking into the mind of a neural network (thus, no distinct traits can be distilled). A new Axon is chosen and auctioned on-chain daily based on decentralized community voting. Art is mirrored permanently on-chain. Auctions are conducted using a free, untradeable token obtained by participating in the voting process.'; uint256 axonNumber = tokenIdToNumber[_tokenId]; string memory encodedAxonNumber = AnonymiceLibrary.encode(bytes(string(abi.encodePacked(AnonymiceLibrary.toString(axonNumber))))); return string( abi.encodePacked( "data:application/json;base64,", AnonymiceLibrary.encode( bytes( string( abi.encodePacked( '{"name": "Axons #', AnonymiceLibrary.toString(_tokenId), description, '","image":"', imageUrl, encodedAxonNumber, '","animation_url":"', animationUrl, encodedAxonNumber, '"}' ) ) ) ) ) ); } /** * @dev Returns a hash for a given tokenId * @param _tokenId The tokenId to return the hash for. */ function _tokenIdToAxonNumber(uint256 _tokenId) public view returns (uint256) { uint256 axonNumber = tokenIdToNumber[_tokenId]; return axonNumber; } /* ___ __ __ ____ ___ ____ _____ __ __ ____ __ ______ ____ ___ ____ _____ / \ | |__| || \ / _]| \ | || | || \ / ] || |/ \ | \ / ___/ | || | | || _ | / [_ | D ) | __|| | || _ | / /| | | || || _ ( \_ | O || | | || | || _]| / | |_ | | || | |/ / |_| |_| | || O || | |\__ | | || ` ' || | || [_ | \ | _] | : || | / \_ | | | || || | |/ \ | | | \ / | | || || . \ | | | || | \ | | | | || || | |\ | \___/ \_/\_/ |__|__||_____||__|\_| |__| \__,_||__|__|\____| |__| |____|\___/ |__|__| \___| */ /** * @dev Sets the p5js url * @param _p5jsUrl The address of the p5js file hosted on CDN */ function setJsAddress(string memory _p5jsUrl) public onlyOwner { p5jsUrl = _p5jsUrl; } /** * @dev Sets the p5js resource integrity * @param _p5jsIntegrity The hash of the p5js file (to protect w subresource integrity) */ function setJsIntegrity(string memory _p5jsIntegrity) public onlyOwner { p5jsIntegrity = _p5jsIntegrity; } /** * @dev Sets the base image url * @param _imageUrl The base url for image field */ function setImageUrl(string memory _imageUrl) public onlyOwner { imageUrl = _imageUrl; } /** * @dev Sets the base animation url * @param _animationUrl The base url for animations */ function setAnimationUrl(string memory _animationUrl) public onlyOwner { animationUrl = _animationUrl; } /** * @notice Set the token minter. * @dev Only callable by the owner when not locked. */ function setMinter(address _minter) external override onlyOwner whenMinterNotLocked { minter = _minter; emit MinterUpdated(_minter); } /** * @notice Lock the minter. * @dev This cannot be reversed and is only callable by the owner when not locked. */ function lockMinter() external override onlyOwner whenMinterNotLocked { isMinterLocked = true; emit MinterLocked(); } /** * @notice Set the _contractURIHash. * @dev Only callable by the owner. */ function setContractURIHash(string memory newContractURIHash) external onlyOwner { _contractURIHash = newContractURIHash; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"AxonBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"AxonCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"MinterLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"MinterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"_tokenIdToAxonNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"axonId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"dataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMinterLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"axonId","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_animationUrl","type":"string"}],"name":"setAnimationUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newContractURIHash","type":"string"}],"name":"setContractURIHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_imageUrl","type":"string"}],"name":"setImageUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_p5jsUrl","type":"string"}],"name":"setJsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_p5jsIntegrity","type":"string"}],"name":"setJsIntegrity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b91600c91620001d1565b506040518060800160405280604881526020016200534b6048913980516200004c91600f91602090910190620001d1565b50604051806060016040528060378152602001620053146037913980516200007d91601091602090910190620001d1565b5060405180606001604052806022815260200162005393602291398051620000ae91601191602090910190620001d1565b50604051806060016040528060388152602001620053b5603891398051620000df91601291602090910190620001d1565b50348015620000ed57600080fd5b506040518060400160405280600581526020016441786f6e7360d81b8152506040518060400160405280600581526020016441584f4e5360d81b815250816000908051906020019062000142929190620001d1565b50805162000158906001906020840190620001d1565b505050620001756200016f6200017b60201b60201c565b6200017f565b620002b4565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001df9062000277565b90600052602060002090601f0160209004810192826200020357600085556200024e565b82601f106200021e57805160ff19168380011785556200024e565b828001600101855582156200024e579182015b828111156200024e57825182559160200191906001019062000231565b506200025c92915062000260565b5090565b5b808211156200025c576000815560010162000261565b600181811c908216806200028c57607f821691505b60208210811415620002ae57634e487b7160e01b600052602260045260246000fd5b50919050565b61505080620002c46000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636352211e1161011a578063a22cb465116100ad578063d9d262831161007c578063d9d262831461042f578063e8a3d48514610442578063e985e9c51461044a578063f2fde38b14610486578063fca3b5aa1461049957600080fd5b8063a22cb465146103e3578063b88d4fde146103f6578063baedc1c414610409578063c87b56dd1461041c57600080fd5b806383d01b3d116100e957806383d01b3d146103975780638da5cb5b146103b757806395d89b41146103c8578063a0712d68146103d057600080fd5b80636352211e1461036157806370a0823114610374578063715018a61461038757806376daebe11461038f57600080fd5b806323b872dd1161019257806342842e0e1161016157806342842e0e1461031557806342966c68146103285780634f6ccce71461033b5780635ac1e3bb1461034e57600080fd5b806323b872dd146102c957806328e56c5e146102dc5780632abff1f2146102ef5780632f745c591461030257600080fd5b8063095ea7b3116101ce578063095ea7b31461027b57806313fb44bf1461029057806318160ddd146102a35780631e688e10146102b557600080fd5b806301ffc9a71461020057806306fdde0314610228578063075461721461023d578063081812fc14610268575b600080fd5b61021361020e366004611e08565b6104ac565b60405190151581526020015b60405180910390f35b6102306104d7565b60405161021f9190611e7d565b600b54610250906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b610250610276366004611e90565b610569565b61028e610289366004611ec0565b610603565b005b61028e61029e366004611f76565b610719565b6008545b60405190815260200161021f565b600b5461021390600160a01b900460ff1681565b61028e6102d7366004611fbf565b61075a565b61028e6102ea366004611f76565b61078b565b61028e6102fd366004611f76565b6107c8565b6102a7610310366004611ec0565b610805565b61028e610323366004611fbf565b61089b565b61028e610336366004611e90565b6108b6565b6102a7610349366004611e90565b610942565b61023061035c366004611e90565b6109d5565b61025061036f366004611e90565b610a40565b6102a7610382366004611ffb565b610ab7565b61028e610b3e565b61028e610b74565b6102a76103a5366004611e90565b6000908152600e602052604090205490565b600a546001600160a01b0316610250565b610230610c29565b6102a76103de366004611e90565b610c38565b61028e6103f1366004612016565b610d0c565b61028e610404366004612052565b610dd1565b61028e610417366004611f76565b610e09565b61023061042a366004611e90565b610e46565b61028e61043d366004611f76565b610f1d565b610230610f5a565b6102136104583660046120ce565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61028e610494366004611ffb565b610f82565b61028e6104a7366004611ffb565b61101d565b60006001600160e01b0319821663780e9d6360e01b14806104d157506104d1826110e8565b92915050565b6060600080546104e690612101565b80601f016020809104026020016040519081016040528092919081815260200182805461051290612101565b801561055f5780601f106105345761010080835404028352916020019161055f565b820191906000526020600020905b81548152906001019060200180831161054257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166105e75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061060e82610a40565b9050806001600160a01b0316836001600160a01b0316141561067c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016105de565b336001600160a01b038216148061069857506106988133610458565b61070a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105de565b6107148383611138565b505050565b600a546001600160a01b031633146107435760405162461bcd60e51b81526004016105de9061213c565b8051610756906010906020840190611d59565b5050565b61076433826111a6565b6107805760405162461bcd60e51b81526004016105de90612171565b61071483838361129d565b600a546001600160a01b031633146107b55760405162461bcd60e51b81526004016105de9061213c565b8051610756906012906020840190611d59565b600a546001600160a01b031633146107f25760405162461bcd60e51b81526004016105de9061213c565b8051610756906011906020840190611d59565b600061081083610ab7565b82106108725760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016105de565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61071483838360405180602001604052806000815250610dd1565b600b546001600160a01b0316331461090b5760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329036b4b73a32b960411b60448201526064016105de565b61091481611448565b60405181907f39c9392d2d40359a26940c19fc58228c06e7f24bf2926312fc10a520b0ae261990600090a250565b600061094d60085490565b82106109b05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016105de565b600882815481106109c3576109c36121c2565b90600052602060002001549050919050565b6000818152600260205260409020546060906001600160a01b03166109f957600080fd5b6000828152600e602052604081205490600f6010610a16846114ef565b604051602001610a289392919061228e565b60408051601f19818403018152919052949350505050565b6000818152600260205260408120546001600160a01b0316806104d15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016105de565b60006001600160a01b038216610b225760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016105de565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610b685760405162461bcd60e51b81526004016105de9061213c565b610b7260006115ed565b565b600a546001600160a01b03163314610b9e5760405162461bcd60e51b81526004016105de9061213c565b600b54600160a01b900460ff1615610beb5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d195c881a5cc81b1bd8dad95960821b60448201526064016105de565b600b805460ff60a01b1916600160a01b1790556040517f192417b3f16b1ce69e0c59b0376549666650245ffc05e4b2569089dda8589b6690600090a1565b6060600180546104e690612101565b600b546000906001600160a01b03163314610c905760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329036b4b73a32b960411b60448201526064016105de565b610726610c9c60085490565b11158015610cbc5750601e610cb060085490565b610cba9190614ba2565b155b8015610cd057506000610cce60085490565b115b15610cfd57610cfb610cea600a546001600160a01b031690565b610cf6336103e861163f565b6116e9565b505b6104d133836116e9565b919050565b6001600160a01b038216331415610d655760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105de565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ddb33836111a6565b610df75760405162461bcd60e51b81526004016105de90612171565b610e038484848461172a565b50505050565b600a546001600160a01b03163314610e335760405162461bcd60e51b81526004016105de9061213c565b805161075690600c906020840190611d59565b6000818152600260205260409020546060906001600160a01b0316610e6a57600080fd5b6000604051806101c0016040528061018b8152602001614e9061018b91396000848152600e6020526040812054919250610eca610ea6836114ef565b604051602001610eb69190614bb6565b60405160208183030381529060405261175d565b9050610ef4610ed8866114ef565b84601184601286604051602001610eb696959493929190614bd2565b604051602001610f049190614ca3565b6040516020818303038152906040529350505050919050565b600a546001600160a01b03163314610f475760405162461bcd60e51b81526004016105de9061213c565b805161075690600f906020840190611d59565b6060600c604051602001610f6e9190614ce8565b604051602081830303815290604052905090565b600a546001600160a01b03163314610fac5760405162461bcd60e51b81526004016105de9061213c565b6001600160a01b0381166110115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105de565b61101a816115ed565b50565b600a546001600160a01b031633146110475760405162461bcd60e51b81526004016105de9061213c565b600b54600160a01b900460ff16156110945760405162461bcd60e51b815260206004820152601060248201526f135a5b9d195c881a5cc81b1bd8dad95960821b60448201526064016105de565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fad0f299ec81a386c98df0ac27dae11dd020ed1b56963c53a7292e7a3a314539a9060200160405180910390a150565b60006001600160e01b031982166380ac58cd60e01b148061111957506001600160e01b03198216635b5e139f60e01b145b806104d157506301ffc9a760e01b6001600160e01b03198316146104d1565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061116d82610a40565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661121f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105de565b600061122a83610a40565b9050806001600160a01b0316846001600160a01b031614806112655750836001600160a01b031661125a84610569565b6001600160a01b0316145b8061129557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166112b082610a40565b6001600160a01b0316146113185760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016105de565b6001600160a01b03821661137a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105de565b6113858383836118c5565b611390600082611138565b6001600160a01b03831660009081526003602052604081208054600192906113b9908490614d1a565b90915550506001600160a01b03821660009081526003602052604081208054600192906113e7908490614d31565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061145382610a40565b9050611461816000846118c5565b61146c600083611138565b6001600160a01b0381166000908152600360205260408120805460019290611495908490614d1a565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060816115135750506040805180820190915260018152600360fc1b602082015290565b8160005b811561153d578061152781614d49565b91506115369050600a83614d64565b9150611517565b60008167ffffffffffffffff81111561155857611558611eea565b6040519080825280601f01601f191660200182016040528015611582576020820181803683370190505b5090505b841561129557611597600183614d1a565b91506115a4600a86614ba2565b6115af906030614d31565b60f81b8183815181106115c4576115c46121c2565b60200101906001600160f81b031916908160001a9053506115e6600a86614d64565b9450611586565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008066033333333332d0424486866040516020016116899493929190938452602084019290925260601b6bffffffffffffffffffffffff19166040830152605482015260740190565b6040516020818303038152906040528051906020012060001c6116ac9190614ba2565b6000818152600d602052604090205490915060ff16156116e2576116da846116d5856001614d31565b61163f565b9150506104d1565b9392505050565b6000806116f560085490565b6000818152600e60209081526040808320879055868352600d9091529020805460ff1916600117905590506116e2848261197d565b61173584848461129d565b61174184848484611acb565b610e035760405162461bcd60e51b81526004016105de90614d78565b606081516000141561177d57505060408051602081019091526000815290565b6000604051806060016040528060408152602001614e5060409139905060006003845160026117ac9190614d31565b6117b69190614d64565b6117c1906004614dca565b905060006117d0826020614d31565b67ffffffffffffffff8111156117e8576117e8611eea565b6040519080825280601f01601f191660200182016040528015611812576020820181803683370190505b509050818152600183018586518101602084015b818310156118805760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611826565b60038951066001811461189a57600281146118ab576118b7565b613d3d60f01b6001198301526118b7565b603d60f81b6000198301525b509398975050505050505050565b6001600160a01b0383166119205761191b81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611943565b816001600160a01b0316836001600160a01b031614611943576119438382611bc9565b6001600160a01b03821661195a5761071481611c66565b826001600160a01b0316826001600160a01b031614610714576107148282611d15565b6001600160a01b0382166119d35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105de565b6000818152600260205260409020546001600160a01b031615611a385760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105de565b611a44600083836118c5565b6001600160a01b0382166000908152600360205260408120805460019290611a6d908490614d31565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15611bbe57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b0f903390899088908890600401614de9565b6020604051808303816000875af1925050508015611b4a575060408051601f3d908101601f19168201909252611b4791810190614e1c565b60015b611ba4573d808015611b78576040519150601f19603f3d011682016040523d82523d6000602084013e611b7d565b606091505b508051611b9c5760405162461bcd60e51b81526004016105de90614d78565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611295565b506001949350505050565b60006001611bd684610ab7565b611be09190614d1a565b600083815260076020526040902054909150808214611c33576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611c7890600190614d1a565b60008381526009602052604081205460088054939450909284908110611ca057611ca06121c2565b906000526020600020015490508060088381548110611cc157611cc16121c2565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611cf957611cf9614e39565b6001900381819060005260206000200160009055905550505050565b6000611d2083610ab7565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054611d6590612101565b90600052602060002090601f016020900481019282611d875760008555611dcd565b82601f10611da057805160ff1916838001178555611dcd565b82800160010185558215611dcd579182015b82811115611dcd578251825591602001919060010190611db2565b50611dd9929150611ddd565b5090565b5b80821115611dd95760008155600101611dde565b6001600160e01b03198116811461101a57600080fd5b600060208284031215611e1a57600080fd5b81356116e281611df2565b60005b83811015611e40578181015183820152602001611e28565b83811115610e035750506000910152565b60008151808452611e69816020860160208601611e25565b601f01601f19169290920160200192915050565b6020815260006116e26020830184611e51565b600060208284031215611ea257600080fd5b5035919050565b80356001600160a01b0381168114610d0757600080fd5b60008060408385031215611ed357600080fd5b611edc83611ea9565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611f1b57611f1b611eea565b604051601f8501601f19908116603f01168101908282118183101715611f4357611f43611eea565b81604052809350858152868686011115611f5c57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611f8857600080fd5b813567ffffffffffffffff811115611f9f57600080fd5b8201601f81018413611fb057600080fd5b61129584823560208401611f00565b600080600060608486031215611fd457600080fd5b611fdd84611ea9565b9250611feb60208501611ea9565b9150604084013590509250925092565b60006020828403121561200d57600080fd5b6116e282611ea9565b6000806040838503121561202957600080fd5b61203283611ea9565b91506020830135801515811461204757600080fd5b809150509250929050565b6000806000806080858703121561206857600080fd5b61207185611ea9565b935061207f60208601611ea9565b925060408501359150606085013567ffffffffffffffff8111156120a257600080fd5b8501601f810187136120b357600080fd5b6120c287823560208401611f00565b91505092959194509250565b600080604083850312156120e157600080fd5b6120ea83611ea9565b91506120f860208401611ea9565b90509250929050565b600181811c9082168061211557607f821691505b6020821081141561213657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b8054600090600181811c90808316806121f257607f831692505b602080841082141561221457634e487b7160e01b600052602260045260246000fd5b818015612228576001811461223957612266565b60ff19861689528489019650612266565b60008881526020902060005b8681101561225e5781548b820152908501908301612245565b505084890196505b50505050505092915050565b60008151612284818560208601611e25565b9290920192915050565b7f646174613a746578742f68746d6c2c25334368746d6c2533452533436865616481527f2533452533437363726970742532307372632533442532320000000000000000602082015260006122e660388301866121d8565b7412991912991834b73a32b3b934ba3c9299a212991960591b815261230e60158201866121d8565b90507f25323225323063726f73736f726967696e253344253232616e6f6e796d6f757381527f2532322533452533432532467363726970742533452533437374796c6525334560208201527f68746d6c2537426865696768742533413130302532352533426f766572666c6f60408201527f7725334168696464656e253744626f64792537426d696e2d686569676874253360608201527f413130302532352533426d617267696e2533413025334270616464696e67253360808201527f41302533426f766572666c6f7725334168696464656e2533426261636b67726f60a08201527f756e642d636f6c6f7225334125323331313125374463616e766173253742706160c08201527f6464696e67253341302533426d617267696e2533416175746f2533426469737060e08201527f6c6179253341626c6f636b253342706f736974696f6e2533416162736f6c75746101008201527f65253342746f7025334130253342626f74746f6d253341302533426c656674256101208201527f334130253342726967687425334130253342696d6167652d72656e646572696e6101408201527f67253341706978656c617465642537442533432532467374796c6525334525336101608201527f436d657461253230636861727365742533442532327574662d382532322533456101808201527f25334325324668656164253345253343626f64792533452533437363726970746101a08201527f25334576617225323067732533447061727365496e74253238000000000000006101c0820152614b8261255f6101d9830186612272565b7f253239253342636c6173732532304d78253742636f6e7374727563746f72253281527f387425324372253239253742746869732e725a25334474253243746869732e6360208201527f6f6c7325334472253243746869732e646174612533444172726179253238746860408201527f69732e725a2532392e66696c6c2532382532392e6d617025323825323825323860608201527f2532392533442533454172726179253238746869732e636f6c732532392e666960808201527f6c6c25323830253239253239253239253744636f70792532382532392537426c60a08201527f6574253230742533446e65772532304d78253238746869732e725a253243746860c08201527f69732e636f6c73253239253342666f722532386c65742532307225334430253360e08201527f4272253343746869732e725a25334272253242253242253239666f722532386c6101008201527f6574253230732533443025334273253343746869732e636f6c732533427325326101208201527f42253242253239742e64617461253542722535442535427325354425334474686101408201527f69732e64617461253542722535442535427325354425334272657475726e25326101608201527f307425374473746174696325323066726f6d41727261792532387425323925376101808201527f4272657475726e2532306e65772532304d78253238742e6c656e6774682532436101a08201527f312532392e6d61702532382532382532387225324373253239253344253345746101c08201527f25354273253544253239253239253744737461746963253230737562747261636101e08201527f7425323874253243722532392537426966253238742e725a25334425334425336102008201527f44722e725a253236253236742e636f6c73253344253344253344722e636f6c736102208201527f25323972657475726e2532306e65772532304d78253238742e725a253243742e6102408201527f636f6c732532392e6d61702532382532382532387325324361253243692532396102608201527f253344253345742e6461746125354261253544253542692535442d722e6461746102808201527f612535426125354425354269253544253239253239253744746f4172726179256102a08201527f32382532392537426c657425323074253344253542253544253342666f7225326102c08201527f386c6574253230722533443025334272253343746869732e725a2533427225326102e08201527f42253242253239666f722532386c6574253230732533443025334273253343746103008201527f6869732e636f6c7325334273253242253242253239742e7075736825323874686103208201527f69732e64617461253542722535442535427325354425323925334272657475726103408201527f6e2532307425374472647a25323825323925374272657475726e2532307468696103608201527f732e6d61702532382532387425334425334532253241726e672532382532392d6103808201527f31253239253239253744616464253238742532392537426966253238742532306103a08201527f696e7374616e63656f662532304d782532392537426966253238746869732e726103c08201527f5a253231253344253344742e725a253743253743746869732e636f6c732532316103e08201527f253344253344742e636f6c7325323972657475726e25334272657475726e25326104008201527f30746869732e6d617025323825323825323872253243732532436125323925336104208201527f4425334572253242742e646174612535427325354425354261253544253239256104408201527f323925374472657475726e253230746869732e6d6170253238253238722533446104608201527f25334572253242742532392532392537447374617469632532307472702532386104808201527f7425323925374272657475726e2532306e65772532304d78253238742e636f6c6104a08201527f73253243742e725a2532392e6d617025323825323825323872253243732532436104c08201527f61253239253344253345742e64617461253542612535442535427325354425326104e08201527f392532392537447374617469632532306d7470253238742532437225323925376105008201527f426966253238742e636f6c73253344253344253344722e725a253239726574756105208201527f726e2532306e65772532304d78253238742e725a253243722e636f6c732532396105408201527f2e6d6170253238253238253238732532436125324369253239253344253345256105608201527f37426c65742532306f25334430253342666f722532386c6574253230732533446105808201527f3025334273253343742e636f6c73253342732532422532422532396f253242256105a08201527f3344742e646174612535426125354425354273253544253241722e64617461256105c08201527f3542732535442535426925354425334272657475726e2532306f2537442532396105e08201527f2532392537446d747025323874253239253742696625323874253230696e73746106008201527f616e63656f662532304d782532392537426966253238746869732e725a2532316106208201527f253344253344742e725a253743253743746869732e636f6c73253231253344256106408201527f3344742e636f6c7325323972657475726e25334272657475726e2532307468696106608201527f732e6d61702532382532382532387225324373253243612532392533442533456106808201527f72253241742e64617461253542732535442535426125354425323925323925376106a08201527f4472657475726e253230746869732e6d617025323825323872253344253345726106c08201527f253241742532392532392537446d617025323874253239253742666f722532386106e08201527f6c6574253230722533443025334272253343746869732e725a253342722532426107008201527f253242253239666f722532386c657425323073253344302533427325334374686107208201527f69732e636f6c73253342732532422532422532392537426c65742532306125336107408201527f44746869732e646174612535427225354425354273253544253342746869732e6107608201527f64617461253542722535442535427325354425334474253238612532437225326107808201527f437325323925374472657475726e2532307468697325374473746174696325326107a08201527f306d6170253238742532437225323925374272657475726e2532306e657725326107c08201527f304d78253238742e725a253243742e636f6c732532392e6d61702532382532386107e08201527f25323873253243612532436925323925334425334572253238742e64617461256108008201527f35426125354425354269253544253243612532436925323925323925323925376108208201527f4473657269616c697a6525323825323925374272657475726e2532304a534f4e6108408201527f2e737472696e67696679253238746869732532392537447374617469632532306108608201527f64737225323874253239253742253232737472696e67253232253344253344746108808201527f7970656f6625323074253236253236253238742533444a534f4e2e70617273656108a08201527f253238742532392532392533426c6574253230722533446e65772532304d78256108c08201527f3238742e725a253243742e636f6c7325323925334272657475726e253230722e6108e08201527f64617461253344742e6461746125324372253744253744253232756e646566696109008201527f6e6564253232253231253344747970656f662532306d6f64756c6525323625326109208201527f362532386d6f64756c652e6578706f7274732533444d782532392533432532466109408201527f736372697074253345253343736372697074253345636c6173732532304141466109608201527f253742636f6e7374727563746f722532386925324374253239253742746869736109808201527f2e66756e6325334469253243746869732e6466756e63253344742537442537446109a08201527f6c65742532307369676d6f69642533446e6577253230414146253238253238696109c08201527f25334425334531253246253238312532424d6174682e6578702532382d6925326109e08201527f392532392532392532432532386925334425334569253241253238312d692532610a008201527f39253239253239253342636c6173732532304e4e4e253742636f6e7374727563610a208201527f746f72253238692532437425324373253239253742253238746869732e736565610a408201527f642533446773253243726e672533447372616e64253238746869732e73656564610a608201527f253239253243746869732e695f6e25334469253243746869732e685f6e253344610a808201527f74253243746869732e6f5f6e25334473253243746869732e775f68692533446e610aa08201527f65772532304d78253238746869732e685f6e253243746869732e695f6e253239610ac08201527f253243746869732e775f686f2533446e65772532304d78253238746869732e6f610ae08201527f5f6e253243746869732e685f6e253239253243746869732e775f68692e72647a610b008201527f253238253239253243746869732e775f686f2e72647a25323825323925324374610b208201527f6869732e626961735f682533446e65772532304d78253238746869732e685f6e610b408201527f25324331253239253243746869732e626961735f6f2533446e65772532304d78610b608201527f253238746869732e6f5f6e25324331253239253243746869732e626961735f68610b808201527f2e72647a253238253239253243746869732e626961735f6f2e72647a25323825610ba08201527f3239253239253243746869732e7365744c6561726e696e675261746525323825610bc08201527f3239253243746869732e73657441414625323825323925374470726564696374610be08201527f253238692532392537426c6574253230742533444d782e66726f6d4172726179610c008201527f25323869253239253243732533444d782e6d7470253238746869732e775f6869610c208201527f25324374253239253342732e616464253238746869732e626961735f68253239610c408201527f253243732e6d6170253238746869732e615f662e66756e632532392533426c65610c608201527f74253230652533444d782e6d7470253238746869732e775f686f253243732532610c808201527f3925334272657475726e253230652e616464253238746869732e626961735f6f610ca08201527f253239253243652e6d6170253238746869732e615f662e66756e632532392532610cc08201527f43652e746f41727261792532382532392537447365744c6561726e696e675261610ce08201527f7465253238692533442e31253239253742746869732e6c5f7225334469253744610d008201527f736574414146253238692533447369676d6f6964253239253742746869732e61610d208201527f5f662533446925374473657269616c697a652532382532392537427265747572610d408201527f6e2532304a534f4e2e737472696e676966792532387468697325323925374473610d608201527f746174696325323064737225323869253239253742253232737472696e672532610d808201527f32253344253344747970656f6625323069253236253236253238692533444a53610da08201527f4f4e2e7061727365253238692532392532392533426c6574253230742533446e610dc08201527f65772532304e4e4e253238692e695f6e253243692e685f6e253243692e6f5f6e610de08201527f25323925334272657475726e253230742e775f68692533444d782e6473722532610e008201527f38692e775f6869253239253243742e775f686f2533444d782e64737225323869610e208201527f2e775f686f253239253243742e626961735f682533444d782e64737225323869610e408201527f2e626961735f68253239253243742e626961735f6f2533444d782e6473722532610e608201527f38692e626961735f6f253239253243742e6c5f72253344692e6c5f7225324374610e808201527f253744636f707925323825323925374272657475726e2532306e65772532304e610ea08201527f4e4e253238746869732532392537446d74542532386925323925374266756e63610ec08201527f74696f6e253230742532387425323925374272657475726e253230726e672532610ee08201527f38253239253343692533467425324272616e646f6d476175737369616e253238610f008201527f302532432e3125323925334174253744746869732e775f68692e6d6170253238610f208201527f74253239253243746869732e775f686f2e6d6170253238742532392532437468610f408201527f69732e626961735f682e6d617025323874253239253243746869732e62696173610f608201527f5f6f2e6d61702532387425323925374425374425334325324673637269707425610f808201527f3345253343736372697074253345636c617373253230417274253742636f6e73610fa08201527f74727563746f7225323874253239253742746869732e73636f72652533443025610fc08201527f3243746869732e6669746e65737325334430253243746869732e6672616d6525610fe08201527f334430253243746869732e7261746525334431253243746869732e627261696e6110008201527f25334474253346742e636f70792532382532392533416e65772532304e4e4e256110208201527f32383125324338253243333825323925374463764325323874253243722532436110408201527f6525323925374272657475726e2535424d6174682e726f756e642532383235356110608201527f25324174253542302535442532422e333525324172253241746869732e6f75546110808201527f25354233352535442532392532434d6174682e726f756e6425323832353525326110a08201527f4174253542312535442532422e333525324172253241746869732e6f755425356110c08201527f4233362535442532392532434d6174682e726f756e64253238323535253241746110e08201527f253542322535442532392532422e333525324172253241746869732e6f7554256111008201527f3542333725354425354425374467434e253238742532437225324365253239256111208201527f3742742532352533443335253243742533444d6174682e726f756e64253238256111408201527f32384d6174682e73696e253238742532392532423125323925324632253241356111608201527f352532392d31253243746869732e627261696e2e7365656425323533253344256111808201527f334430253346742533442d312532414d6174682e6162732532387425323925336111a08201527f41746869732e627261696e2e73656564253235332533442533443125323625326111c08201527f36253238742533444d6174682e616273253238742532392532392533427265746111e08201527f75726e253230746869732e6f75542535423625324233253241742535442533466112008201527f253542746869732e6f75542535423625324233253241742535442532437468696112208201527f732e6f7554253542362532423425324174253544253243746869732e6f7554256112408201527f35423625324235253241742535442535442533412535422d312532432d3125326112608201527f432d3125354425374473686f77253238742532437225324365253239253742706112808201527f462537432537432532387046253344636f6c6f722532383025323925324366696112a08201527f6c6c2532387046253239253239253342766172253230692532436e25334430256112c08201527f32424d6174682e726f756e6425323835253241746869732e6f755425354230256112e08201527f3544253239253243612533444d6174682e6d6178253238746869732e6f7554256113008201527f35423125354425324233652d37253241742532432e30312532392532417425326113208201527f463132253243732533444d6174682e6d6178253238746869732e6f75542535426113408201527f3225354425324233652d37253241722532432e303125323925324172253246316113608201527f322532436f25334431326533253241746869732e6f75542535423425354425326113808201527f42253238312d386533253241746869732e6f75542535423325354425323925326113a08201527f43752533444d6174682e726f756e64253238612532416f2532427325324125326113c08201527f38312d6f2532392532416e25323925324368253344746869732e67434e2532386113e08201527f752532392533422d312533442533446825354230253544253346746869732e636114008201527f66253344704625334125323869253344746869732e63764325323868253243746114208201527f2532437225323925324364726177696e67436f6e746578742e66696c6c5374796114408201527f6c652533442532327267622532382532322532426925354230253544253242256114608201527f32322532432532322532426925354231253544253242253232253243253232256114808201527f32426925354232253544253242253232253239253232253243746869732e63666114a08201527f25334469253243253232726762612532383025324325323030253243253230306114c08201527f253243253230302e303025323925323225334425334425334464726177696e676114e08201527f436f6e746578742e66696c6c5374796c6525334625323864726177696e67436f6115008201527f6e746578742e66696c6c5374796c6525334425363072676225323825323425376115208201527f42704625354230253544253744253243253230253234253742704625354231256115408201527f35442537442532432532302532342537427046253542322535442537442532396115608201527f253630253243746869732e6366253344704625323925334170462533446925326115808201527f392533426c65742532306c2533443425324125323872253241652532417769646115a08201527f7468253242742532416525323925324363253344253542706978656c732535426115c08201527f6c253544253243706978656c732535426c25324231253544253243706978656c6115e08201527f732535426c25324232253544253243706978656c732535426c253242332535446116008201527f2535442533426325354230253544253344253344746869732e636625354230256116208201527f35442532362532366325354231253544253344253344746869732e63662535426116408201527f312535442532362532366325354232253544253344253344746869732e6366256116608201527f35423225354425374325374364726177696e67436f6e746578742e66696c6c526116808201527f65637425323874253241652532437225324165253243652532436525323925376116a08201527f446d7454253238253239253742746869732e627261696e2e6d74542532382e396116c08201527f2532392537447468696e6b253238253239253742746869732e6672616d6525326116e08201527f42253344746869732e7261746525324335652d36253241746869732e6672616d6117008201527f652533453135253236253236253238746869732e6672616d652533442d3525326117208201527f436372412e627261696e2e6d74542532382e392532392532392533426c6574256117408201527f323074253344253542253544253342742535423025354425334435652d3625326117608201527f41746869732e6672616d652d352533426c657425323072253344746869732e626117808201527f7261696e2e7072656469637425323874253239253342746869732e6f755425336117a08201527f4472253744757064617465253238253239253742746869732e73636f726525326117c08201527f42253242253744253744766172253230704625334266756e6374696f6e2532306117e08201527f7069636b4f6e652532382532392537426c6574253230742533443025324372256118008201527f334472616e646f6d25323831253239253342666f7225323825334272253345306118208201527f253342253239722d253344737641253542742535442e6669746e6573732532436118408201527f74253242253242253342742d2d2533426c6574253230652533447376412535426118608201527f74253544253243692533446e6577253230417274253238652e627261696e25326118808201527f3925334272657475726e253230692e6d745425323825323925324369253744666118a08201527f756e6374696f6e2532306363462532382532392537426c6574253230742533446118c08201527f30253342666f722532386c6574253230722532306f66253230737641253239746118e08201527f253242253344722e73636f7265253342666f722532386c6574253230722532306119008201527f6f66253230737641253239722e6669746e657373253344722e73636f726525326119208201527f467425374466756e6374696f6e2532307372616e6425323874253239253742726119408201527f657475726e25323066756e6374696f6e253238253239253742766172253230726119608201527f253344742532422533443138333135363538313325334272657475726e2532306119808201527f722533444d6174682e696d756c253238722535457225334525334525334531356119a08201527f25324331253743722532392532432532382532382532387225354525334472256119c08201527f32424d6174682e696d756c2532387225354572253345253345253345372532436119e08201527f3631253743722532392532392535457225334525334525334531342532392533611a008201527f452533452533453025323925324634323934393637323936253744253744636f611a208201527f6e7374253230544f54414c25334431302533426c65742532306372412532436c611a408201527f61737446696c6c253243726e6725324361727473253344253542253544253243611a608201527f737641253344253542253544253243636e7425334430253243617274496e6465611a808201527f7825334430253342766172253230705325334435253243636f6c253344253232611aa08201527f626c61636b25323225334266756e6374696f6e25323077696e646f7752657369611ac08201527f7a656425323825323925374270532533444d6174682e6d61782532384d617468611ae08201527f2e726f756e642532384d6174682e6d696e25323831653325324377696e646f77611b008201527f576964746825323925324632303025323925324333253239253243726573697a611b208201527f6543616e7661732532384d6174682e6d696e2532383165332532434d6174682e611b408201527f6d617825323877696e646f775769647468253243353030253239253239253243611b608201527f4d6174682e6d696e2532383165332532434d6174682e6d617825323877696e64611b808201527f6f7748656967687425324335303025323925323925323925374466756e637469611ba08201527f6f6e2532307365747570253238253239253742706978656c44656e7369747925611bc08201527f323831253239253243636f6c6f724d6f64652532385247422532392532436372611be08201527f6561746543616e7661732532384d6174682e6d696e2532383165332532434d61611c008201527f74682e6d617825323877696e646f775769647468253243353030253239253239611c208201527f2532434d6174682e6d696e2532383165332532434d6174682e6d617825323877611c408201527f696e646f77486569676874253243353030253239253239253239253243705325611c608201527f33444d6174682e6d61782532384d6174682e726f756e642532384d6174682e6d611c808201527f696e25323831653325324377696e646f77576964746825323925324632303025611ca08201527f323925324333253239253342666f722532387661722532307425334430253342611cc08201527f74253343544f54414c25334274253242253242253239617274732e7075736825611ce08201527f32386e65772532304172742532392533426672616d6552617465253238313025611d008201527f32392532436e65787441727425323825323925374466756e6374696f6e253230611d208201527f6e657874417274253238253239253742637241253344617274732e7368696674611d408201527f2532382532392532436372412e757064617465253238253239253243636f6e73611d608201527f6f6c652e6c6f6725323862746f612532386372412e627261696e2e7365656425611d808201527f323925323925324372656472617725323825323925374466756e6374696f6e25611da08201527f3230647261772532382532392537426e6f5374726f6b65253238253239253243611dc08201527f6c6f6164506978656c732532382532392532436372412e7468696e6b25323825611de08201527f3239253342666f72253238766172253230742533443025334274253343686569611e008201527f676874253246705325334274253242253242253239666f722532387661722532611e208201527f3072253344302533427225334377696474682532467053253342722532422532611e408201527f422532396372412e73686f772532387225324374253243705325323925374466611e608201527f756e6374696f6e2532306b657950726573736564253238253239253742253232611e808201527f7a2532322533442533442533446b65792532362532366372412e627261696e2e611ea08201527f6d74542532382e31253239253243253232642532322533442533442533446b65611ec08201527f792532362532366372412e726174652532422532422532432532326125323225611ee08201527f33442533442533446b65792532362532366372412e726174652d2d2537442533611f008201527f43253246736372697074253345253343253246626f6479253345253343253246611f208201526668746d6c25334560c81b611f40820152611f470190565b9695505050505050565b634e487b7160e01b600052601260045260246000fd5b600082614bb157614bb1614b8c565b500690565b60008251614bc8818460208701611e25565b9190910192915050565b707b226e616d65223a202241786f6e73202360781b81528651600090614bff816011850160208c01611e25565b875190830190614c16816011840160208c01611e25565b6a11161134b6b0b3b2911d1160a91b60119290910191820152614c3c601c8201886121d8565b90508551614c4e818360208a01611e25565b7211161130b734b6b0ba34b7b72fbab936111d1160691b9101908152614c7760138201866121d8565b90508351614c89818360208801611e25565b61227d60f01b910190815260020198975050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251614cdb81601d850160208701611e25565b91909101601d0192915050565b66697066733a2f2f60c81b815260006116e260078301846121d8565b634e487b7160e01b600052601160045260246000fd5b600082821015614d2c57614d2c614d04565b500390565b60008219821115614d4457614d44614d04565b500190565b6000600019821415614d5d57614d5d614d04565b5060010190565b600082614d7357614d73614b8c565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000816000190483118215151615614de457614de4614d04565b500290565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614b8290830184611e51565b600060208284031215614e2e57600080fd5b81516116e281611df2565b634e487b7160e01b600052603160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f222c20226465736372697074696f6e223a202241786f6e7320697320616e20696e66696e69746520636f6c6c656374696f6e206f662067656e6572617469766520706978656c206172742c206c6f6f6b696e6720696e746f20746865206d696e64206f662061206e657572616c206e6574776f726b2028746875732c206e6f2064697374696e6374207472616974732063616e2062652064697374696c6c6564292e2041206e65772041786f6e2069732063686f73656e20616e642061756374696f6e6564206f6e2d636861696e206461696c79206261736564206f6e20646563656e7472616c697a656420636f6d6d756e69747920766f74696e672e20417274206973206d6972726f726564207065726d616e656e746c79206f6e2d636861696e2e2041756374696f6e732061726520636f6e647563746564207573696e67206120667265652c20756e747261646561626c6520746f6b656e206f627461696e65642062792070617274696369706174696e6720696e2074686520766f74696e672070726f636573732ea2646970667358221220a57c06b9bab8422a923649db6f74a577646369d0055672a4060ff34d368b027764736f6c634300080a00337368613235362d6d61553247786155437a355743686b41475234306e7439736257525045664638716f253246707278686f4b5051253344687474707325334125324625324663646e6a732e636c6f7564666c6172652e636f6d253246616a61782532466c69627325324670352e6a73253246312e342e3025324670352e6a7368747470733a2f2f61786f6e732e6172742f6170692f61786f6e732f696d6167652f697066733a2f2f516d65704d4c6f524c4e5558327261747832346131326f51467552684c73674d684d366e693348664d7a4b3346753f783d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636352211e1161011a578063a22cb465116100ad578063d9d262831161007c578063d9d262831461042f578063e8a3d48514610442578063e985e9c51461044a578063f2fde38b14610486578063fca3b5aa1461049957600080fd5b8063a22cb465146103e3578063b88d4fde146103f6578063baedc1c414610409578063c87b56dd1461041c57600080fd5b806383d01b3d116100e957806383d01b3d146103975780638da5cb5b146103b757806395d89b41146103c8578063a0712d68146103d057600080fd5b80636352211e1461036157806370a0823114610374578063715018a61461038757806376daebe11461038f57600080fd5b806323b872dd1161019257806342842e0e1161016157806342842e0e1461031557806342966c68146103285780634f6ccce71461033b5780635ac1e3bb1461034e57600080fd5b806323b872dd146102c957806328e56c5e146102dc5780632abff1f2146102ef5780632f745c591461030257600080fd5b8063095ea7b3116101ce578063095ea7b31461027b57806313fb44bf1461029057806318160ddd146102a35780631e688e10146102b557600080fd5b806301ffc9a71461020057806306fdde0314610228578063075461721461023d578063081812fc14610268575b600080fd5b61021361020e366004611e08565b6104ac565b60405190151581526020015b60405180910390f35b6102306104d7565b60405161021f9190611e7d565b600b54610250906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b610250610276366004611e90565b610569565b61028e610289366004611ec0565b610603565b005b61028e61029e366004611f76565b610719565b6008545b60405190815260200161021f565b600b5461021390600160a01b900460ff1681565b61028e6102d7366004611fbf565b61075a565b61028e6102ea366004611f76565b61078b565b61028e6102fd366004611f76565b6107c8565b6102a7610310366004611ec0565b610805565b61028e610323366004611fbf565b61089b565b61028e610336366004611e90565b6108b6565b6102a7610349366004611e90565b610942565b61023061035c366004611e90565b6109d5565b61025061036f366004611e90565b610a40565b6102a7610382366004611ffb565b610ab7565b61028e610b3e565b61028e610b74565b6102a76103a5366004611e90565b6000908152600e602052604090205490565b600a546001600160a01b0316610250565b610230610c29565b6102a76103de366004611e90565b610c38565b61028e6103f1366004612016565b610d0c565b61028e610404366004612052565b610dd1565b61028e610417366004611f76565b610e09565b61023061042a366004611e90565b610e46565b61028e61043d366004611f76565b610f1d565b610230610f5a565b6102136104583660046120ce565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61028e610494366004611ffb565b610f82565b61028e6104a7366004611ffb565b61101d565b60006001600160e01b0319821663780e9d6360e01b14806104d157506104d1826110e8565b92915050565b6060600080546104e690612101565b80601f016020809104026020016040519081016040528092919081815260200182805461051290612101565b801561055f5780601f106105345761010080835404028352916020019161055f565b820191906000526020600020905b81548152906001019060200180831161054257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166105e75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061060e82610a40565b9050806001600160a01b0316836001600160a01b0316141561067c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016105de565b336001600160a01b038216148061069857506106988133610458565b61070a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105de565b6107148383611138565b505050565b600a546001600160a01b031633146107435760405162461bcd60e51b81526004016105de9061213c565b8051610756906010906020840190611d59565b5050565b61076433826111a6565b6107805760405162461bcd60e51b81526004016105de90612171565b61071483838361129d565b600a546001600160a01b031633146107b55760405162461bcd60e51b81526004016105de9061213c565b8051610756906012906020840190611d59565b600a546001600160a01b031633146107f25760405162461bcd60e51b81526004016105de9061213c565b8051610756906011906020840190611d59565b600061081083610ab7565b82106108725760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016105de565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61071483838360405180602001604052806000815250610dd1565b600b546001600160a01b0316331461090b5760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329036b4b73a32b960411b60448201526064016105de565b61091481611448565b60405181907f39c9392d2d40359a26940c19fc58228c06e7f24bf2926312fc10a520b0ae261990600090a250565b600061094d60085490565b82106109b05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016105de565b600882815481106109c3576109c36121c2565b90600052602060002001549050919050565b6000818152600260205260409020546060906001600160a01b03166109f957600080fd5b6000828152600e602052604081205490600f6010610a16846114ef565b604051602001610a289392919061228e565b60408051601f19818403018152919052949350505050565b6000818152600260205260408120546001600160a01b0316806104d15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016105de565b60006001600160a01b038216610b225760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016105de565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610b685760405162461bcd60e51b81526004016105de9061213c565b610b7260006115ed565b565b600a546001600160a01b03163314610b9e5760405162461bcd60e51b81526004016105de9061213c565b600b54600160a01b900460ff1615610beb5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d195c881a5cc81b1bd8dad95960821b60448201526064016105de565b600b805460ff60a01b1916600160a01b1790556040517f192417b3f16b1ce69e0c59b0376549666650245ffc05e4b2569089dda8589b6690600090a1565b6060600180546104e690612101565b600b546000906001600160a01b03163314610c905760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329036b4b73a32b960411b60448201526064016105de565b610726610c9c60085490565b11158015610cbc5750601e610cb060085490565b610cba9190614ba2565b155b8015610cd057506000610cce60085490565b115b15610cfd57610cfb610cea600a546001600160a01b031690565b610cf6336103e861163f565b6116e9565b505b6104d133836116e9565b919050565b6001600160a01b038216331415610d655760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105de565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ddb33836111a6565b610df75760405162461bcd60e51b81526004016105de90612171565b610e038484848461172a565b50505050565b600a546001600160a01b03163314610e335760405162461bcd60e51b81526004016105de9061213c565b805161075690600c906020840190611d59565b6000818152600260205260409020546060906001600160a01b0316610e6a57600080fd5b6000604051806101c0016040528061018b8152602001614e9061018b91396000848152600e6020526040812054919250610eca610ea6836114ef565b604051602001610eb69190614bb6565b60405160208183030381529060405261175d565b9050610ef4610ed8866114ef565b84601184601286604051602001610eb696959493929190614bd2565b604051602001610f049190614ca3565b6040516020818303038152906040529350505050919050565b600a546001600160a01b03163314610f475760405162461bcd60e51b81526004016105de9061213c565b805161075690600f906020840190611d59565b6060600c604051602001610f6e9190614ce8565b604051602081830303815290604052905090565b600a546001600160a01b03163314610fac5760405162461bcd60e51b81526004016105de9061213c565b6001600160a01b0381166110115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105de565b61101a816115ed565b50565b600a546001600160a01b031633146110475760405162461bcd60e51b81526004016105de9061213c565b600b54600160a01b900460ff16156110945760405162461bcd60e51b815260206004820152601060248201526f135a5b9d195c881a5cc81b1bd8dad95960821b60448201526064016105de565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fad0f299ec81a386c98df0ac27dae11dd020ed1b56963c53a7292e7a3a314539a9060200160405180910390a150565b60006001600160e01b031982166380ac58cd60e01b148061111957506001600160e01b03198216635b5e139f60e01b145b806104d157506301ffc9a760e01b6001600160e01b03198316146104d1565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061116d82610a40565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661121f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016105de565b600061122a83610a40565b9050806001600160a01b0316846001600160a01b031614806112655750836001600160a01b031661125a84610569565b6001600160a01b0316145b8061129557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166112b082610a40565b6001600160a01b0316146113185760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016105de565b6001600160a01b03821661137a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105de565b6113858383836118c5565b611390600082611138565b6001600160a01b03831660009081526003602052604081208054600192906113b9908490614d1a565b90915550506001600160a01b03821660009081526003602052604081208054600192906113e7908490614d31565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061145382610a40565b9050611461816000846118c5565b61146c600083611138565b6001600160a01b0381166000908152600360205260408120805460019290611495908490614d1a565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060816115135750506040805180820190915260018152600360fc1b602082015290565b8160005b811561153d578061152781614d49565b91506115369050600a83614d64565b9150611517565b60008167ffffffffffffffff81111561155857611558611eea565b6040519080825280601f01601f191660200182016040528015611582576020820181803683370190505b5090505b841561129557611597600183614d1a565b91506115a4600a86614ba2565b6115af906030614d31565b60f81b8183815181106115c4576115c46121c2565b60200101906001600160f81b031916908160001a9053506115e6600a86614d64565b9450611586565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008066033333333332d0424486866040516020016116899493929190938452602084019290925260601b6bffffffffffffffffffffffff19166040830152605482015260740190565b6040516020818303038152906040528051906020012060001c6116ac9190614ba2565b6000818152600d602052604090205490915060ff16156116e2576116da846116d5856001614d31565b61163f565b9150506104d1565b9392505050565b6000806116f560085490565b6000818152600e60209081526040808320879055868352600d9091529020805460ff1916600117905590506116e2848261197d565b61173584848461129d565b61174184848484611acb565b610e035760405162461bcd60e51b81526004016105de90614d78565b606081516000141561177d57505060408051602081019091526000815290565b6000604051806060016040528060408152602001614e5060409139905060006003845160026117ac9190614d31565b6117b69190614d64565b6117c1906004614dca565b905060006117d0826020614d31565b67ffffffffffffffff8111156117e8576117e8611eea565b6040519080825280601f01601f191660200182016040528015611812576020820181803683370190505b509050818152600183018586518101602084015b818310156118805760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611826565b60038951066001811461189a57600281146118ab576118b7565b613d3d60f01b6001198301526118b7565b603d60f81b6000198301525b509398975050505050505050565b6001600160a01b0383166119205761191b81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611943565b816001600160a01b0316836001600160a01b031614611943576119438382611bc9565b6001600160a01b03821661195a5761071481611c66565b826001600160a01b0316826001600160a01b031614610714576107148282611d15565b6001600160a01b0382166119d35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105de565b6000818152600260205260409020546001600160a01b031615611a385760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105de565b611a44600083836118c5565b6001600160a01b0382166000908152600360205260408120805460019290611a6d908490614d31565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15611bbe57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b0f903390899088908890600401614de9565b6020604051808303816000875af1925050508015611b4a575060408051601f3d908101601f19168201909252611b4791810190614e1c565b60015b611ba4573d808015611b78576040519150601f19603f3d011682016040523d82523d6000602084013e611b7d565b606091505b508051611b9c5760405162461bcd60e51b81526004016105de90614d78565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611295565b506001949350505050565b60006001611bd684610ab7565b611be09190614d1a565b600083815260076020526040902054909150808214611c33576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611c7890600190614d1a565b60008381526009602052604081205460088054939450909284908110611ca057611ca06121c2565b906000526020600020015490508060088381548110611cc157611cc16121c2565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611cf957611cf9614e39565b6001900381819060005260206000200160009055905550505050565b6000611d2083610ab7565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054611d6590612101565b90600052602060002090601f016020900481019282611d875760008555611dcd565b82601f10611da057805160ff1916838001178555611dcd565b82800160010185558215611dcd579182015b82811115611dcd578251825591602001919060010190611db2565b50611dd9929150611ddd565b5090565b5b80821115611dd95760008155600101611dde565b6001600160e01b03198116811461101a57600080fd5b600060208284031215611e1a57600080fd5b81356116e281611df2565b60005b83811015611e40578181015183820152602001611e28565b83811115610e035750506000910152565b60008151808452611e69816020860160208601611e25565b601f01601f19169290920160200192915050565b6020815260006116e26020830184611e51565b600060208284031215611ea257600080fd5b5035919050565b80356001600160a01b0381168114610d0757600080fd5b60008060408385031215611ed357600080fd5b611edc83611ea9565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611f1b57611f1b611eea565b604051601f8501601f19908116603f01168101908282118183101715611f4357611f43611eea565b81604052809350858152868686011115611f5c57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611f8857600080fd5b813567ffffffffffffffff811115611f9f57600080fd5b8201601f81018413611fb057600080fd5b61129584823560208401611f00565b600080600060608486031215611fd457600080fd5b611fdd84611ea9565b9250611feb60208501611ea9565b9150604084013590509250925092565b60006020828403121561200d57600080fd5b6116e282611ea9565b6000806040838503121561202957600080fd5b61203283611ea9565b91506020830135801515811461204757600080fd5b809150509250929050565b6000806000806080858703121561206857600080fd5b61207185611ea9565b935061207f60208601611ea9565b925060408501359150606085013567ffffffffffffffff8111156120a257600080fd5b8501601f810187136120b357600080fd5b6120c287823560208401611f00565b91505092959194509250565b600080604083850312156120e157600080fd5b6120ea83611ea9565b91506120f860208401611ea9565b90509250929050565b600181811c9082168061211557607f821691505b6020821081141561213657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b8054600090600181811c90808316806121f257607f831692505b602080841082141561221457634e487b7160e01b600052602260045260246000fd5b818015612228576001811461223957612266565b60ff19861689528489019650612266565b60008881526020902060005b8681101561225e5781548b820152908501908301612245565b505084890196505b50505050505092915050565b60008151612284818560208601611e25565b9290920192915050565b7f646174613a746578742f68746d6c2c25334368746d6c2533452533436865616481527f2533452533437363726970742532307372632533442532320000000000000000602082015260006122e660388301866121d8565b7412991912991834b73a32b3b934ba3c9299a212991960591b815261230e60158201866121d8565b90507f25323225323063726f73736f726967696e253344253232616e6f6e796d6f757381527f2532322533452533432532467363726970742533452533437374796c6525334560208201527f68746d6c2537426865696768742533413130302532352533426f766572666c6f60408201527f7725334168696464656e253744626f64792537426d696e2d686569676874253360608201527f413130302532352533426d617267696e2533413025334270616464696e67253360808201527f41302533426f766572666c6f7725334168696464656e2533426261636b67726f60a08201527f756e642d636f6c6f7225334125323331313125374463616e766173253742706160c08201527f6464696e67253341302533426d617267696e2533416175746f2533426469737060e08201527f6c6179253341626c6f636b253342706f736974696f6e2533416162736f6c75746101008201527f65253342746f7025334130253342626f74746f6d253341302533426c656674256101208201527f334130253342726967687425334130253342696d6167652d72656e646572696e6101408201527f67253341706978656c617465642537442533432532467374796c6525334525336101608201527f436d657461253230636861727365742533442532327574662d382532322533456101808201527f25334325324668656164253345253343626f64792533452533437363726970746101a08201527f25334576617225323067732533447061727365496e74253238000000000000006101c0820152614b8261255f6101d9830186612272565b7f253239253342636c6173732532304d78253742636f6e7374727563746f72253281527f387425324372253239253742746869732e725a25334474253243746869732e6360208201527f6f6c7325334472253243746869732e646174612533444172726179253238746860408201527f69732e725a2532392e66696c6c2532382532392e6d617025323825323825323860608201527f2532392533442533454172726179253238746869732e636f6c732532392e666960808201527f6c6c25323830253239253239253239253744636f70792532382532392537426c60a08201527f6574253230742533446e65772532304d78253238746869732e725a253243746860c08201527f69732e636f6c73253239253342666f722532386c65742532307225334430253360e08201527f4272253343746869732e725a25334272253242253242253239666f722532386c6101008201527f6574253230732533443025334273253343746869732e636f6c732533427325326101208201527f42253242253239742e64617461253542722535442535427325354425334474686101408201527f69732e64617461253542722535442535427325354425334272657475726e25326101608201527f307425374473746174696325323066726f6d41727261792532387425323925376101808201527f4272657475726e2532306e65772532304d78253238742e6c656e6774682532436101a08201527f312532392e6d61702532382532382532387225324373253239253344253345746101c08201527f25354273253544253239253239253744737461746963253230737562747261636101e08201527f7425323874253243722532392537426966253238742e725a25334425334425336102008201527f44722e725a253236253236742e636f6c73253344253344253344722e636f6c736102208201527f25323972657475726e2532306e65772532304d78253238742e725a253243742e6102408201527f636f6c732532392e6d61702532382532382532387325324361253243692532396102608201527f253344253345742e6461746125354261253544253542692535442d722e6461746102808201527f612535426125354425354269253544253239253239253744746f4172726179256102a08201527f32382532392537426c657425323074253344253542253544253342666f7225326102c08201527f386c6574253230722533443025334272253343746869732e725a2533427225326102e08201527f42253242253239666f722532386c6574253230732533443025334273253343746103008201527f6869732e636f6c7325334273253242253242253239742e7075736825323874686103208201527f69732e64617461253542722535442535427325354425323925334272657475726103408201527f6e2532307425374472647a25323825323925374272657475726e2532307468696103608201527f732e6d61702532382532387425334425334532253241726e672532382532392d6103808201527f31253239253239253744616464253238742532392537426966253238742532306103a08201527f696e7374616e63656f662532304d782532392537426966253238746869732e726103c08201527f5a253231253344253344742e725a253743253743746869732e636f6c732532316103e08201527f253344253344742e636f6c7325323972657475726e25334272657475726e25326104008201527f30746869732e6d617025323825323825323872253243732532436125323925336104208201527f4425334572253242742e646174612535427325354425354261253544253239256104408201527f323925374472657475726e253230746869732e6d6170253238253238722533446104608201527f25334572253242742532392532392537447374617469632532307472702532386104808201527f7425323925374272657475726e2532306e65772532304d78253238742e636f6c6104a08201527f73253243742e725a2532392e6d617025323825323825323872253243732532436104c08201527f61253239253344253345742e64617461253542612535442535427325354425326104e08201527f392532392537447374617469632532306d7470253238742532437225323925376105008201527f426966253238742e636f6c73253344253344253344722e725a253239726574756105208201527f726e2532306e65772532304d78253238742e725a253243722e636f6c732532396105408201527f2e6d6170253238253238253238732532436125324369253239253344253345256105608201527f37426c65742532306f25334430253342666f722532386c6574253230732533446105808201527f3025334273253343742e636f6c73253342732532422532422532396f253242256105a08201527f3344742e646174612535426125354425354273253544253241722e64617461256105c08201527f3542732535442535426925354425334272657475726e2532306f2537442532396105e08201527f2532392537446d747025323874253239253742696625323874253230696e73746106008201527f616e63656f662532304d782532392537426966253238746869732e725a2532316106208201527f253344253344742e725a253743253743746869732e636f6c73253231253344256106408201527f3344742e636f6c7325323972657475726e25334272657475726e2532307468696106608201527f732e6d61702532382532382532387225324373253243612532392533442533456106808201527f72253241742e64617461253542732535442535426125354425323925323925376106a08201527f4472657475726e253230746869732e6d617025323825323872253344253345726106c08201527f253241742532392532392537446d617025323874253239253742666f722532386106e08201527f6c6574253230722533443025334272253343746869732e725a253342722532426107008201527f253242253239666f722532386c657425323073253344302533427325334374686107208201527f69732e636f6c73253342732532422532422532392537426c65742532306125336107408201527f44746869732e646174612535427225354425354273253544253342746869732e6107608201527f64617461253542722535442535427325354425334474253238612532437225326107808201527f437325323925374472657475726e2532307468697325374473746174696325326107a08201527f306d6170253238742532437225323925374272657475726e2532306e657725326107c08201527f304d78253238742e725a253243742e636f6c732532392e6d61702532382532386107e08201527f25323873253243612532436925323925334425334572253238742e64617461256108008201527f35426125354425354269253544253243612532436925323925323925323925376108208201527f4473657269616c697a6525323825323925374272657475726e2532304a534f4e6108408201527f2e737472696e67696679253238746869732532392537447374617469632532306108608201527f64737225323874253239253742253232737472696e67253232253344253344746108808201527f7970656f6625323074253236253236253238742533444a534f4e2e70617273656108a08201527f253238742532392532392533426c6574253230722533446e65772532304d78256108c08201527f3238742e725a253243742e636f6c7325323925334272657475726e253230722e6108e08201527f64617461253344742e6461746125324372253744253744253232756e646566696109008201527f6e6564253232253231253344747970656f662532306d6f64756c6525323625326109208201527f362532386d6f64756c652e6578706f7274732533444d782532392533432532466109408201527f736372697074253345253343736372697074253345636c6173732532304141466109608201527f253742636f6e7374727563746f722532386925324374253239253742746869736109808201527f2e66756e6325334469253243746869732e6466756e63253344742537442537446109a08201527f6c65742532307369676d6f69642533446e6577253230414146253238253238696109c08201527f25334425334531253246253238312532424d6174682e6578702532382d6925326109e08201527f392532392532392532432532386925334425334569253241253238312d692532610a008201527f39253239253239253342636c6173732532304e4e4e253742636f6e7374727563610a208201527f746f72253238692532437425324373253239253742253238746869732e736565610a408201527f642533446773253243726e672533447372616e64253238746869732e73656564610a608201527f253239253243746869732e695f6e25334469253243746869732e685f6e253344610a808201527f74253243746869732e6f5f6e25334473253243746869732e775f68692533446e610aa08201527f65772532304d78253238746869732e685f6e253243746869732e695f6e253239610ac08201527f253243746869732e775f686f2533446e65772532304d78253238746869732e6f610ae08201527f5f6e253243746869732e685f6e253239253243746869732e775f68692e72647a610b008201527f253238253239253243746869732e775f686f2e72647a25323825323925324374610b208201527f6869732e626961735f682533446e65772532304d78253238746869732e685f6e610b408201527f25324331253239253243746869732e626961735f6f2533446e65772532304d78610b608201527f253238746869732e6f5f6e25324331253239253243746869732e626961735f68610b808201527f2e72647a253238253239253243746869732e626961735f6f2e72647a25323825610ba08201527f3239253239253243746869732e7365744c6561726e696e675261746525323825610bc08201527f3239253243746869732e73657441414625323825323925374470726564696374610be08201527f253238692532392537426c6574253230742533444d782e66726f6d4172726179610c008201527f25323869253239253243732533444d782e6d7470253238746869732e775f6869610c208201527f25324374253239253342732e616464253238746869732e626961735f68253239610c408201527f253243732e6d6170253238746869732e615f662e66756e632532392533426c65610c608201527f74253230652533444d782e6d7470253238746869732e775f686f253243732532610c808201527f3925334272657475726e253230652e616464253238746869732e626961735f6f610ca08201527f253239253243652e6d6170253238746869732e615f662e66756e632532392532610cc08201527f43652e746f41727261792532382532392537447365744c6561726e696e675261610ce08201527f7465253238692533442e31253239253742746869732e6c5f7225334469253744610d008201527f736574414146253238692533447369676d6f6964253239253742746869732e61610d208201527f5f662533446925374473657269616c697a652532382532392537427265747572610d408201527f6e2532304a534f4e2e737472696e676966792532387468697325323925374473610d608201527f746174696325323064737225323869253239253742253232737472696e672532610d808201527f32253344253344747970656f6625323069253236253236253238692533444a53610da08201527f4f4e2e7061727365253238692532392532392533426c6574253230742533446e610dc08201527f65772532304e4e4e253238692e695f6e253243692e685f6e253243692e6f5f6e610de08201527f25323925334272657475726e253230742e775f68692533444d782e6473722532610e008201527f38692e775f6869253239253243742e775f686f2533444d782e64737225323869610e208201527f2e775f686f253239253243742e626961735f682533444d782e64737225323869610e408201527f2e626961735f68253239253243742e626961735f6f2533444d782e6473722532610e608201527f38692e626961735f6f253239253243742e6c5f72253344692e6c5f7225324374610e808201527f253744636f707925323825323925374272657475726e2532306e65772532304e610ea08201527f4e4e253238746869732532392537446d74542532386925323925374266756e63610ec08201527f74696f6e253230742532387425323925374272657475726e253230726e672532610ee08201527f38253239253343692533467425324272616e646f6d476175737369616e253238610f008201527f302532432e3125323925334174253744746869732e775f68692e6d6170253238610f208201527f74253239253243746869732e775f686f2e6d6170253238742532392532437468610f408201527f69732e626961735f682e6d617025323874253239253243746869732e62696173610f608201527f5f6f2e6d61702532387425323925374425374425334325324673637269707425610f808201527f3345253343736372697074253345636c617373253230417274253742636f6e73610fa08201527f74727563746f7225323874253239253742746869732e73636f72652533443025610fc08201527f3243746869732e6669746e65737325334430253243746869732e6672616d6525610fe08201527f334430253243746869732e7261746525334431253243746869732e627261696e6110008201527f25334474253346742e636f70792532382532392533416e65772532304e4e4e256110208201527f32383125324338253243333825323925374463764325323874253243722532436110408201527f6525323925374272657475726e2535424d6174682e726f756e642532383235356110608201527f25324174253542302535442532422e333525324172253241746869732e6f75546110808201527f25354233352535442532392532434d6174682e726f756e6425323832353525326110a08201527f4174253542312535442532422e333525324172253241746869732e6f755425356110c08201527f4233362535442532392532434d6174682e726f756e64253238323535253241746110e08201527f253542322535442532392532422e333525324172253241746869732e6f7554256111008201527f3542333725354425354425374467434e253238742532437225324365253239256111208201527f3742742532352533443335253243742533444d6174682e726f756e64253238256111408201527f32384d6174682e73696e253238742532392532423125323925324632253241356111608201527f352532392d31253243746869732e627261696e2e7365656425323533253344256111808201527f334430253346742533442d312532414d6174682e6162732532387425323925336111a08201527f41746869732e627261696e2e73656564253235332533442533443125323625326111c08201527f36253238742533444d6174682e616273253238742532392532392533427265746111e08201527f75726e253230746869732e6f75542535423625324233253241742535442533466112008201527f253542746869732e6f75542535423625324233253241742535442532437468696112208201527f732e6f7554253542362532423425324174253544253243746869732e6f7554256112408201527f35423625324235253241742535442535442533412535422d312532432d3125326112608201527f432d3125354425374473686f77253238742532437225324365253239253742706112808201527f462537432537432532387046253344636f6c6f722532383025323925324366696112a08201527f6c6c2532387046253239253239253342766172253230692532436e25334430256112c08201527f32424d6174682e726f756e6425323835253241746869732e6f755425354230256112e08201527f3544253239253243612533444d6174682e6d6178253238746869732e6f7554256113008201527f35423125354425324233652d37253241742532432e30312532392532417425326113208201527f463132253243732533444d6174682e6d6178253238746869732e6f75542535426113408201527f3225354425324233652d37253241722532432e303125323925324172253246316113608201527f322532436f25334431326533253241746869732e6f75542535423425354425326113808201527f42253238312d386533253241746869732e6f75542535423325354425323925326113a08201527f43752533444d6174682e726f756e64253238612532416f2532427325324125326113c08201527f38312d6f2532392532416e25323925324368253344746869732e67434e2532386113e08201527f752532392533422d312533442533446825354230253544253346746869732e636114008201527f66253344704625334125323869253344746869732e63764325323868253243746114208201527f2532437225323925324364726177696e67436f6e746578742e66696c6c5374796114408201527f6c652533442532327267622532382532322532426925354230253544253242256114608201527f32322532432532322532426925354231253544253242253232253243253232256114808201527f32426925354232253544253242253232253239253232253243746869732e63666114a08201527f25334469253243253232726762612532383025324325323030253243253230306114c08201527f253243253230302e303025323925323225334425334425334464726177696e676114e08201527f436f6e746578742e66696c6c5374796c6525334625323864726177696e67436f6115008201527f6e746578742e66696c6c5374796c6525334425363072676225323825323425376115208201527f42704625354230253544253744253243253230253234253742704625354231256115408201527f35442537442532432532302532342537427046253542322535442537442532396115608201527f253630253243746869732e6366253344704625323925334170462533446925326115808201527f392533426c65742532306c2533443425324125323872253241652532417769646115a08201527f7468253242742532416525323925324363253344253542706978656c732535426115c08201527f6c253544253243706978656c732535426c25324231253544253243706978656c6115e08201527f732535426c25324232253544253243706978656c732535426c253242332535446116008201527f2535442533426325354230253544253344253344746869732e636625354230256116208201527f35442532362532366325354231253544253344253344746869732e63662535426116408201527f312535442532362532366325354232253544253344253344746869732e6366256116608201527f35423225354425374325374364726177696e67436f6e746578742e66696c6c526116808201527f65637425323874253241652532437225324165253243652532436525323925376116a08201527f446d7454253238253239253742746869732e627261696e2e6d74542532382e396116c08201527f2532392537447468696e6b253238253239253742746869732e6672616d6525326116e08201527f42253344746869732e7261746525324335652d36253241746869732e6672616d6117008201527f652533453135253236253236253238746869732e6672616d652533442d3525326117208201527f436372412e627261696e2e6d74542532382e392532392532392533426c6574256117408201527f323074253344253542253544253342742535423025354425334435652d3625326117608201527f41746869732e6672616d652d352533426c657425323072253344746869732e626117808201527f7261696e2e7072656469637425323874253239253342746869732e6f755425336117a08201527f4472253744757064617465253238253239253742746869732e73636f726525326117c08201527f42253242253744253744766172253230704625334266756e6374696f6e2532306117e08201527f7069636b4f6e652532382532392537426c6574253230742533443025324372256118008201527f334472616e646f6d25323831253239253342666f7225323825334272253345306118208201527f253342253239722d253344737641253542742535442e6669746e6573732532436118408201527f74253242253242253342742d2d2533426c6574253230652533447376412535426118608201527f74253544253243692533446e6577253230417274253238652e627261696e25326118808201527f3925334272657475726e253230692e6d745425323825323925324369253744666118a08201527f756e6374696f6e2532306363462532382532392537426c6574253230742533446118c08201527f30253342666f722532386c6574253230722532306f66253230737641253239746118e08201527f253242253344722e73636f7265253342666f722532386c6574253230722532306119008201527f6f66253230737641253239722e6669746e657373253344722e73636f726525326119208201527f467425374466756e6374696f6e2532307372616e6425323874253239253742726119408201527f657475726e25323066756e6374696f6e253238253239253742766172253230726119608201527f253344742532422533443138333135363538313325334272657475726e2532306119808201527f722533444d6174682e696d756c253238722535457225334525334525334531356119a08201527f25324331253743722532392532432532382532382532387225354525334472256119c08201527f32424d6174682e696d756c2532387225354572253345253345253345372532436119e08201527f3631253743722532392532392535457225334525334525334531342532392533611a008201527f452533452533453025323925324634323934393637323936253744253744636f611a208201527f6e7374253230544f54414c25334431302533426c65742532306372412532436c611a408201527f61737446696c6c253243726e6725324361727473253344253542253544253243611a608201527f737641253344253542253544253243636e7425334430253243617274496e6465611a808201527f7825334430253342766172253230705325334435253243636f6c253344253232611aa08201527f626c61636b25323225334266756e6374696f6e25323077696e646f7752657369611ac08201527f7a656425323825323925374270532533444d6174682e6d61782532384d617468611ae08201527f2e726f756e642532384d6174682e6d696e25323831653325324377696e646f77611b008201527f576964746825323925324632303025323925324333253239253243726573697a611b208201527f6543616e7661732532384d6174682e6d696e2532383165332532434d6174682e611b408201527f6d617825323877696e646f775769647468253243353030253239253239253243611b608201527f4d6174682e6d696e2532383165332532434d6174682e6d617825323877696e64611b808201527f6f7748656967687425324335303025323925323925323925374466756e637469611ba08201527f6f6e2532307365747570253238253239253742706978656c44656e7369747925611bc08201527f323831253239253243636f6c6f724d6f64652532385247422532392532436372611be08201527f6561746543616e7661732532384d6174682e6d696e2532383165332532434d61611c008201527f74682e6d617825323877696e646f775769647468253243353030253239253239611c208201527f2532434d6174682e6d696e2532383165332532434d6174682e6d617825323877611c408201527f696e646f77486569676874253243353030253239253239253239253243705325611c608201527f33444d6174682e6d61782532384d6174682e726f756e642532384d6174682e6d611c808201527f696e25323831653325324377696e646f77576964746825323925324632303025611ca08201527f323925324333253239253342666f722532387661722532307425334430253342611cc08201527f74253343544f54414c25334274253242253242253239617274732e7075736825611ce08201527f32386e65772532304172742532392533426672616d6552617465253238313025611d008201527f32392532436e65787441727425323825323925374466756e6374696f6e253230611d208201527f6e657874417274253238253239253742637241253344617274732e7368696674611d408201527f2532382532392532436372412e757064617465253238253239253243636f6e73611d608201527f6f6c652e6c6f6725323862746f612532386372412e627261696e2e7365656425611d808201527f323925323925324372656472617725323825323925374466756e6374696f6e25611da08201527f3230647261772532382532392537426e6f5374726f6b65253238253239253243611dc08201527f6c6f6164506978656c732532382532392532436372412e7468696e6b25323825611de08201527f3239253342666f72253238766172253230742533443025334274253343686569611e008201527f676874253246705325334274253242253242253239666f722532387661722532611e208201527f3072253344302533427225334377696474682532467053253342722532422532611e408201527f422532396372412e73686f772532387225324374253243705325323925374466611e608201527f756e6374696f6e2532306b657950726573736564253238253239253742253232611e808201527f7a2532322533442533442533446b65792532362532366372412e627261696e2e611ea08201527f6d74542532382e31253239253243253232642532322533442533442533446b65611ec08201527f792532362532366372412e726174652532422532422532432532326125323225611ee08201527f33442533442533446b65792532362532366372412e726174652d2d2537442533611f008201527f43253246736372697074253345253343253246626f6479253345253343253246611f208201526668746d6c25334560c81b611f40820152611f470190565b9695505050505050565b634e487b7160e01b600052601260045260246000fd5b600082614bb157614bb1614b8c565b500690565b60008251614bc8818460208701611e25565b9190910192915050565b707b226e616d65223a202241786f6e73202360781b81528651600090614bff816011850160208c01611e25565b875190830190614c16816011840160208c01611e25565b6a11161134b6b0b3b2911d1160a91b60119290910191820152614c3c601c8201886121d8565b90508551614c4e818360208a01611e25565b7211161130b734b6b0ba34b7b72fbab936111d1160691b9101908152614c7760138201866121d8565b90508351614c89818360208801611e25565b61227d60f01b910190815260020198975050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251614cdb81601d850160208701611e25565b91909101601d0192915050565b66697066733a2f2f60c81b815260006116e260078301846121d8565b634e487b7160e01b600052601160045260246000fd5b600082821015614d2c57614d2c614d04565b500390565b60008219821115614d4457614d44614d04565b500190565b6000600019821415614d5d57614d5d614d04565b5060010190565b600082614d7357614d73614b8c565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000816000190483118215151615614de457614de4614d04565b500290565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614b8290830184611e51565b600060208284031215614e2e57600080fd5b81516116e281611df2565b634e487b7160e01b600052603160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f222c20226465736372697074696f6e223a202241786f6e7320697320616e20696e66696e69746520636f6c6c656374696f6e206f662067656e6572617469766520706978656c206172742c206c6f6f6b696e6720696e746f20746865206d696e64206f662061206e657572616c206e6574776f726b2028746875732c206e6f2064697374696e6374207472616974732063616e2062652064697374696c6c6564292e2041206e65772041786f6e2069732063686f73656e20616e642061756374696f6e6564206f6e2d636861696e206461696c79206261736564206f6e20646563656e7472616c697a656420636f6d6d756e69747920766f74696e672e20417274206973206d6972726f726564207065726d616e656e746c79206f6e2d636861696e2e2041756374696f6e732061726520636f6e647563746564207573696e67206120667265652c20756e747261646561626c6520746f6b656e206f627461696e65642062792070617274696369706174696e6720696e2074686520766f74696e672070726f636573732ea2646970667358221220a57c06b9bab8422a923649db6f74a577646369d0055672a4060ff34d368b027764736f6c634300080a0033
Deployed Bytecode Sourcemap
48275:18594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42034:224;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;42034:224:0;;;;;;;;29926:100;;;:::i;:::-;;;;;;;:::i;48678:21::-;;;;;-1:-1:-1;;;;;48678:21:0;;;;;;-1:-1:-1;;;;;1529:32:1;;;1511:51;;1499:2;1484:18;48678:21:0;1365:203:1;31485:221:0;;;;;;:::i;:::-;;:::i;31008:411::-;;;;;;:::i;:::-;;:::i;:::-;;65450:120;;;;;;:::i;:::-;;:::i;42674:113::-;42762:10;:17;42674:113;;;3566:25:1;;;3554:2;3539:18;42674:113:0;3420:177:1;48750:26:0;;;;;-1:-1:-1;;;48750:26:0;;;;;;32375:339;;;;;;:::i;:::-;;:::i;65921:118::-;;;;;;:::i;:::-;;:::i;65693:102::-;;;;;;:::i;:::-;;:::i;42342:256::-;;;;;;:::i;:::-;;:::i;32785:185::-;;;;;;:::i;:::-;;:::i;51632:123::-;;;;;;:::i;:::-;;:::i;42864:233::-;;;;;;:::i;:::-;;:::i;52794:9102::-;;;;;;:::i;:::-;;:::i;29620:239::-;;;;;;:::i;:::-;;:::i;29350:208::-;;;;;;:::i;:::-;;:::i;9011:94::-;;;:::i;66474:150::-;;;:::i;64004:205::-;;;;;;:::i;:::-;64100:7;64146:25;;;:15;:25;;;;;;;64004:205;8360:87;8433:6;;-1:-1:-1;;;;;8433:6:0;8360:87;;30095:104;;;:::i;50917:329::-;;;;;;:::i;:::-;;:::i;31778:295::-;;;;;;:::i;:::-;;:::i;33041:328::-;;;;;;:::i;:::-;;:::i;66730:136::-;;;;;;:::i;:::-;;:::i;62051:1819::-;;;;;;:::i;:::-;;:::i;65183:100::-;;;;;;:::i;:::-;;:::i;52594:137::-;;;:::i;32144:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;32265:25:0;;;32241:4;32265:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32144:164;9260:192;;;;;;:::i;:::-;;:::i;66160:167::-;;;;;;:::i;:::-;;:::i;42034:224::-;42136:4;-1:-1:-1;;;;;;42160:50:0;;-1:-1:-1;;;42160:50:0;;:90;;;42214:36;42238:11;42214:23;:36::i;:::-;42153:97;42034:224;-1:-1:-1;;42034:224:0:o;29926:100::-;29980:13;30013:5;30006:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29926:100;:::o;31485:221::-;31561:7;34968:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34968:16:0;31581:73;;;;-1:-1:-1;;;31581:73:0;;6002:2:1;31581:73:0;;;5984:21:1;6041:2;6021:18;;;6014:30;6080:34;6060:18;;;6053:62;-1:-1:-1;;;6131:18:1;;;6124:42;6183:19;;31581:73:0;;;;;;;;;-1:-1:-1;31674:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31674:24:0;;31485:221::o;31008:411::-;31089:13;31105:23;31120:7;31105:14;:23::i;:::-;31089:39;;31153:5;-1:-1:-1;;;;;31147:11:0;:2;-1:-1:-1;;;;;31147:11:0;;;31139:57;;;;-1:-1:-1;;;31139:57:0;;6415:2:1;31139:57:0;;;6397:21:1;6454:2;6434:18;;;6427:30;6493:34;6473:18;;;6466:62;-1:-1:-1;;;6544:18:1;;;6537:31;6585:19;;31139:57:0;6213:397:1;31139:57:0;7228:10;-1:-1:-1;;;;;31231:21:0;;;;:62;;-1:-1:-1;31256:37:0;31273:5;7228:10;32144:164;:::i;31256:37::-;31209:168;;;;-1:-1:-1;;;31209:168:0;;6817:2:1;31209:168:0;;;6799:21:1;6856:2;6836:18;;;6829:30;6895:34;6875:18;;;6868:62;6966:26;6946:18;;;6939:54;7010:19;;31209:168:0;6615:420:1;31209:168:0;31390:21;31399:2;31403:7;31390:8;:21::i;:::-;31078:341;31008:411;;:::o;65450:120::-;8433:6;;-1:-1:-1;;;;;8433:6:0;7228:10;8580:23;8572:68;;;;-1:-1:-1;;;8572:68:0;;;;;;;:::i;:::-;65532:30;;::::1;::::0;:13:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;:::-;;65450:120:::0;:::o;32375:339::-;32570:41;7228:10;32603:7;32570:18;:41::i;:::-;32562:103;;;;-1:-1:-1;;;32562:103:0;;;;;;;:::i;:::-;32678:28;32688:4;32694:2;32698:7;32678:9;:28::i;65921:118::-;8433:6;;-1:-1:-1;;;;;8433:6:0;7228:10;8580:23;8572:68;;;;-1:-1:-1;;;8572:68:0;;;;;;;:::i;:::-;66003:28;;::::1;::::0;:12:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;65693:102::-:0;8433:6;;-1:-1:-1;;;;;8433:6:0;7228:10;8580:23;8572:68;;;;-1:-1:-1;;;8572:68:0;;;;;;;:::i;:::-;65767:20;;::::1;::::0;:8:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;42342:256::-:0;42439:7;42475:23;42492:5;42475:16;:23::i;:::-;42467:5;:31;42459:87;;;;-1:-1:-1;;;42459:87:0;;8021:2:1;42459:87:0;;;8003:21:1;8060:2;8040:18;;;8033:30;8099:34;8079:18;;;8072:62;-1:-1:-1;;;8150:18:1;;;8143:41;8201:19;;42459:87:0;7819:407:1;42459:87:0;-1:-1:-1;;;;;;42564:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;42342:256::o;32785:185::-;32923:39;32940:4;32946:2;32950:7;32923:39;;;;;;;;;;;;:16;:39::i;51632:123::-;50805:6;;-1:-1:-1;;;;;50805:6:0;50791:10;:20;50783:57;;;;-1:-1:-1;;;50783:57:0;;8433:2:1;50783:57:0;;;8415:21:1;8472:2;8452:18;;;8445:30;-1:-1:-1;;;8491:18:1;;;8484:54;8555:18;;50783:57:0;8231:348:1;50783:57:0;51700:13:::1;51706:6;51700:5;:13::i;:::-;51729:18;::::0;51740:6;;51729:18:::1;::::0;;;::::1;51632:123:::0;:::o;42864:233::-;42939:7;42975:30;42762:10;:17;;42674:113;42975:30;42967:5;:38;42959:95;;;;-1:-1:-1;;;42959:95:0;;8786:2:1;42959:95:0;;;8768:21:1;8825:2;8805:18;;;8798:30;8864:34;8844:18;;;8837:62;-1:-1:-1;;;8915:18:1;;;8908:42;8967:19;;42959:95:0;8584:408:1;42959:95:0;43072:10;43083:5;43072:17;;;;;;;;:::i;:::-;;;;;;;;;43065:24;;42864:233;;;:::o;52794:9102::-;34944:4;34968:16;;;:7;:16;;;;;;52886:13;;-1:-1:-1;;;;;34968:16:0;52917:26;;;;;;52954:18;52975:25;;;:15;:25;;;;;;;53173:7;53241:13;53767:37;52975:25;53767;:37::i;:::-;53061:8786;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;53061:8786:0;;;;;;;;;;52794:9102;-1:-1:-1;;;;52794:9102:0:o;29620:239::-;29692:7;29728:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29728:16:0;29763:19;29755:73;;;;-1:-1:-1;;;29755:73:0;;29443:2:1;29755:73:0;;;29425:21:1;29482:2;29462:18;;;29455:30;29521:34;29501:18;;;29494:62;-1:-1:-1;;;29572:18:1;;;29565:39;29621:19;;29755:73:0;29241:405:1;29350:208:0;29422:7;-1:-1:-1;;;;;29450:19:0;;29442:74;;;;-1:-1:-1;;;29442:74:0;;29853:2:1;29442:74:0;;;29835:21:1;29892:2;29872:18;;;29865:30;29931:34;29911:18;;;29904:62;-1:-1:-1;;;29982:18:1;;;29975:40;30032:19;;29442:74:0;29651:406:1;29442:74:0;-1:-1:-1;;;;;;29534:16:0;;;;;:9;:16;;;;;;;29350:208::o;9011:94::-;8433:6;;-1:-1:-1;;;;;8433:6:0;7228:10;8580:23;8572:68;;;;-1:-1:-1;;;8572:68:0;;;;;;;:::i;:::-;9076:21:::1;9094:1;9076:9;:21::i;:::-;9011:94::o:0;66474:150::-;8433:6;;-1:-1:-1;;;;;8433:6:0;7228:10;8580:23;8572:68;;;;-1:-1:-1;;;8572:68:0;;;;;;;:::i;:::-;49500:14:::1;::::0;-1:-1:-1;;;49500:14:0;::::1;;;49499:15;49491:44;;;::::0;-1:-1:-1;;;49491:44:0;;30264:2:1;49491:44:0::1;::::0;::::1;30246:21:1::0;30303:2;30283:18;;;30276:30;-1:-1:-1;;;30322:18:1;;;30315:46;30378:18;;49491:44:0::1;30062:340:1::0;49491:44:0::1;66555:14:::2;:21:::0;;-1:-1:-1;;;;66555:21:0::2;-1:-1:-1::0;;;66555:21:0::2;::::0;;66602:14:::2;::::0;::::2;::::0;66555:21;;66602:14:::2;66474:150::o:0;30095:104::-;30151:13;30184:7;30177:14;;;;;:::i;50917:329::-;50805:6;;50983:7;;-1:-1:-1;;;;;50805:6:0;50791:10;:20;50783:57;;;;-1:-1:-1;;;50783:57:0;;8433:2:1;50783:57:0;;;8415:21:1;8472:2;8452:18;;;8445:30;-1:-1:-1;;;8491:18:1;;;8484:54;8555:18;;50783:57:0;8231:348:1;50783:57:0;51024:4:::1;51007:13;42762:10:::0;:17;;42674:113;51007:13:::1;:21;;:48;;;;;51048:2;51032:13;42762:10:::0;:17;;42674:113;51032:13:::1;:18;;;;:::i;:::-;:23:::0;51007:48:::1;:69;;;;;51075:1;51059:13;42762:10:::0;:17;;42674:113;51059:13:::1;:17;51007:69;51003:189;;;51093:52;51101:7;8433:6:::0;;-1:-1:-1;;;;;8433:6:0;;8360:87;51101:7:::1;51110:34;51127:10;51139:4;51110:16;:34::i;:::-;51093:7;:52::i;:::-;;51003:189;51211:27;51219:10;51231:6;51211:7;:27::i;50851:1::-;50917:329:::0;;;:::o;31778:295::-;-1:-1:-1;;;;;31881:24:0;;7228:10;31881:24;;31873:62;;;;-1:-1:-1;;;31873:62:0;;30858:2:1;31873:62:0;;;30840:21:1;30897:2;30877:18;;;30870:30;30936:27;30916:18;;;30909:55;30981:18;;31873:62:0;30656:349:1;31873:62:0;7228:10;31948:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31948:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31948:53:0;;;;;;;;;;32017:48;;540:41:1;;;31948:42:0;;7228:10;32017:48;;513:18:1;32017:48:0;;;;;;;31778:295;;:::o;33041:328::-;33216:41;7228:10;33249:7;33216:18;:41::i;:::-;33208:103;;;;-1:-1:-1;;;33208:103:0;;;;;;;:::i;:::-;33322:39;33336:4;33342:2;33346:7;33355:5;33322:13;:39::i;:::-;33041:328;;;;:::o;66730:136::-;8433:6;;-1:-1:-1;;;;;8433:6:0;7228:10;8580:23;8572:68;;;;-1:-1:-1;;;8572:68:0;;;;;;;:::i;:::-;66821:37;;::::1;::::0;:16:::1;::::0;:37:::1;::::0;::::1;::::0;::::1;:::i;62051:1819::-:0;34944:4;34968:16;;;:7;:16;;;;;;62153:13;;-1:-1:-1;;;;;34968:16:0;62184:26;;;;;;62231:25;:425;;;;;;;;;;;;;;;;;62677:18;62698:25;;;:15;:25;;;;;;62231:425;;-1:-1:-1;62768:95:0;62822:37;62698:25;62822;:37::i;:::-;62805:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;62768:23;:95::i;:::-;62734:129;;63022:806;63262:35;63288:8;63262:25;:35::i;:::-;63336:11;63438:8;63485:17;63601:12;63652:17;63149:598;;;;;;;;;;;;;:::i;63022:806::-;62929:918;;;;;;;;:::i;:::-;;;;;;;;;;;;;62884:978;;;;;62051:1819;;;:::o;65183:100::-;8433:6;;-1:-1:-1;;;;;8433:6:0;7228:10;8580:23;8572:68;;;;-1:-1:-1;;;8572:68:0;;;;;;;:::i;:::-;65257:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;52594:137::-:0;52638:13;52705:16;52677:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;52663:60;;52594:137;:::o;9260:192::-;8433:6;;-1:-1:-1;;;;;8433:6:0;7228:10;8580:23;8572:68;;;;-1:-1:-1;;;8572:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9349:22:0;::::1;9341:73;;;::::0;-1:-1:-1;;;9341:73:0;;34051:2:1;9341:73:0::1;::::0;::::1;34033:21:1::0;34090:2;34070:18;;;34063:30;34129:34;34109:18;;;34102:62;-1:-1:-1;;;34180:18:1;;;34173:36;34226:19;;9341:73:0::1;33849:402:1::0;9341:73:0::1;9425:19;9435:8;9425:9;:19::i;:::-;9260:192:::0;:::o;66160:167::-;8433:6;;-1:-1:-1;;;;;8433:6:0;7228:10;8580:23;8572:68;;;;-1:-1:-1;;;8572:68:0;;;;;;;:::i;:::-;49500:14:::1;::::0;-1:-1:-1;;;49500:14:0;::::1;;;49499:15;49491:44;;;::::0;-1:-1:-1;;;49491:44:0;;30264:2:1;49491:44:0::1;::::0;::::1;30246:21:1::0;30303:2;30283:18;;;30276:30;-1:-1:-1;;;30322:18:1;;;30315:46;30378:18;;49491:44:0::1;30062:340:1::0;49491:44:0::1;66255:6:::2;:16:::0;;-1:-1:-1;;;;;;66255:16:0::2;-1:-1:-1::0;;;;;66255:16:0;::::2;::::0;;::::2;::::0;;;66297:22:::2;::::0;1511:51:1;;;66297:22:0::2;::::0;1499:2:1;1484:18;66297:22:0::2;;;;;;;66160:167:::0;:::o;28981:305::-;29083:4;-1:-1:-1;;;;;;29120:40:0;;-1:-1:-1;;;29120:40:0;;:105;;-1:-1:-1;;;;;;;29177:48:0;;-1:-1:-1;;;29177:48:0;29120:105;:158;;;-1:-1:-1;;;;;;;;;;20455:40:0;;;29242:36;20346:157;38861:174;38936:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;38936:29:0;-1:-1:-1;;;;;38936:29:0;;;;;;;;:24;;38990:23;38936:24;38990:14;:23::i;:::-;-1:-1:-1;;;;;38981:46:0;;;;;;;;;;;38861:174;;:::o;35173:348::-;35266:4;34968:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34968:16:0;35283:73;;;;-1:-1:-1;;;35283:73:0;;34458:2:1;35283:73:0;;;34440:21:1;34497:2;34477:18;;;34470:30;34536:34;34516:18;;;34509:62;-1:-1:-1;;;34587:18:1;;;34580:42;34639:19;;35283:73:0;34256:408:1;35283:73:0;35367:13;35383:23;35398:7;35383:14;:23::i;:::-;35367:39;;35436:5;-1:-1:-1;;;;;35425:16:0;:7;-1:-1:-1;;;;;35425:16:0;;:51;;;;35469:7;-1:-1:-1;;;;;35445:31:0;:20;35457:7;35445:11;:20::i;:::-;-1:-1:-1;;;;;35445:31:0;;35425:51;:87;;;-1:-1:-1;;;;;;32265:25:0;;;32241:4;32265:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;35480:32;35417:96;35173:348;-1:-1:-1;;;;35173:348:0:o;38165:578::-;38324:4;-1:-1:-1;;;;;38297:31:0;:23;38312:7;38297:14;:23::i;:::-;-1:-1:-1;;;;;38297:31:0;;38289:85;;;;-1:-1:-1;;;38289:85:0;;34871:2:1;38289:85:0;;;34853:21:1;34910:2;34890:18;;;34883:30;34949:34;34929:18;;;34922:62;-1:-1:-1;;;35000:18:1;;;34993:39;35049:19;;38289:85:0;34669:405:1;38289:85:0;-1:-1:-1;;;;;38393:16:0;;38385:65;;;;-1:-1:-1;;;38385:65:0;;35281:2:1;38385:65:0;;;35263:21:1;35320:2;35300:18;;;35293:30;35359:34;35339:18;;;35332:62;-1:-1:-1;;;35410:18:1;;;35403:34;35454:19;;38385:65:0;35079:400:1;38385:65:0;38463:39;38484:4;38490:2;38494:7;38463:20;:39::i;:::-;38567:29;38584:1;38588:7;38567:8;:29::i;:::-;-1:-1:-1;;;;;38609:15:0;;;;;;:9;:15;;;;;:20;;38628:1;;38609:15;:20;;38628:1;;38609:20;:::i;:::-;;;;-1:-1:-1;;;;;;;38640:13:0;;;;;;:9;:13;;;;;:18;;38657:1;;38640:13;:18;;38657:1;;38640:18;:::i;:::-;;;;-1:-1:-1;;38669:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;38669:21:0;-1:-1:-1;;;;;38669:21:0;;;;;;;;;38708:27;;38669:16;;38708:27;;;;;;;38165:578;;;:::o;37468:360::-;37528:13;37544:23;37559:7;37544:14;:23::i;:::-;37528:39;;37580:48;37601:5;37616:1;37620:7;37580:20;:48::i;:::-;37669:29;37686:1;37690:7;37669:8;:29::i;:::-;-1:-1:-1;;;;;37711:16:0;;;;;;:9;:16;;;;;:21;;37731:1;;37711:16;:21;;37731:1;;37711:21;:::i;:::-;;;;-1:-1:-1;;37750:16:0;;;;:7;:16;;;;;;37743:23;;-1:-1:-1;;;;;;37743:23:0;;;37784:36;37758:7;;37750:16;-1:-1:-1;;;;;37784:36:0;;;;;37750:16;;37784:36;37517:311;37468:360;:::o;2583:532::-;2639:13;2669:10;2665:53;;-1:-1:-1;;2696:10:0;;;;;;;;;;;;-1:-1:-1;;;2696:10:0;;;;;2583:532::o;2665:53::-;2743:5;2728:12;2784:78;2791:9;;2784:78;;2817:8;;;;:::i;:::-;;-1:-1:-1;2840:10:0;;-1:-1:-1;2848:2:0;2840:10;;:::i;:::-;;;2784:78;;;2872:19;2904:6;2894:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2894:17:0;;2872:39;;2922:154;2929:10;;2922:154;;2956:11;2966:1;2956:11;;:::i;:::-;;-1:-1:-1;3025:10:0;3033:2;3025:5;:10;:::i;:::-;3012:24;;:2;:24;:::i;:::-;2999:39;;2982:6;2989;2982:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2982:56:0;;;;;;;;-1:-1:-1;3053:11:0;3062:2;3053:11;;:::i;:::-;;;2922:154;;9460:173;9535:6;;;-1:-1:-1;;;;;9552:17:0;;;-1:-1:-1;;;;;;9552:17:0;;;;;;;9585:40;;9535:6;;;9552:17;9535:6;;9585:40;;9516:16;;9585:40;9505:128;9460:173;:::o;50099:566::-;50192:7;50212:13;50527:15;50351;50393:16;50436:2;50465;50308:182;;;;;;;;;;36357:19:1;;;36401:2;36392:12;;36385:28;;;;36451:2;36447:15;-1:-1:-1;;36443:53:1;36438:2;36429:12;;36422:75;36522:2;36513:12;;36506:28;36559:3;36550:13;;36144:425;50308:182:0;;;;;;;;;;;;;50276:233;;;;;;50250:274;;:292;;;;:::i;:::-;50570:25;;;;:18;:25;;;;;;50212:341;;-1:-1:-1;50570:25:0;;50566:66;;;50604:28;50621:2;50625:6;:2;50630:1;50625:6;:::i;:::-;50604:16;:28::i;:::-;50597:35;;;;;50566:66;50652:5;50099:566;-1:-1:-1;;;50099:566:0:o;51254:318::-;51317:7;51337:19;51359:13;42762:10;:17;;42674:113;51359:13;51385:28;;;;:15;:28;;;;;;;;:37;;;51435:48;;;:18;:48;;;;;:55;;-1:-1:-1;;51435:55:0;51486:4;51435:55;;;51337:35;-1:-1:-1;51503:22:0;51509:2;51337:35;51503:5;:22::i;34251:315::-;34408:28;34418:4;34424:2;34428:7;34408:9;:28::i;:::-;34455:48;34478:4;34484:2;34488:7;34497:5;34455:22;:48::i;:::-;34447:111;;;;-1:-1:-1;;;34447:111:0;;;;;;;:::i;221:2256::-;279:13;309:4;:11;324:1;309:16;305:31;;;-1:-1:-1;;327:9:0;;;;;;;;;-1:-1:-1;327:9:0;;;221:2256::o;305:31::-;388:19;410:5;;;;;;;;;;;;;;;;;388:27;;467:18;513:1;494:4;:11;508:1;494:15;;;;:::i;:::-;493:21;;;;:::i;:::-;488:27;;:1;:27;:::i;:::-;467:48;-1:-1:-1;598:20:0;632:15;467:48;645:2;632:15;:::i;:::-;621:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;621:27:0;;598:50;;745:10;737:6;730:26;840:1;833:5;829:13;899:4;950;944:11;935:7;931:25;1046:2;1038:6;1034:15;1119:1045;1154:6;1145:7;1142:19;1119:1045;;;1224:1;1211:15;;;1292:14;;1475:4;1463:2;1459:14;;;1455:25;;1441:40;;1435:47;1430:3;1426:57;;;1365:137;;1666:2;1662:14;;;1658:25;;1644:40;;1638:47;1629:57;;1548:1;1533:17;;1568:137;1869:1;1865:13;;;1861:24;;1847:39;;1841:46;1832:56;;1736:17;;;1771:136;2063:16;;2049:31;;2043:38;2034:48;;1938:17;;;1973:128;;;;2132:17;;1119:1045;;;2237:1;2230:4;2224:11;2220:19;2258:1;2253:84;;;;2356:1;2351:82;;;;2213:220;;2253:84;-1:-1:-1;;;;;2286:17:0;;2279:43;2253:84;;2351:82;-1:-1:-1;;;;;2384:17:0;;2377:41;2213:220;-1:-1:-1;2463:6:0;;221:2256;-1:-1:-1;;;;;;;;221:2256:0:o;43710:589::-;-1:-1:-1;;;;;43916:18:0;;43912:187;;43951:40;43983:7;45126:10;:17;;45099:24;;;;:15;:24;;;;;:44;;;45154:24;;;;;;;;;;;;45022:164;43951:40;43912:187;;;44021:2;-1:-1:-1;;;;;44013:10:0;:4;-1:-1:-1;;;;;44013:10:0;;44009:90;;44040:47;44073:4;44079:7;44040:32;:47::i;:::-;-1:-1:-1;;;;;44113:16:0;;44109:183;;44146:45;44183:7;44146:36;:45::i;44109:183::-;44219:4;-1:-1:-1;;;;;44213:10:0;:2;-1:-1:-1;;;;;44213:10:0;;44209:83;;44240:40;44268:2;44272:7;44240:27;:40::i;36857:382::-;-1:-1:-1;;;;;36937:16:0;;36929:61;;;;-1:-1:-1;;;36929:61:0;;37368:2:1;36929:61:0;;;37350:21:1;;;37387:18;;;37380:30;37446:34;37426:18;;;37419:62;37498:18;;36929:61:0;37166:356:1;36929:61:0;34944:4;34968:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34968:16:0;:30;37001:58;;;;-1:-1:-1;;;37001:58:0;;37729:2:1;37001:58:0;;;37711:21:1;37768:2;37748:18;;;37741:30;37807;37787:18;;;37780:58;37855:18;;37001:58:0;37527:352:1;37001:58:0;37072:45;37101:1;37105:2;37109:7;37072:20;:45::i;:::-;-1:-1:-1;;;;;37130:13:0;;;;;;:9;:13;;;;;:18;;37147:1;;37130:13;:18;;37147:1;;37130:18;:::i;:::-;;;;-1:-1:-1;;37159:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;37159:21:0;-1:-1:-1;;;;;37159:21:0;;;;;;;;37198:33;;37159:16;;;37198:33;;37159:16;;37198:33;36857:382;;:::o;39600:799::-;39755:4;-1:-1:-1;;;;;39776:13:0;;10729:20;10777:8;39772:620;;39812:72;;-1:-1:-1;;;39812:72:0;;-1:-1:-1;;;;;39812:36:0;;;;;:72;;7228:10;;39863:4;;39869:7;;39878:5;;39812:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39812:72:0;;;;;;;;-1:-1:-1;;39812:72:0;;;;;;;;;;;;:::i;:::-;;;39808:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40054:13:0;;40050:272;;40097:60;;-1:-1:-1;;;40097:60:0;;;;;;;:::i;40050:272::-;40272:6;40266:13;40257:6;40253:2;40249:15;40242:38;39808:529;-1:-1:-1;;;;;;39935:51:0;-1:-1:-1;;;39935:51:0;;-1:-1:-1;39928:58:0;;39772:620;-1:-1:-1;40376:4:0;39600:799;;;;;;:::o;45813:988::-;46079:22;46129:1;46104:22;46121:4;46104:16;:22::i;:::-;:26;;;;:::i;:::-;46141:18;46162:26;;;:17;:26;;;;;;46079:51;;-1:-1:-1;46295:28:0;;;46291:328;;-1:-1:-1;;;;;46362:18:0;;46340:19;46362:18;;;:12;:18;;;;;;;;:34;;;;;;;;;46413:30;;;;;;:44;;;46530:30;;:17;:30;;;;;:43;;;46291:328;-1:-1:-1;46715:26:0;;;;:17;:26;;;;;;;;46708:33;;;-1:-1:-1;;;;;46759:18:0;;;;;:12;:18;;;;;:34;;;;;;;46752:41;45813:988::o;47096:1079::-;47374:10;:17;47349:22;;47374:21;;47394:1;;47374:21;:::i;:::-;47406:18;47427:24;;;:15;:24;;;;;;47800:10;:26;;47349:46;;-1:-1:-1;47427:24:0;;47349:46;;47800:26;;;;;;:::i;:::-;;;;;;;;;47778:48;;47864:11;47839:10;47850;47839:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;47944:28;;;:15;:28;;;;;;;:41;;;48116:24;;;;;48109:31;48151:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;47167:1008;;;47096:1079;:::o;44600:221::-;44685:14;44702:20;44719:2;44702:16;:20::i;:::-;-1:-1:-1;;;;;44733:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;44778:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;44600:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:269::-;908:3;946:5;940:12;973:6;968:3;961:19;989:63;1045:6;1038:4;1033:3;1029:14;1022:4;1015:5;1011:16;989:63;:::i;:::-;1106:2;1085:15;-1:-1:-1;;1081:29:1;1072:39;;;;1113:4;1068:50;;855:269;-1:-1:-1;;855:269:1:o;1129:231::-;1278:2;1267:9;1260:21;1241:4;1298:56;1350:2;1339:9;1335:18;1327:6;1298:56;:::i;1573:180::-;1632:6;1685:2;1673:9;1664:7;1660:23;1656:32;1653:52;;;1701:1;1698;1691:12;1653:52;-1:-1:-1;1724:23:1;;1573:180;-1:-1:-1;1573:180:1:o;1758:173::-;1826:20;;-1:-1:-1;;;;;1875:31:1;;1865:42;;1855:70;;1921:1;1918;1911:12;1936:254;2004:6;2012;2065:2;2053:9;2044:7;2040:23;2036:32;2033:52;;;2081:1;2078;2071:12;2033:52;2104:29;2123:9;2104:29;:::i;:::-;2094:39;2180:2;2165:18;;;;2152:32;;-1:-1:-1;;;1936:254:1:o;2195:127::-;2256:10;2251:3;2247:20;2244:1;2237:31;2287:4;2284:1;2277:15;2311:4;2308:1;2301:15;2327:632;2392:5;2422:18;2463:2;2455:6;2452:14;2449:40;;;2469:18;;:::i;:::-;2544:2;2538:9;2512:2;2598:15;;-1:-1:-1;;2594:24:1;;;2620:2;2590:33;2586:42;2574:55;;;2644:18;;;2664:22;;;2641:46;2638:72;;;2690:18;;:::i;:::-;2730:10;2726:2;2719:22;2759:6;2750:15;;2789:6;2781;2774:22;2829:3;2820:6;2815:3;2811:16;2808:25;2805:45;;;2846:1;2843;2836:12;2805:45;2896:6;2891:3;2884:4;2876:6;2872:17;2859:44;2951:1;2944:4;2935:6;2927;2923:19;2919:30;2912:41;;;;2327:632;;;;;:::o;2964:451::-;3033:6;3086:2;3074:9;3065:7;3061:23;3057:32;3054:52;;;3102:1;3099;3092:12;3054:52;3142:9;3129:23;3175:18;3167:6;3164:30;3161:50;;;3207:1;3204;3197:12;3161:50;3230:22;;3283:4;3275:13;;3271:27;-1:-1:-1;3261:55:1;;3312:1;3309;3302:12;3261:55;3335:74;3401:7;3396:2;3383:16;3378:2;3374;3370:11;3335:74;:::i;3602:328::-;3679:6;3687;3695;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;3787:29;3806:9;3787:29;:::i;:::-;3777:39;;3835:38;3869:2;3858:9;3854:18;3835:38;:::i;:::-;3825:48;;3920:2;3909:9;3905:18;3892:32;3882:42;;3602:328;;;;;:::o;3935:186::-;3994:6;4047:2;4035:9;4026:7;4022:23;4018:32;4015:52;;;4063:1;4060;4053:12;4015:52;4086:29;4105:9;4086:29;:::i;4126:347::-;4191:6;4199;4252:2;4240:9;4231:7;4227:23;4223:32;4220:52;;;4268:1;4265;4258:12;4220:52;4291:29;4310:9;4291:29;:::i;:::-;4281:39;;4370:2;4359:9;4355:18;4342:32;4417:5;4410:13;4403:21;4396:5;4393:32;4383:60;;4439:1;4436;4429:12;4383:60;4462:5;4452:15;;;4126:347;;;;;:::o;4478:667::-;4573:6;4581;4589;4597;4650:3;4638:9;4629:7;4625:23;4621:33;4618:53;;;4667:1;4664;4657:12;4618:53;4690:29;4709:9;4690:29;:::i;:::-;4680:39;;4738:38;4772:2;4761:9;4757:18;4738:38;:::i;:::-;4728:48;;4823:2;4812:9;4808:18;4795:32;4785:42;;4878:2;4867:9;4863:18;4850:32;4905:18;4897:6;4894:30;4891:50;;;4937:1;4934;4927:12;4891:50;4960:22;;5013:4;5005:13;;5001:27;-1:-1:-1;4991:55:1;;5042:1;5039;5032:12;4991:55;5065:74;5131:7;5126:2;5113:16;5108:2;5104;5100:11;5065:74;:::i;:::-;5055:84;;;4478:667;;;;;;;:::o;5150:260::-;5218:6;5226;5279:2;5267:9;5258:7;5254:23;5250:32;5247:52;;;5295:1;5292;5285:12;5247:52;5318:29;5337:9;5318:29;:::i;:::-;5308:39;;5366:38;5400:2;5389:9;5385:18;5366:38;:::i;:::-;5356:48;;5150:260;;;;;:::o;5415:380::-;5494:1;5490:12;;;;5537;;;5558:61;;5612:4;5604:6;5600:17;5590:27;;5558:61;5665:2;5657:6;5654:14;5634:18;5631:38;5628:161;;;5711:10;5706:3;5702:20;5699:1;5692:31;5746:4;5743:1;5736:15;5774:4;5771:1;5764:15;5628:161;;5415:380;;;:::o;7040:356::-;7242:2;7224:21;;;7261:18;;;7254:30;7320:34;7315:2;7300:18;;7293:62;7387:2;7372:18;;7040:356::o;7401:413::-;7603:2;7585:21;;;7642:2;7622:18;;;7615:30;7681:34;7676:2;7661:18;;7654:62;-1:-1:-1;;;7747:2:1;7732:18;;7725:47;7804:3;7789:19;;7401:413::o;8997:127::-;9058:10;9053:3;9049:20;9046:1;9039:31;9089:4;9086:1;9079:15;9113:4;9110:1;9103:15;9255:973;9340:12;;9305:3;;9395:1;9415:18;;;;9468;;;;9495:61;;9549:4;9541:6;9537:17;9527:27;;9495:61;9575:2;9623;9615:6;9612:14;9592:18;9589:38;9586:161;;;9669:10;9664:3;9660:20;9657:1;9650:31;9704:4;9701:1;9694:15;9732:4;9729:1;9722:15;9586:161;9763:18;9790:104;;;;9908:1;9903:319;;;;9756:466;;9790:104;-1:-1:-1;;9823:24:1;;9811:37;;9868:16;;;;-1:-1:-1;9790:104:1;;9903:319;9202:1;9195:14;;;9239:4;9226:18;;9997:1;10011:165;10025:6;10022:1;10019:13;10011:165;;;10103:14;;10090:11;;;10083:35;10146:16;;;;10040:10;;10011:165;;;10015:3;;10205:6;10200:3;10196:16;10189:23;;9756:466;;;;;;;9255:973;;;;:::o;10233:185::-;10275:3;10313:5;10307:12;10328:52;10373:6;10368:3;10361:4;10354:5;10350:16;10328:52;:::i;:::-;10396:16;;;;;10233:185;-1:-1:-1;;10233:185:1:o;27267:1969::-;27922:34;27917:3;27910:47;27987:26;27982:2;27977:3;27973:12;27966:48;27892:3;28033:47;28076:2;28071:3;28067:12;28059:6;28033:47;:::i;:::-;-1:-1:-1;;;28096:2:1;28089:35;28143:46;28185:2;28181;28177:11;28169:6;28143:46;:::i;:::-;28133:56;;28209:34;28205:2;28198:46;28273:34;28268:2;28264;28260:11;28253:55;28337:34;28332:2;28328;28324:11;28317:55;28401:34;28396:2;28392;28388:11;28381:55;28466:34;28460:3;28456:2;28452:12;28445:56;28531:34;28525:3;28521:2;28517:12;28510:56;28596:34;28590:3;28586:2;28582:12;28575:56;28661:34;28655:3;28651:2;28647:12;28640:56;28726:34;28720:3;28716:2;28712:12;28705:56;28791:34;28785:3;28781:2;28777:12;28770:56;28856:34;28850:3;28846:2;28842:12;28835:56;28921:34;28915:3;28911:2;28907:12;28900:56;28986:34;28980:3;28976:2;28972:12;28965:56;29051:34;29045:3;29041:2;29037:12;29030:56;29116:27;29110:3;29106:2;29102:12;29095:49;29160:70;29190:39;29224:3;29220:2;29216:12;29208:6;29190:39;:::i;:::-;10500:34;10488:47;;10565:34;10560:2;10551:12;;10544:56;10630:34;10625:2;10616:12;;10609:56;10695:34;10690:2;10681:12;;10674:56;10761:34;10755:3;10746:13;;10739:57;10827:34;10821:3;10812:13;;10805:57;10893:34;10887:3;10878:13;;10871:57;10959:34;10953:3;10944:13;;10937:57;11025:34;11019:3;11010:13;;11003:57;11091:34;11085:3;11076:13;;11069:57;11157:34;11151:3;11142:13;;11135:57;11223:34;11217:3;11208:13;;11201:57;11289:34;11283:3;11274:13;;11267:57;11355:34;11349:3;11340:13;;11333:57;11421:34;11415:3;11406:13;;11399:57;11487:34;11481:3;11472:13;;11465:57;11553:34;11547:3;11538:13;;11531:57;11619:34;11613:3;11604:13;;11597:57;11685:34;11679:3;11670:13;;11663:57;11751:34;11745:3;11736:13;;11729:57;11817:34;11811:3;11802:13;;11795:57;11883:34;11877:3;11868:13;;11861:57;11949:34;11943:3;11934:13;;11927:57;12015:34;12009:3;12000:13;;11993:57;12081:34;12075:3;12066:13;;12059:57;12147:34;12141:3;12132:13;;12125:57;12213:34;12207:3;12198:13;;12191:57;12279:34;12273:3;12264:13;;12257:57;12345:34;12339:3;12330:13;;12323:57;12411:34;12405:3;12396:13;;12389:57;12477:34;12471:3;12462:13;;12455:57;12543:34;12537:3;12528:13;;12521:57;12610:34;12603:4;12594:14;;12587:58;12677:34;12670:4;12661:14;;12654:58;12744:34;12737:4;12728:14;;12721:58;12811:34;12804:4;12795:14;;12788:58;12878:34;12871:4;12862:14;;12855:58;12945:34;12938:4;12929:14;;12922:58;13012:34;13005:4;12996:14;;12989:58;13079:34;13072:4;13063:14;;13056:58;13146:34;13139:4;13130:14;;13123:58;13213:34;13206:4;13197:14;;13190:58;13280:34;13273:4;13264:14;;13257:58;13347:34;13340:4;13331:14;;13324:58;13414:34;13407:4;13398:14;;13391:58;13481:34;13474:4;13465:14;;13458:58;13548:34;13541:4;13532:14;;13525:58;13615:34;13608:4;13599:14;;13592:58;13682:34;13675:4;13666:14;;13659:58;13749:34;13742:4;13733:14;;13726:58;13816:34;13809:4;13800:14;;13793:58;13883:34;13876:4;13867:14;;13860:58;13950:34;13943:4;13934:14;;13927:58;14017:34;14010:4;14001:14;;13994:58;14084:34;14077:4;14068:14;;14061:58;14151:34;14144:4;14135:14;;14128:58;14218:34;14211:4;14202:14;;14195:58;14285:34;14278:4;14269:14;;14262:58;14352:34;14345:4;14336:14;;14329:58;14419:34;14412:4;14403:14;;14396:58;14486:34;14479:4;14470:14;;14463:58;14553:34;14546:4;14537:14;;14530:58;14620:34;14613:4;14604:14;;14597:58;14687:34;14680:4;14671:14;;14664:58;14754:34;14747:4;14738:14;;14731:58;14821:34;14814:4;14805:14;;14798:58;14888:34;14881:4;14872:14;;14865:58;14955:34;14948:4;14939:14;;14932:58;15022:34;15015:4;15006:14;;14999:58;15089:34;15082:4;15073:14;;15066:58;15156:34;15149:4;15140:14;;15133:58;15223:34;15216:4;15207:14;;15200:58;15290:34;15283:4;15274:14;;15267:58;15357:34;15350:4;15341:14;;15334:58;15424:34;15417:4;15408:14;;15401:58;15491:34;15484:4;15475:14;;15468:58;15558:34;15551:4;15542:14;;15535:58;15625:34;15618:4;15609:14;;15602:58;15692:34;15685:4;15676:14;;15669:58;15759:34;15752:4;15743:14;;15736:58;15826:34;15819:4;15810:14;;15803:58;15893:34;15886:4;15877:14;;15870:58;15960:34;15953:4;15944:14;;15937:58;16027:34;16020:4;16011:14;;16004:58;16094:34;16087:4;16078:14;;16071:58;16161:34;16154:4;16145:14;;16138:58;16228:34;16221:4;16212:14;;16205:58;16295:34;16288:4;16279:14;;16272:58;16362:34;16355:4;16346:14;;16339:58;16429:34;16422:4;16413:14;;16406:58;16496:34;16489:4;16480:14;;16473:58;16563:34;16556:4;16547:14;;16540:58;16630:34;16623:4;16614:14;;16607:58;16697:34;16690:4;16681:14;;16674:58;16764:34;16757:4;16748:14;;16741:58;16831:34;16824:4;16815:14;;16808:58;16898:34;16891:4;16882:14;;16875:58;16965:34;16958:4;16949:14;;16942:58;17032:34;17025:4;17016:14;;17009:58;17099:34;17092:4;17083:14;;17076:58;17166:34;17159:4;17150:14;;17143:58;17233:34;17226:4;17217:14;;17210:58;17300:34;17293:4;17284:14;;17277:58;17367:34;17360:4;17351:14;;17344:58;17434:34;17427:4;17418:14;;17411:58;17501:34;17494:4;17485:14;;17478:58;17568:34;17561:4;17552:14;;17545:58;17635:34;17628:4;17619:14;;17612:58;17702:34;17695:4;17686:14;;17679:58;17769:34;17762:4;17753:14;;17746:58;17836:34;17829:4;17820:14;;17813:58;17903:34;17896:4;17887:14;;17880:58;17970:34;17963:4;17954:14;;17947:58;18037:34;18030:4;18021:14;;18014:58;18104:34;18097:4;18088:14;;18081:58;18171:34;18164:4;18155:14;;18148:58;18238:34;18231:4;18222:14;;18215:58;18305:34;18298:4;18289:14;;18282:58;18372:34;18365:4;18356:14;;18349:58;18439:34;18432:4;18423:14;;18416:58;18506:34;18499:4;18490:14;;18483:58;18573:34;18566:4;18557:14;;18550:58;18640:34;18633:4;18624:14;;18617:58;18707:34;18700:4;18691:14;;18684:58;18774:34;18767:4;18758:14;;18751:58;18841:34;18834:4;18825:14;;18818:58;18908:34;18901:4;18892:14;;18885:58;18975:34;18968:4;18959:14;;18952:58;19042:34;19035:4;19026:14;;19019:58;19109:34;19102:4;19093:14;;19086:58;19176:34;19169:4;19160:14;;19153:58;19243:34;19236:4;19227:14;;19220:58;19310:34;19303:4;19294:14;;19287:58;19377:34;19370:4;19361:14;;19354:58;19444:34;19437:4;19428:14;;19421:58;19511:34;19504:4;19495:14;;19488:58;19578:34;19571:4;19562:14;;19555:58;19645:34;19638:4;19629:14;;19622:58;19712:34;19705:4;19696:14;;19689:58;19779:34;19772:4;19763:14;;19756:58;19846:34;19839:4;19830:14;;19823:58;19913:34;19906:4;19897:14;;19890:58;19980:34;19973:4;19964:14;;19957:58;20047:34;20040:4;20031:14;;20024:58;20114:34;20107:4;20098:14;;20091:58;20181:34;20174:4;20165:14;;20158:58;20248:34;20241:4;20232:14;;20225:58;20315:34;20308:4;20299:14;;20292:58;20382:34;20375:4;20366:14;;20359:58;20449:34;20442:4;20433:14;;20426:58;20516:34;20509:4;20500:14;;20493:58;20583:34;20576:4;20567:14;;20560:58;20650:34;20643:4;20634:14;;20627:58;20717:34;20710:4;20701:14;;20694:58;20784:34;20777:4;20768:14;;20761:58;20851:34;20844:4;20835:14;;20828:58;20918:34;20911:4;20902:14;;20895:58;20985:34;20978:4;20969:14;;20962:58;21052:34;21045:4;21036:14;;21029:58;21119:34;21112:4;21103:14;;21096:58;21186:34;21179:4;21170:14;;21163:58;21253:34;21246:4;21237:14;;21230:58;21320:34;21313:4;21304:14;;21297:58;21387:34;21380:4;21371:14;;21364:58;21454:34;21447:4;21438:14;;21431:58;21521:34;21514:4;21505:14;;21498:58;21588:34;21581:4;21572:14;;21565:58;21655:34;21648:4;21639:14;;21632:58;21722:34;21715:4;21706:14;;21699:58;21789:34;21782:4;21773:14;;21766:58;21856:34;21849:4;21840:14;;21833:58;21923:34;21916:4;21907:14;;21900:58;21990:34;21983:4;21974:14;;21967:58;22057:34;22050:4;22041:14;;22034:58;22124:34;22117:4;22108:14;;22101:58;22191:34;22184:4;22175:14;;22168:58;22258:34;22251:4;22242:14;;22235:58;22325:34;22318:4;22309:14;;22302:58;22392:34;22385:4;22376:14;;22369:58;22459:34;22452:4;22443:14;;22436:58;22526:34;22519:4;22510:14;;22503:58;22593:34;22586:4;22577:14;;22570:58;22660:34;22653:4;22644:14;;22637:58;22727:34;22720:4;22711:14;;22704:58;22794:34;22787:4;22778:14;;22771:58;22861:34;22854:4;22845:14;;22838:58;22928:34;22921:4;22912:14;;22905:58;22995:34;22988:4;22979:14;;22972:58;23062:34;23055:4;23046:14;;23039:58;23129:34;23122:4;23113:14;;23106:58;23196:34;23189:4;23180:14;;23173:58;23263:34;23256:4;23247:14;;23240:58;23330:34;23323:4;23314:14;;23307:58;23397:34;23390:4;23381:14;;23374:58;23464:34;23457:4;23448:14;;23441:58;23531:34;23524:4;23515:14;;23508:58;23598:34;23591:4;23582:14;;23575:58;23665:34;23658:4;23649:14;;23642:58;23732:34;23725:4;23716:14;;23709:58;23799:34;23792:4;23783:14;;23776:58;23866:34;23859:4;23850:14;;23843:58;23933:34;23926:4;23917:14;;23910:58;24000:34;23993:4;23984:14;;23977:58;24067:34;24060:4;24051:14;;24044:58;24134:34;24127:4;24118:14;;24111:58;24201:34;24194:4;24185:14;;24178:58;24268:34;24261:4;24252:14;;24245:58;24335:34;24328:4;24319:14;;24312:58;24402:34;24395:4;24386:14;;24379:58;24469:34;24462:4;24453:14;;24446:58;24536:34;24529:4;24520:14;;24513:58;24603:34;24596:4;24587:14;;24580:58;24670:34;24663:4;24654:14;;24647:58;24737:34;24730:4;24721:14;;24714:58;24804:34;24797:4;24788:14;;24781:58;24871:34;24864:4;24855:14;;24848:58;24938:34;24931:4;24922:14;;24915:58;25005:34;24998:4;24989:14;;24982:58;25072:34;25065:4;25056:14;;25049:58;25139:34;25132:4;25123:14;;25116:58;25206:34;25199:4;25190:14;;25183:58;25273:34;25266:4;25257:14;;25250:58;25340:34;25333:4;25324:14;;25317:58;25407:34;25400:4;25391:14;;25384:58;25474:34;25467:4;25458:14;;25451:58;25541:34;25534:4;25525:14;;25518:58;25608:34;25601:4;25592:14;;25585:58;25675:34;25668:4;25659:14;;25652:58;25742:34;25735:4;25726:14;;25719:58;25809:34;25802:4;25793:14;;25786:58;25876:34;25869:4;25860:14;;25853:58;25943:34;25936:4;25927:14;;25920:58;26010:34;26003:4;25994:14;;25987:58;26077:34;26070:4;26061:14;;26054:58;26144:34;26137:4;26128:14;;26121:58;26211:34;26204:4;26195:14;;26188:58;26278:34;26271:4;26262:14;;26255:58;26345:34;26338:4;26329:14;;26322:58;26412:34;26405:4;26396:14;;26389:58;26479:34;26472:4;26463:14;;26456:58;26546:34;26539:4;26530:14;;26523:58;26613:34;26606:4;26597:14;;26590:58;26680:34;26673:4;26664:14;;26657:58;26747:34;26740:4;26731:14;;26724:58;26814:34;26807:4;26798:14;;26791:58;26881:34;26874:4;26865:14;;26858:58;26948:34;26941:4;26932:14;;26925:58;27015:34;27008:4;26999:14;;26992:58;27082:34;27075:4;27066:14;;27059:58;27149:34;27142:4;27133:14;;27126:58;-1:-1:-1;;;27209:4:1;27200:14;;27193:33;27251:4;27242:14;;10423:16839;29160:70;29153:77;27267:1969;-1:-1:-1;;;;;;27267:1969:1:o;30407:127::-;30468:10;30463:3;30459:20;30456:1;30449:31;30499:4;30496:1;30489:15;30523:4;30520:1;30513:15;30539:112;30571:1;30597;30587:35;;30602:18;;:::i;:::-;-1:-1:-1;30636:9:1;;30539:112::o;31010:276::-;31141:3;31179:6;31173:13;31195:53;31241:6;31236:3;31229:4;31221:6;31217:17;31195:53;:::i;:::-;31264:16;;;;;31010:276;-1:-1:-1;;31010:276:1:o;31291:1758::-;-1:-1:-1;;;32078:59:1;;32160:13;;32060:3;;32182:62;32160:13;32232:2;32223:12;;32216:4;32204:17;;32182:62;:::i;:::-;32304:13;;32263:16;;;;32326:63;32304:13;32375:2;32367:11;;32360:4;32348:17;;32326:63;:::i;:::-;-1:-1:-1;;;32449:2:1;32408:17;;;;32441:11;;;32434:55;32508:46;32550:2;32542:11;;32534:6;32508:46;:::i;:::-;32498:56;;32585:6;32579:13;32601:54;32646:8;32642:2;32635:4;32627:6;32623:17;32601:54;:::i;:::-;-1:-1:-1;;;32677:17:1;;32703:65;;;32787:49;32832:2;32821:14;;32813:6;32787:49;:::i;:::-;32777:59;;32867:6;32861:13;32883:54;32928:8;32924:2;32917:4;32909:6;32905:17;32883:54;:::i;:::-;-1:-1:-1;;;32959:17:1;;32985:29;;;33041:1;33030:13;;31291:1758;-1:-1:-1;;;;;;;;31291:1758:1:o;33054:448::-;33316:31;33311:3;33304:44;33286:3;33377:6;33371:13;33393:62;33448:6;33443:2;33438:3;33434:12;33427:4;33419:6;33415:17;33393:62;:::i;:::-;33475:16;;;;33493:2;33471:25;;33054:448;-1:-1:-1;;33054:448:1:o;33507:337::-;-1:-1:-1;;;33761:3:1;33754:22;33736:3;33792:46;33835:1;33830:3;33826:11;33818:6;33792:46;:::i;35484:127::-;35545:10;35540:3;35536:20;35533:1;35526:31;35576:4;35573:1;35566:15;35600:4;35597:1;35590:15;35616:125;35656:4;35684:1;35681;35678:8;35675:34;;;35689:18;;:::i;:::-;-1:-1:-1;35726:9:1;;35616:125::o;35746:128::-;35786:3;35817:1;35813:6;35810:1;35807:13;35804:39;;;35823:18;;:::i;:::-;-1:-1:-1;35859:9:1;;35746:128::o;35879:135::-;35918:3;-1:-1:-1;;35939:17:1;;35936:43;;;35959:18;;:::i;:::-;-1:-1:-1;36006:1:1;35995:13;;35879:135::o;36019:120::-;36059:1;36085;36075:35;;36090:18;;:::i;:::-;-1:-1:-1;36124:9:1;;36019:120::o;36574:414::-;36776:2;36758:21;;;36815:2;36795:18;;;36788:30;36854:34;36849:2;36834:18;;36827:62;-1:-1:-1;;;36920:2:1;36905:18;;36898:48;36978:3;36963:19;;36574:414::o;36993:168::-;37033:7;37099:1;37095;37091:6;37087:14;37084:1;37081:21;37076:1;37069:9;37062:17;37058:45;37055:71;;;37106:18;;:::i;:::-;-1:-1:-1;37146:9:1;;36993:168::o;37884:500::-;-1:-1:-1;;;;;38153:15:1;;;38135:34;;38205:15;;38200:2;38185:18;;38178:43;38252:2;38237:18;;38230:34;;;38300:3;38295:2;38280:18;;38273:31;;;38078:4;;38321:57;;38358:19;;38350:6;38321:57;:::i;38389:249::-;38458:6;38511:2;38499:9;38490:7;38486:23;38482:32;38479:52;;;38527:1;38524;38517:12;38479:52;38559:9;38553:16;38578:30;38602:5;38578:30;:::i;38643:127::-;38704:10;38699:3;38695:20;38692:1;38685:31;38735:4;38732:1;38725:15;38759:4;38756:1;38749:15
Swarm Source
ipfs://a57c06b9bab8422a923649db6f74a577646369d0055672a4060ff34d368b0277
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.