Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@ensuro/core

Package Overview
Dependencies
Maintainers
1
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ensuro/core - npm Package Compare versions

Comparing version 2.0.0-beta1 to 2.0.0-beta10

build/contracts/AccessManager.sol/AccessManager.json

13

build/contracts/interfaces/IEToken.sol/IEToken.json

@@ -267,2 +267,15 @@ {

{
"internalType": "address",
"name": "borrower",
"type": "address"
}
],
"name": "removeBorrower",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",

@@ -269,0 +282,0 @@ "name": "amount",

56

build/contracts/interfaces/IPolicyPool.sol/IPolicyPool.json

@@ -8,6 +8,6 @@ {

"inputs": [],
"name": "config",
"name": "access",
"outputs": [
{
"internalType": "contract IPolicyPoolConfig",
"internalType": "contract IAccessManager",
"name": "",

@@ -139,2 +139,21 @@ "type": "address"

{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"name": "isActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [

@@ -218,6 +237,11 @@ {

"internalType": "address",
"name": "customer",
"name": "caller",
"type": "address"
},
{
"internalType": "address",
"name": "policyHolder",
"type": "address"
},
{
"internalType": "uint96",

@@ -240,15 +264,2 @@ "name": "internalId",

{
"inputs": [],
"name": "policyNFT",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [

@@ -434,2 +445,15 @@ {

{
"inputs": [],
"name": "treasury",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [

@@ -436,0 +460,0 @@ {

@@ -286,2 +286,15 @@ {

"inputs": [],
"name": "purePremiums",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "seniorEtk",

@@ -288,0 +301,0 @@ "outputs": [

@@ -54,3 +54,3 @@ {

"indexed": true,
"internalType": "enum IPolicyPoolConfig.GovernanceActions",
"internalType": "enum IAccessManager.GovernanceActions",
"name": "action",

@@ -74,3 +74,3 @@ "type": "uint8"

"indexed": true,
"internalType": "enum IPolicyPoolConfig.GovernanceActions",
"internalType": "enum IAccessManager.GovernanceActions",
"name": "action",

@@ -442,6 +442,6 @@ "type": "uint8"

],
"bytecode": "0x60c06040523060601b60805234801561001757600080fd5b506040516118033803806118038339810160408190526100369161004b565b60601b6001600160601b03191660a05261007b565b60006020828403121561005d57600080fd5b81516001600160a01b038116811461007457600080fd5b9392505050565b60805160601c60a05160601c61171e6100e56000396000818161023401528181610550015281816108ac015281816109c601528181610b1d0152610be301526000818161041c015281816104650152818161065d0152818161069d015261072c015261171e6000f3fe6080604052600436106101145760003560e01c80635b494dd5116100a05780638456cb59116100645780638456cb591461035f578063aad4148c14610374578063b9a45aac146103a8578063e5a6b10f146103c8578063f67b2bad146103dd57600080fd5b80635b494dd5146102945780635c975abb146102c85780635fcdca37146102e05780637ed5acfa1461031d5780638129fc1c1461034a57600080fd5b8063468a8c9f116100e7578063468a8c9f146101b55780634a47a3e0146101f15780634d15eb03146102255780634f1ef2861461026c57806352d1902d1461027f57600080fd5b806324ea54f4146101195780633659cfe61461014e57806337ee20dd146101705780633f4ba83a146101a0575b600080fd5b34801561012557600080fd5b5061013b6000805160206116c983398151915281565b6040519081526020015b60405180910390f35b34801561015a57600080fd5b5061016e6101693660046112c3565b610411565b005b34801561017c57600080fd5b5061019061018b366004611469565b6104fa565b6040519015158152602001610145565b3480156101ac57600080fd5b5061016e61051e565b3480156101c157600080fd5b5060c9546040805164ffffffffff831681526501000000000090920466ffffffffffffff16602083015201610145565b3480156101fd57600080fd5b5061013b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b34801561023157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610145565b61016e61027a36600461131e565b610652565b34801561028b57600080fd5b5061013b61071f565b3480156102a057600080fd5b5061013b7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156102d457600080fd5b5060975460ff16610190565b3480156102ec57600080fd5b506101906102fb366004611418565b506001600160a01b0316600090815260ca602052604090205460ff1692915050565b34801561032957600080fd5b506103346201518081565b60405164ffffffffff9091168152602001610145565b34801561035657600080fd5b5061016e6107d2565b34801561036b57600080fd5b5061016e61089b565b34801561038057600080fd5b5061013b7fb494869573b0a0ce9caac5394e1d0d255d146ec7e2d30d643a4e1d78980f323581565b3480156103b457600080fd5b5061016e6103c33660046112e0565b6109a3565b3480156103d457600080fd5b50610254610b19565b3480156103e957600080fd5b5061013b7fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb281565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104635760405162461bcd60e51b815260040161045a906114f9565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166104ac600080516020611682833981519152546001600160a01b031690565b6001600160a01b0316146104d25760405162461bcd60e51b815260040161045a90611545565b6104db81610bb1565b604080516000808252602082019092526104f791839190610cde565b50565b6001600160a01b038216600090815260ca602052604090205460ff165b9392505050565b6000805160206116c98339815191527fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a757600080fd5b505afa1580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df91906113fb565b60405163c5b8f5cf60e01b815260048101849052602481018390523360448201526001600160a01b03919091169063c5b8f5cf9060640160006040518083038186803b15801561062e57600080fd5b505afa158015610642573d6000803e3d6000fd5b5050505061064e610e5d565b5050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561069b5760405162461bcd60e51b815260040161045a906114f9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106e4600080516020611682833981519152546001600160a01b031690565b6001600160a01b03161461070a5760405162461bcd60e51b815260040161045a90611545565b61071382610bb1565b61064e82826001610cde565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107bf5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161045a565b5060008051602061168283398151915290565b600054610100900460ff16158080156107f25750600054600160ff909116105b8061080c5750303b15801561080c575060005460ff166001145b6108285760405162461bcd60e51b815260040161045a90611591565b6000805460ff19166001179055801561084b576000805461ff0019166101001790555b610853610eaf565b80156104f7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000805160206116c98339815191527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b15801561090357600080fd5b505afa158015610917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093b91906113fb565b6040516312d9a6ad60e01b8152600481018390523360248201526001600160a01b0391909116906312d9a6ad9060440160006040518083038186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506104f7610f38565b7fb494869573b0a0ce9caac5394e1d0d255d146ec7e2d30d643a4e1d78980f32357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1d57600080fd5b505afa158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5591906113fb565b6040516312d9a6ad60e01b8152600481018390523360248201526001600160a01b0391909116906312d9a6ad9060440160006040518083038186803b158015610a9d57600080fd5b505afa158015610ab1573d6000803e3d6000fd5b505050506001600160a01b038316600081815260ca6020908152604091829020805460ff19168615159081179091558251938452908301527f8ef34cf5cfaa6ce2f80f1ba2912749c912a8b07c4fb8e9949e928e7cb592918f910160405180910390a1505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7457600080fd5b505afa158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac91906113fb565b905090565b6000805160206116c98339815191527fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3a57600080fd5b505afa158015610c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7291906113fb565b60405163c5b8f5cf60e01b815260048101849052602481018390523360448201526001600160a01b03919091169063c5b8f5cf9060640160006040518083038186803b158015610cc157600080fd5b505afa158015610cd5573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610d1657610d1183610f75565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4f57600080fd5b505afa925050508015610d7f575060408051601f3d908101601f19168201909252610d7c918101906113e2565b60015b610de25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161045a565b6000805160206116828339815191528114610e515760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161045a565b50610d11838383611011565b610e6561103c565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff1615808015610ecf5750600054600160ff909116105b80610ee95750303b158015610ee9575060005460ff166001145b610f055760405162461bcd60e51b815260040161045a90611591565b6000805460ff191660011790558015610f28576000805461ff0019166101001790555b610f30611087565b6108536110ae565b610f406110dd565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e923390565b6001600160a01b0381163b610fe25760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161045a565b60008051602061168283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61101a83611123565b6000825111806110275750805b15610d11576110368383611163565b50505050565b60975460ff166110855760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161045a565b565b600054610100900460ff166110855760405162461bcd60e51b815260040161045a906115df565b600054610100900460ff166110d55760405162461bcd60e51b815260040161045a906115df565b611085611257565b60975460ff16156110855760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161045a565b61112c81610f75565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6111cb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161045a565b600080846001600160a01b0316846040516111e691906114aa565b600060405180830381855af49150503d8060008114611221576040519150601f19603f3d011682016040523d82523d6000602084013e611226565b606091505b509150915061124e82826040518060600160405280602781526020016116a26027913961128a565b95945050505050565b600054610100900460ff1661127e5760405162461bcd60e51b815260040161045a906115df565b6097805460ff19169055565b60608315611299575081610517565b8251156112a95782518084602001fd5b8160405162461bcd60e51b815260040161045a91906114c6565b6000602082840312156112d557600080fd5b81356105178161166c565b600080604083850312156112f357600080fd5b82356112fe8161166c565b91506020830135801515811461131357600080fd5b809150509250929050565b6000806040838503121561133157600080fd5b823561133c8161166c565b9150602083013567ffffffffffffffff8082111561135957600080fd5b818501915085601f83011261136d57600080fd5b81358181111561137f5761137f611656565b604051601f8201601f19908116603f011681019083821181831017156113a7576113a7611656565b816040528281528860208487010111156113c057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000602082840312156113f457600080fd5b5051919050565b60006020828403121561140d57600080fd5b81516105178161166c565b6000806000806080858703121561142e57600080fd5b84356114398161166c565b935060208501356114498161166c565b925060408501356114598161166c565b9396929550929360600135925050565b60008060006060848603121561147e57600080fd5b83356114898161166c565b925060208401356114998161166c565b929592945050506040919091013590565b600082516114bc81846020870161162a565b9190910192915050565b60208152600082518060208401526114e581604085016020870161162a565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b8381101561164557818101518382015260200161162d565b838111156110365750506000910152565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146104f757600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212208139aca739931ef0f8fd5924a13a81f3fbdeba78904688f2d72bcc1245aee53f64736f6c63430008060033",
"deployedBytecode": "0x6080604052600436106101145760003560e01c80635b494dd5116100a05780638456cb59116100645780638456cb591461035f578063aad4148c14610374578063b9a45aac146103a8578063e5a6b10f146103c8578063f67b2bad146103dd57600080fd5b80635b494dd5146102945780635c975abb146102c85780635fcdca37146102e05780637ed5acfa1461031d5780638129fc1c1461034a57600080fd5b8063468a8c9f116100e7578063468a8c9f146101b55780634a47a3e0146101f15780634d15eb03146102255780634f1ef2861461026c57806352d1902d1461027f57600080fd5b806324ea54f4146101195780633659cfe61461014e57806337ee20dd146101705780633f4ba83a146101a0575b600080fd5b34801561012557600080fd5b5061013b6000805160206116c983398151915281565b6040519081526020015b60405180910390f35b34801561015a57600080fd5b5061016e6101693660046112c3565b610411565b005b34801561017c57600080fd5b5061019061018b366004611469565b6104fa565b6040519015158152602001610145565b3480156101ac57600080fd5b5061016e61051e565b3480156101c157600080fd5b5060c9546040805164ffffffffff831681526501000000000090920466ffffffffffffff16602083015201610145565b3480156101fd57600080fd5b5061013b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b34801561023157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610145565b61016e61027a36600461131e565b610652565b34801561028b57600080fd5b5061013b61071f565b3480156102a057600080fd5b5061013b7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156102d457600080fd5b5060975460ff16610190565b3480156102ec57600080fd5b506101906102fb366004611418565b506001600160a01b0316600090815260ca602052604090205460ff1692915050565b34801561032957600080fd5b506103346201518081565b60405164ffffffffff9091168152602001610145565b34801561035657600080fd5b5061016e6107d2565b34801561036b57600080fd5b5061016e61089b565b34801561038057600080fd5b5061013b7fb494869573b0a0ce9caac5394e1d0d255d146ec7e2d30d643a4e1d78980f323581565b3480156103b457600080fd5b5061016e6103c33660046112e0565b6109a3565b3480156103d457600080fd5b50610254610b19565b3480156103e957600080fd5b5061013b7fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb281565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156104635760405162461bcd60e51b815260040161045a906114f9565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166104ac600080516020611682833981519152546001600160a01b031690565b6001600160a01b0316146104d25760405162461bcd60e51b815260040161045a90611545565b6104db81610bb1565b604080516000808252602082019092526104f791839190610cde565b50565b6001600160a01b038216600090815260ca602052604090205460ff165b9392505050565b6000805160206116c98339815191527fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a757600080fd5b505afa1580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df91906113fb565b60405163c5b8f5cf60e01b815260048101849052602481018390523360448201526001600160a01b03919091169063c5b8f5cf9060640160006040518083038186803b15801561062e57600080fd5b505afa158015610642573d6000803e3d6000fd5b5050505061064e610e5d565b5050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561069b5760405162461bcd60e51b815260040161045a906114f9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106e4600080516020611682833981519152546001600160a01b031690565b6001600160a01b03161461070a5760405162461bcd60e51b815260040161045a90611545565b61071382610bb1565b61064e82826001610cde565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107bf5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161045a565b5060008051602061168283398151915290565b600054610100900460ff16158080156107f25750600054600160ff909116105b8061080c5750303b15801561080c575060005460ff166001145b6108285760405162461bcd60e51b815260040161045a90611591565b6000805460ff19166001179055801561084b576000805461ff0019166101001790555b610853610eaf565b80156104f7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000805160206116c98339815191527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b15801561090357600080fd5b505afa158015610917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093b91906113fb565b6040516312d9a6ad60e01b8152600481018390523360248201526001600160a01b0391909116906312d9a6ad9060440160006040518083038186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506104f7610f38565b7fb494869573b0a0ce9caac5394e1d0d255d146ec7e2d30d643a4e1d78980f32357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1d57600080fd5b505afa158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5591906113fb565b6040516312d9a6ad60e01b8152600481018390523360248201526001600160a01b0391909116906312d9a6ad9060440160006040518083038186803b158015610a9d57600080fd5b505afa158015610ab1573d6000803e3d6000fd5b505050506001600160a01b038316600081815260ca6020908152604091829020805460ff19168615159081179091558251938452908301527f8ef34cf5cfaa6ce2f80f1ba2912749c912a8b07c4fb8e9949e928e7cb592918f910160405180910390a1505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7457600080fd5b505afa158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac91906113fb565b905090565b6000805160206116c98339815191527fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379502c556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3a57600080fd5b505afa158015610c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7291906113fb565b60405163c5b8f5cf60e01b815260048101849052602481018390523360448201526001600160a01b03919091169063c5b8f5cf9060640160006040518083038186803b158015610cc157600080fd5b505afa158015610cd5573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610d1657610d1183610f75565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4f57600080fd5b505afa925050508015610d7f575060408051601f3d908101601f19168201909252610d7c918101906113e2565b60015b610de25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161045a565b6000805160206116828339815191528114610e515760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161045a565b50610d11838383611011565b610e6561103c565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff1615808015610ecf5750600054600160ff909116105b80610ee95750303b158015610ee9575060005460ff166001145b610f055760405162461bcd60e51b815260040161045a90611591565b6000805460ff191660011790558015610f28576000805461ff0019166101001790555b610f30611087565b6108536110ae565b610f406110dd565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e923390565b6001600160a01b0381163b610fe25760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161045a565b60008051602061168283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61101a83611123565b6000825111806110275750805b15610d11576110368383611163565b50505050565b60975460ff166110855760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161045a565b565b600054610100900460ff166110855760405162461bcd60e51b815260040161045a906115df565b600054610100900460ff166110d55760405162461bcd60e51b815260040161045a906115df565b611085611257565b60975460ff16156110855760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161045a565b61112c81610f75565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6111cb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161045a565b600080846001600160a01b0316846040516111e691906114aa565b600060405180830381855af49150503d8060008114611221576040519150601f19603f3d011682016040523d82523d6000602084013e611226565b606091505b509150915061124e82826040518060600160405280602781526020016116a26027913961128a565b95945050505050565b600054610100900460ff1661127e5760405162461bcd60e51b815260040161045a906115df565b6097805460ff19169055565b60608315611299575081610517565b8251156112a95782518084602001fd5b8160405162461bcd60e51b815260040161045a91906114c6565b6000602082840312156112d557600080fd5b81356105178161166c565b600080604083850312156112f357600080fd5b82356112fe8161166c565b91506020830135801515811461131357600080fd5b809150509250929050565b6000806040838503121561133157600080fd5b823561133c8161166c565b9150602083013567ffffffffffffffff8082111561135957600080fd5b818501915085601f83011261136d57600080fd5b81358181111561137f5761137f611656565b604051601f8201601f19908116603f011681019083821181831017156113a7576113a7611656565b816040528281528860208487010111156113c057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000602082840312156113f457600080fd5b5051919050565b60006020828403121561140d57600080fd5b81516105178161166c565b6000806000806080858703121561142e57600080fd5b84356114398161166c565b935060208501356114498161166c565b925060408501356114598161166c565b9396929550929360600135925050565b60008060006060848603121561147e57600080fd5b83356114898161166c565b925060208401356114998161166c565b929592945050506040919091013590565b600082516114bc81846020870161162a565b9190910192915050565b60208152600082518060208401526114e581604085016020870161162a565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b8381101561164557818101518382015260200161162d565b838111156110365750506000910152565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146104f757600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212208139aca739931ef0f8fd5924a13a81f3fbdeba78904688f2d72bcc1245aee53f64736f6c63430008060033",
"bytecode": "0x60c06040523060805234801561001457600080fd5b506040516118ed3803806118ed83398101604081905261003391610044565b6001600160a01b031660a052610074565b60006020828403121561005657600080fd5b81516001600160a01b038116811461006d57600080fd5b9392505050565b60805160a05161180e6100df600039600081816102340152818161054f015281816108b0015281816109da01528181610b4101528181610bf80152610cf601526000818161041b0152818161046401528181610661015281816106a10152610730015261180e6000f3fe6080604052600436106101145760003560e01c80635b494dd5116100a05780638456cb59116100645780638456cb591461035f578063aad4148c14610374578063b9a45aac146103a8578063e5a6b10f146103c8578063f67b2bad146103dd57600080fd5b80635b494dd5146102945780635c975abb146102c85780635fcdca37146102e05780637ed5acfa1461031d5780638129fc1c1461034a57600080fd5b8063468a8c9f116100e7578063468a8c9f146101b55780634a47a3e0146101f15780634d15eb03146102255780634f1ef2861461026c57806352d1902d1461027f57600080fd5b806324ea54f4146101195780633659cfe61461014e57806337ee20dd146101705780633f4ba83a146101a0575b600080fd5b34801561012557600080fd5b5061013b6000805160206117b983398151915281565b6040519081526020015b60405180910390f35b34801561015a57600080fd5b5061016e6101693660046113d0565b610411565b005b34801561017c57600080fd5b5061019061018b3660046113ed565b6104f9565b6040519015158152602001610145565b3480156101ac57600080fd5b5061016e61051d565b3480156101c157600080fd5b5060c9546040805164ffffffffff831681526501000000000090920466ffffffffffffff16602083015201610145565b3480156101fd57600080fd5b5061013b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b34801561023157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610145565b61016e61027a366004611444565b610657565b34801561028b57600080fd5b5061013b610723565b3480156102a057600080fd5b5061013b7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156102d457600080fd5b5060975460ff16610190565b3480156102ec57600080fd5b506101906102fb366004611508565b506001600160a01b0316600090815260ca602052604090205460ff1692915050565b34801561032957600080fd5b506103346201518081565b60405164ffffffffff9091168152602001610145565b34801561035657600080fd5b5061016e6107d6565b34801561036b57600080fd5b5061016e61089f565b34801561038057600080fd5b5061013b7fb494869573b0a0ce9caac5394e1d0d255d146ec7e2d30d643a4e1d78980f323581565b3480156103b457600080fd5b5061016e6103c3366004611559565b6109b7565b3480156103d457600080fd5b50610254610b3d565b3480156103e957600080fd5b5061013b7fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb281565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104625760405162461bcd60e51b815260040161045990611597565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166104ab600080516020611772833981519152546001600160a01b031690565b6001600160a01b0316146104d15760405162461bcd60e51b8152600401610459906115e3565b6104da81610bc6565b604080516000808252602082019092526104f691839190610dea565b50565b6001600160a01b038216600090815260ca602052604090205460ff165b9392505050565b6000805160206117b98339815191527fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cf919061162f565b60408051632b1cff1f60e01b815230600482015260248101859052604481018490523360648201526001608482015290516001600160a01b039290921691632b1cff1f9160a480820192600092909190829003018186803b15801561063357600080fd5b505afa158015610647573d6000803e3d6000fd5b50505050610653610f55565b5050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361069f5760405162461bcd60e51b815260040161045990611597565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106e8600080516020611772833981519152546001600160a01b031690565b6001600160a01b03161461070e5760405162461bcd60e51b8152600401610459906115e3565b61071782610bc6565b61065382826001610dea565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107c35760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610459565b5060008051602061177283398151915290565b600054610100900460ff16158080156107f65750600054600160ff909116105b806108105750303b158015610810575060005460ff166001145b61082c5760405162461bcd60e51b81526004016104599061164c565b6000805460ff19166001179055801561084f576000805461ff0019166101001790555b610857610fa7565b80156104f6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000805160206117b98339815191527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610930919061162f565b6001600160a01b0316635ff57d2030833360405160e085901b6001600160e01b03191681526001600160a01b039384166004820152602481019290925290911660448201526001606482015260840160006040518083038186803b15801561099757600080fd5b505afa1580156109ab573d6000803e3d6000fd5b505050506104f6611030565b7fb494869573b0a0ce9caac5394e1d0d255d146ec7e2d30d643a4e1d78980f32357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a919061162f565b6001600160a01b0316635ff57d2030833360405160e085901b6001600160e01b03191681526001600160a01b039384166004820152602481019290925290911660448201526000606482015260840160006040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506001600160a01b038316600081815260ca6020908152604091829020805460ff19168615159081179091558251938452908301527f8ef34cf5cfaa6ce2f80f1ba2912749c912a8b07c4fb8e9949e928e7cb592918f910160405180910390a1505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc1919061162f565b905090565b6000805160206117b98339815191527fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c78919061162f565b60408051632b1cff1f60e01b815230600482015260248101859052604481018490523360648201526001608482015290516001600160a01b039290921691632b1cff1f9160a480820192600092909190829003018186803b158015610cdc57600080fd5b505afa158015610cf0573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d80919061162f565b6001600160a01b031614610de55760405162461bcd60e51b815260206004820152602660248201527f43616e27742075706772616465206368616e67696e672074686520506f6c696360448201526579506f6f6c2160d01b6064820152608401610459565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610e1d57610de58361106d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e77575060408051601f3d908101601f19168201909252610e749181019061169a565b60015b610eda5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610459565b6000805160206117728339815191528114610f495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610459565b50610de5838383611109565b610f5d611134565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff1615808015610fc75750600054600160ff909116105b80610fe15750303b158015610fe1575060005460ff166001145b610ffd5760405162461bcd60e51b81526004016104599061164c565b6000805460ff191660011790558015611020576000805461ff0019166101001790555b61102861117f565b6108576111a6565b6110386111d5565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f8a3390565b6001600160a01b0381163b6110da5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610459565b60008051602061177283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6111128361121b565b60008251118061111f5750805b15610de55761112e838361125b565b50505050565b60975460ff1661117d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610459565b565b600054610100900460ff1661117d5760405162461bcd60e51b8152600401610459906116b3565b600054610100900460ff166111cd5760405162461bcd60e51b8152600401610459906116b3565b61117d61134f565b60975460ff161561117d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610459565b6112248161106d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6112c35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610459565b600080846001600160a01b0316846040516112de9190611722565b600060405180830381855af49150503d8060008114611319576040519150601f19603f3d011682016040523d82523d6000602084013e61131e565b606091505b5091509150611346828260405180606001604052806027815260200161179260279139611382565b95945050505050565b600054610100900460ff166113765760405162461bcd60e51b8152600401610459906116b3565b6097805460ff19169055565b60608315611391575081610516565b8251156113a15782518084602001fd5b8160405162461bcd60e51b8152600401610459919061173e565b6001600160a01b03811681146104f657600080fd5b6000602082840312156113e257600080fd5b8135610516816113bb565b60008060006060848603121561140257600080fd5b833561140d816113bb565b9250602084013561141d816113bb565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561145757600080fd5b8235611462816113bb565b9150602083013567ffffffffffffffff8082111561147f57600080fd5b818501915085601f83011261149357600080fd5b8135818111156114a5576114a561142e565b604051601f8201601f19908116603f011681019083821181831017156114cd576114cd61142e565b816040528281528860208487010111156114e657600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806000806080858703121561151e57600080fd5b8435611529816113bb565b93506020850135611539816113bb565b92506040850135611549816113bb565b9396929550929360600135925050565b6000806040838503121561156c57600080fd5b8235611577816113bb565b91506020830135801515811461158c57600080fd5b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561164157600080fd5b8151610516816113bb565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156116ac57600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611719578181015183820152602001611701565b50506000910152565b600082516117348184602087016116fe565b9190910192915050565b602081526000825180602084015261175d8160408501602087016116fe565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212206c8e6d04062c80ea3821068402e8d9938113d9275197f270b05d7d1b1b50441b64736f6c63430008100033",
"deployedBytecode": "0x6080604052600436106101145760003560e01c80635b494dd5116100a05780638456cb59116100645780638456cb591461035f578063aad4148c14610374578063b9a45aac146103a8578063e5a6b10f146103c8578063f67b2bad146103dd57600080fd5b80635b494dd5146102945780635c975abb146102c85780635fcdca37146102e05780637ed5acfa1461031d5780638129fc1c1461034a57600080fd5b8063468a8c9f116100e7578063468a8c9f146101b55780634a47a3e0146101f15780634d15eb03146102255780634f1ef2861461026c57806352d1902d1461027f57600080fd5b806324ea54f4146101195780633659cfe61461014e57806337ee20dd146101705780633f4ba83a146101a0575b600080fd5b34801561012557600080fd5b5061013b6000805160206117b983398151915281565b6040519081526020015b60405180910390f35b34801561015a57600080fd5b5061016e6101693660046113d0565b610411565b005b34801561017c57600080fd5b5061019061018b3660046113ed565b6104f9565b6040519015158152602001610145565b3480156101ac57600080fd5b5061016e61051d565b3480156101c157600080fd5b5060c9546040805164ffffffffff831681526501000000000090920466ffffffffffffff16602083015201610145565b3480156101fd57600080fd5b5061013b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b34801561023157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610145565b61016e61027a366004611444565b610657565b34801561028b57600080fd5b5061013b610723565b3480156102a057600080fd5b5061013b7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156102d457600080fd5b5060975460ff16610190565b3480156102ec57600080fd5b506101906102fb366004611508565b506001600160a01b0316600090815260ca602052604090205460ff1692915050565b34801561032957600080fd5b506103346201518081565b60405164ffffffffff9091168152602001610145565b34801561035657600080fd5b5061016e6107d6565b34801561036b57600080fd5b5061016e61089f565b34801561038057600080fd5b5061013b7fb494869573b0a0ce9caac5394e1d0d255d146ec7e2d30d643a4e1d78980f323581565b3480156103b457600080fd5b5061016e6103c3366004611559565b6109b7565b3480156103d457600080fd5b50610254610b3d565b3480156103e957600080fd5b5061013b7fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb281565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036104625760405162461bcd60e51b815260040161045990611597565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166104ab600080516020611772833981519152546001600160a01b031690565b6001600160a01b0316146104d15760405162461bcd60e51b8152600401610459906115e3565b6104da81610bc6565b604080516000808252602082019092526104f691839190610dea565b50565b6001600160a01b038216600090815260ca602052604090205460ff165b9392505050565b6000805160206117b98339815191527fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cf919061162f565b60408051632b1cff1f60e01b815230600482015260248101859052604481018490523360648201526001608482015290516001600160a01b039290921691632b1cff1f9160a480820192600092909190829003018186803b15801561063357600080fd5b505afa158015610647573d6000803e3d6000fd5b50505050610653610f55565b5050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361069f5760405162461bcd60e51b815260040161045990611597565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106e8600080516020611772833981519152546001600160a01b031690565b6001600160a01b03161461070e5760405162461bcd60e51b8152600401610459906115e3565b61071782610bc6565b61065382826001610dea565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107c35760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610459565b5060008051602061177283398151915290565b600054610100900460ff16158080156107f65750600054600160ff909116105b806108105750303b158015610810575060005460ff166001145b61082c5760405162461bcd60e51b81526004016104599061164c565b6000805460ff19166001179055801561084f576000805461ff0019166101001790555b610857610fa7565b80156104f6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000805160206117b98339815191527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610930919061162f565b6001600160a01b0316635ff57d2030833360405160e085901b6001600160e01b03191681526001600160a01b039384166004820152602481019290925290911660448201526001606482015260840160006040518083038186803b15801561099757600080fd5b505afa1580156109ab573d6000803e3d6000fd5b505050506104f6611030565b7fb494869573b0a0ce9caac5394e1d0d255d146ec7e2d30d643a4e1d78980f32357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a919061162f565b6001600160a01b0316635ff57d2030833360405160e085901b6001600160e01b03191681526001600160a01b039384166004820152602481019290925290911660448201526000606482015260840160006040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506001600160a01b038316600081815260ca6020908152604091829020805460ff19168615159081179091558251938452908301527f8ef34cf5cfaa6ce2f80f1ba2912749c912a8b07c4fb8e9949e928e7cb592918f910160405180910390a1505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc1919061162f565b905090565b6000805160206117b98339815191527fbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c78919061162f565b60408051632b1cff1f60e01b815230600482015260248101859052604481018490523360648201526001608482015290516001600160a01b039290921691632b1cff1f9160a480820192600092909190829003018186803b158015610cdc57600080fd5b505afa158015610cf0573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d80919061162f565b6001600160a01b031614610de55760405162461bcd60e51b815260206004820152602660248201527f43616e27742075706772616465206368616e67696e672074686520506f6c696360448201526579506f6f6c2160d01b6064820152608401610459565b505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610e1d57610de58361106d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e77575060408051601f3d908101601f19168201909252610e749181019061169a565b60015b610eda5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610459565b6000805160206117728339815191528114610f495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610459565b50610de5838383611109565b610f5d611134565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff1615808015610fc75750600054600160ff909116105b80610fe15750303b158015610fe1575060005460ff166001145b610ffd5760405162461bcd60e51b81526004016104599061164c565b6000805460ff191660011790558015611020576000805461ff0019166101001790555b61102861117f565b6108576111a6565b6110386111d5565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f8a3390565b6001600160a01b0381163b6110da5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610459565b60008051602061177283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6111128361121b565b60008251118061111f5750805b15610de55761112e838361125b565b50505050565b60975460ff1661117d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610459565b565b600054610100900460ff1661117d5760405162461bcd60e51b8152600401610459906116b3565b600054610100900460ff166111cd5760405162461bcd60e51b8152600401610459906116b3565b61117d61134f565b60975460ff161561117d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610459565b6112248161106d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6112c35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610459565b600080846001600160a01b0316846040516112de9190611722565b600060405180830381855af49150503d8060008114611319576040519150601f19603f3d011682016040523d82523d6000602084013e61131e565b606091505b5091509150611346828260405180606001604052806027815260200161179260279139611382565b95945050505050565b600054610100900460ff166113765760405162461bcd60e51b8152600401610459906116b3565b6097805460ff19169055565b60608315611391575081610516565b8251156113a15782518084602001fd5b8160405162461bcd60e51b8152600401610459919061173e565b6001600160a01b03811681146104f657600080fd5b6000602082840312156113e257600080fd5b8135610516816113bb565b60008060006060848603121561140257600080fd5b833561140d816113bb565b9250602084013561141d816113bb565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561145757600080fd5b8235611462816113bb565b9150602083013567ffffffffffffffff8082111561147f57600080fd5b818501915085601f83011261149357600080fd5b8135818111156114a5576114a561142e565b604051601f8201601f19908116603f011681019083821181831017156114cd576114cd61142e565b816040528281528860208487010111156114e657600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806000806080858703121561151e57600080fd5b8435611529816113bb565b93506020850135611539816113bb565b92506040850135611549816113bb565b9396929550929360600135925050565b6000806040838503121561156c57600080fd5b8235611577816113bb565b91506020830135801515811461158c57600080fd5b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561164157600080fd5b8151610516816113bb565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156116ac57600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611719578181015183820152602001611701565b50506000910152565b600082516117348184602087016116fe565b9190910192915050565b602081526000825180602084015261175d8160408501602087016116fe565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212206c8e6d04062c80ea3821068402e8d9938113d9275197f270b05d7d1b1b50441b64736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}

@@ -39,6 +39,6 @@ {

],
"bytecode": "0x608060405234801561001057600080fd5b5060405161019e38038061019e83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61010b806100936000396000f3fe608060405260043610601f5760003560e01c8063d4b2700114603157602b565b36602b576029606a565b005b6029606a565b348015603c57600080fd5b506029604836600460a7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6081607d6000546001600160a01b031690565b6083565b565b366000803760008036600080855af13d6000803e80801560a2573d6000f35b3d6000fd5b60006020828403121560b857600080fd5b81356001600160a01b038116811460ce57600080fd5b939250505056fea2646970667358221220903778e2b7525b81f8fbe969b117bee6246d2186595028875c123d4a2e2c0fe864736f6c63430008060033",
"deployedBytecode": "0x608060405260043610601f5760003560e01c8063d4b2700114603157602b565b36602b576029606a565b005b6029606a565b348015603c57600080fd5b506029604836600460a7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6081607d6000546001600160a01b031690565b6083565b565b366000803760008036600080855af13d6000803e80801560a2573d6000f35b3d6000fd5b60006020828403121560b857600080fd5b81356001600160a01b038116811460ce57600080fd5b939250505056fea2646970667358221220903778e2b7525b81f8fbe969b117bee6246d2186595028875c123d4a2e2c0fe864736f6c63430008060033",
"bytecode": "0x608060405234801561001057600080fd5b5060405161019e38038061019e83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61010b806100936000396000f3fe608060405260043610601f5760003560e01c8063d4b2700114603157602b565b36602b576029606a565b005b6029606a565b348015603c57600080fd5b506029604836600460a7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6081607d6000546001600160a01b031690565b6083565b565b366000803760008036600080855af13d6000803e80801560a2573d6000f35b3d6000fd5b60006020828403121560b857600080fd5b81356001600160a01b038116811460ce57600080fd5b939250505056fea264697066735822122083969eb0e0fcd9e4efc6624dcddf2e216c77e0517fd06100200f828c5277e4a564736f6c63430008100033",
"deployedBytecode": "0x608060405260043610601f5760003560e01c8063d4b2700114603157602b565b36602b576029606a565b005b6029606a565b348015603c57600080fd5b506029604836600460a7565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6081607d6000546001600160a01b031690565b6083565b565b366000803760008036600080855af13d6000803e80801560a2573d6000f35b3d6000fd5b60006020828403121560b857600080fd5b81356001600160a01b038116811460ce57600080fd5b939250505056fea264697066735822122083969eb0e0fcd9e4efc6624dcddf2e216c77e0517fd06100200f828c5277e4a564736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}

@@ -62,2 +62,15 @@ {

{
"inputs": [],
"name": "notImplemented",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [

@@ -197,8 +210,21 @@ {

"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "notImplemented_",
"type": "bool"
}
],
"name": "setNotImplemented",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b506040516105c23803806105c283398101604081905261002f9161004b565b6002805460ff1916911515919091179055600019600155610074565b60006020828403121561005d57600080fd5b8151801515811461006d57600080fd5b9392505050565b61053f806100836000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a9cc47181161005b578063a9cc4718146100ed578063d6281d3e1461010a578063e8e617b71461011d578063ee89ef3a1461013057600080fd5b8063150b7a021461008257806363bd1d4a146100b35780639d769402146100ca575b600080fd5b6100956100903660046103dc565b610139565b6040516001600160e01b031990911681526020015b60405180910390f35b6100bc60015481565b6040519081526020016100aa565b6100eb6100d83660046104b9565b6002805460ff1916911515919091179055565b005b6002546100fa9060ff1681565b60405190151581526020016100aa565b610095610118366004610477565b6101fd565b61009561012b3660046103a0565b6102c3565b6100bc60005481565b60025460009060ff16156101aa5760405162461bcd60e51b815260206004820152602d60248201527f6f6e45524337323152656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084015b60405180910390fd5b60008481556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa916101e39187908a908a906104e2565b60405180910390a150630a85bd0160e11b95945050505050565b60025460009060ff16156102695760405162461bcd60e51b815260206004820152602d60248201527f6f6e5061796f757452656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084016101a1565b600083905560018290556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa906102aa906002908690899089906104e2565b60405180910390a150636b140e9f60e11b949350505050565b60025460009060ff161561032e5760405162461bcd60e51b815260206004820152602c60248201527f6f6e506f6c696379457870697265643a205468657920746f6c64206d6520492060448201526b1a185d99481d1bc819985a5b60a21b60648201526084016101a1565b600082815560019081556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa9161036c918590889088906104e2565b60405180910390a15063e8e617b760e01b9392505050565b80356001600160a01b038116811461039b57600080fd5b919050565b6000806000606084860312156103b557600080fd5b6103be84610384565b92506103cc60208501610384565b9150604084013590509250925092565b6000806000806000608086880312156103f457600080fd5b6103fd86610384565b945061040b60208701610384565b935060408601359250606086013567ffffffffffffffff8082111561042f57600080fd5b818801915088601f83011261044357600080fd5b81358181111561045257600080fd5b89602082850101111561046457600080fd5b9699959850939650602001949392505050565b6000806000806080858703121561048d57600080fd5b61049685610384565b93506104a460208601610384565b93969395505050506040820135916060013590565b6000602082840312156104cb57600080fd5b813580151581146104db57600080fd5b9392505050565b93845260208401929092526001600160a01b0390811660408401521660608201526080019056fea2646970667358221220ff0a0b558202892f7b77c8a173149788d556e0af5d577d9eac36bd75eb6f4ab364736f6c63430008060033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a9cc47181161005b578063a9cc4718146100ed578063d6281d3e1461010a578063e8e617b71461011d578063ee89ef3a1461013057600080fd5b8063150b7a021461008257806363bd1d4a146100b35780639d769402146100ca575b600080fd5b6100956100903660046103dc565b610139565b6040516001600160e01b031990911681526020015b60405180910390f35b6100bc60015481565b6040519081526020016100aa565b6100eb6100d83660046104b9565b6002805460ff1916911515919091179055565b005b6002546100fa9060ff1681565b60405190151581526020016100aa565b610095610118366004610477565b6101fd565b61009561012b3660046103a0565b6102c3565b6100bc60005481565b60025460009060ff16156101aa5760405162461bcd60e51b815260206004820152602d60248201527f6f6e45524337323152656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084015b60405180910390fd5b60008481556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa916101e39187908a908a906104e2565b60405180910390a150630a85bd0160e11b95945050505050565b60025460009060ff16156102695760405162461bcd60e51b815260206004820152602d60248201527f6f6e5061796f757452656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084016101a1565b600083905560018290556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa906102aa906002908690899089906104e2565b60405180910390a150636b140e9f60e11b949350505050565b60025460009060ff161561032e5760405162461bcd60e51b815260206004820152602c60248201527f6f6e506f6c696379457870697265643a205468657920746f6c64206d6520492060448201526b1a185d99481d1bc819985a5b60a21b60648201526084016101a1565b600082815560019081556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa9161036c918590889088906104e2565b60405180910390a15063e8e617b760e01b9392505050565b80356001600160a01b038116811461039b57600080fd5b919050565b6000806000606084860312156103b557600080fd5b6103be84610384565b92506103cc60208501610384565b9150604084013590509250925092565b6000806000806000608086880312156103f457600080fd5b6103fd86610384565b945061040b60208701610384565b935060408601359250606086013567ffffffffffffffff8082111561042f57600080fd5b818801915088601f83011261044357600080fd5b81358181111561045257600080fd5b89602082850101111561046457600080fd5b9699959850939650602001949392505050565b6000806000806080858703121561048d57600080fd5b61049685610384565b93506104a460208601610384565b93969395505050506040820135916060013590565b6000602082840312156104cb57600080fd5b813580151581146104db57600080fd5b9392505050565b93845260208401929092526001600160a01b0390811660408401521660608201526080019056fea2646970667358221220ff0a0b558202892f7b77c8a173149788d556e0af5d577d9eac36bd75eb6f4ab364736f6c63430008060033",
"bytecode": "0x608060405234801561001057600080fd5b5060405161065738038061065783398101604081905261002f91610051565b6002805461ffff191691151561ff00191691909117905560001960015561007a565b60006020828403121561006357600080fd5b8151801515811461007357600080fd5b9392505050565b6105ce806100896000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a9cc471811610066578063a9cc471814610125578063aeec8f9d14610132578063d6281d3e1461015a578063e8e617b71461016d578063ee89ef3a1461018057600080fd5b8063150b7a021461009857806335287014146100c957806363bd1d4a146100eb5780639d76940214610102575b600080fd5b6100ab6100a636600461042f565b610189565b6040516001600160e01b031990911681526020015b60405180910390f35b6002546100db90610100900460ff1681565b60405190151581526020016100c0565b6100f460015481565b6040519081526020016100c0565b6101236101103660046104ca565b6002805460ff1916911515919091179055565b005b6002546100db9060ff1681565b6101236101403660046104ca565b600280549115156101000261ff0019909216919091179055565b6100ab6101683660046104f3565b610262565b6100ab61017b366004610535565b61033d565b6100f460005481565b600254600090610100900460ff16156101a157600080fd5b60025460ff161561020f5760405162461bcd60e51b815260206004820152602d60248201527f6f6e45524337323152656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084015b60405180910390fd5b60008481556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa916102489187908a908a90610571565b60405180910390a150630a85bd0160e11b95945050505050565b600254600090610100900460ff161561027a57600080fd5b60025460ff16156102e35760405162461bcd60e51b815260206004820152602d60248201527f6f6e5061796f757452656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b6064820152608401610206565b600083905560018290556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa9061032490600290869089908990610571565b60405180910390a150636b140e9f60e11b949350505050565b600254600090610100900460ff161561035557600080fd5b60025460ff16156103bd5760405162461bcd60e51b815260206004820152602c60248201527f6f6e506f6c696379457870697265643a205468657920746f6c64206d6520492060448201526b1a185d99481d1bc819985a5b60a21b6064820152608401610206565b600082815560019081556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa916103fb91859088908890610571565b60405180910390a15063e8e617b760e01b9392505050565b80356001600160a01b038116811461042a57600080fd5b919050565b60008060008060006080868803121561044757600080fd5b61045086610413565b945061045e60208701610413565b935060408601359250606086013567ffffffffffffffff8082111561048257600080fd5b818801915088601f83011261049657600080fd5b8135818111156104a557600080fd5b8960208285010111156104b757600080fd5b9699959850939650602001949392505050565b6000602082840312156104dc57600080fd5b813580151581146104ec57600080fd5b9392505050565b6000806000806080858703121561050957600080fd5b61051285610413565b935061052060208601610413565b93969395505050506040820135916060013590565b60008060006060848603121561054a57600080fd5b61055384610413565b925061056160208501610413565b9150604084013590509250925092565b93845260208401929092526001600160a01b0390811660408401521660608201526080019056fea2646970667358221220ad9fec30fcba6ad35a9231e48933da5874bebec9114f0101868787d28020778c64736f6c63430008100033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063a9cc471811610066578063a9cc471814610125578063aeec8f9d14610132578063d6281d3e1461015a578063e8e617b71461016d578063ee89ef3a1461018057600080fd5b8063150b7a021461009857806335287014146100c957806363bd1d4a146100eb5780639d76940214610102575b600080fd5b6100ab6100a636600461042f565b610189565b6040516001600160e01b031990911681526020015b60405180910390f35b6002546100db90610100900460ff1681565b60405190151581526020016100c0565b6100f460015481565b6040519081526020016100c0565b6101236101103660046104ca565b6002805460ff1916911515919091179055565b005b6002546100db9060ff1681565b6101236101403660046104ca565b600280549115156101000261ff0019909216919091179055565b6100ab6101683660046104f3565b610262565b6100ab61017b366004610535565b61033d565b6100f460005481565b600254600090610100900460ff16156101a157600080fd5b60025460ff161561020f5760405162461bcd60e51b815260206004820152602d60248201527f6f6e45524337323152656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b60648201526084015b60405180910390fd5b60008481556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa916102489187908a908a90610571565b60405180910390a150630a85bd0160e11b95945050505050565b600254600090610100900460ff161561027a57600080fd5b60025460ff16156102e35760405162461bcd60e51b815260206004820152602d60248201527f6f6e5061796f757452656365697665643a205468657920746f6c64206d65204960448201526c081a185d99481d1bc819985a5b609a1b6064820152608401610206565b600083905560018290556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa9061032490600290869089908990610571565b60405180910390a150636b140e9f60e11b949350505050565b600254600090610100900460ff161561035557600080fd5b60025460ff16156103bd5760405162461bcd60e51b815260206004820152602c60248201527f6f6e506f6c696379457870697265643a205468657920746f6c64206d6520492060448201526b1a185d99481d1bc819985a5b60a21b6064820152608401610206565b600082815560019081556040517fed80108518efd09a475da47e8e2247346c5d2dea917fc27629cd0d1ebba504aa916103fb91859088908890610571565b60405180910390a15063e8e617b760e01b9392505050565b80356001600160a01b038116811461042a57600080fd5b919050565b60008060008060006080868803121561044757600080fd5b61045086610413565b945061045e60208701610413565b935060408601359250606086013567ffffffffffffffff8082111561048257600080fd5b818801915088601f83011261049657600080fd5b8135818111156104a557600080fd5b8960208285010111156104b757600080fd5b9699959850939650602001949392505050565b6000602082840312156104dc57600080fd5b813580151581146104ec57600080fd5b9392505050565b6000806000806080858703121561050957600080fd5b61051285610413565b935061052060208601610413565b93969395505050506040820135916060013590565b60008060006060848603121561054a57600080fd5b61055384610413565b925061056160208501610413565b9150604084013590509250925092565b93845260208401929092526001600160a01b0390811660408401521660608201526080019056fea2646970667358221220ad9fec30fcba6ad35a9231e48933da5874bebec9114f0101868787d28020778c64736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}

@@ -31,6 +31,6 @@ {

],
"bytecode": "0x60a060405234801561001057600080fd5b5060405161012f38038061012f83398101604081905261002f91610044565b60601b6001600160601b031916608052610074565b60006020828403121561005657600080fd5b81516001600160a01b038116811461006d57600080fd5b9392505050565b60805160601c60a061008f6000396000602f015260a06000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634d15eb0314602d575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006040516001600160a01b03909116815260200160405180910390f3fea2646970667358221220697c4d08c7696d477a2965efb8602a2554b52cb48204c8ff30a0241d4139458964736f6c63430008060033",
"deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c80634d15eb0314602d575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006040516001600160a01b03909116815260200160405180910390f3fea2646970667358221220697c4d08c7696d477a2965efb8602a2554b52cb48204c8ff30a0241d4139458964736f6c63430008060033",
"bytecode": "0x60a060405234801561001057600080fd5b5060405161012838038061012883398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805160a06100886000396000602f015260a06000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634d15eb0314602d575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006040516001600160a01b03909116815260200160405180910390f3fea26469706673582212208fa13d12c935124e3d1e32e1ec5aee1fbf95d4c5030facc3a25972165a4d78aa64736f6c63430008100033",
"deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c80634d15eb0314602d575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006040516001600160a01b03909116815260200160405180910390f3fea26469706673582212208fa13d12c935124e3d1e32e1ec5aee1fbf95d4c5030facc3a25972165a4d78aa64736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}

@@ -14,4 +14,4 @@ {

{
"internalType": "contract IPolicyPoolConfig",
"name": "config_",
"internalType": "contract IAccessManager",
"name": "access_",
"type": "address"

@@ -154,6 +154,6 @@ }

"inputs": [],
"name": "config",
"name": "access",
"outputs": [
{
"internalType": "contract IPolicyPoolConfig",
"internalType": "contract IAccessManager",
"name": "",

@@ -285,5 +285,99 @@ "type": "address"

{
"internalType": "contract IRiskModule",
"name": "riskModule",
"type": "address"
},
{
"components": [
{
"internalType": "uint256",
"name": "moc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrCollRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "collRatio",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroPpFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ensuroCocFee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "jrRoc",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "srRoc",
"type": "uint256"
}
],
"internalType": "struct IRiskModule.Params",
"name": "rmParams",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "premium",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "payout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lossProb",
"type": "uint256"
},
{
"internalType": "uint40",
"name": "expiration",
"type": "uint40"
}
],
"name": "initializeAndEmitPolicy",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "policyId",
"type": "uint256"
}
],
"name": "isActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "id",

@@ -368,2 +462,7 @@ "type": "uint256"

{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint96",

@@ -386,15 +485,2 @@ "name": "internalId",

{
"inputs": [],
"name": "policyNFT",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [

@@ -580,2 +666,15 @@ {

{
"inputs": [],
"name": "treasury",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [

@@ -605,6 +704,6 @@ {

],
"bytecode": "0x608060405234801561001057600080fd5b506040516109ad3803806109ad83398101604081905261002f916100af565b600080546001600160a01b038085166001600160a01b0319928316178355600180549185169190921681179091556040805163948cb71960e01b81529051919263948cb7199260048084019382900301818387803b15801561009057600080fd5b505af11580156100a4573d6000803e3d6000fd5b505050505050610101565b600080604083850312156100c257600080fd5b82516100cd816100e9565b60208401519092506100de816100e9565b809150509250929050565b6001600160a01b03811681146100fe57600080fd5b50565b61089d806101106000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80639178766011610066578063917876601461011f578063af02808a14610132578063e5a6b10f14610139578063f3fef3a31461014a578063ffa600e31461015d57600080fd5b8063098d3228146100a357806347e7ef24146100bf5780636af6f1ef146100d457806379502c55146100e75780637a702b3c1461010c575b600080fd5b6100ac60001981565b6040519081526020015b60405180910390f35b6100d26100cd3660046105ff565b610170565b005b6100d26100e236600461062b565b6101bd565b6001546001600160a01b03165b6040516001600160a01b0390911681526020016100b6565b6100d261011a36600461068e565b6101d9565b6100ac61012d3660046106d8565b6101f5565b60006100f4565b6000546001600160a01b03166100f4565b6100ac6101583660046105ff565b610285565b6100d261016b36600461064f565b6102d0565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b6101d66101cf368390038301836106bb565b60006102f4565b50565b6101f16101eb368490038401846106bb565b826102f4565b5050565b6000816bffffffffffffffffffffffff1660608561016001516001600160a01b0316901b610223919061082c565b845261022e846104ca565b845160009081526003602052604090819020919091555133907f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b90610274908790610736565b60405180910390a250509051919050565b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e746564207769746864726177000000000000000060448201526000906064016101b4565b6101f16102e2368490038401846106bb565b826102ee5760006102f4565b83602001355b81516103355760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016101b4565b815160009081526003602052604090205461034f836104ca565b146103915760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b60448201526064016101b4565b8161016001516001600160a01b0316336001600160a01b0316146104135760405162461bcd60e51b815260206004820152603360248201527f4f6e6c79207269736b4d6f64756c6520697320617574686f72697a656420746f604482015272207265736f6c76652074686520706f6c69637960681b60648201526084016101b4565b81516000908152600260208181526040808420848155600181018590559283018490556003808401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a8401859055600b90930180546001600160f01b0319169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b6000816040516020016104dd9190610736565b604051602081830303815290604052805190602001209050919050565b803561050581610852565b919050565b60006101c0828403121561051d57600080fd5b50919050565b60006101c0828403121561053657600080fd5b61053e6107f4565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013581830152506101606105bc8184016104fa565b908201526101806105ce8382016105ea565b908201526101a06105e08382016105ea565b9082015292915050565b803564ffffffffff8116811461050557600080fd5b6000806040838503121561061257600080fd5b823561061d81610852565b946020939093013593505050565b60006101c0828403121561063e57600080fd5b610648838361050a565b9392505050565b6000806101e0838503121561066357600080fd5b61066d848461050a565b91506101c0830135801515811461068357600080fd5b809150509250929050565b6000806101e083850312156106a257600080fd5b6106ac848461050a565b946101c0939093013593505050565b60006101c082840312156106ce57600080fd5b6106488383610523565b600080600061020084860312156106ee57600080fd5b6106f88585610523565b92506101c084013561070981610852565b91506101e08401356bffffffffffffffffffffffff8116811461072b57600080fd5b809150509250925092565b60006101c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401518184015250610160808401516107c8828501826001600160a01b03169052565b50506101808381015164ffffffffff908116918401919091526101a09384015116929091019190915290565b6040516101c0810167ffffffffffffffff8111828210171561082657634e487b7160e01b600052604160045260246000fd5b60405290565b6000821982111561084d57634e487b7160e01b600052601160045260246000fd5b500190565b6001600160a01b03811681146101d657600080fdfea26469706673582212205ea2149522f97038d7a1b0c5eb5a25b9f79368e8d7bcc71a7c4c42de0c17bd5164736f6c63430008060033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80639178766011610066578063917876601461011f578063af02808a14610132578063e5a6b10f14610139578063f3fef3a31461014a578063ffa600e31461015d57600080fd5b8063098d3228146100a357806347e7ef24146100bf5780636af6f1ef146100d457806379502c55146100e75780637a702b3c1461010c575b600080fd5b6100ac60001981565b6040519081526020015b60405180910390f35b6100d26100cd3660046105ff565b610170565b005b6100d26100e236600461062b565b6101bd565b6001546001600160a01b03165b6040516001600160a01b0390911681526020016100b6565b6100d261011a36600461068e565b6101d9565b6100ac61012d3660046106d8565b6101f5565b60006100f4565b6000546001600160a01b03166100f4565b6100ac6101583660046105ff565b610285565b6100d261016b36600461064f565b6102d0565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b6101d66101cf368390038301836106bb565b60006102f4565b50565b6101f16101eb368490038401846106bb565b826102f4565b5050565b6000816bffffffffffffffffffffffff1660608561016001516001600160a01b0316901b610223919061082c565b845261022e846104ca565b845160009081526003602052604090819020919091555133907f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b90610274908790610736565b60405180910390a250509051919050565b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e746564207769746864726177000000000000000060448201526000906064016101b4565b6101f16102e2368490038401846106bb565b826102ee5760006102f4565b83602001355b81516103355760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016101b4565b815160009081526003602052604090205461034f836104ca565b146103915760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b60448201526064016101b4565b8161016001516001600160a01b0316336001600160a01b0316146104135760405162461bcd60e51b815260206004820152603360248201527f4f6e6c79207269736b4d6f64756c6520697320617574686f72697a656420746f604482015272207265736f6c76652074686520706f6c69637960681b60648201526084016101b4565b81516000908152600260208181526040808420848155600181018590559283018490556003808401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a8401859055600b90930180546001600160f01b0319169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b6000816040516020016104dd9190610736565b604051602081830303815290604052805190602001209050919050565b803561050581610852565b919050565b60006101c0828403121561051d57600080fd5b50919050565b60006101c0828403121561053657600080fd5b61053e6107f4565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013581830152506101606105bc8184016104fa565b908201526101806105ce8382016105ea565b908201526101a06105e08382016105ea565b9082015292915050565b803564ffffffffff8116811461050557600080fd5b6000806040838503121561061257600080fd5b823561061d81610852565b946020939093013593505050565b60006101c0828403121561063e57600080fd5b610648838361050a565b9392505050565b6000806101e0838503121561066357600080fd5b61066d848461050a565b91506101c0830135801515811461068357600080fd5b809150509250929050565b6000806101e083850312156106a257600080fd5b6106ac848461050a565b946101c0939093013593505050565b60006101c082840312156106ce57600080fd5b6106488383610523565b600080600061020084860312156106ee57600080fd5b6106f88585610523565b92506101c084013561070981610852565b91506101e08401356bffffffffffffffffffffffff8116811461072b57600080fd5b809150509250925092565b60006101c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401518184015250610160808401516107c8828501826001600160a01b03169052565b50506101808381015164ffffffffff908116918401919091526101a09384015116929091019190915290565b6040516101c0810167ffffffffffffffff8111828210171561082657634e487b7160e01b600052604160045260246000fd5b60405290565b6000821982111561084d57634e487b7160e01b600052601160045260246000fd5b500190565b6001600160a01b03811681146101d657600080fdfea26469706673582212205ea2149522f97038d7a1b0c5eb5a25b9f79368e8d7bcc71a7c4c42de0c17bd5164736f6c63430008060033",
"bytecode": "0x608060405234801561001057600080fd5b50604051610f81380380610f8183398101604081905261002f91610078565b600080546001600160a01b039384166001600160a01b031991821617909155600180549290931691161790556100b2565b6001600160a01b038116811461007557600080fd5b50565b6000806040838503121561008b57600080fd5b825161009681610060565b60208401519092506100a781610060565b809150509250929050565b610ec0806100c16000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80637a702b3c116100715780637a702b3c1461013c57806382afd23b1461014f57806392be297014610181578063e5a6b10f14610194578063f3fef3a3146101a5578063ffa600e3146101b857600080fd5b8063098d3228146100b957806347e7ef24146100d557806361d027b3146100ea5780636769a76f146101055780636af6f1ef1461011857806371907f171461012b575b600080fd5b6100c260001981565b6040519081526020015b60405180910390f35b6100e86100e3366004610999565b6101cb565b005b60005b6040516001600160a01b0390911681526020016100cc565b6100c2610113366004610b1a565b610218565b6100e8610126366004610ba3565b6102a9565b6001546001600160a01b03166100ed565b6100e861014a366004610bc7565b6102c5565b61017161015d366004610bf4565b600090815260036020526040902054151590565b60405190151581526020016100cc565b6100e861018f366004610c0d565b6102e1565b6000546001600160a01b03166100ed565b6100c26101b3366004610999565b61033d565b6100e86101c6366004610cc8565b610388565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b6000816bffffffffffffffffffffffff1660608661016001516001600160a01b0316901b6102469190610d1d565b8552610251856103b0565b855160009081526003602052604090819020919091555133907f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b90610297908890610d36565b60405180910390a25050915192915050565b6102c26102bb36839003830183610df4565b60006103e0565b50565b6102dd6102d736849003840184610df4565b826103e0565b5050565b60006102f18787878787876105b9565b9050866001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b8260405161032c9190610d36565b60405180910390a250505050505050565b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e7465642077697468647261770000000000000000604482015260009060640161020f565b6102dd61039a36849003840184610df4565b826103a65760006103e0565b83602001356103e0565b6000816040516020016103c39190610d36565b604051602081830303815290604052805190602001209050919050565b81516000036104245760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b604482015260640161020f565b815160009081526003602052604090205461043e836103b0565b146104805760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b604482015260640161020f565b8161016001516001600160a01b0316336001600160a01b0316146105025760405162461bcd60e51b815260206004820152603360248201527f4f6e6c79207269736b4d6f64756c6520697320617574686f72697a656420746f604482015272207265736f6c76652074686520706f6c69637960681b606482015260840161020f565b81516000908152600260208181526040808420848155600181018590559283018490556003808401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a8401859055600b90930180546001600160f01b0319169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b6105c16108fe565b8385111561061c5760405162461bcd60e51b815260206004820152602260248201527f5072656d69756d2063616e6e6f74206265206d6f7265207468616e207061796f6044820152611d5d60f21b606482015260840161020f565b6106246108fe565b6001600160a01b038816610160820152604081018690526020810185905260a0810184905264ffffffffff42811661018083015283166101a08201528651610678906106719086906108c6565b86906108c6565b60c0820152602087015161068d9086906108c6565b6060820181905260c082015110156106bd578060c00151816060018181516106b59190610e11565b9052506106c5565b600060608201525b60408701516106d59086906108c6565b6080820152606081015160c08201516106ee9190610d1d565b816080015111156107265780606001518160c0015161070d9190610d1d565b8160800181815161071e9190610e11565b90525061072e565b600060808201525b6107776301e13380826101800151836101a0015161074c9190610e24565b64ffffffffff168960a001516107629190610e49565b61076c9190610e68565b6060830151906108c6565b6101208201526101808101516101a08201516107c8916301e133809161079d9190610e24565b64ffffffffff168960c001516107b39190610e49565b6107bd9190610e68565b6080830151906108c6565b61014082018190526101208201516000916107e291610d1d565b90506107fb8860800151826108c690919063ffffffff16565b606089015160c084015161080e916108c6565b6108189190610d1d565b60e0830181905260c0830151889183916108329190610d1d565b61083c9190610d1d565b111561088a5760405162461bcd60e51b815260206004820152601960248201527f5072656d69756d206c657373207468616e206d696e696d756d00000000000000604482015260640161020f565b8160e00151818360c00151896108a09190610e11565b6108aa9190610e11565b6108b49190610e11565b61010083015250979650505050505050565b600081156706f05b59d3b2000019839004841115176108e457600080fd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600064ffffffffff168152602001600064ffffffffff1681525090565b6001600160a01b03811681146102c257600080fd5b600080604083850312156109ac57600080fd5b82356109b781610984565b946020939093013593505050565b6040516101c0810167ffffffffffffffff811182821017156109f757634e487b7160e01b600052604160045260246000fd5b60405290565b60405160e0810167ffffffffffffffff811182821017156109f757634e487b7160e01b600052604160045260246000fd5b8035610a3981610984565b919050565b803564ffffffffff81168114610a3957600080fd5b60006101c08284031215610a6657600080fd5b610a6e6109c5565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160610aec818401610a2e565b90820152610180610afe838201610a3e565b908201526101a0610b10838201610a3e565b9082015292915050565b6000806000806102208587031215610b3157600080fd5b610b3b8686610a53565b93506101c0850135610b4c81610984565b92506101e0850135610b5d81610984565b91506102008501356bffffffffffffffffffffffff81168114610b7f57600080fd5b939692955090935050565b60006101c08284031215610b9d57600080fd5b50919050565b60006101c08284031215610bb657600080fd5b610bc08383610b8a565b9392505050565b6000806101e08385031215610bdb57600080fd5b610be58484610b8a565b946101c0939093013593505050565b600060208284031215610c0657600080fd5b5035919050565b600080600080600080868803610180811215610c2857600080fd5b8735610c3381610984565b965060e0601f1982011215610c4757600080fd5b50610c506109fd565b6020880135815260408801356020820152606088013560408201526080880135606082015260a0880135608082015260c088013560a082015260e088013560c082015280955050610100870135935061012087013592506101408701359150610cbc6101608801610a3e565b90509295509295509295565b6000806101e08385031215610cdc57600080fd5b610ce68484610b8a565b91506101c08301358015158114610cfc57600080fd5b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610d3057610d30610d07565b92915050565b60006101c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525061014080840151818401525061016080840151610dc8828501826001600160a01b03169052565b50506101808381015164ffffffffff908116918401919091526101a09384015116929091019190915290565b60006101c08284031215610e0757600080fd5b610bc08383610a53565b81810381811115610d3057610d30610d07565b64ffffffffff828116828216039080821115610e4257610e42610d07565b5092915050565b6000816000190483118215151615610e6357610e63610d07565b500290565b600082610e8557634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122068c181cf2a2880160ac66a7b592c48c826c83711bafa79bc907fab3fde7c9a1364736f6c63430008100033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80637a702b3c116100715780637a702b3c1461013c57806382afd23b1461014f57806392be297014610181578063e5a6b10f14610194578063f3fef3a3146101a5578063ffa600e3146101b857600080fd5b8063098d3228146100b957806347e7ef24146100d557806361d027b3146100ea5780636769a76f146101055780636af6f1ef1461011857806371907f171461012b575b600080fd5b6100c260001981565b6040519081526020015b60405180910390f35b6100e86100e3366004610999565b6101cb565b005b60005b6040516001600160a01b0390911681526020016100cc565b6100c2610113366004610b1a565b610218565b6100e8610126366004610ba3565b6102a9565b6001546001600160a01b03166100ed565b6100e861014a366004610bc7565b6102c5565b61017161015d366004610bf4565b600090815260036020526040902054151590565b60405190151581526020016100cc565b6100e861018f366004610c0d565b6102e1565b6000546001600160a01b03166100ed565b6100c26101b3366004610999565b61033d565b6100e86101c6366004610cc8565b610388565b60405162461bcd60e51b815260206004820152601760248201527f4e6f7420496d706c656d656e746564206465706f73697400000000000000000060448201526064015b60405180910390fd5b6000816bffffffffffffffffffffffff1660608661016001516001600160a01b0316901b6102469190610d1d565b8552610251856103b0565b855160009081526003602052604090819020919091555133907f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b90610297908890610d36565b60405180910390a25050915192915050565b6102c26102bb36839003830183610df4565b60006103e0565b50565b6102dd6102d736849003840184610df4565b826103e0565b5050565b60006102f18787878787876105b9565b9050866001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b8260405161032c9190610d36565b60405180910390a250505050505050565b60405162461bcd60e51b815260206004820152601860248201527f4e6f7420496d706c656d656e7465642077697468647261770000000000000000604482015260009060640161020f565b6102dd61039a36849003840184610df4565b826103a65760006103e0565b83602001356103e0565b6000816040516020016103c39190610d36565b604051602081830303815290604052805190602001209050919050565b81516000036104245760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b604482015260640161020f565b815160009081526003602052604090205461043e836103b0565b146104805760405162461bcd60e51b8152602060048201526012602482015271090c2e6d040c8decae6dc4ee840dac2e8c6d60731b604482015260640161020f565b8161016001516001600160a01b0316336001600160a01b0316146105025760405162461bcd60e51b815260206004820152603360248201527f4f6e6c79207269736b4d6f64756c6520697320617574686f72697a656420746f604482015272207265736f6c76652074686520706f6c69637960681b606482015260840161020f565b81516000908152600260208181526040808420848155600181018590559283018490556003808401859055600484018590556005840185905560068401859055600784018590556008840185905560098401859055600a8401859055600b90930180546001600160f01b0319169055855184529181528183209290925583519051838152909133917f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e910160405180910390a35050565b6105c16108fe565b8385111561061c5760405162461bcd60e51b815260206004820152602260248201527f5072656d69756d2063616e6e6f74206265206d6f7265207468616e207061796f6044820152611d5d60f21b606482015260840161020f565b6106246108fe565b6001600160a01b038816610160820152604081018690526020810185905260a0810184905264ffffffffff42811661018083015283166101a08201528651610678906106719086906108c6565b86906108c6565b60c0820152602087015161068d9086906108c6565b6060820181905260c082015110156106bd578060c00151816060018181516106b59190610e11565b9052506106c5565b600060608201525b60408701516106d59086906108c6565b6080820152606081015160c08201516106ee9190610d1d565b816080015111156107265780606001518160c0015161070d9190610d1d565b8160800181815161071e9190610e11565b90525061072e565b600060808201525b6107776301e13380826101800151836101a0015161074c9190610e24565b64ffffffffff168960a001516107629190610e49565b61076c9190610e68565b6060830151906108c6565b6101208201526101808101516101a08201516107c8916301e133809161079d9190610e24565b64ffffffffff168960c001516107b39190610e49565b6107bd9190610e68565b6080830151906108c6565b61014082018190526101208201516000916107e291610d1d565b90506107fb8860800151826108c690919063ffffffff16565b606089015160c084015161080e916108c6565b6108189190610d1d565b60e0830181905260c0830151889183916108329190610d1d565b61083c9190610d1d565b111561088a5760405162461bcd60e51b815260206004820152601960248201527f5072656d69756d206c657373207468616e206d696e696d756d00000000000000604482015260640161020f565b8160e00151818360c00151896108a09190610e11565b6108aa9190610e11565b6108b49190610e11565b61010083015250979650505050505050565b600081156706f05b59d3b2000019839004841115176108e457600080fd5b50670de0b6b3a764000091026706f05b59d3b20000010490565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600064ffffffffff168152602001600064ffffffffff1681525090565b6001600160a01b03811681146102c257600080fd5b600080604083850312156109ac57600080fd5b82356109b781610984565b946020939093013593505050565b6040516101c0810167ffffffffffffffff811182821017156109f757634e487b7160e01b600052604160045260246000fd5b60405290565b60405160e0810167ffffffffffffffff811182821017156109f757634e487b7160e01b600052604160045260246000fd5b8035610a3981610984565b919050565b803564ffffffffff81168114610a3957600080fd5b60006101c08284031215610a6657600080fd5b610a6e6109c5565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160610aec818401610a2e565b90820152610180610afe838201610a3e565b908201526101a0610b10838201610a3e565b9082015292915050565b6000806000806102208587031215610b3157600080fd5b610b3b8686610a53565b93506101c0850135610b4c81610984565b92506101e0850135610b5d81610984565b91506102008501356bffffffffffffffffffffffff81168114610b7f57600080fd5b939692955090935050565b60006101c08284031215610b9d57600080fd5b50919050565b60006101c08284031215610bb657600080fd5b610bc08383610b8a565b9392505050565b6000806101e08385031215610bdb57600080fd5b610be58484610b8a565b946101c0939093013593505050565b600060208284031215610c0657600080fd5b5035919050565b600080600080600080868803610180811215610c2857600080fd5b8735610c3381610984565b965060e0601f1982011215610c4757600080fd5b50610c506109fd565b6020880135815260408801356020820152606088013560408201526080880135606082015260a0880135608082015260c088013560a082015260e088013560c082015280955050610100870135935061012087013592506101408701359150610cbc6101608801610a3e565b90509295509295509295565b6000806101e08385031215610cdc57600080fd5b610ce68484610b8a565b91506101c08301358015158114610cfc57600080fd5b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610d3057610d30610d07565b92915050565b60006101c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525061014080840151818401525061016080840151610dc8828501826001600160a01b03169052565b50506101808381015164ffffffffff908116918401919091526101a09384015116929091019190915290565b60006101c08284031215610e0757600080fd5b610bc08383610a53565b81810381811115610d3057610d30610d07565b64ffffffffff828116828216039080821115610e4257610e42610d07565b5092915050565b6000816000190483118215151615610e6357610e63610d07565b500290565b600082610e8557634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122068c181cf2a2880160ac66a7b592c48c826c83711bafa79bc907fab3fde7c9a1364736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}

@@ -19,4 +19,4 @@ {

{
"internalType": "contract IPolicyPoolConfig",
"name": "config_",
"internalType": "contract IAccessManager",
"name": "access_",
"type": "address"

@@ -47,6 +47,6 @@ }

"inputs": [],
"name": "config",
"name": "access",
"outputs": [
{
"internalType": "contract IPolicyPoolConfig",
"internalType": "contract IAccessManager",
"name": "",

@@ -90,6 +90,6 @@ "type": "address"

],
"bytecode": "0x608060405234801561001057600080fd5b506040516102e83803806102e883398101604081905261002f916100bd565b600080546001600160a01b038086166001600160a01b031992831617835560018054868316908416179055600280549185169190921681179091556040805163948cb71960e01b81529051919263948cb7199260048084019382900301818387803b15801561009d57600080fd5b505af11580156100b1573d6000803e3d6000fd5b50505050505050610122565b6000806000606084860312156100d257600080fd5b83516100dd8161010a565b60208501519093506100ee8161010a565b60408501519092506100ff8161010a565b809150509250925092565b6001600160a01b038116811461011f57600080fd5b50565b6101b7806101316000396000f3fe6080604052600436106100435760003560e01c8063098d32281461005a57806379502c5514610083578063d4b27001146100b5578063e5a6b10f146100f257610052565b3661005257610050610110565b005b610050610110565b34801561006657600080fd5b5061007060001981565b6040519081526020015b60405180910390f35b34801561008f57600080fd5b506002546001600160a01b03165b6040516001600160a01b03909116815260200161007a565b3480156100c157600080fd5b506100506100d0366004610151565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b3480156100fe57600080fd5b506001546001600160a01b031661009d565b61012a6101256000546001600160a01b031690565b61012c565b565b366000803760008036600080855af13d6000803e80801561014c573d6000f35b3d6000fd5b60006020828403121561016357600080fd5b81356001600160a01b038116811461017a57600080fd5b939250505056fea2646970667358221220a0f5a707c408dc3a98458a90a134bf004fdfc38c8b114bc16ec7ea9508f5be6e64736f6c63430008060033",
"deployedBytecode": "0x6080604052600436106100435760003560e01c8063098d32281461005a57806379502c5514610083578063d4b27001146100b5578063e5a6b10f146100f257610052565b3661005257610050610110565b005b610050610110565b34801561006657600080fd5b5061007060001981565b6040519081526020015b60405180910390f35b34801561008f57600080fd5b506002546001600160a01b03165b6040516001600160a01b03909116815260200161007a565b3480156100c157600080fd5b506100506100d0366004610151565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b3480156100fe57600080fd5b506001546001600160a01b031661009d565b61012a6101256000546001600160a01b031690565b61012c565b565b366000803760008036600080855af13d6000803e80801561014c573d6000f35b3d6000fd5b60006020828403121561016357600080fd5b81356001600160a01b038116811461017a57600080fd5b939250505056fea2646970667358221220a0f5a707c408dc3a98458a90a134bf004fdfc38c8b114bc16ec7ea9508f5be6e64736f6c63430008060033",
"bytecode": "0x608060405234801561001057600080fd5b5060405161029c38038061029c83398101604081905261002f91610089565b600080546001600160a01b039485166001600160a01b0319918216179091556001805493851693821693909317909255600280549190931691161790556100d6565b6001600160a01b038116811461008657600080fd5b50565b60008060006060848603121561009e57600080fd5b83516100a981610071565b60208501519093506100ba81610071565b60408501519092506100cb81610071565b809150509250925092565b6101b7806100e56000396000f3fe6080604052600436106100435760003560e01c8063098d32281461005a57806371907f1714610083578063d4b27001146100b5578063e5a6b10f146100f257610052565b3661005257610050610110565b005b610050610110565b34801561006657600080fd5b5061007060001981565b6040519081526020015b60405180910390f35b34801561008f57600080fd5b506002546001600160a01b03165b6040516001600160a01b03909116815260200161007a565b3480156100c157600080fd5b506100506100d0366004610151565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b3480156100fe57600080fd5b506001546001600160a01b031661009d565b61012a6101256000546001600160a01b031690565b61012c565b565b366000803760008036600080855af13d6000803e80801561014c573d6000f35b3d6000fd5b60006020828403121561016357600080fd5b81356001600160a01b038116811461017a57600080fd5b939250505056fea2646970667358221220ff0b7019da7c6d23c452137c4a62e5fdbd267831e06bf0187c83569c035fbf5764736f6c63430008100033",
"deployedBytecode": "0x6080604052600436106100435760003560e01c8063098d32281461005a57806371907f1714610083578063d4b27001146100b5578063e5a6b10f146100f257610052565b3661005257610050610110565b005b610050610110565b34801561006657600080fd5b5061007060001981565b6040519081526020015b60405180910390f35b34801561008f57600080fd5b506002546001600160a01b03165b6040516001600160a01b03909116815260200161007a565b3480156100c157600080fd5b506100506100d0366004610151565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b3480156100fe57600080fd5b506001546001600160a01b031661009d565b61012a6101256000546001600160a01b031690565b61012c565b565b366000803760008036600080855af13d6000803e80801561014c573d6000f35b3d6000fd5b60006020828403121561016357600080fd5b81356001600160a01b038116811461017a57600080fd5b939250505056fea2646970667358221220ff0b7019da7c6d23c452137c4a62e5fdbd267831e06bf0187c83569c035fbf5764736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}

@@ -339,6 +339,6 @@ {

],
"bytecode": "0x60a06040523480156200001157600080fd5b5060405162000f7a38038062000f7a833981016040819052620000349162000300565b8351849084906200004d906003906020850190620001a3565b50805162000063906004906020840190620001a3565b5050600580546001600160a01b031916339081179091557fff0000000000000000000000000000000000000000000000000000000000000060f884901b16608052620000b1915083620000bb565b5050505062000407565b6001600160a01b038216620001165760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200012a91906200038d565b90915550506001600160a01b03821660009081526020819052604081208054839290620001599084906200038d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620001b190620003b4565b90600052602060002090601f016020900481019282620001d5576000855562000220565b82601f10620001f057805160ff191683800117855562000220565b8280016001018555821562000220579182015b828111156200022057825182559160200191906001019062000203565b506200022e92915062000232565b5090565b5b808211156200022e576000815560010162000233565b600082601f8301126200025b57600080fd5b81516001600160401b0380821115620002785762000278620003f1565b604051601f8301601f19908116603f01168101908282118183101715620002a357620002a3620003f1565b81604052838152602092508683858801011115620002c057600080fd5b600091505b83821015620002e45785820183015181830184015290820190620002c5565b83821115620002f65760008385830101525b9695505050505050565b600080600080608085870312156200031757600080fd5b84516001600160401b03808211156200032f57600080fd5b6200033d8883890162000249565b955060208701519150808211156200035457600080fd5b50620003638782880162000249565b93505060408501519150606085015160ff811681146200038257600080fd5b939692955090935050565b60008219821115620003af57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620003c957607f821691505b60208210811415620003eb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160f81c610b546200042660003960006101410152610b546000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c5780639dc29fac116100665780639dc29fac146101c4578063a457c2d7146101d7578063a9059cbb146101ea578063dd62ed3e146101fd57600080fd5b806340c10f191461017e57806370a082311461019357806395d89b41146101bc57600080fd5b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461011557806323b872dd14610127578063313ce5671461013a578063395093511461016b575b600080fd5b6100dc610210565b6040516100e99190610a49565b60405180910390f35b610105610100366004610a1f565b6102a2565b60405190151581526020016100e9565b6002545b6040519081526020016100e9565b6101056101353660046109e3565b6102ba565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100e9565b610105610179366004610a1f565b6102de565b61019161018c366004610a1f565b610300565b005b6101196101a136600461098e565b6001600160a01b031660009081526020819052604090205490565b6100dc61030e565b6101916101d2366004610a1f565b61031d565b6101056101e5366004610a1f565b610327565b6101056101f8366004610a1f565b6103a7565b61011961020b3660046109b0565b6103b5565b60606003805461021f90610acd565b80601f016020809104026020016040519081016040528092919081815260200182805461024b90610acd565b80156102985780601f1061026d57610100808354040283529160200191610298565b820191906000526020600020905b81548152906001019060200180831161027b57829003601f168201915b5050505050905090565b6000336102b08185856103e0565b5060019392505050565b6000336102c8858285610505565b6102d385858561057f565b506001949350505050565b6000336102b08185856102f183836103b5565b6102fb9190610a9e565b6103e0565b61030a828261074d565b5050565b60606004805461021f90610acd565b61030a828261082c565b6000338161033582866103b5565b90508381101561039a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102d382868684036103e0565b6000336102b081858561057f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104425760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610391565b6001600160a01b0382166104a35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610391565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061051184846103b5565b90506000198114610579578181101561056c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610391565b61057984848484036103e0565b50505050565b6001600160a01b0383166105e35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610391565b6001600160a01b0382166106455760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610391565b6001600160a01b038316600090815260208190526040902054818110156106bd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610391565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106f4908490610a9e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161074091815260200190565b60405180910390a3610579565b6001600160a01b0382166107a35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610391565b80600260008282546107b59190610a9e565b90915550506001600160a01b038216600090815260208190526040812080548392906107e2908490610a9e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03821661088c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610391565b6001600160a01b038216600090815260208190526040902054818110156109005760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610391565b6001600160a01b038316600090815260208190526040812083830390556002805484929061092f908490610ab6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016104f8565b80356001600160a01b038116811461098957600080fd5b919050565b6000602082840312156109a057600080fd5b6109a982610972565b9392505050565b600080604083850312156109c357600080fd5b6109cc83610972565b91506109da60208401610972565b90509250929050565b6000806000606084860312156109f857600080fd5b610a0184610972565b9250610a0f60208501610972565b9150604084013590509250925092565b60008060408385031215610a3257600080fd5b610a3b83610972565b946020939093013593505050565b600060208083528351808285015260005b81811015610a7657858101830151858201604001528201610a5a565b81811115610a88576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610ab157610ab1610b08565b500190565b600082821015610ac857610ac8610b08565b500390565b600181811c90821680610ae157607f821691505b60208210811415610b0257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212204a383f142c9fcfef1d9efc6568c8a4fadfee6a4a5eecd62e331818212ef57f6764736f6c63430008060033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c5780639dc29fac116100665780639dc29fac146101c4578063a457c2d7146101d7578063a9059cbb146101ea578063dd62ed3e146101fd57600080fd5b806340c10f191461017e57806370a082311461019357806395d89b41146101bc57600080fd5b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461011557806323b872dd14610127578063313ce5671461013a578063395093511461016b575b600080fd5b6100dc610210565b6040516100e99190610a49565b60405180910390f35b610105610100366004610a1f565b6102a2565b60405190151581526020016100e9565b6002545b6040519081526020016100e9565b6101056101353660046109e3565b6102ba565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100e9565b610105610179366004610a1f565b6102de565b61019161018c366004610a1f565b610300565b005b6101196101a136600461098e565b6001600160a01b031660009081526020819052604090205490565b6100dc61030e565b6101916101d2366004610a1f565b61031d565b6101056101e5366004610a1f565b610327565b6101056101f8366004610a1f565b6103a7565b61011961020b3660046109b0565b6103b5565b60606003805461021f90610acd565b80601f016020809104026020016040519081016040528092919081815260200182805461024b90610acd565b80156102985780601f1061026d57610100808354040283529160200191610298565b820191906000526020600020905b81548152906001019060200180831161027b57829003601f168201915b5050505050905090565b6000336102b08185856103e0565b5060019392505050565b6000336102c8858285610505565b6102d385858561057f565b506001949350505050565b6000336102b08185856102f183836103b5565b6102fb9190610a9e565b6103e0565b61030a828261074d565b5050565b60606004805461021f90610acd565b61030a828261082c565b6000338161033582866103b5565b90508381101561039a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102d382868684036103e0565b6000336102b081858561057f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104425760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610391565b6001600160a01b0382166104a35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610391565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061051184846103b5565b90506000198114610579578181101561056c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610391565b61057984848484036103e0565b50505050565b6001600160a01b0383166105e35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610391565b6001600160a01b0382166106455760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610391565b6001600160a01b038316600090815260208190526040902054818110156106bd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610391565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106f4908490610a9e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161074091815260200190565b60405180910390a3610579565b6001600160a01b0382166107a35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610391565b80600260008282546107b59190610a9e565b90915550506001600160a01b038216600090815260208190526040812080548392906107e2908490610a9e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03821661088c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610391565b6001600160a01b038216600090815260208190526040902054818110156109005760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610391565b6001600160a01b038316600090815260208190526040812083830390556002805484929061092f908490610ab6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016104f8565b80356001600160a01b038116811461098957600080fd5b919050565b6000602082840312156109a057600080fd5b6109a982610972565b9392505050565b600080604083850312156109c357600080fd5b6109cc83610972565b91506109da60208401610972565b90509250929050565b6000806000606084860312156109f857600080fd5b610a0184610972565b9250610a0f60208501610972565b9150604084013590509250925092565b60008060408385031215610a3257600080fd5b610a3b83610972565b946020939093013593505050565b600060208083528351808285015260005b81811015610a7657858101830151858201604001528201610a5a565b81811115610a88576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610ab157610ab1610b08565b500190565b600082821015610ac857610ac8610b08565b500390565b600181811c90821680610ae157607f821691505b60208210811415610b0257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea26469706673582212204a383f142c9fcfef1d9efc6568c8a4fadfee6a4a5eecd62e331818212ef57f6764736f6c63430008060033",
"bytecode": "0x60a06040523480156200001157600080fd5b5060405162000faa38038062000faa83398101604081905262000034916200023a565b8383600362000044838262000355565b50600462000053828262000355565b5050600580546001600160a01b0319163390811790915560ff83166080526200007e91508362000088565b5050505062000449565b6001600160a01b038216620000e35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000f7919062000421565b90915550506001600160a01b038216600090815260208190526040812080548392906200012690849062000421565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019d57600080fd5b81516001600160401b0380821115620001ba57620001ba62000175565b604051601f8301601f19908116603f01168101908282118183101715620001e557620001e562000175565b816040528381526020925086838588010111156200020257600080fd5b600091505b8382101562000226578582018301518183018401529082019062000207565b600093810190920192909252949350505050565b600080600080608085870312156200025157600080fd5b84516001600160401b03808211156200026957600080fd5b62000277888389016200018b565b955060208701519150808211156200028e57600080fd5b506200029d878288016200018b565b93505060408501519150606085015160ff81168114620002bc57600080fd5b939692955090935050565b600181811c90821680620002dc57607f821691505b602082108103620002fd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200017057600081815260208120601f850160051c810160208610156200032c5750805b601f850160051c820191505b818110156200034d5782815560010162000338565b505050505050565b81516001600160401b0381111562000371576200037162000175565b6200038981620003828454620002c7565b8462000303565b602080601f831160018114620003c15760008415620003a85750858301515b600019600386901b1c1916600185901b1785556200034d565b600085815260208120601f198616915b82811015620003f257888601518255948401946001909101908401620003d1565b5085821015620004115787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200044357634e487b7160e01b600052601160045260246000fd5b92915050565b608051610b456200046560003960006101410152610b456000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c5780639dc29fac116100665780639dc29fac146101c4578063a457c2d7146101d7578063a9059cbb146101ea578063dd62ed3e146101fd57600080fd5b806340c10f191461017e57806370a082311461019357806395d89b41146101bc57600080fd5b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461011557806323b872dd14610127578063313ce5671461013a578063395093511461016b575b600080fd5b6100dc610210565b6040516100e99190610974565b60405180910390f35b6101056101003660046109de565b6102a2565b60405190151581526020016100e9565b6002545b6040519081526020016100e9565b610105610135366004610a08565b6102bc565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100e9565b6101056101793660046109de565b6102e0565b61019161018c3660046109de565b610302565b005b6101196101a1366004610a44565b6001600160a01b031660009081526020819052604090205490565b6100dc610310565b6101916101d23660046109de565b61031f565b6101056101e53660046109de565b610329565b6101056101f83660046109de565b6103a9565b61011961020b366004610a66565b6103b7565b60606003805461021f90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461024b90610a99565b80156102985780601f1061026d57610100808354040283529160200191610298565b820191906000526020600020905b81548152906001019060200180831161027b57829003601f168201915b5050505050905090565b6000336102b08185856103e2565b60019150505b92915050565b6000336102ca858285610507565b6102d5858585610581565b506001949350505050565b6000336102b08185856102f383836103b7565b6102fd9190610ae9565b6103e2565b61030c828261074f565b5050565b60606004805461021f90610a99565b61030c828261082e565b6000338161033782866103b7565b90508381101561039c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102d582868684036103e2565b6000336102b0818585610581565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610393565b6001600160a01b0382166104a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610393565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061051384846103b7565b9050600019811461057b578181101561056e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610393565b61057b84848484036103e2565b50505050565b6001600160a01b0383166105e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610393565b6001600160a01b0382166106475760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610393565b6001600160a01b038316600090815260208190526040902054818110156106bf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610393565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106f6908490610ae9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161074291815260200190565b60405180910390a361057b565b6001600160a01b0382166107a55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610393565b80600260008282546107b79190610ae9565b90915550506001600160a01b038216600090815260208190526040812080548392906107e4908490610ae9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610393565b6001600160a01b038216600090815260208190526040902054818110156109025760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610393565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610931908490610afc565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016104fa565b600060208083528351808285015260005b818110156109a157858101830151858201604001528201610985565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146109d957600080fd5b919050565b600080604083850312156109f157600080fd5b6109fa836109c2565b946020939093013593505050565b600080600060608486031215610a1d57600080fd5b610a26846109c2565b9250610a34602085016109c2565b9150604084013590509250925092565b600060208284031215610a5657600080fd5b610a5f826109c2565b9392505050565b60008060408385031215610a7957600080fd5b610a82836109c2565b9150610a90602084016109c2565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102b6576102b6610ad3565b818103818111156102b6576102b6610ad356fea26469706673582212208a2cc443b16dc06c57f6100602639aabaa17f9df41bcaba306b5ca9e9686a08564736f6c63430008100033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c5780639dc29fac116100665780639dc29fac146101c4578063a457c2d7146101d7578063a9059cbb146101ea578063dd62ed3e146101fd57600080fd5b806340c10f191461017e57806370a082311461019357806395d89b41146101bc57600080fd5b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461011557806323b872dd14610127578063313ce5671461013a578063395093511461016b575b600080fd5b6100dc610210565b6040516100e99190610974565b60405180910390f35b6101056101003660046109de565b6102a2565b60405190151581526020016100e9565b6002545b6040519081526020016100e9565b610105610135366004610a08565b6102bc565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100e9565b6101056101793660046109de565b6102e0565b61019161018c3660046109de565b610302565b005b6101196101a1366004610a44565b6001600160a01b031660009081526020819052604090205490565b6100dc610310565b6101916101d23660046109de565b61031f565b6101056101e53660046109de565b610329565b6101056101f83660046109de565b6103a9565b61011961020b366004610a66565b6103b7565b60606003805461021f90610a99565b80601f016020809104026020016040519081016040528092919081815260200182805461024b90610a99565b80156102985780601f1061026d57610100808354040283529160200191610298565b820191906000526020600020905b81548152906001019060200180831161027b57829003601f168201915b5050505050905090565b6000336102b08185856103e2565b60019150505b92915050565b6000336102ca858285610507565b6102d5858585610581565b506001949350505050565b6000336102b08185856102f383836103b7565b6102fd9190610ae9565b6103e2565b61030c828261074f565b5050565b60606004805461021f90610a99565b61030c828261082e565b6000338161033782866103b7565b90508381101561039c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102d582868684036103e2565b6000336102b0818585610581565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610393565b6001600160a01b0382166104a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610393565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061051384846103b7565b9050600019811461057b578181101561056e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610393565b61057b84848484036103e2565b50505050565b6001600160a01b0383166105e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610393565b6001600160a01b0382166106475760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610393565b6001600160a01b038316600090815260208190526040902054818110156106bf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610393565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906106f6908490610ae9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161074291815260200190565b60405180910390a361057b565b6001600160a01b0382166107a55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610393565b80600260008282546107b79190610ae9565b90915550506001600160a01b038216600090815260208190526040812080548392906107e4908490610ae9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610393565b6001600160a01b038216600090815260208190526040902054818110156109025760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610393565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610931908490610afc565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016104fa565b600060208083528351808285015260005b818110156109a157858101830151858201604001528201610985565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146109d957600080fd5b919050565b600080604083850312156109f157600080fd5b6109fa836109c2565b946020939093013593505050565b600080600060608486031215610a1d57600080fd5b610a26846109c2565b9250610a34602085016109c2565b9150604084013590509250925092565b600060208284031215610a5657600080fd5b610a5f826109c2565b9392505050565b60008060408385031215610a7957600080fd5b610a82836109c2565b9150610a90602084016109c2565b90509250929050565b600181811c90821680610aad57607f821691505b602082108103610acd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102b6576102b6610ad3565b818103818111156102b6576102b6610ad356fea26469706673582212208a2cc443b16dc06c57f6100602639aabaa17f9df41bcaba306b5ca9e9686a08564736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}

@@ -384,6 +384,6 @@ {

],
"bytecode": "0x60806040523480156200001157600080fd5b506040516200169a3803806200169a8339810160408190526200003491620001de565b8151829082906200004d90600090602085019062000081565b5080516200006390600190602084019062000081565b5050600680546001600160a01b03191633179055506200029b915050565b8280546200008f9062000248565b90600052602060002090601f016020900481019282620000b35760008555620000fe565b82601f10620000ce57805160ff1916838001178555620000fe565b82800160010185558215620000fe579182015b82811115620000fe578251825591602001919060010190620000e1565b506200010c92915062000110565b5090565b5b808211156200010c576000815560010162000111565b600082601f8301126200013957600080fd5b81516001600160401b038082111562000156576200015662000285565b604051601f8301601f19908116603f0116810190828211818310171562000181576200018162000285565b816040528381526020925086838588010111156200019e57600080fd5b600091505b83821015620001c25785820183015181830184015290820190620001a3565b83821115620001d45760008385830101525b9695505050505050565b60008060408385031215620001f257600080fd5b82516001600160401b03808211156200020a57600080fd5b620002188683870162000127565b935060208501519150808211156200022f57600080fd5b506200023e8582860162000127565b9150509250929050565b600181811c908216806200025d57607f821691505b602082108114156200027f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6113ef80620002ab6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806342966c6811610097578063a22cb46511610066578063a22cb465146101ff578063b88d4fde14610212578063c87b56dd14610225578063e985e9c51461023857600080fd5b806342966c68146101b05780636352211e146101c357806370a08231146101d657806395d89b41146101f757600080fd5b8063095ea7b3116100d3578063095ea7b31461016257806323b872dd1461017757806340c10f191461018a57806342842e0e1461019d57600080fd5b806301ffc9a7146100fa57806306fdde0314610122578063081812fc14610137575b600080fd5b61010d6101083660046110d4565b610274565b60405190151581526020015b60405180910390f35b61012a6102c6565b60405161011991906111bf565b61014a61014536600461110e565b610358565b6040516001600160a01b039091168152602001610119565b6101756101703660046110aa565b61037f565b005b610175610185366004610f56565b61049a565b6101756101983660046110aa565b6104cb565b6101756101ab366004610f56565b6104d9565b6101756101be36600461110e565b6104f4565b61014a6101d136600461110e565b61056e565b6101e96101e4366004610f08565b6105ce565b604051908152602001610119565b61012a610654565b61017561020d36600461106e565b610663565b610175610220366004610f92565b61066e565b61012a61023336600461110e565b6106a6565b61010d610246366004610f23565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b14806102a557506001600160e01b03198216635b5e139f60e01b145b806102c057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546102d5906112e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610301906112e1565b801561034e5780601f106103235761010080835404028352916020019161034e565b820191906000526020600020905b81548152906001019060200180831161033157829003601f168201915b5050505050905090565b60006103638261071a565b506000908152600460205260409020546001600160a01b031690565b600061038a8261056e565b9050806001600160a01b0316836001600160a01b031614156103fd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061041957506104198133610246565b61048b5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016103f4565b6104958383610779565b505050565b6104a433826107e7565b6104c05760405162461bcd60e51b81526004016103f490611224565b610495838383610866565b6104d58282610a02565b5050565b6104958383836040518060200160405280600081525061066e565b336104fe8261056e565b6001600160a01b0316146105625760405162461bcd60e51b815260206004820152602560248201527f4552433732313a206275726e206f6620746f6b656e2074686174206973206e6f6044820152643a1037bbb760d91b60648201526084016103f4565b61056b81610b44565b50565b6000818152600260205260408120546001600160a01b0316806102c05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103f4565b60006001600160a01b0382166106385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103f4565b506001600160a01b031660009081526003602052604090205490565b6060600180546102d5906112e1565b6104d5338383610bdf565b61067833836107e7565b6106945760405162461bcd60e51b81526004016103f490611224565b6106a084848484610cae565b50505050565b60606106b18261071a565b60006106c860408051602081019091526000815290565b905060008151116106e85760405180602001604052806000815250610713565b806106f284610ce1565b604051602001610703929190611153565b6040516020818303038152906040525b9392505050565b6000818152600260205260409020546001600160a01b031661056b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103f4565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906107ae8261056e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806107f38361056e565b9050806001600160a01b0316846001600160a01b0316148061083a57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061085e5750836001600160a01b031661085384610358565b6001600160a01b0316145b949350505050565b826001600160a01b03166108798261056e565b6001600160a01b0316146108dd5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016103f4565b6001600160a01b03821661093f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103f4565b61094a600082610779565b6001600160a01b038316600090815260036020526040812080546001929061097390849061129e565b90915550506001600160a01b03821660009081526003602052604081208054600192906109a1908490611272565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216610a585760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103f4565b6000818152600260205260409020546001600160a01b031615610abd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103f4565b6001600160a01b0382166000908152600360205260408120805460019290610ae6908490611272565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000610b4f8261056e565b9050610b5c600083610779565b6001600160a01b0381166000908152600360205260408120805460019290610b8590849061129e565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b03161415610c415760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103f4565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610cb9848484610866565b610cc584848484610ddf565b6106a05760405162461bcd60e51b81526004016103f4906111d2565b606081610d055750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d2f5780610d198161131c565b9150610d289050600a8361128a565b9150610d09565b60008167ffffffffffffffff811115610d4a57610d4a61138d565b6040519080825280601f01601f191660200182016040528015610d74576020820181803683370190505b5090505b841561085e57610d8960018361129e565b9150610d96600a86611337565b610da1906030611272565b60f81b818381518110610db657610db6611377565b60200101906001600160f81b031916908160001a905350610dd8600a8661128a565b9450610d78565b60006001600160a01b0384163b15610ee157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610e23903390899088908890600401611182565b602060405180830381600087803b158015610e3d57600080fd5b505af1925050508015610e6d575060408051601f3d908101601f19168201909252610e6a918101906110f1565b60015b610ec7573d808015610e9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ea0565b606091505b508051610ebf5760405162461bcd60e51b81526004016103f4906111d2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061085e565b506001949350505050565b80356001600160a01b0381168114610f0357600080fd5b919050565b600060208284031215610f1a57600080fd5b61071382610eec565b60008060408385031215610f3657600080fd5b610f3f83610eec565b9150610f4d60208401610eec565b90509250929050565b600080600060608486031215610f6b57600080fd5b610f7484610eec565b9250610f8260208501610eec565b9150604084013590509250925092565b60008060008060808587031215610fa857600080fd5b610fb185610eec565b9350610fbf60208601610eec565b925060408501359150606085013567ffffffffffffffff80821115610fe357600080fd5b818701915087601f830112610ff757600080fd5b8135818111156110095761100961138d565b604051601f8201601f19908116603f011681019083821181831017156110315761103161138d565b816040528281528a602084870101111561104a57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561108157600080fd5b61108a83610eec565b91506020830135801515811461109f57600080fd5b809150509250929050565b600080604083850312156110bd57600080fd5b6110c683610eec565b946020939093013593505050565b6000602082840312156110e657600080fd5b8135610713816113a3565b60006020828403121561110357600080fd5b8151610713816113a3565b60006020828403121561112057600080fd5b5035919050565b6000815180845261113f8160208601602086016112b5565b601f01601f19169290920160200192915050565b600083516111658184602088016112b5565b8351908301906111798183602088016112b5565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906111b590830184611127565b9695505050505050565b6020815260006107136020830184611127565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b600082198211156112855761128561134b565b500190565b60008261129957611299611361565b500490565b6000828210156112b0576112b061134b565b500390565b60005b838110156112d05781810151838201526020016112b8565b838111156106a05750506000910152565b600181811c908216806112f557607f821691505b6020821081141561131657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156113305761133061134b565b5060010190565b60008261134657611346611361565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461056b57600080fdfea264697066735822122009ec0be20bb17f8e9b57fc7dd6c9862c50e6fc5c774d5853cdf1fe4f2d3e830c64736f6c63430008060033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806342966c6811610097578063a22cb46511610066578063a22cb465146101ff578063b88d4fde14610212578063c87b56dd14610225578063e985e9c51461023857600080fd5b806342966c68146101b05780636352211e146101c357806370a08231146101d657806395d89b41146101f757600080fd5b8063095ea7b3116100d3578063095ea7b31461016257806323b872dd1461017757806340c10f191461018a57806342842e0e1461019d57600080fd5b806301ffc9a7146100fa57806306fdde0314610122578063081812fc14610137575b600080fd5b61010d6101083660046110d4565b610274565b60405190151581526020015b60405180910390f35b61012a6102c6565b60405161011991906111bf565b61014a61014536600461110e565b610358565b6040516001600160a01b039091168152602001610119565b6101756101703660046110aa565b61037f565b005b610175610185366004610f56565b61049a565b6101756101983660046110aa565b6104cb565b6101756101ab366004610f56565b6104d9565b6101756101be36600461110e565b6104f4565b61014a6101d136600461110e565b61056e565b6101e96101e4366004610f08565b6105ce565b604051908152602001610119565b61012a610654565b61017561020d36600461106e565b610663565b610175610220366004610f92565b61066e565b61012a61023336600461110e565b6106a6565b61010d610246366004610f23565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b14806102a557506001600160e01b03198216635b5e139f60e01b145b806102c057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546102d5906112e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610301906112e1565b801561034e5780601f106103235761010080835404028352916020019161034e565b820191906000526020600020905b81548152906001019060200180831161033157829003601f168201915b5050505050905090565b60006103638261071a565b506000908152600460205260409020546001600160a01b031690565b600061038a8261056e565b9050806001600160a01b0316836001600160a01b031614156103fd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061041957506104198133610246565b61048b5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016103f4565b6104958383610779565b505050565b6104a433826107e7565b6104c05760405162461bcd60e51b81526004016103f490611224565b610495838383610866565b6104d58282610a02565b5050565b6104958383836040518060200160405280600081525061066e565b336104fe8261056e565b6001600160a01b0316146105625760405162461bcd60e51b815260206004820152602560248201527f4552433732313a206275726e206f6620746f6b656e2074686174206973206e6f6044820152643a1037bbb760d91b60648201526084016103f4565b61056b81610b44565b50565b6000818152600260205260408120546001600160a01b0316806102c05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103f4565b60006001600160a01b0382166106385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103f4565b506001600160a01b031660009081526003602052604090205490565b6060600180546102d5906112e1565b6104d5338383610bdf565b61067833836107e7565b6106945760405162461bcd60e51b81526004016103f490611224565b6106a084848484610cae565b50505050565b60606106b18261071a565b60006106c860408051602081019091526000815290565b905060008151116106e85760405180602001604052806000815250610713565b806106f284610ce1565b604051602001610703929190611153565b6040516020818303038152906040525b9392505050565b6000818152600260205260409020546001600160a01b031661056b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103f4565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906107ae8261056e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806107f38361056e565b9050806001600160a01b0316846001600160a01b0316148061083a57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061085e5750836001600160a01b031661085384610358565b6001600160a01b0316145b949350505050565b826001600160a01b03166108798261056e565b6001600160a01b0316146108dd5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016103f4565b6001600160a01b03821661093f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103f4565b61094a600082610779565b6001600160a01b038316600090815260036020526040812080546001929061097390849061129e565b90915550506001600160a01b03821660009081526003602052604081208054600192906109a1908490611272565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216610a585760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103f4565b6000818152600260205260409020546001600160a01b031615610abd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103f4565b6001600160a01b0382166000908152600360205260408120805460019290610ae6908490611272565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000610b4f8261056e565b9050610b5c600083610779565b6001600160a01b0381166000908152600360205260408120805460019290610b8590849061129e565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b03161415610c415760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103f4565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610cb9848484610866565b610cc584848484610ddf565b6106a05760405162461bcd60e51b81526004016103f4906111d2565b606081610d055750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d2f5780610d198161131c565b9150610d289050600a8361128a565b9150610d09565b60008167ffffffffffffffff811115610d4a57610d4a61138d565b6040519080825280601f01601f191660200182016040528015610d74576020820181803683370190505b5090505b841561085e57610d8960018361129e565b9150610d96600a86611337565b610da1906030611272565b60f81b818381518110610db657610db6611377565b60200101906001600160f81b031916908160001a905350610dd8600a8661128a565b9450610d78565b60006001600160a01b0384163b15610ee157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610e23903390899088908890600401611182565b602060405180830381600087803b158015610e3d57600080fd5b505af1925050508015610e6d575060408051601f3d908101601f19168201909252610e6a918101906110f1565b60015b610ec7573d808015610e9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ea0565b606091505b508051610ebf5760405162461bcd60e51b81526004016103f4906111d2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061085e565b506001949350505050565b80356001600160a01b0381168114610f0357600080fd5b919050565b600060208284031215610f1a57600080fd5b61071382610eec565b60008060408385031215610f3657600080fd5b610f3f83610eec565b9150610f4d60208401610eec565b90509250929050565b600080600060608486031215610f6b57600080fd5b610f7484610eec565b9250610f8260208501610eec565b9150604084013590509250925092565b60008060008060808587031215610fa857600080fd5b610fb185610eec565b9350610fbf60208601610eec565b925060408501359150606085013567ffffffffffffffff80821115610fe357600080fd5b818701915087601f830112610ff757600080fd5b8135818111156110095761100961138d565b604051601f8201601f19908116603f011681019083821181831017156110315761103161138d565b816040528281528a602084870101111561104a57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561108157600080fd5b61108a83610eec565b91506020830135801515811461109f57600080fd5b809150509250929050565b600080604083850312156110bd57600080fd5b6110c683610eec565b946020939093013593505050565b6000602082840312156110e657600080fd5b8135610713816113a3565b60006020828403121561110357600080fd5b8151610713816113a3565b60006020828403121561112057600080fd5b5035919050565b6000815180845261113f8160208601602086016112b5565b601f01601f19169290920160200192915050565b600083516111658184602088016112b5565b8351908301906111798183602088016112b5565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906111b590830184611127565b9695505050505050565b6020815260006107136020830184611127565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b600082198211156112855761128561134b565b500190565b60008261129957611299611361565b500490565b6000828210156112b0576112b061134b565b500390565b60005b838110156112d05781810151838201526020016112b8565b838111156106a05750506000910152565b600181811c908216806112f557607f821691505b6020821081141561131657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156113305761133061134b565b5060010190565b60008261134657611346611361565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461056b57600080fdfea264697066735822122009ec0be20bb17f8e9b57fc7dd6c9862c50e6fc5c774d5853cdf1fe4f2d3e830c64736f6c63430008060033",
"bytecode": "0x60806040523480156200001157600080fd5b50604051620016c0380380620016c0833981016040819052620000349162000136565b818160006200004483826200022f565b5060016200005382826200022f565b5050600680546001600160a01b0319163317905550620002fb915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200009957600080fd5b81516001600160401b0380821115620000b657620000b662000071565b604051601f8301601f19908116603f01168101908282118183101715620000e157620000e162000071565b81604052838152602092508683858801011115620000fe57600080fd5b600091505b8382101562000122578582018301518183018401529082019062000103565b600093810190920192909252949350505050565b600080604083850312156200014a57600080fd5b82516001600160401b03808211156200016257600080fd5b620001708683870162000087565b935060208501519150808211156200018757600080fd5b50620001968582860162000087565b9150509250929050565b600181811c90821680620001b557607f821691505b602082108103620001d657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022a57600081815260208120601f850160051c81016020861015620002055750805b601f850160051c820191505b81811015620002265782815560010162000211565b5050505b505050565b81516001600160401b038111156200024b576200024b62000071565b62000263816200025c8454620001a0565b84620001dc565b602080601f8311600181146200029b5760008415620002825750858301515b600019600386901b1c1916600185901b17855562000226565b600085815260208120601f198616915b82811015620002cc57888601518255948401946001909101908401620002ab565b5085821015620002eb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6113b5806200030b6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806342966c6811610097578063a22cb46511610066578063a22cb465146101ff578063b88d4fde14610212578063c87b56dd14610225578063e985e9c51461023857600080fd5b806342966c68146101b05780636352211e146101c357806370a08231146101d657806395d89b41146101f757600080fd5b8063095ea7b3116100d3578063095ea7b31461016257806323b872dd1461017757806340c10f191461018a57806342842e0e1461019d57600080fd5b806301ffc9a7146100fa57806306fdde0314610122578063081812fc14610137575b600080fd5b61010d610108366004610edc565b61024b565b60405190151581526020015b60405180910390f35b61012a61029d565b6040516101199190610f49565b61014a610145366004610f5c565b61032f565b6040516001600160a01b039091168152602001610119565b610175610170366004610f91565b610356565b005b610175610185366004610fbb565b610470565b610175610198366004610f91565b6104a1565b6101756101ab366004610fbb565b6104af565b6101756101be366004610f5c565b6104ca565b61014a6101d1366004610f5c565b610544565b6101e96101e4366004610ff7565b6105a4565b604051908152602001610119565b61012a61062a565b61017561020d366004611012565b610639565b610175610220366004611064565b610644565b61012a610233366004610f5c565b61067c565b61010d610246366004611140565b6106f0565b60006001600160e01b031982166380ac58cd60e01b148061027c57506001600160e01b03198216635b5e139f60e01b145b8061029757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546102ac90611173565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611173565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b600061033a8261071e565b506000908152600460205260409020546001600160a01b031690565b600061036182610544565b9050806001600160a01b0316836001600160a01b0316036103d35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103ef57506103ef81336106f0565b6104615760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016103ca565b61046b838361077d565b505050565b61047a33826107eb565b6104965760405162461bcd60e51b81526004016103ca906111ad565b61046b83838361084a565b6104ab82826109e6565b5050565b61046b83838360405180602001604052806000815250610644565b336104d482610544565b6001600160a01b0316146105385760405162461bcd60e51b815260206004820152602560248201527f4552433732313a206275726e206f6620746f6b656e2074686174206973206e6f6044820152643a1037bbb760d91b60648201526084016103ca565b61054181610b28565b50565b6000818152600260205260408120546001600160a01b0316806102975760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103ca565b60006001600160a01b03821661060e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103ca565b506001600160a01b031660009081526003602052604090205490565b6060600180546102ac90611173565b6104ab338383610bc3565b61064e33836107eb565b61066a5760405162461bcd60e51b81526004016103ca906111ad565b61067684848484610c91565b50505050565b60606106878261071e565b600061069e60408051602081019091526000815290565b905060008151116106be57604051806020016040528060008152506106e9565b806106c884610cc4565b6040516020016106d99291906111fb565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000818152600260205260409020546001600160a01b03166105415760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103ca565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906107b282610544565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806107f783610544565b9050806001600160a01b0316846001600160a01b0316148061081e575061081e81856106f0565b806108425750836001600160a01b03166108378461032f565b6001600160a01b0316145b949350505050565b826001600160a01b031661085d82610544565b6001600160a01b0316146108c15760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016103ca565b6001600160a01b0382166109235760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103ca565b61092e60008261077d565b6001600160a01b0383166000908152600360205260408120805460019290610957908490611240565b90915550506001600160a01b0382166000908152600360205260408120805460019290610985908490611253565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216610a3c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103ca565b6000818152600260205260409020546001600160a01b031615610aa15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103ca565b6001600160a01b0382166000908152600360205260408120805460019290610aca908490611253565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000610b3382610544565b9050610b4060008361077d565b6001600160a01b0381166000908152600360205260408120805460019290610b69908490611240565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031603610c245760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103ca565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610c9c84848461084a565b610ca884848484610dc5565b6106765760405162461bcd60e51b81526004016103ca90611266565b606081600003610ceb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d155780610cff816112b8565b9150610d0e9050600a836112e7565b9150610cef565b60008167ffffffffffffffff811115610d3057610d3061104e565b6040519080825280601f01601f191660200182016040528015610d5a576020820181803683370190505b5090505b841561084257610d6f600183611240565b9150610d7c600a866112fb565b610d87906030611253565b60f81b818381518110610d9c57610d9c61130f565b60200101906001600160f81b031916908160001a905350610dbe600a866112e7565b9450610d5e565b60006001600160a01b0384163b15610ebb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610e09903390899088908890600401611325565b6020604051808303816000875af1925050508015610e44575060408051601f3d908101601f19168201909252610e4191810190611362565b60015b610ea1573d808015610e72576040519150601f19603f3d011682016040523d82523d6000602084013e610e77565b606091505b508051600003610e995760405162461bcd60e51b81526004016103ca90611266565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610842565b506001949350505050565b6001600160e01b03198116811461054157600080fd5b600060208284031215610eee57600080fd5b81356106e981610ec6565b60005b83811015610f14578181015183820152602001610efc565b50506000910152565b60008151808452610f35816020860160208601610ef9565b601f01601f19169290920160200192915050565b6020815260006106e96020830184610f1d565b600060208284031215610f6e57600080fd5b5035919050565b80356001600160a01b0381168114610f8c57600080fd5b919050565b60008060408385031215610fa457600080fd5b610fad83610f75565b946020939093013593505050565b600080600060608486031215610fd057600080fd5b610fd984610f75565b9250610fe760208501610f75565b9150604084013590509250925092565b60006020828403121561100957600080fd5b6106e982610f75565b6000806040838503121561102557600080fd5b61102e83610f75565b91506020830135801515811461104357600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561107a57600080fd5b61108385610f75565b935061109160208601610f75565b925060408501359150606085013567ffffffffffffffff808211156110b557600080fd5b818701915087601f8301126110c957600080fd5b8135818111156110db576110db61104e565b604051601f8201601f19908116603f011681019083821181831017156111035761110361104e565b816040528281528a602084870101111561111c57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561115357600080fd5b61115c83610f75565b915061116a60208401610f75565b90509250929050565b600181811c9082168061118757607f821691505b6020821081036111a757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6000835161120d818460208801610ef9565b835190830190611221818360208801610ef9565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102975761029761122a565b808201808211156102975761029761122a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000600182016112ca576112ca61122a565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826112f6576112f66112d1565b500490565b60008261130a5761130a6112d1565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061135890830184610f1d565b9695505050505050565b60006020828403121561137457600080fd5b81516106e981610ec656fea26469706673582212202d84d1f6a57fa94433606062762f4bb27bfb75ba859a759da03f33de4fa46cde64736f6c63430008100033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806342966c6811610097578063a22cb46511610066578063a22cb465146101ff578063b88d4fde14610212578063c87b56dd14610225578063e985e9c51461023857600080fd5b806342966c68146101b05780636352211e146101c357806370a08231146101d657806395d89b41146101f757600080fd5b8063095ea7b3116100d3578063095ea7b31461016257806323b872dd1461017757806340c10f191461018a57806342842e0e1461019d57600080fd5b806301ffc9a7146100fa57806306fdde0314610122578063081812fc14610137575b600080fd5b61010d610108366004610edc565b61024b565b60405190151581526020015b60405180910390f35b61012a61029d565b6040516101199190610f49565b61014a610145366004610f5c565b61032f565b6040516001600160a01b039091168152602001610119565b610175610170366004610f91565b610356565b005b610175610185366004610fbb565b610470565b610175610198366004610f91565b6104a1565b6101756101ab366004610fbb565b6104af565b6101756101be366004610f5c565b6104ca565b61014a6101d1366004610f5c565b610544565b6101e96101e4366004610ff7565b6105a4565b604051908152602001610119565b61012a61062a565b61017561020d366004611012565b610639565b610175610220366004611064565b610644565b61012a610233366004610f5c565b61067c565b61010d610246366004611140565b6106f0565b60006001600160e01b031982166380ac58cd60e01b148061027c57506001600160e01b03198216635b5e139f60e01b145b8061029757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546102ac90611173565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611173565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b600061033a8261071e565b506000908152600460205260409020546001600160a01b031690565b600061036182610544565b9050806001600160a01b0316836001600160a01b0316036103d35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806103ef57506103ef81336106f0565b6104615760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016103ca565b61046b838361077d565b505050565b61047a33826107eb565b6104965760405162461bcd60e51b81526004016103ca906111ad565b61046b83838361084a565b6104ab82826109e6565b5050565b61046b83838360405180602001604052806000815250610644565b336104d482610544565b6001600160a01b0316146105385760405162461bcd60e51b815260206004820152602560248201527f4552433732313a206275726e206f6620746f6b656e2074686174206973206e6f6044820152643a1037bbb760d91b60648201526084016103ca565b61054181610b28565b50565b6000818152600260205260408120546001600160a01b0316806102975760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103ca565b60006001600160a01b03821661060e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016103ca565b506001600160a01b031660009081526003602052604090205490565b6060600180546102ac90611173565b6104ab338383610bc3565b61064e33836107eb565b61066a5760405162461bcd60e51b81526004016103ca906111ad565b61067684848484610c91565b50505050565b60606106878261071e565b600061069e60408051602081019091526000815290565b905060008151116106be57604051806020016040528060008152506106e9565b806106c884610cc4565b6040516020016106d99291906111fb565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000818152600260205260409020546001600160a01b03166105415760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016103ca565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906107b282610544565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806107f783610544565b9050806001600160a01b0316846001600160a01b0316148061081e575061081e81856106f0565b806108425750836001600160a01b03166108378461032f565b6001600160a01b0316145b949350505050565b826001600160a01b031661085d82610544565b6001600160a01b0316146108c15760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016103ca565b6001600160a01b0382166109235760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103ca565b61092e60008261077d565b6001600160a01b0383166000908152600360205260408120805460019290610957908490611240565b90915550506001600160a01b0382166000908152600360205260408120805460019290610985908490611253565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216610a3c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016103ca565b6000818152600260205260409020546001600160a01b031615610aa15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016103ca565b6001600160a01b0382166000908152600360205260408120805460019290610aca908490611253565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000610b3382610544565b9050610b4060008361077d565b6001600160a01b0381166000908152600360205260408120805460019290610b69908490611240565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031603610c245760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103ca565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610c9c84848461084a565b610ca884848484610dc5565b6106765760405162461bcd60e51b81526004016103ca90611266565b606081600003610ceb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d155780610cff816112b8565b9150610d0e9050600a836112e7565b9150610cef565b60008167ffffffffffffffff811115610d3057610d3061104e565b6040519080825280601f01601f191660200182016040528015610d5a576020820181803683370190505b5090505b841561084257610d6f600183611240565b9150610d7c600a866112fb565b610d87906030611253565b60f81b818381518110610d9c57610d9c61130f565b60200101906001600160f81b031916908160001a905350610dbe600a866112e7565b9450610d5e565b60006001600160a01b0384163b15610ebb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610e09903390899088908890600401611325565b6020604051808303816000875af1925050508015610e44575060408051601f3d908101601f19168201909252610e4191810190611362565b60015b610ea1573d808015610e72576040519150601f19603f3d011682016040523d82523d6000602084013e610e77565b606091505b508051600003610e995760405162461bcd60e51b81526004016103ca90611266565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610842565b506001949350505050565b6001600160e01b03198116811461054157600080fd5b600060208284031215610eee57600080fd5b81356106e981610ec6565b60005b83811015610f14578181015183820152602001610efc565b50506000910152565b60008151808452610f35816020860160208601610ef9565b601f01601f19169290920160200192915050565b6020815260006106e96020830184610f1d565b600060208284031215610f6e57600080fd5b5035919050565b80356001600160a01b0381168114610f8c57600080fd5b919050565b60008060408385031215610fa457600080fd5b610fad83610f75565b946020939093013593505050565b600080600060608486031215610fd057600080fd5b610fd984610f75565b9250610fe760208501610f75565b9150604084013590509250925092565b60006020828403121561100957600080fd5b6106e982610f75565b6000806040838503121561102557600080fd5b61102e83610f75565b91506020830135801515811461104357600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561107a57600080fd5b61108385610f75565b935061109160208601610f75565b925060408501359150606085013567ffffffffffffffff808211156110b557600080fd5b818701915087601f8301126110c957600080fd5b8135818111156110db576110db61104e565b604051601f8201601f19908116603f011681019083821181831017156111035761110361104e565b816040528281528a602084870101111561111c57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561115357600080fd5b61115c83610f75565b915061116a60208401610f75565b90509250929050565b600181811c9082168061118757607f821691505b6020821081036111a757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6000835161120d818460208801610ef9565b835190830190611221818360208801610ef9565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102975761029761122a565b808201808211156102975761029761122a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000600182016112ca576112ca61122a565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826112f6576112f66112d1565b500490565b60008261130a5761130a6112d1565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061135890830184610f1d565b9695505050505050565b60006020828403121561137457600080fd5b81516106e981610ec656fea26469706673582212202d84d1f6a57fa94433606062762f4bb27bfb75ba859a759da03f33de4fa46cde64736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}

@@ -6,6 +6,6 @@ {

"abi": [],
"bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c379c7071990b5d0c9c2a0691a4fb5741dabf848a49f33af3c0d4a0edc533bed64736f6c63430008060033",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c379c7071990b5d0c9c2a0691a4fb5741dabf848a49f33af3c0d4a0edc533bed64736f6c63430008060033",
"bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ac95ce865d8992395acd7e6827488065228300d73d20b317db88cc630642668964736f6c63430008100033",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ac95ce865d8992395acd7e6827488065228300d73d20b317db88cc630642668964736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}

@@ -43,3 +43,3 @@ {

"indexed": true,
"internalType": "enum IPolicyPoolConfig.GovernanceActions",
"internalType": "enum IAccessManager.GovernanceActions",
"name": "action",

@@ -63,3 +63,3 @@ "type": "uint8"

"indexed": true,
"internalType": "enum IPolicyPoolConfig.GovernanceActions",
"internalType": "enum IAccessManager.GovernanceActions",
"name": "action",

@@ -66,0 +66,0 @@ "type": "uint8"

@@ -43,3 +43,3 @@ {

"indexed": true,
"internalType": "enum IPolicyPoolConfig.GovernanceActions",
"internalType": "enum IAccessManager.GovernanceActions",
"name": "action",

@@ -63,3 +63,3 @@ "type": "uint8"

"indexed": true,
"internalType": "enum IPolicyPoolConfig.GovernanceActions",
"internalType": "enum IAccessManager.GovernanceActions",
"name": "action",

@@ -184,8 +184,8 @@ "type": "uint8"

"inputs": [],
"name": "NEGLIGIBLE_AMOUNT",
"name": "TWEAK_EXPIRATION",
"outputs": [
{
"internalType": "uint256",
"internalType": "uint40",
"name": "",
"type": "uint256"
"type": "uint40"
}

@@ -198,8 +198,8 @@ ],

"inputs": [],
"name": "TWEAK_EXPIRATION",
"name": "assetManager",
"outputs": [
{
"internalType": "uint40",
"internalType": "contract IAssetManager",
"name": "",
"type": "uint40"
"type": "address"
}

@@ -212,2 +212,9 @@ ],

"inputs": [],
"name": "checkpoint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "currency",

@@ -225,2 +232,21 @@ "outputs": [

{
"inputs": [
{
"internalType": "bytes",
"name": "functionCall",
"type": "bytes"
}
],
"name": "forwardToAssetManager",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],

@@ -291,2 +317,34 @@ "name": "lastTweak",

"inputs": [],
"name": "rebalance",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "recordEarnings",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IAssetManager",
"name": "newAM",
"type": "address"
},
{
"internalType": "bool",
"name": "force",
"type": "bool"
}
],
"name": "setAssetManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpause",

@@ -293,0 +351,0 @@ "outputs": [],

@@ -43,3 +43,3 @@ {

"indexed": true,
"internalType": "enum IPolicyPoolConfig.GovernanceActions",
"internalType": "enum IAccessManager.GovernanceActions",
"name": "action",

@@ -63,3 +63,3 @@ "type": "uint8"

"indexed": true,
"internalType": "enum IPolicyPoolConfig.GovernanceActions",
"internalType": "enum IAccessManager.GovernanceActions",
"name": "action",

@@ -66,0 +66,0 @@ "type": "uint8"

@@ -5,21 +5,7 @@ {

"sourceName": "contracts/TimeScaled.sol",
"abi": [
{
"inputs": [],
"name": "MIN_SCALE",
"outputs": [
{
"internalType": "uint128",
"name": "",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60a1610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063706ad35d146038575b600080fd5b604667016345785d8a000081565b6040516fffffffffffffffffffffffffffffffff909116815260200160405180910390f3fea26469706673582212208cead7e828e4f994415fca1d3dda81eec6eab85574afadc579c72c913bc7b35964736f6c63430008060033",
"deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063706ad35d146038575b600080fd5b604667016345785d8a000081565b6040516fffffffffffffffffffffffffffffffff909116815260200160405180910390f3fea26469706673582212208cead7e828e4f994415fca1d3dda81eec6eab85574afadc579c72c913bc7b35964736f6c63430008060033",
"abi": [],
"bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206dcfca8ca980fae697f9ccda261e6413d91fdda75fdc376dfe374c7944bc22f464736f6c63430008100033",
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206dcfca8ca980fae697f9ccda261e6413d91fdda75fdc376dfe374c7944bc22f464736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}
const { expect } = require("chai");
const hre = require("hardhat");
const { BigNumber } = require("ethers");
const {LogDescription} = require("ethers/lib/utils");
const { LogDescription } = require("ethers/lib/utils");
exports.WEEK = 3600 * 24 * 7;
exports.DAY = 3600 * 24;
exports.initCurrency = async function(options, initial_targets, initial_balances) {
const Currency = await ethers.getContractFactory("TestCurrency");
exports.initCurrency = async function (options, initial_targets, initial_balances) {
const Currency = await hre.ethers.getContractFactory("TestCurrency");
let currency = await Currency.deploy(

@@ -13,48 +14,71 @@ options.name || "Test Currency",

options.initial_supply,
options.decimals || 18,
options.decimals || 18
);
initial_targets = initial_targets || [];
await Promise.all(initial_targets.map(async function (user, index) {
await currency.transfer(user.address, initial_balances[index]);
}));
await Promise.all(
initial_targets.map(async function (user, index) {
await currency.transfer(user.address, initial_balances[index]);
})
);
return currency;
}
};
exports.approve_multiple = async function(currency, spender, sources, amounts) {
return Promise.all(sources.map(async function (source, index) {
await currency.connect(source).approve(spender.address, amounts[index]);
}));
}
exports.approve_multiple = async function (currency, spender, sources, amounts) {
return Promise.all(
sources.map(async function (source, index) {
await currency.connect(source).approve(spender.address, amounts[index]);
})
);
};
exports.check_balances = async function(currency, users, amounts) {
return Promise.all(users.map(async function (user, index) {
expect(await currency.balanceOf(user.address)).to.equal(amounts[index]);
}));
}
exports.check_balances = async function (currency, users, amounts) {
return Promise.all(
users.map(async function (user, index) {
expect(await currency.balanceOf(user.address)).to.equal(amounts[index]);
})
);
};
exports.now = function() {
exports.now = function () {
return Math.floor(new Date().getTime() / 1000);
}
};
exports.addRiskModule = async function(pool, premiumsAccount, contractFactory, {
rmName, scrPercentage, scrInterestRate, ensuroFee, maxScrPerPolicy,
scrLimit, moc, wallet, extraArgs, extraConstructorArgs
}) {
exports.addRiskModule = async function (
pool,
premiumsAccount,
contractFactory,
{
rmName,
scrPercentage,
scrInterestRate,
ensuroFee,
maxScrPerPolicy,
scrLimit,
moc,
wallet,
extraArgs,
extraConstructorArgs,
}
) {
extraArgs = extraArgs || [];
extraConstructorArgs = extraConstructorArgs || [];
const _A = pool._A || _W;
const rm = await hre.upgrades.deployProxy(contractFactory, [
rmName || "RiskModule",
_W(scrPercentage) || _W(1),
_W(ensuroFee) || _W(0),
_W(scrInterestRate) || _W(0.1),
_A(maxScrPerPolicy) || _A(1000),
_A(scrLimit) || _A(1000000),
wallet || "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", // Random address
...extraArgs
], {
kind: 'uups',
unsafeAllow: ["delegatecall"],
constructorArgs: [pool.address, premiumsAccount.address, ...extraConstructorArgs]
});
const rm = await hre.upgrades.deployProxy(
contractFactory,
[
rmName || "RiskModule",
_W(scrPercentage) || _W(1),
_W(ensuroFee) || _W(0),
_W(scrInterestRate) || _W(0.1),
_A(maxScrPerPolicy) || _A(1000),
_A(scrLimit) || _A(1000000),
wallet || "0xdD2FD4581271e230360230F9337D5c0430Bf44C0", // Random address
...extraArgs,
],
{
kind: "uups",
unsafeAllow: ["delegatecall"],
constructorArgs: [pool.address, premiumsAccount.address, ...extraConstructorArgs],
}
);

@@ -67,32 +91,35 @@ await rm.deployed();

}
const policyPoolConfig = await hre.ethers.getContractAt("PolicyPoolConfig", await pool.config());
await policyPoolConfig.addRiskModule(rm.address);
await pool.addComponent(rm.address, 2);
return rm;
}
};
exports.addEToken = async function(pool, {
etkName, etkSymbol, maxUtilizationRate,
poolLoanInterestRate, extraArgs, extraConstructorArgs
}) {
const EToken = await ethers.getContractFactory("EToken");
exports.addEToken = async function (
pool,
{ etkName, etkSymbol, maxUtilizationRate, poolLoanInterestRate, extraArgs, extraConstructorArgs }
) {
const EToken = await hre.ethers.getContractFactory("EToken");
extraArgs = extraArgs || [];
extraConstructorArgs = extraConstructorArgs || [];
const etk = await hre.upgrades.deployProxy(EToken, [
etkName || "EToken",
etkSymbol || "eUSD1YEAR",
_W(maxUtilizationRate) || _W(1),
_W(poolLoanInterestRate) || _W("0.05"),
...extraArgs
], {
kind: 'uups',
unsafeAllow: ["delegatecall"],
constructorArgs: [pool.address, ...extraConstructorArgs]
});
const etk = await hre.upgrades.deployProxy(
EToken,
[
etkName || "EToken",
etkSymbol || "eUSD1YEAR",
_W(maxUtilizationRate) || _W(1),
_W(poolLoanInterestRate) || _W("0.05"),
...extraArgs,
],
{
kind: "uups",
unsafeAllow: ["delegatecall"],
constructorArgs: [pool.address, ...extraConstructorArgs],
}
);
await etk.deployed();
await pool.addEToken(etk.address);
await pool.addComponent(etk.address, 1);
return etk;
}
};
exports.expected_change = async function(protocol_attribute, initial, change) {
exports.expected_change = async function (protocol_attribute, initial, change) {
change = BigNumber.from(change);

@@ -102,28 +129,22 @@ let actual_value = await protocol_attribute();

return actual_value;
}
};
exports.impersonate = async function(address, setBalanceTo) {
const ok = await hre.network.provider.request(
{method: "hardhat_impersonateAccount", params: [address]}
);
if (!ok)
throw "Error impersonatting " + address;
exports.impersonate = async function (address, setBalanceTo) {
const ok = await hre.network.provider.request({ method: "hardhat_impersonateAccount", params: [address] });
if (!ok) throw "Error impersonatting " + address;
if (setBalanceTo !== undefined)
await hre.network.provider.request(
{method: "hardhat_setBalance", params: [address, setBalanceTo.toHexString()]}
);
await hre.network.provider.request({ method: "hardhat_setBalance", params: [address, setBalanceTo.toHexString()] });
return await ethers.getSigner(address);
}
return await hre.ethers.getSigner(address);
};
/**
* Finds an event in the receipt
* @param {Interface} interface The interface of the contract that contains the requested event
* @param {TransactionReceipt} receipt Transaction receipt containing the events in the logs
* @param {String} eventName The name of the event we are interested in
* @returns {LogDescription}
*/
exports.getTransactionEvent = function(interface, receipt, eventName) {
* Finds an event in the receipt
* @param {Interface} interface The interface of the contract that contains the requested event
* @param {TransactionReceipt} receipt Transaction receipt containing the events in the logs
* @param {String} eventName The name of the event we are interested in
* @returns {LogDescription}
*/
const getTransactionEvent = function (interface, receipt, eventName) {
// for each log in the transaction receipt

@@ -141,57 +162,51 @@ for (const log of receipt.events) {

}
return null; // not found
}
return null; // not found
};
exports.deployPool = async function(hre, options) {
const PolicyPool = await ethers.getContractFactory("PolicyPool");
const PolicyPoolConfig = await ethers.getContractFactory("PolicyPoolConfig");
const PolicyNFT = await ethers.getContractFactory("PolicyNFT");
exports.getTransactionEvent = getTransactionEvent;
// Deploy PolicyNFT
const policyNFT = await hre.upgrades.deployProxy(
PolicyNFT,
exports.deployPool = async function (hre, options) {
const PolicyPool = await hre.ethers.getContractFactory("PolicyPool");
const AccessManager = await hre.ethers.getContractFactory("AccessManager");
// Deploy AccessManager
const accessManager = await hre.upgrades.deployProxy(AccessManager, [], { kind: "uups" });
await accessManager.deployed();
const policyPool = await hre.upgrades.deployProxy(
PolicyPool,
[
options.nftName || "Policy NFT",
options.nftSymbol || "EPOL",
options.policyPoolDetAddress || ethers.constants.AddressZero
options.treasuryAddress || hre.ethers.constants.AddressZero,
],
{kind: 'uups'}
{
constructorArgs: [accessManager.address, options.currency],
kind: "uups",
unsafeAllow: ["delegatecall"],
}
);
await policyNFT.deployed();
// Deploy PolicyPoolConfig
const policyPoolConfig = await hre.upgrades.deployProxy(PolicyPoolConfig, [
options.policyPoolDetAddress || ethers.constants.AddressZero,
options.treasuryAddress || ethers.constants.AddressZero
], {kind: 'uups'});
await policyPoolConfig.deployed();
const policyPool = await hre.upgrades.deployProxy(PolicyPool, [], {
constructorArgs: [policyPoolConfig.address, policyNFT.address, options.currency],
kind: 'uups',
unsafeAllow: ["delegatecall"],
});
await policyPool.deployed();
for (const role of (options.grantRoles || [])) {
await grantRole(hre, policyPoolConfig, role);
for (const role of options.grantRoles || []) {
await grantRole(hre, accessManager, role);
}
await grantRole(hre, policyPoolConfig, "LEVEL1_ROLE");
await grantRole(hre, policyPoolConfig, "LEVEL2_ROLE");
await grantRole(hre, policyPoolConfig, "LEVEL3_ROLE");
await grantRole(hre, accessManager, "LEVEL1_ROLE");
await grantRole(hre, accessManager, "LEVEL2_ROLE");
await grantRole(hre, accessManager, "LEVEL3_ROLE");
return policyPool;
}
};
exports.deployPremiumsAccount = async function (hre, pool, options) {
const PremiumsAccount = await ethers.getContractFactory("PremiumsAccount");
exports.deployPremiumsAccount = async function (hre, pool, options, addToPool = true) {
const PremiumsAccount = await hre.ethers.getContractFactory("PremiumsAccount");
const premiumsAccount = await hre.upgrades.deployProxy(PremiumsAccount, [], {
constructorArgs: [
pool.address,
options.jrEtkAddr || ethers.constants.AddressZero,
options.srEtkAddr || ethers.constants.AddressZero,
options.jrEtkAddr || hre.ethers.constants.AddressZero,
options.srEtkAddr || hre.ethers.constants.AddressZero,
],
kind: 'uups',
kind: "uups",
unsafeAllow: ["delegatecall"],

@@ -201,5 +216,7 @@ });

await premiumsAccount.deployed();
await pool.addPremiumsAccount(premiumsAccount.address);
if (addToPool) await pool.addComponent(premiumsAccount.address, 3);
return premiumsAccount;
}
};

@@ -219,5 +236,4 @@ async function _getDefaultSigner(hre) {

}
const roleHex = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(role));
if (!await contract.hasRole(roleHex, userAddress)) {
await contract.grantRole(roleHex, userAddress);
if (!(await contract.hasRole(getRole(role), userAddress))) {
await contract.grantRole(getRole(role), userAddress);
}

@@ -228,3 +244,3 @@ }

async function grantComponentRole(hre, contract, component, role, user) {
async function grantComponentRole(hre, accessManager, component, role, user) {
let userAddress;

@@ -235,8 +251,7 @@ if (user === undefined) {

} else {
userAddress = user;
userAddress = user.address === undefined ? user : user.address;
}
const roleHex = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(role));
const componentRole = await contract.getComponentRole(component.address, roleHex);
if (!await contract.hasRole(componentRole, userAddress)) {
await contract.grantComponentRole(component.address, roleHex, userAddress);
const componentRole = getComponentRole(component.address, getRole(role));
if (!(await accessManager.hasRole(componentRole, userAddress))) {
await accessManager.grantComponentRole(component.address, getRole(role), userAddress);
}

@@ -247,27 +262,23 @@ }

exports._E = ethers.utils.parseEther;
exports._E = hre.ethers.utils.parseEther;
const _BN = ethers.BigNumber.from;
const WAD = _BN(1e10).mul(_BN(1e8)); // 1e10*1e8=1e18
const RAY = WAD.mul(_BN(1e9)); // 1e18*1e9=1e27
const _BN = hre.ethers.BigNumber.from;
const WAD = _BN(1e10).mul(_BN(1e8)); // 1e10*1e8=1e18
const RAY = WAD.mul(_BN(1e9)); // 1e18*1e9=1e27
exports._BN = _BN;
const _W = function(value) {
if (value === undefined)
return undefined;
if (!Number.isInteger(value))
return _BN(Math.round(value * 1e9)).mul(_BN(1e9));
const _W = function (value) {
if (value === undefined) return undefined;
if (!Number.isInteger(value)) return _BN(Math.round(value * 1e9)).mul(_BN(1e9));
return _BN(value).mul(WAD);
}
};
exports._W = _W;
const _R = function(value) {
if (value === undefined)
return undefined;
if (!Number.isInteger(value))
return _BN(Math.round(value * 1e9)).mul(WAD);
const _R = function (value) {
if (value === undefined) return undefined;
if (!Number.isInteger(value)) return _BN(Math.round(value * 1e9)).mul(WAD);
return _BN(value).mul(RAY);
}
};

@@ -279,5 +290,4 @@ exports._R = _R;

return function (value) {
if (value === undefined)
return undefined;
if (typeof value === 'string' || value instanceof String) {
if (value === undefined) return undefined;
if (typeof value === "string" || value instanceof String) {
return _BN(value).mul(_BN(Math.pow(10, decimals)));

@@ -287,3 +297,71 @@ } else {

}
}
};
};
/**
* Builds the component role identifier
*
* Mimics the behaviour of the PolicyPoolConfig.getComponentRole method
*
* Component roles are roles created doing XOR between the component
* address and the original role.
*
* Example:
* getComponentRole("0xc6e7DF5E7b4f2A278906862b61205850344D4e7d", "ORACLE_ADMIN_ROLE")
* // "0x05e01b185238b49f750d03d945e38a7f6c3be8b54de0ee42d481eb7814f0d3a8"
*/
function getComponentRole(componentAddress, roleName) {
// 32 byte array
const bytesRole = hre.ethers.utils.arrayify(getRole(roleName));
// 20 byte array
const bytesAddress = hre.ethers.utils.arrayify(componentAddress);
// xor each byte, padding bytesAddress with zeros at the end
return hre.ethers.utils.hexlify(bytesRole.map((elem, idx) => elem ^ (bytesAddress[idx] || 0)));
}
exports.getComponentRole = getComponentRole;
/*
Builds AccessControl error message for comparison in tests
*/
function accessControlMessage(address, component, role) {
const roleHash = component !== null ? getComponentRole(component, role) : getRole(role);
return `AccessControl: account ${address.toLowerCase()} is missing role ${roleHash}`;
}
exports.accessControlMessage = accessControlMessage;
function makePolicyId(rm, internalId) {
return hre.ethers.BigNumber.from(rm.address).shl(96).add(internalId);
}
exports.makePolicyId = makePolicyId;
async function makePolicy(pool, rm, cust, payout, premium, lossProb, expiration, internalId) {
let tx = await rm.connect(cust).newPolicy(payout, premium, lossProb, expiration, cust.address, internalId);
let receipt = await tx.wait();
const newPolicyEvt = getTransactionEvent(pool.interface, receipt, "NewPolicy");
return newPolicyEvt;
}
exports.makePolicy = makePolicy;
async function blockchainNow(owner) {
return (await owner.provider.getBlock("latest")).timestamp;
}
exports.blockchainNow = blockchainNow;
function getRole(role) {
return role === "DEFAULT_ADMIN_ROLE"
? "0x0000000000000000000000000000000000000000000000000000000000000000"
: hre.ethers.utils.keccak256(hre.ethers.utils.toUtf8Bytes(role));
}
exports.getRole = getRole;
if (process.env.ENABLE_HH_WARNINGS !== "yes") hre.upgrades.silenceWarnings();
{
"name": "@ensuro/core",
"description": "Ensuro - Decentralized insurance protocol",
"version": "2.0.0-beta1",
"version": "2.0.0-beta10",
"files": [

@@ -6,0 +6,0 @@ "**/*.sol",

@@ -0,1 +1,7 @@

[![Tests](https://github.com/ensuro/ensuro/actions/workflows/tests.yaml/badge.svg)](https://github.com/ensuro/ensuro/actions/workflows/tests.yaml)
[![cov](https://github.com/ensuro/ensuro/raw/main/badges/coverage.svg)](https://github.com/ensuro/ensuro/actions/workflows/tests.yaml)
[![Build and Push Docker Image to Google Artifact Registry](https://github.com/ensuro/ensuro/actions/workflows/build-base-image.yaml/badge.svg)](https://github.com/ensuro/ensuro/actions/workflows/build-base-image.yaml)
[![release](https://badgen.net/github/release/ensuro/ensuro)](https://github.com/ensuro/ensuro/releases)
[![NPM Package](https://github.com/ensuro/ensuro/actions/workflows/npm.yaml/badge.svg)](https://www.npmjs.com/package/@ensuro/core)
# Ensuro - Decentralized capital for insurance

@@ -20,18 +26,16 @@

<dt>PolicyPool</dt>
<dd>This is the main contract that keeps track of active policies and manages the assets. It has the methods for LP to deposit/withdraw. The PolicyPool is connected to a set of eTokens and RiskModules.</dd>
<dd>
PolicyPool is the protocol's main contract. It keeps track of active policies and receives spending allowances. It has methods for LP to deposit/withdraw, acting as a gateway. The PolicyPool is connected to a set of eTokens, Premiums Accounts, and RiskModules.
This contract also follows the ERC721 standard, minting an NFT for each policy created. The owner of the NFT is who will receive the payout in case there's any.
</dd>
</dl>
<dl>
<dt>PolicyNFT</dt>
<dd>This contract follows ERC721 standard to control the ownership of the policies (each policy is an NFT). Policies are minted by PolicyPool.</dd>
<dt>AccessManager</dt>
<dd>This contract the access control permissions for the governance actions.</dd>
</dl>
<dl>
<dt>PolicyPoolConfig</dt>
<dd>This contract holds some configurable components of the protocol such as treasury address and the installed risk modules. Also this module holds the access control permissions for the governance actions.</dd>
</dl>
<dl>
<dt>EToken</dt>
<dd>This is a ERC20 compatible contract that represents the capital of each liquidity provider in a given pool. The valuation is one-to-one with the underlyng stablecoin. The view scr() returns the amount of capital that's locked backing up policies. For this capital locked, the pool receives an interest (scrInterestRate() / tokenInterestRate()) that is continously accrued in the balance of eToken holders.</dd>
<dd>EToken is an ERC20-compatible contract that counts the capital of each liquidity provider in a given pool. The valuation is one-to-one with the underlying stablecoin. The view `scr()` returns the amount of capital that's locked backing up policies. For this capital locked, the pool receives an interest (see `scrInterestRate()` and `tokenInterestRate()`) that is continuously accrued in the balance of eToken holders.</dd>
</dl>

@@ -41,3 +45,3 @@

<dt>RiskModule</dt>
<dd>This is a base contract that needs to be reimplemented with the specific logic related with custom policy parameters, validation of the received price and with different strategies for policy resolution (e.g. using oracles). This is the contract that must be called by a customer for creating a new policy that, after doing validations and storing parameters needed for resolution, will submit the new policy to the PolicyPool.</dd>
<dd>This base contract allows risk partners and customers to interact with the protocol. It needs to be reimplemented for each different product, each time defining the proper policy parameters, price validation, and policy resolution strategy (e.g., using oracles). RiskModule must be called to create a new policy; after validating the price and storing parameters needed for resolution, RiskModule submits the policy to PolicyPool.</dd>
</dl>

@@ -47,8 +51,13 @@

<dt>PremiumsAccount</dt>
<dd>The risk modules are grouped in *premiums accounts* that keep track of the pure premiums (active and earned) their policies. The responsability of these contracts is keeping track of the premiums and releasing the payouts. When premiums are exhausted (losses more than expected), they borrow money from the *eTokens* to cover the payouts. This money will be repaid when/if later the premiums account has surplus (losses less than expected).</dd>
<dd>The risk modules are grouped in premiums accounts that keep track of their policies' pure premiums (active and earned). The responsibility of these contracts is to keep track of the premiums and release the payouts. When premiums are exhausted (losses more than expected), they borrow money from the eTokens to cover the payouts. This money will be repaid when/if later the premiums account has a surplus (losses less than expected).</dd>
</dl>
<dl>
<dt>AssetManager</dt>
<dd>Both _eTokens_ and _PremiumsAccounts_ are _reserves_ because they hold assets. It's possible to assign to each reserve an AssetManager. The AssetManager is a contract that operates in the reserve's context (through delegatecalls) and manages the assets by applying some strategy to invest in other DeFi protocols to generate additional returns.</dd>
</dl>
<dl>
<dt>LPWhitelist</dt>
<dd>This is an optional component. If present it controls which Liquidity Providers can deposit or transfer their <i>eTokens</i>.</dd>
<dd>This is an optional component. If present it controls which Liquidity Providers can deposit or transfer their <i>eTokens</i>. Each eToken may be or not connected to a whitelist.</dd>
</dl>

@@ -58,3 +67,3 @@

<dt>Policy</dt>
<dd>This is a library with the struct and the calculation of relevant attributes of a policy. It includes the logic around the distribution of the premium, calculation of SCR, shared coverage and other behaviour of the protocol.</dd>
<dd>Policy is a library with the struct and the calculation of relevant attributes of a policy. It includes the logic around the premium distribution, SCR calculation, shared coverage, and other protocol behaviors.</dd>
</dl>

@@ -64,3 +73,3 @@

The protocol uses three levels of access control, plus a guardian role. The roles are managed by the PolicyPoolConfig smart contract.
The protocol uses three levels of access control, plus a guardian role. These roles can be assigned at protocol level or specifically for a component. The roles are managed by the AccessManager smart contract.

@@ -67,0 +76,0 @@ More info about governance in https://docs.google.com/spreadsheets/d/1LqlogRn8AlnLq1rPTd5UT7CJI3uc31PdBaxj4pX3mtE/edit?usp=sharing

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc