AVAX Price: $22.74 (+11.57%)
Gas: 1.2 nAVAX
 

Overview

AVAX Balance

Avalanche C-Chain LogoAvalanche C-Chain LogoAvalanche C-Chain Logo0 AVAX

AVAX Value

$0.00

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Claim Rewards Ba...177199172022-07-23 22:44:241004 days ago1658616264IN
0xEa8129f6...13AFdc48a
0 AVAX0.0008473126.5
Create Nodes Wit...177199172022-07-23 22:44:241004 days ago1658616264IN
0xEa8129f6...13AFdc48a
0 AVAX0.0009227626
Claim Rewards Al...172488792022-07-12 23:15:391015 days ago1657667739IN
0xEa8129f6...13AFdc48a
0 AVAX0.0008696525
Claim Rewards Al...172487662022-07-12 23:11:511015 days ago1657667511IN
0xEa8129f6...13AFdc48a
0 AVAX0.0008696525
Claim Rewards Al...171910792022-07-11 14:55:451016 days ago1657551345IN
0xEa8129f6...13AFdc48a
0 AVAX0.0008696525
Claim Rewards Al...171909122022-07-11 14:50:081016 days ago1657551008IN
0xEa8129f6...13AFdc48a
0 AVAX0.0008696525
Claim Rewards Al...171907432022-07-11 14:44:291016 days ago1657550669IN
0xEa8129f6...13AFdc48a
0 AVAX0.0008696525
Claim Rewards Al...171905732022-07-11 14:38:491016 days ago1657550329IN
0xEa8129f6...13AFdc48a
0 AVAX0.0008696525
Claim Rewards Ba...167830262022-07-02 2:46:391026 days ago1656729999IN
0xEa8129f6...13AFdc48a
0 AVAX0.0010928626.5
Add Owner156786742022-06-06 14:49:021051 days ago1654526942IN
0xEa8129f6...13AFdc48a
0 AVAX0.001924826
Remove Owner156786322022-06-06 14:47:311051 days ago1654526851IN
0xEa8129f6...13AFdc48a
0 AVAX0.0011994826
Remove Owner156785802022-06-06 14:45:411051 days ago1654526741IN
0xEa8129f6...13AFdc48a
0 AVAX0.0012080626
Add Owner156785482022-06-06 14:44:241051 days ago1654526664IN
0xEa8129f6...13AFdc48a
0 AVAX0.0020196526
Add Owner156458032022-06-05 20:24:181052 days ago1654460658IN
0xEa8129f6...13AFdc48a
0 AVAX0.0020355227.5
Claim Rewards Ba...156415382022-06-05 18:01:211052 days ago1654452081IN
0xEa8129f6...13AFdc48a
0 AVAX0.0111369626.5
Claim Rewards Ba...156415212022-06-05 18:00:481052 days ago1654452048IN
0xEa8129f6...13AFdc48a
0 AVAX0.011041826.5
Claim Rewards Ba...156414342022-06-05 17:57:551052 days ago1654451875IN
0xEa8129f6...13AFdc48a
0 AVAX0.009526826.5
Create Lucky Box...156414232022-06-05 17:57:331052 days ago1654451853IN
0xEa8129f6...13AFdc48a
0 AVAX0.0218460926.5
Create Lucky Box...156413582022-06-05 17:55:231052 days ago1654451723IN
0xEa8129f6...13AFdc48a
0 AVAX0.0214188527
Claim Rewards Ba...156413552022-06-05 17:55:171052 days ago1654451717IN
0xEa8129f6...13AFdc48a
0 AVAX0.0120083626.5
Claim Rewards Ba...156412662022-06-05 17:52:191052 days ago1654451539IN
0xEa8129f6...13AFdc48a
0 AVAX0.0150932727
Claim Rewards Ba...156412572022-06-05 17:52:011052 days ago1654451521IN
0xEa8129f6...13AFdc48a
0 AVAX0.015337826.71746805
Claim Rewards Ba...156412212022-06-05 17:50:451052 days ago1654451445IN
0xEa8129f6...13AFdc48a
0 AVAX0.0008629727
Claim Rewards Ba...156411152022-06-05 17:47:121052 days ago1654451232IN
0xEa8129f6...13AFdc48a
0 AVAX0.0077317926.5
Claim Rewards Ba...156410762022-06-05 17:45:541052 days ago1654451154IN
0xEa8129f6...13AFdc48a
0 AVAX0.0053057226.5
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xd40fFBf8...c0BCF2806
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Handler

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : Handler.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.8.0;

import "./INodeType.sol";
import "./IPolarNode.sol";
import "./IPolarLuckyBox.sol";
import "./ISwapper.sol";
import "./Owners.sol";


contract Handler is Owners {
	event NewNode(
		address indexed owner,
		string indexed name,
		uint count
	);

	struct NodeType {
		string[] keys; // nodeTypeName to address
		mapping(string => address) values;
		mapping(string => uint256) indexOf;
		mapping(string => bool) inserted;
	}

	struct Token {
		uint[] keys; // token ids to nodeTypeName
		mapping(uint => string) values;
		mapping(uint => uint) indexOf;
		mapping(uint => bool) inserted;
	}

	NodeType private mapNt;
	Token private mapToken;

	address public nft;
	
	IPolarLuckyBox private lucky;
	ISwapper private swapper;

	modifier onlyNft() {
		require(msg.sender == nft, "Handler: Only Nft");
		_;
	}

	// external
	function addNodeType(address _addr) external onlyOwners {
		string memory name = INodeType(_addr).name();
		require(!mapNt.inserted[name], "Handler: NodeType already exists");
		mapNtSet(name, _addr);
	}
	
	function addMultipleNodeTypes(address[] memory _addrs) external onlyOwners {
		for (uint i = 0; i < _addrs.length; i++) {
			string memory name = INodeType(_addrs[i]).name();
			mapNtSet(name, _addrs[i]);
		}
	}

	function updateNodeTypeAddress(string memory name, address _addr) external onlyOwners {
		require(mapNt.inserted[name], "Handler: NodeType doesnt exist");
		mapNt.values[name] = _addr;
	}

	function transferFrom(address from, address to, uint tokenId) external onlyNft {
		INodeType(mapNt.values[mapToken.values[tokenId]])
			.transferFrom(from, to, tokenId);
	}
	
	function createNodesWithTokens(
		address tokenIn,
		address user,
		string memory name,
		uint count,
		string memory sponso
	) 
		external 
	{
		uint[] memory tokenIds = _setUpNodes(name, user, count);

		uint price = INodeType(mapNt.values[name])
			.createNodesWithTokens(user, tokenIds);
		
		swapper.swapCreateNodesWithTokens(tokenIn, msg.sender, price, sponso);
	
		emit NewNode(user, name, count);
	}

	function createNodesLevelUp(
		address tokenOut,
		string[] memory nameFrom,
		uint[][] memory tokenIdsToBurn,
		string memory nameTo,
		uint count
	)
		external
	{
		require(nameFrom.length == tokenIdsToBurn.length, "Handler: Length mismatch");

		uint[] memory tokenIds = _setUpNodes(nameTo, msg.sender, count);
		
		claimRewardsBatch(tokenOut, msg.sender, nameFrom, tokenIdsToBurn);

		uint price = INodeType(mapNt.values[nameTo])
			.createNodesLevelUp(msg.sender, tokenIds);

		for (uint i = 0; i < nameFrom.length && price > 0; i++) {
			require(mapNt.inserted[nameFrom[i]], "Handler: NodeType doesnt exist");
			
			IPolarNode(nft).burnBatch(msg.sender, tokenIdsToBurn[i]);

			for (uint j = 0; j < tokenIdsToBurn[i].length; j++) {
				require(mapToken.inserted[tokenIdsToBurn[i][j]], "Handler: TokenId doesnt exist");
				mapTokenRemove(tokenIdsToBurn[i][j]);
			}

			address nt = mapNt.values[nameFrom[i]];

			uint burnedPrice = INodeType(nt).burnFrom(msg.sender, tokenIdsToBurn[i]);

			price = price > burnedPrice ? price - burnedPrice : 0;
		}

		require(price == 0, "Handler: Nice try buddy");
		
		emit NewNode(msg.sender, nameTo, count);
	}

	function createNodesWithPending(
		address tokenOut,
		string[] memory nameFrom,
		uint[][] memory tokenIdsToClaim,
		string memory nameTo,
		uint count
	)
		external
	{
		require(nameFrom.length == tokenIdsToClaim.length, "Handler: Length mismatch");
		
		uint[] memory tokenIds = _setUpNodes(nameTo, msg.sender, count);
		
		uint rewardsTotal;
		uint feesTotal;
		
		uint price = INodeType(mapNt.values[nameTo])
			.createNodesWithPendings(msg.sender, tokenIds);

		for (uint i = 0; i < nameFrom.length; i++) {
			require(mapNt.inserted[nameFrom[i]], "Handler: NodeType doesnt exist");
			
			(uint rewards, uint fees) = INodeType(mapNt.values[nameFrom[i]])
				.claimRewardsBatch(msg.sender, tokenIdsToClaim[i]);

			rewardsTotal += rewards;
			feesTotal += fees;
		}

		require(price <= rewardsTotal, "Handler: Not enough pending");

		swapper.swapCreateNodesWithPending(
			tokenOut, msg.sender, rewardsTotal - price, feesTotal);
		
		emit NewNode(msg.sender, nameTo, count);
	}

	function createNodesWithLuckyBoxes(uint[] memory tokenIdsLuckyBoxes) external {
		string[] memory nodeTypes;
		string[] memory features;
		
		(nodeTypes, features) = lucky
			.createNodesWithLuckyBoxes(msg.sender, tokenIdsLuckyBoxes);

		for (uint i = 0; i < nodeTypes.length; i++) {
			uint[] memory tokenIds = _setUpNodes(nodeTypes[i], msg.sender, 1);

			INodeType(mapNt.values[nodeTypes[i]])
				.createNodeWithLuckyBox(
					msg.sender,
					tokenIds, 
					features[i]
				);
		
			emit NewNode(msg.sender, nodeTypes[i], 1);
		}
	}
	
	function createNodesMigration(
		address user,
		string[] memory nameFrom,
		uint[] memory count
	) 
		external 
	{
		require(user == msg.sender || isOwner[msg.sender], 
			"Handler: Sender not authorized");
		require(nameFrom.length == count.length, "Handler: Length mismatch");

		for (uint i = 0; i < nameFrom.length; i++) {
			uint[] memory tokenIds = _setUpNodes(nameFrom[i], user, count[i]);
		
			INodeType(mapNt.values[nameFrom[i]])
				.createNodesMigration(user, tokenIds);
			
			emit NewNode(user, nameFrom[i], count[i]);
		}
	}

	function createNodesAirDrop(
		string memory name,
		address user,
		uint isBoostedAirDropRate,
		bool[] memory areBoostedNft,
		bool isBoostedToken,
		string memory feature, 
		uint count
	) 
		external 
		onlyOwners 
	{
		require(areBoostedNft.length == 1, "Handler: Create one by one");
		require(count > 0, "Handler: Count must be greater than 0");
		
		for (uint i = 0; i < count; i++) {
			uint[] memory tokenIds = _setUpNodes(name, user, 1);

			INodeType(mapNt.values[name])
				.createNodeCustom(
					user,
					isBoostedAirDropRate,
					tokenIds, 
					areBoostedNft,
					isBoostedToken,
					feature
				);
		}

		emit NewNode(user, name, count);
	}

	function createLuckyBoxesWithTokens(
		address tokenIn,
		address user,
		string memory name,
		uint count,
		string memory sponso
	) 
		external 
	{
		uint price = lucky
			.createLuckyBoxesWithTokens(name, count, user);
		
		swapper.swapCreateLuckyBoxesWithTokens(tokenIn, msg.sender, price, sponso);
	}

	function createLuckyBoxesAirDrop(
		string memory name,
		address user,
		uint count
	) 
		external 
		onlyOwners 
	{
		lucky.createLuckyBoxesAirDrop(name, count, user);
	}

	function nodeEvolution(
		string memory name,
		address user,
		uint[] memory tokenIds,
		uint isBoostedAirDropRate,
		bool[] memory areBoostedNft,
		bool isBoostedToken,
		string memory feature
	) 
		external 
		onlyOwners 
	{
		require(tokenIds.length == 1, "Handler: Evolve one by one");
		require(tokenIds.length == areBoostedNft.length, "Handler: Length mismatch");
		require(mapNt.inserted[name], "Handler: NodeType doesnt exist");
		require(mapToken.inserted[tokenIds[0]], "Handler: Token doesnt exist");

		INodeType(mapNt.values[mapToken.values[tokenIds[0]]])
			.burnFrom(user, tokenIds);
		
		mapTokenSet(tokenIds[0], name);
		
		INodeType(mapNt.values[name])
			.createNodeCustom(
				user, 
				isBoostedAirDropRate, 
				tokenIds,
				areBoostedNft,
				isBoostedToken,
				feature
			);

		IPolarNode(nft).setTokenIdToType(tokenIds[0], name);
	}

	function claimRewardsAll(address tokenOut, address user) external {
		require(user == msg.sender || isOwner[msg.sender], "Handler: Dont mess with other claims");
		
		uint rewardsTotal;
		uint feesTotal;

		for (uint i = 0; i < mapNt.keys.length; i++) {
			(uint rewards, uint fees) = INodeType(mapNt.values[mapNt.keys[i]])
				.claimRewardsAll(user);
			rewardsTotal += rewards;
			feesTotal += fees;
		}

		swapper.swapClaimRewardsAll(tokenOut, user, rewardsTotal, feesTotal);
	}

	function claimRewardsBatch(
		address tokenOut,
		address user,
		string[] memory names,
		uint[][] memory tokenIds
	)
		public
	{
		require(user == msg.sender || isOwner[msg.sender], "Handler: Dont mess with other claims");

		uint rewardsTotal;
		uint feesTotal;

		require(names.length == tokenIds.length, "Handler: Length mismatch");

		for (uint i = 0; i < names.length; i++) {
			require(mapNt.inserted[names[i]], "Handler: NodeType doesnt exist");
			
			(uint rewards, uint fees) = INodeType(mapNt.values[names[i]])
				.claimRewardsBatch(user, tokenIds[i]);
			rewardsTotal += rewards;
			feesTotal += fees;
		}
		
		swapper.swapClaimRewardsBatch(tokenOut, user, rewardsTotal, feesTotal);
	}
	
	function claimRewardsNodeType(
		address tokenOut,
		address user,
		string memory name
	)
		public
	{
		require(user == msg.sender || isOwner[msg.sender], "Handler: Dont mess with other claims");
		require(mapNt.inserted[name], "Handler: NodeType doesnt exist");

		(uint rewardsTotal, uint feesTotal) = INodeType(mapNt.values[name])
			.claimRewardsAll(user);

		swapper.swapClaimRewardsNodeType(tokenOut, user, rewardsTotal, feesTotal);
	}

	// external setters
	// handler setters
	function setNft(address _new) external onlyOwners {
		require(_new != address(0), "Handler: Nft cannot be address zero");
		nft = _new;
	}
	
	function setLucky(address _new) external onlyOwners {
		require(_new != address(0), "Handler: Loot cannot be address zero");
		lucky = IPolarLuckyBox(_new);
	}
	
	function setSwapper(address _new) external onlyOwners {
		require(_new != address(0), "Handler: Swapper cannot be address zero");
		swapper = ISwapper(_new);
	}
	
	// external view
	function getNodeTypesSize() external view returns(uint) {
		return mapNt.keys.length;
	}

	function getTotalCreatedNodes() external view returns(uint) {
		uint totalNodes;
		for (uint i = 0; i < mapNt.keys.length; i++) {
			totalNodes += INodeType(mapNt.values[mapNt.keys[i]])
				.totalCreatedNodes();
		}
		return totalNodes;
	}
	
	function getNodeTypesBetweenIndexes(
		uint iStart, 
		uint iEnd
	) 
		external 
		view 
		returns(string[] memory) 
	{
		string[] memory nodeTypes = new string[](iEnd - iStart);
		for (uint i = iStart; i < iEnd; i++)
			nodeTypes[i - iStart] = mapNt.keys[i];
		return nodeTypes;
	}
	
	function getNodeTypesAddress(string memory key) external view returns(address) {
		require(mapNt.inserted[key], "NodeType doesnt exist");
		return mapNt.values[key];
	}

	function getAttribute(uint tokenId) external view returns(string memory) {
		return INodeType(mapNt.values[mapToken.values[tokenId]])
			.getAttribute(tokenId);
	}
	
	function getTokenIdsSize() external view returns(uint) {
		return mapToken.keys.length;
	}
	
	function getTokenIdsBetweenIndexes(
		uint iStart, 
		uint iEnd
	) 
		external 
		view 
		returns(uint[] memory) 
	{
		uint[] memory ids = new uint[](iEnd - iStart);
		for (uint i = iStart; i < iEnd; i++)
			ids[i - iStart] = mapToken.keys[i];
		return ids;
	}
	
	function getTokenIdsNodeTypeBetweenIndexes(
		uint iStart, 
		uint iEnd
	) 
		external 
		view 
		returns(string[] memory) 
	{
		string[] memory names = new string[](iEnd - iStart);
		for (uint i = iStart; i < iEnd; i++)
			names[i - iStart] = mapToken.values[mapToken.keys[i]];
		return names;
	}
	
	function getTokenIdNodeTypeName(uint key) external view returns(string memory) {
		require(mapToken.inserted[key], "TokenId doesnt exist");
		return mapToken.values[key];
	}

	function getTotalNodesOf(address user) external view returns(uint) {
		uint totalNodes;
		for (uint i = 0; i < mapNt.keys.length; i++) {
			totalNodes += INodeType(mapNt.values[mapNt.keys[i]])
				.getTotalNodesNumberOf(user);
		}
		return totalNodes;
	}
	
	function getClaimableRewardsOf(address user) external view returns(uint, uint) {
		uint rewardsTotal;
		uint feesTotal;
		for (uint i = 0; i < mapNt.keys.length; i++) {
			(uint rewards, uint fees) = INodeType(mapNt.values[mapNt.keys[i]])
				.calculateUserRewards(user);
				rewardsTotal += rewards;
				feesTotal += fees;
		}
		return (rewardsTotal, feesTotal);
	}

	// internal
	function _setUpNodes(
		string memory name,
		address user,
		uint count
	)
		private
		returns(
			uint[] memory
		)
	{
		require(mapNt.inserted[name], "Handler: NodeType doesnt exist");

		uint[] memory tokenIds = IPolarNode(nft).generateNfts(name, user, count);

		for (uint i = 0; i < tokenIds.length; i++)
			mapTokenSet(tokenIds[i], name);

		return tokenIds;
	}

	 function strcmp(string memory s1, string memory s2) internal pure returns(bool) {
		 return (keccak256(abi.encodePacked((s1))) == keccak256(abi.encodePacked((s2))));
	 }

	// private
	// maps
	function mapNtSet(
        string memory key,
        address value
    ) private {
        if (mapNt.inserted[key]) {
            mapNt.values[key] = value;
        } else {
            mapNt.inserted[key] = true;
            mapNt.values[key] = value;
            mapNt.indexOf[key] = mapNt.keys.length;
            mapNt.keys.push(key);
        }
    }
	
	function mapTokenSet(
        uint key,
        string memory value
    ) private {
        if (mapToken.inserted[key]) {
            mapToken.values[key] = value;
        } else {
            mapToken.inserted[key] = true;
            mapToken.values[key] = value;
            mapToken.indexOf[key] = mapToken.keys.length;
            mapToken.keys.push(key);
        }
    }

	function mapNtRemove(string memory key) private {
        if (!mapNt.inserted[key]) {
            return;
        }

        delete mapNt.inserted[key];
        delete mapNt.values[key];

        uint256 index = mapNt.indexOf[key];
        uint256 lastIndex = mapNt.keys.length - 1;
        string memory lastKey = mapNt.keys[lastIndex];

        mapNt.indexOf[lastKey] = index;
        delete mapNt.indexOf[key];

		if (lastIndex != index)
			mapNt.keys[index] = lastKey;
        mapNt.keys.pop();
    }

	function mapTokenRemove(uint key) private {
        if (!mapToken.inserted[key]) {
            return;
        }

        delete mapToken.inserted[key];
        delete mapToken.values[key];

        uint256 index = mapToken.indexOf[key];
        uint256 lastIndex = mapToken.keys.length - 1;
        uint lastKey = mapToken.keys[lastIndex];

        mapToken.indexOf[lastKey] = index;
        delete mapToken.indexOf[key];

		if (lastIndex != index)
			mapToken.keys[index] = lastKey;
        mapToken.keys.pop();
    }
}

File 2 of 6 : INodeType.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.8.0;

interface INodeType {

	function transferFrom(address from, address to, uint tokenId) external;
	function burnFrom(address from, uint[] memory tokenIds) external returns(uint);

	function createNodesWithTokens(
		address user,
		uint[] memory tokenIds
	) external returns(uint);

	function createNodesLevelUp(
		address user,
		uint[] memory tokenIds
	) external returns(uint);

	function createNodesWithPendings(
		address user,
		uint[] memory tokenIds
	) external returns(uint);
	
	function createNodeWithLuckyBox(
		address user,
		uint[] memory tokenIds,
		string memory feature
	) external;

	function createNodesMigration(
		address user,
		uint[] memory tokenIds
	) external;

	function createNodeCustom(
		address user,
		uint isBoostedAirDropRate,
		uint[] memory tokenIds,
		bool[] memory areBoostedNft,
		bool isBoostedToken,
		string memory feature
	) external;

	function getTotalNodesNumberOf(address user) external view returns(uint);
	function getAttribute(uint tokenId) external view returns(string memory);

	function claimRewardsAll(address user) external returns(uint, uint);
	function claimRewardsBatch(address user, uint[] memory tokenIds) external returns(uint, uint);
	function calculateUserRewards(address user) external view returns(uint, uint);

	function name() external view returns(string memory);
	function totalCreatedNodes() external view returns(uint);
}

File 3 of 6 : IPolarNode.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.8.0;

interface IPolarNode {
	function generateNfts(
		string memory name,
		address user,
		uint count
	)
		external
		returns(uint[] memory);
	
	function burnBatch(address user, uint[] memory tokenIds) external;

	function setTokenIdToType(uint tokenId, string memory nodeType) external;
}

File 4 of 6 : IPolarLuckyBox.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.8.0;

interface IPolarLuckyBox {
	function createLuckyBoxesWithTokens(
		string memory name,
		uint count,
		address user
	) external returns(uint);
	
	function createLuckyBoxesAirDrop(
		string memory name,
		uint count,
		address user
	) external;
	
	function createNodesWithLuckyBoxes(
		address user,
		uint[] memory tokenIds
	)
		external
		returns(
			string[] memory,
			string[] memory
		);
}

File 5 of 6 : ISwapper.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.8.0;

interface ISwapper {
	function swapCreateNodesWithTokens(
		address tokenIn, 
		address user, 
		uint price,
		string memory sponso
	) external;
	
	function swapCreateNodesWithPending(
		address tokenOut, 
		address user, 
		uint rewardsTotal, 
		uint feesTotal
	) external;
	
	function swapCreateLuckyBoxesWithTokens(
		address tokenIn, 
		address user, 
		uint price,
		string memory sponso
	) external;

	function swapClaimRewardsAll(
		address tokenOut, 
		address user, 
		uint rewardsTotal, 
		uint feesTotal
	) external;

	function swapClaimRewardsBatch(
		address tokenOut, 
		address user, 
		uint rewardsTotal, 
		uint feesTotal
	) external;
	
	function swapClaimRewardsNodeType(
		address tokenOut, 
		address user, 
		uint rewardsTotal, 
		uint feesTotal
	) external;
}

File 6 of 6 : Owners.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

pragma solidity ^0.8.0;


contract Owners {
	
	address[] public owners;
	mapping(address => bool) public isOwner;

	constructor() {
		owners.push(msg.sender);
		isOwner[msg.sender] = true;
	}

	modifier onlySuperOwner() {
		require(owners[0] == msg.sender, "Owners: Only Super Owner");
		_;
	}
	
	modifier onlyOwners() {
		require(isOwner[msg.sender], "Owners: Only Owner");
		_;
	}

	function addOwner(address _new, bool _change) external onlySuperOwner {
		require(!isOwner[_new], "Owners: Already owner");
		isOwner[_new] = true;
		if (_change) {
			owners.push(owners[0]);
			owners[0] = _new;
		} else {
			owners.push(_new);
		}
	}

	function removeOwner(address _new) external onlySuperOwner {
		require(isOwner[_new], "Owners: Not owner");
		require(_new != owners[0], "Owners: Cannot remove super owner");
		for (uint i = 1; i < owners.length; i++) {
			if (owners[i] == _new) {
				owners[i] = owners[owners.length - 1];
				owners.pop();
				break;
			}
		}
		isOwner[_new] = false;
	}

	function getOwnersSize() external view returns(uint) {
		return owners.length;
	}
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"NewNode","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"addMultipleNodeTypes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addNodeType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"},{"internalType":"bool","name":"_change","type":"bool"}],"name":"addOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"claimRewardsAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"string[]","name":"names","type":"string[]"},{"internalType":"uint256[][]","name":"tokenIds","type":"uint256[][]"}],"name":"claimRewardsBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"string","name":"name","type":"string"}],"name":"claimRewardsNodeType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"createLuckyBoxesAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"string","name":"sponso","type":"string"}],"name":"createLuckyBoxesWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"isBoostedAirDropRate","type":"uint256"},{"internalType":"bool[]","name":"areBoostedNft","type":"bool[]"},{"internalType":"bool","name":"isBoostedToken","type":"bool"},{"internalType":"string","name":"feature","type":"string"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"createNodesAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"string[]","name":"nameFrom","type":"string[]"},{"internalType":"uint256[][]","name":"tokenIdsToBurn","type":"uint256[][]"},{"internalType":"string","name":"nameTo","type":"string"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"createNodesLevelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"string[]","name":"nameFrom","type":"string[]"},{"internalType":"uint256[]","name":"count","type":"uint256[]"}],"name":"createNodesMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIdsLuckyBoxes","type":"uint256[]"}],"name":"createNodesWithLuckyBoxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"string[]","name":"nameFrom","type":"string[]"},{"internalType":"uint256[][]","name":"tokenIdsToClaim","type":"uint256[][]"},{"internalType":"string","name":"nameTo","type":"string"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"createNodesWithPending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"string","name":"sponso","type":"string"}],"name":"createNodesWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getAttribute","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getClaimableRewardsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getNodeTypesAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"iStart","type":"uint256"},{"internalType":"uint256","name":"iEnd","type":"uint256"}],"name":"getNodeTypesBetweenIndexes","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodeTypesSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnersSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"}],"name":"getTokenIdNodeTypeName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"iStart","type":"uint256"},{"internalType":"uint256","name":"iEnd","type":"uint256"}],"name":"getTokenIdsBetweenIndexes","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"iStart","type":"uint256"},{"internalType":"uint256","name":"iEnd","type":"uint256"}],"name":"getTokenIdsNodeTypeBetweenIndexes","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenIdsSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalCreatedNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalNodesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"isBoostedAirDropRate","type":"uint256"},{"internalType":"bool[]","name":"areBoostedNft","type":"bool[]"},{"internalType":"bool","name":"isBoostedToken","type":"bool"},{"internalType":"string","name":"feature","type":"string"}],"name":"nodeEvolution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setLucky","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setSwapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"_addr","type":"address"}],"name":"updateNodeTypeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80639649aace11610125578063c708c72c116100ad578063e526ce541161007c578063e526ce541461049e578063e9897f87146104b1578063eba86d29146104c4578063f3c13387146104d7578063f51dee09146104ea5761021c565b8063c708c72c1461045d578063d6a0d2ee14610470578063e15e66d014610478578063e1ca019b1461048b5761021c565b8063a650ac0d116100f4578063a650ac0d146103d6578063a6b690e0146103f6578063a880f1a914610409578063bf035e111461041c578063c299d3801461043d5761021c565b80639649aace146103955780639c82f2a4146103a8578063a0a8fe65146103bb578063a4a74c49146103c35761021c565b806347ccca02116101a857806362829b201161017757806362829b2014610341578063652469301461035457806376f4e8d514610367578063837154761461037a5780638f309880146103825761021c565b806347ccca02146102f3578063493fe80f146102fb578063518e32d31461031b57806362663f181461032e5761021c565b8063173825d9116101ef578063173825d9146102875780631fb895f81461029a57806323b872dd146102ad5780632f54bf6e146102c0578063321f8674146102e05761021c565b806301b4f6b914610221578063025e7c27146102365780630c7b1d7b1461025f5780630eedc8fd14610274575b600080fd5b61023461022f366004613ec2565b6104fd565b005b610249610244366004613f7a565b61067b565b6040516102569190614111565b60405180910390f35b6102676106a5565b6040516102569190614313565b61023461028236600461396a565b6106ab565b61023461029536600461383b565b610801565b6102346102a8366004613d6a565b610a48565b6102346102bb3660046139f5565b610afe565b6102d36102ce36600461383b565b610bb9565b6040516102569190614308565b6102346102ee36600461396a565b610bce565b610249610cc6565b61030e610309366004613f7a565b610cd5565b604051610256919061431c565b610234610329366004613b32565b610d8b565b61023461033c366004613b5b565b610f4e565b61023461034f36600461385c565b61106d565b610249610362366004613d06565b61122c565b610234610375366004613dac565b6112a1565b6102676115df565b61023461039036600461388e565b6115e5565b6102346103a3366004613acc565b611822565b6102346103b636600461383b565b611a40565b610267611ab7565b61030e6103d1366004613f7a565b611baa565b6103e96103e4366004613faa565b611c79565b60405161025691906142f5565b610234610404366004613a30565b611d5f565b61026761041736600461383b565b61220a565b61042f61042a36600461383b565b612304565b6040516102569291906148aa565b61045061044b366004613faa565b61241e565b6040516102569190614295565b61023461046b36600461383b565b61258f565b610267612684565b610450610486366004613faa565b61268a565b61023461049936600461383b565b612810565b6102346104ac366004613c51565b612887565b6102346104bf36600461390f565b612ac0565b6102346104d2366004613e7e565b612c54565b6102346104e536600461383b565b612cb7565b6102346104f8366004613a30565b612d2e565b3360009081526001602052604090205460ff166105355760405162461bcd60e51b815260040161052c9061455e565b60405180910390fd5b83516001146105565760405162461bcd60e51b815260040161052c9061440a565b600081116105765760405162461bcd60e51b815260040161052c9061477d565b60005b8181101561062c57600061058f89896001613084565b90506002600101896040516105a4919061405a565b908152604051908190036020018120546304a75fe360e21b82526001600160a01b03169063129d7f8c906105e6908b908b9086908c908c908c90600401614209565b600060405180830381600087803b15801561060057600080fd5b505af1158015610614573d6000803e3d6000fd5b50505050508080610624906149cd565b915050610579565b508660405161063b919061405a565b6040518091039020866001600160a01b0316600080516020614a158339815191528360405161066a9190614313565b60405180910390a350505050505050565b6000818154811061068b57600080fd5b6000918252602090912001546001600160a01b0316905081565b60005490565b60006106b8848685613084565b905060006002600101856040516106cf919061405a565b9081526040519081900360200181205463b018fc6f60e01b82526001600160a01b03169063b018fc6f9061070990899086906004016141af565b602060405180830381600087803b15801561072357600080fd5b505af1158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b9190613f92565b600c54604051633517b5bb60e11b81529192506001600160a01b031690636a2f6b7690610792908a90339086908990600401614149565b600060405180830381600087803b1580156107ac57600080fd5b505af11580156107c0573d6000803e3d6000fd5b50505050846040516107d2919061405a565b6040518091039020866001600160a01b0316600080516020614a158339815191528660405161066a9190614313565b336001600160a01b03166000808154811061082c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161461085e5760405162461bcd60e51b815260040161052c906143d3565b6001600160a01b03811660009081526001602052604090205460ff166108965760405162461bcd60e51b815260040161052c90614866565b600080815481106108b757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03828116911614156108ee5760405162461bcd60e51b815260040161052c906144af565b60015b600054811015610a2657816001600160a01b03166000828154811061092657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610a1457600080546109519060019061494f565b8154811061096f57634e487b7160e01b600052603260045260246000fd5b600091825260208220015481546001600160a01b039091169190839081106109a757634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b0393909316929092179091558054806109ed57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610a26565b80610a1e816149cd565b9150506108f1565b506001600160a01b03166000908152600160205260409020805460ff19169055565b3360009081526001602052604090205460ff16610a775760405162461bcd60e51b815260040161052c9061455e565b604051600590610a8890849061405a565b9081526040519081900360200190205460ff16610ab75760405162461bcd60e51b815260040161052c90614746565b80600260010183604051610acb919061405a565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050565b600a546001600160a01b03163314610b285760405162461bcd60e51b815260040161052c9061458a565b600081815260076020526040908190209051600391610b4691614076565b908152604051908190036020018120546323b872dd60e01b82526001600160a01b0316906323b872dd90610b8290869086908690600401614125565b600060405180830381600087803b158015610b9c57600080fd5b505af1158015610bb0573d6000803e3d6000fd5b50505050505050565b60016020526000908152604090205460ff1681565b600b54604051636454a0fd60e01b81526000916001600160a01b031690636454a0fd90610c0390879087908a9060040161435d565b602060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c559190613f92565b600c5460405163a77f789b60e01b81529192506001600160a01b03169063a77f789b90610c8c908990339086908890600401614149565b600060405180830381600087803b158015610ca657600080fd5b505af1158015610cba573d6000803e3d6000fd5b50505050505050505050565b600a546001600160a01b031681565b600081815260076020526040908190209051606091600391610cf79190614076565b9081526040519081900360200181205463493fe80f60e01b82526001600160a01b03169063493fe80f90610d2f908590600401614313565b60006040518083038186803b158015610d4757600080fd5b505afa158015610d5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d839190810190613d38565b90505b919050565b336001600160a01b031660008081548110610db657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614610de85760405162461bcd60e51b815260040161052c906143d3565b6001600160a01b03821660009081526001602052604090205460ff1615610e215760405162461bcd60e51b815260040161052c90614837565b6001600160a01b0382166000908152600160208190526040909120805460ff191690911790558015610f0157600080600081548110610e7057634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910154835460018101855593835290822090920180546001600160a01b0319166001600160a01b039093169290921790915580548391908190610ece57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610f4a565b600080546001810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b0384161790555b5050565b3360009081526001602052604090205460ff16610f7d5760405162461bcd60e51b815260040161052c9061455e565b60005b8151811015610f4a576000828281518110610fab57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015610feb57600080fd5b505afa158015610fff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110279190810190613d38565b905061105a8184848151811061104d57634e487b7160e01b600052603260045260246000fd5b60200260200101516131ad565b5080611065816149cd565b915050610f80565b6001600160a01b03811633148061109357503360009081526001602052604090205460ff165b6110af5760405162461bcd60e51b815260040161052c90614621565b60008060005b6002548110156111bd576000806002600101600260000184815481106110eb57634e487b7160e01b600052603260045260246000fd5b906000526020600020016040516111029190614076565b908152604051908190036020018120546318c880ef60e21b82526001600160a01b03169063632203bc9061113a908990600401614111565b6040805180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118b9190613fcb565b909250905061119a8286614937565b94506111a68185614937565b9350505080806111b5906149cd565b9150506110b5565b50600c5460405163658793a360e01b81526001600160a01b039091169063658793a3906111f4908790879087908790600401614186565b600060405180830381600087803b15801561120e57600080fd5b505af1158015611222573d6000803e3d6000fd5b5050505050505050565b6000600260030182604051611241919061405a565b9081526040519081900360200190205460ff166112705760405162461bcd60e51b815260040161052c9061469c565b60405160039061128190849061405a565b908152604051908190036020019020546001600160a01b03169050919050565b3360009081526001602052604090205460ff166112d05760405162461bcd60e51b815260040161052c9061455e565b84516001146112f15760405162461bcd60e51b815260040161052c90614441565b82518551146113125760405162461bcd60e51b815260040161052c906145ea565b60405160059061132390899061405a565b9081526040519081900360200190205460ff166113525760405162461bcd60e51b815260040161052c90614746565b600660030160008660008151811061137a57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182528101919091526040016000205460ff166113b45760405162461bcd60e51b815260040161052c90614665565b600260010160066001016000876000815181106113e157634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206040516114049190614076565b908152604051908190036020018120546389af610760e01b82526001600160a01b0316906389af61079061143e90899089906004016141af565b602060405180830381600087803b15801561145857600080fd5b505af115801561146c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114909190613f92565b506114c3856000815181106114b557634e487b7160e01b600052603260045260246000fd5b602002602001015188613302565b6040516003906114d490899061405a565b908152604051908190036020018120546304a75fe360e21b82526001600160a01b03169063129d7f8c9061151690899088908a90899089908990600401614209565b600060405180830381600087803b15801561153057600080fd5b505af1158015611544573d6000803e3d6000fd5b5050600a5487516001600160a01b03909116925063864b7e959150879060009061157e57634e487b7160e01b600052603260045260246000fd5b6020026020010151896040518363ffffffff1660e01b81526004016115a4929190614891565b600060405180830381600087803b1580156115be57600080fd5b505af11580156115d2573d6000803e3d6000fd5b5050505050505050505050565b60065490565b6001600160a01b03831633148061160b57503360009081526001602052604090205460ff165b6116275760405162461bcd60e51b815260040161052c90614621565b600080825184511461164b5760405162461bcd60e51b815260040161052c906145ea565b60005b84518110156117eb57600260030185828151811061167c57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051611691919061405a565b9081526040519081900360200190205460ff166116c05760405162461bcd60e51b815260040161052c90614746565b60008060026001018784815181106116e857634e487b7160e01b600052603260045260246000fd5b60200260200101516040516116fd919061405a565b9081526040519081900360200190205486516001600160a01b039091169063daf73bbd908a9089908790811061174357634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016117689291906141af565b6040805180830381600087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190613fcb565b90925090506117c88286614937565b94506117d48185614937565b9350505080806117e3906149cd565b91505061164e565b50600c546040516336ed57cd60e01b81526001600160a01b03909116906336ed57cd90610c8c908990899087908790600401614186565b6001600160a01b03831633148061184857503360009081526001602052604090205460ff165b6118645760405162461bcd60e51b815260040161052c90614478565b80518251146118855760405162461bcd60e51b815260040161052c906145ea565b60005b8251811015611a3a5760006118ec8483815181106118b657634e487b7160e01b600052603260045260246000fd5b6020026020010151868585815181106118df57634e487b7160e01b600052603260045260246000fd5b6020026020010151613084565b9050600260010184838151811061191357634e487b7160e01b600052603260045260246000fd5b6020026020010151604051611928919061405a565b908152604051908190036020018120546306caef4d60e51b82526001600160a01b03169063d95de9a09061196290889085906004016141af565b600060405180830381600087803b15801561197c57600080fd5b505af1158015611990573d6000803e3d6000fd5b505050508382815181106119b457634e487b7160e01b600052603260045260246000fd5b60200260200101516040516119c9919061405a565b6040518091039020856001600160a01b0316600080516020614a15833981519152858581518110611a0a57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051611a1f9190614313565b60405180910390a35080611a32816149cd565b915050611888565b50505050565b3360009081526001602052604090205460ff16611a6f5760405162461bcd60e51b815260040161052c9061455e565b6001600160a01b038116611a955760405162461bcd60e51b815260040161052c906147f0565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60008060005b600254811015611ba457600280546003919083908110611aed57634e487b7160e01b600052603260045260246000fd5b90600052602060002001604051611b049190614076565b90815260408051602092819003830181205463b88d345360e01b825291516001600160a01b039092169263b88d345392600480840193829003018186803b158015611b4e57600080fd5b505afa158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190613f92565b611b909083614937565b915080611b9c816149cd565b915050611abd565b50905090565b60008181526009602052604090205460609060ff16611bdb5760405162461bcd60e51b815260040161052c906147c2565b60008281526007602052604090208054611bf490614992565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614992565b8015611c6d5780601f10611c4257610100808354040283529160200191611c6d565b820191906000526020600020905b815481529060010190602001808311611c5057829003601f168201915b50505050509050919050565b60606000611c87848461494f565b6001600160401b03811115611cac57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611cd5578160200160208202803683370190505b509050835b83811015611d57576006805482908110611d0457634e487b7160e01b600052603260045260246000fd5b9060005260206000200154828683611d1c919061494f565b81518110611d3a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280611d4f816149cd565b915050611cda565b509392505050565b8251845114611d805760405162461bcd60e51b815260040161052c906145ea565b6000611d8d833384613084565b9050611d9b863387876115e5565b6000600260010184604051611db0919061405a565b908152604051908190036020018120546304eb4ae360e51b82526001600160a01b031690639d695c6090611dea90339086906004016141af565b602060405180830381600087803b158015611e0457600080fd5b505af1158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c9190613f92565b905060005b865181108015611e515750600082115b156121ae576002600301878281518110611e7b57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051611e90919061405a565b9081526040519081900360200190205460ff16611ebf5760405162461bcd60e51b815260040161052c90614746565b600a5486516001600160a01b039091169063b2dc5dc3903390899085908110611ef857634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b8152600401611f1d9291906141af565b600060405180830381600087803b158015611f3757600080fd5b505af1158015611f4b573d6000803e3d6000fd5b5050505060005b868281518110611f7257634e487b7160e01b600052603260045260246000fd5b6020026020010151518110156120735760066003016000888481518110611fa957634e487b7160e01b600052603260045260246000fd5b60200260200101518381518110611fd057634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182528101919091526040016000205460ff1661200a5760405162461bcd60e51b815260040161052c906144f0565b61206187838151811061202d57634e487b7160e01b600052603260045260246000fd5b6020026020010151828151811061205457634e487b7160e01b600052603260045260246000fd5b60200260200101516133b5565b8061206b816149cd565b915050611f52565b506000600260010188838151811061209b57634e487b7160e01b600052603260045260246000fd5b60200260200101516040516120b0919061405a565b908152602001604051809103902060009054906101000a90046001600160a01b031690506000816001600160a01b03166389af6107338a868151811061210657634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b815260040161212b9291906141af565b602060405180830381600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217d9190613f92565b905080841161218d576000612197565b612197818561494f565b9350505080806121a6906149cd565b915050611e41565b5080156121cd5760405162461bcd60e51b815260040161052c90614527565b836040516121db919061405a565b6040518091039020336001600160a01b0316600080516020614a158339815191528560405161066a9190614313565b60008060005b6002548110156122fd5760028054600391908390811061224057634e487b7160e01b600052603260045260246000fd5b906000526020600020016040516122579190614076565b908152604051908190036020018120546343a9ac3960e01b82526001600160a01b0316906343a9ac399061228f908790600401614111565b60206040518083038186803b1580156122a757600080fd5b505afa1580156122bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122df9190613f92565b6122e99083614937565b9150806122f5816149cd565b915050612210565b5092915050565b60008060008060005b6002548110156124135760008060026001016002600001848154811061234357634e487b7160e01b600052603260045260246000fd5b9060005260206000200160405161235a9190614076565b908152604051908190036020018120546303eba50760e01b82526001600160a01b0316906303eba50790612392908b90600401614111565b604080518083038186803b1580156123a957600080fd5b505afa1580156123bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e19190613fcb565b90925090506123f08286614937565b94506123fc8185614937565b93505050808061240b906149cd565b91505061230d565b509092509050915091565b6060600061242c848461494f565b6001600160401b0381111561245157634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561248457816020015b606081526020019060019003908161246f5790505b509050835b83811015611d575760028054829081106124b357634e487b7160e01b600052603260045260246000fd5b9060005260206000200180546124c890614992565b80601f01602080910402602001604051908101604052809291908181526020018280546124f490614992565b80156125415780601f1061251657610100808354040283529160200191612541565b820191906000526020600020905b81548152906001019060200180831161252457829003601f168201915b5050505050828683612553919061494f565b8151811061257157634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080612587906149cd565b915050612489565b3360009081526001602052604090205460ff166125be5760405162461bcd60e51b815260040161052c9061455e565b6000816001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156125f957600080fd5b505afa15801561260d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126359190810190613d38565b905060026003018160405161264a919061405a565b9081526040519081900360200190205460ff161561267a5760405162461bcd60e51b815260040161052c906145b5565b610f4a81836131ad565b60025490565b60606000612698848461494f565b6001600160401b038111156126bd57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156126f057816020015b60608152602001906001900390816126db5790505b509050835b83811015611d5757600680546007916000918490811061272557634e487b7160e01b600052603260045260246000fd5b90600052602060002001548152602001908152602001600020805461274990614992565b80601f016020809104026020016040519081016040528092919081815260200182805461277590614992565b80156127c25780601f10612797576101008083540402835291602001916127c2565b820191906000526020600020905b8154815290600101906020018083116127a557829003601f168201915b50505050508286836127d4919061494f565b815181106127f257634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080612808906149cd565b9150506126f5565b3360009081526001602052604090205460ff1661283f5760405162461bcd60e51b815260040161052c9061455e565b6001600160a01b0381166128655760405162461bcd60e51b815260040161052c90614702565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b5460405163a933c20f60e01b815260609182916001600160a01b039091169063a933c20f906128be90339087906004016141af565b600060405180830381600087803b1580156128d857600080fd5b505af11580156128ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129149190810190613bf1565b909250905060005b8251811015611a3a57600061295a84838151811061294a57634e487b7160e01b600052603260045260246000fd5b6020026020010151336001613084565b9050600260010184838151811061298157634e487b7160e01b600052603260045260246000fd5b6020026020010151604051612996919061405a565b908152602001604051809103902060009054906101000a90046001600160a01b03166001600160a01b031663fd38450433838686815181106129e857634e487b7160e01b600052603260045260246000fd5b60200260200101516040518463ffffffff1660e01b8152600401612a0e939291906141d3565b600060405180830381600087803b158015612a2857600080fd5b505af1158015612a3c573d6000803e3d6000fd5b50505050838281518110612a6057634e487b7160e01b600052603260045260246000fd5b6020026020010151604051612a75919061405a565b6040518091039020336001600160a01b0316600080516020614a158339815191526001604051612aa59190614313565b60405180910390a35080612ab8816149cd565b91505061291c565b6001600160a01b038216331480612ae657503360009081526001602052604090205460ff165b612b025760405162461bcd60e51b815260040161052c90614621565b604051600590612b1390839061405a565b9081526040519081900360200190205460ff16612b425760405162461bcd60e51b815260040161052c90614746565b600080600260010183604051612b58919061405a565b908152604051908190036020018120546318c880ef60e21b82526001600160a01b03169063632203bc90612b90908790600401614111565b6040805180830381600087803b158015612ba957600080fd5b505af1158015612bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be19190613fcb565b600c5460405163fbe12f1d60e01b81529294509092506001600160a01b03169063fbe12f1d90612c1b908890889087908790600401614186565b600060405180830381600087803b158015612c3557600080fd5b505af1158015612c49573d6000803e3d6000fd5b505050505050505050565b3360009081526001602052604090205460ff16612c835760405162461bcd60e51b815260040161052c9061455e565b600b546040516343836c7f60e11b81526001600160a01b0390911690638706d8fe90610b829086908590879060040161435d565b3360009081526001602052604090205460ff16612ce65760405162461bcd60e51b815260040161052c9061455e565b6001600160a01b038116612d0c5760405162461bcd60e51b815260040161052c90614390565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b8251845114612d4f5760405162461bcd60e51b815260040161052c906145ea565b6000612d5c833384613084565b90506000806000600260010186604051612d76919061405a565b908152604051908190036020018120546319309eb560e21b82526001600160a01b0316906364c27ad490612db090339088906004016141af565b602060405180830381600087803b158015612dca57600080fd5b505af1158015612dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e029190613f92565b905060005b8851811015612fa4576002600301898281518110612e3557634e487b7160e01b600052603260045260246000fd5b6020026020010151604051612e4a919061405a565b9081526040519081900360200190205460ff16612e795760405162461bcd60e51b815260040161052c90614746565b60008060026001018b8481518110612ea157634e487b7160e01b600052603260045260246000fd5b6020026020010151604051612eb6919061405a565b908152604051908190036020019020548a516001600160a01b039091169063daf73bbd9033908d9087908110612efc57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b8152600401612f219291906141af565b6040805180830381600087803b158015612f3a57600080fd5b505af1158015612f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f729190613fcb565b9092509050612f818287614937565b9550612f8d8186614937565b945050508080612f9c906149cd565b915050612e07565b5082811115612fc55760405162461bcd60e51b815260040161052c906146cb565b600c546001600160a01b031663c7ae05318a33612fe2858861494f565b866040518563ffffffff1660e01b81526004016130029493929190614186565b600060405180830381600087803b15801561301c57600080fd5b505af1158015613030573d6000803e3d6000fd5b5050505085604051613042919061405a565b6040518091039020336001600160a01b0316600080516020614a15833981519152876040516130719190614313565b60405180910390a3505050505050505050565b6060600260030184604051613099919061405a565b9081526040519081900360200190205460ff166130c85760405162461bcd60e51b815260040161052c90614746565b600a54604051635181db2b60e01b81526000916001600160a01b031690635181db2b906130fd9088908890889060040161432f565b600060405180830381600087803b15801561311757600080fd5b505af115801561312b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131539190810190613c83565b905060005b81518110156131a45761319282828151811061318457634e487b7160e01b600052603260045260246000fd5b602002602001015187613302565b8061319c816149cd565b915050613158565b50949350505050565b6040516005906131be90849061405a565b9081526040519081900360200190205460ff161561321e57806002600101836040516131ea919061405a565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055610f4a565b6001600260030183604051613233919061405a565b908152604051908190036020018120805492151560ff1990931692909217909155819060039061326490859061405a565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b031990931692909217909155600254906004906132a690859061405a565b90815260405160209181900382019020919091556002805460018101825560009190915283516132fd927f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909201918501906134e0565b505050565b60008281526009602052604090205460ff161561333e5760008281526007602090815260409091208251613338928401906134e0565b50610f4a565b6000828152600960209081526040808320805460ff1916600117905560078252909120825161336f928401906134e0565b5050600680546000838152600860205260408120829055600182018355919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0155565b60008181526009602052604090205460ff166133d0576134dd565b6000818152600960209081526040808320805460ff19169055600790915281206133f991613564565b60008181526008602052604081205460065490919061341a9060019061494f565b905060006006600001828154811061344257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548083526008909152604080832086905586835282209190915590508183146134a457806006600001848154811061349757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001555b60068054806134c357634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590555050505b50565b8280546134ec90614992565b90600052602060002090601f01602090048101928261350e5760008555613554565b82601f1061352757805160ff1916838001178555613554565b82800160010185558215613554579182015b82811115613554578251825591602001919060010190613539565b5061356092915061359c565b5090565b50805461357090614992565b6000825580601f1061358257506134dd565b601f0160209004906000526020600020908101906134dd91905b5b80821115613560576000815560010161359d565b80356001600160a01b0381168114610d8657600080fd5b600082601f8301126135d8578081fd5b813560206135ed6135e8836148e1565b6148b8565b82815281810190858301855b8581101561362257613610898684358b010161373a565b845292840192908401906001016135f9565b5090979650505050505050565b600082601f83011261363f578081fd5b8135602061364f6135e8836148e1565b828152818101908583018385028701840188101561366b578586fd5b855b858110156136225761367e82613794565b8452928401929084019060010161366d565b600082601f8301126136a0578081fd5b813560206136b06135e8836148e1565b82815281810190858301855b85811015613622576136d3898684358b01016137a4565b845292840192908401906001016136bc565b600082601f8301126136f5578081fd5b815160206137056135e8836148e1565b82815281810190858301855b8581101561362257613728898684518b01016137f0565b84529284019290840190600101613711565b600082601f83011261374a578081fd5b8135602061375a6135e8836148e1565b8281528181019085830183850287018401881015613776578586fd5b855b8581101561362257813584529284019290840190600101613778565b80358015158114610d8657600080fd5b600082601f8301126137b4578081fd5b81356137c26135e882614904565b8181528460208386010111156137d6578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112613800578081fd5b815161380e6135e882614904565b818152846020838601011115613822578283fd5b613833826020830160208701614966565b949350505050565b60006020828403121561384c578081fd5b613855826135b1565b9392505050565b6000806040838503121561386e578081fd5b613877836135b1565b9150613885602084016135b1565b90509250929050565b600080600080608085870312156138a3578182fd5b6138ac856135b1565b93506138ba602086016135b1565b925060408501356001600160401b03808211156138d5578384fd5b6138e188838901613690565b935060608701359150808211156138f6578283fd5b50613903878288016135c8565b91505092959194509250565b600080600060608486031215613923578081fd5b61392c846135b1565b925061393a602085016135b1565b915060408401356001600160401b03811115613954578182fd5b613960868287016137a4565b9150509250925092565b600080600080600060a08688031215613981578283fd5b61398a866135b1565b9450613998602087016135b1565b935060408601356001600160401b03808211156139b3578485fd5b6139bf89838a016137a4565b94506060880135935060808801359150808211156139db578283fd5b506139e8888289016137a4565b9150509295509295909350565b600080600060608486031215613a09578081fd5b613a12846135b1565b9250613a20602085016135b1565b9150604084013590509250925092565b600080600080600060a08688031215613a47578283fd5b613a50866135b1565b945060208601356001600160401b0380821115613a6b578485fd5b613a7789838a01613690565b95506040880135915080821115613a8c578485fd5b613a9889838a016135c8565b94506060880135915080821115613aad578283fd5b50613aba888289016137a4565b95989497509295608001359392505050565b600080600060608486031215613ae0578081fd5b613ae9846135b1565b925060208401356001600160401b0380821115613b04578283fd5b613b1087838801613690565b93506040860135915080821115613b25578283fd5b506139608682870161373a565b60008060408385031215613b44578182fd5b613b4d836135b1565b915061388560208401613794565b60006020808385031215613b6d578182fd5b82356001600160401b03811115613b82578283fd5b8301601f81018513613b92578283fd5b8035613ba06135e8826148e1565b8181528381019083850185840285018601891015613bbc578687fd5b8694505b83851015613be557613bd1816135b1565b835260019490940193918501918501613bc0565b50979650505050505050565b60008060408385031215613c03578182fd5b82516001600160401b0380821115613c19578384fd5b613c25868387016136e5565b93506020850151915080821115613c3a578283fd5b50613c47858286016136e5565b9150509250929050565b600060208284031215613c62578081fd5b81356001600160401b03811115613c77578182fd5b6138338482850161373a565b60006020808385031215613c95578182fd5b82516001600160401b03811115613caa578283fd5b8301601f81018513613cba578283fd5b8051613cc86135e8826148e1565b8181528381019083850185840285018601891015613ce4578687fd5b8694505b83851015613be5578051835260019490940193918501918501613ce8565b600060208284031215613d17578081fd5b81356001600160401b03811115613d2c578182fd5b613833848285016137a4565b600060208284031215613d49578081fd5b81516001600160401b03811115613d5e578182fd5b613833848285016137f0565b60008060408385031215613d7c578182fd5b82356001600160401b03811115613d91578283fd5b613d9d858286016137a4565b925050613885602084016135b1565b600080600080600080600060e0888a031215613dc6578485fd5b87356001600160401b0380821115613ddc578687fd5b613de88b838c016137a4565b9850613df660208b016135b1565b975060408a0135915080821115613e0b578687fd5b613e178b838c0161373a565b965060608a0135955060808a0135915080821115613e33578384fd5b613e3f8b838c0161362f565b9450613e4d60a08b01613794565b935060c08a0135915080821115613e62578283fd5b50613e6f8a828b016137a4565b91505092959891949750929550565b600080600060608486031215613e92578081fd5b83356001600160401b03811115613ea7578182fd5b613eb3868287016137a4565b935050613a20602085016135b1565b600080600080600080600060e0888a031215613edc578081fd5b87356001600160401b0380821115613ef2578283fd5b613efe8b838c016137a4565b9850613f0c60208b016135b1565b975060408a0135965060608a0135915080821115613f28578283fd5b613f348b838c0161362f565b9550613f4260808b01613794565b945060a08a0135915080821115613f57578283fd5b50613f648a828b016137a4565b92505060c0880135905092959891949750929550565b600060208284031215613f8b578081fd5b5035919050565b600060208284031215613fa3578081fd5b5051919050565b60008060408385031215613fbc578182fd5b50508035926020909101359150565b60008060408385031215613fdd578182fd5b505080516020909101519092909150565b6000815180845260208085019450808401835b8381101561401d57815187529582019590820190600101614001565b509495945050505050565b15159052565b60008151808452614046816020860160208601614966565b601f01601f19169290920160200192915050565b6000825161406c818460208701614966565b9190910192915050565b815460009081906002810460018083168061409257607f831692505b60208084108214156140b257634e487b7160e01b87526022600452602487fd5b8180156140c657600181146140d757614103565b60ff19861689528489019650614103565b6140e08a61492b565b885b868110156140fb5781548b8201529085019083016140e2565b505084890196505b509498975050505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061417c9083018461402e565b9695505050505050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b038316815260406020820181905260009061383390830184613fee565b6001600160a01b03841681526060602082018190526000906141f790830185613fee565b828103604084015261417c818561402e565b600060018060a01b03881682526020878184015260c0604084015261423160c0840188613fee565b8381036060850152865180825282880191830190845b81811015614265578351151583529284019291840191600101614247565b50506142746080860188614028565b84810360a0860152614286818761402e565b9b9a5050505050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156142e857603f198886030184526142d685835161402e565b945092850192908501906001016142ba565b5092979650505050505050565b6000602082526138556020830184613fee565b901515815260200190565b90815260200190565b600060208252613855602083018461402e565b600060608252614342606083018661402e565b6001600160a01b039490941660208301525060400152919050565b600060608252614370606083018661402e565b6020830194909452506001600160a01b0391909116604090910152919050565b60208082526023908201527f48616e646c65723a204e66742063616e6e6f742062652061646472657373207a60408201526265726f60e81b606082015260800190565b60208082526018908201527f4f776e6572733a204f6e6c79205375706572204f776e65720000000000000000604082015260600190565b6020808252601a908201527f48616e646c65723a20437265617465206f6e65206279206f6e65000000000000604082015260600190565b6020808252601a908201527f48616e646c65723a2045766f6c7665206f6e65206279206f6e65000000000000604082015260600190565b6020808252601e908201527f48616e646c65723a2053656e646572206e6f7420617574686f72697a65640000604082015260600190565b60208082526021908201527f4f776e6572733a2043616e6e6f742072656d6f7665207375706572206f776e656040820152603960f91b606082015260800190565b6020808252601d908201527f48616e646c65723a20546f6b656e496420646f65736e74206578697374000000604082015260600190565b60208082526017908201527f48616e646c65723a204e69636520747279206275646479000000000000000000604082015260600190565b60208082526012908201527127bbb732b9399d1027b7363c9027bbb732b960711b604082015260600190565b60208082526011908201527012185b991b195c8e8813db9b1e4813999d607a1b604082015260600190565b6020808252818101527f48616e646c65723a204e6f64655479706520616c726561647920657869737473604082015260600190565b60208082526018908201527f48616e646c65723a204c656e677468206d69736d617463680000000000000000604082015260600190565b60208082526024908201527f48616e646c65723a20446f6e74206d6573732077697468206f7468657220636c60408201526361696d7360e01b606082015260800190565b6020808252601b908201527f48616e646c65723a20546f6b656e20646f65736e742065786973740000000000604082015260600190565b602080825260159082015274139bd919551e5c1948191bd95cdb9d08195e1a5cdd605a1b604082015260600190565b6020808252601b908201527f48616e646c65723a204e6f7420656e6f7567682070656e64696e670000000000604082015260600190565b60208082526024908201527f48616e646c65723a204c6f6f742063616e6e6f742062652061646472657373206040820152637a65726f60e01b606082015260800190565b6020808252601e908201527f48616e646c65723a204e6f64655479706520646f65736e742065786973740000604082015260600190565b60208082526025908201527f48616e646c65723a20436f756e74206d75737420626520677265617465722074604082015264068616e20360dc1b606082015260800190565b602080825260149082015273151bdad95b925908191bd95cdb9d08195e1a5cdd60621b604082015260600190565b60208082526027908201527f48616e646c65723a20537761707065722063616e6e6f742062652061646472656040820152667373207a65726f60c81b606082015260800190565b60208082526015908201527427bbb732b9399d1020b63932b0b23c9037bbb732b960591b604082015260600190565b60208082526011908201527027bbb732b9399d102737ba1037bbb732b960791b604082015260600190565b600083825260406020830152613833604083018461402e565b918252602082015260400190565b6040518181016001600160401b03811182821017156148d9576148d96149fe565b604052919050565b60006001600160401b038211156148fa576148fa6149fe565b5060209081020190565b60006001600160401b0382111561491d5761491d6149fe565b50601f01601f191660200190565b60009081526020902090565b6000821982111561494a5761494a6149e8565b500190565b600082821015614961576149616149e8565b500390565b60005b83811015614981578181015183820152602001614969565b83811115611a3a5750506000910152565b6002810460018216806149a657607f821691505b602082108114156149c757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156149e1576149e16149e8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe3c8006180c21a8a3a5910855aaa92c2043f55f5a5cc6d89097bfafdfc5fe18eca2646970667358221220296ff4454b66ffcb34247735b1125faadf0c14ea3a8a9947010fae8fa97d77d264736f6c63430008000033

Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.