ERC-721
NFT
Overview
Max Total Supply
2,326 SLCARD
Holders
342
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SLCARDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Splinterlands
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.5.0; import "./TradeableERC721Token.sol"; contract Splinterlands is TradeableERC721Token { address minter; string dynamicBaseURI; mapping(uint256 => Card) public cards; mapping(string => uint256) public ethIds; struct Card { string splinterlandsId; } event LockCard(address indexed holder, string cardId, string steemAddr, uint256 indexed ethId); event MintCard(address indexed holder, string cardId, uint256 indexed ethId); constructor(address _proxyAddr, address _minter, string memory _baseTokenURI) public TradeableERC721Token("Splinterlands", "SLCARD", _proxyAddr) { minter = _minter; dynamicBaseURI = _baseTokenURI; } function baseTokenURI() public view returns (string memory) { return dynamicBaseURI; } function tokenURI(uint256 _tokenId) external view returns (string memory) { return Strings.strConcat( baseTokenURI(), cards[_tokenId].splinterlandsId ); } function setDynamicBaseURI(string memory _newBaseURI) public onlyOwner { dynamicBaseURI = _newBaseURI; } function setMinter(address _newMinter) public onlyOwner { minter = _newMinter; } function mintCard(string memory _splinterId, address _holder) public onlyMinter { require(0 == ethIds[_splinterId], "Splinterlands: Card Exists"); uint256 newEthId = _getNextTokenId(); cards[newEthId].splinterlandsId = _splinterId; ethIds[_splinterId] = newEthId; mintTo(_holder); require(_getNextTokenId() == newEthId + 1, "Splinterlands: Safety Check"); emit MintCard(_holder, _splinterId, newEthId); } function lockCard(uint256 _ethId, string memory _steemAddr) public { require(ownerOf(_ethId) == msg.sender, "Splinterlands: Not Holder"); string memory cardId = cardIdForTokenId(_ethId); transferFrom(msg.sender, address(this), _ethId); emit LockCard(msg.sender, cardId, _steemAddr, _ethId); } function unlockCard(uint256 _ethId, address _newHolder) public onlyMinter isLockedCard(_ethId) { transferFrom(address(this), _newHolder, _ethId); } function burnCard(uint256 _ethId) public onlyMinter isLockedCard(_ethId) { _burn(_ethId); } function isApprovedForAll(address owner, address operator) public view returns (bool) { if (owner == address(this) && operator == minter) { return true; } return super.isApprovedForAll(owner, operator); } function tokensOfHolder(address holder) public view returns (uint256[] memory) { return _tokensOfOwner(holder); } function tokenIdForCardId(string memory _splinterId) public view returns (uint256) { return ethIds[_splinterId]; } function cardIdForTokenId(uint256 _tokenId) public view returns (string memory) { return cards[_tokenId].splinterlandsId; } modifier onlyMinter() { require(msg.sender == minter, "Splinterlands: Not Minter"); _; } modifier isLockedCard(uint256 _ethId) { require(ownerOf(_ethId) == address(this), "Splinterlands: Not Locked"); _; } }
pragma solidity ^0.5.5; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing 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. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } }
pragma solidity ^0.5.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 GSN 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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
pragma solidity ^0.5.0; import "./SafeMath.sol"; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath} * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never * directly accessed. */ library Counters { using SafeMath for uint256; struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { // The {SafeMath} overflow check can be skipped here, see the comment at the top counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } }
pragma solidity ^0.5.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } }
pragma solidity ^0.5.0; import "./Context.sol"; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./SafeMath.sol"; import "./Address.sol"; import "./Counters.sol"; import "./ERC165.sol"; /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721 is Context, ERC165, IERC721 { using SafeMath for uint256; using Address for address; using Counters for Counters.Counter; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from token ID to owner mapping (uint256 => address) private _tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to number of owned token mapping (address => Counters.Counter) private _ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /* * bytes4(keccak256('balanceOf(address)')) == 0x70a08231 * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3 * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde * * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^ * 0xa22cb465 ^ 0xe985e9c ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd */ bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; constructor () public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); } /** * @dev Gets the balance of the specified address. * @param owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address owner) public view returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _ownedTokensCount[owner].current(); } /** * @dev Gets the owner of the specified token ID. * @param tokenId uint256 ID of the token to query the owner of * @return address currently marked as the owner of the given token ID */ function ownerOf(uint256 tokenId) public view returns (address) { address owner = _tokenOwner[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev Approves another address to transfer the given token ID * The zero address indicates there is no approved address. * There can only be one approved address per token at a given time. * Can only be called by the token owner or an approved operator. * @param to address to be approved for the given token ID * @param tokenId uint256 ID of the token to be approved */ function approve(address to, uint256 tokenId) public { address owner = 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" ); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev Sets or unsets the approval of a given operator * An operator is allowed to transfer all tokens of the sender on their behalf. * @param to operator address to set the approval * @param approved representing the status of the approval to be set */ function setApprovalForAll(address to, bool approved) public { require(to != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][to] = approved; emit ApprovalForAll(_msgSender(), to, approved); } /** * @dev Tells whether an operator is approved by a given owner. * @param owner owner address which you want to query the approval of * @param operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll(address owner, address operator) public view returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Transfers the ownership of a given token ID to another address. * Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * Requires the msg.sender to be the owner, approved, or operator. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function transferFrom(address from, address to, uint256 tokenId) public { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transferFrom(from, to, tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the _msgSender() to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransferFrom(from, to, tokenId, _data); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function _safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) internal { _transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether the specified token exists. * @param tokenId uint256 ID of the token to query the existence of * @return bool whether the token exists */ function _exists(uint256 tokenId) internal view returns (bool) { address owner = _tokenOwner[tokenId]; return owner != address(0); } /** * @dev Returns whether the given spender can transfer a given token ID. * @param spender address of the spender to query * @param tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Internal function to safely mint a new token. * Reverts if the given token ID already exists. * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _safeMint(address to, uint256 tokenId) internal { _safeMint(to, tokenId, ""); } /** * @dev Internal function to safely mint a new token. * Reverts if the given token ID already exists. * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted * @param _data bytes data to send along with a safe transfer check */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Internal function to mint a new token. * Reverts if the given token ID already exists. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _tokenOwner[tokenId] = to; _ownedTokensCount[to].increment(); emit Transfer(address(0), to, tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use {_burn} instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { require(ownerOf(tokenId) == owner, "ERC721: burn of token that is not own"); _clearApproval(tokenId); _ownedTokensCount[owner].decrement(); _tokenOwner[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * @param tokenId uint256 ID of the token being burned */ function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), tokenId); } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _clearApproval(tokenId); _ownedTokensCount[from].decrement(); _ownedTokensCount[to].increment(); _tokenOwner[tokenId] = to; emit Transfer(from, 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. * * This function is deprecated. * @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) internal returns (bool) { if (!to.isContract()) { return true; } bytes4 retval = IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data); return (retval == _ERC721_RECEIVED); } /** * @dev Private function to clear current approval of a given token ID. * @param tokenId uint256 ID of the token to be transferred */ function _clearApproval(uint256 tokenId) private { if (_tokenApprovals[tokenId] != address(0)) { _tokenApprovals[tokenId] = address(0); } } }
pragma solidity ^0.5.0; import "./Context.sol"; import "./IERC721Enumerable.sol"; import "./ERC721.sol"; import "./ERC165.sol"; /** * @title ERC-721 Non-Fungible Token with optional enumeration extension logic * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Enumerable is Context, ERC165, ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => 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; /* * bytes4(keccak256('totalSupply()')) == 0x18160ddd * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59 * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7 * * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63 */ bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /** * @dev Constructor function. */ constructor () public { // register the supported interface to conform to ERC721Enumerable via ERC165 _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner. * @param owner address owning the tokens list to be accessed * @param index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) { require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev Gets the total amount of tokens stored by the contract. * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return _allTokens.length; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * Reverts if the index is greater or equal to the total number of tokens. * @param index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 index) public view returns (uint256) { require(index < totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { super._transferFrom(from, to, tokenId); _removeTokenFromOwnerEnumeration(from, tokenId); _addTokenToOwnerEnumeration(to, tokenId); } /** * @dev Internal function to mint a new token. * Reverts if the given token ID already exists. * @param to address the beneficiary that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { super._mint(to, tokenId); _addTokenToOwnerEnumeration(to, tokenId); _addTokenToAllTokensEnumeration(tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use {ERC721-_burn} instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); _removeTokenFromOwnerEnumeration(owner, tokenId); // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund _ownedTokensIndex[tokenId] = 0; _removeTokenFromAllTokensEnumeration(tokenId); } /** * @dev Gets the list of token IDs of the requested owner. * @param owner address owning the tokens * @return uint256[] List of token IDs owned by the requested address */ function _tokensOfOwner(address owner) internal view returns (uint256[] storage) { return _ownedTokens[owner]; } /** * @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 { _ownedTokensIndex[tokenId] = _ownedTokens[to].length; _ownedTokens[to].push(tokenId); } /** * @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 = _ownedTokens[from].length.sub(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 _ownedTokens[from].length--; // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by // lastTokenId, or just over the end of the array if the token was the last one). } /** * @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.sub(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 _allTokens.length--; _allTokensIndex[tokenId] = 0; } }
pragma solidity ^0.5.0; import "./ERC721.sol"; import "./ERC721Enumerable.sol"; import "./ERC721Metadata.sol"; /** * @title Full ERC721 Token * @dev This implementation includes all the required and some optional functionality of the ERC721 standard * Moreover, it includes approve all functionality using operator terminology. * * See https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata { constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) { // solhint-disable-previous-line no-empty-blocks } }
pragma solidity ^0.5.0; import "./Context.sol"; import "./ERC721.sol"; import "./IERC721Metadata.sol"; import "./ERC165.sol"; contract ERC721Metadata is Context, ERC165, ERC721, IERC721Metadata { // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /* * bytes4(keccak256('name()')) == 0x06fdde03 * bytes4(keccak256('symbol()')) == 0x95d89b41 * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd * * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f */ bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /** * @dev Constructor function */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_METADATA); } /** * @dev Gets the token name. * @return string representing the token name */ function name() external view returns (string memory) { return _name; } /** * @dev Gets the token symbol. * @return string representing the token symbol */ function symbol() external view returns (string memory) { return _symbol; } /** * @dev Returns an URI for a given token ID. * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function tokenURI(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return _tokenURIs[tokenId]; } /** * @dev Internal function to set the token URI for a given token. * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to set its URI * @param uri string URI to assign */ function _setTokenURI(uint256 tokenId, string memory uri) internal { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = uri; } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use _burn(uint256) instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } }
pragma solidity ^0.5.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); }
pragma solidity ^0.5.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of NFTs in `owner`'s account. */ function balanceOf(address owner) public view returns (uint256 balance); /** * @dev Returns the owner of the NFT specified by `tokenId`. */ function ownerOf(uint256 tokenId) public view returns (address owner); /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * * * Requirements: * - `from`, `to` cannot be zero. * - `tokenId` must be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this * NFT by either {approve} or {setApprovalForAll}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public; /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * Requirements: * - If the caller is not `from`, it must be approved to move this NFT by * either {approve} or {setApprovalForAll}. */ function transferFrom(address from, address to, uint256 tokenId) public; function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; }
pragma solidity ^0.5.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Enumerable is IERC721 { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId); function tokenByIndex(uint256 index) public view returns (uint256); }
pragma solidity ^0.5.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); }
pragma solidity ^0.5.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a {IERC721-safeTransferFrom}. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @param operator The address which called `safeTransferFrom` function * @param from The address which previously owned the token * @param tokenId The NFT identifier which is being transferred * @param data Additional data with no specified format * @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); }
pragma solidity ^0.5.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * 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. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _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 onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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 onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
pragma solidity ^0.5.0; library Strings { // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (uint i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (uint i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (uint i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory) { return strConcat(_a, _b, _c, _d, ""); } function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) { return strConcat(_a, _b, _c, "", ""); } function strConcat(string memory _a, string memory _b) internal pure returns (string memory) { return strConcat(_a, _b, "", "", ""); } function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } }
pragma solidity ^0.5.0; import './ERC721Full.sol'; import './Ownable.sol'; import './Strings.sol'; contract OwnableDelegateProxy { } contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } /** * @title TradeableERC721Token * TradeableERC721Token - ERC721 contract that whitelists a trading address, and has minting functionality. */ contract TradeableERC721Token is ERC721Full, Ownable { using Strings for string; address public proxyRegistryAddress; uint256 private _currentTokenId = 0; constructor(string memory _name, string memory _symbol, address _proxyRegistryAddress) ERC721Full(_name, _symbol) public { proxyRegistryAddress = _proxyRegistryAddress; } /** * @dev Mints a token to an address with a tokenURI. * @param _to address of the future owner of the token */ function mintTo(address _to) internal { uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId); _incrementTokenId(); } /** * @dev calculates the next token ID based on value of _currentTokenId * @return uint256 for the next token ID */ function _getNextTokenId() internal view returns (uint256) { return _currentTokenId.add(1); } /** * @dev increments the value of _currentTokenId */ function _incrementTokenId() private { _currentTokenId++; } /** * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll( address owner, address operator ) public view returns (bool) { // // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newBaseURI","type":"string"}],"name":"setDynamicBaseURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ethId","type":"uint256"},{"name":"_newHolder","type":"address"}],"name":"unlockCard","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"}],"name":"tokensOfHolder","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_splinterId","type":"string"},{"name":"_holder","type":"address"}],"name":"mintCard","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cardIdForTokenId","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cards","outputs":[{"name":"splinterlandsId","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_splinterId","type":"string"}],"name":"tokenIdForCardId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ethId","type":"uint256"}],"name":"burnCard","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ethId","type":"uint256"},{"name":"_steemAddr","type":"string"}],"name":"lockCard","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"string"}],"name":"ethIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proxyRegistryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseTokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newMinter","type":"address"}],"name":"setMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_proxyAddr","type":"address"},{"name":"_minter","type":"address"},{"name":"_baseTokenURI","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":false,"name":"cardId","type":"string"},{"indexed":false,"name":"steemAddr","type":"string"},{"indexed":true,"name":"ethId","type":"uint256"}],"name":"LockCard","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"holder","type":"address"},{"indexed":false,"name":"cardId","type":"string"},{"indexed":true,"name":"ethId","type":"uint256"}],"name":"MintCard","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]
Contract Creation Code
60806040526000600e553480156200001657600080fd5b5060405162004be338038062004be3833981018060405260608110156200003c57600080fd5b81019080805190602001909291908051906020019092919080516401000000008111156200006957600080fd5b828101905060208101848111156200008057600080fd5b81518560018202830111640100000000821117156200009e57600080fd5b50509291905050506040518060400160405280600d81526020017f53706c696e7465726c616e6473000000000000000000000000000000000000008152506040518060400160405280600681526020017f534c43415244000000000000000000000000000000000000000000000000000081525084828281816200012f6301ffc9a760e01b6200030560201b60201c565b620001476380ac58cd60e01b6200030560201b60201c565b6200015f63780e9d6360e01b6200030560201b60201c565b81600990805190602001906200017792919062000416565b5080600a90805190602001906200019092919062000416565b50620001a9635b5e139f60e01b6200030560201b60201c565b505050506000620001bf6200040e60201b60201c565b905080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060109080519060200190620002fb92919062000416565b50505050620004c5565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620003a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200045957805160ff19168380011785556200048a565b828001600101855582156200048a579182015b82811115620004895782518255916020019190600101906200046c565b5b5090506200049991906200049d565b5090565b620004c291905b80821115620004be576000816000905550600101620004a4565b5090565b90565b61470e80620004d56000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063ba7e7d05116100ad578063cd7c03261161007c578063cd7c032614610f59578063d547cfb714610fa3578063e985e9c514611026578063f2fde38b146110a2578063fca3b5aa146110e6576101fb565b8063ba7e7d0514610cf0578063c209818a14610d1e578063c87b56dd14610de3578063cb2fea6314610e8a576101fb565b806395d89b41116100e957806395d89b4114610a49578063a22cb46514610acc578063b88d4fde14610b1c578063b897c25f14610c21576101fb565b8063715018a61461092c5780638da5cb5b146109365780638dc10768146109805780638f32d59b14610a27576101fb565b8063283bf720116101925780634f6ccce7116101615780634f6ccce71461077d5780635099e5ab146107bf5780636352211e1461086657806370a08231146108d4576101fb565b8063283bf720146105395780632f745c59146105d25780633833b3a11461063457806342842e0e1461070f576101fb565b80630ed16a28116101ce5780630ed16a28146103a457806318160ddd1461045f5780631979cc521461047d57806323b872dd146104cb576101fb565b806301ffc9a71461020057806306fdde0314610265578063081812fc146102e8578063095ea7b314610356575b600080fd5b61024b6004803603602081101561021657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061112a565b604051808215151515815260200191505060405180910390f35b61026d611191565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ad578082015181840152602081019050610292565b50505050905090810190601f1680156102da5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610314600480360360208110156102fe57600080fd5b8101908080359060200190929190505050611233565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a26004803603604081101561036c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112ce565b005b61045d600480360360208110156103ba57600080fd5b81019080803590602001906401000000008111156103d757600080fd5b8201836020820111156103e957600080fd5b8035906020019184600183028401116401000000008311171561040b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506114b5565b005b610467611549565b6040518082815260200191505060405180910390f35b6104c96004803603604081101561049357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611556565b005b610537600480360360608110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116d3565b005b61057b6004803603602081101561054f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611749565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156105be5780820151818401526020810190506105a3565b505050509050019250505060405180910390f35b61061e600480360360408110156105e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117aa565b6040518082815260200191505060405180910390f35b61070d6004803603604081101561064a57600080fd5b810190808035906020019064010000000081111561066757600080fd5b82018360208201111561067957600080fd5b8035906020019184600183028401116401000000008311171561069b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611869565b005b61077b6004803603606081101561072557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bf1565b005b6107a96004803603602081101561079357600080fd5b8101908080359060200190929190505050611c11565b6040518082815260200191505060405180910390f35b6107eb600480360360208110156107d557600080fd5b8101908080359060200190929190505050611c91565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082b578082015181840152602081019050610810565b50505050905090810190601f1680156108585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108926004803603602081101561087c57600080fd5b8101908080359060200190929190505050611d49565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610916600480360360208110156108ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e11565b6040518082815260200191505060405180910390f35b610934611ee6565b005b61093e612021565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109ac6004803603602081101561099657600080fd5b810190808035906020019092919050505061204b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109ec5780820151818401526020810190506109d1565b50505050905090810190601f168015610a195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a2f612101565b604051808215151515815260200191505060405180910390f35b610a51612160565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a91578082015181840152602081019050610a76565b50505050905090810190601f168015610abe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b1a60048036036040811015610ae257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612202565b005b610c1f60048036036080811015610b3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610b9957600080fd5b820183602082011115610bab57600080fd5b80359060200191846001830284011164010000000083111715610bcd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506123ba565b005b610cda60048036036020811015610c3757600080fd5b8101908080359060200190640100000000811115610c5457600080fd5b820183602082011115610c6657600080fd5b80359060200191846001830284011164010000000083111715610c8857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612432565b6040518082815260200191505060405180910390f35b610d1c60048036036020811015610d0657600080fd5b81019080803590602001909291905050506124a5565b005b610de160048036036040811015610d3457600080fd5b810190808035906020019092919080359060200190640100000000811115610d5b57600080fd5b820183602082011115610d6d57600080fd5b80359060200191846001830284011164010000000083111715610d8f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061261f565b005b610e0f60048036036020811015610df957600080fd5b8101908080359060200190929190505050612806565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e4f578082015181840152602081019050610e34565b50505050905090810190601f168015610e7c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610f4360048036036020811015610ea057600080fd5b8101908080359060200190640100000000811115610ebd57600080fd5b820183602082011115610ecf57600080fd5b80359060200191846001830284011164010000000083111715610ef157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506128ce565b6040518082815260200191505060405180910390f35b610f616128fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610fab612922565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610feb578082015181840152602081019050610fd0565b50505050905090810190601f1680156110185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6110886004803603604081101561103c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129c4565b604051808215151515815260200191505060405180910390f35b6110e4600480360360208110156110b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a6f565b005b611128600480360360208110156110fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612af5565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b5050505050905090565b600061123e82612bb3565b611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806145eb602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006112d982611d49565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146406021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661137f612c25565b73ffffffffffffffffffffffffffffffffffffffff1614806113ae57506113ad816113a8612c25565b6129c4565b5b611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806145606038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6114bd612101565b61152f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060109080519060200190611545929190614373565b5050565b6000600780549050905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204d696e7465720000000000000081525060200191505060405180910390fd5b813073ffffffffffffffffffffffffffffffffffffffff1661163a82611d49565b73ffffffffffffffffffffffffffffffffffffffff16146116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204c6f636b65640000000000000081525060200191505060405180910390fd5b6116ce3083856116d3565b505050565b6116e46116de612c25565b82612c2d565b611739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806146616031913960400191505060405180910390fd5b611744838383612d21565b505050565b606061175482612d45565b80548060200260200160405190810160405280929190818152602001828054801561179e57602002820191906000526020600020905b81548152602001906001019080831161178a575b50505050509050919050565b60006117b583611e11565b821061180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061448d602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061185657fe5b9060005260206000200154905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204d696e7465720000000000000081525060200191505060405180910390fd5b6012826040518082805190602001908083835b60208310611962578051825260208201915060208101905060208303925061193f565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902054600014611a0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f53706c696e7465726c616e64733a20436172642045786973747300000000000081525060200191505060405180910390fd5b6000611a15612d8d565b905082601160008381526020019081526020016000206000019080519060200190611a41929190614373565b50806012846040518082805190602001908083835b60208310611a795780518252602082019150602081019050602083039250611a56565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902081905550611ab982612daa565b60018101611ac5612d8d565b14611b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f53706c696e7465726c616e64733a2053616665747920436865636b000000000081525060200191505060405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff167fc56f6537c00b21a8df172c4bc3943d2a831b890155828d4932a1aae9af64a4bb856040518080602001828103825283818151815260200191508051906020019080838360005b83811015611bb2578082015181840152602081019050611b97565b50505050905090810190601f168015611bdf5780820380516001836020036101000a031916815260200191505b509250505060405180910390a3505050565b611c0c838383604051806020016040528060008152506123ba565b505050565b6000611c1b611549565b8210611c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614692602c913960400191505060405180910390fd5b60078281548110611c7f57fe5b90600052602060002001549050919050565b6060601160008381526020019081526020016000206000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d3d5780601f10611d1257610100808354040283529160200191611d3d565b820191906000526020600020905b815481529060010190602001808311611d2057829003601f168201915b50505050509050919050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806145c26029913960400191505060405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614598602a913960400191505060405180910390fd5b611edf600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612dcc565b9050919050565b611eee612101565b611f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6011602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120f75780601f106120cc576101008083540402835291602001916120f7565b820191906000526020600020905b8154815290600101906020018083116120da57829003601f168201915b5050505050905081565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612144612c25565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f85780601f106121cd576101008083540402835291602001916121f8565b820191906000526020600020905b8154815290600101906020018083116121db57829003601f168201915b5050505050905090565b61220a612c25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b80600460006122b8612c25565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612365612c25565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6123cb6123c5612c25565b83612c2d565b612420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806146616031913960400191505060405180910390fd5b61242c84848484612dda565b50505050565b60006012826040518082805190602001908083835b6020831061246a5780518252602082019150602081019050602083039250612447565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020549050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612568576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204d696e7465720000000000000081525060200191505060405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff1661258982611d49565b73ffffffffffffffffffffffffffffffffffffffff1614612612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204c6f636b65640000000000000081525060200191505060405180910390fd5b61261b82612e4c565b5050565b3373ffffffffffffffffffffffffffffffffffffffff1661263f83611d49565b73ffffffffffffffffffffffffffffffffffffffff16146126c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f7420486f6c6465720000000000000081525060200191505060405180910390fd5b60606126d383611c91565b90506126e03330856116d3565b823373ffffffffffffffffffffffffffffffffffffffff167fc31b717eeda039f84fc359b75e83e623ca2fd6648ff2b7b1ec3f468ca0f9393c8385604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561275f578082015181840152602081019050612744565b50505050905090810190601f16801561278c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156127c55780820151818401526020810190506127aa565b50505050905090810190601f1680156127f25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050565b60606128c7612813612922565b601160008581526020019081526020016000206000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128bd5780601f10612892576101008083540402835291602001916128bd565b820191906000526020600020905b8154815290600101906020018083116128a057829003601f168201915b5050505050612e61565b9050919050565b6012818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060108054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129ba5780601f1061298f576101008083540402835291602001916129ba565b820191906000526020600020905b81548152906001019060200180831161299d57829003601f168201915b5050505050905090565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612a4e5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612a5c5760019050612a69565b612a668383612ea5565b90505b92915050565b612a77612101565b612ae9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612af281612fd6565b50565b612afd612101565b612b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000612c3882612bb3565b612c8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614534602c913960400191505060405180910390fd5b6000612c9883611d49565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d0757508373ffffffffffffffffffffffffffffffffffffffff16612cef84611233565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d185750612d1781856129c4565b5b91505092915050565b612d2c83838361311c565b612d368382613377565b612d408282613515565b505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050919050565b6000612da56001600e546135dc90919063ffffffff16565b905090565b6000612db4612d8d565b9050612dc08282613664565b612dc8613685565b5050565b600081600001549050919050565b612de5848484612d21565b612df184848484613699565b612e46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806144b86032913960400191505060405180910390fd5b50505050565b612e5e612e5882611d49565b82613889565b50565b6060612e9d83836040518060200160405280600081525060405180602001604052806000815250604051806020016040528060008152506138e6565b905092915050565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612f6157600080fd5b505afa158015612f75573d6000803e3d6000fd5b505050506040513d6020811015612f8b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415612fc2576001915050612fd0565b612fcc8484613bac565b9150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561305c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806144ea6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff1661313c82611d49565b73ffffffffffffffffffffffffffffffffffffffff16146131a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806146176029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561322e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806145106024913960400191505060405180910390fd5b61323781613c40565b61327e600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613cfe565b6132c5600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613d21565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006133cf6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613d3790919063ffffffff16565b90506000600660008481526020019081526020016000205490508181146134bc576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061343c57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061349457fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361350e91906143f3565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b60008082840190508381101561365a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61366e8282613d81565b6136788282613515565b61368181613f99565b5050565b600e60008154809291906001019190505550565b60006136ba8473ffffffffffffffffffffffffffffffffffffffff16613fe5565b6136c75760019050613881565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a026136ed612c25565b8887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137a957808201518184015260208101905061378e565b50505050905090810190601f1680156137d65780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156137f857600080fd5b505af115801561380c573d6000803e3d6000fd5b505050506040513d602081101561382257600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b6138938282614030565b6000600b6000838152602001908152602001600020805460018160011615610100020316600290049050146138e257600b600082815260200190815260200160002060006138e1919061441f565b5b5050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156139425781602001600182028038833980820191505090505b5090506060819050600080905060008090505b88518110156139c35788818151811061396a57fe5b602001015160f81c60f81b83838060010194508151811061398757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613955565b5060008090505b8751811015613a38578781815181106139df57fe5b602001015160f81c60f81b8383806001019450815181106139fc57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506139ca565b5060008090505b8651811015613aad57868181518110613a5457fe5b602001015160f81c60f81b838380600101945081518110613a7157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613a3f565b5060008090505b8551811015613b2257858181518110613ac957fe5b602001015160f81c60f81b838380600101945081518110613ae657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613ab4565b5060008090505b8451811015613b9757848181518110613b3e57fe5b602001015160f81c60f81b838380600101945081518110613b5b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613b29565b50819850505050505050505095945050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613cfb5760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b613d1660018260000154613d3790919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000613d7983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061406a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b613e2d81612bb3565b15613ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613f39600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613d21565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156140275750808214155b92505050919050565b61403a828261412a565b6140448282613377565b60006006600083815260200190815260200160002081905550614066816142b9565b5050565b6000838311158290614117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140dc5780820151818401526020810190506140c1565b50505050905090810190601f1680156141095780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b8173ffffffffffffffffffffffffffffffffffffffff1661414a82611d49565b73ffffffffffffffffffffffffffffffffffffffff16146141b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806146be6025913960400191505060405180910390fd5b6141bf81613c40565b614206600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613cfe565b60006001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006142d46001600780549050613d3790919063ffffffff16565b90506000600860008481526020019081526020016000205490506000600783815481106142fd57fe5b90600052602060002001549050806007838154811061431857fe5b9060005260206000200181905550816008600083815260200190815260200160002081905550600780548091906001900361435391906143f3565b506000600860008681526020019081526020016000208190555050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106143b457805160ff19168380011785556143e2565b828001600101855582156143e2579182015b828111156143e15782518255916020019190600101906143c6565b5b5090506143ef9190614467565b5090565b81548183558181111561441a578183600052602060002091820191016144199190614467565b5b505050565b50805460018160011615610100020316600290046000825580601f106144455750614464565b601f0160209004906000526020600020908101906144639190614467565b5b50565b61448991905b8082111561448557600081600090555060010161446d565b5090565b9056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e64734552433732313a206275726e206f6620746f6b656e2074686174206973206e6f74206f776ea165627a7a723058204fca12f6d3e673bcf732b6f93ee59aa39f20f39cd0fdc7eac334906bba67bfd60029000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002c68747470733a2f2f737465656d6d6f6e73746572732e636f6d2f63617264732f6d657461646174613f69643d0000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063ba7e7d05116100ad578063cd7c03261161007c578063cd7c032614610f59578063d547cfb714610fa3578063e985e9c514611026578063f2fde38b146110a2578063fca3b5aa146110e6576101fb565b8063ba7e7d0514610cf0578063c209818a14610d1e578063c87b56dd14610de3578063cb2fea6314610e8a576101fb565b806395d89b41116100e957806395d89b4114610a49578063a22cb46514610acc578063b88d4fde14610b1c578063b897c25f14610c21576101fb565b8063715018a61461092c5780638da5cb5b146109365780638dc10768146109805780638f32d59b14610a27576101fb565b8063283bf720116101925780634f6ccce7116101615780634f6ccce71461077d5780635099e5ab146107bf5780636352211e1461086657806370a08231146108d4576101fb565b8063283bf720146105395780632f745c59146105d25780633833b3a11461063457806342842e0e1461070f576101fb565b80630ed16a28116101ce5780630ed16a28146103a457806318160ddd1461045f5780631979cc521461047d57806323b872dd146104cb576101fb565b806301ffc9a71461020057806306fdde0314610265578063081812fc146102e8578063095ea7b314610356575b600080fd5b61024b6004803603602081101561021657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061112a565b604051808215151515815260200191505060405180910390f35b61026d611191565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ad578082015181840152602081019050610292565b50505050905090810190601f1680156102da5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610314600480360360208110156102fe57600080fd5b8101908080359060200190929190505050611233565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a26004803603604081101561036c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112ce565b005b61045d600480360360208110156103ba57600080fd5b81019080803590602001906401000000008111156103d757600080fd5b8201836020820111156103e957600080fd5b8035906020019184600183028401116401000000008311171561040b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506114b5565b005b610467611549565b6040518082815260200191505060405180910390f35b6104c96004803603604081101561049357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611556565b005b610537600480360360608110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116d3565b005b61057b6004803603602081101561054f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611749565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156105be5780820151818401526020810190506105a3565b505050509050019250505060405180910390f35b61061e600480360360408110156105e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117aa565b6040518082815260200191505060405180910390f35b61070d6004803603604081101561064a57600080fd5b810190808035906020019064010000000081111561066757600080fd5b82018360208201111561067957600080fd5b8035906020019184600183028401116401000000008311171561069b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611869565b005b61077b6004803603606081101561072557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bf1565b005b6107a96004803603602081101561079357600080fd5b8101908080359060200190929190505050611c11565b6040518082815260200191505060405180910390f35b6107eb600480360360208110156107d557600080fd5b8101908080359060200190929190505050611c91565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082b578082015181840152602081019050610810565b50505050905090810190601f1680156108585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108926004803603602081101561087c57600080fd5b8101908080359060200190929190505050611d49565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610916600480360360208110156108ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e11565b6040518082815260200191505060405180910390f35b610934611ee6565b005b61093e612021565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109ac6004803603602081101561099657600080fd5b810190808035906020019092919050505061204b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109ec5780820151818401526020810190506109d1565b50505050905090810190601f168015610a195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a2f612101565b604051808215151515815260200191505060405180910390f35b610a51612160565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a91578082015181840152602081019050610a76565b50505050905090810190601f168015610abe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b1a60048036036040811015610ae257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612202565b005b610c1f60048036036080811015610b3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610b9957600080fd5b820183602082011115610bab57600080fd5b80359060200191846001830284011164010000000083111715610bcd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506123ba565b005b610cda60048036036020811015610c3757600080fd5b8101908080359060200190640100000000811115610c5457600080fd5b820183602082011115610c6657600080fd5b80359060200191846001830284011164010000000083111715610c8857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612432565b6040518082815260200191505060405180910390f35b610d1c60048036036020811015610d0657600080fd5b81019080803590602001909291905050506124a5565b005b610de160048036036040811015610d3457600080fd5b810190808035906020019092919080359060200190640100000000811115610d5b57600080fd5b820183602082011115610d6d57600080fd5b80359060200191846001830284011164010000000083111715610d8f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061261f565b005b610e0f60048036036020811015610df957600080fd5b8101908080359060200190929190505050612806565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e4f578082015181840152602081019050610e34565b50505050905090810190601f168015610e7c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610f4360048036036020811015610ea057600080fd5b8101908080359060200190640100000000811115610ebd57600080fd5b820183602082011115610ecf57600080fd5b80359060200191846001830284011164010000000083111715610ef157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506128ce565b6040518082815260200191505060405180910390f35b610f616128fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610fab612922565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610feb578082015181840152602081019050610fd0565b50505050905090810190601f1680156110185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6110886004803603604081101561103c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129c4565b604051808215151515815260200191505060405180910390f35b6110e4600480360360208110156110b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a6f565b005b611128600480360360208110156110fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612af5565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b5050505050905090565b600061123e82612bb3565b611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806145eb602c913960400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006112d982611d49565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146406021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661137f612c25565b73ffffffffffffffffffffffffffffffffffffffff1614806113ae57506113ad816113a8612c25565b6129c4565b5b611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806145606038913960400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6114bd612101565b61152f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060109080519060200190611545929190614373565b5050565b6000600780549050905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204d696e7465720000000000000081525060200191505060405180910390fd5b813073ffffffffffffffffffffffffffffffffffffffff1661163a82611d49565b73ffffffffffffffffffffffffffffffffffffffff16146116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204c6f636b65640000000000000081525060200191505060405180910390fd5b6116ce3083856116d3565b505050565b6116e46116de612c25565b82612c2d565b611739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806146616031913960400191505060405180910390fd5b611744838383612d21565b505050565b606061175482612d45565b80548060200260200160405190810160405280929190818152602001828054801561179e57602002820191906000526020600020905b81548152602001906001019080831161178a575b50505050509050919050565b60006117b583611e11565b821061180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061448d602b913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061185657fe5b9060005260206000200154905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204d696e7465720000000000000081525060200191505060405180910390fd5b6012826040518082805190602001908083835b60208310611962578051825260208201915060208101905060208303925061193f565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902054600014611a0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f53706c696e7465726c616e64733a20436172642045786973747300000000000081525060200191505060405180910390fd5b6000611a15612d8d565b905082601160008381526020019081526020016000206000019080519060200190611a41929190614373565b50806012846040518082805190602001908083835b60208310611a795780518252602082019150602081019050602083039250611a56565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902081905550611ab982612daa565b60018101611ac5612d8d565b14611b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f53706c696e7465726c616e64733a2053616665747920436865636b000000000081525060200191505060405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff167fc56f6537c00b21a8df172c4bc3943d2a831b890155828d4932a1aae9af64a4bb856040518080602001828103825283818151815260200191508051906020019080838360005b83811015611bb2578082015181840152602081019050611b97565b50505050905090810190601f168015611bdf5780820380516001836020036101000a031916815260200191505b509250505060405180910390a3505050565b611c0c838383604051806020016040528060008152506123ba565b505050565b6000611c1b611549565b8210611c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614692602c913960400191505060405180910390fd5b60078281548110611c7f57fe5b90600052602060002001549050919050565b6060601160008381526020019081526020016000206000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d3d5780601f10611d1257610100808354040283529160200191611d3d565b820191906000526020600020905b815481529060010190602001808311611d2057829003601f168201915b50505050509050919050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806145c26029913960400191505060405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614598602a913960400191505060405180910390fd5b611edf600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612dcc565b9050919050565b611eee612101565b611f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6011602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120f75780601f106120cc576101008083540402835291602001916120f7565b820191906000526020600020905b8154815290600101906020018083116120da57829003601f168201915b5050505050905081565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612144612c25565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121f85780601f106121cd576101008083540402835291602001916121f8565b820191906000526020600020905b8154815290600101906020018083116121db57829003601f168201915b5050505050905090565b61220a612c25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b80600460006122b8612c25565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612365612c25565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6123cb6123c5612c25565b83612c2d565b612420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806146616031913960400191505060405180910390fd5b61242c84848484612dda565b50505050565b60006012826040518082805190602001908083835b6020831061246a5780518252602082019150602081019050602083039250612447565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020549050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612568576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204d696e7465720000000000000081525060200191505060405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff1661258982611d49565b73ffffffffffffffffffffffffffffffffffffffff1614612612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f74204c6f636b65640000000000000081525060200191505060405180910390fd5b61261b82612e4c565b5050565b3373ffffffffffffffffffffffffffffffffffffffff1661263f83611d49565b73ffffffffffffffffffffffffffffffffffffffff16146126c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f53706c696e7465726c616e64733a204e6f7420486f6c6465720000000000000081525060200191505060405180910390fd5b60606126d383611c91565b90506126e03330856116d3565b823373ffffffffffffffffffffffffffffffffffffffff167fc31b717eeda039f84fc359b75e83e623ca2fd6648ff2b7b1ec3f468ca0f9393c8385604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561275f578082015181840152602081019050612744565b50505050905090810190601f16801561278c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156127c55780820151818401526020810190506127aa565b50505050905090810190601f1680156127f25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3505050565b60606128c7612813612922565b601160008581526020019081526020016000206000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128bd5780601f10612892576101008083540402835291602001916128bd565b820191906000526020600020905b8154815290600101906020018083116128a057829003601f168201915b5050505050612e61565b9050919050565b6012818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060108054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129ba5780601f1061298f576101008083540402835291602001916129ba565b820191906000526020600020905b81548152906001019060200180831161299d57829003601f168201915b5050505050905090565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612a4e5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612a5c5760019050612a69565b612a668383612ea5565b90505b92915050565b612a77612101565b612ae9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612af281612fd6565b50565b612afd612101565b612b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600033905090565b6000612c3882612bb3565b612c8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614534602c913960400191505060405180910390fd5b6000612c9883611d49565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d0757508373ffffffffffffffffffffffffffffffffffffffff16612cef84611233565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d185750612d1781856129c4565b5b91505092915050565b612d2c83838361311c565b612d368382613377565b612d408282613515565b505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050919050565b6000612da56001600e546135dc90919063ffffffff16565b905090565b6000612db4612d8d565b9050612dc08282613664565b612dc8613685565b5050565b600081600001549050919050565b612de5848484612d21565b612df184848484613699565b612e46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806144b86032913960400191505060405180910390fd5b50505050565b612e5e612e5882611d49565b82613889565b50565b6060612e9d83836040518060200160405280600081525060405180602001604052806000815250604051806020016040528060008152506138e6565b905092915050565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612f6157600080fd5b505afa158015612f75573d6000803e3d6000fd5b505050506040513d6020811015612f8b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415612fc2576001915050612fd0565b612fcc8484613bac565b9150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561305c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806144ea6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff1661313c82611d49565b73ffffffffffffffffffffffffffffffffffffffff16146131a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806146176029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561322e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806145106024913960400191505060405180910390fd5b61323781613c40565b61327e600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613cfe565b6132c5600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613d21565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006133cf6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050613d3790919063ffffffff16565b90506000600660008481526020019081526020016000205490508181146134bc576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061343c57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061349457fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361350e91906143f3565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b60008082840190508381101561365a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61366e8282613d81565b6136788282613515565b61368181613f99565b5050565b600e60008154809291906001019190505550565b60006136ba8473ffffffffffffffffffffffffffffffffffffffff16613fe5565b6136c75760019050613881565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a026136ed612c25565b8887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137a957808201518184015260208101905061378e565b50505050905090810190601f1680156137d65780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156137f857600080fd5b505af115801561380c573d6000803e3d6000fd5b505050506040513d602081101561382257600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b6138938282614030565b6000600b6000838152602001908152602001600020805460018160011615610100020316600290049050146138e257600b600082815260200190815260200160002060006138e1919061441f565b5b5050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156139425781602001600182028038833980820191505090505b5090506060819050600080905060008090505b88518110156139c35788818151811061396a57fe5b602001015160f81c60f81b83838060010194508151811061398757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613955565b5060008090505b8751811015613a38578781815181106139df57fe5b602001015160f81c60f81b8383806001019450815181106139fc57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506139ca565b5060008090505b8651811015613aad57868181518110613a5457fe5b602001015160f81c60f81b838380600101945081518110613a7157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613a3f565b5060008090505b8551811015613b2257858181518110613ac957fe5b602001015160f81c60f81b838380600101945081518110613ae657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613ab4565b5060008090505b8451811015613b9757848181518110613b3e57fe5b602001015160f81c60f81b838380600101945081518110613b5b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613b29565b50819850505050505050505095945050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613cfb5760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b613d1660018260000154613d3790919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000613d7983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061406a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b613e2d81612bb3565b15613ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613f39600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613d21565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156140275750808214155b92505050919050565b61403a828261412a565b6140448282613377565b60006006600083815260200190815260200160002081905550614066816142b9565b5050565b6000838311158290614117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140dc5780820151818401526020810190506140c1565b50505050905090810190601f1680156141095780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b8173ffffffffffffffffffffffffffffffffffffffff1661414a82611d49565b73ffffffffffffffffffffffffffffffffffffffff16146141b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806146be6025913960400191505060405180910390fd5b6141bf81613c40565b614206600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613cfe565b60006001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006142d46001600780549050613d3790919063ffffffff16565b90506000600860008481526020019081526020016000205490506000600783815481106142fd57fe5b90600052602060002001549050806007838154811061431857fe5b9060005260206000200181905550816008600083815260200190815260200160002081905550600780548091906001900361435391906143f3565b506000600860008681526020019081526020016000208190555050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106143b457805160ff19168380011785556143e2565b828001600101855582156143e2579182015b828111156143e15782518255916020019190600101906143c6565b5b5090506143ef9190614467565b5090565b81548183558181111561441a578183600052602060002091820191016144199190614467565b5b505050565b50805460018160011615610100020316600290046000825580601f106144455750614464565b601f0160209004906000526020600020908101906144639190614467565b5b50565b61448991905b8082111561448557600081600090555060010161446d565b5090565b9056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e64734552433732313a206275726e206f6620746f6b656e2074686174206973206e6f74206f776ea165627a7a723058204fca12f6d3e673bcf732b6f93ee59aa39f20f39cd0fdc7eac334906bba67bfd60029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002c68747470733a2f2f737465656d6d6f6e73746572732e636f6d2f63617264732f6d657461646174613f69643d0000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _proxyAddr (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [1] : _minter (address): 0x0000000000000000000000000000000000000000
Arg [2] : _baseTokenURI (string): https://steemmonsters.com/cards/metadata?id=
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 000000000000000000000000000000000000000000000000000000000000002c
Arg [4] : 68747470733a2f2f737465656d6d6f6e73746572732e636f6d2f63617264732f
Arg [5] : 6d657461646174613f69643d0000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
63:3209:15:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;63:3209:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;915:133:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;915:133:3;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1127:83:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1127:83:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4227:200:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4227:200:4;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3527:415;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3527:415:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1060:116:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1060:116:15;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1060:116:15;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1060:116:15;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1060:116:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1060:116:15;;;;;;;;;;;;;;;:::i;:::-;;2145:94:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2090:159:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2090:159:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5873:287:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5873:287:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2616:125:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2616:125:15;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2616:125:15;;;;;;;;;;;;;;;;;1763:229:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1763:229:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1280:468:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1280:468:15;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1280:468:15;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1280:468:15;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1280:468:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1280:468:15;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6809:132:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6809:132:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2577:196:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2577:196:5;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2879:135:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2879:135:15;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2879:135:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2883:223:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2883:223:4;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2457:207;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2457:207:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1679:137:13;;;:::i;:::-;;894:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;165:37:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;165:37:15;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;165:37:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1245:92:13;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1319:87:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1319:87:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4720:249:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4720:249:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7664:269;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7664:269:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7664:269:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7664:269:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7664:269:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7664:269:4;;;;;;;;;;;;;;;:::i;:::-;;2747:126:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2747:126:15;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2747:126:15;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2747:126:15;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2747:126:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2747:126:15;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2255:103;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2255:103:15;;;;;;;;;;;;;;;;;:::i;:::-;;1754:330;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1754:330:15;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1754:330:15;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1754:330:15;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1754:330:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1754:330:15;;;;;;;;;;;;;;;:::i;:::-;;856:198;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;856:198:15;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;856:198:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;208:40;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;208:40:15;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;208:40:15;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;208:40:15;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;208:40:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;208:40:15;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;458:35:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;752:98:15;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;752:98:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2364:245;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2364:245:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1965:107:13;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1965:107:13;;;;;;;;;;;;;;;;;;;:::i;:::-;;1182:92:15;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1182:92:15;;;;;;;;;;;;;;;;;;;:::i;:::-;;915:133:3;985:4;1008:20;:33;1029:11;1008:33;;;;;;;;;;;;;;;;;;;;;;;;;;;1001:40;;915:133;;;:::o;1127:83:7:-;1166:13;1198:5;1191:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1127:83;:::o;4227:200:4:-;4286:7;4313:16;4321:7;4313;:16::i;:::-;4305:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4396:15;:24;4412:7;4396:24;;;;;;;;;;;;;;;;;;;;;4389:31;;4227:200;;;:::o;3527:415::-;3590:13;3606:16;3614:7;3606;:16::i;:::-;3590:32;;3646:5;3640:11;;:2;:11;;;;3632:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3724:5;3708:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3733:37;3750:5;3757:12;:10;:12::i;:::-;3733:16;:37::i;:::-;3708:62;3700:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3890:2;3863:15;:24;3879:7;3863:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;3927:7;3923:2;3907:28;;3916:5;3907:28;;;;;;;;;;;;3527:415;;;:::o;1060:116:15:-;1098:9:13;:7;:9::i;:::-;1090:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1158:11:15;1141:14;:28;;;;;;;;;;;;:::i;:::-;;1060:116;:::o;2145:94:5:-;2189:7;2215:10;:17;;;;2208:24;;2145:94;:::o;2090:159:15:-;3074:6;;;;;;;;;;;3060:20;;:10;:20;;;3052:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:6;3217:4;3190:32;;:15;3198:6;3190:7;:15::i;:::-;:32;;;3182:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2195:47;2216:4;2223:10;2235:6;2195:12;:47::i;:::-;3120:1;2090:159;;:::o;5873:287:4:-;6015:41;6034:12;:10;:12::i;:::-;6048:7;6015:18;:41::i;:::-;6007:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6121:32;6135:4;6141:2;6145:7;6121:13;:32::i;:::-;5873:287;;;:::o;2616:125:15:-;2677:16;2712:22;2727:6;2712:14;:22::i;:::-;2705:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2616:125;;;:::o;1763:229:5:-;1843:7;1878:16;1888:5;1878:9;:16::i;:::-;1870:5;:24;1862:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1959:12;:19;1972:5;1959:19;;;;;;;;;;;;;;;1979:5;1959:26;;;;;;;;;;;;;;;;1952:33;;1763:229;;;;:::o;1280:468:15:-;3074:6;;;;;;;;;;;3060:20;;:10;:20;;;3052:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1383:6;1390:11;1383:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1383:19:15;;;;;;;;;;;;;;;;;;;;;;1378:1;:24;1370:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1444:16;1463:17;:15;:17::i;:::-;1444:36;;1525:11;1491:5;:15;1497:8;1491:15;;;;;;;;;;;:31;;:45;;;;;;;;;;;;:::i;:::-;;1568:8;1546:6;1553:11;1546:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1546:19:15;;;;;;;;;;;;;;;;;;;;;:30;;;;1587:15;1594:7;1587:6;:15::i;:::-;1652:1;1641:8;:12;1620:17;:15;:17::i;:::-;:33;1612:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1732:8;1710:7;1701:40;;;1719:11;1701:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1701:40:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3120:1;1280:468;;:::o;6809:132:4:-;6895:39;6912:4;6918:2;6922:7;6895:39;;;;;;;;;;;;:16;:39::i;:::-;6809:132;;;:::o;2577:196:5:-;2635:7;2670:13;:11;:13::i;:::-;2662:5;:21;2654:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2749:10;2760:5;2749:17;;;;;;;;;;;;;;;;2742:24;;2577:196;;;:::o;2879:135:15:-;2944:13;2976:5;:15;2982:8;2976:15;;;;;;;;;;;:31;;2969:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2879:135;;;:::o;2883:223:4:-;2938:7;2957:13;2973:11;:20;2985:7;2973:20;;;;;;;;;;;;;;;;;;;;;2957:36;;3028:1;3011:19;;:5;:19;;;;3003:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3094:5;3087:12;;;2883:223;;;:::o;2457:207::-;2512:7;2556:1;2539:19;;:5;:19;;;;2531:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2623:34;:17;:24;2641:5;2623:24;;;;;;;;;;;;;;;:32;:34::i;:::-;2616:41;;2457:207;;;:::o;1679:137:13:-;1098:9;:7;:9::i;:::-;1090:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1777:1;1740:40;;1761:6;;;;;;;;;;;1740:40;;;;;;;;;;;;1807:1;1790:6;;:19;;;;;;;;;;;;;;;;;;1679:137::o;894:77::-;932:7;958:6;;;;;;;;;;;951:13;;894:77;:::o;165:37:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1245:92:13:-;1285:4;1324:6;;;;;;;;;;;1308:22;;:12;:10;:12::i;:::-;:22;;;1301:29;;1245:92;:::o;1319:87:7:-;1360:13;1392:7;1385:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1319:87;:::o;4720:249:4:-;4805:12;:10;:12::i;:::-;4799:18;;:2;:18;;;;4791:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4897:8;4858:18;:32;4877:12;:10;:12::i;:::-;4858:32;;;;;;;;;;;;;;;:36;4891:2;4858:36;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;4949:2;4920:42;;4935:12;:10;:12::i;:::-;4920:42;;;4953:8;4920:42;;;;;;;;;;;;;;;;;;;;;;4720:249;;:::o;7664:269::-;7778:41;7797:12;:10;:12::i;:::-;7811:7;7778:18;:41::i;:::-;7770:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7883:43;7901:4;7907:2;7911:7;7920:5;7883:17;:43::i;:::-;7664:269;;;;:::o;2747:126:15:-;2821:7;2847:6;2854:11;2847:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2847:19:15;;;;;;;;;;;;;;;;;;;;;;2840:26;;2747:126;;;:::o;2255:103::-;3074:6;;;;;;;;;;;3060:20;;:10;:20;;;3052:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2320:6;3217:4;3190:32;;:15;3198:6;3190:7;:15::i;:::-;:32;;;3182:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2338:13;2344:6;2338:5;:13::i;:::-;3120:1;2255:103;:::o;1754:330::-;1858:10;1839:29;;:15;1847:6;1839:7;:15::i;:::-;:29;;;1831:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1909:20;1932:24;1949:6;1932:16;:24::i;:::-;1909:47;;1966;1979:10;1999:4;2006:6;1966:12;:47::i;:::-;2070:6;2038:10;2029:48;;;2050:6;2058:10;2029:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2029:48:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2029:48:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1754:330;;;:::o;856:198::-;915:13;947:100;978:14;:12;:14::i;:::-;1006:5;:15;1012:8;1006:15;;;;;;;;;;;:31;;947:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:100::i;:::-;940:107;;856:198;;;:::o;208:40::-;;;28:7:-1;22:14;169:4;160:7;156:18;147:7;143:32;204:13;198:20;246:8;231:13;224:31;316:4;307:7;303:18;296:4;287:7;283:18;273:49;350:9;335:13;328:32;378:4;366:16;;0:388;;;;208:40:15;;;;;;;;:::o;458:35:17:-;;;;;;;;;;;;;:::o;752:98:15:-;797:13;829:14;822:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;752:98;:::o;2364:245::-;2444:4;2481;2464:22;;:5;:22;;;:44;;;;;2502:6;;;;;;;;;;;2490:18;;:8;:18;;;2464:44;2460:86;;;2531:4;2524:11;;;;2460:86;2563:39;2586:5;2593:8;2563:22;:39::i;:::-;2556:46;;2364:245;;;;;:::o;1965:107:13:-;1098:9;:7;:9::i;:::-;1090:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2037:28;2056:8;2037:18;:28::i;:::-;1965:107;:::o;1182:92:15:-;1098:9:13;:7;:9::i;:::-;1090:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1257:10:15;1248:6;;:19;;;;;;;;;;;;;;;;;;1182:92;:::o;9102:152:4:-;9159:4;9175:13;9191:11;:20;9203:7;9191:20;;;;;;;;;;;;;;;;;;;;;9175:36;;9245:1;9228:19;;:5;:19;;;;9221:26;;;9102:152;;;:::o;788:96:1:-;833:15;867:10;860:17;;788:96;:::o;9615:329:4:-;9700:4;9724:16;9732:7;9724;:16::i;:::-;9716:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9799:13;9815:16;9823:7;9815;:16::i;:::-;9799:32;;9860:5;9849:16;;:7;:16;;;:51;;;;9893:7;9869:31;;:20;9881:7;9869:11;:20::i;:::-;:31;;;9849:51;:87;;;;9904:32;9921:5;9928:7;9904:16;:32::i;:::-;9849:87;9841:96;;;9615:329;;;;:::o;3148:239:5:-;3233:38;3253:4;3259:2;3263:7;3233:19;:38::i;:::-;3282:47;3315:4;3321:7;3282:32;:47::i;:::-;3340:40;3368:2;3372:7;3340:27;:40::i;:::-;3148:239;;;:::o;4684:124::-;4746:17;4782:12;:19;4795:5;4782:19;;;;;;;;;;;;;;;4775:26;;4684:124;;;:::o;1119:99:17:-;1169:7;1191:22;1211:1;1191:15;;:19;;:22;;;;:::i;:::-;1184:29;;1119:99;:::o;844:140::-;888:18;909:17;:15;:17::i;:::-;888:38;;932:22;938:3;943:10;932:5;:22::i;:::-;960:19;:17;:19::i;:::-;844:140;;:::o;1059:112:2:-;1124:7;1150;:14;;;1143:21;;1059:112;;;:::o;8638:269:4:-;8747:32;8761:4;8767:2;8771:7;8747:13;:32::i;:::-;8797:48;8820:4;8826:2;8830:7;8839:5;8797:22;:48::i;:::-;8789:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8638:269;;;;:::o;12758:90::-;12809:32;12815:16;12823:7;12815;:16::i;:::-;12833:7;12809:5;:32::i;:::-;12758:90;:::o;1348:146:16:-;1426:13;1458:29;1468:2;1472;1458:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;1451:36;;1348:146;;;;:::o;1471:390:17:-;1575:4;1650:27;1694:20;;;;;;;;;;;1650:65;;1766:8;1725:49;;1733:13;:21;;;1755:5;1733:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1733:28:17;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1733:28:17;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1733:28:17;;;;;;;;;;;;;;;;1725:49;;;1721:83;;;1793:4;1786:11;;;;;1721:83;1817:39;1840:5;1847:8;1817:22;:39::i;:::-;1810:46;;;1471:390;;;;;:::o;2173:225:13:-;2266:1;2246:22;;:8;:22;;;;2238:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2355:8;2326:38;;2347:6;;;;;;;;;;;2326:38;;;;;;;;;;;;2383:8;2374:6;;:17;;;;;;;;;;;;;;;;;;2173:225;:::o;13225:447:4:-;13338:4;13318:24;;:16;13326:7;13318;:16::i;:::-;:24;;;13310:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13420:1;13406:16;;:2;:16;;;;13398:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13474:23;13489:7;13474:14;:23::i;:::-;13508:35;:17;:23;13526:4;13508:23;;;;;;;;;;;;;;;:33;:35::i;:::-;13553:33;:17;:21;13571:2;13553:21;;;;;;;;;;;;;;;:31;:33::i;:::-;13620:2;13597:11;:20;13609:7;13597:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;13657:7;13653:2;13638:27;;13647:4;13638:27;;;;;;;;;;;;13225:447;;;:::o;6258:1128:5:-;6520:22;6545:32;6575:1;6545:12;:18;6558:4;6545:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;6520:57;;6587:18;6608:17;:26;6626:7;6608:26;;;;;;;;;;;;6587:47;;6752:14;6738:10;:28;6734:323;;6782:19;6804:12;:18;6817:4;6804:18;;;;;;;;;;;;;;;6823:14;6804:34;;;;;;;;;;;;;;;;6782:56;;6886:11;6853:12;:18;6866:4;6853:18;;;;;;;;;;;;;;;6872:10;6853:30;;;;;;;;;;;;;;;:44;;;;7002:10;6969:17;:30;6987:11;6969:30;;;;;;;;;;;:43;;;;6734:323;;7143:12;:18;7156:4;7143:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;6258:1128;;;;:::o;5102:183::-;5215:12;:16;5228:2;5215:16;;;;;;;;;;;;;;;:23;;;;5186:17;:26;5204:7;5186:26;;;;;;;;;;;:52;;;;5248:12;:16;5261:2;5248:16;;;;;;;;;;;;;;;5270:7;5248:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;5248:30:5;;;;;;;;;;;;;;;;;;;;;;5102:183;;:::o;834:176:14:-;892:7;911:9;927:1;923;:5;911:17;;951:1;946;:6;;938:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;995:8;;;834:176;;;;:::o;3644:196:5:-;3707:24;3719:2;3723:7;3707:11;:24::i;:::-;3742:40;3770:2;3774:7;3742:27;:40::i;:::-;3793;3825:7;3793:31;:40::i;:::-;3644:196;;:::o;1286:66:17:-;1330:15;;:17;;;;;;;;;;;;;1286:66::o;14261:349:4:-;14382:4;14407:15;:2;:13;;;:15::i;:::-;14402:58;;14445:4;14438:11;;;;14402:58;14470:13;14502:2;14486:36;;;14523:12;:10;:12::i;:::-;14537:4;14543:7;14552:5;14486:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14486:72:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14486:72:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14486:72:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14486:72:4;;;;;;;;;;;;;;;;14470:88;;698:10;14586:16;;14576:26;;;:6;:26;;;;14568:35;;;14261:349;;;;;;;:::o;2532:240:7:-;2598:27;2610:5;2617:7;2598:11;:27::i;:::-;2712:1;2681:10;:19;2692:7;2681:19;;;;;;;;;;;2675:33;;;;;;;;;;;;;;;;:38;2671:95;;2736:10;:19;2747:7;2736:19;;;;;;;;;;;;2729:26;;;;:::i;:::-;2671:95;2532:240;;:::o;127:857:16:-;259:13;282:16;307:2;282:28;;318:16;343:2;318:28;;354:16;379:2;354:28;;390:16;415:2;390:28;;426:16;451:2;426:28;;462:19;547:3;:10;534:3;:10;521:3;:10;508:3;:10;495:3;:10;:23;:36;:49;:62;484:74;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;484:74:16;;;;462:96;;566:19;594:5;566:34;;608:6;617:1;608:10;;631:6;640:1;631:10;;626:58;647:3;:10;643:1;:14;626:58;;;678:3;682:1;678:6;;;;;;;;;;;;;;;;664;671:3;;;;;;664:11;;;;;;;;;;;:20;;;;;;;;;;;659:3;;;;;;;626:58;;;;697:6;706:1;697:10;;692:58;713:3;:10;709:1;:14;692:58;;;744:3;748:1;744:6;;;;;;;;;;;;;;;;730;737:3;;;;;;730:11;;;;;;;;;;;:20;;;;;;;;;;;725:3;;;;;;;692:58;;;;763:6;772:1;763:10;;758:58;779:3;:10;775:1;:14;758:58;;;810:3;814:1;810:6;;;;;;;;;;;;;;;;796;803:3;;;;;;796:11;;;;;;;;;;;:20;;;;;;;;;;;791:3;;;;;;;758:58;;;;829:6;838:1;829:10;;824:58;845:3;:10;841:1;:14;824:58;;;876:3;880:1;876:6;;;;;;;;;;;;;;;;862;869:3;;;;;;862:11;;;;;;;;;;;:20;;;;;;;;;;;857:3;;;;;;;824:58;;;;895:6;904:1;895:10;;890:58;911:3;:10;907:1;:14;890:58;;;942:3;946:1;942:6;;;;;;;;;;;;;;;;928;935:3;;;;;;928:11;;;;;;;;;;;:20;;;;;;;;;;;923:3;;;;;;;890:58;;;;970:6;956:21;;;;;;;;;;127:857;;;;;;;:::o;5291:145:4:-;5371:4;5394:18;:25;5413:5;5394:25;;;;;;;;;;;;;;;:35;5420:8;5394:35;;;;;;;;;;;;;;;;;;;;;;;;;5387:42;;5291:145;;;;:::o;14772:171::-;14871:1;14835:38;;:15;:24;14851:7;14835:24;;;;;;;;;;;;;;;;;;;;;:38;;;14831:106;;14924:1;14889:15;:24;14905:7;14889:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;14831:106;14772:171;:::o;1361:108:2:-;1441:21;1460:1;1441:7;:14;;;:18;;:21;;;;:::i;:::-;1424:7;:14;;:38;;;;1361:108;:::o;1177:178::-;1347:1;1329:7;:14;;;:19;;;;;;;;;;;1177:178;:::o;1274:134:14:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1351:50;;1274:134;;;;:::o;11658:327:4:-;11743:1;11729:16;;:2;:16;;;;11721:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11801:16;11809:7;11801;:16::i;:::-;11800:17;11792:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11884:2;11861:11;:20;11873:7;11861:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;11896:33;:17;:21;11914:2;11896:21;;;;;;;;;;;;;;;:31;:33::i;:::-;11970:7;11966:2;11945:33;;11962:1;11945:33;;;;;;;;;;;;11658:327;;:::o;5480:161:5:-;5583:10;:17;;;;5556:15;:24;5572:7;5556:24;;;;;;;;;;;:44;;;;5610:10;5626:7;5610:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;5610:24:5;;;;;;;;;;;;;;;;;;;;;;5480:161;:::o;557:797:0:-;617:4;1062:16;1088:19;1110:66;1088:88;;;;1277:7;1265:20;1253:32;;1316:3;1304:15;;:8;:15;;:42;;;;;1335:11;1323:8;:23;;1304:42;1296:51;;;;557:797;;;:::o;4115:364:5:-;4181:27;4193:5;4200:7;4181:11;:27::i;:::-;4219:48;4252:5;4259:7;4219:32;:48::i;:::-;4415:1;4386:17;:26;4404:7;4386:26;;;;;;;;;;;:30;;;;4427:45;4464:7;4427:36;:45::i;:::-;4115:364;;:::o;1844:187:14:-;1930:7;1962:1;1957;:6;;1965:12;1949:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1949:29:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1988:9;2004:1;2000;:5;1988:17;;2023:1;2016:8;;;1844:187;;;;;:::o;12253:324:4:-;12347:5;12327:25;;:16;12335:7;12327;:16::i;:::-;:25;;;12319:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12405:23;12420:7;12405:14;:23::i;:::-;12439:36;:17;:24;12457:5;12439:24;;;;;;;;;;;;;;;:34;:36::i;:::-;12516:1;12485:11;:20;12497:7;12485:20;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;12562:7;12558:1;12534:36;;12543:5;12534:36;;;;;;;;;;;;12253:324;;:::o;7674:1064:5:-;7923:22;7948:24;7970:1;7948:10;:17;;;;:21;;:24;;;;:::i;:::-;7923:49;;7982:18;8003:15;:24;8019:7;8003:24;;;;;;;;;;;;7982:45;;8349:19;8371:10;8382:14;8371:26;;;;;;;;;;;;;;;;8349:48;;8433:11;8408:10;8419;8408:22;;;;;;;;;;;;;;;:36;;;;8543:10;8512:15;:28;8528:11;8512:28;;;;;;;;;;;:41;;;;8674:10;:19;;;;;;;;;;;;:::i;:::-;;8730:1;8703:15;:24;8719:7;8703:24;;;;;;;;;;;:28;;;;7674:1064;;;;:::o;63:3209:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://4fca12f6d3e673bcf732b6f93ee59aa39f20f39cd0fdc7eac334906bba67bfd6
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.