Contract Address Details

0xd6dF0C579f2A65049a893fDaEC9fCE098CC19F87

Token
UniversalCoin X (UVCX)
Creator
0xea5194–a06481 at 0x12cdb1–b0fb10
Balance
0 ETC ( )
Tokens
Fetching tokens...
Transactions
9,739 Transactions
Transfers
4,705 Transfers
Gas Used
433,754,953
Last Balance Update
17650804
Contract name:
StakingToken




Optimization enabled
true
Compiler version
v0.6.12+commit.27d51765




Optimization runs
200
EVM Version
default




Verified at
2020-07-26T15:51:50.991913Z

Constructor Arguments

[
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "_from",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "_tokens",
				"type": "uint256"
			},
			{
				"internalType": "bytes",
				"name": "_data",
				"type": "bytes"
			}
		],
		"name": "tokenCallback",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "nonpayable",
		"type": "function"
	}
]
              

Contract source code

pragma solidity ^0.6.9;

interface Callable {
	function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool);
}

contract StakingToken {
	uint256 constant private FLOAT_SCALAR = 2**64;
	uint256 constant private INITIAL_SUPPLY = 2e27;   // 2 Billion Total/Max Supply
	uint256 constant private BURN_RATE = 1;            // 1% per tx
	uint256 constant private SUPPLY_FLOOR = 1;         // 1% of 2B = 20M
	uint256 constant private MIN_FREEZE_AMOUNT = 1e20; // 100 minimum
	string constant public name = "UniversalCoin X";
	string constant public symbol = "UVCX";
	uint8 constant public decimals = 18;

	struct User {
		bool whitelisted;
		uint256 balance;
		uint256 frozen;
		mapping(address => uint256) allowance;
		int256 scaledPayout;
	}

	struct Info {
		uint256 totalSupply;
		uint256 totalFrozen;
		mapping(address => User) users;
		uint256 scaledPayoutPerToken;
		address admin;
	}

	Info private info;

	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);
	event Whitelist(address indexed user, bool status);
	event Freeze(address indexed owner, uint256 tokens);
	event Unfreeze(address indexed owner, uint256 tokens);
	event Collect(address indexed owner, uint256 tokens);
	event Burn(uint256 tokens);


	constructor() public {
		info.admin = msg.sender;
		info.totalSupply = INITIAL_SUPPLY;
		info.users[msg.sender].balance = INITIAL_SUPPLY;
		emit Transfer(address(0x0), msg.sender, INITIAL_SUPPLY);
		whitelist(msg.sender, true);
	}

	function freeze(uint256 _tokens) external {_freeze(_tokens);}
	function unfreeze(uint256 _tokens) external {_unfreeze(_tokens);}

	function collect() external returns (uint256) {
		uint256 _dividends = dividendsOf(msg.sender);
		require(_dividends >= 0, 'Cannot collect -ve dividends');
		info.users[msg.sender].scaledPayout += int256(_dividends * FLOAT_SCALAR);
		info.users[msg.sender].balance += _dividends;
		emit Transfer(address(this), msg.sender, _dividends);
		emit Collect(msg.sender, _dividends);
		return _dividends;
	}

	function burn(uint256 _tokens) external {
		require(balanceOf(msg.sender) >= _tokens, 'Trying to burn more than you have');
		info.users[msg.sender].balance -= _tokens;
		uint256 _burnedAmount = _tokens;
		if (info.totalFrozen > 0) {
			_burnedAmount /= 2; //50% of burn redirected amongst frozen holders
			info.scaledPayoutPerToken += _burnedAmount * FLOAT_SCALAR / info.totalFrozen;
			emit Transfer(msg.sender, address(this), _burnedAmount);
		}
		info.totalSupply -= _burnedAmount;
		emit Transfer(msg.sender, address(0x0), _burnedAmount);
		emit Burn(_burnedAmount);
	}

	function distribute(uint256 _tokens) external {
		require(info.totalFrozen > 0, 'Must have more than 0 frozen to distribute');
		require(balanceOf(msg.sender) >= _tokens, 'Must have enough tokens to distribute');
		info.users[msg.sender].balance -= _tokens;
		info.scaledPayoutPerToken += _tokens * FLOAT_SCALAR / info.totalFrozen;
		emit Transfer(msg.sender, address(this), _tokens);
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		_transfer(msg.sender, _to, _tokens);
		return true;
	}

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		info.users[msg.sender].allowance[_spender] = _tokens;
		emit Approval(msg.sender, _spender, _tokens);
		return true;
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		require(info.users[_from].allowance[msg.sender] >= _tokens, 'Need to have enough allowance to send');
		info.users[_from].allowance[msg.sender] -= _tokens;
		_transfer(_from, _to, _tokens);
		return true;
	}

	function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
		uint256 _transferred = _transfer(msg.sender, _to, _tokens);
		uint32 _size;
		assembly {_size := extcodesize(_to)}
		if (_size > 0) {require(Callable(_to).tokenCallback(msg.sender, _transferred, _data), 'More than 0 data in the transfer');}
		return true;
	}

	function bulkTransfer(address[] calldata _receivers, uint256[] calldata _amounts) external {
		require(_receivers.length == _amounts.length, 'Need equal amounts of receivers and values');
		for (uint256 i = 0; i < _receivers.length; i++) {_transfer(msg.sender, _receivers[i], _amounts[i]);}
	}

	function whitelist(address _user, bool _status) public {
		require(msg.sender == info.admin, 'Only admins can whitelist');
		info.users[_user].whitelisted = _status;
		emit Whitelist(_user, _status);
	}

	function totalSupply() public view returns (uint256) {return info.totalSupply;}
	function totalFrozen() public view returns (uint256) {return info.totalFrozen;}
	function balanceOf(address _user) public view returns (uint256) {return info.users[_user].balance - frozenOf(_user);}
	function frozenOf(address _user) public view returns (uint256) {return info.users[_user].frozen;}
	function dividendsOf(address _user) public view returns (uint256) {return uint256(int256(info.scaledPayoutPerToken * info.users[_user].frozen) - info.users[_user].scaledPayout) / FLOAT_SCALAR;}
	function allowance(address _user, address _spender) public view returns (uint256) {return info.users[_user].allowance[_spender];}
	function isWhitelisted(address _user) public view returns (bool) {return info.users[_user].whitelisted;}
	function allInfoFor(address _user) public view returns (uint256 totalTokenSupply, uint256 totalTokensFrozen, uint256 userBalance, uint256 userFrozen, uint256 userDividends) {return (totalSupply(), totalFrozen(), balanceOf(_user), frozenOf(_user), dividendsOf(_user));}

	function _transfer(address _from, address _to, uint256 _tokens) internal returns (uint256) {
		require(balanceOf(_from) >= _tokens, 'Trying to send more than you have');
		info.users[_from].balance -= _tokens;
		uint256 _burnedAmount = _tokens * BURN_RATE / 100;
		if (totalSupply() - _burnedAmount < INITIAL_SUPPLY * SUPPLY_FLOOR / 100 || isWhitelisted(_from)) {_burnedAmount = 0;}
		uint256 _transferred = _tokens - _burnedAmount;
		info.users[_to].balance += _transferred;
		emit Transfer(_from, _to, _transferred);
		if (_burnedAmount > 0) {
			if (info.totalFrozen > 0) {
				_burnedAmount /= 2;
				info.scaledPayoutPerToken += _burnedAmount * FLOAT_SCALAR / info.totalFrozen;
				emit Transfer(_from, address(this), _burnedAmount);
			}
			info.totalSupply -= _burnedAmount;
			emit Transfer(_from, address(0x0), _burnedAmount);
			emit Burn(_burnedAmount);
		}
		return _transferred;
	}

	function _freeze(uint256 _amount) internal {
		require(balanceOf(msg.sender) >= _amount, 'Trying to freeze more than you have');
		require(frozenOf(msg.sender) + _amount >= MIN_FREEZE_AMOUNT, 'Trying to freeze less than the minimum');
		info.totalFrozen += _amount;
		info.users[msg.sender].frozen += _amount;
		info.users[msg.sender].scaledPayout += int256(_amount * info.scaledPayoutPerToken);
		emit Transfer(msg.sender, address(this), _amount);
		emit Freeze(msg.sender, _amount);
	}

	function _unfreeze(uint256 _amount) internal {
		require(frozenOf(msg.sender) >= _amount, 'Trying to unfreeze more than you can');
		uint256 _burnedAmount = _amount * BURN_RATE / 100;
		info.scaledPayoutPerToken += _burnedAmount * FLOAT_SCALAR / info.totalFrozen;
		info.totalFrozen -= _amount;
		info.users[msg.sender].balance -= _burnedAmount;
		info.users[msg.sender].frozen -= _amount;
		info.users[msg.sender].scaledPayout -= int256(_amount * info.scaledPayoutPerToken);
		emit Transfer(address(this), msg.sender, _amount - _burnedAmount);
		emit Unfreeze(msg.sender, _amount);
	}
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Collect","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Freeze","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Unfreeze","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Whitelist","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"bool","name":"status","internalType":"bool","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"totalTokenSupply","internalType":"uint256"},{"type":"uint256","name":"totalTokensFrozen","internalType":"uint256"},{"type":"uint256","name":"userBalance","internalType":"uint256"},{"type":"uint256","name":"userFrozen","internalType":"uint256"},{"type":"uint256","name":"userDividends","internalType":"uint256"}],"name":"allInfoFor","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"_user","internalType":"address"},{"type":"address","name":"_spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"_spender","internalType":"address"},{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bulkTransfer","inputs":[{"type":"address[]","name":"_receivers","internalType":"address[]"},{"type":"uint256[]","name":"_amounts","internalType":"uint256[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"collect","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"distribute","inputs":[{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"dividendsOf","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"freeze","inputs":[{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"frozenOf","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWhitelisted","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFrozen","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferAndCall","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_tokens","internalType":"uint256"},{"type":"bytes","name":"_data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unfreeze","inputs":[{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"whitelist","inputs":[{"type":"address","name":"_user","internalType":"address"},{"type":"bool","name":"_status","internalType":"bool"}]}]
            

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101415760003560e01c806342966c68116100b857806395d89b411161007c57806395d89b4114610502578063a9059cbb1461050a578063d7a78db814610536578063dd62ed3e14610553578063e522538114610581578063f59c37081461058957610141565b806342966c681461043457806357f6b812146104515780636623fc46146104a257806370a08231146104bf57806391c05b0b146104e557610141565b80631bf6e00d1161010a5780631bf6e00d146103075780631e7f87bc1461032d57806323b872dd14610335578063313ce5671461036b5780633af32abf146103895780634000aea0146103af57610141565b806265318b1461014657806306fdde031461017e578063095ea7b3146101fb578063153a1f3e1461023b57806318160ddd146102ff575b600080fd5b61016c6004803603602081101561015c57600080fd5b50356001600160a01b03166105b7565b60408051918252519081900360200190f35b6101866105eb565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c05781810151838201526020016101a8565b50505050905090810190601f1680156101ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102276004803603604081101561021157600080fd5b506001600160a01b038135169060200135610616565b604080519115158252519081900360200190f35b6102fd6004803603604081101561025157600080fd5b81019060208101813564010000000081111561026c57600080fd5b82018360208201111561027e57600080fd5b803590602001918460208302840111640100000000831117156102a057600080fd5b9193909290916020810190356401000000008111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460208302840111640100000000831117156102f257600080fd5b509092509050610680565b005b61016c610711565b61016c6004803603602081101561031d57600080fd5b50356001600160a01b0316610717565b61016c610736565b6102276004803603606081101561034b57600080fd5b506001600160a01b0381358116916020810135909116906040013561073c565b6103736107e4565b6040805160ff9092168252519081900360200190f35b6102276004803603602081101561039f57600080fd5b50356001600160a01b03166107e9565b610227600480360360608110156103c557600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156103f557600080fd5b82018360208201111561040757600080fd5b8035906020019184600183028401116401000000008311171561042957600080fd5b509092509050610807565b6102fd6004803603602081101561044a57600080fd5b503561093a565b6104776004803603602081101561046757600080fd5b50356001600160a01b0316610a53565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6102fd600480360360208110156104b857600080fd5b5035610a98565b61016c600480360360208110156104d557600080fd5b50356001600160a01b0316610aa4565b6102fd600480360360208110156104fb57600080fd5b5035610ad3565b610186610bb8565b6102276004803603604081101561052057600080fd5b506001600160a01b038135169060200135610bd8565b6102fd6004803603602081101561054c57600080fd5b5035610bef565b61016c6004803603604081101561056957600080fd5b506001600160a01b0381358116916020013516610bf8565b61016c610c27565b6102fd6004803603604081101561059f57600080fd5b506001600160a01b0381351690602001351515610cbc565b6001600160a01b031660009081526002602081905260409091206004810154910154600354600160401b9102919091030490565b6040518060400160405280600f81526020016e0aadcd2eccae4e6c2d886ded2dc40b608b1b81525081565b3360008181526002602090815260408083206001600160a01b03871680855260039091018352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b8281146106be5760405162461bcd60e51b815260040180806020018281038252602a815260200180611272602a913960400191505060405180910390fd5b60005b8381101561070a57610701338686848181106106d957fe5b905060200201356001600160a01b03168585858181106106f557fe5b90506020020135610d7b565b506001016106c1565b5050505050565b60005490565b6001600160a01b03166000908152600260208190526040909120015490565b60015490565b6001600160a01b03831660009081526002602090815260408083203384526003019091528120548211156107a15760405162461bcd60e51b81526004018080602001828103825260258152602001806111b96025913960400191505060405180910390fd5b6001600160a01b03841660009081526002602090815260408083203384526003019091529020805483900390556107d9848484610d7b565b506001949350505050565b601281565b6001600160a01b031660009081526002602052604090205460ff1690565b600080610815338787610d7b565b9050853b63ffffffff81161561092d57866001600160a01b0316636be32e73338488886040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b1580156108b057600080fd5b505af11580156108c4573d6000803e3d6000fd5b505050506040513d60208110156108da57600080fd5b505161092d576040805162461bcd60e51b815260206004820181905260248201527f4d6f7265207468616e2030206461746120696e20746865207472616e73666572604482015290519081900360640190fd5b5060019695505050505050565b8061094433610aa4565b10156109815760405162461bcd60e51b81526004018080602001828103825260218152602001806111736021913960400191505060405180910390fd5b336000908152600260205260409020600190810180548390039055548190156109ef57600154600290910490600160401b8202816109bb57fe5b6003805492909104919091019055604080518281529051309133916000805160206112288339815191529181900360200190a35b6000805482900381556040805183815290513391600080516020611228833981519152919081900360200190a36040805182815290517fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb9181900360200190a15050565b6000806000806000610a63610711565b610a6b610736565b610a7488610aa4565b610a7d89610717565b610a868a6105b7565b939a9299509097509550909350915050565b610aa181610f3c565b50565b6000610aaf82610717565b6001600160a01b038316600090815260026020526040902060010154039050919050565b600154610b115760405162461bcd60e51b815260040180806020018281038252602a815260200180611248602a913960400191505060405180910390fd5b80610b1b33610aa4565b1015610b585760405162461bcd60e51b81526004018080602001828103825260258152602001806111946025913960400191505060405180910390fd5b33600090815260026020526040902060019081018054839003905554600160401b820281610b8257fe5b6003805492909104919091019055604080518281529051309133916000805160206112288339815191529181900360200190a350565b604051806040016040528060048152602001630aaac86b60e31b81525081565b6000610be5338484610d7b565b5060019392505050565b610aa181611048565b6001600160a01b0391821660009081526002602090815260408083209390941682526003909201909152205490565b600080610c33336105b7565b905033600081815260026020908152604091829020600481018054600160401b870201905560010180548501905581518481529151309260008051602061122883398151915292908290030190a360408051828152905133917f4256a058fa2b123d727576d3d31e3a272db98ee5fe264e229610ce43dc849999919081900360200190a2905090565b6004546001600160a01b03163314610d1b576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c792061646d696e732063616e2077686974656c69737400000000000000604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020805460ff1916851515908117909155825190815291517f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d9281900390910190a25050565b600081610d8785610aa4565b1015610dc45760405162461bcd60e51b81526004018080602001828103825260218152602001806112bf6021913960400191505060405180910390fd5b6001600160a01b038416600090815260026020526040902060010180548390039055606482046a108b2a2c2802909400000081610dff610711565b031080610e105750610e10856107e9565b15610e19575060005b6001600160a01b0380851660008181526002602090815260409182902060010180548689039081019091558251818152925190948a169260008051602061122883398151915292908290030190a38115610f335760015415610ec957600154600290920491600160401b830281610e8c57fe5b600380549290910491909101905560408051838152905130916001600160a01b038916916000805160206112288339815191529181900360200190a35b6000805483900381556040805184815290516001600160a01b03891691600080516020611228833981519152919081900360200190a36040805183815290517fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb9181900360200190a15b95945050505050565b80610f4633610717565b1015610f835760405162461bcd60e51b81526004018080602001828103825260248152602001806111de6024913960400191505060405180910390fd5b6001546064820490600160401b820281610f9957fe5b6003805492909104909101815560018054849003815533600081815260026020818152604092839020948501805488900390559084018054889003905593546004909301805493870290930390925581518486038152915190923092600080516020611228833981519152929081900390910190a360408051838152905133917f2cfce4af01bcb9d6cf6c84ee1b7c491100b8695368264146a94d71e10a63083f919081900360200190a25050565b8061105233610aa4565b101561108f5760405162461bcd60e51b815260040180806020018281038252602381526020018061129c6023913960400191505060405180910390fd5b68056bc75e2d63100000816110a333610717565b0110156110e15760405162461bcd60e51b81526004018080602001828103825260268152602001806112026026913960400191505060405180910390fd5b600180548201905533600081815260026020818152604092839020918201805486019055600354600490920180549286029092019091558151848152915130939260008051602061122883398151915292908290030190a360408051828152905133917ff97a274face0b5517365ad396b1fdba6f68bd3135ef603e44272adba3af5a1e0919081900360200190a25056fe547279696e6720746f206275726e206d6f7265207468616e20796f7520686176654d757374206861766520656e6f75676820746f6b656e7320746f20646973747269627574654e65656420746f206861766520656e6f75676820616c6c6f77616e636520746f2073656e64547279696e6720746f20756e667265657a65206d6f7265207468616e20796f752063616e547279696e6720746f20667265657a65206c657373207468616e20746865206d696e696d756dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4d7573742068617665206d6f7265207468616e20302066726f7a656e20746f20646973747269627574654e65656420657175616c20616d6f756e7473206f662072656365697665727320616e642076616c756573547279696e6720746f20667265657a65206d6f7265207468616e20796f752068617665547279696e6720746f2073656e64206d6f7265207468616e20796f752068617665a264697066735822122094e2a3e4ecf88b5daf0b1370e3c9335dc5860336ec96aabc1bc2bc946f4c608e64736f6c634300060c0033