Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AccountStorage
Compiler Version
v0.5.4+commit.9549d8ff
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-01-03 */ pragma solidity ^0.5.4; library SafeMath { /** * @dev Multiplies two numbers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two numbers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0); // Solidity only automatically asserts 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; } /** * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two numbers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two numbers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } /** * @dev Returns ceil(a / b). */ function ceil(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; if(a % b == 0) { return c; } else { return c + 1; } } } contract Owned { // The owner address public owner; event OwnerChanged(address indexed _newOwner); /** * @dev Throws if the sender is not the owner. */ modifier onlyOwner { require(msg.sender == owner, "Must be owner"); _; } constructor() public { owner = msg.sender; } /** * @dev Lets the owner transfer ownership of the contract to a new owner. * @param _newOwner The new owner. */ function changeOwner(address _newOwner) external onlyOwner { require(_newOwner != address(0), "Address must not be null"); owner = _newOwner; emit OwnerChanged(_newOwner); } } contract LogicManager is Owned { event UpdateLogicSubmitted(address indexed logic, bool value); event UpdateLogicCancelled(address indexed logic); event UpdateLogicDone(address indexed logic, bool value); struct pending { bool value; uint dueTime; } // The authorized logic modules mapping (address => bool) public authorized; /* array index 0: AccountLogic address 1: TransferLogic address 2: DualsigsLogic address 3: DappLogic address 4: ... */ address[] public authorizedLogics; // updated logics and their due time of becoming effective mapping (address => pending) public pendingLogics; // pending time before updated logics take effect uint public pendingTime; // how many authorized logics uint public logicCount; constructor(address[] memory _initialLogics, uint256 _pendingTime) public { for (uint i = 0; i < _initialLogics.length; i++) { address logic = _initialLogics[i]; authorized[logic] = true; logicCount += 1; } authorizedLogics = _initialLogics; // pendingTime: 4 days for mainnet, 4 minutes for ropsten testnet pendingTime = _pendingTime; } function isAuthorized(address _logic) external view returns (bool) { return authorized[_logic]; } function getAuthorizedLogics() external view returns (address[] memory) { return authorizedLogics; } function submitUpdate(address _logic, bool _value) external onlyOwner { pending storage p = pendingLogics[_logic]; p.value = _value; p.dueTime = now + pendingTime; emit UpdateLogicSubmitted(_logic, _value); } function cancelUpdate(address _logic) external onlyOwner { delete pendingLogics[_logic]; emit UpdateLogicCancelled(_logic); } function triggerUpdateLogic(address _logic) external { pending memory p = pendingLogics[_logic]; require(p.dueTime > 0, "pending logic not found"); require(p.dueTime <= now, "too early to trigger updateLogic"); updateLogic(_logic, p.value); delete pendingLogics[_logic]; } function updateLogic(address _logic, bool _value) internal { if (authorized[_logic] != _value) { if(_value) { logicCount += 1; authorized[_logic] = true; authorizedLogics.push(_logic); } else { logicCount -= 1; require(logicCount > 0, "must have at least one logic module"); delete authorized[_logic]; removeLogic(_logic); } emit UpdateLogicDone(_logic, _value); } } function removeLogic(address _logic) internal { uint len = authorizedLogics.length; address lastLogic = authorizedLogics[len - 1]; if (_logic != lastLogic) { for (uint i = 0; i < len; i++) { if (_logic == authorizedLogics[i]) { authorizedLogics[i] = lastLogic; break; } } } authorizedLogics.length--; } } contract BaseLogic { bytes constant internal SIGN_HASH_PREFIX = "\x19Ethereum Signed Message:\n32"; mapping (address => uint256) keyNonce; AccountStorage public accountStorage; modifier allowSelfCallsOnly() { require (msg.sender == address(this), "only internal call is allowed"); _; } modifier allowAccountCallsOnly(Account _account) { require(msg.sender == address(_account), "caller must be account"); _; } event LogicInitialised(address wallet); // *************** Constructor ********************** // constructor(AccountStorage _accountStorage) public { accountStorage = _accountStorage; } // *************** Initialization ********************* // function initAccount(Account _account) external allowAccountCallsOnly(_account){ emit LogicInitialised(address(_account)); } // *************** Getter ********************** // function getKeyNonce(address _key) external view returns(uint256) { return keyNonce[_key]; } // *************** Signature ********************** // function getSignHash(bytes memory _data, uint256 _nonce) internal view returns(bytes32) { // use EIP 191 // 0x1900 + this logic address + data + nonce of signing key bytes32 msgHash = keccak256(abi.encodePacked(byte(0x19), byte(0), address(this), _data, _nonce)); bytes32 prefixedHash = keccak256(abi.encodePacked(SIGN_HASH_PREFIX, msgHash)); return prefixedHash; } function verifySig(address _signingKey, bytes memory _signature, bytes32 _signHash) internal pure { require(_signingKey != address(0), "invalid signing key"); address recoveredAddr = recover(_signHash, _signature); require(recoveredAddr == _signingKey, "signature verification failed"); } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * NOTE: This call _does not revert_ if the signature is invalid, or * if the signer is otherwise unable to be retrieved. In those scenarios, * the zero address is returned. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise) * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { return (address(0)); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return address(0); } if (v != 27 && v != 28) { return address(0); } // If the signature is valid (and not malleable), return the signer address return ecrecover(hash, v, r, s); } /* get signer address from data * @dev Gets an address encoded as the first argument in transaction data * @param b The byte array that should have an address as first argument * @returns a The address retrieved from the array */ function getSignerAddress(bytes memory _b) internal pure returns (address _a) { require(_b.length >= 36, "invalid bytes"); // solium-disable-next-line security/no-inline-assembly assembly { let mask := 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF _a := and(mask, mload(add(_b, 36))) // b = {length:32}{method sig:4}{address:32}{...} // 36 is the offset of the first parameter of the data, if encoded properly. // 32 bytes for the length of the bytes array, and the first 4 bytes for the function signature. // 32 bytes is the length of the bytes array!!!! } } // get method id, first 4 bytes of data function getMethodId(bytes memory _b) internal pure returns (bytes4 _a) { require(_b.length >= 4, "invalid data"); // solium-disable-next-line security/no-inline-assembly assembly { // 32 bytes is the length of the bytes array _a := mload(add(_b, 32)) } } function checkKeyStatus(address _account, uint256 _index) internal { // check operation key status if (_index > 0) { require(accountStorage.getKeyStatus(_account, _index) != 1, "frozen key"); } } // _nonce is timestamp in microsecond(1/1000000 second) function checkAndUpdateNonce(address _key, uint256 _nonce) internal { require(_nonce > keyNonce[_key], "nonce too small"); require(SafeMath.div(_nonce, 1000000) <= now + 86400, "nonce too big"); // 86400=24*3600 seconds keyNonce[_key] = _nonce; } } contract Account { // The implementation of the proxy address public implementation; // Logic manager address public manager; // The enabled static calls mapping (bytes4 => address) public enabled; event EnabledStaticCall(address indexed module, bytes4 indexed method); event Invoked(address indexed module, address indexed target, uint indexed value, bytes data); event Received(uint indexed value, address indexed sender, bytes data); event AccountInit(address indexed account); event ManagerChanged(address indexed mgr); modifier allowAuthorizedLogicContractsCallsOnly { require(LogicManager(manager).isAuthorized(msg.sender), "not an authorized logic"); _; } function init(address _manager, address _accountStorage, address[] calldata _logics, address[] calldata _keys, address[] calldata _backups) external { require(manager == address(0), "Account: account already initialized"); require(_manager != address(0) && _accountStorage != address(0), "Account: address is null"); manager = _manager; for (uint i = 0; i < _logics.length; i++) { address logic = _logics[i]; require(LogicManager(manager).isAuthorized(logic), "must be authorized logic"); BaseLogic(logic).initAccount(this); } AccountStorage(_accountStorage).initAccount(this, _keys, _backups); emit AccountInit(address(this)); } function invoke(address _target, uint _value, bytes calldata _data) external allowAuthorizedLogicContractsCallsOnly returns (bytes memory _res) { bool success; // solium-disable-next-line security/no-call-value (success, _res) = _target.call.value(_value)(_data); require(success, "call to target failed"); emit Invoked(msg.sender, _target, _value, _data); } /** * @dev Enables a static method by specifying the target module to which the call must be delegated. * @param _module The target module. * @param _method The static method signature. */ function enableStaticCall(address _module, bytes4 _method) external allowAuthorizedLogicContractsCallsOnly { enabled[_method] = _module; emit EnabledStaticCall(_module, _method); } function changeManager(address _newMgr) external allowAuthorizedLogicContractsCallsOnly { require(_newMgr != address(0), "address cannot be null"); require(_newMgr != manager, "already changed"); manager = _newMgr; emit ManagerChanged(_newMgr); } /** * @dev This method makes it possible for the wallet to comply to interfaces expecting the wallet to * implement specific static methods. It delegates the static call to a target contract if the data corresponds * to an enabled method, or logs the call otherwise. */ function() external payable { if(msg.data.length > 0) { address logic = enabled[msg.sig]; if(logic == address(0)) { emit Received(msg.value, msg.sender, msg.data); } else { require(LogicManager(manager).isAuthorized(logic), "must be an authorized logic for static call"); // solium-disable-next-line security/no-inline-assembly assembly { calldatacopy(0, 0, calldatasize()) let result := staticcall(gas, logic, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 {revert(0, returndatasize())} default {return (0, returndatasize())} } } } } } contract AccountStorage { modifier allowAccountCallsOnly(Account _account) { require(msg.sender == address(_account), "caller must be account"); _; } modifier allowAuthorizedLogicContractsCallsOnly(address payable _account) { require(LogicManager(Account(_account).manager()).isAuthorized(msg.sender), "not an authorized logic"); _; } struct KeyItem { address pubKey; uint256 status; } struct BackupAccount { address backup; uint256 effectiveDate;//means not effective until this timestamp uint256 expiryDate;//means effective until this timestamp } struct DelayItem { bytes32 hash; uint256 dueTime; } struct Proposal { bytes32 hash; address[] approval; } // account => quantity of operation keys (index >= 1) mapping (address => uint256) operationKeyCount; // account => index => KeyItem mapping (address => mapping(uint256 => KeyItem)) keyData; // account => index => backup account mapping (address => mapping(uint256 => BackupAccount)) backupData; /* account => actionId => DelayItem delayData applies to these 4 actions: changeAdminKey, changeAllOperationKeys, unfreeze, changeAdminKeyByBackup */ mapping (address => mapping(bytes4 => DelayItem)) delayData; // client account => proposer account => proposed actionId => Proposal mapping (address => mapping(address => mapping(bytes4 => Proposal))) proposalData; // *************** keyCount ********************** // function getOperationKeyCount(address _account) external view returns(uint256) { return operationKeyCount[_account]; } function increaseKeyCount(address payable _account) external allowAuthorizedLogicContractsCallsOnly(_account) { operationKeyCount[_account] = operationKeyCount[_account] + 1; } // *************** keyData ********************** // function getKeyData(address _account, uint256 _index) public view returns(address) { KeyItem memory item = keyData[_account][_index]; return item.pubKey; } function setKeyData(address payable _account, uint256 _index, address _key) external allowAuthorizedLogicContractsCallsOnly(_account) { require(_key != address(0), "invalid _key value"); KeyItem storage item = keyData[_account][_index]; item.pubKey = _key; } // *************** keyStatus ********************** // function getKeyStatus(address _account, uint256 _index) external view returns(uint256) { KeyItem memory item = keyData[_account][_index]; return item.status; } function setKeyStatus(address payable _account, uint256 _index, uint256 _status) external allowAuthorizedLogicContractsCallsOnly(_account) { KeyItem storage item = keyData[_account][_index]; item.status = _status; } // *************** backupData ********************** // function getBackupAddress(address _account, uint256 _index) external view returns(address) { BackupAccount memory b = backupData[_account][_index]; return b.backup; } function getBackupEffectiveDate(address _account, uint256 _index) external view returns(uint256) { BackupAccount memory b = backupData[_account][_index]; return b.effectiveDate; } function getBackupExpiryDate(address _account, uint256 _index) external view returns(uint256) { BackupAccount memory b = backupData[_account][_index]; return b.expiryDate; } function setBackup(address payable _account, uint256 _index, address _backup, uint256 _effective, uint256 _expiry) external allowAuthorizedLogicContractsCallsOnly(_account) { BackupAccount storage b = backupData[_account][_index]; b.backup = _backup; b.effectiveDate = _effective; b.expiryDate = _expiry; } function setBackupExpiryDate(address payable _account, uint256 _index, uint256 _expiry) external allowAuthorizedLogicContractsCallsOnly(_account) { BackupAccount storage b = backupData[_account][_index]; b.expiryDate = _expiry; } function clearBackupData(address payable _account, uint256 _index) external allowAuthorizedLogicContractsCallsOnly(_account) { delete backupData[_account][_index]; } // *************** delayData ********************** // function getDelayDataHash(address payable _account, bytes4 _actionId) external view returns(bytes32) { DelayItem memory item = delayData[_account][_actionId]; return item.hash; } function getDelayDataDueTime(address payable _account, bytes4 _actionId) external view returns(uint256) { DelayItem memory item = delayData[_account][_actionId]; return item.dueTime; } function setDelayData(address payable _account, bytes4 _actionId, bytes32 _hash, uint256 _dueTime) external allowAuthorizedLogicContractsCallsOnly(_account) { DelayItem storage item = delayData[_account][_actionId]; item.hash = _hash; item.dueTime = _dueTime; } function clearDelayData(address payable _account, bytes4 _actionId) external allowAuthorizedLogicContractsCallsOnly(_account) { delete delayData[_account][_actionId]; } // *************** proposalData ********************** // function getProposalDataHash(address _client, address _proposer, bytes4 _actionId) external view returns(bytes32) { Proposal memory p = proposalData[_client][_proposer][_actionId]; return p.hash; } function getProposalDataApproval(address _client, address _proposer, bytes4 _actionId) external view returns(address[] memory) { Proposal memory p = proposalData[_client][_proposer][_actionId]; return p.approval; } function setProposalData(address payable _client, address _proposer, bytes4 _actionId, bytes32 _hash, address _approvedBackup) external allowAuthorizedLogicContractsCallsOnly(_client) { Proposal storage p = proposalData[_client][_proposer][_actionId]; if (p.hash > 0) { if (p.hash == _hash) { for (uint256 i = 0; i < p.approval.length; i++) { require(p.approval[i] != _approvedBackup, "backup already exists"); } p.approval.push(_approvedBackup); } else { p.hash = _hash; p.approval.length = 0; } } else { p.hash = _hash; p.approval.push(_approvedBackup); } } function clearProposalData(address payable _client, address _proposer, bytes4 _actionId) external allowAuthorizedLogicContractsCallsOnly(_client) { delete proposalData[_client][_proposer][_actionId]; } // *************** init ********************** // function initAccount(Account _account, address[] calldata _keys, address[] calldata _backups) external allowAccountCallsOnly(_account) { require(getKeyData(address(_account), 0) == address(0), "AccountStorage: account already initialized!"); require(_keys.length > 0, "empty keys array"); operationKeyCount[address(_account)] = _keys.length - 1; for (uint256 index = 0; index < _keys.length; index++) { address _key = _keys[index]; require(_key != address(0), "_key cannot be 0x0"); KeyItem storage item = keyData[address(_account)][index]; item.pubKey = _key; item.status = 0; } // avoid backup duplication if _backups.length > 1 // normally won't check duplication, in most cases only one initial backup when initialization if (_backups.length > 1) { address[] memory bkps = _backups; for (uint256 i = 0; i < _backups.length; i++) { for (uint256 j = 0; j < i; j++) { require(bkps[j] != _backups[i], "duplicate backup"); } } } for (uint256 index = 0; index < _backups.length; index++) { address _backup = _backups[index]; require(_backup != address(0), "backup cannot be 0x0"); require(_backup != address(_account), "cannot be backup of oneself"); backupData[address(_account)][index] = BackupAccount(_backup, now, uint256(-1)); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_keys","type":"address[]"},{"name":"_backups","type":"address[]"}],"name":"initAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_client","type":"address"},{"name":"_proposer","type":"address"},{"name":"_actionId","type":"bytes4"}],"name":"clearProposalData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_actionId","type":"bytes4"}],"name":"getDelayDataDueTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"}],"name":"getKeyStatus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"},{"name":"_key","type":"address"}],"name":"setKeyData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_client","type":"address"},{"name":"_proposer","type":"address"},{"name":"_actionId","type":"bytes4"}],"name":"getProposalDataHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_client","type":"address"},{"name":"_proposer","type":"address"},{"name":"_actionId","type":"bytes4"},{"name":"_hash","type":"bytes32"},{"name":"_approvedBackup","type":"address"}],"name":"setProposalData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_client","type":"address"},{"name":"_proposer","type":"address"},{"name":"_actionId","type":"bytes4"}],"name":"getProposalDataApproval","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"}],"name":"increaseKeyCount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"}],"name":"getKeyData","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"}],"name":"clearBackupData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"}],"name":"getBackupExpiryDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_actionId","type":"bytes4"}],"name":"clearDelayData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_actionId","type":"bytes4"},{"name":"_hash","type":"bytes32"},{"name":"_dueTime","type":"uint256"}],"name":"setDelayData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"}],"name":"getBackupAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"getOperationKeyCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"}],"name":"getBackupEffectiveDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_actionId","type":"bytes4"}],"name":"getDelayDataHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"},{"name":"_status","type":"uint256"}],"name":"setKeyStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"},{"name":"_backup","type":"address"},{"name":"_effective","type":"uint256"},{"name":"_expiry","type":"uint256"}],"name":"setBackup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_index","type":"uint256"},{"name":"_expiry","type":"uint256"}],"name":"setBackupExpiryDate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50611f97806100206000396000f3fe608060405234801561001057600080fd5b506004361061013b5760003560e060020a900480638e1e9c1f116100bc578063d01e547f11610080578063d01e547f14610589578063db80821d146105af578063e1a9af06146105db578063e4d1ba0714610611578063e5632dee14610643578063e6a3890a146106835761013b565b80638e1e9c1f1461048d5780638e72cbae146104b95780638f2db506146104e5578063b2a9651d1461051b578063cb0cb76a1461055d5761013b565b806360791b881161010357806360791b88146102ff5780636bc77abe1461034057806370c460f81461038e57806374f7613b1461041f5780638d431198146104455761013b565b8063065a0c1e1461014057806321c32c9c1461021457806326c966f614610255578063430901161461029d57806352d43b46146102c9575b600080fd5b6102126004803603606081101561015657600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561018157600080fd5b82018360208201111561019357600080fd5b803590602001918460208302840111640100000000831117156101b557600080fd5b9193909290916020810190356401000000008111156101d357600080fd5b8201836020820111156101e557600080fd5b8035906020019184602083028401116401000000008311171561020757600080fd5b5090925090506106b5565b005b6102126004803603606081101561022a57600080fd5b508035600160a060020a039081169160208101359091169060400135600160e060020a031916610b36565b61028b6004803603604081101561026b57600080fd5b508035600160a060020a03169060200135600160e060020a031916610cac565b60408051918252519081900360200190f35b61028b600480360360408110156102b357600080fd5b50600160a060020a038135169060200135610d01565b610212600480360360608110156102df57600080fd5b50600160a060020a03813581169160208101359160409091013516610d4f565b61028b6004803603606081101561031557600080fd5b508035600160a060020a039081169160208101359091169060400135600160e060020a031916610f0f565b610212600480360360a081101561035657600080fd5b50600160a060020a0381358116916020810135821691600160e060020a03196040830135169160608101359160809091013516610fcb565b6103cf600480360360608110156103a457600080fd5b508035600160a060020a039081169160208101359091169060400135600160e060020a031916611263565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040b5781810151838201526020016103f3565b505050509050019250505060405180910390f35b6102126004803603602081101561043557600080fd5b5035600160a060020a0316611321565b6104716004803603604081101561045b57600080fd5b50600160a060020a038135169060200135611466565b60408051600160a060020a039092168252519081900360200190f35b610212600480360360408110156104a357600080fd5b50600160a060020a0381351690602001356114b1565b61028b600480360360408110156104cf57600080fd5b50600160a060020a038135169060200135611616565b610212600480360360408110156104fb57600080fd5b508035600160a060020a03169060200135600160e060020a03191661166d565b6102126004803603608081101561053157600080fd5b50600160a060020a0381351690600160e060020a031960208201351690604081013590606001356117cb565b6104716004803603604081101561057357600080fd5b50600160a060020a03813516906020013561192a565b61028b6004803603602081101561059f57600080fd5b5035600160a060020a0316611985565b61028b600480360360408110156105c557600080fd5b50600160a060020a0381351690602001356119a0565b61028b600480360360408110156105f157600080fd5b508035600160a060020a03169060200135600160e060020a0319166119f9565b6102126004803603606081101561062757600080fd5b50600160a060020a038135169060208101359060400135611a54565b610212600480360360a081101561065957600080fd5b50600160a060020a0381358116916020810135916040820135169060608101359060800135611ba2565b6102126004803603606081101561069957600080fd5b50600160a060020a038135169060208101359060400135611d0c565b8433600160a060020a03821614610716576040805160e560020a62461bcd02815260206004820152601660248201527f63616c6c6572206d757374206265206163636f756e7400000000000000000000604482015290519081900360640190fd5b60006107228782611466565b600160a060020a03161461076a5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180611f20602c913960400191505060405180910390fd5b600084116107c2576040805160e560020a62461bcd02815260206004820152601060248201527f656d707479206b65797320617272617900000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0386166000908152602081905260408120600019860190555b848110156108bb5760008686838181106107f857fe5b90506020020135600160a060020a031690506000600160a060020a031681600160a060020a031614151515610877576040805160e560020a62461bcd02815260206004820152601260248201527f5f6b65792063616e6e6f74206265203078300000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03888116600090815260016020818152604080842087855290915282208054600160a060020a0319169490931693909317825590820155016107e2565b5060018211156109c057606083838080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509394505050505b838110156109bd5760005b818110156109b45785858381811061091c57fe5b90506020020135600160a060020a0316600160a060020a0316838281518110151561094357fe5b60209081029091010151600160a060020a031614156109ac576040805160e560020a62461bcd02815260206004820152601060248201527f6475706c6963617465206261636b757000000000000000000000000000000000604482015290519081900360640190fd5b600101610908565b506001016108fd565b50505b60005b82811015610b2d5760008484838181106109d957fe5b90506020020135600160a060020a031690506000600160a060020a031681600160a060020a031614151515610a58576040805160e560020a62461bcd02815260206004820152601460248201527f6261636b75702063616e6e6f7420626520307830000000000000000000000000604482015290519081900360640190fd5b600160a060020a038181169089161415610abc576040805160e560020a62461bcd02815260206004820152601b60248201527f63616e6e6f74206265206261636b7570206f66206f6e6573656c660000000000604482015290519081900360640190fd5b60408051606081018252600160a060020a0392831681524260208083019182526000198385019081528c8616600090815260028084528682208983529093529490942092518354600160a060020a0319169516949094178255516001808301919091559151920191909155016109c3565b50505050505050565b8280600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610b7357600080fd5b505afa158015610b87573d6000803e3d6000fd5b505050506040513d6020811015610b9d57600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015610bea57600080fd5b505afa158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50511515610c5a576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b600160a060020a0380851660009081526004602090815260408083209387168352928152828220600160e060020a031986168352905290812081815590610ca46001830182611e5a565b505050505050565b6000610cb6611e7b565b5050600160a060020a0382166000908152600360209081526040808320600160e060020a03198516845282529182902082518084019093528054835260010154910181905292915050565b6000610d0b611e7b565b5050600160a060020a038083166000908152600160208181526040808420868552825292839020835180850190945280549094168352920154910181905292915050565b8280600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610d8c57600080fd5b505afa158015610da0573d6000803e3d6000fd5b505050506040513d6020811015610db657600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015610e0357600080fd5b505afa158015610e17573d6000803e3d6000fd5b505050506040513d6020811015610e2d57600080fd5b50511515610e73576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b600160a060020a0382161515610ed3576040805160e560020a62461bcd02815260206004820152601260248201527f696e76616c6964205f6b65792076616c75650000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a039283166000908152600160209081526040808320948352939052919091208054600160a060020a03191691909216179055565b6000610f19611e92565b600160a060020a0380861660009081526004602090815260408083209388168352928152828220600160e060020a031987168352815290829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015610fb657602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610f98575b50505091909252505090519695505050505050565b8480600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561100857600080fd5b505afa15801561101c573d6000803e3d6000fd5b505050506040513d602081101561103257600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b15801561107f57600080fd5b505afa158015611093573d6000803e3d6000fd5b505050506040513d60208110156110a957600080fd5b505115156110ef576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b600160a060020a0380871660009081526004602090815260408083209389168352928152828220600160e060020a031988168352905290812080549091101561122657805484141561120d5760005b60018201548110156111d85783600160a060020a0316826001018281548110151561116557fe5b600091825260209091200154600160a060020a031614156111d0576040805160e560020a62461bcd02815260206004820152601560248201527f6261636b757020616c7265616479206578697374730000000000000000000000604482015290519081900360640190fd5b60010161113e565b50600181810180549182018155600090815260209020018054600160a060020a031916600160a060020a038516179055611221565b838155600061121f6001830182611eaa565b505b610b2d565b838155600180820180549182018155600090815260209020018054600160a060020a038516600160a060020a031990911617905550505050505050565b606061126d611e92565b600160a060020a0380861660009081526004602090815260408083209388168352928152828220600160e060020a03198716835281529082902082518084018452815481526001820180548551818602810186019096528086529194929385810193929083018282801561130a57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116112ec575b505050919092525050506020015195945050505050565b8080600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d602081101561138857600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b1580156113d557600080fd5b505afa1580156113e9573d6000803e3d6000fd5b505050506040513d60208110156113ff57600080fd5b50511515611445576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0316600090815260208190526040902080546001019055565b6000611470611e7b565b5050600160a060020a039182166000908152600160208181526040808420948452938152918390208351808501909452805490941680845293015491015290565b8180600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156114ee57600080fd5b505afa158015611502573d6000803e3d6000fd5b505050506040513d602081101561151857600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b15801561156557600080fd5b505afa158015611579573d6000803e3d6000fd5b505050506040513d602081101561158f57600080fd5b505115156115d5576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0390911660009081526002602081815260408084209484529390529181208054600160a060020a03191681556001810182905590910155565b6000611620611ed3565b5050600160a060020a039182166000908152600260208181526040808420948452938152918390208351606081018552815490951685526001810154928501929092520154910181905290565b8180600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156116aa57600080fd5b505afa1580156116be573d6000803e3d6000fd5b505050506040513d60208110156116d457600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b15801561172157600080fd5b505afa158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b50511515611791576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a039091166000908152600360209081526040808320600160e060020a0319909416835292905290812081815560010155565b8380600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561180857600080fd5b505afa15801561181c573d6000803e3d6000fd5b505050506040513d602081101561183257600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b15801561187f57600080fd5b505afa158015611893573d6000803e3d6000fd5b505050506040513d60208110156118a957600080fd5b505115156118ef576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a039093166000908152600360209081526040808320600160e060020a031990951683529390529190912090815560010155565b6000611934611ed3565b5050600160a060020a03918216600090815260026020818152604080842094845293815291839020835160608101855281549095168086526001820154938601939093520154929091019190915290565b600160a060020a031660009081526020819052604090205490565b60006119aa611ed3565b5050600160a060020a0391821660009081526002602081815260408084209484529381529183902083516060810185528154909516855260018101549285018390520154929091019190915290565b6000611a03611e7b565b5050600160a060020a0382166000908152600360209081526040808320600160e060020a03198516845282529182902082518084019093528054808452600190910154929091019190915292915050565b8280600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611a9157600080fd5b505afa158015611aa5573d6000803e3d6000fd5b505050506040513d6020811015611abb57600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015611b0857600080fd5b505afa158015611b1c573d6000803e3d6000fd5b505050506040513d6020811015611b3257600080fd5b50511515611b78576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0390921660009081526001602081815260408084209484529390529190200155565b8480600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611bdf57600080fd5b505afa158015611bf3573d6000803e3d6000fd5b505050506040513d6020811015611c0957600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015611c5657600080fd5b505afa158015611c6a573d6000803e3d6000fd5b505050506040513d6020811015611c8057600080fd5b50511515611cc6576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0394851660009081526002602081815260408084209784529690529490208054600160a060020a031916939095169290921784556001840155910155565b8280600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611d4957600080fd5b505afa158015611d5d573d6000803e3d6000fd5b505050506040513d6020811015611d7357600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015611dc057600080fd5b505afa158015611dd4573d6000803e3d6000fd5b505050506040513d6020811015611dea57600080fd5b50511515611e30576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0390921660009081526002602081815260408084209484529390529190200155565b5080546000825590600052602060002090810190611e789190611efe565b50565b604080518082019091526000808252602082015290565b60408051808201909152600081526060602082015290565b815481835581811115611ece57600083815260209020611ece918101908301611efe565b505050565b6060604051908101604052806000600160a060020a0316815260200160008152602001600081525090565b611f1c91905b80821115611f185760008155600101611f04565b5090565b9056fe4163636f756e7453746f726167653a206163636f756e7420616c726561647920696e697469616c697a6564216e6f7420616e20617574686f72697a6564206c6f676963000000000000000000a165627a7a723058207067c4d168412123b2bc7076270c4c1690e9a4be42c89c870bdfef4c75d91b360029
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061013b5760003560e060020a900480638e1e9c1f116100bc578063d01e547f11610080578063d01e547f14610589578063db80821d146105af578063e1a9af06146105db578063e4d1ba0714610611578063e5632dee14610643578063e6a3890a146106835761013b565b80638e1e9c1f1461048d5780638e72cbae146104b95780638f2db506146104e5578063b2a9651d1461051b578063cb0cb76a1461055d5761013b565b806360791b881161010357806360791b88146102ff5780636bc77abe1461034057806370c460f81461038e57806374f7613b1461041f5780638d431198146104455761013b565b8063065a0c1e1461014057806321c32c9c1461021457806326c966f614610255578063430901161461029d57806352d43b46146102c9575b600080fd5b6102126004803603606081101561015657600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561018157600080fd5b82018360208201111561019357600080fd5b803590602001918460208302840111640100000000831117156101b557600080fd5b9193909290916020810190356401000000008111156101d357600080fd5b8201836020820111156101e557600080fd5b8035906020019184602083028401116401000000008311171561020757600080fd5b5090925090506106b5565b005b6102126004803603606081101561022a57600080fd5b508035600160a060020a039081169160208101359091169060400135600160e060020a031916610b36565b61028b6004803603604081101561026b57600080fd5b508035600160a060020a03169060200135600160e060020a031916610cac565b60408051918252519081900360200190f35b61028b600480360360408110156102b357600080fd5b50600160a060020a038135169060200135610d01565b610212600480360360608110156102df57600080fd5b50600160a060020a03813581169160208101359160409091013516610d4f565b61028b6004803603606081101561031557600080fd5b508035600160a060020a039081169160208101359091169060400135600160e060020a031916610f0f565b610212600480360360a081101561035657600080fd5b50600160a060020a0381358116916020810135821691600160e060020a03196040830135169160608101359160809091013516610fcb565b6103cf600480360360608110156103a457600080fd5b508035600160a060020a039081169160208101359091169060400135600160e060020a031916611263565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561040b5781810151838201526020016103f3565b505050509050019250505060405180910390f35b6102126004803603602081101561043557600080fd5b5035600160a060020a0316611321565b6104716004803603604081101561045b57600080fd5b50600160a060020a038135169060200135611466565b60408051600160a060020a039092168252519081900360200190f35b610212600480360360408110156104a357600080fd5b50600160a060020a0381351690602001356114b1565b61028b600480360360408110156104cf57600080fd5b50600160a060020a038135169060200135611616565b610212600480360360408110156104fb57600080fd5b508035600160a060020a03169060200135600160e060020a03191661166d565b6102126004803603608081101561053157600080fd5b50600160a060020a0381351690600160e060020a031960208201351690604081013590606001356117cb565b6104716004803603604081101561057357600080fd5b50600160a060020a03813516906020013561192a565b61028b6004803603602081101561059f57600080fd5b5035600160a060020a0316611985565b61028b600480360360408110156105c557600080fd5b50600160a060020a0381351690602001356119a0565b61028b600480360360408110156105f157600080fd5b508035600160a060020a03169060200135600160e060020a0319166119f9565b6102126004803603606081101561062757600080fd5b50600160a060020a038135169060208101359060400135611a54565b610212600480360360a081101561065957600080fd5b50600160a060020a0381358116916020810135916040820135169060608101359060800135611ba2565b6102126004803603606081101561069957600080fd5b50600160a060020a038135169060208101359060400135611d0c565b8433600160a060020a03821614610716576040805160e560020a62461bcd02815260206004820152601660248201527f63616c6c6572206d757374206265206163636f756e7400000000000000000000604482015290519081900360640190fd5b60006107228782611466565b600160a060020a03161461076a5760405160e560020a62461bcd02815260040180806020018281038252602c815260200180611f20602c913960400191505060405180910390fd5b600084116107c2576040805160e560020a62461bcd02815260206004820152601060248201527f656d707479206b65797320617272617900000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0386166000908152602081905260408120600019860190555b848110156108bb5760008686838181106107f857fe5b90506020020135600160a060020a031690506000600160a060020a031681600160a060020a031614151515610877576040805160e560020a62461bcd02815260206004820152601260248201527f5f6b65792063616e6e6f74206265203078300000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03888116600090815260016020818152604080842087855290915282208054600160a060020a0319169490931693909317825590820155016107e2565b5060018211156109c057606083838080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509394505050505b838110156109bd5760005b818110156109b45785858381811061091c57fe5b90506020020135600160a060020a0316600160a060020a0316838281518110151561094357fe5b60209081029091010151600160a060020a031614156109ac576040805160e560020a62461bcd02815260206004820152601060248201527f6475706c6963617465206261636b757000000000000000000000000000000000604482015290519081900360640190fd5b600101610908565b506001016108fd565b50505b60005b82811015610b2d5760008484838181106109d957fe5b90506020020135600160a060020a031690506000600160a060020a031681600160a060020a031614151515610a58576040805160e560020a62461bcd02815260206004820152601460248201527f6261636b75702063616e6e6f7420626520307830000000000000000000000000604482015290519081900360640190fd5b600160a060020a038181169089161415610abc576040805160e560020a62461bcd02815260206004820152601b60248201527f63616e6e6f74206265206261636b7570206f66206f6e6573656c660000000000604482015290519081900360640190fd5b60408051606081018252600160a060020a0392831681524260208083019182526000198385019081528c8616600090815260028084528682208983529093529490942092518354600160a060020a0319169516949094178255516001808301919091559151920191909155016109c3565b50505050505050565b8280600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610b7357600080fd5b505afa158015610b87573d6000803e3d6000fd5b505050506040513d6020811015610b9d57600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015610bea57600080fd5b505afa158015610bfe573d6000803e3d6000fd5b505050506040513d6020811015610c1457600080fd5b50511515610c5a576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b600160a060020a0380851660009081526004602090815260408083209387168352928152828220600160e060020a031986168352905290812081815590610ca46001830182611e5a565b505050505050565b6000610cb6611e7b565b5050600160a060020a0382166000908152600360209081526040808320600160e060020a03198516845282529182902082518084019093528054835260010154910181905292915050565b6000610d0b611e7b565b5050600160a060020a038083166000908152600160208181526040808420868552825292839020835180850190945280549094168352920154910181905292915050565b8280600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610d8c57600080fd5b505afa158015610da0573d6000803e3d6000fd5b505050506040513d6020811015610db657600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015610e0357600080fd5b505afa158015610e17573d6000803e3d6000fd5b505050506040513d6020811015610e2d57600080fd5b50511515610e73576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b600160a060020a0382161515610ed3576040805160e560020a62461bcd02815260206004820152601260248201527f696e76616c6964205f6b65792076616c75650000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a039283166000908152600160209081526040808320948352939052919091208054600160a060020a03191691909216179055565b6000610f19611e92565b600160a060020a0380861660009081526004602090815260408083209388168352928152828220600160e060020a031987168352815290829020825180840184528154815260018201805485518186028101860190965280865291949293858101939290830182828015610fb657602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610f98575b50505091909252505090519695505050505050565b8480600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561100857600080fd5b505afa15801561101c573d6000803e3d6000fd5b505050506040513d602081101561103257600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b15801561107f57600080fd5b505afa158015611093573d6000803e3d6000fd5b505050506040513d60208110156110a957600080fd5b505115156110ef576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b600160a060020a0380871660009081526004602090815260408083209389168352928152828220600160e060020a031988168352905290812080549091101561122657805484141561120d5760005b60018201548110156111d85783600160a060020a0316826001018281548110151561116557fe5b600091825260209091200154600160a060020a031614156111d0576040805160e560020a62461bcd02815260206004820152601560248201527f6261636b757020616c7265616479206578697374730000000000000000000000604482015290519081900360640190fd5b60010161113e565b50600181810180549182018155600090815260209020018054600160a060020a031916600160a060020a038516179055611221565b838155600061121f6001830182611eaa565b505b610b2d565b838155600180820180549182018155600090815260209020018054600160a060020a038516600160a060020a031990911617905550505050505050565b606061126d611e92565b600160a060020a0380861660009081526004602090815260408083209388168352928152828220600160e060020a03198716835281529082902082518084018452815481526001820180548551818602810186019096528086529194929385810193929083018282801561130a57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116112ec575b505050919092525050506020015195945050505050565b8080600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d602081101561138857600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b1580156113d557600080fd5b505afa1580156113e9573d6000803e3d6000fd5b505050506040513d60208110156113ff57600080fd5b50511515611445576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0316600090815260208190526040902080546001019055565b6000611470611e7b565b5050600160a060020a039182166000908152600160208181526040808420948452938152918390208351808501909452805490941680845293015491015290565b8180600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156114ee57600080fd5b505afa158015611502573d6000803e3d6000fd5b505050506040513d602081101561151857600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b15801561156557600080fd5b505afa158015611579573d6000803e3d6000fd5b505050506040513d602081101561158f57600080fd5b505115156115d5576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0390911660009081526002602081815260408084209484529390529181208054600160a060020a03191681556001810182905590910155565b6000611620611ed3565b5050600160a060020a039182166000908152600260208181526040808420948452938152918390208351606081018552815490951685526001810154928501929092520154910181905290565b8180600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156116aa57600080fd5b505afa1580156116be573d6000803e3d6000fd5b505050506040513d60208110156116d457600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b15801561172157600080fd5b505afa158015611735573d6000803e3d6000fd5b505050506040513d602081101561174b57600080fd5b50511515611791576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a039091166000908152600360209081526040808320600160e060020a0319909416835292905290812081815560010155565b8380600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561180857600080fd5b505afa15801561181c573d6000803e3d6000fd5b505050506040513d602081101561183257600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b15801561187f57600080fd5b505afa158015611893573d6000803e3d6000fd5b505050506040513d60208110156118a957600080fd5b505115156118ef576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a039093166000908152600360209081526040808320600160e060020a031990951683529390529190912090815560010155565b6000611934611ed3565b5050600160a060020a03918216600090815260026020818152604080842094845293815291839020835160608101855281549095168086526001820154938601939093520154929091019190915290565b600160a060020a031660009081526020819052604090205490565b60006119aa611ed3565b5050600160a060020a0391821660009081526002602081815260408084209484529381529183902083516060810185528154909516855260018101549285018390520154929091019190915290565b6000611a03611e7b565b5050600160a060020a0382166000908152600360209081526040808320600160e060020a03198516845282529182902082518084019093528054808452600190910154929091019190915292915050565b8280600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611a9157600080fd5b505afa158015611aa5573d6000803e3d6000fd5b505050506040513d6020811015611abb57600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015611b0857600080fd5b505afa158015611b1c573d6000803e3d6000fd5b505050506040513d6020811015611b3257600080fd5b50511515611b78576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0390921660009081526001602081815260408084209484529390529190200155565b8480600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611bdf57600080fd5b505afa158015611bf3573d6000803e3d6000fd5b505050506040513d6020811015611c0957600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015611c5657600080fd5b505afa158015611c6a573d6000803e3d6000fd5b505050506040513d6020811015611c8057600080fd5b50511515611cc6576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0394851660009081526002602081815260408084209784529690529490208054600160a060020a031916939095169290921784556001840155910155565b8280600160a060020a031663481c6a756040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611d4957600080fd5b505afa158015611d5d573d6000803e3d6000fd5b505050506040513d6020811015611d7357600080fd5b50516040805160e760020a6301fd3f770281523360048201529051600160a060020a039092169163fe9fbb8091602480820192602092909190829003018186803b158015611dc057600080fd5b505afa158015611dd4573d6000803e3d6000fd5b505050506040513d6020811015611dea57600080fd5b50511515611e30576040805160e560020a62461bcd0281526020600482015260176024820152600080516020611f4c833981519152604482015290519081900360640190fd5b50600160a060020a0390921660009081526002602081815260408084209484529390529190200155565b5080546000825590600052602060002090810190611e789190611efe565b50565b604080518082019091526000808252602082015290565b60408051808201909152600081526060602082015290565b815481835581811115611ece57600083815260209020611ece918101908301611efe565b505050565b6060604051908101604052806000600160a060020a0316815260200160008152602001600081525090565b611f1c91905b80821115611f185760008155600101611f04565b5090565b9056fe4163636f756e7453746f726167653a206163636f756e7420616c726561647920696e697469616c697a6564216e6f7420616e20617574686f72697a6564206c6f676963000000000000000000a165627a7a723058207067c4d168412123b2bc7076270c4c1690e9a4be42c89c870bdfef4c75d91b360029
Deployed Bytecode Sourcemap
16753:8740:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16753:8740:0;;;;;;;;-1:-1:-1;;;16753:8740:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23909:1581;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;23909:1581:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;23909:1581:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23909:1581:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23909:1581:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;23909:1581:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23909:1581:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;23909:1581:0;;-1:-1:-1;23909:1581:0;-1:-1:-1;23909:1581:0;:::i;:::-;;23629:215;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23629:215:0;;-1:-1:-1;;;;;23629:215:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23629:215:0;;:::i;21583:207::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21583:207:0;;-1:-1:-1;;;;;21583:207:0;;;;;-1:-1:-1;;;;;;21583:207:0;;:::i;:::-;;;;;;;;;;;;;;;;19354:182;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19354:182:0;;;;;;;;:::i;18994:290::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18994:290:0;;;;;;;;;;;;;;;;;:::i;22354:220::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22354:220:0;;-1:-1:-1;;;;;22354:220:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22354:220:0;;:::i;22827:794::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;22827:794:0;;;;;;;;;;;;-1:-1:-1;;;;;;22827:794:0;;;;;;;;;;;;;;;;;;:::i;22582:237::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22582:237:0;;-1:-1:-1;;;;;22582:237:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22582:237:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;22582:237:0;;;;;;;;;;;;;;;;;18550:190;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18550:190:0;-1:-1:-1;;;;;18550:190:0;;:::i;18808:178::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18808:178:0;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;18808:178:0;;;;;;;;;;;;;;21125:179;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21125:179:0;;;;;;;;:::i;20260:196::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20260:196:0;;;;;;;;:::i;22099:182::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22099:182:0;;-1:-1:-1;;;;;22099:182:0;;;;;-1:-1:-1;;;;;;22099:182:0;;:::i;21798:293::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;21798:293:0;;;;-1:-1:-1;;;;;;21798:293:0;;;;;;;;;;;;;;;:::i;19853:189::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19853:189:0;;;;;;;;:::i;18410:132::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18410:132:0;-1:-1:-1;;;;;18410:132:0;;:::i;20050:202::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20050:202:0;;;;;;;;:::i;21374:201::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21374:201:0;;-1:-1:-1;;;;;21374:201:0;;;;;-1:-1:-1;;;;;;21374:201:0;;:::i;19544:238::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19544:238:0;;;;;;;;;;;;;:::i;20464:370::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;20464:370:0;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20842:275::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20842:275:0;;;;;;;;;;;;;:::i;23909:1581::-;24052:8;16854:10;-1:-1:-1;;;;;16854:31:0;;;16846:66;;;;;-1:-1:-1;;;;;16846:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24130:1;24086:32;24105:8;24130:1;24086:10;:32::i;:::-;-1:-1:-1;;;;;24086:46:0;;24078:103;;;;-1:-1:-1;;;;;24078:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24215:1;24200:16;;24192:45;;;;;-1:-1:-1;;;;;24192:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24250:36:0;;:17;:36;;;;;;;;;;-1:-1:-1;;24289:16:0;;24250:55;;24318:307;24342:20;;;24318:307;;;24388:12;24403:5;;24409;24403:12;;;;;;;;;;;;;-1:-1:-1;;;;;24403:12:0;24388:27;;24454:1;-1:-1:-1;;;;;24438:18:0;:4;-1:-1:-1;;;;;24438:18:0;;;24430:49;;;;;;;-1:-1:-1;;;;;24430:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24517:26:0;;;24494:20;24517:26;;;:7;:26;;;;;;;;:33;;;;;;;;24565:18;;-1:-1:-1;;;;;;24565:18:0;;;;;;;;;;;24598:11;;;:15;24364:7;24318:307;;;-1:-1:-1;24823:1:0;24805:19;;24801:304;;;24841:21;24865:8;;24841:32;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;24841:32:0;;-1:-1:-1;;;;24888:206:0;24908:19;;;24888:206;;;24958:9;24953:126;24977:1;24973;:5;24953:126;;;25027:8;;25036:1;25027:11;;;;;;;;;;;;;-1:-1:-1;;;;;25027:11:0;-1:-1:-1;;;;;25016:22:0;:4;25021:1;25016:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25016:22:0;;;25008:51;;;;;-1:-1:-1;;;;;25008:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24980:3;;24953:126;;;-1:-1:-1;24929:3:0;;24888:206;;;;24801:304;;25122:13;25117:366;25141:23;;;25117:366;;;25190:15;25208:8;;25217:5;25208:15;;;;;;;;;;;;;-1:-1:-1;;;;;25208:15:0;25190:33;;25265:1;-1:-1:-1;;;;;25246:21:0;:7;-1:-1:-1;;;;;25246:21:0;;;25238:54;;;;;;;-1:-1:-1;;;;;25238:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25315:28:0;;;;;;;;25307:68;;;;;-1:-1:-1;;;;;25307:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25431:40;;;;;;;;-1:-1:-1;;;;;25431:40:0;;;;;25454:3;25431:40;;;;;;;-1:-1:-1;;25431:40:0;;;;;;25392:29;;;-1:-1:-1;25392:29:0;;;:10;:29;;;;;;:36;;;;;;;;;;:79;;;;-1:-1:-1;;;;;;25392:79:0;;;;;;;;;;-1:-1:-1;25392:79:0;;;;;;;;;;;;;;;25166:7;25117:366;;;;23909:1581;;;;;;:::o;23629:215::-;23766:7;17054:8;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23793:21:0;;;;;;;:12;:21;;;;;;;;:32;;;;;;;;;;;-1:-1:-1;;;;;;23793:43:0;;;;;;;;;23786:50;;;23793:43;23786:50;;;;23793:21;23786:50;:::i;:::-;;;23629:215;;;;:::o;21583:207::-;21678:7;21698:21;;:::i;:::-;-1:-1:-1;;;;;;;21722:19:0;;;;;;:9;:19;;;;;;;;-1:-1:-1;;;;;;21722:30:0;;;;;;;;;;21698:54;;;;;;;;;;;;;;;;;;;;21583:207;;;;:::o;19354:182::-;19432:7;19452:19;;:::i;:::-;-1:-1:-1;;;;;;;19474:17:0;;;;;;;:7;:17;;;;;;;;:25;;;;;;;;;19452:47;;;;;;;;;;;;;;;;;;;;;;;19354:182;;;;:::o;18994:290::-;19118:8;17054;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19147:18:0;;;;19139:49;;;;;-1:-1:-1;;;;;19139:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19222:17:0;;;19199:20;19222:17;;;:7;:17;;;;;;;;:25;;;;;;;;;;19258:18;;-1:-1:-1;;;;;;19258:18:0;;;;;;;;18994:290::o;22354:220::-;22459:7;22479:17;;:::i;:::-;-1:-1:-1;;;;;22499:21:0;;;;;;;:12;:21;;;;;;;;:32;;;;;;;;;;;-1:-1:-1;;;;;;22499:43:0;;;;;;;;;;22479:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22499:43;;22479:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22479:63:0;;;;;;;;;;;;;;;;-1:-1:-1;;;22479:63:0;;;;-1:-1:-1;;22560:6:0;;;22354:220;-1:-1:-1;;;;;;22354:220:0:o;22827:794::-;23020:7;17054:8;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23066:21:0;;;23045:18;23066:21;;;:12;:21;;;;;;;;:32;;;;;;;;;;;-1:-1:-1;;;;;;23066:43:0;;;;;;;;;23124:6;;23066:43;;-1:-1:-1;23120:494:0;;;23155:6;;:15;;23151:358;;;23196:9;23191:157;23215:10;;;:17;23211:21;;23191:157;;;23287:15;-1:-1:-1;;;;;23270:32:0;:1;:10;;23281:1;23270:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23270:13:0;:32;;23262:66;;;;;-1:-1:-1;;;;;23262:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23234:3;;23191:157;;;-1:-1:-1;23366:10:0;;;;27::-1;;23:18;;;45:23;;-1:-1;23366:32:0;;;;;;;;;-1:-1:-1;;;;;;23366:32:0;-1:-1:-1;;;;;23366:32:0;;;;;23151:358;;;23439:14;;;:6;23472:21;:10;;;23439:6;23472:21;:::i;:::-;;23151:358;23120:494;;;23541:14;;;23570:10;;;;27::-1;;23:18;;;45:23;;23541:6:0;23570:32;;;;;;;;;-1:-1:-1;;;;;23570:32:0;;-1:-1:-1;;;;;;23570:32:0;;;;;;17138:1;22827:794;;;;;;:::o;22582:237::-;22691:16;22720:17;;:::i;:::-;-1:-1:-1;;;;;22740:21:0;;;;;;;:12;:21;;;;;;;;:32;;;;;;;;;;;-1:-1:-1;;;;;;22740:43:0;;;;;;;;;;22720:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22740:43;;22720:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22720:63:0;;;;;;;;;;;;;;;;-1:-1:-1;;;22720:63:0;;;;-1:-1:-1;;;22801:10:0;;;;22582:237;-1:-1:-1;;;;;22582:237:0:o;18550:190::-;18650:8;17054;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18701:27:0;:17;:27;;;;;;;;;;;;18731:1;18701:31;18671:61;;18550:190::o;18808:178::-;18882:7;18902:19;;:::i;:::-;-1:-1:-1;;;;;;;18924:17:0;;;;;;;:7;:17;;;;;;;;:25;;;;;;;;;;18902:47;;;;;;;;;;;;;;;;;;;;;;;18808:178::o;21125:179::-;21240:8;17054;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21268:20:0;;;;;;;:10;:20;;;;;;;;:28;;;;;;;;;21261:35;;-1:-1:-1;;;;;;21261:35:0;;;;;;;;;;;;;21125:179::o;20260:196::-;20345:7;20365:22;;:::i;:::-;-1:-1:-1;;;;;;;20390:20:0;;;;;;;:10;:20;;;;;;;;:28;;;;;;;;;;20365:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20260:196::o;22099:182::-;22215:8;17054;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22243:19:0;;;;;;;:9;:19;;;;;;;;-1:-1:-1;;;;;;22243:30:0;;;;;;;;;;;22236:37;;;;;;22099:182::o;21798:293::-;21945:8;17054;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21991:19:0;;;21966:22;21991:19;;;:9;:19;;;;;;;;-1:-1:-1;;;;;;21991:30:0;;;;;;;;;;;;22032:17;;;22060:12;;:23;21798:293::o;19853:189::-;19935:7;19955:22;;:::i;:::-;-1:-1:-1;;;;;;;19980:20:0;;;;;;;:10;:20;;;;;;;;:28;;;;;;;;;;19955:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19853:189::o;18410:132::-;-1:-1:-1;;;;;18507:27:0;18480:7;18507:27;;;;;;;;;;;;18410:132::o;20050:202::-;20138:7;20158:22;;:::i;:::-;-1:-1:-1;;;;;;;20183:20:0;;;;;;;:10;:20;;;;;;;;:28;;;;;;;;;;20158:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20050:202::o;21374:201::-;21466:7;21486:21;;:::i;:::-;-1:-1:-1;;;;;;;21510:19:0;;;;;;:9;:19;;;;;;;;-1:-1:-1;;;;;;21510:30:0;;;;;;;;;;21486:54;;;;;;;;;;;;;;;;;;;;;;;;;;21374:201;;;;:::o;19544:238::-;19673:8;17054;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19717:17:0;;;19694:20;19717:17;;;:7;:17;;;;;;;;:25;;;;;;;;;19753:11;:21;19544:238::o;20464:370::-;20645:8;17054;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20697:20:0;;;20671:23;20697:20;;;:10;:20;;;;;;;;:28;;;;;;;;;20736:18;;-1:-1:-1;;;;;;20736:18:0;;;;;;;;;;;-1:-1:-1;20765:15:0;;:28;20804:12;;:22;20464:370::o;20842:275::-;20996:8;17054;-1:-1:-1;;;;;17046:25:0;;:27;;;;;-1:-1:-1;;;17046:27:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17046:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17046:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17046:27:0;17033:66;;;-1:-1:-1;;;;;17033:66:0;;17088:10;17033:66;;;;;;-1:-1:-1;;;;;17033:54:0;;;;;;:66;;;;;17046:27;;17033:66;;;;;;;;:54;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;17033:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17033:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17033:66:0;17025:102;;;;;;;-1:-1:-1;;;;;17025:102:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17025:102:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21048:20:0;;;21022:23;21048:20;;;:10;:20;;;;;;;;:28;;;;;;;;;21087:12;:22;20842:275::o;16753:8740::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;-1:-1:-1;16753:8740:0;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;16753:8740:0;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;;;;;16753:8740:0;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://7067c4d168412123b2bc7076270c4c1690e9a4be42c89c870bdfef4c75d91b36
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.