@ensuro/core 2.9.0 → 2.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/build-info.json +1 -0
- package/build/contracts/PolicyPool.sol/PolicyPool.json +2 -7
- package/contracts/PolicyPool.sol +5 -7
- package/js/deploy.js +1 -1
- package/js/test-utils.js +2 -91
- package/js/utils.js +2 -208
- package/package.json +1 -1
- package/build/contracts/mocks/TestNFT.sol/TestNFT.json +0 -388
- package/contracts/mocks/TestNFT.sol +0 -23
- package/js/constants.js +0 -13
|
@@ -127,11 +127,6 @@
|
|
|
127
127
|
"name": "UpgradeCannotChangeAccess",
|
|
128
128
|
"type": "error"
|
|
129
129
|
},
|
|
130
|
-
{
|
|
131
|
-
"inputs": [],
|
|
132
|
-
"name": "UpgradeCannotChangeCurrency",
|
|
133
|
-
"type": "error"
|
|
134
|
-
},
|
|
135
130
|
{
|
|
136
131
|
"anonymous": false,
|
|
137
132
|
"inputs": [
|
|
@@ -1755,8 +1750,8 @@
|
|
|
1755
1750
|
"type": "function"
|
|
1756
1751
|
}
|
|
1757
1752
|
],
|
|
1758
|
-
"bytecode": "0x60e060405230608052348015610013575f5ffd5b50604051615cfe380380615cfe83398101604081905261003291610172565b6001600160a01b0382166100595760405163a9f283c960e01b815260040160405180910390fd5b6001600160a01b0381166100805760405163559a03cd60e01b815260040160405180910390fd5b61008861009f565b6001600160a01b0391821660a0521660c0526101aa565b5f54610100900460ff161561010a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610159575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461016f575f5ffd5b50565b5f5f60408385031215610183575f5ffd5b825161018e8161015b565b602084015190925061019f8161015b565b809150509250929050565b60805160a05160c051615a6d6102915f395f8181610749015281816110c00152818161117401528181611228015281816114d001528181611542015281816115a301528181611dea01528181611e9301528181611f3a01528181611f79015281816120a5015261363c01525f81816105db015281816113ed0152818161182b0152818161191d01528181611a3301528181611acf015281816121b50152818161273701528181612d8c01528181612fcf015281816134fc015261358b01525f8181610bd001528181610c100152818161168e015281816116ce015261175b0152615a6d5ff3fe608060405260043610610254575f3560e01c80636769a76f1161013f57806395d89b41116100b3578063e5a6b10f11610078578063e5a6b10f1461073b578063e985e9c51461076d578063f0f44260146107b5578063f3fef3a3146107d4578063f67b2bad146107f3578063ffa600e314610813575f5ffd5b806395d89b41146106ab578063a22cb465146106bf578063b88d4fde146106de578063c016f88a146106fd578063c87b56dd1461071c575f5ffd5b806371907f171161010457806371907f17146105cd578063792da09e146105ff5780637a702b3c1461062b57806382afd23b1461064a5780638456cb59146106785780638c916d461461068c575f5ffd5b80636769a76f146105325780636af6f1ef146105515780636b8734e7146105705780636f86c8971461058f57806370a08231146105ae575f5ffd5b80633f4ba83a116101d657806352d1902d1161019b57806352d1902d1461048c57806355f804b3146104a05780635c975abb146104bf5780635fcbf445146104d657806361d027b3146104f55780636352211e14610513575f5ffd5b80633f4ba83a146103f457806342842e0e1461040857806347e7ef24146104275780634a47a3e0146104465780634f1ef28614610479575f5ffd5b806323b872dd1161021c57806323b872dd1461032457806324ea54f41461034357806333d6157a146103715780633659cfe6146103b65780633ed7c1ae146103d5575f5ffd5b806301ffc9a71461025857806306fdde031461028c578063077f224a146102ad578063081812fc146102ce578063095ea7b314610305575b5f5ffd5b348015610263575f5ffd5b50610277610272366004614ce3565b610832565b60405190151581526020015b60405180910390f35b348015610297575f5ffd5b506102a061085d565b6040516102839190614d2c565b3480156102b8575f5ffd5b506102cc6102c7366004614e21565b6108ed565b005b3480156102d9575f5ffd5b506102ed6102e8366004614e99565b610a5c565b6040516001600160a01b039091168152602001610283565b348015610310575f5ffd5b506102cc61031f366004614eb0565b610a81565b34801561032f575f5ffd5b506102cc61033e366004614eda565b610b95565b34801561034e575f5ffd5b506103635f516020615a185f395f51905f5281565b604051908152602001610283565b34801561037c575f5ffd5b506103a961038b366004614f18565b6001600160a01b03165f90815261012e602052604090205460ff1690565b6040516102839190614f63565b3480156103c1575f5ffd5b506102cc6103d0366004614f18565b610bc6565b3480156103e0575f5ffd5b506103636103ef366004615075565b610ca3565b3480156103ff575f5ffd5b506102cc6113c7565b348015610413575f5ffd5b506102cc610422366004614eda565b611482565b348015610432575f5ffd5b506102cc610441366004614eb0565b61149c565b348015610451575f5ffd5b506103637fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102cc6104873660046150ce565b611684565b348015610497575f5ffd5b5061036361174f565b3480156104ab575f5ffd5b506102cc6104ba36600461511b565b611800565b3480156104ca575f5ffd5b5060335460ff16610277565b3480156104e1575f5ffd5b506102cc6104f0366004615159565b6118f7565b348015610500575f5ffd5b5061012d546001600160a01b03166102ed565b34801561051e575f5ffd5b506102ed61052d366004614e99565b611bd5565b34801561053d575f5ffd5b5061036361054c366004615190565b611c34565b34801561055c575f5ffd5b506102cc61056b3660046151f6565b61211a565b34801561057b575f5ffd5b506102cc61058a366004615159565b61219d565b34801561059a575f5ffd5b506102cc6105a9366004614f18565b61271f565b3480156105b9575f5ffd5b506103636105c8366004614f18565b612ccf565b3480156105d8575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b34801561060a575f5ffd5b50610363610619366004614e99565b5f90815261012f602052604090205490565b348015610636575f5ffd5b506102cc610645366004615211565b612d53565b348015610655575f5ffd5b50610277610664366004614e99565b5f90815261012f6020526040902054151590565b348015610683575f5ffd5b506102cc612d74565b348015610697575f5ffd5b506102cc6106a636600461523c565b612e14565b3480156106b6575f5ffd5b506102a0612ed5565b3480156106ca575f5ffd5b506102cc6106d93660046152bb565b612ee4565b3480156106e9575f5ffd5b506102cc6106f83660046152e7565b612eef565b348015610708575f5ffd5b5061036361071736600461534f565b612f21565b348015610727575f5ffd5b506102a0610736366004614e99565b612f54565b348015610746575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b348015610778575f5ffd5b50610277610787366004615382565b6001600160a01b039182165f9081526101006020908152604080832093909416825291909152205460ff1690565b3480156107c0575f5ffd5b506102cc6107cf366004614f18565b612fb7565b3480156107df575f5ffd5b506103636107ee366004614eb0565b613058565b3480156107fe575f5ffd5b506103635f5160206159d15f395f51905f5281565b34801561081e575f5ffd5b506102cc61082d3660046153ae565b6130ea565b5f61083c8261311b565b8061085757506001600160e01b0319821663019c676f60e31b145b92915050565b606060fb805461086c906153db565b80601f0160208091040260200160405190810160405280929190818152602001828054610898906153db565b80156108e35780601f106108ba576101008083540402835291602001916108e3565b820191905f5260205f20905b8154815290600101906020018083116108c657829003601f168201915b5050505050905090565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156109ad575f805461ff0019166101001790555b83515f036109cd57604051620beefb60e01b815260040160405180910390fd5b82515f036109ee576040516343b47bcb60e01b815260040160405180910390fd5b6109f661316a565b610a008484613192565b610a086131c2565b610a11826131f0565b8015610a56575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f610a668261321f565b505f90815260ff60205260409020546001600160a01b031690565b5f610a8b82611bd5565b9050806001600160a01b0316836001600160a01b031603610af85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610983565b336001600160a01b0382161480610b145750610b148133610787565b610b865760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610983565b610b90838361327d565b505050565b610b9f33826132ea565b610bbb5760405162461bcd60e51b81526004016109839061540d565b610b90838383613367565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c0e5760405162461bcd60e51b81526004016109839061545a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c565f5160206159b15f395f51905f52546001600160a01b031690565b6001600160a01b031614610c7c5760405162461bcd60e51b8152600401610983906154a6565b610c85816134d6565b604080515f80825260208201909252610ca0918391906136eb565b50565b5f610cac613855565b610cb58561389b565b6101608501516001600160a01b0381163314610ce457604051634ace04f960e01b815260040160405180910390fd5b610cef816002613901565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5091906154f2565b9050610d5d816003613901565b4264ffffffffff16876101a0015164ffffffffff1611610db75760405162461bcd60e51b815260206004820152601560248201527413db19081c1bdb1a58de481a5cc8195e1c1a5c9959605a1b6044820152606401610983565b85610180015164ffffffffff1687610180015164ffffffffff1614610e355760405162461bcd60e51b815260206004820152602e60248201527f426f746820706f6c6963696573206d7573742068617665207468652073616d6560448201526d207374617274696e67206461746560901b6064820152608401610983565b8560200151876020015111158015610e5557508560c001518760c0015111155b8015610e6957508560e001518760e0015111155b8015610e7f575085610120015187610120015111155b8015610e95575085610140015187610140015111155b8015610ea957508560600151876060015111155b8015610ebd57508560800151876080015111155b8015610ed3575085610100015187610100015111155b8015610ef75750856101a0015164ffffffffff16876101a0015164ffffffffff1611155b8015610f1957508561016001516001600160a01b0316826001600160a01b0316145b610f815760405162461bcd60e51b815260206004820152603360248201527f4e657720706f6c696379206d7573742062652067726561746572206f7220657160448201527275616c207468616e206f6c6420706f6c69637960681b6064820152608401610983565b610f8b8285612f21565b8087525f90815261012f602052604090205415610fe25760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b610feb8661393c565b86515f90815261012f6020526040812091909155875161100a90611bd5565b905061102881885f015160405180602001604052805f8152506139ba565b87515f90815261012f602052604080822091909155516355c1da5f60e11b81526001600160a01b0383169063ab83b4be90611069908b908b906004016155cd565b5f604051808303815f87803b158015611080575f5ffd5b505af1158015611092573d5f5f3e3d5ffd5b505050505f8860c001518860c001516110ab91906155fe565b905080156110e8576110e86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168885846139ec565b8861014001518861014001516110fe91906155fe565b9050801561119c5761119c87846001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116a91906154f2565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190846139ec565b8861012001518861012001516111b291906155fe565b905080156111fa576111fa87846001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b8860e001518860e0015161120e91906155fe565b905080156112535761012d54611253906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116918a9116846139ec565b88610100015188610100015161126991906155fe565b90505f811180156112eb5750836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d591906154f2565b6001600160a01b0316876001600160a01b031614155b156113305761133087856001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b836001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b896040516113699190615611565b60405180910390a2875189516040516001600160a01b038716907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4885188516113b69190613a46565b50508551925050505b949350505050565b5f516020615a185f395f51905f525f5160206159d15f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611460575f5ffd5b505afa158015611472573d5f5f3e3d5ffd5b5050505061147e613b41565b5050565b610b9083838360405180602001604052805f815250612eef565b6114a4613855565b6114af826001613901565b6040516370a0823160e01b81526001600160a01b0383811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611517573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153b9190615620565b90506115727f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163385856139ec565b6001600160a01b0383166347e7ef24336040516370a0823160e01b81526001600160a01b03878116600483015285917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156115ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e9190615620565b61161891906155fe565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611660573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190615620565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116cc5760405162461bcd60e51b81526004016109839061545a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166117145f5160206159b15f395f51905f52546001600160a01b031690565b6001600160a01b03161461173a5760405162461bcd60e51b8152600401610983906154a6565b611743826134d6565b61147e828260016136eb565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ee5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610983565b505f5160206159b15f395f51905f5290565b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611895575f5ffd5b505afa1580156118a7573d5f5f3e3d5ffd5b505050508161013090816118bb9190615682565b506040513381526004907fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f906020015b60405180910390a25050565b5f516020615a185f395f51905f525f5160206159d15f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611990575f5ffd5b505afa1580156119a2573d5f5f3e3d5ffd5b5050506001600160a01b0385165f90815261012e602052604081209150815460ff1660038111156119d5576119d5614f33565b036119f357604051637d91856360e01b815260040160405180910390fd5b6001846003811115611a0757611a07614f33565b1480611a2457506002846003811115611a2257611a22614f33565b145b15611ac5576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159d15f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611aaa575f5ffd5b505afa158015611abc573d5f5f3e3d5ffd5b50505050611b5d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f516020615a185f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611b46575f5ffd5b505afa158015611b58573d5f5f3e3d5ffd5b505050505b80548490829060ff19166001836003811115611b7b57611b7b614f33565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91611bc691610100900460ff1690889061573d565b60405180910390a25050505050565b5f81815260fd60205260408120546001600160a01b0316806108575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f611c3d613855565b6101608501516001600160a01b0381163314611c6c57604051634ace04f960e01b815260040160405180910390fd5b611c77816002613901565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd891906154f2565b9050611ce5816003613901565b611cef8285612f21565b8088525f90815261012f602052604090205415611d465760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b611d4f8761393c565b87515f90815261012f602090815260408083209390935589518351918201909352908152611d7e9187916139ba565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611daa908a90600401615611565b5f604051808303815f87803b158015611dc1575f5ffd5b505af1158015611dd3573d5f5f3e3d5ffd5b50505060c0880151611e1491506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690889084906139ec565b61014087015115611ebb57611ebb86826001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8391906154f2565b6101408a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906139ec565b61012087015115611f6257611f6286826001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f2a91906154f2565b6101208a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906139ec565b61012d5460e0880151611fa7916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a9291909116906139ec565b5f87610100015111801561202c5750816001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201691906154f2565b6001600160a01b0316866001600160a01b031614155b156120cd576120cd86836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612071573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209591906154f2565b6101008a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906139ec565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516121069190615611565b60405180910390a250509351949350505050565b612122613855565b426121356101c083016101a08401615763565b64ffffffffff1611156121835760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b610ca06121953683900383018361577c565b5f6001613b93565b5f5160206159d15f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b15801561221f575f5ffd5b505afa158015612231573d5f5f3e3d5ffd5b5050506001600160a01b0384165f90815261012e602052604081209150815460ff16600381111561226457612264614f33565b146122825760405163cf9a96f360e01b815260040160405180910390fd5b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ec91906154f2565b6001600160a01b03161461231357604051630fdee24360e11b815260040160405180910390fd5b600183600381111561232757612327614f33565b1480156123a357506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061236290639077062160e01b90600401615797565b602060405180830381865afa15801561237d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a191906157ac565b155b80612439575060038360038111156123bd576123bd614f33565b14801561243957506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a7906123f890630e72532960e11b90600401615797565b602060405180830381865afa158015612413573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243791906157ac565b155b806124cf5750600283600381111561245357612453614f33565b1480156124cf57506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061248e9063da40804f60e01b90600401615797565b602060405180830381865afa1580156124a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124cd91906157ac565b155b156124f157838360405163502c9a5f60e01b81526004016109839291906157c7565b8054600160ff198216811783558491839161ffff199091161761010083600381111561251f5761251f614f33565b0217905550600383600381111561253857612538614f33565b036126d5575f8490505f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125a291906154f2565b90506001600160a01b0381161561260a576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156125f3575f5ffd5b505af1158015612605573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612646573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266a91906154f2565b90506001600160a01b038116156126d2576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156126bb575f5ffd5b505af11580156126cd573d5f5f3e3d5ffd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef84600160405161271192919061573d565b60405180910390a250505050565b5f5160206159d15f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b1580156127a1575f5ffd5b505afa1580156127b3573d5f5f3e3d5ffd5b505050506001600160a01b0382165f90815261012e602052604090206002815460ff1660038111156127e7576127e7614f33565b1461280557604051635c92b23960e11b815260040160405180910390fd5b60018154610100900460ff16600381111561282257612822614f33565b0361291d57826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612863573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128879190615620565b1561291857805f0160019054906101000a900460ff16836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128fd9190615620565b604051631d0ec0ab60e01b81526004016109839291906157e0565b612c5d565b60028154610100900460ff16600381111561293a5761293a614f33565b036129f157826001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561297b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299f9190615620565b1561291857805f0160019054906101000a900460ff16836001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b60038154610100900460ff166003811115612a0e57612a0e614f33565b03612c5d575f839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a779190615620565b15612ac957815f0160019054906101000a900460ff16816001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b5f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2a91906154f2565b90506001600160a01b03811615612b92576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612b7b575f5ffd5b505af1158015612b8d573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf291906154f2565b90506001600160a01b03811615612c5a576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612c43575f5ffd5b505af1158015612c55573d5f5f3e3d5ffd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91612ca391610100900460ff16905f9061573d565b60405180910390a250506001600160a01b03165f90815261012e60205260409020805461ffff19169055565b5f6001600160a01b038216612d385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610983565b506001600160a01b03165f90815260fe602052604090205490565b612d5b613855565b61147e612d6d3684900384018461577c565b825f613b93565b5f516020615a185f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015612df6575f5ffd5b505afa158015612e08573d5f5f3e3d5ffd5b50505050610ca0613ebc565b612e1c613855565b5f5b81811015610b905742838383818110612e3957612e396157f7565b90506101c002016101a0016020810190612e539190615763565b64ffffffffff161115612ea15760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b612ecd838383818110612eb657612eb66157f7565b90506101c00201803603810190612195919061577c565b600101612e1e565b606060fc805461086c906153db565b61147e338383613ef9565b612ef933836132ea565b612f155760405162461bcd60e51b81526004016109839061540d565b610a5684848484613fc7565b5f612f4d6bffffffffffffffffffffffff83166bffffffffffffffffffffffff19606086901b1661580b565b9392505050565b6060612f5f8261321f565b5f612f68613ffa565b90505f815111612f865760405180602001604052805f815250612f4d565b80612f908461400a565b604051602001612fa1929190615835565b6040516020818303038152906040529392505050565b5f5160206159d15f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015613039575f5ffd5b505afa15801561304b573d5f5f3e3d5ffd5b5050505061147e8261409a565b5f613061613855565b61306c836001614123565b6001600160a01b03831663f3fef3a3336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af11580156130c6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4d9190615620565b6130f2613855565b61147e6131043684900384018461577c565b8261310f575f613115565b83602001355b5f613b93565b5f6001600160e01b031982166380ac58cd60e01b148061314b57506001600160e01b03198216635b5e139f60e01b145b8061085757506301ffc9a760e01b6001600160e01b0319831614610857565b5f54610100900460ff166131905760405162461bcd60e51b815260040161098390615849565b565b5f54610100900460ff166131b85760405162461bcd60e51b815260040161098390615849565b61147e8282614182565b5f54610100900460ff166131e85760405162461bcd60e51b815260040161098390615849565b6131906141c1565b5f54610100900460ff166132165760405162461bcd60e51b815260040161098390615849565b610ca08161409a565b5f81815260fd60205260409020546001600160a01b0316610ca05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f81815260ff6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132b182611bd5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f6132f583611bd5565b9050806001600160a01b0316846001600160a01b0316148061333c57506001600160a01b038082165f908152610100602090815260408083209388168352929052205460ff165b806113bf5750836001600160a01b031661335584610a5c565b6001600160a01b031614949350505050565b826001600160a01b031661337a82611bd5565b6001600160a01b0316146133a05760405162461bcd60e51b815260040161098390615894565b6001600160a01b0382166134025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610983565b61340f83838360016141f3565b826001600160a01b031661342282611bd5565b6001600160a01b0316146134485760405162461bcd60e51b815260040161098390615894565b5f81815260ff6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260fe855283862080545f190190559087168086528386208054600101905586865260fd90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020615a185f395f51905f525f5160206159d15f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b15801561356f575f5ffd5b505afa158015613581573d5f5f3e3d5ffd5b505050505f8390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ef573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061361391906154f2565b6001600160a01b03161461363a57604051630f13081760e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136c491906154f2565b6001600160a01b031614610a56576040516324a41b4360e11b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561371e57610b9083614200565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613778575060408051601f3d908101601f1916820190925261377591810190615620565b60015b6137db5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610983565b5f5160206159b15f395f51905f5281146138495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610983565b50610b9083838361429b565b60335460ff16156131905760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610983565b8051158015906138c2575080515f90815261012f60205260409020546138c08261393c565b145b610ca05760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610983565b600161390d83836142bf565b600381111561391e5761391e614f33565b1461147e57604051630422f25f60e01b815260040160405180910390fd5b5f8160405160200161394e9190615611565b60408051601f1981840301815291905280516020909101209050806139b55760405162461bcd60e51b815260206004820152601860248201527f506f6c6963793a20686173682063616e6e6f74206265203000000000000000006044820152606401610983565b919050565b6139c48383614331565b6139d05f8484846144c6565b610b905760405162461bcd60e51b8152600401610983906158d9565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a569085906145c0565b5f613a5083611bd5565b90506001600160a01b0381163b613a6657505050565b613a7781635ee0c7dd60e01b614693565b613a8057505050565b5f6001600160a01b038216635ee0c7dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af1158015613ae8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b0c919061592b565b90506001600160e01b03198116635ee0c7dd60e01b14610a5657806040516381784a5160e01b81526004016109839190615797565b613b496146ae565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b613b9c8361389b565b61016083015181158015613bb957506001600160a01b0381163314155b15613bd757604051634ace04f960e01b815260040160405180910390fd5b821580613bef575042846101a0015164ffffffffff16115b613c3b5760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610983565b613c46816002614123565b8360200151831115613c935760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610983565b5f5f841190505f826001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cfa91906154f2565b9050613d07816003614123565b85515f90815261012f60205260408120558115613d91575f613d2b875f0151611bd5565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee790613d5e9084908b908b90600401615946565b5f604051808303815f87803b158015613d75575f5ffd5b505af1158015613d87573d5f5f3e3d5ffd5b5050505050613deb565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d90613dbd908990600401615611565b5f604051808303815f87803b158015613dd4575f5ffd5b505af1158015613de6573d5f5f3e3d5ffd5b505050505b6020860151604051636a448ef160e01b815260048101919091526001600160a01b03841690636a448ef1906024015f604051808303815f87803b158015613e30575f5ffd5b505af1158015613e42573d5f5f3e3d5ffd5b50505050855f01518661016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e87604051613e8a91815260200190565b60405180910390a38415613ea9578551613ea490866146f7565b613eb4565b8551613eb4906147f2565b505050505050565b613ec4613855565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613b763390565b816001600160a01b0316836001600160a01b031603613f5a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610983565b6001600160a01b038381165f8181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613fd2848484613367565b613fde848484846144c6565b610a565760405162461bcd60e51b8152600401610983906158d9565b6060610130805461086c906153db565b60605f614016836148ec565b60010190505f8167ffffffffffffffff81111561403557614035614d3e565b6040519080825280601f01601f19166020018201604052801561405f576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461406957509392505050565b6001600160a01b0381166140c1576040516307a2ee8b60e11b815260040160405180910390fd5b61012d80546001600160a01b0319166001600160a01b038316179055600161012d546040516001600160a01b0390911681527fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f9060200160405180910390a250565b5f61412e83836142bf565b9050600181600381111561414457614144614f33565b141580156141645750600281600381111561416157614161614f33565b14155b15610b905760405163d08ef1ff60e01b815260040160405180910390fd5b5f54610100900460ff166141a85760405162461bcd60e51b815260040161098390615849565b60fb6141b48382615682565b5060fc610b908282615682565b5f54610100900460ff166141e75760405162461bcd60e51b815260040161098390615849565b6033805460ff19169055565b6141fb613855565b610a56565b6001600160a01b0381163b61426d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610983565b5f5160206159b15f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6142a4836149c3565b5f825111806142b05750805b15610b9057610a568383614a02565b6001600160a01b0382165f90815261012e602052604081208260038111156142e9576142e9614f33565b8154610100900460ff16600381111561430457614304614f33565b1461432657838360405163502c9a5f60e01b81526004016109839291906157c7565b5460ff169392505050565b6001600160a01b0382166143875760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610983565b5f81815260fd60205260409020546001600160a01b0316156143eb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6143f85f838360016141f3565b5f81815260fd60205260409020546001600160a01b03161561445c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6001600160a01b0382165f81815260fe602090815260408083208054600101905584835260fd90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6001600160a01b0384163b156145b857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614509903390899088908890600401615973565b6020604051808303815f875af1925050508015614543575060408051601f3d908101601f191682019092526145409181019061592b565b60015b61459e573d808015614570576040519150601f19603f3d011682016040523d82523d5f602084013e614575565b606091505b5080515f036145965760405162461bcd60e51b8152600401610983906158d9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113bf565b5060016113bf565b5f614614826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614a279092919063ffffffff16565b905080515f148061463457508080602001905181019061463491906157ac565b610b905760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610983565b5f61469d83614a35565b8015612f4d5750612f4d8383614a67565b60335460ff166131905760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610983565b5f61470183611bd5565b90506001600160a01b0381163b61471757505050565b61472881633ece0a8960e01b614693565b61473157505050565b5f6001600160a01b03821663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af1158015614799573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147bd919061592b565b90506001600160e01b03198116636b140e9f60e11b14610a5657806040516381784a5160e01b81526004016109839190615797565b5f6147fc82611bd5565b90506001600160a01b0381163b614811575050565b61482281633ece0a8960e01b614693565b61482a575050565b6001600160a01b03811663e8e617b7620249f0336040516001600160e01b031960e085901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303815f8887f1935050505080156148ad575060408051601f3d908101601f191682019092526148aa9181019061592b565b60015b610b90576040516001600160a01b038216815282907f6ce8016f81523f240956bca9a698e643d09e84e7d0e931470b1016baf1027bd0906020016118eb565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061492a5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614956576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061497457662386f26fc10000830492506010015b6305f5e100831061498c576305f5e100830492506008015b61271083106149a057612710830492506004015b606483106149b2576064830492506002015b600a83106108575760010192915050565b6149cc81614200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060612f4d83836040518060600160405280602781526020016159f160279139614af5565b60606113bf84845f85614b69565b5f614a47826301ffc9a760e01b614a67565b80156108575750614a60826001600160e01b0319614a67565b1592915050565b5f5f6301ffc9a760e01b83604051602401614a829190615797565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f5f5f60205f8551602087018a617530fa92503d91505f519050828015614adf575060208210155b8015614aea57505f81115b979650505050505050565b60605f5f856001600160a01b031685604051614b1191906159a5565b5f60405180830381855af49150503d805f8114614b49576040519150601f19603f3d011682016040523d82523d5f602084013e614b4e565b606091505b5091509150614b5f86838387614c31565b9695505050505050565b606082471015614bca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610983565b5f5f866001600160a01b03168587604051614be591906159a5565b5f6040518083038185875af1925050503d805f8114614c1f576040519150601f19603f3d011682016040523d82523d5f602084013e614c24565b606091505b5091509150614aea878383875b60608315614c9f5782515f03614c98576001600160a01b0385163b614c985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610983565b50816113bf565b6113bf8383815115614cb45781518083602001fd5b8060405162461bcd60e51b81526004016109839190614d2c565b6001600160e01b031981168114610ca0575f5ffd5b5f60208284031215614cf3575f5ffd5b8135612f4d81614cce565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612f4d6020830184614cfe565b634e487b7160e01b5f52604160045260245ffd5b6040516101c0810167ffffffffffffffff81118282101715614d7657614d76614d3e565b60405290565b5f82601f830112614d8b575f5ffd5b8135602083015f5f67ffffffffffffffff841115614dab57614dab614d3e565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715614dda57614dda614d3e565b604052838152905080828401871015614df1575f5ffd5b838360208301375f602085830101528094505050505092915050565b6001600160a01b0381168114610ca0575f5ffd5b5f5f5f60608486031215614e33575f5ffd5b833567ffffffffffffffff811115614e49575f5ffd5b614e5586828701614d7c565b935050602084013567ffffffffffffffff811115614e71575f5ffd5b614e7d86828701614d7c565b9250506040840135614e8e81614e0d565b809150509250925092565b5f60208284031215614ea9575f5ffd5b5035919050565b5f5f60408385031215614ec1575f5ffd5b8235614ecc81614e0d565b946020939093013593505050565b5f5f5f60608486031215614eec575f5ffd5b8335614ef781614e0d565b92506020840135614f0781614e0d565b929592945050506040919091013590565b5f60208284031215614f28575f5ffd5b8135612f4d81614e0d565b634e487b7160e01b5f52602160045260245ffd5b60048110610ca057634e487b7160e01b5f52602160045260245ffd5b60208101614f7083614f47565b91905290565b80356139b581614e0d565b803564ffffffffff811681146139b5575f5ffd5b5f6101c08284031215614fa6575f5ffd5b614fae614d52565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e0808401359082015261010080840135908201526101208084013590820152610140808401359082015290506150286101608301614f76565b61016082015261503b6101808301614f81565b61018082015261504e6101a08301614f81565b6101a082015292915050565b80356bffffffffffffffffffffffff811681146139b5575f5ffd5b5f5f5f5f6103c08587031215615089575f5ffd5b6150938686614f95565b93506150a3866101c08701614f95565b92506103808501356150b481614e0d565b91506150c36103a0860161505a565b905092959194509250565b5f5f604083850312156150df575f5ffd5b82356150ea81614e0d565b9150602083013567ffffffffffffffff811115615105575f5ffd5b61511185828601614d7c565b9150509250929050565b5f6020828403121561512b575f5ffd5b813567ffffffffffffffff811115615141575f5ffd5b6113bf84828501614d7c565b60048110610ca0575f5ffd5b5f5f6040838503121561516a575f5ffd5b823561517581614e0d565b915060208301356151858161514d565b809150509250929050565b5f5f5f5f61022085870312156151a4575f5ffd5b6151ae8686614f95565b93506101c08501356151bf81614e0d565b92506101e08501356151d081614e0d565b91506150c3610200860161505a565b5f6101c082840312156151f0575f5ffd5b50919050565b5f6101c08284031215615207575f5ffd5b612f4d83836151df565b5f5f6101e08385031215615223575f5ffd5b61522d84846151df565b946101c0939093013593505050565b5f5f6020838503121561524d575f5ffd5b823567ffffffffffffffff811115615263575f5ffd5b8301601f81018513615273575f5ffd5b803567ffffffffffffffff811115615289575f5ffd5b8560206101c08302840101111561529e575f5ffd5b6020919091019590945092505050565b8015158114610ca0575f5ffd5b5f5f604083850312156152cc575f5ffd5b82356152d781614e0d565b91506020830135615185816152ae565b5f5f5f5f608085870312156152fa575f5ffd5b843561530581614e0d565b9350602085013561531581614e0d565b925060408501359150606085013567ffffffffffffffff811115615337575f5ffd5b61534387828801614d7c565b91505092959194509250565b5f5f60408385031215615360575f5ffd5b823561536b81614e0d565b91506153796020840161505a565b90509250929050565b5f5f60408385031215615393575f5ffd5b823561539e81614e0d565b9150602083013561518581614e0d565b5f5f6101e083850312156153c0575f5ffd5b6153ca84846151df565b91506101c0830135615185816152ae565b600181811c908216806153ef57607f821691505b6020821081036151f057634e487b7160e01b5f52602260045260245ffd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215615502575f5ffd5b8151612f4d81614e0d565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516155976101608401826001600160a01b03169052565b506101808101516155b261018084018264ffffffffff169052565b506101a0810151610b906101a084018264ffffffffff169052565b61038081016155dc828561550d565b612f4d6101c083018461550d565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610857576108576155ea565b6101c08101610857828461550d565b5f60208284031215615630575f5ffd5b5051919050565b601f821115610b9057805f5260205f20601f840160051c8101602085101561565c5750805b601f840160051c820191505b8181101561567b575f8155600101615668565b5050505050565b815167ffffffffffffffff81111561569c5761569c614d3e565b6156b0816156aa84546153db565b84615637565b6020601f8211600181146156e2575f83156156cb5750848201515b5f19600385901b1c1916600184901b17845561567b565b5f84815260208120601f198516915b8281101561571157878501518255602094850194600190920191016156f1565b508482101561572e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6040810161574a84614f47565b83825261575683614f47565b8260208301529392505050565b5f60208284031215615773575f5ffd5b612f4d82614f81565b5f6101c0828403121561578d575f5ffd5b612f4d8383614f95565b6001600160e01b031991909116815260200190565b5f602082840312156157bc575f5ffd5b8151612f4d816152ae565b6001600160a01b03831681526040810161575683614f47565b604081016157ed84614f47565b9281526020015290565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610857576108576155ea565b5f81518060208401855e5f93019283525090919050565b5f6113bf615843838661581e565b8461581e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f6020828403121561593b575f5ffd5b8151612f4d81614cce565b6001600160a01b03841681526102008101615964602083018561550d565b826101e0830152949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614b5f90830184614cfe565b5f612f4d828461581e56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220d6cb40992d23095d3d3c714ec2b0301a9ae70612430d01e99e577e3312e2f9c764736f6c634300081c0033",
|
|
1759
|
-
"deployedBytecode": "0x608060405260043610610254575f3560e01c80636769a76f1161013f57806395d89b41116100b3578063e5a6b10f11610078578063e5a6b10f1461073b578063e985e9c51461076d578063f0f44260146107b5578063f3fef3a3146107d4578063f67b2bad146107f3578063ffa600e314610813575f5ffd5b806395d89b41146106ab578063a22cb465146106bf578063b88d4fde146106de578063c016f88a146106fd578063c87b56dd1461071c575f5ffd5b806371907f171161010457806371907f17146105cd578063792da09e146105ff5780637a702b3c1461062b57806382afd23b1461064a5780638456cb59146106785780638c916d461461068c575f5ffd5b80636769a76f146105325780636af6f1ef146105515780636b8734e7146105705780636f86c8971461058f57806370a08231146105ae575f5ffd5b80633f4ba83a116101d657806352d1902d1161019b57806352d1902d1461048c57806355f804b3146104a05780635c975abb146104bf5780635fcbf445146104d657806361d027b3146104f55780636352211e14610513575f5ffd5b80633f4ba83a146103f457806342842e0e1461040857806347e7ef24146104275780634a47a3e0146104465780634f1ef28614610479575f5ffd5b806323b872dd1161021c57806323b872dd1461032457806324ea54f41461034357806333d6157a146103715780633659cfe6146103b65780633ed7c1ae146103d5575f5ffd5b806301ffc9a71461025857806306fdde031461028c578063077f224a146102ad578063081812fc146102ce578063095ea7b314610305575b5f5ffd5b348015610263575f5ffd5b50610277610272366004614ce3565b610832565b60405190151581526020015b60405180910390f35b348015610297575f5ffd5b506102a061085d565b6040516102839190614d2c565b3480156102b8575f5ffd5b506102cc6102c7366004614e21565b6108ed565b005b3480156102d9575f5ffd5b506102ed6102e8366004614e99565b610a5c565b6040516001600160a01b039091168152602001610283565b348015610310575f5ffd5b506102cc61031f366004614eb0565b610a81565b34801561032f575f5ffd5b506102cc61033e366004614eda565b610b95565b34801561034e575f5ffd5b506103635f516020615a185f395f51905f5281565b604051908152602001610283565b34801561037c575f5ffd5b506103a961038b366004614f18565b6001600160a01b03165f90815261012e602052604090205460ff1690565b6040516102839190614f63565b3480156103c1575f5ffd5b506102cc6103d0366004614f18565b610bc6565b3480156103e0575f5ffd5b506103636103ef366004615075565b610ca3565b3480156103ff575f5ffd5b506102cc6113c7565b348015610413575f5ffd5b506102cc610422366004614eda565b611482565b348015610432575f5ffd5b506102cc610441366004614eb0565b61149c565b348015610451575f5ffd5b506103637fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102cc6104873660046150ce565b611684565b348015610497575f5ffd5b5061036361174f565b3480156104ab575f5ffd5b506102cc6104ba36600461511b565b611800565b3480156104ca575f5ffd5b5060335460ff16610277565b3480156104e1575f5ffd5b506102cc6104f0366004615159565b6118f7565b348015610500575f5ffd5b5061012d546001600160a01b03166102ed565b34801561051e575f5ffd5b506102ed61052d366004614e99565b611bd5565b34801561053d575f5ffd5b5061036361054c366004615190565b611c34565b34801561055c575f5ffd5b506102cc61056b3660046151f6565b61211a565b34801561057b575f5ffd5b506102cc61058a366004615159565b61219d565b34801561059a575f5ffd5b506102cc6105a9366004614f18565b61271f565b3480156105b9575f5ffd5b506103636105c8366004614f18565b612ccf565b3480156105d8575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b34801561060a575f5ffd5b50610363610619366004614e99565b5f90815261012f602052604090205490565b348015610636575f5ffd5b506102cc610645366004615211565b612d53565b348015610655575f5ffd5b50610277610664366004614e99565b5f90815261012f6020526040902054151590565b348015610683575f5ffd5b506102cc612d74565b348015610697575f5ffd5b506102cc6106a636600461523c565b612e14565b3480156106b6575f5ffd5b506102a0612ed5565b3480156106ca575f5ffd5b506102cc6106d93660046152bb565b612ee4565b3480156106e9575f5ffd5b506102cc6106f83660046152e7565b612eef565b348015610708575f5ffd5b5061036361071736600461534f565b612f21565b348015610727575f5ffd5b506102a0610736366004614e99565b612f54565b348015610746575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b348015610778575f5ffd5b50610277610787366004615382565b6001600160a01b039182165f9081526101006020908152604080832093909416825291909152205460ff1690565b3480156107c0575f5ffd5b506102cc6107cf366004614f18565b612fb7565b3480156107df575f5ffd5b506103636107ee366004614eb0565b613058565b3480156107fe575f5ffd5b506103635f5160206159d15f395f51905f5281565b34801561081e575f5ffd5b506102cc61082d3660046153ae565b6130ea565b5f61083c8261311b565b8061085757506001600160e01b0319821663019c676f60e31b145b92915050565b606060fb805461086c906153db565b80601f0160208091040260200160405190810160405280929190818152602001828054610898906153db565b80156108e35780601f106108ba576101008083540402835291602001916108e3565b820191905f5260205f20905b8154815290600101906020018083116108c657829003601f168201915b5050505050905090565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156109ad575f805461ff0019166101001790555b83515f036109cd57604051620beefb60e01b815260040160405180910390fd5b82515f036109ee576040516343b47bcb60e01b815260040160405180910390fd5b6109f661316a565b610a008484613192565b610a086131c2565b610a11826131f0565b8015610a56575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f610a668261321f565b505f90815260ff60205260409020546001600160a01b031690565b5f610a8b82611bd5565b9050806001600160a01b0316836001600160a01b031603610af85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610983565b336001600160a01b0382161480610b145750610b148133610787565b610b865760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610983565b610b90838361327d565b505050565b610b9f33826132ea565b610bbb5760405162461bcd60e51b81526004016109839061540d565b610b90838383613367565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c0e5760405162461bcd60e51b81526004016109839061545a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c565f5160206159b15f395f51905f52546001600160a01b031690565b6001600160a01b031614610c7c5760405162461bcd60e51b8152600401610983906154a6565b610c85816134d6565b604080515f80825260208201909252610ca0918391906136eb565b50565b5f610cac613855565b610cb58561389b565b6101608501516001600160a01b0381163314610ce457604051634ace04f960e01b815260040160405180910390fd5b610cef816002613901565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5091906154f2565b9050610d5d816003613901565b4264ffffffffff16876101a0015164ffffffffff1611610db75760405162461bcd60e51b815260206004820152601560248201527413db19081c1bdb1a58de481a5cc8195e1c1a5c9959605a1b6044820152606401610983565b85610180015164ffffffffff1687610180015164ffffffffff1614610e355760405162461bcd60e51b815260206004820152602e60248201527f426f746820706f6c6963696573206d7573742068617665207468652073616d6560448201526d207374617274696e67206461746560901b6064820152608401610983565b8560200151876020015111158015610e5557508560c001518760c0015111155b8015610e6957508560e001518760e0015111155b8015610e7f575085610120015187610120015111155b8015610e95575085610140015187610140015111155b8015610ea957508560600151876060015111155b8015610ebd57508560800151876080015111155b8015610ed3575085610100015187610100015111155b8015610ef75750856101a0015164ffffffffff16876101a0015164ffffffffff1611155b8015610f1957508561016001516001600160a01b0316826001600160a01b0316145b610f815760405162461bcd60e51b815260206004820152603360248201527f4e657720706f6c696379206d7573742062652067726561746572206f7220657160448201527275616c207468616e206f6c6420706f6c69637960681b6064820152608401610983565b610f8b8285612f21565b8087525f90815261012f602052604090205415610fe25760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b610feb8661393c565b86515f90815261012f6020526040812091909155875161100a90611bd5565b905061102881885f015160405180602001604052805f8152506139ba565b87515f90815261012f602052604080822091909155516355c1da5f60e11b81526001600160a01b0383169063ab83b4be90611069908b908b906004016155cd565b5f604051808303815f87803b158015611080575f5ffd5b505af1158015611092573d5f5f3e3d5ffd5b505050505f8860c001518860c001516110ab91906155fe565b905080156110e8576110e86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168885846139ec565b8861014001518861014001516110fe91906155fe565b9050801561119c5761119c87846001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116a91906154f2565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190846139ec565b8861012001518861012001516111b291906155fe565b905080156111fa576111fa87846001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b8860e001518860e0015161120e91906155fe565b905080156112535761012d54611253906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116918a9116846139ec565b88610100015188610100015161126991906155fe565b90505f811180156112eb5750836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d591906154f2565b6001600160a01b0316876001600160a01b031614155b156113305761133087856001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b836001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b896040516113699190615611565b60405180910390a2875189516040516001600160a01b038716907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4885188516113b69190613a46565b50508551925050505b949350505050565b5f516020615a185f395f51905f525f5160206159d15f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611460575f5ffd5b505afa158015611472573d5f5f3e3d5ffd5b5050505061147e613b41565b5050565b610b9083838360405180602001604052805f815250612eef565b6114a4613855565b6114af826001613901565b6040516370a0823160e01b81526001600160a01b0383811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611517573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153b9190615620565b90506115727f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163385856139ec565b6001600160a01b0383166347e7ef24336040516370a0823160e01b81526001600160a01b03878116600483015285917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156115ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e9190615620565b61161891906155fe565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611660573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190615620565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116cc5760405162461bcd60e51b81526004016109839061545a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166117145f5160206159b15f395f51905f52546001600160a01b031690565b6001600160a01b03161461173a5760405162461bcd60e51b8152600401610983906154a6565b611743826134d6565b61147e828260016136eb565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ee5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610983565b505f5160206159b15f395f51905f5290565b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611895575f5ffd5b505afa1580156118a7573d5f5f3e3d5ffd5b505050508161013090816118bb9190615682565b506040513381526004907fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f906020015b60405180910390a25050565b5f516020615a185f395f51905f525f5160206159d15f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611990575f5ffd5b505afa1580156119a2573d5f5f3e3d5ffd5b5050506001600160a01b0385165f90815261012e602052604081209150815460ff1660038111156119d5576119d5614f33565b036119f357604051637d91856360e01b815260040160405180910390fd5b6001846003811115611a0757611a07614f33565b1480611a2457506002846003811115611a2257611a22614f33565b145b15611ac5576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159d15f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611aaa575f5ffd5b505afa158015611abc573d5f5f3e3d5ffd5b50505050611b5d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f516020615a185f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611b46575f5ffd5b505afa158015611b58573d5f5f3e3d5ffd5b505050505b80548490829060ff19166001836003811115611b7b57611b7b614f33565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91611bc691610100900460ff1690889061573d565b60405180910390a25050505050565b5f81815260fd60205260408120546001600160a01b0316806108575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f611c3d613855565b6101608501516001600160a01b0381163314611c6c57604051634ace04f960e01b815260040160405180910390fd5b611c77816002613901565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd891906154f2565b9050611ce5816003613901565b611cef8285612f21565b8088525f90815261012f602052604090205415611d465760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b611d4f8761393c565b87515f90815261012f602090815260408083209390935589518351918201909352908152611d7e9187916139ba565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611daa908a90600401615611565b5f604051808303815f87803b158015611dc1575f5ffd5b505af1158015611dd3573d5f5f3e3d5ffd5b50505060c0880151611e1491506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690889084906139ec565b61014087015115611ebb57611ebb86826001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8391906154f2565b6101408a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906139ec565b61012087015115611f6257611f6286826001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f2a91906154f2565b6101208a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906139ec565b61012d5460e0880151611fa7916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a9291909116906139ec565b5f87610100015111801561202c5750816001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201691906154f2565b6001600160a01b0316866001600160a01b031614155b156120cd576120cd86836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612071573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209591906154f2565b6101008a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906139ec565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516121069190615611565b60405180910390a250509351949350505050565b612122613855565b426121356101c083016101a08401615763565b64ffffffffff1611156121835760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b610ca06121953683900383018361577c565b5f6001613b93565b5f5160206159d15f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b15801561221f575f5ffd5b505afa158015612231573d5f5f3e3d5ffd5b5050506001600160a01b0384165f90815261012e602052604081209150815460ff16600381111561226457612264614f33565b146122825760405163cf9a96f360e01b815260040160405180910390fd5b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ec91906154f2565b6001600160a01b03161461231357604051630fdee24360e11b815260040160405180910390fd5b600183600381111561232757612327614f33565b1480156123a357506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061236290639077062160e01b90600401615797565b602060405180830381865afa15801561237d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a191906157ac565b155b80612439575060038360038111156123bd576123bd614f33565b14801561243957506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a7906123f890630e72532960e11b90600401615797565b602060405180830381865afa158015612413573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243791906157ac565b155b806124cf5750600283600381111561245357612453614f33565b1480156124cf57506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061248e9063da40804f60e01b90600401615797565b602060405180830381865afa1580156124a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124cd91906157ac565b155b156124f157838360405163502c9a5f60e01b81526004016109839291906157c7565b8054600160ff198216811783558491839161ffff199091161761010083600381111561251f5761251f614f33565b0217905550600383600381111561253857612538614f33565b036126d5575f8490505f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125a291906154f2565b90506001600160a01b0381161561260a576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156125f3575f5ffd5b505af1158015612605573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612646573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266a91906154f2565b90506001600160a01b038116156126d2576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156126bb575f5ffd5b505af11580156126cd573d5f5f3e3d5ffd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef84600160405161271192919061573d565b60405180910390a250505050565b5f5160206159d15f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b1580156127a1575f5ffd5b505afa1580156127b3573d5f5f3e3d5ffd5b505050506001600160a01b0382165f90815261012e602052604090206002815460ff1660038111156127e7576127e7614f33565b1461280557604051635c92b23960e11b815260040160405180910390fd5b60018154610100900460ff16600381111561282257612822614f33565b0361291d57826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612863573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128879190615620565b1561291857805f0160019054906101000a900460ff16836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128fd9190615620565b604051631d0ec0ab60e01b81526004016109839291906157e0565b612c5d565b60028154610100900460ff16600381111561293a5761293a614f33565b036129f157826001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561297b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299f9190615620565b1561291857805f0160019054906101000a900460ff16836001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b60038154610100900460ff166003811115612a0e57612a0e614f33565b03612c5d575f839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a779190615620565b15612ac957815f0160019054906101000a900460ff16816001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b5f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2a91906154f2565b90506001600160a01b03811615612b92576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612b7b575f5ffd5b505af1158015612b8d573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf291906154f2565b90506001600160a01b03811615612c5a576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612c43575f5ffd5b505af1158015612c55573d5f5f3e3d5ffd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91612ca391610100900460ff16905f9061573d565b60405180910390a250506001600160a01b03165f90815261012e60205260409020805461ffff19169055565b5f6001600160a01b038216612d385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610983565b506001600160a01b03165f90815260fe602052604090205490565b612d5b613855565b61147e612d6d3684900384018461577c565b825f613b93565b5f516020615a185f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015612df6575f5ffd5b505afa158015612e08573d5f5f3e3d5ffd5b50505050610ca0613ebc565b612e1c613855565b5f5b81811015610b905742838383818110612e3957612e396157f7565b90506101c002016101a0016020810190612e539190615763565b64ffffffffff161115612ea15760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b612ecd838383818110612eb657612eb66157f7565b90506101c00201803603810190612195919061577c565b600101612e1e565b606060fc805461086c906153db565b61147e338383613ef9565b612ef933836132ea565b612f155760405162461bcd60e51b81526004016109839061540d565b610a5684848484613fc7565b5f612f4d6bffffffffffffffffffffffff83166bffffffffffffffffffffffff19606086901b1661580b565b9392505050565b6060612f5f8261321f565b5f612f68613ffa565b90505f815111612f865760405180602001604052805f815250612f4d565b80612f908461400a565b604051602001612fa1929190615835565b6040516020818303038152906040529392505050565b5f5160206159d15f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015613039575f5ffd5b505afa15801561304b573d5f5f3e3d5ffd5b5050505061147e8261409a565b5f613061613855565b61306c836001614123565b6001600160a01b03831663f3fef3a3336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af11580156130c6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4d9190615620565b6130f2613855565b61147e6131043684900384018461577c565b8261310f575f613115565b83602001355b5f613b93565b5f6001600160e01b031982166380ac58cd60e01b148061314b57506001600160e01b03198216635b5e139f60e01b145b8061085757506301ffc9a760e01b6001600160e01b0319831614610857565b5f54610100900460ff166131905760405162461bcd60e51b815260040161098390615849565b565b5f54610100900460ff166131b85760405162461bcd60e51b815260040161098390615849565b61147e8282614182565b5f54610100900460ff166131e85760405162461bcd60e51b815260040161098390615849565b6131906141c1565b5f54610100900460ff166132165760405162461bcd60e51b815260040161098390615849565b610ca08161409a565b5f81815260fd60205260409020546001600160a01b0316610ca05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f81815260ff6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132b182611bd5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f6132f583611bd5565b9050806001600160a01b0316846001600160a01b0316148061333c57506001600160a01b038082165f908152610100602090815260408083209388168352929052205460ff165b806113bf5750836001600160a01b031661335584610a5c565b6001600160a01b031614949350505050565b826001600160a01b031661337a82611bd5565b6001600160a01b0316146133a05760405162461bcd60e51b815260040161098390615894565b6001600160a01b0382166134025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610983565b61340f83838360016141f3565b826001600160a01b031661342282611bd5565b6001600160a01b0316146134485760405162461bcd60e51b815260040161098390615894565b5f81815260ff6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260fe855283862080545f190190559087168086528386208054600101905586865260fd90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020615a185f395f51905f525f5160206159d15f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b15801561356f575f5ffd5b505afa158015613581573d5f5f3e3d5ffd5b505050505f8390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ef573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061361391906154f2565b6001600160a01b03161461363a57604051630f13081760e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136c491906154f2565b6001600160a01b031614610a56576040516324a41b4360e11b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561371e57610b9083614200565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613778575060408051601f3d908101601f1916820190925261377591810190615620565b60015b6137db5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610983565b5f5160206159b15f395f51905f5281146138495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610983565b50610b9083838361429b565b60335460ff16156131905760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610983565b8051158015906138c2575080515f90815261012f60205260409020546138c08261393c565b145b610ca05760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610983565b600161390d83836142bf565b600381111561391e5761391e614f33565b1461147e57604051630422f25f60e01b815260040160405180910390fd5b5f8160405160200161394e9190615611565b60408051601f1981840301815291905280516020909101209050806139b55760405162461bcd60e51b815260206004820152601860248201527f506f6c6963793a20686173682063616e6e6f74206265203000000000000000006044820152606401610983565b919050565b6139c48383614331565b6139d05f8484846144c6565b610b905760405162461bcd60e51b8152600401610983906158d9565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a569085906145c0565b5f613a5083611bd5565b90506001600160a01b0381163b613a6657505050565b613a7781635ee0c7dd60e01b614693565b613a8057505050565b5f6001600160a01b038216635ee0c7dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af1158015613ae8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b0c919061592b565b90506001600160e01b03198116635ee0c7dd60e01b14610a5657806040516381784a5160e01b81526004016109839190615797565b613b496146ae565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b613b9c8361389b565b61016083015181158015613bb957506001600160a01b0381163314155b15613bd757604051634ace04f960e01b815260040160405180910390fd5b821580613bef575042846101a0015164ffffffffff16115b613c3b5760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610983565b613c46816002614123565b8360200151831115613c935760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610983565b5f5f841190505f826001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cfa91906154f2565b9050613d07816003614123565b85515f90815261012f60205260408120558115613d91575f613d2b875f0151611bd5565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee790613d5e9084908b908b90600401615946565b5f604051808303815f87803b158015613d75575f5ffd5b505af1158015613d87573d5f5f3e3d5ffd5b5050505050613deb565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d90613dbd908990600401615611565b5f604051808303815f87803b158015613dd4575f5ffd5b505af1158015613de6573d5f5f3e3d5ffd5b505050505b6020860151604051636a448ef160e01b815260048101919091526001600160a01b03841690636a448ef1906024015f604051808303815f87803b158015613e30575f5ffd5b505af1158015613e42573d5f5f3e3d5ffd5b50505050855f01518661016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e87604051613e8a91815260200190565b60405180910390a38415613ea9578551613ea490866146f7565b613eb4565b8551613eb4906147f2565b505050505050565b613ec4613855565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613b763390565b816001600160a01b0316836001600160a01b031603613f5a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610983565b6001600160a01b038381165f8181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613fd2848484613367565b613fde848484846144c6565b610a565760405162461bcd60e51b8152600401610983906158d9565b6060610130805461086c906153db565b60605f614016836148ec565b60010190505f8167ffffffffffffffff81111561403557614035614d3e565b6040519080825280601f01601f19166020018201604052801561405f576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461406957509392505050565b6001600160a01b0381166140c1576040516307a2ee8b60e11b815260040160405180910390fd5b61012d80546001600160a01b0319166001600160a01b038316179055600161012d546040516001600160a01b0390911681527fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f9060200160405180910390a250565b5f61412e83836142bf565b9050600181600381111561414457614144614f33565b141580156141645750600281600381111561416157614161614f33565b14155b15610b905760405163d08ef1ff60e01b815260040160405180910390fd5b5f54610100900460ff166141a85760405162461bcd60e51b815260040161098390615849565b60fb6141b48382615682565b5060fc610b908282615682565b5f54610100900460ff166141e75760405162461bcd60e51b815260040161098390615849565b6033805460ff19169055565b6141fb613855565b610a56565b6001600160a01b0381163b61426d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610983565b5f5160206159b15f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6142a4836149c3565b5f825111806142b05750805b15610b9057610a568383614a02565b6001600160a01b0382165f90815261012e602052604081208260038111156142e9576142e9614f33565b8154610100900460ff16600381111561430457614304614f33565b1461432657838360405163502c9a5f60e01b81526004016109839291906157c7565b5460ff169392505050565b6001600160a01b0382166143875760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610983565b5f81815260fd60205260409020546001600160a01b0316156143eb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6143f85f838360016141f3565b5f81815260fd60205260409020546001600160a01b03161561445c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6001600160a01b0382165f81815260fe602090815260408083208054600101905584835260fd90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6001600160a01b0384163b156145b857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614509903390899088908890600401615973565b6020604051808303815f875af1925050508015614543575060408051601f3d908101601f191682019092526145409181019061592b565b60015b61459e573d808015614570576040519150601f19603f3d011682016040523d82523d5f602084013e614575565b606091505b5080515f036145965760405162461bcd60e51b8152600401610983906158d9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113bf565b5060016113bf565b5f614614826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614a279092919063ffffffff16565b905080515f148061463457508080602001905181019061463491906157ac565b610b905760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610983565b5f61469d83614a35565b8015612f4d5750612f4d8383614a67565b60335460ff166131905760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610983565b5f61470183611bd5565b90506001600160a01b0381163b61471757505050565b61472881633ece0a8960e01b614693565b61473157505050565b5f6001600160a01b03821663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af1158015614799573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147bd919061592b565b90506001600160e01b03198116636b140e9f60e11b14610a5657806040516381784a5160e01b81526004016109839190615797565b5f6147fc82611bd5565b90506001600160a01b0381163b614811575050565b61482281633ece0a8960e01b614693565b61482a575050565b6001600160a01b03811663e8e617b7620249f0336040516001600160e01b031960e085901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303815f8887f1935050505080156148ad575060408051601f3d908101601f191682019092526148aa9181019061592b565b60015b610b90576040516001600160a01b038216815282907f6ce8016f81523f240956bca9a698e643d09e84e7d0e931470b1016baf1027bd0906020016118eb565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061492a5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614956576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061497457662386f26fc10000830492506010015b6305f5e100831061498c576305f5e100830492506008015b61271083106149a057612710830492506004015b606483106149b2576064830492506002015b600a83106108575760010192915050565b6149cc81614200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060612f4d83836040518060600160405280602781526020016159f160279139614af5565b60606113bf84845f85614b69565b5f614a47826301ffc9a760e01b614a67565b80156108575750614a60826001600160e01b0319614a67565b1592915050565b5f5f6301ffc9a760e01b83604051602401614a829190615797565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f5f5f60205f8551602087018a617530fa92503d91505f519050828015614adf575060208210155b8015614aea57505f81115b979650505050505050565b60605f5f856001600160a01b031685604051614b1191906159a5565b5f60405180830381855af49150503d805f8114614b49576040519150601f19603f3d011682016040523d82523d5f602084013e614b4e565b606091505b5091509150614b5f86838387614c31565b9695505050505050565b606082471015614bca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610983565b5f5f866001600160a01b03168587604051614be591906159a5565b5f6040518083038185875af1925050503d805f8114614c1f576040519150601f19603f3d011682016040523d82523d5f602084013e614c24565b606091505b5091509150614aea878383875b60608315614c9f5782515f03614c98576001600160a01b0385163b614c985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610983565b50816113bf565b6113bf8383815115614cb45781518083602001fd5b8060405162461bcd60e51b81526004016109839190614d2c565b6001600160e01b031981168114610ca0575f5ffd5b5f60208284031215614cf3575f5ffd5b8135612f4d81614cce565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612f4d6020830184614cfe565b634e487b7160e01b5f52604160045260245ffd5b6040516101c0810167ffffffffffffffff81118282101715614d7657614d76614d3e565b60405290565b5f82601f830112614d8b575f5ffd5b8135602083015f5f67ffffffffffffffff841115614dab57614dab614d3e565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715614dda57614dda614d3e565b604052838152905080828401871015614df1575f5ffd5b838360208301375f602085830101528094505050505092915050565b6001600160a01b0381168114610ca0575f5ffd5b5f5f5f60608486031215614e33575f5ffd5b833567ffffffffffffffff811115614e49575f5ffd5b614e5586828701614d7c565b935050602084013567ffffffffffffffff811115614e71575f5ffd5b614e7d86828701614d7c565b9250506040840135614e8e81614e0d565b809150509250925092565b5f60208284031215614ea9575f5ffd5b5035919050565b5f5f60408385031215614ec1575f5ffd5b8235614ecc81614e0d565b946020939093013593505050565b5f5f5f60608486031215614eec575f5ffd5b8335614ef781614e0d565b92506020840135614f0781614e0d565b929592945050506040919091013590565b5f60208284031215614f28575f5ffd5b8135612f4d81614e0d565b634e487b7160e01b5f52602160045260245ffd5b60048110610ca057634e487b7160e01b5f52602160045260245ffd5b60208101614f7083614f47565b91905290565b80356139b581614e0d565b803564ffffffffff811681146139b5575f5ffd5b5f6101c08284031215614fa6575f5ffd5b614fae614d52565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e0808401359082015261010080840135908201526101208084013590820152610140808401359082015290506150286101608301614f76565b61016082015261503b6101808301614f81565b61018082015261504e6101a08301614f81565b6101a082015292915050565b80356bffffffffffffffffffffffff811681146139b5575f5ffd5b5f5f5f5f6103c08587031215615089575f5ffd5b6150938686614f95565b93506150a3866101c08701614f95565b92506103808501356150b481614e0d565b91506150c36103a0860161505a565b905092959194509250565b5f5f604083850312156150df575f5ffd5b82356150ea81614e0d565b9150602083013567ffffffffffffffff811115615105575f5ffd5b61511185828601614d7c565b9150509250929050565b5f6020828403121561512b575f5ffd5b813567ffffffffffffffff811115615141575f5ffd5b6113bf84828501614d7c565b60048110610ca0575f5ffd5b5f5f6040838503121561516a575f5ffd5b823561517581614e0d565b915060208301356151858161514d565b809150509250929050565b5f5f5f5f61022085870312156151a4575f5ffd5b6151ae8686614f95565b93506101c08501356151bf81614e0d565b92506101e08501356151d081614e0d565b91506150c3610200860161505a565b5f6101c082840312156151f0575f5ffd5b50919050565b5f6101c08284031215615207575f5ffd5b612f4d83836151df565b5f5f6101e08385031215615223575f5ffd5b61522d84846151df565b946101c0939093013593505050565b5f5f6020838503121561524d575f5ffd5b823567ffffffffffffffff811115615263575f5ffd5b8301601f81018513615273575f5ffd5b803567ffffffffffffffff811115615289575f5ffd5b8560206101c08302840101111561529e575f5ffd5b6020919091019590945092505050565b8015158114610ca0575f5ffd5b5f5f604083850312156152cc575f5ffd5b82356152d781614e0d565b91506020830135615185816152ae565b5f5f5f5f608085870312156152fa575f5ffd5b843561530581614e0d565b9350602085013561531581614e0d565b925060408501359150606085013567ffffffffffffffff811115615337575f5ffd5b61534387828801614d7c565b91505092959194509250565b5f5f60408385031215615360575f5ffd5b823561536b81614e0d565b91506153796020840161505a565b90509250929050565b5f5f60408385031215615393575f5ffd5b823561539e81614e0d565b9150602083013561518581614e0d565b5f5f6101e083850312156153c0575f5ffd5b6153ca84846151df565b91506101c0830135615185816152ae565b600181811c908216806153ef57607f821691505b6020821081036151f057634e487b7160e01b5f52602260045260245ffd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215615502575f5ffd5b8151612f4d81614e0d565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516155976101608401826001600160a01b03169052565b506101808101516155b261018084018264ffffffffff169052565b506101a0810151610b906101a084018264ffffffffff169052565b61038081016155dc828561550d565b612f4d6101c083018461550d565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610857576108576155ea565b6101c08101610857828461550d565b5f60208284031215615630575f5ffd5b5051919050565b601f821115610b9057805f5260205f20601f840160051c8101602085101561565c5750805b601f840160051c820191505b8181101561567b575f8155600101615668565b5050505050565b815167ffffffffffffffff81111561569c5761569c614d3e565b6156b0816156aa84546153db565b84615637565b6020601f8211600181146156e2575f83156156cb5750848201515b5f19600385901b1c1916600184901b17845561567b565b5f84815260208120601f198516915b8281101561571157878501518255602094850194600190920191016156f1565b508482101561572e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6040810161574a84614f47565b83825261575683614f47565b8260208301529392505050565b5f60208284031215615773575f5ffd5b612f4d82614f81565b5f6101c0828403121561578d575f5ffd5b612f4d8383614f95565b6001600160e01b031991909116815260200190565b5f602082840312156157bc575f5ffd5b8151612f4d816152ae565b6001600160a01b03831681526040810161575683614f47565b604081016157ed84614f47565b9281526020015290565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610857576108576155ea565b5f81518060208401855e5f93019283525090919050565b5f6113bf615843838661581e565b8461581e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f6020828403121561593b575f5ffd5b8151612f4d81614cce565b6001600160a01b03841681526102008101615964602083018561550d565b826101e0830152949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614b5f90830184614cfe565b5f612f4d828461581e56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220d6cb40992d23095d3d3c714ec2b0301a9ae70612430d01e99e577e3312e2f9c764736f6c634300081c0033",
|
|
1753
|
+
"bytecode": "0x60e060405230608052348015610013575f5ffd5b50604051615c46380380615c4683398101604081905261003291610172565b6001600160a01b0382166100595760405163a9f283c960e01b815260040160405180910390fd5b6001600160a01b0381166100805760405163559a03cd60e01b815260040160405180910390fd5b61008861009f565b6001600160a01b0391821660a0521660c0526101aa565b5f54610100900460ff161561010a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610159575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461016f575f5ffd5b50565b5f5f60408385031215610183575f5ffd5b825161018e8161015b565b602084015190925061019f8161015b565b809150509250929050565b60805160a05160c0516159bc61028a5f395f8181610749015281816110c00152818161117401528181611228015281816114d001528181611542015281816115a301528181611dea01528181611e9301528181611f3a01528181611f7901526120a501525f81816105db015281816113ed0152818161182b0152818161191d01528181611a3301528181611acf015281816121b50152818161273701528181612d8c01528181612fcf015281816134fc015261358b01525f8181610bd001528181610c100152818161168e015281816116ce015261175b01526159bc5ff3fe608060405260043610610254575f3560e01c80636769a76f1161013f57806395d89b41116100b3578063e5a6b10f11610078578063e5a6b10f1461073b578063e985e9c51461076d578063f0f44260146107b5578063f3fef3a3146107d4578063f67b2bad146107f3578063ffa600e314610813575f5ffd5b806395d89b41146106ab578063a22cb465146106bf578063b88d4fde146106de578063c016f88a146106fd578063c87b56dd1461071c575f5ffd5b806371907f171161010457806371907f17146105cd578063792da09e146105ff5780637a702b3c1461062b57806382afd23b1461064a5780638456cb59146106785780638c916d461461068c575f5ffd5b80636769a76f146105325780636af6f1ef146105515780636b8734e7146105705780636f86c8971461058f57806370a08231146105ae575f5ffd5b80633f4ba83a116101d657806352d1902d1161019b57806352d1902d1461048c57806355f804b3146104a05780635c975abb146104bf5780635fcbf445146104d657806361d027b3146104f55780636352211e14610513575f5ffd5b80633f4ba83a146103f457806342842e0e1461040857806347e7ef24146104275780634a47a3e0146104465780634f1ef28614610479575f5ffd5b806323b872dd1161021c57806323b872dd1461032457806324ea54f41461034357806333d6157a146103715780633659cfe6146103b65780633ed7c1ae146103d5575f5ffd5b806301ffc9a71461025857806306fdde031461028c578063077f224a146102ad578063081812fc146102ce578063095ea7b314610305575b5f5ffd5b348015610263575f5ffd5b50610277610272366004614c32565b610832565b60405190151581526020015b60405180910390f35b348015610297575f5ffd5b506102a061085d565b6040516102839190614c7b565b3480156102b8575f5ffd5b506102cc6102c7366004614d70565b6108ed565b005b3480156102d9575f5ffd5b506102ed6102e8366004614de8565b610a5c565b6040516001600160a01b039091168152602001610283565b348015610310575f5ffd5b506102cc61031f366004614dff565b610a81565b34801561032f575f5ffd5b506102cc61033e366004614e29565b610b95565b34801561034e575f5ffd5b506103635f5160206159675f395f51905f5281565b604051908152602001610283565b34801561037c575f5ffd5b506103a961038b366004614e67565b6001600160a01b03165f90815261012e602052604090205460ff1690565b6040516102839190614eb2565b3480156103c1575f5ffd5b506102cc6103d0366004614e67565b610bc6565b3480156103e0575f5ffd5b506103636103ef366004614fc4565b610ca3565b3480156103ff575f5ffd5b506102cc6113c7565b348015610413575f5ffd5b506102cc610422366004614e29565b611482565b348015610432575f5ffd5b506102cc610441366004614dff565b61149c565b348015610451575f5ffd5b506103637fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102cc61048736600461501d565b611684565b348015610497575f5ffd5b5061036361174f565b3480156104ab575f5ffd5b506102cc6104ba36600461506a565b611800565b3480156104ca575f5ffd5b5060335460ff16610277565b3480156104e1575f5ffd5b506102cc6104f03660046150a8565b6118f7565b348015610500575f5ffd5b5061012d546001600160a01b03166102ed565b34801561051e575f5ffd5b506102ed61052d366004614de8565b611bd5565b34801561053d575f5ffd5b5061036361054c3660046150df565b611c34565b34801561055c575f5ffd5b506102cc61056b366004615145565b61211a565b34801561057b575f5ffd5b506102cc61058a3660046150a8565b61219d565b34801561059a575f5ffd5b506102cc6105a9366004614e67565b61271f565b3480156105b9575f5ffd5b506103636105c8366004614e67565b612ccf565b3480156105d8575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b34801561060a575f5ffd5b50610363610619366004614de8565b5f90815261012f602052604090205490565b348015610636575f5ffd5b506102cc610645366004615160565b612d53565b348015610655575f5ffd5b50610277610664366004614de8565b5f90815261012f6020526040902054151590565b348015610683575f5ffd5b506102cc612d74565b348015610697575f5ffd5b506102cc6106a636600461518b565b612e14565b3480156106b6575f5ffd5b506102a0612ed5565b3480156106ca575f5ffd5b506102cc6106d936600461520a565b612ee4565b3480156106e9575f5ffd5b506102cc6106f8366004615236565b612eef565b348015610708575f5ffd5b5061036361071736600461529e565b612f21565b348015610727575f5ffd5b506102a0610736366004614de8565b612f54565b348015610746575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b348015610778575f5ffd5b506102776107873660046152d1565b6001600160a01b039182165f9081526101006020908152604080832093909416825291909152205460ff1690565b3480156107c0575f5ffd5b506102cc6107cf366004614e67565b612fb7565b3480156107df575f5ffd5b506103636107ee366004614dff565b613058565b3480156107fe575f5ffd5b506103635f5160206159205f395f51905f5281565b34801561081e575f5ffd5b506102cc61082d3660046152fd565b6130ea565b5f61083c8261311b565b8061085757506001600160e01b0319821663019c676f60e31b145b92915050565b606060fb805461086c9061532a565b80601f01602080910402602001604051908101604052809291908181526020018280546108989061532a565b80156108e35780601f106108ba576101008083540402835291602001916108e3565b820191905f5260205f20905b8154815290600101906020018083116108c657829003601f168201915b5050505050905090565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156109ad575f805461ff0019166101001790555b83515f036109cd57604051620beefb60e01b815260040160405180910390fd5b82515f036109ee576040516343b47bcb60e01b815260040160405180910390fd5b6109f661316a565b610a008484613192565b610a086131c2565b610a11826131f0565b8015610a56575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f610a668261321f565b505f90815260ff60205260409020546001600160a01b031690565b5f610a8b82611bd5565b9050806001600160a01b0316836001600160a01b031603610af85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610983565b336001600160a01b0382161480610b145750610b148133610787565b610b865760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610983565b610b90838361327d565b505050565b610b9f33826132ea565b610bbb5760405162461bcd60e51b81526004016109839061535c565b610b90838383613367565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c0e5760405162461bcd60e51b8152600401610983906153a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c565f5160206159005f395f51905f52546001600160a01b031690565b6001600160a01b031614610c7c5760405162461bcd60e51b8152600401610983906153f5565b610c85816134d6565b604080515f80825260208201909252610ca09183919061363a565b50565b5f610cac6137a4565b610cb5856137ea565b6101608501516001600160a01b0381163314610ce457604051634ace04f960e01b815260040160405180910390fd5b610cef816002613850565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190615441565b9050610d5d816003613850565b4264ffffffffff16876101a0015164ffffffffff1611610db75760405162461bcd60e51b815260206004820152601560248201527413db19081c1bdb1a58de481a5cc8195e1c1a5c9959605a1b6044820152606401610983565b85610180015164ffffffffff1687610180015164ffffffffff1614610e355760405162461bcd60e51b815260206004820152602e60248201527f426f746820706f6c6963696573206d7573742068617665207468652073616d6560448201526d207374617274696e67206461746560901b6064820152608401610983565b8560200151876020015111158015610e5557508560c001518760c0015111155b8015610e6957508560e001518760e0015111155b8015610e7f575085610120015187610120015111155b8015610e95575085610140015187610140015111155b8015610ea957508560600151876060015111155b8015610ebd57508560800151876080015111155b8015610ed3575085610100015187610100015111155b8015610ef75750856101a0015164ffffffffff16876101a0015164ffffffffff1611155b8015610f1957508561016001516001600160a01b0316826001600160a01b0316145b610f815760405162461bcd60e51b815260206004820152603360248201527f4e657720706f6c696379206d7573742062652067726561746572206f7220657160448201527275616c207468616e206f6c6420706f6c69637960681b6064820152608401610983565b610f8b8285612f21565b8087525f90815261012f602052604090205415610fe25760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b610feb8661388b565b86515f90815261012f6020526040812091909155875161100a90611bd5565b905061102881885f015160405180602001604052805f815250613909565b87515f90815261012f602052604080822091909155516355c1da5f60e11b81526001600160a01b0383169063ab83b4be90611069908b908b9060040161551c565b5f604051808303815f87803b158015611080575f5ffd5b505af1158015611092573d5f5f3e3d5ffd5b505050505f8860c001518860c001516110ab919061554d565b905080156110e8576110e86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001688858461393b565b8861014001518861014001516110fe919061554d565b9050801561119c5761119c87846001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116a9190615441565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691908461393b565b8861012001518861012001516111b2919061554d565b905080156111fa576111fa87846001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b8860e001518860e0015161120e919061554d565b905080156112535761012d54611253906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116918a91168461393b565b886101000151886101000151611269919061554d565b90505f811180156112eb5750836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d59190615441565b6001600160a01b0316876001600160a01b031614155b156113305761133087856001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b836001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b896040516113699190615560565b60405180910390a2875189516040516001600160a01b038716907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4885188516113b69190613995565b50508551925050505b949350505050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611460575f5ffd5b505afa158015611472573d5f5f3e3d5ffd5b5050505061147e613a90565b5050565b610b9083838360405180602001604052805f815250612eef565b6114a46137a4565b6114af826001613850565b6040516370a0823160e01b81526001600160a01b0383811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611517573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153b919061556f565b90506115727f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633858561393b565b6001600160a01b0383166347e7ef24336040516370a0823160e01b81526001600160a01b03878116600483015285917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156115ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e919061556f565b611618919061554d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611660573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a56919061556f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116cc5760405162461bcd60e51b8152600401610983906153a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166117145f5160206159005f395f51905f52546001600160a01b031690565b6001600160a01b03161461173a5760405162461bcd60e51b8152600401610983906153f5565b611743826134d6565b61147e8282600161363a565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ee5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610983565b505f5160206159005f395f51905f5290565b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611895575f5ffd5b505afa1580156118a7573d5f5f3e3d5ffd5b505050508161013090816118bb91906155d1565b506040513381526004907fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f906020015b60405180910390a25050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611990575f5ffd5b505afa1580156119a2573d5f5f3e3d5ffd5b5050506001600160a01b0385165f90815261012e602052604081209150815460ff1660038111156119d5576119d5614e82565b036119f357604051637d91856360e01b815260040160405180910390fd5b6001846003811115611a0757611a07614e82565b1480611a2457506002846003811115611a2257611a22614e82565b145b15611ac5576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159205f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611aaa575f5ffd5b505afa158015611abc573d5f5f3e3d5ffd5b50505050611b5d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159675f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611b46575f5ffd5b505afa158015611b58573d5f5f3e3d5ffd5b505050505b80548490829060ff19166001836003811115611b7b57611b7b614e82565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91611bc691610100900460ff1690889061568c565b60405180910390a25050505050565b5f81815260fd60205260408120546001600160a01b0316806108575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f611c3d6137a4565b6101608501516001600160a01b0381163314611c6c57604051634ace04f960e01b815260040160405180910390fd5b611c77816002613850565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd89190615441565b9050611ce5816003613850565b611cef8285612f21565b8088525f90815261012f602052604090205415611d465760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b611d4f8761388b565b87515f90815261012f602090815260408083209390935589518351918201909352908152611d7e918791613909565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611daa908a90600401615560565b5f604051808303815f87803b158015611dc1575f5ffd5b505af1158015611dd3573d5f5f3e3d5ffd5b50505060c0880151611e1491506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908890849061393b565b61014087015115611ebb57611ebb86826001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e839190615441565b6101408a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b61012087015115611f6257611f6286826001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f2a9190615441565b6101208a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b61012d5460e0880151611fa7916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a92919091169061393b565b5f87610100015111801561202c5750816001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120169190615441565b6001600160a01b0316866001600160a01b031614155b156120cd576120cd86836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612071573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120959190615441565b6101008a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516121069190615560565b60405180910390a250509351949350505050565b6121226137a4565b426121356101c083016101a084016156b2565b64ffffffffff1611156121835760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b610ca0612195368390038301836156cb565b5f6001613ae2565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b15801561221f575f5ffd5b505afa158015612231573d5f5f3e3d5ffd5b5050506001600160a01b0384165f90815261012e602052604081209150815460ff16600381111561226457612264614e82565b146122825760405163cf9a96f360e01b815260040160405180910390fd5b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ec9190615441565b6001600160a01b03161461231357604051630fdee24360e11b815260040160405180910390fd5b600183600381111561232757612327614e82565b1480156123a357506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061236290639077062160e01b906004016156e6565b602060405180830381865afa15801561237d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a191906156fb565b155b80612439575060038360038111156123bd576123bd614e82565b14801561243957506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a7906123f890630e72532960e11b906004016156e6565b602060405180830381865afa158015612413573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243791906156fb565b155b806124cf5750600283600381111561245357612453614e82565b1480156124cf57506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061248e9063da40804f60e01b906004016156e6565b602060405180830381865afa1580156124a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124cd91906156fb565b155b156124f157838360405163502c9a5f60e01b8152600401610983929190615716565b8054600160ff198216811783558491839161ffff199091161761010083600381111561251f5761251f614e82565b0217905550600383600381111561253857612538614e82565b036126d5575f8490505f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125a29190615441565b90506001600160a01b0381161561260a576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156125f3575f5ffd5b505af1158015612605573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612646573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266a9190615441565b90506001600160a01b038116156126d2576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156126bb575f5ffd5b505af11580156126cd573d5f5f3e3d5ffd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef84600160405161271192919061568c565b60405180910390a250505050565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b1580156127a1575f5ffd5b505afa1580156127b3573d5f5f3e3d5ffd5b505050506001600160a01b0382165f90815261012e602052604090206002815460ff1660038111156127e7576127e7614e82565b1461280557604051635c92b23960e11b815260040160405180910390fd5b60018154610100900460ff16600381111561282257612822614e82565b0361291d57826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612863573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612887919061556f565b1561291857805f0160019054906101000a900460ff16836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128fd919061556f565b604051631d0ec0ab60e01b815260040161098392919061572f565b612c5d565b60028154610100900460ff16600381111561293a5761293a614e82565b036129f157826001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561297b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299f919061556f565b1561291857805f0160019054906101000a900460ff16836001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b60038154610100900460ff166003811115612a0e57612a0e614e82565b03612c5d575f839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a77919061556f565b15612ac957815f0160019054906101000a900460ff16816001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b5f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2a9190615441565b90506001600160a01b03811615612b92576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612b7b575f5ffd5b505af1158015612b8d573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf29190615441565b90506001600160a01b03811615612c5a576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612c43575f5ffd5b505af1158015612c55573d5f5f3e3d5ffd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91612ca391610100900460ff16905f9061568c565b60405180910390a250506001600160a01b03165f90815261012e60205260409020805461ffff19169055565b5f6001600160a01b038216612d385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610983565b506001600160a01b03165f90815260fe602052604090205490565b612d5b6137a4565b61147e612d6d368490038401846156cb565b825f613ae2565b5f5160206159675f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015612df6575f5ffd5b505afa158015612e08573d5f5f3e3d5ffd5b50505050610ca0613e0b565b612e1c6137a4565b5f5b81811015610b905742838383818110612e3957612e39615746565b90506101c002016101a0016020810190612e5391906156b2565b64ffffffffff161115612ea15760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b612ecd838383818110612eb657612eb6615746565b90506101c0020180360381019061219591906156cb565b600101612e1e565b606060fc805461086c9061532a565b61147e338383613e48565b612ef933836132ea565b612f155760405162461bcd60e51b81526004016109839061535c565b610a5684848484613f16565b5f612f4d6bffffffffffffffffffffffff83166bffffffffffffffffffffffff19606086901b1661575a565b9392505050565b6060612f5f8261321f565b5f612f68613f49565b90505f815111612f865760405180602001604052805f815250612f4d565b80612f9084613f59565b604051602001612fa1929190615784565b6040516020818303038152906040529392505050565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015613039575f5ffd5b505afa15801561304b573d5f5f3e3d5ffd5b5050505061147e82613fe9565b5f6130616137a4565b61306c836001614072565b6001600160a01b03831663f3fef3a3336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af11580156130c6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4d919061556f565b6130f26137a4565b61147e613104368490038401846156cb565b8261310f575f613115565b83602001355b5f613ae2565b5f6001600160e01b031982166380ac58cd60e01b148061314b57506001600160e01b03198216635b5e139f60e01b145b8061085757506301ffc9a760e01b6001600160e01b0319831614610857565b5f54610100900460ff166131905760405162461bcd60e51b815260040161098390615798565b565b5f54610100900460ff166131b85760405162461bcd60e51b815260040161098390615798565b61147e82826140d1565b5f54610100900460ff166131e85760405162461bcd60e51b815260040161098390615798565b613190614110565b5f54610100900460ff166132165760405162461bcd60e51b815260040161098390615798565b610ca081613fe9565b5f81815260fd60205260409020546001600160a01b0316610ca05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f81815260ff6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132b182611bd5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f6132f583611bd5565b9050806001600160a01b0316846001600160a01b0316148061333c57506001600160a01b038082165f908152610100602090815260408083209388168352929052205460ff165b806113bf5750836001600160a01b031661335584610a5c565b6001600160a01b031614949350505050565b826001600160a01b031661337a82611bd5565b6001600160a01b0316146133a05760405162461bcd60e51b8152600401610983906157e3565b6001600160a01b0382166134025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610983565b61340f8383836001614142565b826001600160a01b031661342282611bd5565b6001600160a01b0316146134485760405162461bcd60e51b8152600401610983906157e3565b5f81815260ff6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260fe855283862080545f190190559087168086528386208054600101905586865260fd90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b15801561356f575f5ffd5b505afa158015613581573d5f5f3e3d5ffd5b505050505f8390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136139190615441565b6001600160a01b031614610a5657604051630f13081760e01b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561366d57610b908361414f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156136c7575060408051601f3d908101601f191682019092526136c49181019061556f565b60015b61372a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610983565b5f5160206159005f395f51905f5281146137985760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610983565b50610b908383836141ea565b60335460ff16156131905760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610983565b805115801590613811575080515f90815261012f602052604090205461380f8261388b565b145b610ca05760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610983565b600161385c838361420e565b600381111561386d5761386d614e82565b1461147e57604051630422f25f60e01b815260040160405180910390fd5b5f8160405160200161389d9190615560565b60408051601f1981840301815291905280516020909101209050806139045760405162461bcd60e51b815260206004820152601860248201527f506f6c6963793a20686173682063616e6e6f74206265203000000000000000006044820152606401610983565b919050565b6139138383614280565b61391f5f848484614415565b610b905760405162461bcd60e51b815260040161098390615828565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a5690859061450f565b5f61399f83611bd5565b90506001600160a01b0381163b6139b557505050565b6139c681635ee0c7dd60e01b6145e2565b6139cf57505050565b5f6001600160a01b038216635ee0c7dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af1158015613a37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5b919061587a565b90506001600160e01b03198116635ee0c7dd60e01b14610a5657806040516381784a5160e01b815260040161098391906156e6565b613a986145fd565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b613aeb836137ea565b61016083015181158015613b0857506001600160a01b0381163314155b15613b2657604051634ace04f960e01b815260040160405180910390fd5b821580613b3e575042846101a0015164ffffffffff16115b613b8a5760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610983565b613b95816002614072565b8360200151831115613be25760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610983565b5f5f841190505f826001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c499190615441565b9050613c56816003614072565b85515f90815261012f60205260408120558115613ce0575f613c7a875f0151611bd5565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee790613cad9084908b908b90600401615895565b5f604051808303815f87803b158015613cc4575f5ffd5b505af1158015613cd6573d5f5f3e3d5ffd5b5050505050613d3a565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d90613d0c908990600401615560565b5f604051808303815f87803b158015613d23575f5ffd5b505af1158015613d35573d5f5f3e3d5ffd5b505050505b6020860151604051636a448ef160e01b815260048101919091526001600160a01b03841690636a448ef1906024015f604051808303815f87803b158015613d7f575f5ffd5b505af1158015613d91573d5f5f3e3d5ffd5b50505050855f01518661016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e87604051613dd991815260200190565b60405180910390a38415613df8578551613df39086614646565b613e03565b8551613e0390614741565b505050505050565b613e136137a4565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ac53390565b816001600160a01b0316836001600160a01b031603613ea95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610983565b6001600160a01b038381165f8181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613f21848484613367565b613f2d84848484614415565b610a565760405162461bcd60e51b815260040161098390615828565b6060610130805461086c9061532a565b60605f613f658361483b565b60010190505f8167ffffffffffffffff811115613f8457613f84614c8d565b6040519080825280601f01601f191660200182016040528015613fae576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613fb857509392505050565b6001600160a01b038116614010576040516307a2ee8b60e11b815260040160405180910390fd5b61012d80546001600160a01b0319166001600160a01b038316179055600161012d546040516001600160a01b0390911681527fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f9060200160405180910390a250565b5f61407d838361420e565b9050600181600381111561409357614093614e82565b141580156140b3575060028160038111156140b0576140b0614e82565b14155b15610b905760405163d08ef1ff60e01b815260040160405180910390fd5b5f54610100900460ff166140f75760405162461bcd60e51b815260040161098390615798565b60fb61410383826155d1565b5060fc610b9082826155d1565b5f54610100900460ff166141365760405162461bcd60e51b815260040161098390615798565b6033805460ff19169055565b61414a6137a4565b610a56565b6001600160a01b0381163b6141bc5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610983565b5f5160206159005f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6141f383614912565b5f825111806141ff5750805b15610b9057610a568383614951565b6001600160a01b0382165f90815261012e6020526040812082600381111561423857614238614e82565b8154610100900460ff16600381111561425357614253614e82565b1461427557838360405163502c9a5f60e01b8152600401610983929190615716565b5460ff169392505050565b6001600160a01b0382166142d65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610983565b5f81815260fd60205260409020546001600160a01b03161561433a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6143475f83836001614142565b5f81815260fd60205260409020546001600160a01b0316156143ab5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6001600160a01b0382165f81815260fe602090815260408083208054600101905584835260fd90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6001600160a01b0384163b1561450757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906144589033908990889088906004016158c2565b6020604051808303815f875af1925050508015614492575060408051601f3d908101601f1916820190925261448f9181019061587a565b60015b6144ed573d8080156144bf576040519150601f19603f3d011682016040523d82523d5f602084013e6144c4565b606091505b5080515f036144e55760405162461bcd60e51b815260040161098390615828565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113bf565b5060016113bf565b5f614563826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149769092919063ffffffff16565b905080515f148061458357508080602001905181019061458391906156fb565b610b905760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610983565b5f6145ec83614984565b8015612f4d5750612f4d83836149b6565b60335460ff166131905760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610983565b5f61465083611bd5565b90506001600160a01b0381163b61466657505050565b61467781633ece0a8960e01b6145e2565b61468057505050565b5f6001600160a01b03821663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af11580156146e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061470c919061587a565b90506001600160e01b03198116636b140e9f60e11b14610a5657806040516381784a5160e01b815260040161098391906156e6565b5f61474b82611bd5565b90506001600160a01b0381163b614760575050565b61477181633ece0a8960e01b6145e2565b614779575050565b6001600160a01b03811663e8e617b7620249f0336040516001600160e01b031960e085901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303815f8887f1935050505080156147fc575060408051601f3d908101601f191682019092526147f99181019061587a565b60015b610b90576040516001600160a01b038216815282907f6ce8016f81523f240956bca9a698e643d09e84e7d0e931470b1016baf1027bd0906020016118eb565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106148795772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106148a5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106148c357662386f26fc10000830492506010015b6305f5e10083106148db576305f5e100830492506008015b61271083106148ef57612710830492506004015b60648310614901576064830492506002015b600a83106108575760010192915050565b61491b8161414f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060612f4d838360405180606001604052806027815260200161594060279139614a44565b60606113bf84845f85614ab8565b5f614996826301ffc9a760e01b6149b6565b801561085757506149af826001600160e01b03196149b6565b1592915050565b5f5f6301ffc9a760e01b836040516024016149d191906156e6565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f5f5f60205f8551602087018a617530fa92503d91505f519050828015614a2e575060208210155b8015614a3957505f81115b979650505050505050565b60605f5f856001600160a01b031685604051614a6091906158f4565b5f60405180830381855af49150503d805f8114614a98576040519150601f19603f3d011682016040523d82523d5f602084013e614a9d565b606091505b5091509150614aae86838387614b80565b9695505050505050565b606082471015614b195760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610983565b5f5f866001600160a01b03168587604051614b3491906158f4565b5f6040518083038185875af1925050503d805f8114614b6e576040519150601f19603f3d011682016040523d82523d5f602084013e614b73565b606091505b5091509150614a39878383875b60608315614bee5782515f03614be7576001600160a01b0385163b614be75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610983565b50816113bf565b6113bf8383815115614c035781518083602001fd5b8060405162461bcd60e51b81526004016109839190614c7b565b6001600160e01b031981168114610ca0575f5ffd5b5f60208284031215614c42575f5ffd5b8135612f4d81614c1d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612f4d6020830184614c4d565b634e487b7160e01b5f52604160045260245ffd5b6040516101c0810167ffffffffffffffff81118282101715614cc557614cc5614c8d565b60405290565b5f82601f830112614cda575f5ffd5b8135602083015f5f67ffffffffffffffff841115614cfa57614cfa614c8d565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715614d2957614d29614c8d565b604052838152905080828401871015614d40575f5ffd5b838360208301375f602085830101528094505050505092915050565b6001600160a01b0381168114610ca0575f5ffd5b5f5f5f60608486031215614d82575f5ffd5b833567ffffffffffffffff811115614d98575f5ffd5b614da486828701614ccb565b935050602084013567ffffffffffffffff811115614dc0575f5ffd5b614dcc86828701614ccb565b9250506040840135614ddd81614d5c565b809150509250925092565b5f60208284031215614df8575f5ffd5b5035919050565b5f5f60408385031215614e10575f5ffd5b8235614e1b81614d5c565b946020939093013593505050565b5f5f5f60608486031215614e3b575f5ffd5b8335614e4681614d5c565b92506020840135614e5681614d5c565b929592945050506040919091013590565b5f60208284031215614e77575f5ffd5b8135612f4d81614d5c565b634e487b7160e01b5f52602160045260245ffd5b60048110610ca057634e487b7160e01b5f52602160045260245ffd5b60208101614ebf83614e96565b91905290565b803561390481614d5c565b803564ffffffffff81168114613904575f5ffd5b5f6101c08284031215614ef5575f5ffd5b614efd614ca1565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e080840135908201526101008084013590820152610120808401359082015261014080840135908201529050614f776101608301614ec5565b610160820152614f8a6101808301614ed0565b610180820152614f9d6101a08301614ed0565b6101a082015292915050565b80356bffffffffffffffffffffffff81168114613904575f5ffd5b5f5f5f5f6103c08587031215614fd8575f5ffd5b614fe28686614ee4565b9350614ff2866101c08701614ee4565b925061038085013561500381614d5c565b91506150126103a08601614fa9565b905092959194509250565b5f5f6040838503121561502e575f5ffd5b823561503981614d5c565b9150602083013567ffffffffffffffff811115615054575f5ffd5b61506085828601614ccb565b9150509250929050565b5f6020828403121561507a575f5ffd5b813567ffffffffffffffff811115615090575f5ffd5b6113bf84828501614ccb565b60048110610ca0575f5ffd5b5f5f604083850312156150b9575f5ffd5b82356150c481614d5c565b915060208301356150d48161509c565b809150509250929050565b5f5f5f5f61022085870312156150f3575f5ffd5b6150fd8686614ee4565b93506101c085013561510e81614d5c565b92506101e085013561511f81614d5c565b91506150126102008601614fa9565b5f6101c0828403121561513f575f5ffd5b50919050565b5f6101c08284031215615156575f5ffd5b612f4d838361512e565b5f5f6101e08385031215615172575f5ffd5b61517c848461512e565b946101c0939093013593505050565b5f5f6020838503121561519c575f5ffd5b823567ffffffffffffffff8111156151b2575f5ffd5b8301601f810185136151c2575f5ffd5b803567ffffffffffffffff8111156151d8575f5ffd5b8560206101c0830284010111156151ed575f5ffd5b6020919091019590945092505050565b8015158114610ca0575f5ffd5b5f5f6040838503121561521b575f5ffd5b823561522681614d5c565b915060208301356150d4816151fd565b5f5f5f5f60808587031215615249575f5ffd5b843561525481614d5c565b9350602085013561526481614d5c565b925060408501359150606085013567ffffffffffffffff811115615286575f5ffd5b61529287828801614ccb565b91505092959194509250565b5f5f604083850312156152af575f5ffd5b82356152ba81614d5c565b91506152c860208401614fa9565b90509250929050565b5f5f604083850312156152e2575f5ffd5b82356152ed81614d5c565b915060208301356150d481614d5c565b5f5f6101e0838503121561530f575f5ffd5b615319848461512e565b91506101c08301356150d4816151fd565b600181811c9082168061533e57607f821691505b60208210810361513f57634e487b7160e01b5f52602260045260245ffd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215615451575f5ffd5b8151612f4d81614d5c565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516154e66101608401826001600160a01b03169052565b5061018081015161550161018084018264ffffffffff169052565b506101a0810151610b906101a084018264ffffffffff169052565b610380810161552b828561545c565b612f4d6101c083018461545c565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561085757610857615539565b6101c08101610857828461545c565b5f6020828403121561557f575f5ffd5b5051919050565b601f821115610b9057805f5260205f20601f840160051c810160208510156155ab5750805b601f840160051c820191505b818110156155ca575f81556001016155b7565b5050505050565b815167ffffffffffffffff8111156155eb576155eb614c8d565b6155ff816155f9845461532a565b84615586565b6020601f821160018114615631575f831561561a5750848201515b5f19600385901b1c1916600184901b1784556155ca565b5f84815260208120601f198516915b828110156156605787850151825560209485019460019092019101615640565b508482101561567d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6040810161569984614e96565b8382526156a583614e96565b8260208301529392505050565b5f602082840312156156c2575f5ffd5b612f4d82614ed0565b5f6101c082840312156156dc575f5ffd5b612f4d8383614ee4565b6001600160e01b031991909116815260200190565b5f6020828403121561570b575f5ffd5b8151612f4d816151fd565b6001600160a01b0383168152604081016156a583614e96565b6040810161573c84614e96565b9281526020015290565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561085757610857615539565b5f81518060208401855e5f93019283525090919050565b5f6113bf615792838661576d565b8461576d565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f6020828403121561588a575f5ffd5b8151612f4d81614c1d565b6001600160a01b038416815261020081016158b3602083018561545c565b826101e0830152949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614aae90830184614c4d565b5f612f4d828461576d56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220b1da5c23d2dc17f863551361c2deb4ca7a4e8ea0ebc43276c37001fa42c1758064736f6c634300081c0033",
|
|
1754
|
+
"deployedBytecode": "0x608060405260043610610254575f3560e01c80636769a76f1161013f57806395d89b41116100b3578063e5a6b10f11610078578063e5a6b10f1461073b578063e985e9c51461076d578063f0f44260146107b5578063f3fef3a3146107d4578063f67b2bad146107f3578063ffa600e314610813575f5ffd5b806395d89b41146106ab578063a22cb465146106bf578063b88d4fde146106de578063c016f88a146106fd578063c87b56dd1461071c575f5ffd5b806371907f171161010457806371907f17146105cd578063792da09e146105ff5780637a702b3c1461062b57806382afd23b1461064a5780638456cb59146106785780638c916d461461068c575f5ffd5b80636769a76f146105325780636af6f1ef146105515780636b8734e7146105705780636f86c8971461058f57806370a08231146105ae575f5ffd5b80633f4ba83a116101d657806352d1902d1161019b57806352d1902d1461048c57806355f804b3146104a05780635c975abb146104bf5780635fcbf445146104d657806361d027b3146104f55780636352211e14610513575f5ffd5b80633f4ba83a146103f457806342842e0e1461040857806347e7ef24146104275780634a47a3e0146104465780634f1ef28614610479575f5ffd5b806323b872dd1161021c57806323b872dd1461032457806324ea54f41461034357806333d6157a146103715780633659cfe6146103b65780633ed7c1ae146103d5575f5ffd5b806301ffc9a71461025857806306fdde031461028c578063077f224a146102ad578063081812fc146102ce578063095ea7b314610305575b5f5ffd5b348015610263575f5ffd5b50610277610272366004614c32565b610832565b60405190151581526020015b60405180910390f35b348015610297575f5ffd5b506102a061085d565b6040516102839190614c7b565b3480156102b8575f5ffd5b506102cc6102c7366004614d70565b6108ed565b005b3480156102d9575f5ffd5b506102ed6102e8366004614de8565b610a5c565b6040516001600160a01b039091168152602001610283565b348015610310575f5ffd5b506102cc61031f366004614dff565b610a81565b34801561032f575f5ffd5b506102cc61033e366004614e29565b610b95565b34801561034e575f5ffd5b506103635f5160206159675f395f51905f5281565b604051908152602001610283565b34801561037c575f5ffd5b506103a961038b366004614e67565b6001600160a01b03165f90815261012e602052604090205460ff1690565b6040516102839190614eb2565b3480156103c1575f5ffd5b506102cc6103d0366004614e67565b610bc6565b3480156103e0575f5ffd5b506103636103ef366004614fc4565b610ca3565b3480156103ff575f5ffd5b506102cc6113c7565b348015610413575f5ffd5b506102cc610422366004614e29565b611482565b348015610432575f5ffd5b506102cc610441366004614dff565b61149c565b348015610451575f5ffd5b506103637fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102cc61048736600461501d565b611684565b348015610497575f5ffd5b5061036361174f565b3480156104ab575f5ffd5b506102cc6104ba36600461506a565b611800565b3480156104ca575f5ffd5b5060335460ff16610277565b3480156104e1575f5ffd5b506102cc6104f03660046150a8565b6118f7565b348015610500575f5ffd5b5061012d546001600160a01b03166102ed565b34801561051e575f5ffd5b506102ed61052d366004614de8565b611bd5565b34801561053d575f5ffd5b5061036361054c3660046150df565b611c34565b34801561055c575f5ffd5b506102cc61056b366004615145565b61211a565b34801561057b575f5ffd5b506102cc61058a3660046150a8565b61219d565b34801561059a575f5ffd5b506102cc6105a9366004614e67565b61271f565b3480156105b9575f5ffd5b506103636105c8366004614e67565b612ccf565b3480156105d8575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b34801561060a575f5ffd5b50610363610619366004614de8565b5f90815261012f602052604090205490565b348015610636575f5ffd5b506102cc610645366004615160565b612d53565b348015610655575f5ffd5b50610277610664366004614de8565b5f90815261012f6020526040902054151590565b348015610683575f5ffd5b506102cc612d74565b348015610697575f5ffd5b506102cc6106a636600461518b565b612e14565b3480156106b6575f5ffd5b506102a0612ed5565b3480156106ca575f5ffd5b506102cc6106d936600461520a565b612ee4565b3480156106e9575f5ffd5b506102cc6106f8366004615236565b612eef565b348015610708575f5ffd5b5061036361071736600461529e565b612f21565b348015610727575f5ffd5b506102a0610736366004614de8565b612f54565b348015610746575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006102ed565b348015610778575f5ffd5b506102776107873660046152d1565b6001600160a01b039182165f9081526101006020908152604080832093909416825291909152205460ff1690565b3480156107c0575f5ffd5b506102cc6107cf366004614e67565b612fb7565b3480156107df575f5ffd5b506103636107ee366004614dff565b613058565b3480156107fe575f5ffd5b506103635f5160206159205f395f51905f5281565b34801561081e575f5ffd5b506102cc61082d3660046152fd565b6130ea565b5f61083c8261311b565b8061085757506001600160e01b0319821663019c676f60e31b145b92915050565b606060fb805461086c9061532a565b80601f01602080910402602001604051908101604052809291908181526020018280546108989061532a565b80156108e35780601f106108ba576101008083540402835291602001916108e3565b820191905f5260205f20905b8154815290600101906020018083116108c657829003601f168201915b5050505050905090565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b61098c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156109ad575f805461ff0019166101001790555b83515f036109cd57604051620beefb60e01b815260040160405180910390fd5b82515f036109ee576040516343b47bcb60e01b815260040160405180910390fd5b6109f661316a565b610a008484613192565b610a086131c2565b610a11826131f0565b8015610a56575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f610a668261321f565b505f90815260ff60205260409020546001600160a01b031690565b5f610a8b82611bd5565b9050806001600160a01b0316836001600160a01b031603610af85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610983565b336001600160a01b0382161480610b145750610b148133610787565b610b865760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610983565b610b90838361327d565b505050565b610b9f33826132ea565b610bbb5760405162461bcd60e51b81526004016109839061535c565b610b90838383613367565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c0e5760405162461bcd60e51b8152600401610983906153a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c565f5160206159005f395f51905f52546001600160a01b031690565b6001600160a01b031614610c7c5760405162461bcd60e51b8152600401610983906153f5565b610c85816134d6565b604080515f80825260208201909252610ca09183919061363a565b50565b5f610cac6137a4565b610cb5856137ea565b6101608501516001600160a01b0381163314610ce457604051634ace04f960e01b815260040160405180910390fd5b610cef816002613850565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190615441565b9050610d5d816003613850565b4264ffffffffff16876101a0015164ffffffffff1611610db75760405162461bcd60e51b815260206004820152601560248201527413db19081c1bdb1a58de481a5cc8195e1c1a5c9959605a1b6044820152606401610983565b85610180015164ffffffffff1687610180015164ffffffffff1614610e355760405162461bcd60e51b815260206004820152602e60248201527f426f746820706f6c6963696573206d7573742068617665207468652073616d6560448201526d207374617274696e67206461746560901b6064820152608401610983565b8560200151876020015111158015610e5557508560c001518760c0015111155b8015610e6957508560e001518760e0015111155b8015610e7f575085610120015187610120015111155b8015610e95575085610140015187610140015111155b8015610ea957508560600151876060015111155b8015610ebd57508560800151876080015111155b8015610ed3575085610100015187610100015111155b8015610ef75750856101a0015164ffffffffff16876101a0015164ffffffffff1611155b8015610f1957508561016001516001600160a01b0316826001600160a01b0316145b610f815760405162461bcd60e51b815260206004820152603360248201527f4e657720706f6c696379206d7573742062652067726561746572206f7220657160448201527275616c207468616e206f6c6420706f6c69637960681b6064820152608401610983565b610f8b8285612f21565b8087525f90815261012f602052604090205415610fe25760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b610feb8661388b565b86515f90815261012f6020526040812091909155875161100a90611bd5565b905061102881885f015160405180602001604052805f815250613909565b87515f90815261012f602052604080822091909155516355c1da5f60e11b81526001600160a01b0383169063ab83b4be90611069908b908b9060040161551c565b5f604051808303815f87803b158015611080575f5ffd5b505af1158015611092573d5f5f3e3d5ffd5b505050505f8860c001518860c001516110ab919061554d565b905080156110e8576110e86001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001688858461393b565b8861014001518861014001516110fe919061554d565b9050801561119c5761119c87846001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116a9190615441565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691908461393b565b8861012001518861012001516111b2919061554d565b905080156111fa576111fa87846001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b8860e001518860e0015161120e919061554d565b905080156112535761012d54611253906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116918a91168461393b565b886101000151886101000151611269919061554d565b90505f811180156112eb5750836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d59190615441565b6001600160a01b0316876001600160a01b031614155b156113305761133087856001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611146573d5f5f3e3d5ffd5b836001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b896040516113699190615560565b60405180910390a2875189516040516001600160a01b038716907f4ff4ac703cb703b7ea535d47e65e64b4cabf11b3e2eb41f152dab17971953add905f90a4885188516113b69190613995565b50508551925050505b949350505050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611460575f5ffd5b505afa158015611472573d5f5f3e3d5ffd5b5050505061147e613a90565b5050565b610b9083838360405180602001604052805f815250612eef565b6114a46137a4565b6114af826001613850565b6040516370a0823160e01b81526001600160a01b0383811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611517573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153b919061556f565b90506115727f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633858561393b565b6001600160a01b0383166347e7ef24336040516370a0823160e01b81526001600160a01b03878116600483015285917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156115ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160e919061556f565b611618919061554d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611660573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a56919061556f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116cc5760405162461bcd60e51b8152600401610983906153a9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166117145f5160206159005f395f51905f52546001600160a01b031690565b6001600160a01b03161461173a5760405162461bcd60e51b8152600401610983906153f5565b611743826134d6565b61147e8282600161363a565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ee5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610983565b505f5160206159005f395f51905f5290565b7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611895575f5ffd5b505afa1580156118a7573d5f5f3e3d5ffd5b505050508161013090816118bb91906155d1565b506040513381526004907fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f906020015b60405180910390a25050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b158015611990575f5ffd5b505afa1580156119a2573d5f5f3e3d5ffd5b5050506001600160a01b0385165f90815261012e602052604081209150815460ff1660038111156119d5576119d5614e82565b036119f357604051637d91856360e01b815260040160405180910390fd5b6001846003811115611a0757611a07614e82565b1480611a2457506002846003811115611a2257611a22614e82565b145b15611ac5576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159205f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611aaa575f5ffd5b505afa158015611abc573d5f5f3e3d5ffd5b50505050611b5d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad5f5160206159675f395f51905f52336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015611b46575f5ffd5b505afa158015611b58573d5f5f3e3d5ffd5b505050505b80548490829060ff19166001836003811115611b7b57611b7b614e82565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91611bc691610100900460ff1690889061568c565b60405180910390a25050505050565b5f81815260fd60205260408120546001600160a01b0316806108575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f611c3d6137a4565b6101608501516001600160a01b0381163314611c6c57604051634ace04f960e01b815260040160405180910390fd5b611c77816002613850565b5f816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd89190615441565b9050611ce5816003613850565b611cef8285612f21565b8088525f90815261012f602052604090205415611d465760405162461bcd60e51b8152602060048201526015602482015274506f6c69637920616c72656164792065786973747360581b6044820152606401610983565b611d4f8761388b565b87515f90815261012f602090815260408083209390935589518351918201909352908152611d7e918791613909565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611daa908a90600401615560565b5f604051808303815f87803b158015611dc1575f5ffd5b505af1158015611dd3573d5f5f3e3d5ffd5b50505060c0880151611e1491506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908890849061393b565b61014087015115611ebb57611ebb86826001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e839190615441565b6101408a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b61012087015115611f6257611f6286826001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f2a9190615441565b6101208a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b61012d5460e0880151611fa7916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a92919091169061393b565b5f87610100015111801561202c5750816001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120169190615441565b6001600160a01b0316866001600160a01b031614155b156120cd576120cd86836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612071573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120959190615441565b6101008a01516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061393b565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516121069190615560565b60405180910390a250509351949350505050565b6121226137a4565b426121356101c083016101a084016156b2565b64ffffffffff1611156121835760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b610ca0612195368390038301836156cb565b5f6001613ae2565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b15801561221f575f5ffd5b505afa158015612231573d5f5f3e3d5ffd5b5050506001600160a01b0384165f90815261012e602052604081209150815460ff16600381111561226457612264614e82565b146122825760405163cf9a96f360e01b815260040160405180910390fd5b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ec9190615441565b6001600160a01b03161461231357604051630fdee24360e11b815260040160405180910390fd5b600183600381111561232757612327614e82565b1480156123a357506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061236290639077062160e01b906004016156e6565b602060405180830381865afa15801561237d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a191906156fb565b155b80612439575060038360038111156123bd576123bd614e82565b14801561243957506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a7906123f890630e72532960e11b906004016156e6565b602060405180830381865afa158015612413573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243791906156fb565b155b806124cf5750600283600381111561245357612453614e82565b1480156124cf57506040516301ffc9a760e01b81526001600160a01b038516906301ffc9a79061248e9063da40804f60e01b906004016156e6565b602060405180830381865afa1580156124a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124cd91906156fb565b155b156124f157838360405163502c9a5f60e01b8152600401610983929190615716565b8054600160ff198216811783558491839161ffff199091161761010083600381111561251f5761251f614e82565b0217905550600383600381111561253857612538614e82565b036126d5575f8490505f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125a29190615441565b90506001600160a01b0381161561260a576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156125f3575f5ffd5b505af1158015612605573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612646573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266a9190615441565b90506001600160a01b038116156126d2576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c906024015f604051808303815f87803b1580156126bb575f5ffd5b505af11580156126cd573d5f5f3e3d5ffd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef84600160405161271192919061568c565b60405180910390a250505050565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b1580156127a1575f5ffd5b505afa1580156127b3573d5f5f3e3d5ffd5b505050506001600160a01b0382165f90815261012e602052604090206002815460ff1660038111156127e7576127e7614e82565b1461280557604051635c92b23960e11b815260040160405180910390fd5b60018154610100900460ff16600381111561282257612822614e82565b0361291d57826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612863573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612887919061556f565b1561291857805f0160019054906101000a900460ff16836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128fd919061556f565b604051631d0ec0ab60e01b815260040161098392919061572f565b612c5d565b60028154610100900460ff16600381111561293a5761293a614e82565b036129f157826001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561297b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299f919061556f565b1561291857805f0160019054906101000a900460ff16836001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b60038154610100900460ff166003811115612a0e57612a0e614e82565b03612c5d575f839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a77919061556f565b15612ac957815f0160019054906101000a900460ff16816001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128d9573d5f5f3e3d5ffd5b5f816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b06573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2a9190615441565b90506001600160a01b03811615612b92576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612b7b575f5ffd5b505af1158015612b8d573d5f5f3e3d5ffd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf29190615441565b90506001600160a01b03811615612c5a576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc55906024015f604051808303815f87803b158015612c43575f5ffd5b505af1158015612c55573d5f5f3e3d5ffd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef91612ca391610100900460ff16905f9061568c565b60405180910390a250506001600160a01b03165f90815261012e60205260409020805461ffff19169055565b5f6001600160a01b038216612d385760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610983565b506001600160a01b03165f90815260fe602052604090205490565b612d5b6137a4565b61147e612d6d368490038401846156cb565b825f613ae2565b5f5160206159675f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015612df6575f5ffd5b505afa158015612e08573d5f5f3e3d5ffd5b50505050610ca0613e0b565b612e1c6137a4565b5f5b81811015610b905742838383818110612e3957612e39615746565b90506101c002016101a0016020810190612e5391906156b2565b64ffffffffff161115612ea15760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610983565b612ecd838383818110612eb657612eb6615746565b90506101c0020180360381019061219591906156cb565b600101612e1e565b606060fc805461086c9061532a565b61147e338383613e48565b612ef933836132ea565b612f155760405162461bcd60e51b81526004016109839061535c565b610a5684848484613f16565b5f612f4d6bffffffffffffffffffffffff83166bffffffffffffffffffffffff19606086901b1661575a565b9392505050565b6060612f5f8261321f565b5f612f68613f49565b90505f815111612f865760405180602001604052805f815250612f4d565b80612f9084613f59565b604051602001612fa1929190615784565b6040516020818303038152906040529392505050565b5f5160206159205f395f51905f526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f6040518083038186803b158015613039575f5ffd5b505afa15801561304b573d5f5f3e3d5ffd5b5050505061147e82613fe9565b5f6130616137a4565b61306c836001614072565b6001600160a01b03831663f3fef3a3336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af11580156130c6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4d919061556f565b6130f26137a4565b61147e613104368490038401846156cb565b8261310f575f613115565b83602001355b5f613ae2565b5f6001600160e01b031982166380ac58cd60e01b148061314b57506001600160e01b03198216635b5e139f60e01b145b8061085757506301ffc9a760e01b6001600160e01b0319831614610857565b5f54610100900460ff166131905760405162461bcd60e51b815260040161098390615798565b565b5f54610100900460ff166131b85760405162461bcd60e51b815260040161098390615798565b61147e82826140d1565b5f54610100900460ff166131e85760405162461bcd60e51b815260040161098390615798565b613190614110565b5f54610100900460ff166132165760405162461bcd60e51b815260040161098390615798565b610ca081613fe9565b5f81815260fd60205260409020546001600160a01b0316610ca05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610983565b5f81815260ff6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132b182611bd5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f6132f583611bd5565b9050806001600160a01b0316846001600160a01b0316148061333c57506001600160a01b038082165f908152610100602090815260408083209388168352929052205460ff165b806113bf5750836001600160a01b031661335584610a5c565b6001600160a01b031614949350505050565b826001600160a01b031661337a82611bd5565b6001600160a01b0316146133a05760405162461bcd60e51b8152600401610983906157e3565b6001600160a01b0382166134025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610983565b61340f8383836001614142565b826001600160a01b031661342282611bd5565b6001600160a01b0316146134485760405162461bcd60e51b8152600401610983906157e3565b5f81815260ff6020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260fe855283862080545f190190559087168086528386208054600101905586865260fd90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f5160206159675f395f51905f525f5160206159205f395f51905f526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b031660448201526064015f6040518083038186803b15801561356f575f5ffd5b505afa158015613581573d5f5f3e3d5ffd5b505050505f8390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136139190615441565b6001600160a01b031614610a5657604051630f13081760e01b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561366d57610b908361414f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156136c7575060408051601f3d908101601f191682019092526136c49181019061556f565b60015b61372a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610983565b5f5160206159005f395f51905f5281146137985760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610983565b50610b908383836141ea565b60335460ff16156131905760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610983565b805115801590613811575080515f90815261012f602052604090205461380f8261388b565b145b610ca05760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610983565b600161385c838361420e565b600381111561386d5761386d614e82565b1461147e57604051630422f25f60e01b815260040160405180910390fd5b5f8160405160200161389d9190615560565b60408051601f1981840301815291905280516020909101209050806139045760405162461bcd60e51b815260206004820152601860248201527f506f6c6963793a20686173682063616e6e6f74206265203000000000000000006044820152606401610983565b919050565b6139138383614280565b61391f5f848484614415565b610b905760405162461bcd60e51b815260040161098390615828565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a5690859061450f565b5f61399f83611bd5565b90506001600160a01b0381163b6139b557505050565b6139c681635ee0c7dd60e01b6145e2565b6139cf57505050565b5f6001600160a01b038216635ee0c7dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af1158015613a37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5b919061587a565b90506001600160e01b03198116635ee0c7dd60e01b14610a5657806040516381784a5160e01b815260040161098391906156e6565b613a986145fd565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b613aeb836137ea565b61016083015181158015613b0857506001600160a01b0381163314155b15613b2657604051634ace04f960e01b815260040160405180910390fd5b821580613b3e575042846101a0015164ffffffffff16115b613b8a5760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610983565b613b95816002614072565b8360200151831115613be25760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610983565b5f5f841190505f826001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c499190615441565b9050613c56816003614072565b85515f90815261012f60205260408120558115613ce0575f613c7a875f0151611bd5565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee790613cad9084908b908b90600401615895565b5f604051808303815f87803b158015613cc4575f5ffd5b505af1158015613cd6573d5f5f3e3d5ffd5b5050505050613d3a565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d90613d0c908990600401615560565b5f604051808303815f87803b158015613d23575f5ffd5b505af1158015613d35573d5f5f3e3d5ffd5b505050505b6020860151604051636a448ef160e01b815260048101919091526001600160a01b03841690636a448ef1906024015f604051808303815f87803b158015613d7f575f5ffd5b505af1158015613d91573d5f5f3e3d5ffd5b50505050855f01518661016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e87604051613dd991815260200190565b60405180910390a38415613df8578551613df39086614646565b613e03565b8551613e0390614741565b505050505050565b613e136137a4565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ac53390565b816001600160a01b0316836001600160a01b031603613ea95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610983565b6001600160a01b038381165f8181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613f21848484613367565b613f2d84848484614415565b610a565760405162461bcd60e51b815260040161098390615828565b6060610130805461086c9061532a565b60605f613f658361483b565b60010190505f8167ffffffffffffffff811115613f8457613f84614c8d565b6040519080825280601f01601f191660200182016040528015613fae576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613fb857509392505050565b6001600160a01b038116614010576040516307a2ee8b60e11b815260040160405180910390fd5b61012d80546001600160a01b0319166001600160a01b038316179055600161012d546040516001600160a01b0390911681527fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f9060200160405180910390a250565b5f61407d838361420e565b9050600181600381111561409357614093614e82565b141580156140b3575060028160038111156140b0576140b0614e82565b14155b15610b905760405163d08ef1ff60e01b815260040160405180910390fd5b5f54610100900460ff166140f75760405162461bcd60e51b815260040161098390615798565b60fb61410383826155d1565b5060fc610b9082826155d1565b5f54610100900460ff166141365760405162461bcd60e51b815260040161098390615798565b6033805460ff19169055565b61414a6137a4565b610a56565b6001600160a01b0381163b6141bc5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610983565b5f5160206159005f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6141f383614912565b5f825111806141ff5750805b15610b9057610a568383614951565b6001600160a01b0382165f90815261012e6020526040812082600381111561423857614238614e82565b8154610100900460ff16600381111561425357614253614e82565b1461427557838360405163502c9a5f60e01b8152600401610983929190615716565b5460ff169392505050565b6001600160a01b0382166142d65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610983565b5f81815260fd60205260409020546001600160a01b03161561433a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6143475f83836001614142565b5f81815260fd60205260409020546001600160a01b0316156143ab5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610983565b6001600160a01b0382165f81815260fe602090815260408083208054600101905584835260fd90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f6001600160a01b0384163b1561450757604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906144589033908990889088906004016158c2565b6020604051808303815f875af1925050508015614492575060408051601f3d908101601f1916820190925261448f9181019061587a565b60015b6144ed573d8080156144bf576040519150601f19603f3d011682016040523d82523d5f602084013e6144c4565b606091505b5080515f036144e55760405162461bcd60e51b815260040161098390615828565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506113bf565b5060016113bf565b5f614563826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149769092919063ffffffff16565b905080515f148061458357508080602001905181019061458391906156fb565b610b905760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610983565b5f6145ec83614984565b8015612f4d5750612f4d83836149b6565b60335460ff166131905760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610983565b5f61465083611bd5565b90506001600160a01b0381163b61466657505050565b61467781633ece0a8960e01b6145e2565b61468057505050565b5f6001600160a01b03821663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101879052606481018690526084016020604051808303815f875af11580156146e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061470c919061587a565b90506001600160e01b03198116636b140e9f60e11b14610a5657806040516381784a5160e01b815260040161098391906156e6565b5f61474b82611bd5565b90506001600160a01b0381163b614760575050565b61477181633ece0a8960e01b6145e2565b614779575050565b6001600160a01b03811663e8e617b7620249f0336040516001600160e01b031960e085901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303815f8887f1935050505080156147fc575060408051601f3d908101601f191682019092526147f99181019061587a565b60015b610b90576040516001600160a01b038216815282907f6ce8016f81523f240956bca9a698e643d09e84e7d0e931470b1016baf1027bd0906020016118eb565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106148795772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106148a5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106148c357662386f26fc10000830492506010015b6305f5e10083106148db576305f5e100830492506008015b61271083106148ef57612710830492506004015b60648310614901576064830492506002015b600a83106108575760010192915050565b61491b8161414f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060612f4d838360405180606001604052806027815260200161594060279139614a44565b60606113bf84845f85614ab8565b5f614996826301ffc9a760e01b6149b6565b801561085757506149af826001600160e01b03196149b6565b1592915050565b5f5f6301ffc9a760e01b836040516024016149d191906156e6565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f5f5f60205f8551602087018a617530fa92503d91505f519050828015614a2e575060208210155b8015614a3957505f81115b979650505050505050565b60605f5f856001600160a01b031685604051614a6091906158f4565b5f60405180830381855af49150503d805f8114614a98576040519150601f19603f3d011682016040523d82523d5f602084013e614a9d565b606091505b5091509150614aae86838387614b80565b9695505050505050565b606082471015614b195760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610983565b5f5f866001600160a01b03168587604051614b3491906158f4565b5f6040518083038185875af1925050503d805f8114614b6e576040519150601f19603f3d011682016040523d82523d5f602084013e614b73565b606091505b5091509150614a39878383875b60608315614bee5782515f03614be7576001600160a01b0385163b614be75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610983565b50816113bf565b6113bf8383815115614c035781518083602001fd5b8060405162461bcd60e51b81526004016109839190614c7b565b6001600160e01b031981168114610ca0575f5ffd5b5f60208284031215614c42575f5ffd5b8135612f4d81614c1d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612f4d6020830184614c4d565b634e487b7160e01b5f52604160045260245ffd5b6040516101c0810167ffffffffffffffff81118282101715614cc557614cc5614c8d565b60405290565b5f82601f830112614cda575f5ffd5b8135602083015f5f67ffffffffffffffff841115614cfa57614cfa614c8d565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715614d2957614d29614c8d565b604052838152905080828401871015614d40575f5ffd5b838360208301375f602085830101528094505050505092915050565b6001600160a01b0381168114610ca0575f5ffd5b5f5f5f60608486031215614d82575f5ffd5b833567ffffffffffffffff811115614d98575f5ffd5b614da486828701614ccb565b935050602084013567ffffffffffffffff811115614dc0575f5ffd5b614dcc86828701614ccb565b9250506040840135614ddd81614d5c565b809150509250925092565b5f60208284031215614df8575f5ffd5b5035919050565b5f5f60408385031215614e10575f5ffd5b8235614e1b81614d5c565b946020939093013593505050565b5f5f5f60608486031215614e3b575f5ffd5b8335614e4681614d5c565b92506020840135614e5681614d5c565b929592945050506040919091013590565b5f60208284031215614e77575f5ffd5b8135612f4d81614d5c565b634e487b7160e01b5f52602160045260245ffd5b60048110610ca057634e487b7160e01b5f52602160045260245ffd5b60208101614ebf83614e96565b91905290565b803561390481614d5c565b803564ffffffffff81168114613904575f5ffd5b5f6101c08284031215614ef5575f5ffd5b614efd614ca1565b823581526020808401359082015260408084013590820152606080840135908201526080808401359082015260a0808401359082015260c0808401359082015260e080840135908201526101008084013590820152610120808401359082015261014080840135908201529050614f776101608301614ec5565b610160820152614f8a6101808301614ed0565b610180820152614f9d6101a08301614ed0565b6101a082015292915050565b80356bffffffffffffffffffffffff81168114613904575f5ffd5b5f5f5f5f6103c08587031215614fd8575f5ffd5b614fe28686614ee4565b9350614ff2866101c08701614ee4565b925061038085013561500381614d5c565b91506150126103a08601614fa9565b905092959194509250565b5f5f6040838503121561502e575f5ffd5b823561503981614d5c565b9150602083013567ffffffffffffffff811115615054575f5ffd5b61506085828601614ccb565b9150509250929050565b5f6020828403121561507a575f5ffd5b813567ffffffffffffffff811115615090575f5ffd5b6113bf84828501614ccb565b60048110610ca0575f5ffd5b5f5f604083850312156150b9575f5ffd5b82356150c481614d5c565b915060208301356150d48161509c565b809150509250929050565b5f5f5f5f61022085870312156150f3575f5ffd5b6150fd8686614ee4565b93506101c085013561510e81614d5c565b92506101e085013561511f81614d5c565b91506150126102008601614fa9565b5f6101c0828403121561513f575f5ffd5b50919050565b5f6101c08284031215615156575f5ffd5b612f4d838361512e565b5f5f6101e08385031215615172575f5ffd5b61517c848461512e565b946101c0939093013593505050565b5f5f6020838503121561519c575f5ffd5b823567ffffffffffffffff8111156151b2575f5ffd5b8301601f810185136151c2575f5ffd5b803567ffffffffffffffff8111156151d8575f5ffd5b8560206101c0830284010111156151ed575f5ffd5b6020919091019590945092505050565b8015158114610ca0575f5ffd5b5f5f6040838503121561521b575f5ffd5b823561522681614d5c565b915060208301356150d4816151fd565b5f5f5f5f60808587031215615249575f5ffd5b843561525481614d5c565b9350602085013561526481614d5c565b925060408501359150606085013567ffffffffffffffff811115615286575f5ffd5b61529287828801614ccb565b91505092959194509250565b5f5f604083850312156152af575f5ffd5b82356152ba81614d5c565b91506152c860208401614fa9565b90509250929050565b5f5f604083850312156152e2575f5ffd5b82356152ed81614d5c565b915060208301356150d481614d5c565b5f5f6101e0838503121561530f575f5ffd5b615319848461512e565b91506101c08301356150d4816151fd565b600181811c9082168061533e57607f821691505b60208210810361513f57634e487b7160e01b5f52602260045260245ffd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215615451575f5ffd5b8151612f4d81614d5c565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301526101608101516154e66101608401826001600160a01b03169052565b5061018081015161550161018084018264ffffffffff169052565b506101a0810151610b906101a084018264ffffffffff169052565b610380810161552b828561545c565b612f4d6101c083018461545c565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561085757610857615539565b6101c08101610857828461545c565b5f6020828403121561557f575f5ffd5b5051919050565b601f821115610b9057805f5260205f20601f840160051c810160208510156155ab5750805b601f840160051c820191505b818110156155ca575f81556001016155b7565b5050505050565b815167ffffffffffffffff8111156155eb576155eb614c8d565b6155ff816155f9845461532a565b84615586565b6020601f821160018114615631575f831561561a5750848201515b5f19600385901b1c1916600184901b1784556155ca565b5f84815260208120601f198516915b828110156156605787850151825560209485019460019092019101615640565b508482101561567d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6040810161569984614e96565b8382526156a583614e96565b8260208301529392505050565b5f602082840312156156c2575f5ffd5b612f4d82614ed0565b5f6101c082840312156156dc575f5ffd5b612f4d8383614ee4565b6001600160e01b031991909116815260200190565b5f6020828403121561570b575f5ffd5b8151612f4d816151fd565b6001600160a01b0383168152604081016156a583614e96565b6040810161573c84614e96565b9281526020015290565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561085757610857615539565b5f81518060208401855e5f93019283525090919050565b5f6113bf615792838661576d565b8461576d565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f6020828403121561588a575f5ffd5b8151612f4d81614c1d565b6001600160a01b038416815261020081016158b3602083018561545c565b826101e0830152949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90614aae90830184614c4d565b5f612f4d828461576d56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220b1da5c23d2dc17f863551361c2deb4ca7a4e8ea0ebc43276c37001fa42c1758064736f6c634300081c0033",
|
|
1760
1755
|
"linkReferences": {},
|
|
1761
1756
|
"deployedLinkReferences": {}
|
|
1762
1757
|
}
|
package/contracts/PolicyPool.sol
CHANGED
|
@@ -114,7 +114,7 @@ contract PolicyPool is IPolicyPool, PausableUpgradeable, UUPSUpgradeable, ERC721
|
|
|
114
114
|
/**
|
|
115
115
|
* @dev Mapping of installed components (see {EToken}, {RiskModule}, {PremiumsAccount}) in the PolicyPool.
|
|
116
116
|
*/
|
|
117
|
-
mapping(IPolicyPoolComponent => Component)
|
|
117
|
+
mapping(IPolicyPoolComponent => Component) internal _components;
|
|
118
118
|
|
|
119
119
|
/**
|
|
120
120
|
* @dev Mapping that stores the active policies (the policyId is the key). It just saves the hash of the policies,
|
|
@@ -157,11 +157,6 @@ contract PolicyPool is IPolicyPool, PausableUpgradeable, UUPSUpgradeable, ERC721
|
|
|
157
157
|
*/
|
|
158
158
|
error UpgradeCannotChangeAccess();
|
|
159
159
|
|
|
160
|
-
/**
|
|
161
|
-
* @dev Upgrade error when the new implementation contract tries to change the `currency()`
|
|
162
|
-
*/
|
|
163
|
-
error UpgradeCannotChangeCurrency();
|
|
164
|
-
|
|
165
160
|
/**
|
|
166
161
|
* @dev Error when trying to add a component that was already added to the PolicyPool
|
|
167
162
|
*/
|
|
@@ -306,7 +301,10 @@ contract PolicyPool is IPolicyPool, PausableUpgradeable, UUPSUpgradeable, ERC721
|
|
|
306
301
|
function _authorizeUpgrade(address newImpl) internal view override onlyRole2(GUARDIAN_ROLE, LEVEL1_ROLE) {
|
|
307
302
|
IPolicyPool newPool = IPolicyPool(newImpl);
|
|
308
303
|
if (newPool.access() != _access) revert UpgradeCannotChangeAccess();
|
|
309
|
-
if (newPool.currency() != _currency) revert UpgradeCannotChangeCurrency();
|
|
304
|
+
// if (newPool.currency() != _currency) revert UpgradeCannotChangeCurrency();
|
|
305
|
+
// We now accept upgrade of the currency. This is a critical operation (as any upgrade), and should be
|
|
306
|
+
// made carefully checking that all the assets of the protocol are converted to the new currency in the
|
|
307
|
+
// migration process
|
|
310
308
|
}
|
|
311
309
|
|
|
312
310
|
/**
|
package/js/deploy.js
CHANGED
|
@@ -3,7 +3,7 @@ const fs = require("fs");
|
|
|
3
3
|
const ethers = require("ethers");
|
|
4
4
|
const { task, types } = require("hardhat/config");
|
|
5
5
|
const { WhitelistStatus } = require("../js/enums");
|
|
6
|
-
const { amountFunction, _W, grantRole, grantComponentRole, getDefaultSigner } = require("
|
|
6
|
+
const { amountFunction, _W, grantRole, grantComponentRole, getDefaultSigner } = require("@ensuro/utils/js/utils");
|
|
7
7
|
|
|
8
8
|
const reservesOpts = {
|
|
9
9
|
unsafeAllow: ["delegatecall"],
|
package/js/test-utils.js
CHANGED
|
@@ -1,48 +1,10 @@
|
|
|
1
1
|
const hre = require("hardhat");
|
|
2
|
-
const { _W, grantRole, getTransactionEvent } = require("
|
|
3
|
-
const { RiskModuleParameter } = require("
|
|
4
|
-
const helpers = require("@nomicfoundation/hardhat-network-helpers");
|
|
2
|
+
const { _W, grantRole, getTransactionEvent } = require("@ensuro/utils/js/utils");
|
|
3
|
+
const { RiskModuleParameter } = require("./enums");
|
|
5
4
|
|
|
6
5
|
const { ethers } = hre;
|
|
7
6
|
const { ZeroAddress } = ethers;
|
|
8
7
|
|
|
9
|
-
async function initCurrency(options, initial_targets, initial_balances) {
|
|
10
|
-
const Currency = await ethers.getContractFactory(options.contractClass || "TestCurrency");
|
|
11
|
-
let currency = await Currency.deploy(
|
|
12
|
-
options.name || "Test Currency",
|
|
13
|
-
options.symbol || "TEST",
|
|
14
|
-
options.initial_supply,
|
|
15
|
-
options.decimals || 18
|
|
16
|
-
);
|
|
17
|
-
initial_targets = initial_targets || [];
|
|
18
|
-
await Promise.all(
|
|
19
|
-
initial_targets.map(async function (user, index) {
|
|
20
|
-
await currency.transfer(user, initial_balances[index]);
|
|
21
|
-
})
|
|
22
|
-
);
|
|
23
|
-
return currency;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
28
|
-
* @param currencyAddress The currency contract address, for example the USDC address
|
|
29
|
-
* @param currencyOrigin An account that holds at least sum(initialBalances) of currency tokens
|
|
30
|
-
* @param initialTargets Array of addresses that will receive the initial balances
|
|
31
|
-
* @param initialBalances Initial balances for each address
|
|
32
|
-
*/
|
|
33
|
-
async function initForkCurrency(currencyAddress, currencyOrigin, initialTargets, initialBalances) {
|
|
34
|
-
const currency = await ethers.getContractAt("IERC20", currencyAddress);
|
|
35
|
-
await helpers.impersonateAccount(currencyOrigin);
|
|
36
|
-
await helpers.setBalance(currencyOrigin, ethers.parseEther("100"));
|
|
37
|
-
const whale = await ethers.getSigner(currencyOrigin);
|
|
38
|
-
await Promise.all(
|
|
39
|
-
initialTargets.map(async function (user, index) {
|
|
40
|
-
await currency.connect(whale).transfer(user, initialBalances[index]);
|
|
41
|
-
})
|
|
42
|
-
);
|
|
43
|
-
return currency;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
8
|
async function createRiskModule(
|
|
47
9
|
pool,
|
|
48
10
|
premiumsAccount,
|
|
@@ -258,52 +220,6 @@ async function makePolicy(pool, rm, cust, payout, premium, lossProb, expiration,
|
|
|
258
220
|
return newPolicyEvt;
|
|
259
221
|
}
|
|
260
222
|
|
|
261
|
-
/**
|
|
262
|
-
* Resets hardhat network to fork on the specified block and url
|
|
263
|
-
*/
|
|
264
|
-
async function setupChain(block, alchemyUrlEnv = "ALCHEMY_URL") {
|
|
265
|
-
const alchemyUrl = process.env[alchemyUrlEnv];
|
|
266
|
-
if (alchemyUrl === undefined) throw new Error(`Define envvar ${alchemyUrlEnv} for this test`);
|
|
267
|
-
|
|
268
|
-
if (block === undefined) throw new Error("Block can't be undefined use null for the current block");
|
|
269
|
-
if (block === null) block = undefined;
|
|
270
|
-
return hre.network.provider.request({
|
|
271
|
-
method: "hardhat_reset",
|
|
272
|
-
params: [
|
|
273
|
-
{
|
|
274
|
-
forking: {
|
|
275
|
-
jsonRpcUrl: alchemyUrl,
|
|
276
|
-
blockNumber: block,
|
|
277
|
-
},
|
|
278
|
-
},
|
|
279
|
-
],
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
const skipForkTests = process.env.SKIP_FORK_TESTS === "true";
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Chai test case wrapper for tests that require forking a live chain.
|
|
287
|
-
*
|
|
288
|
-
* It validates that the chain node URL is set, forks the chain at the specified block and adds the
|
|
289
|
-
* block number to the test name.
|
|
290
|
-
*/
|
|
291
|
-
const fork = {
|
|
292
|
-
it: (name, blockNumber, test, alchemyUrlEnv = "ALCHEMY_URL") => {
|
|
293
|
-
const fullName = `[FORK ${blockNumber}] ${name}`;
|
|
294
|
-
|
|
295
|
-
// eslint-disable-next-line func-style
|
|
296
|
-
const wrapped = async (...args) => {
|
|
297
|
-
await setupChain(blockNumber, alchemyUrlEnv);
|
|
298
|
-
|
|
299
|
-
return test(...args);
|
|
300
|
-
};
|
|
301
|
-
|
|
302
|
-
return (skipForkTests ? it.skip : it)(fullName, wrapped);
|
|
303
|
-
},
|
|
304
|
-
};
|
|
305
|
-
|
|
306
|
-
if (process.env.ENABLE_HH_WARNINGS !== "yes" && hre.upgrades !== undefined) hre.upgrades.silenceWarnings();
|
|
307
223
|
|
|
308
224
|
module.exports = {
|
|
309
225
|
addEToken,
|
|
@@ -312,10 +228,5 @@ module.exports = {
|
|
|
312
228
|
createRiskModule,
|
|
313
229
|
deployPool,
|
|
314
230
|
deployPremiumsAccount,
|
|
315
|
-
fork,
|
|
316
|
-
initCurrency,
|
|
317
|
-
initForkCurrency,
|
|
318
231
|
makePolicy,
|
|
319
|
-
setupChain,
|
|
320
|
-
skipForkTests,
|
|
321
232
|
};
|