Contract Address Details

0x1a71a7Dfd947A1D212394ef953099028dBe3d31b

RewardByBlock Last Balance Update: Block #15230652
Created by 0x48a1–21d69f at 0x1c79–6252b2

Balance

0 POA

(@ /POA)

Fetching tokens...

Contract name:
RewardByBlock




Optimization enabled
true
Compiler version
v0.4.24+commit.e67f0147




Optimization runs
200
EVM Version
byzantium

Contract source code

/**
* Submitted for verification at blockscout.com on 2020-04-08 11:04:10.606122Z
*/
pragma solidity ^0.4.24;
/**
* @title EternalStorage
* @dev This contract holds all the necessary state variables to carry out the storage of any contract
* and to support the upgrade functionality.
*/
contract EternalStorage {
// Version number of the current implementation
uint256 internal _version;
// Address of the current implementation
address internal _implementation;
// Storage mappings
mapping(bytes32 => uint256) internal uintStorage;
mapping(bytes32 => string) internal stringStorage;
mapping(bytes32 => address) internal addressStorage;
mapping(bytes32 => bytes) internal bytesStorage;
mapping(bytes32 => bool) internal boolStorage;
mapping(bytes32 => int256) internal intStorage;
mapping(bytes32 => bytes32) internal bytes32Storage;
mapping(bytes32 => uint256[]) internal uintArrayStorage;
mapping(bytes32 => string[]) internal stringArrayStorage;
mapping(bytes32 => address[]) internal addressArrayStorage;
//mapping(bytes32 => bytes[]) internal bytesArrayStorage;
mapping(bytes32 => bool[]) internal boolArrayStorage;
mapping(bytes32 => int256[]) internal intArrayStorage;
mapping(bytes32 => bytes32[]) internal bytes32ArrayStorage;
}
interface IProxyStorage {
function initializeAddresses(
address, address, address, address, address, address, address, address
) external;
function setContractAddress(uint256, address) external returns(bool);
function getBallotsStorage() external view returns(address);
function getKeysManager() external view returns(address);
function getPoaConsensus() external view returns(address);
function getValidatorMetadata() external view returns(address);
function getVotingToChangeKeys() external view returns(address);
function getVotingToChangeMinThreshold() external view returns(address);
}
interface IKeysManager {
function addMiningKey(address) external returns(bool);
function addVotingKey(address, address) external returns(bool);
function addPayoutKey(address, address) external returns(bool);
function createKeys(address, address, address) external;
function initiateKeys(address) external;
function migrateInitialKey(address) external;
function migrateMiningKey(address) external;
function removeMiningKey(address) external returns(bool);
function removeVotingKey(address) external returns(bool);
function removePayoutKey(address) external returns(bool);
function swapMiningKey(address, address) external returns(bool);
function swapVotingKey(address, address) external returns(bool);
function swapPayoutKey(address, address) external returns(bool);
function checkIfMiningExisted(address, address) external view returns(bool);
function initialKeysCount() external view returns(uint256);
function isMiningActive(address) external view returns(bool);
function isVotingActive(address) external view returns(bool);
function isPayoutActive(address) external view returns(bool);
function getVotingByMining(address) external view returns(address);
function getPayoutByMining(address) external view returns(address);
function getTime() external view returns(uint256);
function getMiningKeyHistory(address) external view returns(address);
function getMiningKeyByVoting(address) external view returns(address);
function getInitialKeyStatus(address) external view returns(uint256);
function masterOfCeremony() external view returns(address);
function maxOldMiningKeysDeepCheck() external pure returns(uint256);
function miningKeyByPayout(address) external view returns(address);
function miningKeyByVoting(address) external view returns(address);
}
interface IKeysManagerPrev {
function getInitialKey(address) external view returns(uint8);
}
interface IRewardByBlock {
// Produce rewards for the given benefactors, with corresponding reward codes.
// Only callable by `SYSTEM_ADDRESS`
function reward(address[], uint16[]) external returns (address[], uint256[]);
}
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
function mul(uint256 a, uint256 b) internal pure returns(uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns(uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function sub(uint256 a, uint256 b) internal pure returns(uint256) {
assert(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns(uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
contract RewardByBlock is EternalStorage, IRewardByBlock {
using SafeMath for uint256;
bytes32 internal constant EXTRA_RECEIVERS = keccak256("extraReceivers");
bytes32 internal constant PROXY_STORAGE = keccak256("proxyStorage");
bytes32 internal constant MINTED_TOTALLY = keccak256("mintedTotally");
bytes32 internal constant BRIDGE_AMOUNT = "bridgeAmount";
bytes32 internal constant EXTRA_RECEIVER_AMOUNT = "extraReceiverAmount";
bytes32 internal constant MINTED_FOR_ACCOUNT = "mintedForAccount";
bytes32 internal constant MINTED_FOR_ACCOUNT_IN_BLOCK = "mintedForAccountInBlock";
bytes32 internal constant MINTED_IN_BLOCK = "mintedInBlock";
bytes32 internal constant MINTED_TOTALLY_BY_BRIDGE = "mintedTotallyByBridge";
// solhint-disable const-name-snakecase
// These values must be changed before deploy
uint256 public constant blockRewardAmount = 1 ether;
uint256 public constant emissionFundsAmount = 1 ether;
address public constant emissionFunds = 0x517F3AcfF3aFC2fb45e574718bca6F919b798e10;
uint256 public constant bridgesAllowedLength = 3;
// solhint-enable const-name-snakecase
event AddedReceiver(uint256 amount, address indexed receiver, address indexed bridge);
event Rewarded(address[] receivers, uint256[] rewards);
modifier onlyBridgeContract {
require(_isBridgeContract(msg.sender));
_;
}
modifier onlySystem {
require(msg.sender == 0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE);
_;
}
function addExtraReceiver(uint256 _amount, address _receiver)
external
onlyBridgeContract
{
require(_amount != 0);
require(_receiver != address(0));
uint256 oldAmount = extraReceiverAmount(_receiver);
if (oldAmount == 0) {
_addExtraReceiver(_receiver);
}
_setExtraReceiverAmount(oldAmount.add(_amount), _receiver);
_setBridgeAmount(bridgeAmount(msg.sender).add(_amount), msg.sender);
emit AddedReceiver(_amount, _receiver, msg.sender);
}
function reward(address[] benefactors, uint16[] kind)
external
onlySystem
returns (address[], uint256[])
{
require(benefactors.length == kind.length);
require(benefactors.length == 1);
require(kind[0] == 0);
address miningKey = benefactors[0];
if (miningKey == address(0)) {
// Return empty arrays
return (new address[](0), new uint256[](0));
}
uint256 extraLength = extraReceiversLength();
address[] memory receivers = new address[](extraLength.add(2));
uint256[] memory rewards = new uint256[](receivers.length);
receivers[0] = _getPayoutByMining(miningKey);
rewards[0] = blockRewardAmount;
receivers[1] = emissionFunds;
rewards[1] = emissionFundsAmount;
uint256 i;
for (i = 0; i < extraLength; i++) {
address extraAddress = extraReceiverByIndex(i);
uint256 extraAmount = extraReceiverAmount(extraAddress);
_setExtraReceiverAmount(0, extraAddress);
receivers[i.add(2)] = extraAddress;
rewards[i.add(2)] = extraAmount;
}
for (i = 0; i < receivers.length; i++) {
_setMinted(rewards[i], receivers[i]);
}
for (i = 0; i < bridgesAllowedLength; i++) {
address bridgeAddress = bridgesAllowed()[i];
uint256 bridgeAmountForBlock = bridgeAmount(bridgeAddress);
if (bridgeAmountForBlock > 0) {
_setBridgeAmount(0, bridgeAddress);
_addMintedTotallyByBridge(bridgeAmountForBlock, bridgeAddress);
}
}
_clearExtraReceivers();
emit Rewarded(receivers, rewards);
return (receivers, rewards);
}
function bridgesAllowed() public pure returns(address[bridgesAllowedLength]) {
// These values must be changed before deploy
return([
address(0x0000000000000000000000000000000000000000),
address(0x0000000000000000000000000000000000000000),
address(0x0000000000000000000000000000000000000000)
]);
}
function bridgeAmount(address _bridge) public view returns(uint256) {
return uintStorage[
keccak256(abi.encode(BRIDGE_AMOUNT, _bridge))
];
}
function extraReceiverByIndex(uint256 _index) public view returns(address) {
return addressArrayStorage[EXTRA_RECEIVERS][_index];
}
function extraReceiverAmount(address _receiver) public view returns(uint256) {
return uintStorage[
keccak256(abi.encode(EXTRA_RECEIVER_AMOUNT, _receiver))
];
}
function extraReceiversLength() public view returns(uint256) {
return addressArrayStorage[EXTRA_RECEIVERS].length;
}
function mintedForAccount(address _account)
public
view
returns(uint256)
{
return uintStorage[
keccak256(abi.encode(MINTED_FOR_ACCOUNT, _account))
];
}
function mintedForAccountInBlock(address _account, uint256 _blockNumber)
public
view
returns(uint256)
{
return uintStorage[
keccak256(abi.encode(MINTED_FOR_ACCOUNT_IN_BLOCK, _account, _blockNumber))
];
}
function mintedInBlock(uint256 _blockNumber) public view returns(uint256) {
return uintStorage[
keccak256(abi.encode(MINTED_IN_BLOCK, _blockNumber))
];
}
function mintedTotally() public view returns(uint256) {
return uintStorage[MINTED_TOTALLY];
}
function mintedTotallyByBridge(address _bridge) public view returns(uint256) {
return uintStorage[
keccak256(abi.encode(MINTED_TOTALLY_BY_BRIDGE, _bridge))
];
}
function proxyStorage() public view returns(address) {
return addressStorage[PROXY_STORAGE];
}
function _addExtraReceiver(address _receiver) private {
addressArrayStorage[EXTRA_RECEIVERS].push(_receiver);
}
function _addMintedTotallyByBridge(uint256 _amount, address _bridge) private {
bytes32 hash = keccak256(abi.encode(MINTED_TOTALLY_BY_BRIDGE, _bridge));
uintStorage[hash] = uintStorage[hash].add(_amount);
}
function _clearExtraReceivers() private {
addressArrayStorage[EXTRA_RECEIVERS].length = 0;
}
function _getPayoutByMining(address _miningKey)
private
view
returns (address)
{
IKeysManager keysManager = IKeysManager(
IProxyStorage(proxyStorage()).getKeysManager()
);
address payoutKey = keysManager.getPayoutByMining(_miningKey);
return (payoutKey != address(0)) ? payoutKey : _miningKey;
}
function _isBridgeContract(address _addr) private pure returns(bool) {
address[bridgesAllowedLength] memory bridges = bridgesAllowed();
for (uint256 i = 0; i < bridges.length; i++) {
if (_addr == bridges[i]) {
return true;
}
}
return false;
}
function _isMiningActive(address _miningKey)
private
view
returns (bool)
{
IKeysManager keysManager = IKeysManager(
IProxyStorage(proxyStorage()).getKeysManager()
);
return keysManager.isMiningActive(_miningKey);
}
function _setBridgeAmount(uint256 _amount, address _bridge) private {
uintStorage[
keccak256(abi.encode(BRIDGE_AMOUNT, _bridge))
] = _amount;
}
function _setExtraReceiverAmount(uint256 _amount, address _receiver) private {
uintStorage[
keccak256(abi.encode(EXTRA_RECEIVER_AMOUNT, _receiver))
] = _amount;
}
function _setMinted(uint256 _amount, address _account) private {
bytes32 hash;
hash = keccak256(abi.encode(MINTED_FOR_ACCOUNT_IN_BLOCK, _account, block.number));
uintStorage[hash] = _amount;
hash = keccak256(abi.encode(MINTED_FOR_ACCOUNT, _account));
uintStorage[hash] = uintStorage[hash].add(_amount);
hash = keccak256(abi.encode(MINTED_IN_BLOCK, block.number));
uintStorage[hash] = uintStorage[hash].add(_amount);
hash = MINTED_TOTALLY;
uintStorage[hash] = uintStorage[hash].add(_amount);
}
}

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"extraReceiverAmount","inputs":[{"type":"address","name":"_receiver"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"bridgesAllowedLength","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"emissionFunds","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"blockRewardAmount","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedForAccountInBlock","inputs":[{"type":"address","name":"_account"},{"type":"uint256","name":"_blockNumber"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedForAccount","inputs":[{"type":"address","name":"_account"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedInBlock","inputs":[{"type":"uint256","name":"_blockNumber"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedTotally","inputs":[],"constant":true},{"type":"function","stateMutability":"pure","payable":false,"outputs":[{"type":"address[3]","name":""}],"name":"bridgesAllowed","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"addExtraReceiver","inputs":[{"type":"uint256","name":"_amount"},{"type":"address","name":"_receiver"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"proxyStorage","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mintedTotallyByBridge","inputs":[{"type":"address","name":"_bridge"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"extraReceiverByIndex","inputs":[{"type":"uint256","name":"_index"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"bridgeAmount","inputs":[{"type":"address","name":"_bridge"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"emissionFundsAmount","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"extraReceiversLength","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"address[]","name":""},{"type":"uint256[]","name":""}],"name":"reward","inputs":[{"type":"address[]","name":"benefactors"},{"type":"uint16[]","name":"kind"}],"constant":false},{"type":"event","name":"AddedReceiver","inputs":[{"type":"uint256","name":"amount","indexed":false},{"type":"address","name":"receiver","indexed":true},{"type":"address","name":"bridge","indexed":true}],"anonymous":false},{"type":"event","name":"Rewarded","inputs":[{"type":"address[]","name":"receivers","indexed":false},{"type":"uint256[]","name":"rewards","indexed":false}],"anonymous":false}]
            

Contract Byte Code

0x6080604052600436106100f05763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630f3a053381146100f557806310f2ee7c146101285780631f4356e41461013d57806326cc22561461016e57806330f6eb16146101835780633d84b8c1146101a75780634476d66a146101c8578063553a5c85146101e0578063899ca7fc146101f5578063aa9fa27414610242578063ae4b1b5b14610268578063b4a523e81461027d578063db456f771461029e578063e73b9e2f146102b6578063ee8d75ff1461016e578063efdc4d01146102d7578063f91c2898146102ec575b600080fd5b34801561010157600080fd5b50610116600160a060020a03600435166103b1565b60408051918252519081900360200190f35b34801561013457600080fd5b50610116610474565b34801561014957600080fd5b50610152610479565b60408051600160a060020a039092168252519081900360200190f35b34801561017a57600080fd5b50610116610491565b34801561018f57600080fd5b50610116600160a060020a036004351660243561049d565b3480156101b357600080fd5b50610116600160a060020a036004351661056a565b3480156101d457600080fd5b506101166004356105eb565b3480156101ec57600080fd5b50610116610664565b34801561020157600080fd5b5061020a6106a6565b6040518082606080838360005b8381101561022f578181015183820152602001610217565b5050505090500191505060405180910390f35b34801561024e57600080fd5b50610266600435600160a060020a03602435166106cf565b005b34801561027457600080fd5b506101526107a1565b34801561028957600080fd5b50610116600160a060020a03600435166107eb565b3480156102aa57600080fd5b5061015260043561086c565b3480156102c257600080fd5b50610116600160a060020a03600435166108c0565b3480156102e357600080fd5b50610116610941565b3480156102f857600080fd5b506103186024600480358281019290820135918135918201910135610970565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561035c578181015183820152602001610344565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561039b578181015183820152602001610383565b5050505090500194505050505060405180910390f35b604080517f65787472615265636569766572416d6f756e7400000000000000000000000000602080830191909152600160a060020a0384168284015282518083038401815260609092019283905281516000936002938593909282918401908083835b602083106104335780518252601f199092019160209182019101610414565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000205495945050505050565b600381565b73517f3acff3afc2fb45e574718bca6f919b798e1081565b670de0b6b3a764000081565b604080517f6d696e746564466f724163636f756e74496e426c6f636b000000000000000000602080830191909152600160a060020a0385168284015260608083018590528351808403909101815260809092019283905281516000936002938593909282918401908083835b602083106105285780518252601f199092019160209182019101610509565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020549695505050505050565b604080517f6d696e746564466f724163636f756e7400000000000000000000000000000000602080830191909152600160a060020a038416828401528251808303840181526060909201928390528151600093600293859390928291840190808383602083106104335780518252601f199092019160209182019101610414565b604080517f6d696e746564496e426c6f636b000000000000000000000000000000000000006020808301919091528183018490528251808303840181526060909201928390528151600093600293859390928291840190808383602083106104335780518252601f199092019160209182019101610414565b604080517f6d696e746564546f74616c6c79000000000000000000000000000000000000008152815190819003600d0190206000908152600260205220545b90565b6106ae6114af565b50604080516060810182526000808252602082018190529181019190915290565b60006106da33610d7c565b15156106e557600080fd5b8215156106f157600080fd5b600160a060020a038216151561070657600080fd5b61070f826103b1565b90508015156107215761072182610de7565b61073a610734828563ffffffff610e5316565b83610e69565b61075c6107568461074a336108c0565b9063ffffffff610e5316565b33610f2d565b6040805184815290513391600160a060020a038516917f3c798bbcf33115b42c728b8504cff11dd58736e9fa789f1cda2738db7d696b2a9181900360200190a3505050565b604080517f70726f787953746f7261676500000000000000000000000000000000000000008152815190819003600c019020600090815260046020522054600160a060020a031690565b604080517f6d696e746564546f74616c6c7942794272696467650000000000000000000000602080830191909152600160a060020a038416828401528251808303840181526060909201928390528151600093600293859390928291840190808383602083106104335780518252601f199092019160209182019101610414565b604080516000805160206115168339815191528152815190819003600e0190206000908152600b6020529081208054839081106108a557fe5b600091825260209091200154600160a060020a031692915050565b604080517f627269646765416d6f756e740000000000000000000000000000000000000000602080830191909152600160a060020a038416828401528251808303840181526060909201928390528151600093600293859390928291840190808383602083106104335780518252601f199092019160209182019101610414565b604080516000805160206115168339815191528152815190819003600e0190206000908152600b602052205490565b6060806000808280828080808073fffffffffffffffffffffffffffffffffffffffe331461099d57600080fd5b8d8c146109a957600080fd5b60018e146109b657600080fd5b8c8c60008181106109c357fe5b9050602002013561ffff1661ffff1660001415156109e057600080fd5b8e8e60008181106109ed57fe5b90506020020135600160a060020a031698506000600160a060020a031689600160a060020a03161415610a3957604080516000808252602082019081528183019092529b509950610d6a565b610a41610941565b9750610a5488600263ffffffff610e5316565b604051908082528060200260200182016040528015610a7d578160200160208202803883390190505b5096508651604051908082528060200260200182016040528015610aab578160200160208202803883390190505b509550610ab789610fae565b876000815181101515610ac657fe5b600160a060020a039092166020928302909101909101528551670de0b6b3a76400009087906000908110610af657fe5b60209081029091010152865173517f3acff3afc2fb45e574718bca6f919b798e109088906001908110610b2557fe5b600160a060020a039092166020928302909101909101528551670de0b6b3a76400009087906001908110610b5557fe5b60209081029091010152600094505b87851015610bf357610b758561086c565b9350610b80846103b1565b9250610b8d600085610e69565b8387610ba087600263ffffffff610e5316565b81518110610baa57fe5b600160a060020a039092166020928302909101909101528286610bd487600263ffffffff610e5316565b81518110610bde57fe5b60209081029091010152600190940193610b64565b600094505b8651851015610c4457610c398686815181101515610c1257fe5b906020019060200201518887815181101515610c2a57fe5b906020019060200201516110f3565b600190940193610bf8565b600094505b6003851015610ca057610c5a6106a6565b8560038110610c6557fe5b60200201519150610c75826108c0565b90506000811115610c9557610c8b600083610f2d565b610c9581836113af565b600190940193610c49565b610ca8611475565b7fb747d4e9a0b39cc47496d84b42e4066ba8b8a0b89776528bcec4ac2997e224538787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610d0f578181015183820152602001610cf7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610d4e578181015183820152602001610d36565b5050505090500194505050505060405180910390a186869a509a505b50505050505050505094509492505050565b6000610d866114af565b6000610d906106a6565b9150600090505b6003811015610ddb57818160038110610dac57fe5b6020020151600160a060020a031684600160a060020a03161415610dd35760019250610de0565b600101610d97565b600092505b5050919050565b604080516000805160206115168339815191528152815190819003600e0190206000908152600b60209081529181208054600181018255908252919020018054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19909216919091179055565b600082820183811015610e6257fe5b9392505050565b604080517f65787472615265636569766572416d6f756e7400000000000000000000000000602080830191909152600160a060020a0384168284015282518083038401815260609092019283905281518593600293600093909282918401908083835b60208310610eeb5780518252601f199092019160209182019101610ecc565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020939093555050505050565b604080517f627269646765416d6f756e740000000000000000000000000000000000000000602080830191909152600160a060020a03841682840152825180830384018152606090920192839052815185936002936000939092829184019080838360208310610eeb5780518252601f199092019160209182019101610ecc565b6000806000610fbb6107a1565b600160a060020a0316639a5737866040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561101157600080fd5b505af1158015611025573d6000803e3d6000fd5b505050506040513d602081101561103b57600080fd5b5051604080517f7cded930000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152915192945090841691637cded930916024808201926020929091908290030181600087803b1580156110a557600080fd5b505af11580156110b9573d6000803e3d6000fd5b505050506040513d60208110156110cf57600080fd5b50519050600160a060020a03811615156110e957836110eb565b805b949350505050565b604080517f6d696e746564466f724163636f756e74496e426c6f636b000000000000000000602080830191909152600160a060020a0384168284015243606080840191909152835180840390910181526080909201928390528151600093918291908401908083835b6020831061117b5780518252601f19909201916020918201910161115c565b51815160209384036101000a6000190180199092169116179052604080519290940182900382206000818152600283528590208a90557f6d696e746564466f724163636f756e740000000000000000000000000000000083830152600160a060020a0389168386015284518084038601815260609093019485905282519097509195509293508392850191508083835b6020831061122a5780518252601f19909201916020918201910161120b565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526002909252929020549194506112739350909150859050610e53565b6000828152600260209081526040918290209290925580517f6d696e746564496e426c6f636b00000000000000000000000000000000000000818401524381830152815180820383018152606090910191829052805190928291908401908083835b602083106112f45780518252601f1990920191602091820191016112d5565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260029092529290205491945061133d9350909150859050610e53565b60009182526002602081815260408085209390935582517f6d696e746564546f74616c6c79000000000000000000000000000000000000008152835190819003600d01902080855291905291205461139b908463ffffffff610e5316565b600091825260026020526040909120555050565b604080517f6d696e746564546f74616c6c7942794272696467650000000000000000000000602080830191909152600160a060020a038416828401528251808303840181526060909201928390528151600093918291908401908083835b6020831061142c5780518252601f19909201916020918201910161140d565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120600081815260029092529290205491945061139b9350909150859050610e53565b604080516000805160206115168339815191528152815190819003600e0190206000908152600b6020529081206114ac90826114ce565b50565b6060604051908101604052806003906020820280388339509192915050565b8154818355818111156114f2576000838152602090206114f29181019083016114f7565b505050565b6106a391905b8082111561151157600081556001016114fd565b509056006578747261526563656976657273000000000000000000000000000000000000a165627a7a723058208be51baa90a2d7bd41377821db134888aece943cf5df58fc3113f984551c52620029