From f940c36390b4bd889ba104251600c9c33db9b5aa Mon Sep 17 00:00:00 2001 From: klyaus Date: Mon, 28 Sep 2020 20:12:45 +0300 Subject: [PATCH] Add Prysm support Update get validators keys logic https://github.com/depools/depool-dao/issues/4 --- .gitignore | 5 + README.md | 10 +- assets/DePool.json | 850 ++++++++++++++++ assets/DePoolOracle.json | 534 ++++++++++ assets/IDePool.json | 847 ---------------- assets/IDePoolOracle.json | 1992 ------------------------------------- beacon.py | 44 + contracts.py | 11 + oracle.py | 102 +- requirements.txt | 1 - 10 files changed, 1520 insertions(+), 2876 deletions(-) create mode 100644 .gitignore create mode 100644 assets/DePool.json create mode 100644 assets/DePoolOracle.json delete mode 100644 assets/IDePool.json delete mode 100644 assets/IDePoolOracle.json create mode 100644 beacon.py create mode 100644 contracts.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..a36f550a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.idea +__pycache__/ +*/__pycache__/ +.pyc +Будет удалено .idea/ diff --git a/README.md b/README.md index 21d8aa01d..6e9314925 100644 --- a/README.md +++ b/README.md @@ -17,12 +17,12 @@ define the environment variables ```sh export ETH1_NODE="http://localhost:8545" export ETH2_NODE="http://localhost:5052" -export ORACLE_CONTRACT="0x2e25c8F88c5cCcbC9400e5bc86cF9C58C7604327" -export DEPOOL_CONTRACT="0x7a80f0b3848242281A5ae126596b54d4010C30FE" -export REPORT_INTVL_EPOCHS="7200" +export ORACLE_CONTRACT="0x12aa6ec7d603dc79eD663792E40a520B54A7ae6A" +export DEPOOL_CONTRACT="0x5ec5DDf7A0cdD3235AD1bCC0ad04F059507EC5a3" +export REPORT_INTVL_SLOTS="7200" export MANAGER_PRIV_KEY="0xa8a54b2d8197bc0b19bb8a084031be71835580a01e70a45a13babd16c9bc1563" -export DEPOOL_ABI_FILE='./assets/IDePool.json' -export ORACLE_ABI_FILE='./assets/oracle.abi' +export DEPOOL_ABI_FILE='./assets/DePool.json' +export ORACLE_ABI_FILE='./assets/DePoolOracle.json' python3 oracle.py ``` diff --git a/assets/DePool.json b/assets/DePool.json new file mode 100644 index 000000000..c368bd1fb --- /dev/null +++ b/assets/DePool.json @@ -0,0 +1,850 @@ +{ + "contractName": "DePool", + "abi": [ + { + "constant": false, + "inputs": [], + "name": "resume", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "stop", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "hasInitialized", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getValidatorRegistrationContract", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_feeBasisPoints", + "type": "uint32" + } + ], + "name": "setFee", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getToken", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_script", + "type": "bytes" + } + ], + "name": "getEVMScriptExecutor", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getRecoveryVault", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "DEPOSIT_SIZE", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "PAUSE_ROLE", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "SET_ORACLE", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isStopped", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MANAGE_WITHDRAWAL_KEY", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getBufferedEther", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "SIGNATURE_LENGTH", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getWithdrawalCredentials", + "outputs": [ + { + "name": "", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getUnusedSigningKeyCount", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getTotalSigningKeyCount", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_oracle", + "type": "address" + } + ], + "name": "setOracle", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "token", + "type": "address" + } + ], + "name": "allowRecoverability", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "appId", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOracle", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getInitializationBlock", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MANAGE_FEE", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_token", + "type": "address" + } + ], + "name": "transferToVault", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_sender", + "type": "address" + }, + { + "name": "_role", + "type": "bytes32" + }, + { + "name": "_params", + "type": "uint256[]" + } + ], + "name": "canPerform", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_referral", + "type": "address" + } + ], + "name": "submit", + "outputs": [ + { + "name": "StETH", + "type": "uint256" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "WITHDRAWAL_CREDENTIALS_LENGTH", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getEVMScriptRegistry", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "PUBKEY_LENGTH", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "_pubkeyHash", + "type": "bytes32" + } + ], + "name": "withdraw", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_index", + "type": "uint256" + } + ], + "name": "getSigningKey", + "outputs": [ + { + "name": "key", + "type": "bytes" + }, + { + "name": "used", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_token", + "type": "address" + }, + { + "name": "validatorRegistration", + "type": "address" + }, + { + "name": "_oracle", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_epoch", + "type": "uint256" + }, + { + "name": "_eth2balance", + "type": "uint256" + } + ], + "name": "reportEther2", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_withdrawalCredentials", + "type": "bytes" + } + ], + "name": "setWithdrawalCredentials", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getEther2Stat", + "outputs": [ + { + "name": "deposited", + "type": "uint256" + }, + { + "name": "remote", + "type": "uint256" + }, + { + "name": "liabilities", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_index", + "type": "uint256" + } + ], + "name": "removeSigningKey", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getFee", + "outputs": [ + { + "name": "feeBasisPoints", + "type": "uint32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getTotalControlledEther", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "kernel", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isPetrified", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_quantity", + "type": "uint256" + }, + { + "name": "_pubkeys", + "type": "bytes" + }, + { + "name": "_signatures", + "type": "bytes" + } + ], + "name": "addSigningKeys", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MANAGE_SIGNING_KEYS", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "executor", + "type": "address" + }, + { + "indexed": false, + "name": "script", + "type": "bytes" + }, + { + "indexed": false, + "name": "input", + "type": "bytes" + }, + { + "indexed": false, + "name": "returnData", + "type": "bytes" + } + ], + "name": "ScriptResult", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Stopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Resumed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "vault", + "type": "address" + }, + { + "indexed": true, + "name": "token", + "type": "address" + }, + { + "indexed": false, + "name": "amount", + "type": "uint256" + } + ], + "name": "RecoverToVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "feeBasisPoints", + "type": "uint32" + } + ], + "name": "FeeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "withdrawalCredentials", + "type": "bytes" + } + ], + "name": "WithdrawalCredentialsSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "pubkey", + "type": "bytes" + } + ], + "name": "SigningKeyAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "pubkey", + "type": "bytes" + } + ], + "name": "SigningKeyRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "name": "referral", + "type": "address" + } + ], + "name": "Submitted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "amount", + "type": "uint256" + } + ], + "name": "Unbuffered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "name": "tokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "name": "sentFromBuffer", + "type": "uint256" + }, + { + "indexed": true, + "name": "pubkeyHash", + "type": "bytes32" + }, + { + "indexed": false, + "name": "etherAmount", + "type": "uint256" + } + ], + "name": "Withdrawal", + "type": "event" + } + ], + "bytecode": "0x6080604052620000146200001a60201b60201c565b62000231565b6200002a6200011c60201b60201c565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901562000106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000ca578181015183820152602001620000b0565b50505050905090810190601f168015620000f85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200011a6000196200014f60201b60201c565b565b60006200014a600080516020620048e983398151915260001b600019166200022960201b62002c151760201c565b905090565b6200015f6200011c60201b60201c565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015620001fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015620000ca578181015183820152602001620000b0565b5062000226600080516020620048e9833981519152826200022d602090811b6200335417901c565b50565b5490565b9055565b6146a880620002416000396000f3006080604052600436106101f25760003560e01c63ffffffff168063046f7da2146101ff57806307da68f5146102165780630803fac01461022b578063089e56df146102545780631ab971ab1461029257806321df0da7146102b05780632914b9bd146102c557806332f0a3b51461031e57806336bf332514610333578063389ed2671461035a5780633c1c2dc01461036f5780633f683b6a14610384578063435721da1461039957806347b714e0146103ae578063540bc5ea146103c357806356396715146103d857806367e501e314610462578063693599de146104775780637adbf9731461048c5780637e7db6e1146104ba57806380afdea8146104e8578063833b1fce146104fd5780638b3dd749146105125780639aaa2d15146105275780639d4941d81461053c578063a1658fad1461056a578063a1903eab146105de578063a30448c0146105ff578063a479e50814610614578063a4d55d1d14610629578063a8d2021a1461063e578063b6f0ac5314610659578063c0c53b8b146106f4578063c0fdd2801461072e578063c4cf71c914610749578063c6281dbc14610769578063c9e6f7a91461079c578063ced72f87146107b4578063cf01b2f0146107e2578063d4aae0c4146107f7578063de4796ed1461080c578063ec01fa4f14610821578063f31bd9c114610851575b6101fc6000610866565b50005b34801561020b57600080fd5b50610214610c11565b005b34801561022257600080fd5b50610214610d45565b34801561023757600080fd5b50610240610e38565b604080519115158252519081900360200190f35b34801561026057600080fd5b50610269610e62565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561029e57600080fd5b5061021463ffffffff60043516610ecc565b3480156102bc57600080fd5b50610269611039565b3480156102d157600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102699436949293602493928401919081908401838280828437509497506110779650505050505050565b34801561032a57600080fd5b50610269611167565b34801561033f57600080fd5b506103486111e9565b60408051918252519081900360200190f35b34801561036657600080fd5b506103486111f6565b34801561037b57600080fd5b5061034861122b565b34801561039057600080fd5b50610240611260565b3480156103a557600080fd5b5061034861129e565b3480156103ba57600080fd5b506103486112d3565b3480156103cf57600080fd5b506103486112dd565b3480156103e457600080fd5b506103ed6112e2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561042757818101518382015260200161040f565b50505050905090810190601f1680156104545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046e57600080fd5b50610348611378565b34801561048357600080fd5b50610348611391565b34801561049857600080fd5b5061021473ffffffffffffffffffffffffffffffffffffffff60043516611397565b3480156104c657600080fd5b5061024073ffffffffffffffffffffffffffffffffffffffff6004351661148f565b3480156104f457600080fd5b50610348611495565b34801561050957600080fd5b506102696114c0565b34801561051e57600080fd5b506103486114fe565b34801561053357600080fd5b50610348611529565b34801561054857600080fd5b5061021473ffffffffffffffffffffffffffffffffffffffff6004351661155e565b34801561057657600080fd5b50604080516020600460443581810135838102808601850190965280855261024095833573ffffffffffffffffffffffffffffffffffffffff169560248035963696956064959394920192918291850190849080828437509497506117f39650505050505050565b61034873ffffffffffffffffffffffffffffffffffffffff60043516611967565b34801561060b57600080fd5b50610348611978565b34801561062057600080fd5b5061026961197d565b34801561063557600080fd5b50610348611a3f565b34801561064a57600080fd5b50610214600435602435611a44565b34801561066557600080fd5b50610671600435611ee9565b604051808060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156106b85781810151838201526020016106a0565b50505050905090810190601f1680156106e55780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561070057600080fd5b5061021473ffffffffffffffffffffffffffffffffffffffff60043581169060243581169060443516611f79565b34801561073a57600080fd5b50610214600435602435612046565b34801561075557600080fd5b506102146004803560248101910135612209565b34801561077557600080fd5b5061077e6123ca565b60408051938452602084019290925282820152519081900360600190f35b3480156107a857600080fd5b5061021460043561248f565b3480156107c057600080fd5b506107c9612758565b6040805163ffffffff9092168252519081900360200190f35b3480156107ee57600080fd5b50610348612762565b34801561080357600080fd5b5061026961276c565b34801561081857600080fd5b50610240612797565b34801561082d57600080fd5b506102146004803590602480358082019290810135916044359081019101356127aa565b34801561085d57600080fd5b50610348612be0565b6000806000806000806108b160405180807f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152506018019050604051809103902060001916612c15565b1561091d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f434f4e54524143545f49535f53544f5050454400000000000000000000000000604482015290519081900360640190fd5b33945034935083151561099157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f5349540000000000000000000000000000000000000000604482015290519081900360640190fd5b610999612c19565b15156109a757839550610acf565b6109af611039565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156109f657600080fd5b505af1158015610a0a573d6000803e3d6000fd5b505050506040513d6020811015610a2057600080fd5b50511515610a2a57fe5b610acc610a35612c19565b610ac0610a40611039565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610a8757600080fd5b505af1158015610a9b573d6000803e3d6000fd5b505050506040513d6020811015610ab157600080fd5b5051879063ffffffff612d8a16565b9063ffffffff612e5816565b95505b610ad7611039565b73ffffffffffffffffffffffffffffffffffffffff166340c10f1986886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610b5d57600080fd5b505af1158015610b71573d6000803e3d6000fd5b50505050610b80858589612f0f565b610b88612f75565b92506801bc16d674ec8000008310610c0757610ba2612fc7565b9150610bcd6801bc16d674ec800000610bc1858263ffffffff612e5816565b9063ffffffff612d8a16565b9050828111158015610bde57508015155b1515610be657fe5b610bf7610bf282612fe2565b61307d565b81610c00612fc7565b14610c0757fe5b5050505050919050565b604080517f50415553455f524f4c45000000000000000000000000000000000000000000008152815190819003600a01812060008083526020830190935291610c609133918491905b506117f3565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610d39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cfe578181015183820152602001610ce6565b50505050905090810190601f168015610d2b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610d42613187565b50565b604080517f50415553455f524f4c45000000000000000000000000000000000000000000008152815190819003600a01812060008083526020830190935291610d92913391849190610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610e2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b50610d4261323b565b600080610e436114fe565b90508015801590610e5b575080610e58613350565b10155b91505b5090565b604080517f6465706f6f6c732e4465506f6f6c2e76616c696461746f72526567697374726181527f74696f6e0000000000000000000000000000000000000000000000000000000060208201529051908190036024019020600090610ec690612c15565b90505b90565b604080517f4d414e4147455f464545000000000000000000000000000000000000000000008152815190819003600a01812060008083526020830190935291610f19913391849190610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b50604080517f6465706f6f6c732e4465506f6f6c2e666565000000000000000000000000000081529051908190036012019020610ffc9063ffffffff8085169061335416565b6040805163ffffffff8416815290517ff489d8b93b3874572cc94319f109187d1ea814b9de5a3d9e54c48c1ac0d57cad9181900360200190a15050565b604080517f6465706f6f6c732e4465506f6f6c2e746f6b656e00000000000000000000000081529051908190036014019020600090610ec690612c15565b600061108161197d565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110e95781810151838201526020016110d1565b50505050905090810190601f1680156111165780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561113557600080fd5b505af1158015611149573d6000803e3d6000fd5b505050506040513d602081101561115f57600080fd5b505192915050565b600061117161276c565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111b857600080fd5b505af11580156111cc573d6000803e3d6000fd5b505050506040513d60208110156111e257600080fd5b5051905090565b6801bc16d674ec80000081565b604080517f50415553455f524f4c45000000000000000000000000000000000000000000008152905190819003600a01902081565b604080517f5345545f4f5241434c45000000000000000000000000000000000000000000008152905190819003600a01902081565b604080517f6465706f6f6c732e5061757361626c652e73746f70706564000000000000000081529051908190036018019020600090610ec690612c15565b604080517f4d414e4147455f5749544844524157414c5f4b455900000000000000000000008152905190819003601501902081565b6000610ec6612f75565b606081565b60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561136e5780601f106113435761010080835404028352916020019161136e565b820191906000526020600020905b81548152906001019060200180831161135157829003601f168201915b5050505050905090565b6000610ec660025460015461335890919063ffffffff16565b60015490565b604080517f5345545f4f5241434c45000000000000000000000000000000000000000000008152815190819003600a018120600080835260208301909352916113e4913391849190610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5061148b82613403565b5050565b50600190565b6000610ec67fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b612c15565b604080517f6465706f6f6c732e4465506f6f6c2e6f7261636c65000000000000000000000081529051908190036015019020600090610ec690612c15565b6000610ec67febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e612c15565b604080517f4d414e4147455f464545000000000000000000000000000000000000000000008152905190819003600a01902081565b600080600061156c8461148f565b15156115d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5245434f5645525f444953414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b6115e1611167565b92506115ec836134bf565b151561165957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5245434f5645525f5641554c545f4e4f545f434f4e5452414354000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff841615156116ca5761167e612fc7565b60405190925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f193505050501580156116c4573d6000803e3d6000fd5b50611788565b50826116f273ffffffffffffffffffffffffffffffffffffffff82163063ffffffff6134f916565b915061171b73ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61363216565b151561178857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c4544000000604482015290519081900360640190fd5b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b6000806117fe610e38565b151561180d576000915061195f565b61181561276c565b905073ffffffffffffffffffffffffffffffffffffffff8116151561183d576000915061195f565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef9106863087611865886136ca565b60405163ffffffff861660e01b815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b838110156118e15781810151838201526020016118c9565b50505050905090810190601f16801561190e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561193057600080fd5b505af1158015611944573d6000803e3d6000fd5b505050506040513d602081101561195a57600080fd5b505191505b509392505050565b600061197282610866565b92915050565b602081565b60008061198861276c565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561113557600080fd5b603081565b6000806000806000611a8e60405180807f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152506018019050604051809103902060001916612c15565b15611afa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f434f4e54524143545f49535f53544f5050454400000000000000000000000000604482015290519081900360640190fd5b339450611b05611039565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b4c57600080fd5b505af1158015611b60573d6000803e3d6000fd5b505050506040513d6020811015611b7657600080fd5b50519350611b82611039565b73ffffffffffffffffffffffffffffffffffffffff16639dc29fac86896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611c0857600080fd5b505af1158015611c1c573d6000803e3d6000fd5b50505050611c3c84610ac0611c2f612c19565b8a9063ffffffff612d8a16565b9250821515611cac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f54585f544f4f5f534d414c4c0000000000000000000000000000000000000000604482015290519081900360640190fd5b60009150611cb8612f75565b90508015611d7a57828111611ccd5780611ccf565b825b9150611d22611ce4828463ffffffff61335816565b604080517f6465706f6f6c732e4465506f6f6c2e62756666657265644574686572000000008152905190819003601c0190209063ffffffff61335416565b611d32838363ffffffff61335816565b60405190935073ffffffffffffffffffffffffffffffffffffffff86169083156108fc029084906000818181858888f19350505050158015611d78573d6000803e3d6000fd5b505b8215611e8657604080517f6465706f6f6c732e4465506f6f6c2e77697468647261776e45746865723200008152905190819003601e019020611e0f90611dd1908590611dc590612c15565b9063ffffffff6136d416565b604080517f6465706f6f6c732e4465506f6f6c2e77697468647261776e45746865723200008152905190819003601e0190209063ffffffff61335416565b60408051808201909152838152602081018781526003805460018101825560009190915291517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b600290930292830155517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c909101555b60408051888152602081018490528082018590529051879173ffffffffffffffffffffffffffffffffffffffff8816917fcf8f72073b13b07fe51690fd7c43414d1a0ef6f21c9896ba1814a08be9bdab3a9181900360600190a350505050505050565b60606000606060015484101515611f6157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4b45595f4e4f545f464f554e4400000000000000000000000000000000000000604482015290519081900360640190fd5b611f6a84613779565b50600254909594109392505050565b611f816114fe565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901561201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5061202783613820565b612030826138d8565b61203981613403565b6120416139b6565b505050565b61204e6114c0565b73ffffffffffffffffffffffffffffffffffffffff1633146120d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4150505f415554485f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b81151561213f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5a45524f5f45504f434800000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e4465506f6f6c2e6c6173744f7261636c6545706f636800008152905190819003601e01902061217a90612c15565b82116121855761148b565b604080517f6465706f6f6c732e4465506f6f6c2e6c6173744f7261636c6545706f636800008152905190819003601e0190206121c7908363ffffffff61335416565b604080517f6465706f6f6c732e4465506f6f6c2e72656d6f746545746865723200000000008152905190819003601b01902061148b908263ffffffff61335416565b604080517f4d414e4147455f5749544844524157414c5f4b455900000000000000000000008152815190819003601501812060008083526020830190935291612256913391849190610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156122f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b506020821461236357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f4c454e475448000000000000000000000000000000000000604482015290519081900360640190fd5b61236f600084846145d0565b5060025460015560408051602080825281018490527fa9f8f710d9fd2abac6df2d13d7a3c4fd0ba6a71720fb2a12cce3101c3004041b91859185918190810184848082843760405192018290039550909350505050a1505050565b604080517f6465706f6f6c732e4465506f6f6c2e6465706f736974656445746865720000008152905190819003601d0190206000908190819061240c90612c15565b604080517f6465706f6f6c732e4465506f6f6c2e72656d6f746545746865723200000000008152905190819003601b01902090935061244a90612c15565b604080517f6465706f6f6c732e4465506f6f6c2e77697468647261776e45746865723200008152905190819003601e01902090925061248890612c15565b9050909192565b604080517f4d414e4147455f5349474e494e475f4b455953000000000000000000000000008152815190819003601301812060008083526020830190935260609291839182916124e3903390839087610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5060015486106125f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4b45595f4e4f545f464f554e4400000000000000000000000000000000000000604482015290519081900360640190fd5b60025486101561266257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4b45595f5741535f555345440000000000000000000000000000000000000000604482015290519081900360640190fd5b61266b86613779565b5094506126836001805461335890919063ffffffff16565b9350838610156126a55761269684613779565b925092506126a5868484613a95565b6126ae84613b08565b6001805460001901905560408051602080825287518183015287517f835910185867f432eb3ebcf44cf62326c0400d12fea03697b64ee5565eeaec6a938993928392918301919085019080838360005b838110156127165781810151838201526020016126fe565b50505050905090810190601f1680156127435780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505050505050565b6000610ec6613b32565b6000610ec6612c19565b6000610ec67f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b612c15565b60006000196127a46114fe565b14905090565b604080517f4d414e4147455f5349474e494e475f4b45595300000000000000000000000000815281519081900360130181206000808352602083019093526060918291906127fc903390839087610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5088151561290857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f4e4f5f4b45595300000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61291989603063ffffffff612d8a16565b871461298657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f4c454e475448000000000000000000000000000000000000604482015290519081900360640190fd5b61299789606063ffffffff612d8a16565b8514612a0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f4c454e475448000000000000000000000000000000000000604482015290519081900360640190fd5b600093505b88841015612bbf57612a5288888080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050603086026030613b82565b9250612a5d83613c03565b15612ac957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f454d5054595f4b45590000000000000000000000000000000000000000000000604482015290519081900360640190fd5b612b0a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050606086026060613b82565b9150612b1b84600154018484613a95565b7fc07899cb9884344fbbc82bc8c9a50f8aa3b37ee63b7c65331f156f78d817c343836040518080602001828103825283818151815260200191508051906020019080838360005b83811015612b7a578181015183820152602001612b62565b50505050905090810190601f168015612ba75780820380516001836020036101000a031916815260200191505b509250505060405180910390a1836001019350612a09565b600154612bd2908a63ffffffff6136d416565b600155505050505050505050565b604080517f4d414e4147455f5349474e494e475f4b455953000000000000000000000000008152905190819003601301902081565b5490565b6000806000806000612c6360405180807f6465706f6f6c732e4465506f6f6c2e72656d6f74654574686572320000000000815250601b019050604051809103902060001916612c15565b604080517f6465706f6f6c732e4465506f6f6c2e6465706f736974656445746865720000008152905190819003601d019020909450612ca190612c15565b9250612cc2612cae613c39565b612cb85783612cba565b845b611dc5612f75565b604080517f6465706f6f6c732e4465506f6f6c2e77697468647261776e45746865723200008152905190819003601e019020909250612d0090612c15565b905080821015612d7157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e454741544956455f4551554954590000000000000000000000000000000000604482015290519081900360640190fd5b612d81828263ffffffff61335816565b94505050505090565b600080831515612d9d5760009150612e51565b50828202828482811515612dad57fe5b60408051808201909152601181527f4d4154485f4d554c5f4f564552464c4f5700000000000000000000000000000060208201529291900414612e4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b508091505b5092915050565b60408051808201909152600d81527f4d4154485f4449565f5a45524f0000000000000000000000000000000000000060208201526000908190818411612efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b508284811515612f0657fe5b04949350505050565b612f1e611ce483611dc5612f75565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528251908616927f96a25c8ce0baabc1fdefd93e9ed25d8e092a3332f3aa9a41722b5697231d1d1a928290030190a2505050565b604080517f6465706f6f6c732e4465506f6f6c2e62756666657265644574686572000000008152905190819003601c0190206000908190612fb590612c15565b90503031811115612fc257fe5b919050565b6000610ec6612fd4612f75565b30319063ffffffff61335816565b600080606080670de0b6b3a7640000851015612ffa57fe5b600092505b84158015906130115750600254600154115b156130745761302f856801bc16d674ec80000063ffffffff61335816565b945061304a836801bc16d674ec80000063ffffffff6136d416565b600280546001810190915590935061306190613779565b9150915061306f8282613c7e565b612fff565b50909392505050565b604080517f6465706f6f6c732e4465506f6f6c2e6465706f736974656445746865720000008152905190819003601d019020613100906130c2908390611dc590612c15565b604080517f6465706f6f6c732e4465506f6f6c2e6465706f736974656445746865720000008152905190819003601d0190209063ffffffff61335416565b604080517f6465706f6f6c732e4465506f6f6c2e62756666657265644574686572000000008152905190819003601c01902061315190611ce490839061314590612c15565b9063ffffffff61335816565b6040805182815290517f76a397bea5768d4fca97ef47792796e35f98dc81b16c1de84e28a818e1f971089181900360200190a150565b604080517f6465706f6f6c732e5061757361626c652e73746f707065640000000000000000815290519081900360180190206131c290612c15565b15156131cd57600080fd5b604080517f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152905190819003601801902061321090600063ffffffff61335416565b6040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f990600090a1565b604080517f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152905190819003601801902061327690612c15565b156132e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f434f4e54524143545f49535f53544f5050454400000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152905190819003601801902061332590600163ffffffff61335416565b6040517f7acc84e34091ae817647a4c49116f5cc07f319078ba80f8f5fde37ea7e25cbd690600090a1565b4390565b9055565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f57000000000000000000000000000060208201526000908190848411156133fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b505050900390565b61340c816134bf565b151561347957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415f434f4e5452414354000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e4465506f6f6c2e6f7261636c65000000000000000000000081529051908190036015019020610d42908263ffffffff61335416565b5490565b60008073ffffffffffffffffffffffffffffffffffffffff831615156134e857600091506134f3565b823b90506000811191505b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905260009081806135868684614351565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515613628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526000906136c18582614382565b95945050505050565b8051602002815290565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f5700000000000000000000000000000060208201526000908383019084821015612e4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b60608060008181613789866143d0565b604080518181526060810182529194506020820161080080388339505084546020830152506001840154604082015260029093019291506137cd8260006030613b82565b6040805160608082526080820190925291965060208201610c0080388339019050509350600090505b60608110156138185782546020828601810191909152600190930192016137f6565b505050915091565b613829816134bf565b151561389657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415f434f4e5452414354000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e4465506f6f6c2e746f6b656e00000000000000000000000081529051908190036014019020610d42908263ffffffff61335416565b6138e1816134bf565b151561394e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415f434f4e5452414354000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e4465506f6f6c2e76616c696461746f72526567697374726181527f74696f6e0000000000000000000000000000000000000000000000000000000060208201529051908190036024019020610d42908263ffffffff61335416565b6139be6114fe565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015613a5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b50613a93613a66613350565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff61335416565b565b600080600060308551141515613aa757fe5b8351606014613ab257fe5b613abb866143d0565b602086015181556040860151608090811c811b6001830155600290910193509150600090505b6060811015613b00576020818501810151845560019093019201613ae1565b505050505050565b600080613b14836143d0565b9150600090505b600581101561204157600082820155600101613b1b565b604080517f6465706f6f6c732e4465506f6f6c2e6665650000000000000000000000000000815290519081900360120190206000908190613b7290612c15565b905063ffffffff811115612fc257fe5b606080828401855110151515613b9757600080fd5b82158015613bb057604051915060208201604052613bfa565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613be9578051835260209283019201613bd1565b5050858452601f01601f1916604052505b50949350505050565b600080600060308451141515613c1557fe5b50506020820151604083015181158015613c315750608081901c155b949350505050565b604080517f6465706f6f6c732e4465506f6f6c2e6c6173744f7261636c6545706f636800008152905190819003601e019020600090613c7790612c15565b1515905090565b6000806000806000806000805460018160011615610100020316600290049050600014151515613d0f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f454d5054595f5749544844524157414c5f43524544454e5449414c5300000000604482015290519081900360640190fd5b6801bc16d674ec8000009550613d2f86633b9aca0063ffffffff612e5816565b945085613d4686633b9aca0063ffffffff612d8a16565b14613d4d57fe5b613d5688614487565b6040518082805190602001908083835b60208310613d855780518252601f199092019160209182019101613d66565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209350613dc18760006040613b82565b6040518082805190602001908083835b60208310613df05780518252601f199092019160209182019101613dd1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020613e45613e40896040613e3b6040606061335890919063ffffffff16565b613b82565b614487565b6040518082805190602001908083835b60208310613e745780518252601f199092019160209182019101613e55565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b60208310613eee5780518252601f199092019160209182019101613ecf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020925083600060405160200180836000191660001916815260200182805460018160011615610100020316600290048015613f8c5780601f10613f6a576101008083540402835291820191613f8c565b820191906000526020600020905b815481529060010190602001808311613f78575b5050925050506040516020818303038152906040526040518082805190602001908083835b60208310613fd05780518252601f199092019160209182019101613fb1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206140068661451e565b60408051602080820193909352808201879052815180820383018152606090910191829052805190928291908401908083835b602083106140585780518252601f199092019160209182019101614039565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b602083106140d25780518252601f1990920191602091820191016140b3565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120945061410d9250503031905087613358565b9050614117610e62565b73ffffffffffffffffffffffffffffffffffffffff166322895118878a60008b876040518663ffffffff1660e01b8152600401808060200180602001806020018560001916600019168152602001848103845288818151815260200191508051906020019080838360005b8381101561419a578181015183820152602001614182565b50505050905090810190601f1680156141c75780820380516001836020036101000a031916815260200191505b5084810383528754600260001961010060018416150201909116048082526020909101908890801561423a5780601f1061420f5761010080835404028352916020019161423a565b820191906000526020600020905b81548152906001019060200180831161421d57829003601f168201915b5050848103825286518152865160209182019188019080838360005b8381101561426e578181015183820152602001614256565b50505050905090810190601f16801561429b5780820380516001836020036101000a031916815260200191505b509750505050505050506000604051808303818588803b1580156142be57600080fd5b505af11580156142d2573d6000803e3d6000fd5b5050505030318214905061434757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f455850454354494e475f4445504f5349545f544f5f48415050454e0000000000604482015290519081900360640190fd5b5050505050505050565b6000806000806040516020818751602089018a5afa9250600083111561437657805191505b50909590945092505050565b6000806040516020818551602087016000895af160008111156143c6573d80156143b357602081146143bc576143c4565b600193506143c4565b600183511493505b505b5090949350505050565b604080517f6465706f6f6c732e4465506f6f6c2e7369676e696e674b6579730000000000008152815190819003601a0181206020808301919091528183018490528251808303840181526060909201928390528151600093918291908401908083835b602083106144525780518252601f199092019160209182019101614433565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060001c95945050505050565b606080602083511015801561449e57506040835111155b15156144a657fe5b8251604014156144b8578291506134f3565b6040805160208082528183019092529080820161040080388339019050509050600060208201528251602014156144fa576144f38382614555565b91506134f3565b6144f383614519836000613e3b8851604061335890919063ffffffff16565b614555565b6000805b600881101561454457600883811c9360ff1692901b9190911790600101614522565b821561454c57fe5b5060c01b919050565b6060806040519050835180825260208201818101602087015b8183101561458657805183526020928301920161456e565b50855184518101855292509050808201602086015b818310156145b357805183526020928301920161459b565b509551919091011594909401601f01601f19166040529392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061462f578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082351617855561465c565b8280016001018555821561465c579182015b8281111561465c578235825591602001919060010190614641565b50610e5e92610ec99250905b80821115610e5e57600081556001016146685600a165627a7a7230582023086b3a5b28637bcf1ba5153c2d55c8bd27f37705622db06be5a9d77e7651580029ebb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e", + "deployedBytecode": "0x6080604052600436106101f25760003560e01c63ffffffff168063046f7da2146101ff57806307da68f5146102165780630803fac01461022b578063089e56df146102545780631ab971ab1461029257806321df0da7146102b05780632914b9bd146102c557806332f0a3b51461031e57806336bf332514610333578063389ed2671461035a5780633c1c2dc01461036f5780633f683b6a14610384578063435721da1461039957806347b714e0146103ae578063540bc5ea146103c357806356396715146103d857806367e501e314610462578063693599de146104775780637adbf9731461048c5780637e7db6e1146104ba57806380afdea8146104e8578063833b1fce146104fd5780638b3dd749146105125780639aaa2d15146105275780639d4941d81461053c578063a1658fad1461056a578063a1903eab146105de578063a30448c0146105ff578063a479e50814610614578063a4d55d1d14610629578063a8d2021a1461063e578063b6f0ac5314610659578063c0c53b8b146106f4578063c0fdd2801461072e578063c4cf71c914610749578063c6281dbc14610769578063c9e6f7a91461079c578063ced72f87146107b4578063cf01b2f0146107e2578063d4aae0c4146107f7578063de4796ed1461080c578063ec01fa4f14610821578063f31bd9c114610851575b6101fc6000610866565b50005b34801561020b57600080fd5b50610214610c11565b005b34801561022257600080fd5b50610214610d45565b34801561023757600080fd5b50610240610e38565b604080519115158252519081900360200190f35b34801561026057600080fd5b50610269610e62565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561029e57600080fd5b5061021463ffffffff60043516610ecc565b3480156102bc57600080fd5b50610269611039565b3480156102d157600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102699436949293602493928401919081908401838280828437509497506110779650505050505050565b34801561032a57600080fd5b50610269611167565b34801561033f57600080fd5b506103486111e9565b60408051918252519081900360200190f35b34801561036657600080fd5b506103486111f6565b34801561037b57600080fd5b5061034861122b565b34801561039057600080fd5b50610240611260565b3480156103a557600080fd5b5061034861129e565b3480156103ba57600080fd5b506103486112d3565b3480156103cf57600080fd5b506103486112dd565b3480156103e457600080fd5b506103ed6112e2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561042757818101518382015260200161040f565b50505050905090810190601f1680156104545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046e57600080fd5b50610348611378565b34801561048357600080fd5b50610348611391565b34801561049857600080fd5b5061021473ffffffffffffffffffffffffffffffffffffffff60043516611397565b3480156104c657600080fd5b5061024073ffffffffffffffffffffffffffffffffffffffff6004351661148f565b3480156104f457600080fd5b50610348611495565b34801561050957600080fd5b506102696114c0565b34801561051e57600080fd5b506103486114fe565b34801561053357600080fd5b50610348611529565b34801561054857600080fd5b5061021473ffffffffffffffffffffffffffffffffffffffff6004351661155e565b34801561057657600080fd5b50604080516020600460443581810135838102808601850190965280855261024095833573ffffffffffffffffffffffffffffffffffffffff169560248035963696956064959394920192918291850190849080828437509497506117f39650505050505050565b61034873ffffffffffffffffffffffffffffffffffffffff60043516611967565b34801561060b57600080fd5b50610348611978565b34801561062057600080fd5b5061026961197d565b34801561063557600080fd5b50610348611a3f565b34801561064a57600080fd5b50610214600435602435611a44565b34801561066557600080fd5b50610671600435611ee9565b604051808060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156106b85781810151838201526020016106a0565b50505050905090810190601f1680156106e55780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561070057600080fd5b5061021473ffffffffffffffffffffffffffffffffffffffff60043581169060243581169060443516611f79565b34801561073a57600080fd5b50610214600435602435612046565b34801561075557600080fd5b506102146004803560248101910135612209565b34801561077557600080fd5b5061077e6123ca565b60408051938452602084019290925282820152519081900360600190f35b3480156107a857600080fd5b5061021460043561248f565b3480156107c057600080fd5b506107c9612758565b6040805163ffffffff9092168252519081900360200190f35b3480156107ee57600080fd5b50610348612762565b34801561080357600080fd5b5061026961276c565b34801561081857600080fd5b50610240612797565b34801561082d57600080fd5b506102146004803590602480358082019290810135916044359081019101356127aa565b34801561085d57600080fd5b50610348612be0565b6000806000806000806108b160405180807f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152506018019050604051809103902060001916612c15565b1561091d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f434f4e54524143545f49535f53544f5050454400000000000000000000000000604482015290519081900360640190fd5b33945034935083151561099157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f5349540000000000000000000000000000000000000000604482015290519081900360640190fd5b610999612c19565b15156109a757839550610acf565b6109af611039565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156109f657600080fd5b505af1158015610a0a573d6000803e3d6000fd5b505050506040513d6020811015610a2057600080fd5b50511515610a2a57fe5b610acc610a35612c19565b610ac0610a40611039565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610a8757600080fd5b505af1158015610a9b573d6000803e3d6000fd5b505050506040513d6020811015610ab157600080fd5b5051879063ffffffff612d8a16565b9063ffffffff612e5816565b95505b610ad7611039565b73ffffffffffffffffffffffffffffffffffffffff166340c10f1986886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610b5d57600080fd5b505af1158015610b71573d6000803e3d6000fd5b50505050610b80858589612f0f565b610b88612f75565b92506801bc16d674ec8000008310610c0757610ba2612fc7565b9150610bcd6801bc16d674ec800000610bc1858263ffffffff612e5816565b9063ffffffff612d8a16565b9050828111158015610bde57508015155b1515610be657fe5b610bf7610bf282612fe2565b61307d565b81610c00612fc7565b14610c0757fe5b5050505050919050565b604080517f50415553455f524f4c45000000000000000000000000000000000000000000008152815190819003600a01812060008083526020830190935291610c609133918491905b506117f3565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610d39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cfe578181015183820152602001610ce6565b50505050905090810190601f168015610d2b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610d42613187565b50565b604080517f50415553455f524f4c45000000000000000000000000000000000000000000008152815190819003600a01812060008083526020830190935291610d92913391849190610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610e2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b50610d4261323b565b600080610e436114fe565b90508015801590610e5b575080610e58613350565b10155b91505b5090565b604080517f6465706f6f6c732e4465506f6f6c2e76616c696461746f72526567697374726181527f74696f6e0000000000000000000000000000000000000000000000000000000060208201529051908190036024019020600090610ec690612c15565b90505b90565b604080517f4d414e4147455f464545000000000000000000000000000000000000000000008152815190819003600a01812060008083526020830190935291610f19913391849190610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515610fb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b50604080517f6465706f6f6c732e4465506f6f6c2e666565000000000000000000000000000081529051908190036012019020610ffc9063ffffffff8085169061335416565b6040805163ffffffff8416815290517ff489d8b93b3874572cc94319f109187d1ea814b9de5a3d9e54c48c1ac0d57cad9181900360200190a15050565b604080517f6465706f6f6c732e4465506f6f6c2e746f6b656e00000000000000000000000081529051908190036014019020600090610ec690612c15565b600061108161197d565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110e95781810151838201526020016110d1565b50505050905090810190601f1680156111165780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561113557600080fd5b505af1158015611149573d6000803e3d6000fd5b505050506040513d602081101561115f57600080fd5b505192915050565b600061117161276c565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111b857600080fd5b505af11580156111cc573d6000803e3d6000fd5b505050506040513d60208110156111e257600080fd5b5051905090565b6801bc16d674ec80000081565b604080517f50415553455f524f4c45000000000000000000000000000000000000000000008152905190819003600a01902081565b604080517f5345545f4f5241434c45000000000000000000000000000000000000000000008152905190819003600a01902081565b604080517f6465706f6f6c732e5061757361626c652e73746f70706564000000000000000081529051908190036018019020600090610ec690612c15565b604080517f4d414e4147455f5749544844524157414c5f4b455900000000000000000000008152905190819003601501902081565b6000610ec6612f75565b606081565b60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561136e5780601f106113435761010080835404028352916020019161136e565b820191906000526020600020905b81548152906001019060200180831161135157829003601f168201915b5050505050905090565b6000610ec660025460015461335890919063ffffffff16565b60015490565b604080517f5345545f4f5241434c45000000000000000000000000000000000000000000008152815190819003600a018120600080835260208301909352916113e4913391849190610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5061148b82613403565b5050565b50600190565b6000610ec67fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b612c15565b604080517f6465706f6f6c732e4465506f6f6c2e6f7261636c65000000000000000000000081529051908190036015019020600090610ec690612c15565b6000610ec67febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e612c15565b604080517f4d414e4147455f464545000000000000000000000000000000000000000000008152905190819003600a01902081565b600080600061156c8461148f565b15156115d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5245434f5645525f444953414c4c4f5745440000000000000000000000000000604482015290519081900360640190fd5b6115e1611167565b92506115ec836134bf565b151561165957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5245434f5645525f5641554c545f4e4f545f434f4e5452414354000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff841615156116ca5761167e612fc7565b60405190925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f193505050501580156116c4573d6000803e3d6000fd5b50611788565b50826116f273ffffffffffffffffffffffffffffffffffffffff82163063ffffffff6134f916565b915061171b73ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff61363216565b151561178857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c4544000000604482015290519081900360640190fd5b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b6000806117fe610e38565b151561180d576000915061195f565b61181561276c565b905073ffffffffffffffffffffffffffffffffffffffff8116151561183d576000915061195f565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef9106863087611865886136ca565b60405163ffffffff861660e01b815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b838110156118e15781810151838201526020016118c9565b50505050905090810190601f16801561190e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561193057600080fd5b505af1158015611944573d6000803e3d6000fd5b505050506040513d602081101561195a57600080fd5b505191505b509392505050565b600061197282610866565b92915050565b602081565b60008061198861276c565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561113557600080fd5b603081565b6000806000806000611a8e60405180807f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152506018019050604051809103902060001916612c15565b15611afa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f434f4e54524143545f49535f53544f5050454400000000000000000000000000604482015290519081900360640190fd5b339450611b05611039565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b4c57600080fd5b505af1158015611b60573d6000803e3d6000fd5b505050506040513d6020811015611b7657600080fd5b50519350611b82611039565b73ffffffffffffffffffffffffffffffffffffffff16639dc29fac86896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611c0857600080fd5b505af1158015611c1c573d6000803e3d6000fd5b50505050611c3c84610ac0611c2f612c19565b8a9063ffffffff612d8a16565b9250821515611cac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f54585f544f4f5f534d414c4c0000000000000000000000000000000000000000604482015290519081900360640190fd5b60009150611cb8612f75565b90508015611d7a57828111611ccd5780611ccf565b825b9150611d22611ce4828463ffffffff61335816565b604080517f6465706f6f6c732e4465506f6f6c2e62756666657265644574686572000000008152905190819003601c0190209063ffffffff61335416565b611d32838363ffffffff61335816565b60405190935073ffffffffffffffffffffffffffffffffffffffff86169083156108fc029084906000818181858888f19350505050158015611d78573d6000803e3d6000fd5b505b8215611e8657604080517f6465706f6f6c732e4465506f6f6c2e77697468647261776e45746865723200008152905190819003601e019020611e0f90611dd1908590611dc590612c15565b9063ffffffff6136d416565b604080517f6465706f6f6c732e4465506f6f6c2e77697468647261776e45746865723200008152905190819003601e0190209063ffffffff61335416565b60408051808201909152838152602081018781526003805460018101825560009190915291517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b600290930292830155517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c909101555b60408051888152602081018490528082018590529051879173ffffffffffffffffffffffffffffffffffffffff8816917fcf8f72073b13b07fe51690fd7c43414d1a0ef6f21c9896ba1814a08be9bdab3a9181900360600190a350505050505050565b60606000606060015484101515611f6157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4b45595f4e4f545f464f554e4400000000000000000000000000000000000000604482015290519081900360640190fd5b611f6a84613779565b50600254909594109392505050565b611f816114fe565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901561201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5061202783613820565b612030826138d8565b61203981613403565b6120416139b6565b505050565b61204e6114c0565b73ffffffffffffffffffffffffffffffffffffffff1633146120d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4150505f415554485f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b81151561213f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5a45524f5f45504f434800000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e4465506f6f6c2e6c6173744f7261636c6545706f636800008152905190819003601e01902061217a90612c15565b82116121855761148b565b604080517f6465706f6f6c732e4465506f6f6c2e6c6173744f7261636c6545706f636800008152905190819003601e0190206121c7908363ffffffff61335416565b604080517f6465706f6f6c732e4465506f6f6c2e72656d6f746545746865723200000000008152905190819003601b01902061148b908263ffffffff61335416565b604080517f4d414e4147455f5749544844524157414c5f4b455900000000000000000000008152815190819003601501812060008083526020830190935291612256913391849190610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156122f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b506020821461236357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f4c454e475448000000000000000000000000000000000000604482015290519081900360640190fd5b61236f600084846145d0565b5060025460015560408051602080825281018490527fa9f8f710d9fd2abac6df2d13d7a3c4fd0ba6a71720fb2a12cce3101c3004041b91859185918190810184848082843760405192018290039550909350505050a1505050565b604080517f6465706f6f6c732e4465506f6f6c2e6465706f736974656445746865720000008152905190819003601d0190206000908190819061240c90612c15565b604080517f6465706f6f6c732e4465506f6f6c2e72656d6f746545746865723200000000008152905190819003601b01902090935061244a90612c15565b604080517f6465706f6f6c732e4465506f6f6c2e77697468647261776e45746865723200008152905190819003601e01902090925061248890612c15565b9050909192565b604080517f4d414e4147455f5349474e494e475f4b455953000000000000000000000000008152815190819003601301812060008083526020830190935260609291839182916124e3903390839087610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5060015486106125f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4b45595f4e4f545f464f554e4400000000000000000000000000000000000000604482015290519081900360640190fd5b60025486101561266257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4b45595f5741535f555345440000000000000000000000000000000000000000604482015290519081900360640190fd5b61266b86613779565b5094506126836001805461335890919063ffffffff16565b9350838610156126a55761269684613779565b925092506126a5868484613a95565b6126ae84613b08565b6001805460001901905560408051602080825287518183015287517f835910185867f432eb3ebcf44cf62326c0400d12fea03697b64ee5565eeaec6a938993928392918301919085019080838360005b838110156127165781810151838201526020016126fe565b50505050905090810190601f1680156127435780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505050505050565b6000610ec6613b32565b6000610ec6612c19565b6000610ec67f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b612c15565b60006000196127a46114fe565b14905090565b604080517f4d414e4147455f5349474e494e475f4b45595300000000000000000000000000815281519081900360130181206000808352602083019093526060918291906127fc903390839087610c5a565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515612899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5088151561290857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f4e4f5f4b45595300000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61291989603063ffffffff612d8a16565b871461298657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f4c454e475448000000000000000000000000000000000000604482015290519081900360640190fd5b61299789606063ffffffff612d8a16565b8514612a0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f4c454e475448000000000000000000000000000000000000604482015290519081900360640190fd5b600093505b88841015612bbf57612a5288888080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050603086026030613b82565b9250612a5d83613c03565b15612ac957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f454d5054595f4b45590000000000000000000000000000000000000000000000604482015290519081900360640190fd5b612b0a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050606086026060613b82565b9150612b1b84600154018484613a95565b7fc07899cb9884344fbbc82bc8c9a50f8aa3b37ee63b7c65331f156f78d817c343836040518080602001828103825283818151815260200191508051906020019080838360005b83811015612b7a578181015183820152602001612b62565b50505050905090810190601f168015612ba75780820380516001836020036101000a031916815260200191505b509250505060405180910390a1836001019350612a09565b600154612bd2908a63ffffffff6136d416565b600155505050505050505050565b604080517f4d414e4147455f5349474e494e475f4b455953000000000000000000000000008152905190819003601301902081565b5490565b6000806000806000612c6360405180807f6465706f6f6c732e4465506f6f6c2e72656d6f74654574686572320000000000815250601b019050604051809103902060001916612c15565b604080517f6465706f6f6c732e4465506f6f6c2e6465706f736974656445746865720000008152905190819003601d019020909450612ca190612c15565b9250612cc2612cae613c39565b612cb85783612cba565b845b611dc5612f75565b604080517f6465706f6f6c732e4465506f6f6c2e77697468647261776e45746865723200008152905190819003601e019020909250612d0090612c15565b905080821015612d7157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e454741544956455f4551554954590000000000000000000000000000000000604482015290519081900360640190fd5b612d81828263ffffffff61335816565b94505050505090565b600080831515612d9d5760009150612e51565b50828202828482811515612dad57fe5b60408051808201909152601181527f4d4154485f4d554c5f4f564552464c4f5700000000000000000000000000000060208201529291900414612e4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b508091505b5092915050565b60408051808201909152600d81527f4d4154485f4449565f5a45524f0000000000000000000000000000000000000060208201526000908190818411612efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b508284811515612f0657fe5b04949350505050565b612f1e611ce483611dc5612f75565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528251908616927f96a25c8ce0baabc1fdefd93e9ed25d8e092a3332f3aa9a41722b5697231d1d1a928290030190a2505050565b604080517f6465706f6f6c732e4465506f6f6c2e62756666657265644574686572000000008152905190819003601c0190206000908190612fb590612c15565b90503031811115612fc257fe5b919050565b6000610ec6612fd4612f75565b30319063ffffffff61335816565b600080606080670de0b6b3a7640000851015612ffa57fe5b600092505b84158015906130115750600254600154115b156130745761302f856801bc16d674ec80000063ffffffff61335816565b945061304a836801bc16d674ec80000063ffffffff6136d416565b600280546001810190915590935061306190613779565b9150915061306f8282613c7e565b612fff565b50909392505050565b604080517f6465706f6f6c732e4465506f6f6c2e6465706f736974656445746865720000008152905190819003601d019020613100906130c2908390611dc590612c15565b604080517f6465706f6f6c732e4465506f6f6c2e6465706f736974656445746865720000008152905190819003601d0190209063ffffffff61335416565b604080517f6465706f6f6c732e4465506f6f6c2e62756666657265644574686572000000008152905190819003601c01902061315190611ce490839061314590612c15565b9063ffffffff61335816565b6040805182815290517f76a397bea5768d4fca97ef47792796e35f98dc81b16c1de84e28a818e1f971089181900360200190a150565b604080517f6465706f6f6c732e5061757361626c652e73746f707065640000000000000000815290519081900360180190206131c290612c15565b15156131cd57600080fd5b604080517f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152905190819003601801902061321090600063ffffffff61335416565b6040517f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f990600090a1565b604080517f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152905190819003601801902061327690612c15565b156132e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f434f4e54524143545f49535f53544f5050454400000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152905190819003601801902061332590600163ffffffff61335416565b6040517f7acc84e34091ae817647a4c49116f5cc07f319078ba80f8f5fde37ea7e25cbd690600090a1565b4390565b9055565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f57000000000000000000000000000060208201526000908190848411156133fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b505050900390565b61340c816134bf565b151561347957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415f434f4e5452414354000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e4465506f6f6c2e6f7261636c65000000000000000000000081529051908190036015019020610d42908263ffffffff61335416565b5490565b60008073ffffffffffffffffffffffffffffffffffffffff831615156134e857600091506134f3565b823b90506000811191505b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905260009081806135868684614351565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515613628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526000906136c18582614382565b95945050505050565b8051602002815290565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f5700000000000000000000000000000060208201526000908383019084821015612e4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b60608060008181613789866143d0565b604080518181526060810182529194506020820161080080388339505084546020830152506001840154604082015260029093019291506137cd8260006030613b82565b6040805160608082526080820190925291965060208201610c0080388339019050509350600090505b60608110156138185782546020828601810191909152600190930192016137f6565b505050915091565b613829816134bf565b151561389657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415f434f4e5452414354000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e4465506f6f6c2e746f6b656e00000000000000000000000081529051908190036014019020610d42908263ffffffff61335416565b6138e1816134bf565b151561394e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415f434f4e5452414354000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f6465706f6f6c732e4465506f6f6c2e76616c696461746f72526567697374726181527f74696f6e0000000000000000000000000000000000000000000000000000000060208201529051908190036024019020610d42908263ffffffff61335416565b6139be6114fe565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015613a5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015610cfe578181015183820152602001610ce6565b50613a93613a66613350565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff61335416565b565b600080600060308551141515613aa757fe5b8351606014613ab257fe5b613abb866143d0565b602086015181556040860151608090811c811b6001830155600290910193509150600090505b6060811015613b00576020818501810151845560019093019201613ae1565b505050505050565b600080613b14836143d0565b9150600090505b600581101561204157600082820155600101613b1b565b604080517f6465706f6f6c732e4465506f6f6c2e6665650000000000000000000000000000815290519081900360120190206000908190613b7290612c15565b905063ffffffff811115612fc257fe5b606080828401855110151515613b9757600080fd5b82158015613bb057604051915060208201604052613bfa565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613be9578051835260209283019201613bd1565b5050858452601f01601f1916604052505b50949350505050565b600080600060308451141515613c1557fe5b50506020820151604083015181158015613c315750608081901c155b949350505050565b604080517f6465706f6f6c732e4465506f6f6c2e6c6173744f7261636c6545706f636800008152905190819003601e019020600090613c7790612c15565b1515905090565b6000806000806000806000805460018160011615610100020316600290049050600014151515613d0f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f454d5054595f5749544844524157414c5f43524544454e5449414c5300000000604482015290519081900360640190fd5b6801bc16d674ec8000009550613d2f86633b9aca0063ffffffff612e5816565b945085613d4686633b9aca0063ffffffff612d8a16565b14613d4d57fe5b613d5688614487565b6040518082805190602001908083835b60208310613d855780518252601f199092019160209182019101613d66565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209350613dc18760006040613b82565b6040518082805190602001908083835b60208310613df05780518252601f199092019160209182019101613dd1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020613e45613e40896040613e3b6040606061335890919063ffffffff16565b613b82565b614487565b6040518082805190602001908083835b60208310613e745780518252601f199092019160209182019101613e55565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b60208310613eee5780518252601f199092019160209182019101613ecf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020925083600060405160200180836000191660001916815260200182805460018160011615610100020316600290048015613f8c5780601f10613f6a576101008083540402835291820191613f8c565b820191906000526020600020905b815481529060010190602001808311613f78575b5050925050506040516020818303038152906040526040518082805190602001908083835b60208310613fd05780518252601f199092019160209182019101613fb1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206140068661451e565b60408051602080820193909352808201879052815180820383018152606090910191829052805190928291908401908083835b602083106140585780518252601f199092019160209182019101614039565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b602083106140d25780518252601f1990920191602091820191016140b3565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120945061410d9250503031905087613358565b9050614117610e62565b73ffffffffffffffffffffffffffffffffffffffff166322895118878a60008b876040518663ffffffff1660e01b8152600401808060200180602001806020018560001916600019168152602001848103845288818151815260200191508051906020019080838360005b8381101561419a578181015183820152602001614182565b50505050905090810190601f1680156141c75780820380516001836020036101000a031916815260200191505b5084810383528754600260001961010060018416150201909116048082526020909101908890801561423a5780601f1061420f5761010080835404028352916020019161423a565b820191906000526020600020905b81548152906001019060200180831161421d57829003601f168201915b5050848103825286518152865160209182019188019080838360005b8381101561426e578181015183820152602001614256565b50505050905090810190601f16801561429b5780820380516001836020036101000a031916815260200191505b509750505050505050506000604051808303818588803b1580156142be57600080fd5b505af11580156142d2573d6000803e3d6000fd5b5050505030318214905061434757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f455850454354494e475f4445504f5349545f544f5f48415050454e0000000000604482015290519081900360640190fd5b5050505050505050565b6000806000806040516020818751602089018a5afa9250600083111561437657805191505b50909590945092505050565b6000806040516020818551602087016000895af160008111156143c6573d80156143b357602081146143bc576143c4565b600193506143c4565b600183511493505b505b5090949350505050565b604080517f6465706f6f6c732e4465506f6f6c2e7369676e696e674b6579730000000000008152815190819003601a0181206020808301919091528183018490528251808303840181526060909201928390528151600093918291908401908083835b602083106144525780518252601f199092019160209182019101614433565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060001c95945050505050565b606080602083511015801561449e57506040835111155b15156144a657fe5b8251604014156144b8578291506134f3565b6040805160208082528183019092529080820161040080388339019050509050600060208201528251602014156144fa576144f38382614555565b91506134f3565b6144f383614519836000613e3b8851604061335890919063ffffffff16565b614555565b6000805b600881101561454457600883811c9360ff1692901b9190911790600101614522565b821561454c57fe5b5060c01b919050565b6060806040519050835180825260208201818101602087015b8183101561458657805183526020928301920161456e565b50855184518101855292509050808201602086015b818310156145b357805183526020928301920161459b565b509551919091011594909401601f01601f19166040529392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061462f578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082351617855561465c565b8280016001018555821561465c579182015b8281111561465c578235825591602001919060010190614641565b50610e5e92610ec99250905b80821115610e5e57600081556001016146685600a165627a7a7230582023086b3a5b28637bcf1ba5153c2d55c8bd27f37705622db06be5a9d77e7651580029", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/assets/DePoolOracle.json b/assets/DePoolOracle.json new file mode 100644 index 000000000..07410deea --- /dev/null +++ b/assets/DePoolOracle.json @@ -0,0 +1,534 @@ +{ + "contractName": "DePoolOracle", + "abi": [ + { + "constant": true, + "inputs": [], + "name": "hasInitialized", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pool", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_script", + "type": "bytes" + } + ], + "name": "getEVMScriptExecutor", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MANAGE_QUORUM", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getRecoveryVault", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "SET_POOL", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_pool", + "type": "address" + } + ], + "name": "setPool", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MANAGE_MEMBERS", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "token", + "type": "address" + } + ], + "name": "allowRecoverability", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "appId", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "initialize", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getInitializationBlock", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_token", + "type": "address" + } + ], + "name": "transferToVault", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_sender", + "type": "address" + }, + { + "name": "_role", + "type": "bytes32" + }, + { + "name": "_params", + "type": "uint256[]" + } + ], + "name": "canPerform", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getEVMScriptRegistry", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getLatestData", + "outputs": [ + { + "name": "epoch", + "type": "uint256" + }, + { + "name": "eth2balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_member", + "type": "address" + } + ], + "name": "addOracleMember", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getCurrentEpoch", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_quorum", + "type": "uint256" + } + ], + "name": "setQuorum", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getQuorum", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "kernel", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getOracleMembers", + "outputs": [ + { + "name": "", + "type": "address[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isPetrified", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MAX_MEMBERS", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "getEpochForTimestamp", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_epoch", + "type": "uint256" + }, + { + "name": "_eth2balance", + "type": "uint256" + } + ], + "name": "pushData", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_member", + "type": "address" + } + ], + "name": "removeOracleMember", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getEpochDurationSeconds", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "executor", + "type": "address" + }, + { + "indexed": false, + "name": "script", + "type": "bytes" + }, + { + "indexed": false, + "name": "input", + "type": "bytes" + }, + { + "indexed": false, + "name": "returnData", + "type": "bytes" + } + ], + "name": "ScriptResult", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "vault", + "type": "address" + }, + { + "indexed": true, + "name": "token", + "type": "address" + }, + { + "indexed": false, + "name": "amount", + "type": "uint256" + } + ], + "name": "RecoverToVault", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "member", + "type": "address" + } + ], + "name": "MemberAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "member", + "type": "address" + } + ], + "name": "MemberRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "quorum", + "type": "uint256" + } + ], + "name": "QuorumChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "epoch", + "type": "uint256" + }, + { + "indexed": false, + "name": "eth2balance", + "type": "uint256" + } + ], + "name": "AggregatedData", + "type": "event" + } + ], + "bytecode": "0x6080604052620000146200001a60201b60201c565b62000231565b6200002a6200011c60201b60201c565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a454400000000000000006020820152901562000106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000ca578181015183820152602001620000b0565b50505050905090810190601f168015620000f85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200011a6000196200014f60201b60201c565b565b60006200014a60008051602062002a2b83398151915260001b600019166200022960201b62001c6a1760201c565b905090565b6200015f6200011c60201b60201c565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015620001fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252838181518152602001915080519060200190808383600083811015620000ca578181015183820152602001620000b0565b506200022660008051602062002a2b833981519152826200022d602090811b620022bf17901c565b50565b5490565b9055565b6127ea80620002416000396000f30060806040526004361061014d5760003560e01c63ffffffff1680630803fac01461015257806316f0115b1461017b5780632914b9bd146101b95780632fa689bb1461021257806332f0a3b5146102395780633630450a1461024e5780634437152a146102635780636e93beb8146102935780637e7db6e1146102a857806380afdea8146102d65780638129fc1c146102eb5780638b3dd749146103005780639d4941d814610315578063a1658fad14610343578063a479e508146103b7578063ab757d61146103cc578063b164e437146103fa578063b97dd9e214610428578063c1ba4e591461043d578063c26c12eb14610455578063d4aae0c41461046a578063dabb57571461047f578063de4796ed146104e4578063ea0e35b1146104f9578063f08961e51461050e578063f0a664dd14610526578063f98fae8114610541578063fb94a2141461056f575b600080fd5b34801561015e57600080fd5b50610167610584565b604080519115158252519081900360200190f35b34801561018757600080fd5b506101906105ae565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101c557600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101909436949293602493928401919081908401838280828437509497506105ca9650505050505050565b34801561021e57600080fd5b506102276106bc565b60408051918252519081900360200190f35b34801561024557600080fd5b506101906106f1565b34801561025a57600080fd5b50610227610774565b34801561026f57600080fd5b5061029173ffffffffffffffffffffffffffffffffffffffff600435166107a9565b005b34801561029f57600080fd5b50610227610990565b3480156102b457600080fd5b5061016773ffffffffffffffffffffffffffffffffffffffff600435166109c5565b3480156102e257600080fd5b506102276109cb565b3480156102f757600080fd5b506102916109fb565b34801561030c57600080fd5b50610227610aaa565b34801561032157600080fd5b5061029173ffffffffffffffffffffffffffffffffffffffff60043516610ad5565b34801561034f57600080fd5b50604080516020600460443581810135838102808601850190965280855261016795833573ffffffffffffffffffffffffffffffffffffffff16956024803596369695606495939492019291829185019084908082843750949750610df79650505050505050565b3480156103c357600080fd5b50610190610f6b565b3480156103d857600080fd5b506103e161105f565b6040805192835260208301919091528051918290030190f35b34801561040657600080fd5b5061029173ffffffffffffffffffffffffffffffffffffffff60043516611069565b34801561043457600080fd5b506102276113cf565b34801561044957600080fd5b506102916004356113d9565b34801561046157600080fd5b5061022761159b565b34801561047657600080fd5b506101906115a1565b34801561048b57600080fd5b506104946115cc565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104d05781810151838201526020016104b8565b505050509050019250505060405180910390f35b3480156104f057600080fd5b5061016761163b565b34801561050557600080fd5b5061022761164e565b34801561051a57600080fd5b50610227600435611654565b34801561053257600080fd5b50610291600435602435611665565b34801561054d57600080fd5b5061029173ffffffffffffffffffffffffffffffffffffffff600435166118af565b34801561057b57600080fd5b50610227611c25565b60008061058f610aaa565b905080158015906105a75750806105a4611c2c565b10155b91505b5090565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60006105d4610f6b565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561063c578181015183820152602001610624565b50505050905090810190601f1680156106695780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561068857600080fd5b505af115801561069c573d6000803e3d6000fd5b505050506040513d60208110156106b257600080fd5b505190505b919050565b604080517f4d414e4147455f51554f52554d000000000000000000000000000000000000008152905190819003600d01902081565b60006106fb6115a1565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561074257600080fd5b505af1158015610756573d6000803e3d6000fd5b505050506040513d602081101561076c57600080fd5b505190505b90565b604080517f5345545f504f4f4c0000000000000000000000000000000000000000000000008152905190819003600801902081565b604080517f5345545f504f4f4c00000000000000000000000000000000000000000000000081528151908190036008018120600080835260208301909352916107f89133918491905b50610df7565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156108d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561089657818101518382015260200161087e565b50505050905090810190601f1680156108c35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506108db82611c30565b151561094857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f504f4f4c5f4e4f545f434f4e5452414354000000000000000000000000000000604482015290519081900360640190fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080517f4d414e4147455f4d454d424552530000000000000000000000000000000000008152905190819003600e01902081565b50600190565b60006109f67fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b611c6a565b905090565b610a03610aaa565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015610a9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50610aa8611c6e565b565b60006109f67febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e611c6a565b6000806000610ae3846109c5565b60408051808201909152601281527f5245434f5645525f444953414c4c4f57454400000000000000000000000000006020820152901515610b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50610b896106f1565b9250610b9483611c30565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515610c31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b5073ffffffffffffffffffffffffffffffffffffffff84161515610c9c576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015610c96573d6000803e3d6000fd5b50610d8c565b5082610cc473ffffffffffffffffffffffffffffffffffffffff82163063ffffffff611d4f16565b9150610ced73ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff611e8816565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515610d8a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080610e02610584565b1515610e115760009150610f63565b610e196115a1565b905073ffffffffffffffffffffffffffffffffffffffff81161515610e415760009150610f63565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef9106863087610e6988611f20565b60405163ffffffff861660e01b815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b83811015610ee5578181015183820152602001610ecd565b50505050905090810190601f168015610f125780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610f3457600080fd5b505af1158015610f48573d6000803e3d6000fd5b505050506040513d6020811015610f5e57600080fd5b505191505b509392505050565b600080610f766115a1565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561102d57600080fd5b505af1158015611041573d6000803e3d6000fd5b505050506040513d602081101561105757600080fd5b505192915050565b6003546004549091565b604080517f4d414e4147455f4d454d424552530000000000000000000000000000000000008152815190819003600e018120600080835260208301909352916110b69133918491906107f2565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611153576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50600054610100116111c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f544f4f5f4d414e595f4d454d4245525300000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216151561124a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4241445f415247554d454e540000000000000000000000000000000000000000604482015290519081900360640190fd5b61125382611f2a565b600019146112c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d454d4245525f45584953545300000000000000000000000000000000000000604482015290519081900360640190fd5b600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555461133b60078261277b565b506000546113639061135490600163ffffffff611fa316565b6006549063ffffffff61204e16565b1561136a57fe5b6000546001141561137a57600180555b6040805173ffffffffffffffffffffffffffffffffffffffff8416815290517fb251eb052afc73ffd02ffe85ad79990a8b3fed60d76dbc2fa2fdd7123dffd9149181900360200190a16113cb612058565b5050565b60006109f6612083565b604080517f4d414e4147455f51554f52554d000000000000000000000000000000000000008152815190819003600d018120600080835260208301909352916114269133918491906107f2565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b5060005482118015906114d557508115155b151561154257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f51554f52554d5f574f4e545f42455f4d41444500000000000000000000000000604482015290519081900360640190fd5b60018290556040805183815290517f027863d12a407097e086a48e36475bfc859d0b200b7e6f65b5fd3b218e46632e9181900360200190a1611582612083565b600554141561159357611593612095565b6113cb612058565b60015490565b60006109f67f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b611c6a565b6060600080548060200260200160405190810160405280929190818152602001828054801561163157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611606575b5050505050905090565b6000600019611648610aaa565b14905090565b61010081565b600061165f82612286565b92915050565b600080611670612083565b84146116dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f45504f43485f49535f4e4f545f43555252454e54000000000000000000000000604482015290519081900360640190fd5b6003548410156116e957fe5b60035484141561175a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f414c52454144595f46494e414c495a4544000000000000000000000000000000604482015290519081900360640190fd5b33915061176682611f2a565b90506000198114156117d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d454d4245525f4e4f545f464f554e4400000000000000000000000000000000604482015290519081900360640190fd5b60055484146117ed57600584905560006006555b600654611800908263ffffffff61204e16565b1561186c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f414c52454144595f5355424d4954544544000000000000000000000000000000604482015290519081900360640190fd5b6006546118819082600163ffffffff61229b16565b600655600780548491908390811061189557fe5b6000918252602090912001556118a9612095565b50505050565b604080517f4d414e4147455f4d454d424552530000000000000000000000000000000000008152815190819003600e01812060008083526020830190935282916118fd9033908390856107f2565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561199a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b5060015460005411611a0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f51554f52554d5f574f4e545f42455f4d41444500000000000000000000000000604482015290519081900360640190fd5b611a1684611f2a565b9250600019831415611a8957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d454d4245525f4e4f545f464f554e4400000000000000000000000000000000604482015290519081900360640190fd5b600054611a9d90600163ffffffff611fa316565b9150828214611b94576000805483908110611ab457fe5b6000918252602082200154815473ffffffffffffffffffffffffffffffffffffffff909116919085908110611ae557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556007805483908110611b4157fe5b9060005260206000200154600784815481101515611b5b57fe5b600091825260209091200155600654611b90908490611b80908563ffffffff61204e16565b600654919063ffffffff61229b16565b6006555b600654611ba99083600063ffffffff61229b16565b6006556000805490611bbf90600019830161277b565b506007805490611bd390600019830161277b565b506040805173ffffffffffffffffffffffffffffffffffffffff8616815290517f6e76fb4c77256006d9c38ec7d82b45a8c8f3c27b1d6766fffc42dfb8de6844929181900360200190a16118a9612058565b6201518090565b4390565b60008073ffffffffffffffffffffffffffffffffffffffff83161515611c595760009150611c64565b823b90506000811191505b50919050565b5490565b611c76610aaa565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611d12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50610aa8611d1e611c2c565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff6122bf16565b5490565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a08231000000000000000000000000000000000000000000000000000000001790526000908180611ddc86846122c3565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515611e7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090611f1785826122f4565b95945050505050565b8051602002815290565b60008054815b81811015611f96578373ffffffffffffffffffffffffffffffffffffffff16600082815481101515611f5e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611f8e57809250611f9c565b600101611f30565b60001992505b5050919050565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f5700000000000000000000000000006020820152600090819084841115612046576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b505050900390565b6001901b16151590565b6001541580159061206d575060015460005410155b151561207557fe5b6000546101001015610aa857fe5b60006109f6612090612342565b612286565b600654600060608180806120a886612346565b94506001548510156120b95761227e565b84158015906120ca57506000548511155b15156120d257fe5b846040519080825280602002602001820160405280156120fc578160200160208202803883390190505b5060008054919550935091508290505b8181101561216757612124868263ffffffff61204e16565b1561215f57600780548290811061213757fe5b600091825260209091200154845160018501948691811061215457fe5b602090810290910101525b60010161210c565b8351831461217157fe5b61217a84612383565b600455612185612083565b600381905560045460408051928352602083019190915280517f1e488050749dccbd5775165ad81befd48fe3393ab4ee16f8a72472dc4e54b91a9281900390910190a160025473ffffffffffffffffffffffffffffffffffffffff161561227e5760025460035460048054604080517fc0fdd280000000000000000000000000000000000000000000000000000000008152928301939093526024820152905173ffffffffffffffffffffffffffffffffffffffff9092169163c0fdd2809160448082019260009290919082900301818387803b15801561226557600080fd5b505af1158015612279573d6000803e3d6000fd5b505050505b505050505050565b600061165f826201518063ffffffff61246316565b600081156122af57506001821b83176122b8565b506001821b1983165b9392505050565b9055565b6000806000806040516020818751602089018a5afa925060008311156122e857805191505b50909590945092505050565b6000806040516020818551602087016000895af16000811115612338573d8015612325576020811461232e57612336565b60019350612336565b600183511493505b505b5090949350505050565b4290565b600080805b610100811015612374578360011660011415612368576001909101905b600193841c930161234b565b831561237c57fe5b5092915050565b8051600090151561239057fe5b6123998261251a565b815160029006600114156123d757815182906123bc90600263ffffffff61246316565b815181106123c657fe5b9060200190602002015190506106b7565b61245c60026124508461240660016123fa6002895161246390919063ffffffff16565b9063ffffffff611fa316565b8151811061241057fe5b90602001906020020151856124306002885161246390919063ffffffff16565b8151811061243a57fe5b602090810290910101519063ffffffff61254a16565b9063ffffffff61246316565b90506106b7565b60408051808201909152600d81527f4d4154485f4449565f5a45524f0000000000000000000000000000000000000060208201526000908190818411612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50828481151561251157fe5b04949350505050565b8051151561252757612547565b61254781600061254260018551611fa390919063ffffffff16565b6125ef565b50565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f5700000000000000000000000000000060208201526000908383019084821015610f63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b81816000818314156126005761227e565b856126266126196002612450888a63ffffffff611fa316565b879063ffffffff61254a16565b8151811061263057fe5b9060200190602002015190505b818311612755575b80868481518110151561265457fe5b90602001906020020151101561267c5761267583600163ffffffff61254a16565b9250612645565b80868381518110151561268b57fe5b9060200190602002015111156126b3576126ac82600163ffffffff611fa316565b915061267c565b8183116127505785828151811015156126c857fe5b9060200190602002015186848151811015156126e057fe5b9060200190602002015187858151811015156126f857fe5b906020019060200201888581518110151561270f57fe5b602090810290910101919091525261272e83600163ffffffff61254a16565b925081151561273c57612755565b61274d82600163ffffffff611fa316565b91505b61263d565b81851015612768576127688686846125ef565b8383101561227e5761227e8684866125ef565b81548183558181111561279f5760008381526020902061279f9181019083016127a4565b505050565b61077191905b808211156105aa57600081556001016127aa5600a165627a7a723058209bd1d725d0572d514ce3cc68c980a2776736fc8207e5dc800d004d45ac5b3f350029ebb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e", + "deployedBytecode": "0x60806040526004361061014d5760003560e01c63ffffffff1680630803fac01461015257806316f0115b1461017b5780632914b9bd146101b95780632fa689bb1461021257806332f0a3b5146102395780633630450a1461024e5780634437152a146102635780636e93beb8146102935780637e7db6e1146102a857806380afdea8146102d65780638129fc1c146102eb5780638b3dd749146103005780639d4941d814610315578063a1658fad14610343578063a479e508146103b7578063ab757d61146103cc578063b164e437146103fa578063b97dd9e214610428578063c1ba4e591461043d578063c26c12eb14610455578063d4aae0c41461046a578063dabb57571461047f578063de4796ed146104e4578063ea0e35b1146104f9578063f08961e51461050e578063f0a664dd14610526578063f98fae8114610541578063fb94a2141461056f575b600080fd5b34801561015e57600080fd5b50610167610584565b604080519115158252519081900360200190f35b34801561018757600080fd5b506101906105ae565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101c557600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101909436949293602493928401919081908401838280828437509497506105ca9650505050505050565b34801561021e57600080fd5b506102276106bc565b60408051918252519081900360200190f35b34801561024557600080fd5b506101906106f1565b34801561025a57600080fd5b50610227610774565b34801561026f57600080fd5b5061029173ffffffffffffffffffffffffffffffffffffffff600435166107a9565b005b34801561029f57600080fd5b50610227610990565b3480156102b457600080fd5b5061016773ffffffffffffffffffffffffffffffffffffffff600435166109c5565b3480156102e257600080fd5b506102276109cb565b3480156102f757600080fd5b506102916109fb565b34801561030c57600080fd5b50610227610aaa565b34801561032157600080fd5b5061029173ffffffffffffffffffffffffffffffffffffffff60043516610ad5565b34801561034f57600080fd5b50604080516020600460443581810135838102808601850190965280855261016795833573ffffffffffffffffffffffffffffffffffffffff16956024803596369695606495939492019291829185019084908082843750949750610df79650505050505050565b3480156103c357600080fd5b50610190610f6b565b3480156103d857600080fd5b506103e161105f565b6040805192835260208301919091528051918290030190f35b34801561040657600080fd5b5061029173ffffffffffffffffffffffffffffffffffffffff60043516611069565b34801561043457600080fd5b506102276113cf565b34801561044957600080fd5b506102916004356113d9565b34801561046157600080fd5b5061022761159b565b34801561047657600080fd5b506101906115a1565b34801561048b57600080fd5b506104946115cc565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104d05781810151838201526020016104b8565b505050509050019250505060405180910390f35b3480156104f057600080fd5b5061016761163b565b34801561050557600080fd5b5061022761164e565b34801561051a57600080fd5b50610227600435611654565b34801561053257600080fd5b50610291600435602435611665565b34801561054d57600080fd5b5061029173ffffffffffffffffffffffffffffffffffffffff600435166118af565b34801561057b57600080fd5b50610227611c25565b60008061058f610aaa565b905080158015906105a75750806105a4611c2c565b10155b91505b5090565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60006105d4610f6b565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561063c578181015183820152602001610624565b50505050905090810190601f1680156106695780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561068857600080fd5b505af115801561069c573d6000803e3d6000fd5b505050506040513d60208110156106b257600080fd5b505190505b919050565b604080517f4d414e4147455f51554f52554d000000000000000000000000000000000000008152905190819003600d01902081565b60006106fb6115a1565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561074257600080fd5b505af1158015610756573d6000803e3d6000fd5b505050506040513d602081101561076c57600080fd5b505190505b90565b604080517f5345545f504f4f4c0000000000000000000000000000000000000000000000008152905190819003600801902081565b604080517f5345545f504f4f4c00000000000000000000000000000000000000000000000081528151908190036008018120600080835260208301909352916107f89133918491905b50610df7565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156108d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561089657818101518382015260200161087e565b50505050905090810190601f1680156108c35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506108db82611c30565b151561094857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f504f4f4c5f4e4f545f434f4e5452414354000000000000000000000000000000604482015290519081900360640190fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080517f4d414e4147455f4d454d424552530000000000000000000000000000000000008152905190819003600e01902081565b50600190565b60006109f67fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b611c6a565b905090565b610a03610aaa565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015610a9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50610aa8611c6e565b565b60006109f67febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e611c6a565b6000806000610ae3846109c5565b60408051808201909152601281527f5245434f5645525f444953414c4c4f57454400000000000000000000000000006020820152901515610b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50610b896106f1565b9250610b9483611c30565b60408051808201909152601a81527f5245434f5645525f5641554c545f4e4f545f434f4e54524143540000000000006020820152901515610c31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b5073ffffffffffffffffffffffffffffffffffffffff84161515610c9c576040513031925073ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015610c96573d6000803e3d6000fd5b50610d8c565b5082610cc473ffffffffffffffffffffffffffffffffffffffff82163063ffffffff611d4f16565b9150610ced73ffffffffffffffffffffffffffffffffffffffff8216848463ffffffff611e8816565b60408051808201909152601d81527f5245434f5645525f544f4b454e5f5452414e534645525f4641494c45440000006020820152901515610d8a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b505b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b600080610e02610584565b1515610e115760009150610f63565b610e196115a1565b905073ffffffffffffffffffffffffffffffffffffffff81161515610e415760009150610f63565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef9106863087610e6988611f20565b60405163ffffffff861660e01b815273ffffffffffffffffffffffffffffffffffffffff808616600483019081529085166024830152604482018490526080606483019081528351608484015283519192909160a490910190602085019080838360005b83811015610ee5578181015183820152602001610ecd565b50505050905090810190601f168015610f125780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610f3457600080fd5b505af1158015610f48573d6000803e3d6000fd5b505050506040513d6020811015610f5e57600080fd5b505191505b509392505050565b600080610f766115a1565b604080517fbe00bbd80000000000000000000000000000000000000000000000000000000081527fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb60048201527fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616024820152905173ffffffffffffffffffffffffffffffffffffffff929092169163be00bbd8916044808201926020929091908290030181600087803b15801561102d57600080fd5b505af1158015611041573d6000803e3d6000fd5b505050506040513d602081101561105757600080fd5b505192915050565b6003546004549091565b604080517f4d414e4147455f4d454d424552530000000000000000000000000000000000008152815190819003600e018120600080835260208301909352916110b69133918491906107f2565b60408051808201909152600f81527f4150505f415554485f4641494c454400000000000000000000000000000000006020820152901515611153576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50600054610100116111c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f544f4f5f4d414e595f4d454d4245525300000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216151561124a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4241445f415247554d454e540000000000000000000000000000000000000000604482015290519081900360640190fd5b61125382611f2a565b600019146112c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d454d4245525f45584953545300000000000000000000000000000000000000604482015290519081900360640190fd5b600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555461133b60078261277b565b506000546113639061135490600163ffffffff611fa316565b6006549063ffffffff61204e16565b1561136a57fe5b6000546001141561137a57600180555b6040805173ffffffffffffffffffffffffffffffffffffffff8416815290517fb251eb052afc73ffd02ffe85ad79990a8b3fed60d76dbc2fa2fdd7123dffd9149181900360200190a16113cb612058565b5050565b60006109f6612083565b604080517f4d414e4147455f51554f52554d000000000000000000000000000000000000008152815190819003600d018120600080835260208301909352916114269133918491906107f2565b60408051808201909152600f81527f4150505f415554485f4641494c4544000000000000000000000000000000000060208201529015156114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b5060005482118015906114d557508115155b151561154257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f51554f52554d5f574f4e545f42455f4d41444500000000000000000000000000604482015290519081900360640190fd5b60018290556040805183815290517f027863d12a407097e086a48e36475bfc859d0b200b7e6f65b5fd3b218e46632e9181900360200190a1611582612083565b600554141561159357611593612095565b6113cb612058565b60015490565b60006109f67f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b611c6a565b6060600080548060200260200160405190810160405280929190818152602001828054801561163157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611606575b5050505050905090565b6000600019611648610aaa565b14905090565b61010081565b600061165f82612286565b92915050565b600080611670612083565b84146116dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f45504f43485f49535f4e4f545f43555252454e54000000000000000000000000604482015290519081900360640190fd5b6003548410156116e957fe5b60035484141561175a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f414c52454144595f46494e414c495a4544000000000000000000000000000000604482015290519081900360640190fd5b33915061176682611f2a565b90506000198114156117d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d454d4245525f4e4f545f464f554e4400000000000000000000000000000000604482015290519081900360640190fd5b60055484146117ed57600584905560006006555b600654611800908263ffffffff61204e16565b1561186c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f414c52454144595f5355424d4954544544000000000000000000000000000000604482015290519081900360640190fd5b6006546118819082600163ffffffff61229b16565b600655600780548491908390811061189557fe5b6000918252602090912001556118a9612095565b50505050565b604080517f4d414e4147455f4d454d424552530000000000000000000000000000000000008152815190819003600e01812060008083526020830190935282916118fd9033908390856107f2565b60408051808201909152600f81527f4150505f415554485f4641494c45440000000000000000000000000000000000602082015290151561199a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b5060015460005411611a0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f51554f52554d5f574f4e545f42455f4d41444500000000000000000000000000604482015290519081900360640190fd5b611a1684611f2a565b9250600019831415611a8957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d454d4245525f4e4f545f464f554e4400000000000000000000000000000000604482015290519081900360640190fd5b600054611a9d90600163ffffffff611fa316565b9150828214611b94576000805483908110611ab457fe5b6000918252602082200154815473ffffffffffffffffffffffffffffffffffffffff909116919085908110611ae557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556007805483908110611b4157fe5b9060005260206000200154600784815481101515611b5b57fe5b600091825260209091200155600654611b90908490611b80908563ffffffff61204e16565b600654919063ffffffff61229b16565b6006555b600654611ba99083600063ffffffff61229b16565b6006556000805490611bbf90600019830161277b565b506007805490611bd390600019830161277b565b506040805173ffffffffffffffffffffffffffffffffffffffff8616815290517f6e76fb4c77256006d9c38ec7d82b45a8c8f3c27b1d6766fffc42dfb8de6844929181900360200190a16118a9612058565b6201518090565b4390565b60008073ffffffffffffffffffffffffffffffffffffffff83161515611c595760009150611c64565b823b90506000811191505b50919050565b5490565b611c76610aaa565b60408051808201909152601881527f494e49545f414c52454144595f494e495449414c495a4544000000000000000060208201529015611d12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50610aa8611d1e611c2c565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e9063ffffffff6122bf16565b5490565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a08231000000000000000000000000000000000000000000000000000000001790526000908180611ddc86846122c3565b60408051808201909152601c81527f534146455f4552435f32305f42414c414e43455f52455645525445440000000060208201529193509150821515611e7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b5095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052600090611f1785826122f4565b95945050505050565b8051602002815290565b60008054815b81811015611f96578373ffffffffffffffffffffffffffffffffffffffff16600082815481101515611f5e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611f8e57809250611f9c565b600101611f30565b60001992505b5050919050565b60408051808201909152601281527f4d4154485f5355425f554e444552464c4f5700000000000000000000000000006020820152600090819084841115612046576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b505050900390565b6001901b16151590565b6001541580159061206d575060015460005410155b151561207557fe5b6000546101001015610aa857fe5b60006109f6612090612342565b612286565b600654600060608180806120a886612346565b94506001548510156120b95761227e565b84158015906120ca57506000548511155b15156120d257fe5b846040519080825280602002602001820160405280156120fc578160200160208202803883390190505b5060008054919550935091508290505b8181101561216757612124868263ffffffff61204e16565b1561215f57600780548290811061213757fe5b600091825260209091200154845160018501948691811061215457fe5b602090810290910101525b60010161210c565b8351831461217157fe5b61217a84612383565b600455612185612083565b600381905560045460408051928352602083019190915280517f1e488050749dccbd5775165ad81befd48fe3393ab4ee16f8a72472dc4e54b91a9281900390910190a160025473ffffffffffffffffffffffffffffffffffffffff161561227e5760025460035460048054604080517fc0fdd280000000000000000000000000000000000000000000000000000000008152928301939093526024820152905173ffffffffffffffffffffffffffffffffffffffff9092169163c0fdd2809160448082019260009290919082900301818387803b15801561226557600080fd5b505af1158015612279573d6000803e3d6000fd5b505050505b505050505050565b600061165f826201518063ffffffff61246316565b600081156122af57506001821b83176122b8565b506001821b1983165b9392505050565b9055565b6000806000806040516020818751602089018a5afa925060008311156122e857805191505b50909590945092505050565b6000806040516020818551602087016000895af16000811115612338573d8015612325576020811461232e57612336565b60019350612336565b600183511493505b505b5090949350505050565b4290565b600080805b610100811015612374578360011660011415612368576001909101905b600193841c930161234b565b831561237c57fe5b5092915050565b8051600090151561239057fe5b6123998261251a565b815160029006600114156123d757815182906123bc90600263ffffffff61246316565b815181106123c657fe5b9060200190602002015190506106b7565b61245c60026124508461240660016123fa6002895161246390919063ffffffff16565b9063ffffffff611fa316565b8151811061241057fe5b90602001906020020151856124306002885161246390919063ffffffff16565b8151811061243a57fe5b602090810290910101519063ffffffff61254a16565b9063ffffffff61246316565b90506106b7565b60408051808201909152600d81527f4d4154485f4449565f5a45524f0000000000000000000000000000000000000060208201526000908190818411612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b50828481151561251157fe5b04949350505050565b8051151561252757612547565b61254781600061254260018551611fa390919063ffffffff16565b6125ef565b50565b60408051808201909152601181527f4d4154485f4144445f4f564552464c4f5700000000000000000000000000000060208201526000908383019084821015610f63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561089657818101518382015260200161087e565b81816000818314156126005761227e565b856126266126196002612450888a63ffffffff611fa316565b879063ffffffff61254a16565b8151811061263057fe5b9060200190602002015190505b818311612755575b80868481518110151561265457fe5b90602001906020020151101561267c5761267583600163ffffffff61254a16565b9250612645565b80868381518110151561268b57fe5b9060200190602002015111156126b3576126ac82600163ffffffff611fa316565b915061267c565b8183116127505785828151811015156126c857fe5b9060200190602002015186848151811015156126e057fe5b9060200190602002015187858151811015156126f857fe5b906020019060200201888581518110151561270f57fe5b602090810290910101919091525261272e83600163ffffffff61254a16565b925081151561273c57612755565b61274d82600163ffffffff611fa316565b91505b61263d565b81851015612768576127688686846125ef565b8383101561227e5761227e8684866125ef565b81548183558181111561279f5760008381526020902061279f9181019083016127a4565b505050565b61077191905b808211156105aa57600081556001016127aa5600a165627a7a723058209bd1d725d0572d514ce3cc68c980a2776736fc8207e5dc800d004d45ac5b3f350029", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/assets/IDePool.json b/assets/IDePool.json deleted file mode 100644 index c419aa74d..000000000 --- a/assets/IDePool.json +++ /dev/null @@ -1,847 +0,0 @@ -{ - "contractName": "DePool", - "abi": [ - { - "constant": false, - "inputs": [], - "name": "resume", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stop", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "hasInitialized", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getValidatorRegistrationContract", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_feeBasisPoints", - "type": "uint32" - } - ], - "name": "setFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getToken", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_script", - "type": "bytes" - } - ], - "name": "getEVMScriptExecutor", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getRecoveryVault", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "DEPOSIT_SIZE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PAUSE_ROLE", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "SET_ORACLE", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isStopped", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MANAGE_WITHDRAWAL_KEY", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getBufferedEther", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "SIGNATURE_LENGTH", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getWithdrawalCredentials", - "outputs": [ - { - "name": "", - "type": "bytes" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getUnusedSigningKeyCount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getTotalSigningKeyCount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_oracle", - "type": "address" - } - ], - "name": "setOracle", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "token", - "type": "address" - } - ], - "name": "allowRecoverability", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "appId", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getOracle", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getInitializationBlock", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MANAGE_FEE", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_token", - "type": "address" - } - ], - "name": "transferToVault", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_sender", - "type": "address" - }, - { - "name": "_role", - "type": "bytes32" - }, - { - "name": "_params", - "type": "uint256[]" - } - ], - "name": "canPerform", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_referral", - "type": "address" - } - ], - "name": "submit", - "outputs": [ - { - "name": "StETH", - "type": "uint256" - } - ], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "WITHDRAWAL_CREDENTIALS_LENGTH", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getEVMScriptRegistry", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PUBKEY_LENGTH", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_amount", - "type": "uint256" - }, - { - "name": "_pubkeyHash", - "type": "bytes32" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_index", - "type": "uint256" - } - ], - "name": "getSigningKey", - "outputs": [ - { - "name": "key", - "type": "bytes" - }, - { - "name": "used", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_token", - "type": "address" - }, - { - "name": "validatorRegistration", - "type": "address" - }, - { - "name": "_oracle", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_epoch", - "type": "uint256" - }, - { - "name": "_eth2balance", - "type": "uint256" - } - ], - "name": "reportEther2", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_withdrawalCredentials", - "type": "bytes" - } - ], - "name": "setWithdrawalCredentials", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getEther2Stat", - "outputs": [ - { - "name": "deposited", - "type": "uint256" - }, - { - "name": "remote", - "type": "uint256" - }, - { - "name": "liabilities", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_index", - "type": "uint256" - } - ], - "name": "removeSigningKey", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getFee", - "outputs": [ - { - "name": "feeBasisPoints", - "type": "uint32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getTotalControlledEther", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kernel", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isPetrified", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_quantity", - "type": "uint256" - }, - { - "name": "_pubkeys", - "type": "bytes" - }, - { - "name": "_signatures", - "type": "bytes" - } - ], - "name": "addSigningKeys", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MANAGE_SIGNING_KEYS", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "executor", - "type": "address" - }, - { - "indexed": false, - "name": "script", - "type": "bytes" - }, - { - "indexed": false, - "name": "input", - "type": "bytes" - }, - { - "indexed": false, - "name": "returnData", - "type": "bytes" - } - ], - "name": "ScriptResult", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Stopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Resumed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "vault", - "type": "address" - }, - { - "indexed": true, - "name": "token", - "type": "address" - }, - { - "indexed": false, - "name": "amount", - "type": "uint256" - } - ], - "name": "RecoverToVault", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "feeBasisPoints", - "type": "uint32" - } - ], - "name": "FeeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "withdrawalCredentials", - "type": "bytes" - } - ], - "name": "WithdrawalCredentialsSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "pubkey", - "type": "bytes" - } - ], - "name": "SigningKeyAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "pubkey", - "type": "bytes" - } - ], - "name": "SigningKeyRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "name": "referral", - "type": "address" - } - ], - "name": "Submitted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "amount", - "type": "uint256" - } - ], - "name": "Unbuffered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "name": "tokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "name": "sentFromBuffer", - "type": "uint256" - }, - { - "indexed": true, - "name": "pubkeyHash", - "type": "bytes32" - }, - { - "indexed": false, - "name": "etherAmount", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - } - ], - "bytecode": "60806040526200001d62000023640100000000026401000000009004565b62000309565b60006200003e6200015e640100000000026401000000009004565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000e5578082015181840152602081019050620000c8565b50505050905090810190601f168015620001135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200015c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620001ab640100000000026401000000009004565b565b6000620001a67febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e60010260001916620002f764010000000002620043b3176401000000009004565b905090565b6000620001c66200015e640100000000026401000000009004565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515620002a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200026d57808201518184015260208101905062000250565b50505050905090810190601f1680156200029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50620002f4817febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166200030264010000000002620041e0179091906401000000009004565b50565b600081549050919050565b8082555050565b615a1380620003196000396000f30060806040526004361061020f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063046f7da21461021c57806307da68f5146102335780630803fac01461024a578063089e56df146102795780631ab971ab146102d057806321df0da7146103035780632914b9bd1461035a57806332f0a3b51461040357806336bf33251461045a578063389ed267146104855780633c1c2dc0146104b85780633f683b6a146104eb578063435721da1461051a57806347b714e01461054d578063540bc5ea1461057857806356396715146105a357806367e501e314610633578063693599de1461065e5780637adbf973146106895780637e7db6e1146106cc57806380afdea814610727578063833b1fce1461075a5780638b3dd749146107b15780639aaa2d15146107dc5780639d4941d81461080f578063a1658fad14610852578063a1903eab146108fe578063a30448c014610948578063a479e50814610973578063a4d55d1d146109ca578063a8d2021a146109f5578063b6f0ac5314610a30578063c0c53b8b14610ae1578063c0fdd28014610b64578063c4cf71c914610b9b578063c6281dbc14610bd6578063c9e6f7a914610c0f578063ced72f8714610c3c578063cf01b2f014610c73578063d4aae0c414610c9e578063de4796ed14610cf5578063ec01fa4f14610d24578063f31bd9c114610d81575b6102196000610db4565b50005b34801561022857600080fd5b50610231611204565b005b34801561023f57600080fd5b5061024861135f565b005b34801561025657600080fd5b5061025f6114ba565b604051808215151515815260200191505060405180910390f35b34801561028557600080fd5b5061028e6114e5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102dc57600080fd5b50610301600480360381019080803563ffffffff169060200190929190505050611554565b005b34801561030f57600080fd5b5061031861173d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036657600080fd5b506103c1600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611786565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040f57600080fd5b506104186118a5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046657600080fd5b5061046f611952565b6040518082815260200191505060405180910390f35b34801561049157600080fd5b5061049a61195f565b60405180826000191660001916815260200191505060405180910390f35b3480156104c457600080fd5b506104cd611998565b60405180826000191660001916815260200191505060405180910390f35b3480156104f757600080fd5b506105006119d1565b604051808215151515815260200191505060405180910390f35b34801561052657600080fd5b5061052f611a1a565b60405180826000191660001916815260200191505060405180910390f35b34801561055957600080fd5b50610562611a53565b6040518082815260200191505060405180910390f35b34801561058457600080fd5b5061058d611a62565b6040518082815260200191505060405180910390f35b3480156105af57600080fd5b506105b8611a67565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105f85780820151818401526020810190506105dd565b50505050905090810190601f1680156106255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561063f57600080fd5b50610648611b09565b6040518082815260200191505060405180910390f35b34801561066a57600080fd5b50610673611b27565b6040518082815260200191505060405180910390f35b34801561069557600080fd5b506106ca600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b31565b005b3480156106d857600080fd5b5061070d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c8e565b604051808215151515815260200191505060405180910390f35b34801561073357600080fd5b5061073c611c99565b60405180826000191660001916815260200191505060405180910390f35b34801561076657600080fd5b5061076f611cd0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107bd57600080fd5b506107c6611d19565b6040518082815260200191505060405180910390f35b3480156107e857600080fd5b506107f1611d50565b60405180826000191660001916815260200191505060405180910390f35b34801561081b57600080fd5b50610850600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d89565b005b34801561085e57600080fd5b506108e4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560001916906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612056565b604051808215151515815260200191505060405180910390f35b610932600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612252565b6040518082815260200191505060405180910390f35b34801561095457600080fd5b5061095d612264565b6040518082815260200191505060405180910390f35b34801561097f57600080fd5b50610988612269565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109d657600080fd5b506109df612384565b6040518082815260200191505060405180910390f35b348015610a0157600080fd5b50610a2e600480360381019080803590602001909291908035600019169060200190929190505050612389565b005b348015610a3c57600080fd5b50610a5b600480360381019080803590602001909291905050506128b9565b604051808060200183151515158152602001828103825284818151815260200191508051906020019080838360005b83811015610aa5578082015181840152602081019050610a8a565b50505050905090810190601f168015610ad25780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610aed57600080fd5b50610b62600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612954565b005b348015610b7057600080fd5b50610b996004803603810190808035906020019092919080359060200190929190505050612a66565b005b348015610ba757600080fd5b50610bd4600480360381019080803590602001908201803590602001919091929391929390505050612c75565b005b348015610be257600080fd5b50610beb612eb1565b60405180848152602001838152602001828152602001935050505060405180910390f35b348015610c1b57600080fd5b50610c3a60048036038101908080359060200190929190505050612f87565b005b348015610c4857600080fd5b50610c516132d5565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b348015610c7f57600080fd5b50610c886132e4565b6040518082815260200191505060405180910390f35b348015610caa57600080fd5b50610cb36132f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d0157600080fd5b50610d0a61332a565b604051808215151515815260200191505060405180910390f35b348015610d3057600080fd5b50610d7f6004803603810190808035906020019092919080359060200190820180359060200191909192939192939080359060200190820180359060200191909192939192939050505061335b565b005b348015610d8d57600080fd5b50610d96613830565b60405180826000191660001916815260200191505060405180910390f35b600080600080600080610dff60405180807f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152506018019050604051809103902060001916613869565b151515610e74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f434f4e54524143545f49535f53544f505045440000000000000000000000000081525060200191505060405180910390fd5b33945034935060008414151515610ef3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5a45524f5f4445504f534954000000000000000000000000000000000000000081525060200191505060405180910390fd5b610efb613874565b60001415610f0b57839550611091565b6000610f1561173d565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610f7857600080fd5b505af1158015610f8c573d6000803e3d6000fd5b505050506040513d6020811015610fa257600080fd5b810190808051906020019092919050505014151515610fbd57fe5b61108e610fc8613874565b611080610fd361173d565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561103657600080fd5b505af115801561104a573d6000803e3d6000fd5b505050506040513d602081101561106057600080fd5b810190808051906020019092919050505087613a0b90919063ffffffff16565b613b1d90919063ffffffff16565b95505b61109961173d565b73ffffffffffffffffffffffffffffffffffffffff166340c10f1986886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561113b57600080fd5b505af115801561114f573d6000803e3d6000fd5b5050505061115e858589613c1b565b611166613d07565b92506801bc16d674ec800000831015156111fa57611182613d78565b91506111bb6801bc16d674ec8000006111ad6801bc16d674ec80000086613b1d90919063ffffffff16565b613a0b90919063ffffffff16565b90508281111580156111ce575060008114155b15156111d657fe5b6111e76111e282613db0565b613e5b565b816111f0613d78565b1415156111f957fe5b5b5050505050919050565b60405180807f50415553455f524f4c4500000000000000000000000000000000000000000000815250600a01905060405180910390206112753382600060405190808252806020026020018201604052801561126f5781602001602082028038833980820191505090505b50612056565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515611353576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113185780820151818401526020810190506112fd565b50505050905090810190601f1680156113455780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061135c613fd3565b50565b60405180807f50415553455f524f4c4500000000000000000000000000000000000000000000815250600a01905060405180910390206113d0338260006040519080825280602002602001820160405280156113ca5781602001602082028038833980820191505090505b50612056565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611473578082015181840152602081019050611458565b50505050905090810190601f1680156114a05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506114b761409b565b50565b6000806114c5611d19565b9050600081141580156114df5750806114dc6141cd565b10155b91505090565b600061154f60405180807f6465706f6f6c732e4465506f6f6c2e76616c696461746f72526567697374726181526020017f74696f6e0000000000000000000000000000000000000000000000000000000081525060240190506040518091039020600019166141d5565b905090565b60405180807f4d414e4147455f46454500000000000000000000000000000000000000000000815250600a01905060405180910390206115c5338260006040519080825280602002602001820160405280156115bf5781602001602082028038833980820191505090505b50612056565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156116a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561166857808201518184015260208101905061164d565b50505050905090810190601f1680156116955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506116f68263ffffffff1660405180807f6465706f6f6c732e4465506f6f6c2e666565000000000000000000000000000081525060120190506040518091039020600019166141e090919063ffffffff16565b7ff489d8b93b3874572cc94319f109187d1ea814b9de5a3d9e54c48c1ac0d57cad82604051808263ffffffff1663ffffffff16815260200191505060405180910390a15050565b600061178160405180807f6465706f6f6c732e4465506f6f6c2e746f6b656e00000000000000000000000081525060140190506040518091039020600019166141d5565b905090565b6000611790612269565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118175780820151818401526020810190506117fc565b50505050905090810190601f1680156118445780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561186357600080fd5b505af1158015611877573d6000803e3d6000fd5b505050506040513d602081101561188d57600080fd5b81019080805190602001909291905050509050919050565b60006118af6132f3565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561191257600080fd5b505af1158015611926573d6000803e3d6000fd5b505050506040513d602081101561193c57600080fd5b8101908080519060200190929190505050905090565b6801bc16d674ec80000081565b60405180807f50415553455f524f4c4500000000000000000000000000000000000000000000815250600a019050604051809103902081565b60405180807f5345545f4f5241434c4500000000000000000000000000000000000000000000815250600a019050604051809103902081565b6000611a1560405180807f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152506018019050604051809103902060001916613869565b905090565b60405180807f4d414e4147455f5749544844524157414c5f4b455900000000000000000000008152506015019050604051809103902081565b6000611a5d613d07565b905090565b606081565b606060008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aff5780601f10611ad457610100808354040283529160200191611aff565b820191906000526020600020905b815481529060010190602001808311611ae257829003601f168201915b5050505050905090565b6000611b226002546001546141e790919063ffffffff16565b905090565b6000600154905090565b60405180807f5345545f4f5241434c4500000000000000000000000000000000000000000000815250600a0190506040518091039020611ba233826000604051908082528060200260200182016040528015611b9c5781602001602082028038833980820191505090505b50612056565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515611c80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611c45578082015181840152602081019050611c2a565b50505050905090810190601f168015611c725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611c8a826142dc565b5050565b600060019050919050565b6000611ccb7fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b600102600019166143a8565b905090565b6000611d1460405180807f6465706f6f6c732e4465506f6f6c2e6f7261636c65000000000000000000000081525060150190506040518091039020600019166141d5565b905090565b6000611d4b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166143b3565b905090565b60405180807f4d414e4147455f46454500000000000000000000000000000000000000000000815250600a019050604051809103902081565b6000806000611d9784611c8e565b1515611e0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5245434f5645525f444953414c4c4f574544000000000000000000000000000081525060200191505060405180910390fd5b611e136118a5565b9250611e1e836143be565b1515611e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5245434f5645525f5641554c545f4e4f545f434f4e545241435400000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f1d57611ecf613d78565b91508273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611f17573d6000803e3d6000fd5b50611feb565b839050611f49308273ffffffffffffffffffffffffffffffffffffffff1661441090919063ffffffff16565b9150611f7683838373ffffffffffffffffffffffffffffffffffffffff166145ea9092919063ffffffff16565b1515611fea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5245434f5645525f544f4b454e5f5452414e534645525f4641494c454400000081525060200191505060405180910390fd5b5b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f596caf56044b55fb8c4ca640089bbc2b63cae3e978b851f5745cbb7c5b288e02846040518082815260200191505060405180910390a350505050565b6000806120616114ba565b1515612070576000915061224a565b6120786132f3565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120b8576000915061224a565b8073ffffffffffffffffffffffffffffffffffffffff1663fdef91068630876120e0886146ca565b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121bd5780820151818401526020810190506121a2565b50505050905090810190601f1680156121ea5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561220c57600080fd5b505af1158015612220573d6000803e3d6000fd5b505050506040513d602081101561223657600080fd5b810190808051906020019092919050505091505b509392505050565b600061225d82610db4565b9050919050565b602081565b6000806122746132f3565b73ffffffffffffffffffffffffffffffffffffffff1663be00bbd87fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb6001027fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360001916600019168152602001826000191660001916815260200192505050602060405180830381600087803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b505050506040513d602081101561236a57600080fd5b810190808051906020019092919050505090508091505090565b603081565b60008060008060006123d360405180807f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152506018019050604051809103902060001916613869565b151515612448576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f434f4e54524143545f49535f53544f505045440000000000000000000000000081525060200191505060405180910390fd5b33945061245361173d565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156124b657600080fd5b505af11580156124ca573d6000803e3d6000fd5b505050506040513d60208110156124e057600080fd5b810190808051906020019092919050505093506124fb61173d565b73ffffffffffffffffffffffffffffffffffffffff16639dc29fac86896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561259d57600080fd5b505af11580156125b1573d6000803e3d6000fd5b505050506125e1846125d36125c4613874565b8a613a0b90919063ffffffff16565b613b1d90919063ffffffff16565b92508260001415151561265c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f54585f544f4f5f534d414c4c000000000000000000000000000000000000000081525060200191505060405180910390fd5b60009150612668613d07565b9050806000141515612740578281116126815780612683565b825b91506126e361269b83836141e790919063ffffffff16565b60405180807f6465706f6f6c732e4465506f6f6c2e6275666665726564457468657200000000815250601c0190506040518091039020600019166141e090919063ffffffff16565b6126f682846141e790919063ffffffff16565b92508473ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561273e573d6000803e3d6000fd5b505b82600014151561284d576127e96127a18461279360405180807f6465706f6f6c732e4465506f6f6c2e77697468647261776e4574686572320000815250601e0190506040518091039020600019166143b3565b6146e190919063ffffffff16565b60405180807f6465706f6f6c732e4465506f6f6c2e77697468647261776e4574686572320000815250601e0190506040518091039020600019166141e090919063ffffffff16565b6003604080519081016040528085815260200188600019168152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000155602082015181600101906000191690555050505b85600019168573ffffffffffffffffffffffffffffffffffffffff167fcf8f72073b13b07fe51690fd7c43414d1a0ef6f21c9896ba1814a08be9bdab3a89858760405180848152602001838152602001828152602001935050505060405180910390a350505050505050565b60606000606060015484101515612938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4b45595f4e4f545f464f554e440000000000000000000000000000000000000081525060200191505060405180910390fd5b612941846147d6565b5090508060025485109250925050915091565b600061295e611d19565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515612a3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a025780820151818401526020810190506129e7565b50505050905090810190601f168015612a2f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612a47836148e4565b612a50826149b0565b612a59816142dc565b612a61614aa2565b505050565b612a6e611cd0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4150505f415554485f4641494c4544000000000000000000000000000000000081525060200191505060405180910390fd5b81600014151515612b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f5a45524f5f45504f43480000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612bcb60405180807f6465706f6f6c732e4465506f6f6c2e6c6173744f7261636c6545706f63680000815250601e0190506040518091039020600019166143b3565b82111515612bd857612c71565b612c248260405180807f6465706f6f6c732e4465506f6f6c2e6c6173744f7261636c6545706f63680000815250601e0190506040518091039020600019166141e090919063ffffffff16565b612c708160405180807f6465706f6f6c732e4465506f6f6c2e72656d6f74654574686572320000000000815250601b0190506040518091039020600019166141e090919063ffffffff16565b5b5050565b60405180807f4d414e4147455f5749544844524157414c5f4b4559000000000000000000000081525060150190506040518091039020612ce633826000604051908082528060200260200182016040528015612ce05781602001602082028038833980820191505090505b50612056565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612dc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d89578082015181840152602081019050612d6e565b50505050905090810190601f168015612db65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50602083839050141515612e40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f494e56414c49445f4c454e47544800000000000000000000000000000000000081525060200191505060405180910390fd5b828260009190612e51929190615942565b506002546001819055507fa9f8f710d9fd2abac6df2d13d7a3c4fd0ba6a71720fb2a12cce3101c3004041b8383604051808060200182810382528484828181526020019250808284378201915050935050505060405180910390a1505050565b6000806000612ef860405180807f6465706f6f6c732e4465506f6f6c2e6465706f73697465644574686572000000815250601d0190506040518091039020600019166143b3565b9250612f3c60405180807f6465706f6f6c732e4465506f6f6c2e72656d6f74654574686572320000000000815250601b0190506040518091039020600019166143b3565b9150612f8060405180807f6465706f6f6c732e4465506f6f6c2e77697468647261776e4574686572320000815250601e0190506040518091039020600019166143b3565b9050909192565b6060600060608060405180807f4d414e4147455f5349474e494e475f4b4559530000000000000000000000000081525060130190506040518091039020612fff33826000604051908082528060200260200182016040528015612ff95781602001602082028038833980820191505090505b50612056565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156130dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130a2578082015181840152602081019050613087565b50505050905090810190601f1680156130cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060015486101515613157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4b45595f4e4f545f464f554e440000000000000000000000000000000000000081525060200191505060405180910390fd5b60025486101515156131d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4b45595f5741535f55534544000000000000000000000000000000000000000081525060200191505060405180910390fd5b6131da866147d6565b5094506131f2600180546141e790919063ffffffff16565b93508386101561321557613205846147d6565b92509250613214868484614bcf565b5b61321e84614c85565b600160008154809291906001900391905055507f835910185867f432eb3ebcf44cf62326c0400d12fea03697b64ee5565eeaec6a856040518080602001828103825283818151815260200191508051906020019080838360005b83811015613293578082015181840152602081019050613278565b50505050905090810190601f1680156132c05780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505050505050565b60006132df614cc9565b905090565b60006132ee613874565b905090565b60006133257f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b600102600019166141d5565b905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613355611d19565b14905090565b600060608060405180807f4d414e4147455f5349474e494e475f4b45595300000000000000000000000000815250601301905060405180910390206133d1338260006040519080825280602002602001820160405280156133cb5781602001602082028038833980820191505090505b50612056565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156134af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613474578082015181840152602081019050613459565b50505050905090810190601f1680156134a15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008914151515613529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260078152602001807f4e4f5f4b4559530000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61353d60308a613a0b90919063ffffffff16565b888890501415156135b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f494e56414c49445f4c454e47544800000000000000000000000000000000000081525060200191505060405180910390fd5b6135ca60608a613a0b90919063ffffffff16565b86869050141515613643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f494e56414c49445f4c454e47544800000000000000000000000000000000000081525060200191505060405180910390fd5b600093505b8884101561380a5761369188888080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050603086026030614d49565b925061369c83614dd6565b151515613711576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f454d5054595f4b4559000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61375286868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050606086026060614d49565b915061376384600154018484614bcf565b7fc07899cb9884344fbbc82bc8c9a50f8aa3b37ee63b7c65331f156f78d817c343836040518080602001828103825283818151815260200191508051906020019080838360005b838110156137c55780820151818401526020810190506137aa565b50505050905090810190601f1680156137f25780820380516001836020036101000a031916815260200191505b509250505060405180910390a1836001019350613648565b61381f896001546146e190919063ffffffff16565b600181905550505050505050505050565b60405180807f4d414e4147455f5349474e494e475f4b455953000000000000000000000000008152506013019050604051809103902081565b600081549050919050565b60008060008060006138be60405180807f6465706f6f6c732e4465506f6f6c2e72656d6f74654574686572320000000000815250601b0190506040518091039020600019166143b3565b935061390260405180807f6465706f6f6c732e4465506f6f6c2e6465706f73697465644574686572000000815250601d0190506040518091039020600019166143b3565b925061393161390f614e39565b613919578361391b565b845b613923613d07565b6146e190919063ffffffff16565b915061397560405180807f6465706f6f6c732e4465506f6f6c2e77697468647261776e4574686572320000815250601e0190506040518091039020600019166143b3565b90508082101515156139ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e454741544956455f455155495459000000000000000000000000000000000081525060200191505060405180910390fd5b613a0281836141e790919063ffffffff16565b94505050505090565b6000806000841415613a205760009150613b16565b8284029050828482811515613a3157fe5b04146040805190810160405280601181526020017f4d4154485f4d554c5f4f564552464c4f57000000000000000000000000000000815250901515613b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ad6578082015181840152602081019050613abb565b50505050905090810190601f168015613b035780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505b5092915050565b600080600083116040805190810160405280600d81526020017f4d4154485f4449565f5a45524f00000000000000000000000000000000000000815250901515613c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bc7578082015181840152602081019050613bac565b50505050905090810190601f168015613bf45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508284811515613c0e57fe5b0490508091505092915050565b613c80613c3883613c2a613d07565b6146e190919063ffffffff16565b60405180807f6465706f6f6c732e4465506f6f6c2e6275666665726564457468657200000000815250601c0190506040518091039020600019166141e090919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f96a25c8ce0baabc1fdefd93e9ed25d8e092a3332f3aa9a41722b5697231d1d1a8383604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a2505050565b600080613d4c60405180807f6465706f6f6c732e4465506f6f6c2e6275666665726564457468657200000000815250601c0190506040518091039020600019166143b3565b9050803073ffffffffffffffffffffffffffffffffffffffff163110151515613d7157fe5b8091505090565b6000613dab613d85613d07565b3073ffffffffffffffffffffffffffffffffffffffff16316141e790919063ffffffff16565b905090565b600080606080670de0b6b3a76400008510151515613dca57fe5b600092505b60008514158015613de35750600254600154115b15613e5057613e046801bc16d674ec800000866141e790919063ffffffff16565b9450613e226801bc16d674ec800000846146e190919063ffffffff16565b9250613e3d60026000815480929190600101919050556147d6565b91509150613e4b8282614e86565b613dcf565b829350505050919050565b613efa613eb282613ea460405180807f6465706f6f6c732e4465506f6f6c2e6465706f73697465644574686572000000815250601d0190506040518091039020600019166143b3565b6146e190919063ffffffff16565b60405180807f6465706f6f6c732e4465506f6f6c2e6465706f73697465644574686572000000815250601d0190506040518091039020600019166141e090919063ffffffff16565b613f99613f5182613f4360405180807f6465706f6f6c732e4465506f6f6c2e6275666665726564457468657200000000815250601c0190506040518091039020600019166143b3565b6141e790919063ffffffff16565b60405180807f6465706f6f6c732e4465506f6f6c2e6275666665726564457468657200000000815250601c0190506040518091039020600019166141e090919063ffffffff16565b7f76a397bea5768d4fca97ef47792796e35f98dc81b16c1de84e28a818e1f97108816040518082815260200191505060405180910390a150565b61401560405180807f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152506018019050604051809103902060001916613869565b151561402057600080fd5b61406d600060405180807f6465706f6f6c732e5061757361626c652e73746f707065640000000000000000815250601801905060405180910390206000191661563d90919063ffffffff16565b7f62451d457bc659158be6e6247f56ec1df424a5c7597f71c20c2bc44e0965c8f960405160405180910390a1565b6140dd60405180807f6465706f6f6c732e5061757361626c652e73746f7070656400000000000000008152506018019050604051809103902060001916613869565b151515614152576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f434f4e54524143545f49535f53544f505045440000000000000000000000000081525060200191505060405180910390fd5b61419f600160405180807f6465706f6f6c732e5061757361626c652e73746f707065640000000000000000815250601801905060405180910390206000191661563d90919063ffffffff16565b7f7acc84e34091ae817647a4c49116f5cc07f319078ba80f8f5fde37ea7e25cbd660405160405180910390a1565b600043905090565b600081549050919050565b8082555050565b600080838311156040805190810160405280601281526020017f4d4154485f5355425f554e444552464c4f5700000000000000000000000000008152509015156142cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614291578082015181840152602081019050614276565b50505050905090810190601f1680156142be5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390508091505092915050565b6142e5816143be565b1515614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e4f545f415f434f4e545241435400000000000000000000000000000000000081525060200191505060405180910390fd5b6143a58160405180807f6465706f6f6c732e4465506f6f6c2e6f7261636c650000000000000000000000815250601501905060405180910390206000191661564490919063ffffffff16565b50565b600081549050919050565b600081549050919050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156143ff576000915061440a565b823b90506000811191505b50919050565b600060606000808573ffffffffffffffffffffffffffffffffffffffff166370a0823190507c01000000000000000000000000000000000000000000000000000000000285604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505092506144fa868461564b565b91509150816040805190810160405280601c81526020017f534146455f4552435f32305f42414c414e43455f5245564552544544000000008152509015156145dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145a2578082015181840152602081019050614587565b50505050905090810190601f1680156145cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5080935050505092915050565b6000606063a9059cbb7c0100000000000000000000000000000000000000000000000000000000028484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506146c08582615680565b9150509392505050565b606060006020835102905082915080825250919050565b6000808284019050838110156040805190810160405280601181526020017f4d4154485f4144445f4f564552464c4f570000000000000000000000000000008152509015156147cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614790578082015181840152602081019050614775565b50505050905090810190601f1680156147bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505092915050565b60608060006060600060206030101580156147f357506040603011155b15156147fb57fe5b6020606081151561480857fe5b06600014151561481457fe5b61481d866156d2565b9250604080519080825280601f01601f1916602001820160405280156148525781602001602082028038833980820191505090505b50915082546020830152600183015460408301526002830192506148798260006030614d49565b945060606040519080825280601f01601f1916602001820160405280156148af5781602001602082028038833980820191505090505b509350600090505b60608110156148dc5782548160200185015282806001019350506020810190506148b7565b505050915091565b6148ed816143be565b1515614961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e4f545f415f434f4e545241435400000000000000000000000000000000000081525060200191505060405180910390fd5b6149ad8160405180807f6465706f6f6c732e4465506f6f6c2e746f6b656e000000000000000000000000815250601401905060405180910390206000191661564490919063ffffffff16565b50565b6149b9816143be565b1515614a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e4f545f415f434f4e545241435400000000000000000000000000000000000081525060200191505060405180910390fd5b614a9f8160405180807f6465706f6f6c732e4465506f6f6c2e76616c696461746f72526567697374726181526020017f74696f6e00000000000000000000000000000000000000000000000000000000815250602401905060405180910390206000191661564490919063ffffffff16565b50565b6000614aac611d19565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515614b8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b50578082015181840152602081019050614b35565b50505050905090810190601f168015614b7d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614bcd614b976141cd565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166141e090919063ffffffff16565b565b600080600060308551141515614be157fe5b60608451141515614bee57fe5b6020603010158015614c0257506040603011155b1515614c0a57fe5b60206060811515614c1757fe5b066000141515614c2357fe5b614c2c866156d2565b925060086030604003029150602085015183556040850151821c821b6001840155600283019250600090505b6060811015614c7d578060200184015183558280600101935050602081019050614c58565b505050505050565b600080614c91836156d2565b9150600090505b600160206060603001811515614caa57fe5b0401811015614cc457600081830155806001019050614c98565b505050565b600080614d0e60405180807f6465706f6f6c732e4465506f6f6c2e666565000000000000000000000000000081525060120190506040518091039020600019166143b3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff168111151515614d4257fe5b8091505090565b606080828401855110151515614d5e57600080fd5b821560008114614d7957604051915060208201604052614dca565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614db75780518352602083019250602081019050614d9a565b50868552601f19601f8301166040525050505b50809150509392505050565b600080600060308451141515614de857fe5b6020603010158015614dfc57506040603011155b1515614e0457fe5b6020840151915060408401519050816000148015614e3057506008603060400302819060020a90046000145b92505050919050565b6000614e7d60405180807f6465706f6f6c732e4465506f6f6c2e6c6173744f7261636c6545706f63680000815250601e0190506040518091039020600019166143b3565b60001415905090565b60008060008060008060008080546001816001161561010002031660029004905014151515614f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f454d5054595f5749544844524157414c5f43524544454e5449414c530000000081525060200191505060405180910390fd5b6801bc16d674ec8000009550614f40633b9aca0087613b1d90919063ffffffff16565b945085614f5a633b9aca0087613a0b90919063ffffffff16565b141515614f6357fe5b614f6c886157a6565b6040518082805190602001908083835b602083101515614fa15780518252602082019150602081019050602083039250614f7c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209350614fdd8760006040614d49565b6040518082805190602001908083835b6020831015156150125780518252602082019150602081019050602083039250614fed565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902061506761506289604061505d604060606141e790919063ffffffff16565b614d49565b6157a6565b6040518082805190602001908083835b60208310151561509c5780518252602082019150602081019050602083039250615077565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515615134578051825260208201915060208101905060208303925061510f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209250836000604051602001808360001916600019168152602001828054600181600116156101000203166002900480156151d25780601f106151b05761010080835404028352918201916151d2565b820191906000526020600020905b8154815290600101906020018083116151be575b5050925050506040516020818303038152906040526040518082805190602001908083835b60208310151561521c57805182526020820191506020810190506020830392506151f7565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902061525286615862565b84604051602001808381526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831015156152b65780518252602082019150602081019050602083039250615291565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561534e5780518252602082019150602081019050602083039250615329565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902091506153a7863073ffffffffffffffffffffffffffffffffffffffff16316141e790919063ffffffff16565b90506153b16114e5565b73ffffffffffffffffffffffffffffffffffffffff166322895118878a60008b876040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001806020018560001916600019168152602001848103845288818151815260200191508051906020019080838360005b83811015615453578082015181840152602081019050615438565b50505050905090810190601f1680156154805780820380516001836020036101000a031916815260200191505b508481038352878181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156155025780601f106154d757610100808354040283529160200191615502565b820191906000526020600020905b8154815290600101906020018083116154e557829003601f168201915b5050848103825286818151815260200191508051906020019080838360005b8381101561553c578082015181840152602081019050615521565b50505050905090810190601f1680156155695780820380516001836020036101000a031916815260200191505b509750505050505050506000604051808303818588803b15801561558c57600080fd5b505af11580156155a0573d6000803e3d6000fd5b5050505050803073ffffffffffffffffffffffffffffffffffffffff1631141515615633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f455850454354494e475f4445504f5349545f544f5f48415050454e000000000081525060200191505060405180910390fd5b5050505050505050565b8082555050565b8082555050565b6000806000806040516020818751602089018a5afa9250600083111561567057805191505b5081819350935050509250929050565b6000806040516020818551602087016000895af160008111156156c6573d600081146156b357602081146156bc576156c4565b600193506156c4565b600183511493505b505b50508091505092915050565b600060405180807f6465706f6f6c732e4465506f6f6c2e7369676e696e674b657973000000000000815250601a019050604051809103902082604051602001808360001916600019168152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310151561576e5780518252602082019150602081019050602083039250615749565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190049050919050565b60608060208351101580156157bd57506040835111155b15156157c557fe5b8251604014156157d75782915061585c565b60206040519080825280601f01601f19166020018201604052801561580b5781602001602082028038833980820191505090505b509050600060208201528251602014156158305761582983826158b8565b915061585c565b6158598361585483600061584f885160406141e790919063ffffffff16565b614d49565b6158b8565b91505b50919050565b60008060009150600090505b600881101561589c5760ff83166008839060020a021791506008839060020a9004925080600101905061586e565b8260001415156158a857fe5b60c0829060020a02915050919050565b6060806040519050835180825260208201818101602087015b818310156158ee57805183526020830192506020810190506158d1565b50855192508351830184528091508282019050602086015b818310156159235780518352602083019250602081019050615906565b50601f19601f8851850115830101166040525050508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061598357803560ff19168380011785556159b1565b828001600101855582156159b1579182015b828111156159b0578235825591602001919060010190615995565b5b5090506159be91906159c2565b5090565b6159e491905b808211156159e05760008160009055506001016159c8565b5090565b905600a165627a7a723058205447e217c9d3441618f02934af9799e8e2e675dd9cc2cafd196f75e42be03e6e0029" -} diff --git a/assets/IDePoolOracle.json b/assets/IDePoolOracle.json deleted file mode 100644 index b68540063..000000000 --- a/assets/IDePoolOracle.json +++ /dev/null @@ -1,1992 +0,0 @@ -{ - "contractName": "IDePoolOracle", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "member", - "type": "address" - } - ], - "name": "MemberAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "member", - "type": "address" - } - ], - "name": "MemberRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "quorum", - "type": "uint256" - } - ], - "name": "QuorumChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "epoch", - "type": "uint256" - }, - { - "indexed": false, - "name": "eth2balance", - "type": "uint256" - } - ], - "name": "AggregatedData", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "name": "_member", - "type": "address" - } - ], - "name": "addOracleMember", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_member", - "type": "address" - } - ], - "name": "removeOracleMember", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getOracleMembers", - "outputs": [ - { - "name": "", - "type": "address[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_quorum", - "type": "uint256" - } - ], - "name": "setQuorum", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getQuorum", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getEpochDurationSeconds", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_timestamp", - "type": "uint256" - } - ], - "name": "getEpochForTimestamp", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCurrentEpoch", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_epoch", - "type": "uint256" - }, - { - "name": "_eth2balance", - "type": "uint256" - } - ], - "name": "pushData", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getLatestData", - "outputs": [ - { - "name": "epoch", - "type": "uint256" - }, - { - "name": "eth2balance", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "sourceMap": "", - "deployedSourceMap": "", - "source": "pragma solidity 0.4.24;\n\n\n/**\n * @title ETH 2.0 -> ETH oracle\n *\n * The goal of the oracle is to inform other parts of the system about balances controlled\n * by the DAO on the ETH 2.0 side. The balances can go up because of reward accumulation\n * and can go down because of slashing.\n */\ninterface IDePoolOracle {\n /**\n * @notice Add `_member` to the oracle member committee\n * @param _member Address of a member to add\n */\n function addOracleMember(address _member) external;\n\n /**\n * @notice Remove `_member` from the oracle member committee\n * @param _member Address of a member to remove\n */\n function removeOracleMember(address _member) external;\n\n /**\n * @notice Returns the current oracle member committee\n */\n function getOracleMembers() external view returns (address[]);\n\n /**\n * @notice Set the number of oracle members required to form a data point to `_quorum`\n */\n function setQuorum(uint256 _quorum) external;\n\n /**\n * @notice Returns the number of oracle members required to form a data point\n */\n function getQuorum() external view returns (uint256);\n\n event MemberAdded(address member);\n event MemberRemoved(address member);\n event QuorumChanged(uint256 quorum);\n\n\n /**\n * @notice Returns epoch duration in seconds\n * @dev Epochs are consecutive time intervals. Oracle data is aggregated\n * and processed for each epoch independently.\n */\n function getEpochDurationSeconds() external view returns (uint256);\n\n /**\n * @notice Returns epoch id for a timestamp\n * @param _timestamp Unix timestamp, seconds\n */\n function getEpochForTimestamp(uint256 _timestamp) external view returns (uint256);\n\n /**\n * @notice Returns current epoch id\n */\n function getCurrentEpoch() external view returns (uint256);\n\n /**\n * @notice An oracle committee member pushes data from the ETH 2.0 side\n * @param _epoch Epoch id\n * @param _eth2balance Balance in wei on the ETH 2.0 side\n */\n function pushData(uint256 _epoch, uint256 _eth2balance) external;\n\n /**\n * @notice Returns the latest data from the ETH 2.0 side\n * @dev Depending on the oracle member committee liveness, the data can be stale. See _epoch.\n * @return _epoch Epoch id\n * @return _eth2balance Balance in wei on the ETH 2.0 side\n */\n function getLatestData() external view returns (uint256 epoch, uint256 eth2balance);\n\n // Fired when some _epoch reached quorum, was processed and yielded median _eth2balance\n event AggregatedData(uint256 epoch, uint256 eth2balance);\n}\n", - "sourcePath": "/Users/serych/mixbytes/depool-dao/contracts/interfaces/IDePoolOracle.sol", - "ast": { - "absolutePath": "/Users/serych/mixbytes/depool-dao/contracts/interfaces/IDePoolOracle.sol", - "exportedSymbols": { - "IDePoolOracle": [ - 219 - ] - }, - "id": 220, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 143, - "literals": [ - "solidity", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:23:1" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ETH 2.0 -> ETH oracle\n * The goal of the oracle is to inform other parts of the system about balances controlled\nby the DAO on the ETH 2.0 side. The balances can go up because of reward accumulation\nand can go down because of slashing.", - "fullyImplemented": false, - "id": 219, - "linearizedBaseContracts": [ - 219 - ], - "name": "IDePoolOracle", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": "@notice Add `_member` to the oracle member committee\n@param _member Address of a member to add", - "id": 148, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "addOracleMember", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 146, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 145, - "name": "_member", - "nodeType": "VariableDeclaration", - "scope": 148, - "src": "478:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 144, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "478:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "477:17:1" - }, - "payable": false, - "returnParameters": { - "id": 147, - "nodeType": "ParameterList", - "parameters": [], - "src": "503:0:1" - }, - "scope": 219, - "src": "453:51:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Remove `_member` from the oracle member committee\n@param _member Address of a member to remove", - "id": 153, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "removeOracleMember", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 151, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 150, - "name": "_member", - "nodeType": "VariableDeclaration", - "scope": 153, - "src": "674:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 149, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "674:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "673:17:1" - }, - "payable": false, - "returnParameters": { - "id": 152, - "nodeType": "ParameterList", - "parameters": [], - "src": "699:0:1" - }, - "scope": 219, - "src": "646:54:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns the current oracle member committee", - "id": 159, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getOracleMembers", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 154, - "nodeType": "ParameterList", - "parameters": [], - "src": "808:2:1" - }, - "payable": false, - "returnParameters": { - "id": 158, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 157, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 159, - "src": "834:9:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 155, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "834:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 156, - "length": null, - "nodeType": "ArrayTypeName", - "src": "834:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "833:11:1" - }, - "scope": 219, - "src": "783:62:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Set the number of oracle members required to form a data point to `_quorum`", - "id": 164, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "setQuorum", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 162, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 161, - "name": "_quorum", - "nodeType": "VariableDeclaration", - "scope": 164, - "src": "979:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 160, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "979:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "978:17:1" - }, - "payable": false, - "returnParameters": { - "id": 163, - "nodeType": "ParameterList", - "parameters": [], - "src": "1004:0:1" - }, - "scope": 219, - "src": "960:45:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns the number of oracle members required to form a data point", - "id": 169, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getQuorum", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 165, - "nodeType": "ParameterList", - "parameters": [], - "src": "1129:2:1" - }, - "payable": false, - "returnParameters": { - "id": 168, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 167, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 169, - "src": "1155:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 166, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1155:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1154:9:1" - }, - "scope": 219, - "src": "1111:53:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 173, - "name": "MemberAdded", - "nodeType": "EventDefinition", - "parameters": { - "id": 172, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 171, - "indexed": false, - "name": "member", - "nodeType": "VariableDeclaration", - "scope": 173, - "src": "1188:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 170, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1188:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1187:16:1" - }, - "src": "1170:34:1" - }, - { - "anonymous": false, - "documentation": null, - "id": 177, - "name": "MemberRemoved", - "nodeType": "EventDefinition", - "parameters": { - "id": 176, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 175, - "indexed": false, - "name": "member", - "nodeType": "VariableDeclaration", - "scope": 177, - "src": "1229:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 174, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1229:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1228:16:1" - }, - "src": "1209:36:1" - }, - { - "anonymous": false, - "documentation": null, - "id": 181, - "name": "QuorumChanged", - "nodeType": "EventDefinition", - "parameters": { - "id": 180, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 179, - "indexed": false, - "name": "quorum", - "nodeType": "VariableDeclaration", - "scope": 181, - "src": "1270:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 178, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1270:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1269:16:1" - }, - "src": "1250:36:1" - }, - { - "body": null, - "documentation": "@notice Returns epoch duration in seconds\n@dev Epochs are consecutive time intervals. Oracle data is aggregated\n and processed for each epoch independently.", - "id": 186, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getEpochDurationSeconds", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 182, - "nodeType": "ParameterList", - "parameters": [], - "src": "1527:2:1" - }, - "payable": false, - "returnParameters": { - "id": 185, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 184, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 186, - "src": "1553:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 183, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1553:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1552:9:1" - }, - "scope": 219, - "src": "1495:67:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns epoch id for a timestamp\n@param _timestamp Unix timestamp, seconds", - "id": 193, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getEpochForTimestamp", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 189, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 188, - "name": "_timestamp", - "nodeType": "VariableDeclaration", - "scope": 193, - "src": "1714:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 187, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1714:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1713:20:1" - }, - "payable": false, - "returnParameters": { - "id": 192, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 191, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 193, - "src": "1757:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 190, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1757:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1756:9:1" - }, - "scope": 219, - "src": "1684:82:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns current epoch id", - "id": 198, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getCurrentEpoch", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 194, - "nodeType": "ParameterList", - "parameters": [], - "src": "1854:2:1" - }, - "payable": false, - "returnParameters": { - "id": 197, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 196, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 198, - "src": "1880:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 195, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1880:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1879:9:1" - }, - "scope": 219, - "src": "1830:59:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice An oracle committee member pushes data from the ETH 2.0 side\n@param _epoch Epoch id\n@param _eth2balance Balance in wei on the ETH 2.0 side", - "id": 205, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "pushData", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 203, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 200, - "name": "_epoch", - "nodeType": "VariableDeclaration", - "scope": 205, - "src": "2101:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 199, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2101:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 202, - "name": "_eth2balance", - "nodeType": "VariableDeclaration", - "scope": 205, - "src": "2117:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 201, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2117:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2100:38:1" - }, - "payable": false, - "returnParameters": { - "id": 204, - "nodeType": "ParameterList", - "parameters": [], - "src": "2147:0:1" - }, - "scope": 219, - "src": "2083:65:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns the latest data from the ETH 2.0 side\n@dev Depending on the oracle member committee liveness, the data can be stale. See _epoch.\n@return _epoch Epoch id\n@return _eth2balance Balance in wei on the ETH 2.0 side", - "id": 212, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getLatestData", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 206, - "nodeType": "ParameterList", - "parameters": [], - "src": "2450:2:1" - }, - "payable": false, - "returnParameters": { - "id": 211, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 208, - "name": "epoch", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "2476:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 207, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2476:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 210, - "name": "eth2balance", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "2491:19:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 209, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2491:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2475:36:1" - }, - "scope": 219, - "src": "2428:84:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 218, - "name": "AggregatedData", - "nodeType": "EventDefinition", - "parameters": { - "id": 217, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 214, - "indexed": false, - "name": "epoch", - "nodeType": "VariableDeclaration", - "scope": 218, - "src": "2631:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 213, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2631:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 216, - "indexed": false, - "name": "eth2balance", - "nodeType": "VariableDeclaration", - "scope": 218, - "src": "2646:19:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 215, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2646:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2630:36:1" - }, - "src": "2610:57:1" - } - ], - "scope": 220, - "src": "295:2374:1" - } - ], - "src": "0:2670:1" - }, - "legacyAST": { - "absolutePath": "/Users/serych/mixbytes/depool-dao/contracts/interfaces/IDePoolOracle.sol", - "exportedSymbols": { - "IDePoolOracle": [ - 219 - ] - }, - "id": 220, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 143, - "literals": [ - "solidity", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:23:1" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ETH 2.0 -> ETH oracle\n * The goal of the oracle is to inform other parts of the system about balances controlled\nby the DAO on the ETH 2.0 side. The balances can go up because of reward accumulation\nand can go down because of slashing.", - "fullyImplemented": false, - "id": 219, - "linearizedBaseContracts": [ - 219 - ], - "name": "IDePoolOracle", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": "@notice Add `_member` to the oracle member committee\n@param _member Address of a member to add", - "id": 148, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "addOracleMember", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 146, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 145, - "name": "_member", - "nodeType": "VariableDeclaration", - "scope": 148, - "src": "478:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 144, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "478:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "477:17:1" - }, - "payable": false, - "returnParameters": { - "id": 147, - "nodeType": "ParameterList", - "parameters": [], - "src": "503:0:1" - }, - "scope": 219, - "src": "453:51:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Remove `_member` from the oracle member committee\n@param _member Address of a member to remove", - "id": 153, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "removeOracleMember", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 151, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 150, - "name": "_member", - "nodeType": "VariableDeclaration", - "scope": 153, - "src": "674:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 149, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "674:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "673:17:1" - }, - "payable": false, - "returnParameters": { - "id": 152, - "nodeType": "ParameterList", - "parameters": [], - "src": "699:0:1" - }, - "scope": 219, - "src": "646:54:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns the current oracle member committee", - "id": 159, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getOracleMembers", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 154, - "nodeType": "ParameterList", - "parameters": [], - "src": "808:2:1" - }, - "payable": false, - "returnParameters": { - "id": 158, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 157, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 159, - "src": "834:9:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 155, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "834:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 156, - "length": null, - "nodeType": "ArrayTypeName", - "src": "834:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "833:11:1" - }, - "scope": 219, - "src": "783:62:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Set the number of oracle members required to form a data point to `_quorum`", - "id": 164, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "setQuorum", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 162, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 161, - "name": "_quorum", - "nodeType": "VariableDeclaration", - "scope": 164, - "src": "979:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 160, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "979:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "978:17:1" - }, - "payable": false, - "returnParameters": { - "id": 163, - "nodeType": "ParameterList", - "parameters": [], - "src": "1004:0:1" - }, - "scope": 219, - "src": "960:45:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns the number of oracle members required to form a data point", - "id": 169, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getQuorum", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 165, - "nodeType": "ParameterList", - "parameters": [], - "src": "1129:2:1" - }, - "payable": false, - "returnParameters": { - "id": 168, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 167, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 169, - "src": "1155:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 166, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1155:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1154:9:1" - }, - "scope": 219, - "src": "1111:53:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 173, - "name": "MemberAdded", - "nodeType": "EventDefinition", - "parameters": { - "id": 172, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 171, - "indexed": false, - "name": "member", - "nodeType": "VariableDeclaration", - "scope": 173, - "src": "1188:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 170, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1188:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1187:16:1" - }, - "src": "1170:34:1" - }, - { - "anonymous": false, - "documentation": null, - "id": 177, - "name": "MemberRemoved", - "nodeType": "EventDefinition", - "parameters": { - "id": 176, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 175, - "indexed": false, - "name": "member", - "nodeType": "VariableDeclaration", - "scope": 177, - "src": "1229:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 174, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1229:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1228:16:1" - }, - "src": "1209:36:1" - }, - { - "anonymous": false, - "documentation": null, - "id": 181, - "name": "QuorumChanged", - "nodeType": "EventDefinition", - "parameters": { - "id": 180, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 179, - "indexed": false, - "name": "quorum", - "nodeType": "VariableDeclaration", - "scope": 181, - "src": "1270:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 178, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1270:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1269:16:1" - }, - "src": "1250:36:1" - }, - { - "body": null, - "documentation": "@notice Returns epoch duration in seconds\n@dev Epochs are consecutive time intervals. Oracle data is aggregated\n and processed for each epoch independently.", - "id": 186, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getEpochDurationSeconds", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 182, - "nodeType": "ParameterList", - "parameters": [], - "src": "1527:2:1" - }, - "payable": false, - "returnParameters": { - "id": 185, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 184, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 186, - "src": "1553:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 183, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1553:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1552:9:1" - }, - "scope": 219, - "src": "1495:67:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns epoch id for a timestamp\n@param _timestamp Unix timestamp, seconds", - "id": 193, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getEpochForTimestamp", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 189, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 188, - "name": "_timestamp", - "nodeType": "VariableDeclaration", - "scope": 193, - "src": "1714:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 187, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1714:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1713:20:1" - }, - "payable": false, - "returnParameters": { - "id": 192, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 191, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 193, - "src": "1757:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 190, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1757:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1756:9:1" - }, - "scope": 219, - "src": "1684:82:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns current epoch id", - "id": 198, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getCurrentEpoch", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 194, - "nodeType": "ParameterList", - "parameters": [], - "src": "1854:2:1" - }, - "payable": false, - "returnParameters": { - "id": 197, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 196, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 198, - "src": "1880:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 195, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1880:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1879:9:1" - }, - "scope": 219, - "src": "1830:59:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice An oracle committee member pushes data from the ETH 2.0 side\n@param _epoch Epoch id\n@param _eth2balance Balance in wei on the ETH 2.0 side", - "id": 205, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "pushData", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 203, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 200, - "name": "_epoch", - "nodeType": "VariableDeclaration", - "scope": 205, - "src": "2101:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 199, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2101:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 202, - "name": "_eth2balance", - "nodeType": "VariableDeclaration", - "scope": 205, - "src": "2117:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 201, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2117:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2100:38:1" - }, - "payable": false, - "returnParameters": { - "id": 204, - "nodeType": "ParameterList", - "parameters": [], - "src": "2147:0:1" - }, - "scope": 219, - "src": "2083:65:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": "@notice Returns the latest data from the ETH 2.0 side\n@dev Depending on the oracle member committee liveness, the data can be stale. See _epoch.\n@return _epoch Epoch id\n@return _eth2balance Balance in wei on the ETH 2.0 side", - "id": 212, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getLatestData", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 206, - "nodeType": "ParameterList", - "parameters": [], - "src": "2450:2:1" - }, - "payable": false, - "returnParameters": { - "id": 211, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 208, - "name": "epoch", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "2476:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 207, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2476:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 210, - "name": "eth2balance", - "nodeType": "VariableDeclaration", - "scope": 212, - "src": "2491:19:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 209, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2491:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2475:36:1" - }, - "scope": 219, - "src": "2428:84:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 218, - "name": "AggregatedData", - "nodeType": "EventDefinition", - "parameters": { - "id": 217, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 214, - "indexed": false, - "name": "epoch", - "nodeType": "VariableDeclaration", - "scope": 218, - "src": "2631:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 213, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2631:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 216, - "indexed": false, - "name": "eth2balance", - "nodeType": "VariableDeclaration", - "scope": 218, - "src": "2646:19:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 215, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2646:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2630:36:1" - }, - "src": "2610:57:1" - } - ], - "scope": 220, - "src": "295:2374:1" - } - ], - "src": "0:2670:1" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2020-09-05T15:18:38.861Z" -} \ No newline at end of file diff --git a/beacon.py b/beacon.py new file mode 100644 index 000000000..fc1b47b23 --- /dev/null +++ b/beacon.py @@ -0,0 +1,44 @@ +import requests + +from requests.compat import urljoin + +api_version_lighthouse = 'node/version' +api_version_prism = 'eth/v1alpha1/node/version' + +API = { + 'Lighthouse': { + 'api_version': 'node/version', + 'beacon_head': 'beacon/head', + }, + 'Prysm': { + 'api_version': 'eth/v1alpha1/node/version', + 'beacon_head': 'eth/v1alpha1/beacon/chainhead', + } +} + + +def get_beacon(provider): + version = requests.get(urljoin(provider, API['Lighthouse']['api_version'])).text + if 'Lighthouse' in version: + return 'Lighthouse' + version = requests.get(urljoin(provider, API['Prysm']['api_version'])).text + if 'Prysm' in version: + return 'Prysm' + return 'None' + + +def get_actual_slots(beacon, provider): + actual_slots = {} + if beacon == "Lighthouse": + beacon_head = API['Lighthouse']['beacon_head'] + response = requests.get(urljoin(provider, beacon_head)).json() + actual_slots['actual_slot'] = response['slot'] + actual_slots['finalized_slot'] = response['finalized_slot'] + return actual_slots + if beacon == "Prysm": + beacon_head = API['Prysm']['beacon_head'] + response = requests.get(urljoin(provider, beacon_head)).json() + actual_slots['actual_slot'] = response['headSlot'] + actual_slots['finalized_slot'] = response['finalizedSlot'] + return actual_slots + diff --git a/contracts.py b/contracts.py new file mode 100644 index 000000000..d1198a62c --- /dev/null +++ b/contracts.py @@ -0,0 +1,11 @@ +def get_validators_keys(contract, provider): + validators_keys_count = contract.functions.getTotalSigningKeyCount().call({'from': provider.eth.defaultAccount.address}) + if validators_keys_count > 0: + validators_keys_list = [] + for index in range(validators_keys_count): + validator_key = contract.functions.getSigningKey(index).call({'from': provider.eth.defaultAccount.address}) + validators_keys_list.append(validator_key[0]) + index += 1 + return validators_keys_list + else: + print('No keys on depool contract') diff --git a/oracle.py b/oracle.py index c99552cfe..2719526d0 100644 --- a/oracle.py +++ b/oracle.py @@ -1,18 +1,19 @@ import math import os -import requests import time import json + from web3 import Web3, WebsocketProvider, HTTPProvider -from requests.compat import urljoin + +from beacon import get_beacon, get_actual_slots +from contracts import get_validators_keys SECONDS_PER_SLOT = 12 -SLOTS_PER_EPOCH = 1 +SLOTS_PER_EPOCH = 32 EPOCH_DURATION = SECONDS_PER_SLOT * SLOTS_PER_EPOCH -HALF_EPOCH_DURATION = EPOCH_DURATION / 2 envs = ['ETH1_NODE', 'ETH2_NODE', 'DEPOOL_CONTRACT', 'ORACLE_CONTRACT', 'MANAGER_PRIV_KEY', 'DEPOOL_ABI_FILE', - 'ORACLE_ABI_FILE', 'REPORT_INTVL_EPOCHS'] + 'ORACLE_ABI_FILE', 'REPORT_INTVL_SLOTS'] for env in envs: if env not in os.environ: print(env, 'is missing') @@ -25,15 +26,26 @@ oracle_address = os.environ['ORACLE_CONTRACT'] depool_address = os.environ['DEPOOL_CONTRACT'] manager_privkey = os.environ['MANAGER_PRIV_KEY'] +report_interval_slots = int(os.environ['REPORT_INTVL_SLOTS']) -api_genesis = '/beacon/state/genesis' +beacon = get_beacon(eth2_provider) +print(beacon) + +provider = None if eth1_provider.startswith('http'): - w3 = Web3(HTTPProvider(eth1_provider)) + provider = HTTPProvider(eth1_provider) elif eth1_provider.starstwith('ws'): - w3 = Web3(WebsocketProvider(eth1_provider)) + provider = WebsocketProvider(eth1_provider) else: print('Unsupported provider') + exit(1) + +w3 = Web3(provider) + +if not w3.isConnected(): + print('ETH Node connection error') + exit(1) with open(dp_abi_path, 'r') as file: a = file.read() @@ -42,32 +54,60 @@ w3.eth.defaultAccount = w3.eth.account.privateKeyToAccount(manager_privkey) -response = requests.get(urljoin(eth2_provider, api_genesis)) -genesis_time = response.json()['genesis_time'] -current_epoch = math.floor((int(time.time()) - genesis_time) / (SECONDS_PER_SLOT * SLOTS_PER_EPOCH)) +# Get actual slot and last finalized slot from beacon head data +last_slots = get_actual_slots(beacon, eth2_provider) +last_finalyzed_slot = last_slots['finalized_slot'] +actual_slot = last_slots['actual_slot'] +print('Last finalized slot', last_finalyzed_slot) +print('Actual slot', actual_slot) + +# Get current epoch +current_epoch = math.floor(actual_slot / SLOTS_PER_EPOCH) print('Oracle daemon start epoch:', current_epoch) +# Get first slot of current epoch +start_slot_current_epoch = current_epoch * SLOTS_PER_EPOCH + # Wait till the next epoch start -print('Wait next epoch seconds:', (genesis_time + ((current_epoch + 1) * EPOCH_DURATION)) - int(time.time())) -time.sleep((genesis_time + ((current_epoch + 1) * EPOCH_DURATION)) - int(time.time())) -current_epoch += 1 + +# Get first slot of next epoch +start_slot_next_epoch = start_slot_current_epoch + SLOTS_PER_EPOCH +print('Next epoch first slot', start_slot_next_epoch) + +await_time = (start_slot_next_epoch - actual_slot) * SECONDS_PER_SLOT +print('Wait next epoch seconds:', await_time) +time.sleep(await_time) + +# Get actual slot and last finalized slot from beacon head data +last_slots = get_actual_slots(beacon, eth2_provider) print('The oracle daemon is started!') +# Get last epoch on 7200x slot +before_report_epoch = math.floor( + last_slots['actual_slot'] / report_interval_slots) * report_interval_slots / SLOTS_PER_EPOCH +print('before 7200 slots epoch', before_report_epoch) + +# If the epoch of the last finalized slot is equal to the before_report_epoch, then report balances +if before_report_epoch == math.floor(last_slots['finalized_slot'] / SLOTS_PER_EPOCH): + validators_keys = get_validators_keys(depool, w3) + # TODO get balances and push to oracle + print(validators_keys) +else: + print('Wait next epoch on 7200x slot') + +next_report_epoch = math.floor(before_report_epoch + (report_interval_slots / SLOTS_PER_EPOCH)) +# Sleep while last finalized slot reach expected epoch +print('Next slot first slot', next_report_epoch * SLOTS_PER_EPOCH) while True: - # Wait for the half of the epoch - print('Wait for the half of the epoch seconds:', - genesis_time + (current_epoch * EPOCH_DURATION + HALF_EPOCH_DURATION) - int(time.time())) - time.sleep(genesis_time + (current_epoch * EPOCH_DURATION + HALF_EPOCH_DURATION) - int(time.time())) - validators_keys_count = depool.functions.getTotalSigningKeyCount().call({'from': w3.eth.defaultAccount.address}) - if validators_keys_count > 0: - validators_keys_list = [] - for index in range(validators_keys_count): - validator_key = depool.functions.getSigningKey(index).call({'from': w3.eth.defaultAccount.address}) - validators_keys_list.append(validator_key[0]) - index += 1 - - print('Validators keys list:', validators_keys_list) - # TODO pushData to Oracle contract - print('Wait next epoch seconds:', genesis_time + ((current_epoch + 1) * EPOCH_DURATION) - int(time.time())) - time.sleep(genesis_time + ((current_epoch + 1) * EPOCH_DURATION) - int(time.time())) - current_epoch += 1 + time.sleep(EPOCH_DURATION) + # Get actual slot and last finalized slot from beacon head data + last_slots = get_actual_slots(beacon, eth2_provider) + calc_epoch = math.floor(last_slots['finalized_slot'] / SLOTS_PER_EPOCH) + print('Wait epoch', next_report_epoch) + print('Now epoch', calc_epoch) + + if next_report_epoch == calc_epoch: + validators_keys = get_validators_keys(depool, w3) + # TODO get balances and push to oracle + next_report_epoch = math.floor(before_report_epoch + (report_interval_slots / SLOTS_PER_EPOCH)) + print('Next report epoch after report', next_report_epoch) diff --git a/requirements.txt b/requirements.txt index bd4673c4f..00da1204b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,7 +22,6 @@ lru-dict==1.1.6 multiaddr==0.0.9 netaddr==0.8.0 parsimonious==0.8.1 -pkg-resources==0.0.0 protobuf==3.13.0 pycryptodome==3.9.8 pyrsistent==0.17.3