⚠️ ⚠️ ⚠️ This explorer will be deprecated soon, please use PolygonScan.com

Contract Address Details

0xA9B99766E6C676Cf1975c0D3166F96C0848fF5ad

InstaIndex Last Balance Update: Block #15689081
Created by 0xf68390–47c21e at 0x9045df–3f9aba

Balance

0 MATIC

(@ /MATIC)

Fetching tokens...

Contract name:
InstaIndex




Optimization enabled
false
Compiler version
v0.7.0+commit.9e61f92b




EVM Version
default

Contract source code

/**
* Submitted for verification at blockscout.com on 2021-04-03 00:47:20.036210Z
*/
// Sources flattened with hardhat v2.0.8 https://hardhat.org
// File contracts/registry/index.sol
pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
/**
* @title InstaIndex
* @dev Main Contract For DeFi Smart Accounts. This is also a factory contract, Which deploys new Smart Account.
* Also Registry for DeFi Smart Accounts.
*/
interface AccountInterface {
function version() external view returns (uint);
function enable(address authority) external;
function cast(address[] calldata _targets, bytes[] calldata _datas, address _origin) external payable returns (bytes32[] memory responses);
}
interface ListInterface {
function init(address _account) external;
}
contract AddressIndex {
event LogNewMaster(address indexed master);
event LogUpdateMaster(address indexed master);
event LogNewCheck(uint indexed accountVersion, address indexed check);
event LogNewAccount(address indexed _newAccount, address indexed _connectors, address indexed _check);
// New Master Address.
address private newMaster;
// Master Address.
address public master;
// List Registry Address.
address public list;
// Connectors Modules(Account Module Version => Connectors Registry Module Address).
mapping (uint => address) public connectors;
// Check Modules(Account Module Version => Check Module Address).
mapping (uint => address) public check;
// Account Modules(Account Module Version => Account Module Address).
mapping (uint => address) public account;
// Version Count of Account Modules.
uint public versionCount;
/**
* @dev Throws if the sender not is Master Address.
*/
modifier isMaster() {
require(msg.sender == master, "not-master");
_;
}
/**
* @dev Change the Master Address.
* @param _newMaster New Master Address.
*/
function changeMaster(address _newMaster) external isMaster {
require(_newMaster != master, "already-a-master");
require(_newMaster != address(0), "not-valid-address");
require(newMaster != _newMaster, "already-a-new-master");
newMaster = _newMaster;
emit LogNewMaster(_newMaster);
}
function updateMaster() external {
require(newMaster != address(0), "not-valid-address");
require(msg.sender == newMaster, "not-master");
master = newMaster;
newMaster = address(0);
emit LogUpdateMaster(master);
}
/**
* @dev Change the Check Address of a specific Account Module version.
* @param accountVersion Account Module version.
* @param _newCheck The New Check Address.
*/
function changeCheck(uint accountVersion, address _newCheck) external isMaster {
require(_newCheck != check[accountVersion], "already-a-check");
check[accountVersion] = _newCheck;
emit LogNewCheck(accountVersion, _newCheck);
}
/**
* @dev Add New Account Module.
* @param _newAccount The New Account Module Address.
* @param _connectors Connectors Registry Module Address.
* @param _check Check Module Address.
*/
function addNewAccount(address _newAccount, address _connectors, address _check) external isMaster {
require(_newAccount != address(0), "not-valid-address");
versionCount++;
require(AccountInterface(_newAccount).version() == versionCount, "not-valid-version");
account[versionCount] = _newAccount;
if (_connectors != address(0)) connectors[versionCount] = _connectors;
if (_check != address(0)) check[versionCount] = _check;
emit LogNewAccount(_newAccount, _connectors, _check);
}
}
contract CloneFactory is AddressIndex {
/**
* @dev Clone a new Account Module.
* @param version Account Module version to clone.
*/
function createClone(uint version) internal returns (address result) {
bytes20 targetBytes = bytes20(account[version]);
// solium-disable-next-line security/no-inline-assembly
assembly {
let clone := mload(0x40)
mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
mstore(add(clone, 0x14), targetBytes)
mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
result := create(0, clone, 0x37)
}
}
/**
* @dev Check if Account Module is a clone.
* @param version Account Module version.
* @param query Account Module Address.
*/
function isClone(uint version, address query) external view returns (bool result) {
bytes20 targetBytes = bytes20(account[version]);
// solium-disable-next-line security/no-inline-assembly
assembly {
let clone := mload(0x40)
mstore(clone, 0x363d3d373d3d3d363d7300000000000000000000000000000000000000000000)
mstore(add(clone, 0xa), targetBytes)
mstore(add(clone, 0x1e), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
let other := add(clone, 0x40)
extcodecopy(query, other, 0, 0x2d)
result := and(
eq(mload(clone), mload(other)),
eq(mload(add(clone, 0xd)), mload(add(other, 0xd)))
)
}
}
}
contract InstaIndex is CloneFactory {
event LogAccountCreated(address sender, address indexed owner, address indexed account, address indexed origin);
/**
* @dev Create a new DeFi Smart Account for a user and run cast function in the new Smart Account.
* @param _owner Owner of the Smart Account.
* @param accountVersion Account Module version.
* @param _targets Array of Target to run cast function.
* @param _datas Array of Data(callData) to run cast function.
* @param _origin Where Smart Account is created.
*/
function buildWithCast(
address _owner,
uint accountVersion,
address[] calldata _targets,
bytes[] calldata _datas,
address _origin
) external payable returns (address _account) {
_account = build(_owner, accountVersion, _origin);
if (_targets.length > 0) AccountInterface(_account).cast{value: msg.value}(_targets, _datas, _origin);
}
/**
* @dev Create a new DeFi Smart Account for a user.
* @param _owner Owner of the Smart Account.
* @param accountVersion Account Module version.
* @param _origin Where Smart Account is created.
*/
function build(
address _owner,
uint accountVersion,
address _origin
) public returns (address _account) {
require(accountVersion != 0 && accountVersion <= versionCount, "not-valid-account");
_account = createClone(accountVersion);
ListInterface(list).init(_account);
AccountInterface(_account).enable(_owner);
emit LogAccountCreated(msg.sender, _owner, _account, _origin);
}
/**
* @dev Setup Initial things for InstaIndex, after its been deployed and can be only run once.
* @param _master The Master Address.
* @param _list The List Address.
* @param _account The Account Module Address.
* @param _connectors The Connectors Registry Module Address.
*/
function setBasics(
address _master,
address _list,
address _account,
address _connectors
) external {
require(
master == address(0) &&
list == address(0) &&
account[1] == address(0) &&
connectors[1] == address(0) &&
versionCount == 0,
"already-defined"
);
master = _master;
list = _list;
versionCount++;
account[versionCount] = _account;
connectors[versionCount] = _connectors;
}
}

Contract ABI

[{"type":"event","name":"LogAccountCreated","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":false},{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"origin","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"LogNewAccount","inputs":[{"type":"address","name":"_newAccount","internalType":"address","indexed":true},{"type":"address","name":"_connectors","internalType":"address","indexed":true},{"type":"address","name":"_check","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"LogNewCheck","inputs":[{"type":"uint256","name":"accountVersion","internalType":"uint256","indexed":true},{"type":"address","name":"check","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"LogNewMaster","inputs":[{"type":"address","name":"master","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"LogUpdateMaster","inputs":[{"type":"address","name":"master","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"account","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addNewAccount","inputs":[{"type":"address","name":"_newAccount","internalType":"address"},{"type":"address","name":"_connectors","internalType":"address"},{"type":"address","name":"_check","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"_account","internalType":"address"}],"name":"build","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"uint256","name":"accountVersion","internalType":"uint256"},{"type":"address","name":"_origin","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"address","name":"_account","internalType":"address"}],"name":"buildWithCast","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"uint256","name":"accountVersion","internalType":"uint256"},{"type":"address[]","name":"_targets","internalType":"address[]"},{"type":"bytes[]","name":"_datas","internalType":"bytes[]"},{"type":"address","name":"_origin","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeCheck","inputs":[{"type":"uint256","name":"accountVersion","internalType":"uint256"},{"type":"address","name":"_newCheck","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeMaster","inputs":[{"type":"address","name":"_newMaster","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"check","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"connectors","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"result","internalType":"bool"}],"name":"isClone","inputs":[{"type":"uint256","name":"version","internalType":"uint256"},{"type":"address","name":"query","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"list","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"master","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBasics","inputs":[{"type":"address","name":"_master","internalType":"address"},{"type":"address","name":"_list","internalType":"address"},{"type":"address","name":"_account","internalType":"address"},{"type":"address","name":"_connectors","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMaster","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"versionCount","inputs":[]}]
            

Contract Byte Code

0x6080604052600436106100dd5760003560e01c80638aad29e11161007f578063cf1a0ddc11610059578063cf1a0ddc146102eb578063ee97f7f314610302578063f4ff78bf1461032d578063fdc3870c14610356576100dd565b80638aad29e11461025a578063a4bb8e7d14610285578063bb7e70ef146102ae576100dd565b8063443ff7b6116100bb578063443ff7b6146101875780634f5b2561146101b05780635f72f450146101e0578063743681891461021d576100dd565b80630f560cd7146100e257806313ede1a11461010d5780632dd7c6581461014a575b600080fd5b3480156100ee57600080fd5b506100f761037f565b6040516101049190611d3e565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f9190611937565b6103a5565b6040516101419190611d3e565b60405180910390f35b34801561015657600080fd5b50610171600480360381019061016c9190611937565b6103d8565b60405161017e9190611d3e565b60405180910390f35b34801561019357600080fd5b506101ae60048036038101906101a99190611989565b61040b565b005b6101ca60048036038101906101c59190611846565b6105d7565b6040516101d79190611d3e565b60405180910390f35b3480156101ec57600080fd5b5061020760048036038101906102029190611937565b610698565b6040516102149190611d3e565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190611989565b6106cb565b6040516102519190611dbd565b60405180910390f35b34801561026657600080fd5b5061026f610780565b60405161027c9190611ed8565b60405180910390f35b34801561029157600080fd5b506102ac60048036038101906102a79190611794565b610786565b005b3480156102ba57600080fd5b506102d560048036038101906102d091906117f7565b610a99565b6040516102e29190611d3e565b60405180910390f35b3480156102f757600080fd5b50610300610c72565b005b34801561030e57600080fd5b50610317610e99565b6040516103249190611d3e565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061171c565b610ebf565b005b34801561036257600080fd5b5061037d60048036038101906103789190611745565b611165565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461049b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049290611e98565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561053d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053490611e58565b60405180910390fd5b806004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16827f1d96dda971e33be0980128bbce3f93dfe4859657397e00d2db4d288d2c2bc78860405160405180910390a35050565b60006105e4888884610a99565b9050600086869050111561068d578073ffffffffffffffffffffffffffffffffffffffff1663e0e90acf3488888888886040518763ffffffff1660e01b8152600401610634959493929190611d74565b6000604051808303818588803b15801561064d57600080fd5b505af1158015610661573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f8201168201806040525081019061068b91906118f6565b505b979650505050505050565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806005600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660601b90506040517f363d3d373d3d3d363d7300000000000000000000000000000000000000000000815281600a8201527f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000601e82015260408101602d600082873c600d810151600d83015114815183511416935050505092915050565b60065481565b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156108325750600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561089e5750600073ffffffffffffffffffffffffffffffffffffffff16600560006001815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561090a5750600073ffffffffffffffffffffffffffffffffffffffff16600360006001815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561091857506000600654145b610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90611e18565b60405180910390fd5b83600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006600081548092919060010191905055508160056000600654815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060036000600654815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6000808314158015610aad57506006548311155b610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae390611df8565b60405180910390fd5b610af583611514565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166319ab453c826040518263ffffffff1660e01b8152600401610b529190611d3e565b600060405180830381600087803b158015610b6c57600080fd5b505af1158015610b80573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16635bfa1b68856040518263ffffffff1660e01b8152600401610bbd9190611d3e565b600060405180830381600087803b158015610bd757600080fd5b505af1158015610beb573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f83435eca805f6256e4aa778ee8b2e8aec7485fa4b643a0fff05b7df6bf68838933604051610c639190611d59565b60405180910390a49392505050565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990611eb8565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790611e98565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9ac7c65ebc1e9c5f94a0f9daaed02afefea79ae48162d49f30ab33b6e1637a1d60405160405180910390a2565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690611e98565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790611e78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790611eb8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d690611dd8565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167ff2a8c544d5befa20af407e43fa5a05305e50163fb8d06fda74206f0dc08b680f60405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ec90611e98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90611eb8565b60405180910390fd5b6006600081548092919060010191905055506006548373ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b1580156112c057600080fd5b505afa1580156112d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f89190611960565b14611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90611e38565b60405180910390fd5b8260056000600654815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611415578160036000600654815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461149e578060046000600654815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167ff2ac7d6a10d2f0b9b7fdad229bb1456de7a254de96bb7f55f3d22a91ea93f27f60405160405180910390a4505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6000813590506115c0816120d0565b92915050565b60008083601f8401126115d857600080fd5b8235905067ffffffffffffffff8111156115f157600080fd5b60208301915083602082028301111561160957600080fd5b9250929050565b600082601f83011261162157600080fd5b815161163461162f82611f20565b611ef3565b9150818183526020840193506020810190508385602084028201111561165957600080fd5b60005b83811015611689578161166f88826116dd565b84526020840193506020830192505060018101905061165c565b5050505092915050565b60008083601f8401126116a557600080fd5b8235905067ffffffffffffffff8111156116be57600080fd5b6020830191508360208202830111156116d657600080fd5b9250929050565b6000815190506116ec816120e7565b92915050565b600081359050611701816120fe565b92915050565b600081519050611716816120fe565b92915050565b60006020828403121561172e57600080fd5b600061173c848285016115b1565b91505092915050565b60008060006060848603121561175a57600080fd5b6000611768868287016115b1565b9350506020611779868287016115b1565b925050604061178a868287016115b1565b9150509250925092565b600080600080608085870312156117aa57600080fd5b60006117b8878288016115b1565b94505060206117c9878288016115b1565b93505060406117da878288016115b1565b92505060606117eb878288016115b1565b91505092959194509250565b60008060006060848603121561180c57600080fd5b600061181a868287016115b1565b935050602061182b868287016116f2565b925050604061183c868287016115b1565b9150509250925092565b600080600080600080600060a0888a03121561186157600080fd5b600061186f8a828b016115b1565b97505060206118808a828b016116f2565b965050604088013567ffffffffffffffff81111561189d57600080fd5b6118a98a828b016115c6565b9550955050606088013567ffffffffffffffff8111156118c857600080fd5b6118d48a828b01611693565b935093505060806118e78a828b016115b1565b91505092959891949750929550565b60006020828403121561190857600080fd5b600082015167ffffffffffffffff81111561192257600080fd5b61192e84828501611610565b91505092915050565b60006020828403121561194957600080fd5b6000611957848285016116f2565b91505092915050565b60006020828403121561197257600080fd5b600061198084828501611707565b91505092915050565b6000806040838503121561199c57600080fd5b60006119aa858286016116f2565b92505060206119bb858286016115b1565b9150509250929050565b60006119d18383611a02565b60208301905092915050565b60006119ea848484611b02565b90509392505050565b6119fc8161207a565b82525050565b611a0b81612028565b82525050565b611a1a81612028565b82525050565b6000611a2c8385611f76565b9350611a3782611f48565b8060005b85811015611a7057611a4d8284611fba565b611a5788826119c5565b9750611a6283611f5c565b925050600181019050611a3b565b5085925050509392505050565b6000611a898385611f87565b935083602084028501611a9b84611f52565b8060005b87811015611ae1578484038952611ab68284611fd1565b611ac18682846119dd565b9550611acc84611f69565b935060208b019a505050600181019050611a9f565b50829750879450505050509392505050565b611afc8161203a565b82525050565b6000611b0e8385611f98565b9350611b1b8385846120b0565b611b24836120bf565b840190509392505050565b6000611b3c601483611fa9565b91507f616c72656164792d612d6e65772d6d61737465720000000000000000000000006000830152602082019050919050565b6000611b7c601183611fa9565b91507f6e6f742d76616c69642d6163636f756e740000000000000000000000000000006000830152602082019050919050565b6000611bbc600f83611fa9565b91507f616c72656164792d646566696e656400000000000000000000000000000000006000830152602082019050919050565b6000611bfc601183611fa9565b91507f6e6f742d76616c69642d76657273696f6e0000000000000000000000000000006000830152602082019050919050565b6000611c3c600f83611fa9565b91507f616c72656164792d612d636865636b00000000000000000000000000000000006000830152602082019050919050565b6000611c7c601083611fa9565b91507f616c72656164792d612d6d6173746572000000000000000000000000000000006000830152602082019050919050565b6000611cbc600a83611fa9565b91507f6e6f742d6d6173746572000000000000000000000000000000000000000000006000830152602082019050919050565b6000611cfc601183611fa9565b91507f6e6f742d76616c69642d616464726573730000000000000000000000000000006000830152602082019050919050565b611d3881612070565b82525050565b6000602082019050611d536000830184611a11565b92915050565b6000602082019050611d6e60008301846119f3565b92915050565b60006060820190508181036000830152611d8f818789611a20565b90508181036020830152611da4818587611a7d565b9050611db36040830184611a11565b9695505050505050565b6000602082019050611dd26000830184611af3565b92915050565b60006020820190508181036000830152611df181611b2f565b9050919050565b60006020820190508181036000830152611e1181611b6f565b9050919050565b60006020820190508181036000830152611e3181611baf565b9050919050565b60006020820190508181036000830152611e5181611bef565b9050919050565b60006020820190508181036000830152611e7181611c2f565b9050919050565b60006020820190508181036000830152611e9181611c6f565b9050919050565b60006020820190508181036000830152611eb181611caf565b9050919050565b60006020820190508181036000830152611ed181611cef565b9050919050565b6000602082019050611eed6000830184611d2f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611f1657600080fd5b8060405250919050565b600067ffffffffffffffff821115611f3757600080fd5b602082029050602081019050919050565b6000819050919050565b6000819050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611fc960208401846115b1565b905092915050565b60008083356001602003843603038112611fea57600080fd5b83810192508235915060208301925067ffffffffffffffff82111561200e57600080fd5b60018202360384131561202057600080fd5b509250929050565b600061203382612050565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006120858261208c565b9050919050565b60006120978261209e565b9050919050565b60006120a982612050565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6120d981612028565b81146120e457600080fd5b50565b6120f081612046565b81146120fb57600080fd5b50565b61210781612070565b811461211257600080fd5b5056fea26469706673582212206cb0ab991da85608d4bd21678fe941c7a17b6f0d3788fee83fdfb1cb875019ea64736f6c63430007000033