@pendle/core-v2 4.5.0 → 4.5.1

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.
Files changed (38) hide show
  1. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC20WithSupplyCapSY.sol/PendleERC20WithSupplyCapSY.dbg.json +1 -1
  2. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleERC20WithSupplyCapSY.sol/PendleERC20WithSupplyCapSY.json +2 -2
  3. package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwellRswETHStakingSY.sol/PendleSwellRswETHStakingSY.dbg.json +4 -0
  4. package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwellRswETHStakingSY.sol/PendleSwellRswETHStakingSY.json +1049 -0
  5. package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwellStakingERC20SY.sol/PendleSwellStakingERC20SY.dbg.json +4 -0
  6. package/build/artifacts/contracts/core/StandardizedYield/implementations/Swell/PendleSwellStakingERC20SY.sol/PendleSwellStakingERC20SY.json +1039 -0
  7. package/build/artifacts/contracts/interfaces/Swell/ISwellSimpleStakingERC20.sol/ISwellSimpleStakingERC20.dbg.json +4 -0
  8. package/build/artifacts/contracts/interfaces/Swell/ISwellSimpleStakingERC20.sol/ISwellSimpleStakingERC20.json +207 -0
  9. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.dbg.json +1 -1
  10. package/build/artifacts/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol/ActionMarketAuxStatic.json +2 -2
  11. package/contracts/core/StandardizedYield/implementations/PendleERC20WithSupplyCapSY.sol +6 -1
  12. package/contracts/core/StandardizedYield/implementations/Swell/PendleSwellRswETHStakingSY.sol +57 -0
  13. package/contracts/core/StandardizedYield/implementations/Swell/PendleSwellStakingERC20SY.sol +111 -0
  14. package/contracts/interfaces/Swell/ISwellSimpleStakingERC20.sol +66 -0
  15. package/contracts/offchain-helpers/router-static/base/ActionMarketAuxStatic.sol +12 -4
  16. package/deployments/1-markets/EZETH-MAINNET-SEP2024.json +11 -0
  17. package/deployments/1-markets/RSWETH-SWELL-STAKING-MAINNET-JUL2024.json +11 -0
  18. package/deployments/1-markets/WEETH-MAINNET-SEP2024.json +11 -0
  19. package/deployments/42161-markets/EZETH-ARB-SEP2024.json +11 -0
  20. package/deployments/42161-markets/SILO-PTEETH-ARBITRUM-JUNE2024.json +11 -0
  21. package/deployments/42161-markets/SILO-PTEZETH-ARBITRUM-JUNE2024.json +11 -0
  22. package/deployments/42161-markets/WEETH-ARB-SEP2024.json +11 -0
  23. package/deployments/56-markets/WEETH-BSC-SEP2024.json +11 -0
  24. package/deployments/merkle-distribution/2024-04-25.json +14930 -0
  25. package/package.json +1 -1
  26. package/typechain-types/ISwellSimpleStakingERC20.ts +289 -0
  27. package/typechain-types/PendleSwellRswETHStakingSY.ts +1325 -0
  28. package/typechain-types/PendleSwellStakingERC20SY.ts +1299 -0
  29. package/typechain-types/factories/ActionMarketAuxStatic__factory.ts +1 -1
  30. package/typechain-types/factories/ISwellSimpleStakingERC20__factory.ts +226 -0
  31. package/typechain-types/factories/PendleERC20WithSupplyCapSY__factory.ts +1 -1
  32. package/typechain-types/factories/PendleSwellRswETHStakingSY__factory.ts +1106 -0
  33. package/typechain-types/factories/PendleSwellStakingERC20SY__factory.ts +1112 -0
  34. package/typechain-types/hardhat.d.ts +27 -0
  35. package/typechain-types/index.ts +6 -0
  36. /package/deployments/1-markets/{EZETH-JUNE2024.json → EZETH-APR2024.json} +0 -0
  37. /package/deployments/42161-markets/{RSETH-MAY2024.json → RSETH-JUNE2024.json} +0 -0
  38. /package/deployments/42161-markets/{WEETH-MAY2024.json → WEETH-JUNE2024.json} +0 -0
@@ -0,0 +1,4 @@
1
+ {
2
+ "_format": "hh-sol-dbg-1",
3
+ "buildInfo": "../../../../build-info/deb664ab1d6b035087ac7912a25c355a.json"
4
+ }
@@ -0,0 +1,207 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "ISwellSimpleStakingERC20",
4
+ "sourceName": "contracts/interfaces/Swell/ISwellSimpleStakingERC20.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "name": "ADDRESS_NULL",
9
+ "type": "error"
10
+ },
11
+ {
12
+ "inputs": [],
13
+ "name": "AMOUNT_NULL",
14
+ "type": "error"
15
+ },
16
+ {
17
+ "inputs": [],
18
+ "name": "INSUFFICIENT_BALANCE",
19
+ "type": "error"
20
+ },
21
+ {
22
+ "inputs": [
23
+ {
24
+ "internalType": "address",
25
+ "name": "token",
26
+ "type": "address"
27
+ }
28
+ ],
29
+ "name": "TOKEN_NOT_ALLOWED",
30
+ "type": "error"
31
+ },
32
+ {
33
+ "anonymous": false,
34
+ "inputs": [
35
+ {
36
+ "indexed": true,
37
+ "internalType": "address",
38
+ "name": "token",
39
+ "type": "address"
40
+ },
41
+ {
42
+ "indexed": true,
43
+ "internalType": "address",
44
+ "name": "staker",
45
+ "type": "address"
46
+ },
47
+ {
48
+ "indexed": false,
49
+ "internalType": "uint256",
50
+ "name": "amount",
51
+ "type": "uint256"
52
+ }
53
+ ],
54
+ "name": "Deposit",
55
+ "type": "event"
56
+ },
57
+ {
58
+ "anonymous": false,
59
+ "inputs": [
60
+ {
61
+ "indexed": true,
62
+ "internalType": "address",
63
+ "name": "token",
64
+ "type": "address"
65
+ },
66
+ {
67
+ "components": [
68
+ {
69
+ "internalType": "bool",
70
+ "name": "deposit",
71
+ "type": "bool"
72
+ },
73
+ {
74
+ "internalType": "bool",
75
+ "name": "withdraw",
76
+ "type": "bool"
77
+ }
78
+ ],
79
+ "indexed": false,
80
+ "internalType": "struct ISwellSimpleStakingERC20.Supported",
81
+ "name": "supported",
82
+ "type": "tuple"
83
+ }
84
+ ],
85
+ "name": "SupportedToken",
86
+ "type": "event"
87
+ },
88
+ {
89
+ "anonymous": false,
90
+ "inputs": [
91
+ {
92
+ "indexed": true,
93
+ "internalType": "address",
94
+ "name": "token",
95
+ "type": "address"
96
+ },
97
+ {
98
+ "indexed": true,
99
+ "internalType": "address",
100
+ "name": "staker",
101
+ "type": "address"
102
+ },
103
+ {
104
+ "indexed": false,
105
+ "internalType": "uint256",
106
+ "name": "amount",
107
+ "type": "uint256"
108
+ }
109
+ ],
110
+ "name": "Withdraw",
111
+ "type": "event"
112
+ },
113
+ {
114
+ "inputs": [
115
+ {
116
+ "internalType": "address",
117
+ "name": "_token",
118
+ "type": "address"
119
+ },
120
+ {
121
+ "internalType": "uint256",
122
+ "name": "_amount",
123
+ "type": "uint256"
124
+ },
125
+ {
126
+ "internalType": "address",
127
+ "name": "_receiver",
128
+ "type": "address"
129
+ }
130
+ ],
131
+ "name": "deposit",
132
+ "outputs": [],
133
+ "stateMutability": "nonpayable",
134
+ "type": "function"
135
+ },
136
+ {
137
+ "inputs": [
138
+ {
139
+ "internalType": "address",
140
+ "name": "_token",
141
+ "type": "address"
142
+ }
143
+ ],
144
+ "name": "rescueERC20",
145
+ "outputs": [],
146
+ "stateMutability": "nonpayable",
147
+ "type": "function"
148
+ },
149
+ {
150
+ "inputs": [
151
+ {
152
+ "internalType": "address",
153
+ "name": "_token",
154
+ "type": "address"
155
+ },
156
+ {
157
+ "components": [
158
+ {
159
+ "internalType": "bool",
160
+ "name": "deposit",
161
+ "type": "bool"
162
+ },
163
+ {
164
+ "internalType": "bool",
165
+ "name": "withdraw",
166
+ "type": "bool"
167
+ }
168
+ ],
169
+ "internalType": "struct ISwellSimpleStakingERC20.Supported",
170
+ "name": "_supported",
171
+ "type": "tuple"
172
+ }
173
+ ],
174
+ "name": "supportToken",
175
+ "outputs": [],
176
+ "stateMutability": "nonpayable",
177
+ "type": "function"
178
+ },
179
+ {
180
+ "inputs": [
181
+ {
182
+ "internalType": "address",
183
+ "name": "_token",
184
+ "type": "address"
185
+ },
186
+ {
187
+ "internalType": "uint256",
188
+ "name": "_amount",
189
+ "type": "uint256"
190
+ },
191
+ {
192
+ "internalType": "address",
193
+ "name": "_receiver",
194
+ "type": "address"
195
+ }
196
+ ],
197
+ "name": "withdraw",
198
+ "outputs": [],
199
+ "stateMutability": "nonpayable",
200
+ "type": "function"
201
+ }
202
+ ],
203
+ "bytecode": "0x",
204
+ "deployedBytecode": "0x",
205
+ "linkReferences": {},
206
+ "deployedLinkReferences": {}
207
+ }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../../../build-info/3e21d7a5332fcfa07816d028107d0b58.json"
3
+ "buildInfo": "../../../../../build-info/deb664ab1d6b035087ac7912a25c355a.json"
4
4
  }
@@ -402,8 +402,8 @@
402
402
  "type": "function"
403
403
  }
404
404
  ],
405
- "bytecode": "0x608060405234801561001057600080fd5b50611bcd806100206000396000f3fe608060405234801561001057600080fd5b506004361061008e5760003560e01c80630ac6aa69146100935780630f8cb321146100b95780635dc9bdbe146100cc57806362576930146100df578063955ee4e7146100f2578063a34560c614610105578063bcc454e214610118578063d1b087c91461012b578063e8a89c761461013e578063f2344deb146101f8575b600080fd5b6100a66100a1366004611810565b61020b565b6040519081526020015b60405180910390f35b6100a66100c7366004611810565b6102a6565b6100a66100da366004611873565b6103fb565b6100a66100ed36600461191e565b6104bf565b6100a661010036600461191e565b61054a565b6100a6610113366004611810565b6105be565b6100a661012636600461191e565b6105e8565b6100a6610139366004611810565b610666565b61015161014c36600461191e565b61068f565b604080516001600160a01b03978816815295871660208088019190915294871686820152606080870194909452608080870193909352815160a0808801919091529482015160c0808801919091529082015160e080880191909152938201519096166101008087019190915291810151610120860152928301516101408501529382015161016084015281015161018083015291909101516101a08201526101c0016100b0565b6100a661020636600461191e565b6106ea565b60008061021b846100c78561070b565b9050600061022985856102a6565b9050600061023f670de0b6b3a764000084610724565b90506000610255670de0b6b3a764000084610724565b9050600061026285610753565b9050600061026f85610753565b9050600061027d8386610724565b9050600061028b8386610724565b9050610297828261076b565b9b9a5050505050505050505050565b6000826001600160a01b0316632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030a919061193b565b1561031e5750670de0b6b3a76400006103f5565b81600061032a85610795565b9050600061034261033a8761080b565b839042610872565b90506000610363836000015183602001518460000151856040015188610973565b905060008413156103cf576000610387836060015183610a3090919063ffffffff16565b9050670de0b6b3a76400008112156103ba5760405163329e322960e21b8152600481018290526024015b60405180910390fd5b6103c381610a5f565b955050505050506103f5565b6103ee6103e9836060015183610a7290919063ffffffff16565b610a5f565b9450505050505b92915050565b6000826001600160a01b0316632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045f919061193b565b156104735750670de0b6b3a76400006103f5565b60006104896104818561080b565b849042610872565b905060006104ab84600001518360200151846000015185604001516000610973565b90506104b681610a5f565b95945050505050565b6000806104cb83610a90565b50509050610543816001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610510573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610534919061195d565b61053d856106ea565b90610724565b9392505050565b60008061055683610795565b905060006105638461080b565b90506000610572838342610872565b9050600061058c610584878686610b04565b855190610a72565b826020015161059b919061198c565b90506105b4846040015182610a3090919063ffffffff16565b9695505050505050565b6000806105ce846100c78561070b565b905060006105dc85856102a6565b90506104b6828261076b565b6000806105f483610a90565b50509050610543816001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065d919061195d565b61053d8561054a565b60008061067e610679856100c78661070b565b610753565b905060006105dc61067986866102a6565b600080600080600061069f611798565b60008060006106ad8a610a90565b9250925092508198508097508296506106c58a610795565b93506106d08a610bc7565b95506106dc8a856103fb565b945050505091939550919395565b6000806106f683610795565b905061054383826107068661080b565b610b04565b600080821361071c576000196103f5565b600192915050565b600080610739670de0b6b3a7640000856119b4565b905082818161074a5761074a6119cb565b04949350505050565b60006103f58261053d670de0b6b3a7640000826119e1565b60006105438361053d61077d85610bf8565b61078687610bf8565b61079091906119f4565b610c0e565b61079d611798565b60405163794052f360e01b81526001600160a01b0383169063794052f3906107c9903090600401611a1b565b61012060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190611a3a565b6040516314ae175360e11b8152600090309063295c2ea690610831908590600401611a1b565b602060405180830381865afa15801561084e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f5919061195d565b61089d6040518060800160405280600081526020016000815260200160008152602001600081525090565b60a084015182106108c15760405163b2094b5960e01b815260040160405180910390fd5b6000828560a001516108d391906119e1565b90506108df8582610c25565b825260208501516108f1908590610c86565b60208301528451158061090657506020820151155b15610934578451602083015160405163b1c4aefb60e01b8152600481019290925260248201526044016103b1565b61095285600001518661010001518460200151856000015185610cbd565b604083015260c08501516109669082610d3e565b6060830152509392505050565b6000806109808784610d77565b90506000610998610991888a61198c565b8390610a30565b9050670d529ae9e86000008113156109d457604051637e34684f60e11b815260048101829052670d529ae9e860000060248201526044016103b1565b60006109df82610dbe565b9050856109ec8289610a30565b6109f6919061198c565b9350670de0b6b3a7640000841215610a245760405163329e322960e21b8152600481018590526024016103b1565b50505095945050505050565b600080610a45670de0b6b3a764000085611abc565b9050828181610a5657610a566119cb565b05949350505050565b600080821215610a6e57600080fd5b5090565b600080610a7f8385611abc565b9050670de0b6b3a764000081610a56565b6000806000836001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190611aec565b9250925092509193909250565b6000428360a0015111610b8e576000610b1c85610a90565b50509050610b8683826001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d919061195d565b915050610543565b6000428460a00151610ba091906119e1565b90506000610bb385610100015183610d3e565b90506105b4670de0b6b3a764000082610a30565b600080610bd383610795565b90506000610be5826101000151610bf8565b9050610bf081610e11565b949350505050565b60006001600160ff1b03821115610a6e57600080fd5b6000808213610a6e57610c2082611b39565b6103f5565b6000610c3082610bf8565b610c47610c426201518061016d6119b4565b610bf8565b8460800151610c569190611abc565b610c609190611b55565b9050600081136103f557604051630e520c3b60e11b8152600481018290526024016103b1565b60008060008312610c98576001610c9c565b6000195b9050610cb3610c4285610cae86610c0e565b611226565b610bf09082611abc565b600080610cca8684610d3e565b9050670de0b6b3a7640000811215610cf85760405163329e322960e21b8152600481018290526024016103b1565b6000610d0e610d07878a61198c565b8990610a30565b90506000610d1b82610dbe565b9050610d278187610a30565b610d3190846119f4565b9998505050505050505050565b600080610d506201518061016d6119b4565b610d5a84866119b4565b610d649190611b83565b9050610bf0610d7282610bf8565b610e11565b600081831215610db45760405162461bcd60e51b81526020600482015260086024820152676e6567617469766560c01b60448201526064016103b1565b61054382846119f4565b6000670de0b6b3a76400008203610de85760405163a9c8b14d60e01b815260040160405180910390fd5b6000610e06610dff84670de0b6b3a76400006119f4565b8490610a30565b905061054381611245565b6000680238fd42c5cf03ffff198212158015610e36575068070c1cc73b00c800008213155b610e755760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908195e1c1bdb995b9d60821b60448201526064016103b1565b6000821215610ead57610e8a82600003610e11565b6a0c097ce7bc90715b34b9f160241b81610ea657610ea66119cb565b0592915050565b60006806f05b59d3b20000008312610eeb57506806f05b59d3b1ffffff199091019072195e54c5dd42177f53a27172fa9ec63026282760241b610f21565b6803782dace9d90000008312610f1d57506803782dace9d8ffffff19909101906b1425982cf597cd205cef7380610f21565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412610f715768ad78ebc5ac61ffffff199093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412610fad576856bc75e2d630ffffff199093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b188000008412610fe757682b5e3af16b187fffff199093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412611021576815af1d78b58c3fffff199093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac6200000841261105a57680ad78ebc5ac61fffff199093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d6310000084126110935768056bc75e2d630fffff199093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b188000084126110cc576802b5e3af16b187ffff199093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c4000084126111055768015af1d78b58c3ffff199093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b6000670de0b6b3a764000061123b84846119b4565b6105439190611b83565b60008082136112865760405162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b60448201526064016103b1565b670c7d713b49da0000821380156112a45750670f43fc2c04ee000082125b156112c857670de0b6b3a76400006112bb836112d6565b81610ea657610ea66119cb565b6103f5826113f5565b919050565b670de0b6b3a7640000026000806a0c097ce7bc90715b34b9f160241b808401906ec097ce7bc90715b34b9f0fffffffff1985010281611317576113176119cb565b05905060006a0c097ce7bc90715b34b9f160241b82800205905081806a0c097ce7bc90715b34b9f160241b81840205915060038205016a0c097ce7bc90715b34b9f160241b82840205915060058205016a0c097ce7bc90715b34b9f160241b82840205915060078205016a0c097ce7bc90715b34b9f160241b82840205915060098205016a0c097ce7bc90715b34b9f160241b828402059150600b8205016a0c097ce7bc90715b34b9f160241b828402059150600d8205016a0c097ce7bc90715b34b9f160241b828402059150600f82050160020295945050505050565b6000670de0b6b3a76400008212156114365761142d826a0c097ce7bc90715b34b9f160241b81611427576114276119cb565b056113f5565b60000392915050565b6000775803bcc5cb9634ba4cfb2213f784019318ed4dcb6017880f60361b83126114815772195e54c5dd42177f53a27172fa9ec63026282760241b830592506806f05b59d3b2000000015b6f8bcc0026baae9e45e470190267a230cf60191b83126114b8576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff00840008312611500576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a700831261153b576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf850831261157257693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e283126115a957690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d0383126115de5768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb41746121110831261160957680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d831261163e576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f17757889379378312611673576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b28660383126116a7576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac83126116db576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d631000008086030281611704576117046119cb565b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b60405180610120016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461180257600080fd5b50565b80356112d1816117ed565b6000806040838503121561182357600080fd5b823561182e816117ed565b946020939093013593505050565b60405161012081016001600160401b038111828210171561186d57634e487b7160e01b600052604160045260246000fd5b60405290565b60008082840361014081121561188857600080fd5b8335611893816117ed565b9250610120601f1982018113156118a957600080fd5b6118b161183c565b91506020850135825260408501356020830152606085013560408301526118da60808601611805565b606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e084015281860135818401525050809150509250929050565b60006020828403121561193057600080fd5b8135610543816117ed565b60006020828403121561194d57600080fd5b8151801515811461054357600080fd5b60006020828403121561196f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820182811260008312801582168215821617156119ac576119ac611976565b505092915050565b80820281158282048414176103f5576103f5611976565b634e487b7160e01b600052601260045260246000fd5b818103818111156103f5576103f5611976565b8181036000831280158383131683831282161715611a1457611a14611976565b5092915050565b6001600160a01b0391909116815260200190565b80516112d1816117ed565b60006101208284031215611a4d57600080fd5b611a5561183c565b825181526020830151602082015260408301516040820152611a7960608401611a2f565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b80820260008212600160ff1b84141615611ad857611ad8611976565b81810583148215176103f5576103f5611976565b600080600060608486031215611b0157600080fd5b8351611b0c816117ed565b6020850151909350611b1d816117ed565b6040850151909250611b2e816117ed565b809150509250925092565b6000600160ff1b8201611b4e57611b4e611976565b5060000390565b600082611b6457611b646119cb565b600160ff1b821460001984141615611b7e57611b7e611976565b500590565b600082611b9257611b926119cb565b50049056fea2646970667358221220486d109f7a6d2985f24fd4d36306d36cb4477331cfb1c8220c09a2d3b4e9073764736f6c63430008170033",
406
- "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061008e5760003560e01c80630ac6aa69146100935780630f8cb321146100b95780635dc9bdbe146100cc57806362576930146100df578063955ee4e7146100f2578063a34560c614610105578063bcc454e214610118578063d1b087c91461012b578063e8a89c761461013e578063f2344deb146101f8575b600080fd5b6100a66100a1366004611810565b61020b565b6040519081526020015b60405180910390f35b6100a66100c7366004611810565b6102a6565b6100a66100da366004611873565b6103fb565b6100a66100ed36600461191e565b6104bf565b6100a661010036600461191e565b61054a565b6100a6610113366004611810565b6105be565b6100a661012636600461191e565b6105e8565b6100a6610139366004611810565b610666565b61015161014c36600461191e565b61068f565b604080516001600160a01b03978816815295871660208088019190915294871686820152606080870194909452608080870193909352815160a0808801919091529482015160c0808801919091529082015160e080880191909152938201519096166101008087019190915291810151610120860152928301516101408501529382015161016084015281015161018083015291909101516101a08201526101c0016100b0565b6100a661020636600461191e565b6106ea565b60008061021b846100c78561070b565b9050600061022985856102a6565b9050600061023f670de0b6b3a764000084610724565b90506000610255670de0b6b3a764000084610724565b9050600061026285610753565b9050600061026f85610753565b9050600061027d8386610724565b9050600061028b8386610724565b9050610297828261076b565b9b9a5050505050505050505050565b6000826001600160a01b0316632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030a919061193b565b1561031e5750670de0b6b3a76400006103f5565b81600061032a85610795565b9050600061034261033a8761080b565b839042610872565b90506000610363836000015183602001518460000151856040015188610973565b905060008413156103cf576000610387836060015183610a3090919063ffffffff16565b9050670de0b6b3a76400008112156103ba5760405163329e322960e21b8152600481018290526024015b60405180910390fd5b6103c381610a5f565b955050505050506103f5565b6103ee6103e9836060015183610a7290919063ffffffff16565b610a5f565b9450505050505b92915050565b6000826001600160a01b0316632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045f919061193b565b156104735750670de0b6b3a76400006103f5565b60006104896104818561080b565b849042610872565b905060006104ab84600001518360200151846000015185604001516000610973565b90506104b681610a5f565b95945050505050565b6000806104cb83610a90565b50509050610543816001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610510573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610534919061195d565b61053d856106ea565b90610724565b9392505050565b60008061055683610795565b905060006105638461080b565b90506000610572838342610872565b9050600061058c610584878686610b04565b855190610a72565b826020015161059b919061198c565b90506105b4846040015182610a3090919063ffffffff16565b9695505050505050565b6000806105ce846100c78561070b565b905060006105dc85856102a6565b90506104b6828261076b565b6000806105f483610a90565b50509050610543816001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065d919061195d565b61053d8561054a565b60008061067e610679856100c78661070b565b610753565b905060006105dc61067986866102a6565b600080600080600061069f611798565b60008060006106ad8a610a90565b9250925092508198508097508296506106c58a610795565b93506106d08a610bc7565b95506106dc8a856103fb565b945050505091939550919395565b6000806106f683610795565b905061054383826107068661080b565b610b04565b600080821361071c576000196103f5565b600192915050565b600080610739670de0b6b3a7640000856119b4565b905082818161074a5761074a6119cb565b04949350505050565b60006103f58261053d670de0b6b3a7640000826119e1565b60006105438361053d61077d85610bf8565b61078687610bf8565b61079091906119f4565b610c0e565b61079d611798565b60405163794052f360e01b81526001600160a01b0383169063794052f3906107c9903090600401611a1b565b61012060405180830381865afa1580156107e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190611a3a565b6040516314ae175360e11b8152600090309063295c2ea690610831908590600401611a1b565b602060405180830381865afa15801561084e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f5919061195d565b61089d6040518060800160405280600081526020016000815260200160008152602001600081525090565b60a084015182106108c15760405163b2094b5960e01b815260040160405180910390fd5b6000828560a001516108d391906119e1565b90506108df8582610c25565b825260208501516108f1908590610c86565b60208301528451158061090657506020820151155b15610934578451602083015160405163b1c4aefb60e01b8152600481019290925260248201526044016103b1565b61095285600001518661010001518460200151856000015185610cbd565b604083015260c08501516109669082610d3e565b6060830152509392505050565b6000806109808784610d77565b90506000610998610991888a61198c565b8390610a30565b9050670d529ae9e86000008113156109d457604051637e34684f60e11b815260048101829052670d529ae9e860000060248201526044016103b1565b60006109df82610dbe565b9050856109ec8289610a30565b6109f6919061198c565b9350670de0b6b3a7640000841215610a245760405163329e322960e21b8152600481018590526024016103b1565b50505095945050505050565b600080610a45670de0b6b3a764000085611abc565b9050828181610a5657610a566119cb565b05949350505050565b600080821215610a6e57600080fd5b5090565b600080610a7f8385611abc565b9050670de0b6b3a764000081610a56565b6000806000836001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190611aec565b9250925092509193909250565b6000428360a0015111610b8e576000610b1c85610a90565b50509050610b8683826001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d919061195d565b915050610543565b6000428460a00151610ba091906119e1565b90506000610bb385610100015183610d3e565b90506105b4670de0b6b3a764000082610a30565b600080610bd383610795565b90506000610be5826101000151610bf8565b9050610bf081610e11565b949350505050565b60006001600160ff1b03821115610a6e57600080fd5b6000808213610a6e57610c2082611b39565b6103f5565b6000610c3082610bf8565b610c47610c426201518061016d6119b4565b610bf8565b8460800151610c569190611abc565b610c609190611b55565b9050600081136103f557604051630e520c3b60e11b8152600481018290526024016103b1565b60008060008312610c98576001610c9c565b6000195b9050610cb3610c4285610cae86610c0e565b611226565b610bf09082611abc565b600080610cca8684610d3e565b9050670de0b6b3a7640000811215610cf85760405163329e322960e21b8152600481018290526024016103b1565b6000610d0e610d07878a61198c565b8990610a30565b90506000610d1b82610dbe565b9050610d278187610a30565b610d3190846119f4565b9998505050505050505050565b600080610d506201518061016d6119b4565b610d5a84866119b4565b610d649190611b83565b9050610bf0610d7282610bf8565b610e11565b600081831215610db45760405162461bcd60e51b81526020600482015260086024820152676e6567617469766560c01b60448201526064016103b1565b61054382846119f4565b6000670de0b6b3a76400008203610de85760405163a9c8b14d60e01b815260040160405180910390fd5b6000610e06610dff84670de0b6b3a76400006119f4565b8490610a30565b905061054381611245565b6000680238fd42c5cf03ffff198212158015610e36575068070c1cc73b00c800008213155b610e755760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908195e1c1bdb995b9d60821b60448201526064016103b1565b6000821215610ead57610e8a82600003610e11565b6a0c097ce7bc90715b34b9f160241b81610ea657610ea66119cb565b0592915050565b60006806f05b59d3b20000008312610eeb57506806f05b59d3b1ffffff199091019072195e54c5dd42177f53a27172fa9ec63026282760241b610f21565b6803782dace9d90000008312610f1d57506803782dace9d8ffffff19909101906b1425982cf597cd205cef7380610f21565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412610f715768ad78ebc5ac61ffffff199093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412610fad576856bc75e2d630ffffff199093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b188000008412610fe757682b5e3af16b187fffff199093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412611021576815af1d78b58c3fffff199093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac6200000841261105a57680ad78ebc5ac61fffff199093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d6310000084126110935768056bc75e2d630fffff199093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b188000084126110cc576802b5e3af16b187ffff199093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c4000084126111055768015af1d78b58c3ffff199093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b6000670de0b6b3a764000061123b84846119b4565b6105439190611b83565b60008082136112865760405162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b60448201526064016103b1565b670c7d713b49da0000821380156112a45750670f43fc2c04ee000082125b156112c857670de0b6b3a76400006112bb836112d6565b81610ea657610ea66119cb565b6103f5826113f5565b919050565b670de0b6b3a7640000026000806a0c097ce7bc90715b34b9f160241b808401906ec097ce7bc90715b34b9f0fffffffff1985010281611317576113176119cb565b05905060006a0c097ce7bc90715b34b9f160241b82800205905081806a0c097ce7bc90715b34b9f160241b81840205915060038205016a0c097ce7bc90715b34b9f160241b82840205915060058205016a0c097ce7bc90715b34b9f160241b82840205915060078205016a0c097ce7bc90715b34b9f160241b82840205915060098205016a0c097ce7bc90715b34b9f160241b828402059150600b8205016a0c097ce7bc90715b34b9f160241b828402059150600d8205016a0c097ce7bc90715b34b9f160241b828402059150600f82050160020295945050505050565b6000670de0b6b3a76400008212156114365761142d826a0c097ce7bc90715b34b9f160241b81611427576114276119cb565b056113f5565b60000392915050565b6000775803bcc5cb9634ba4cfb2213f784019318ed4dcb6017880f60361b83126114815772195e54c5dd42177f53a27172fa9ec63026282760241b830592506806f05b59d3b2000000015b6f8bcc0026baae9e45e470190267a230cf60191b83126114b8576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff00840008312611500576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a700831261153b576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf850831261157257693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e283126115a957690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d0383126115de5768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb41746121110831261160957680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d831261163e576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f17757889379378312611673576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b28660383126116a7576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac83126116db576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d631000008086030281611704576117046119cb565b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b60405180610120016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461180257600080fd5b50565b80356112d1816117ed565b6000806040838503121561182357600080fd5b823561182e816117ed565b946020939093013593505050565b60405161012081016001600160401b038111828210171561186d57634e487b7160e01b600052604160045260246000fd5b60405290565b60008082840361014081121561188857600080fd5b8335611893816117ed565b9250610120601f1982018113156118a957600080fd5b6118b161183c565b91506020850135825260408501356020830152606085013560408301526118da60808601611805565b606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e084015281860135818401525050809150509250929050565b60006020828403121561193057600080fd5b8135610543816117ed565b60006020828403121561194d57600080fd5b8151801515811461054357600080fd5b60006020828403121561196f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820182811260008312801582168215821617156119ac576119ac611976565b505092915050565b80820281158282048414176103f5576103f5611976565b634e487b7160e01b600052601260045260246000fd5b818103818111156103f5576103f5611976565b8181036000831280158383131683831282161715611a1457611a14611976565b5092915050565b6001600160a01b0391909116815260200190565b80516112d1816117ed565b60006101208284031215611a4d57600080fd5b611a5561183c565b825181526020830151602082015260408301516040820152611a7960608401611a2f565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b80820260008212600160ff1b84141615611ad857611ad8611976565b81810583148215176103f5576103f5611976565b600080600060608486031215611b0157600080fd5b8351611b0c816117ed565b6020850151909350611b1d816117ed565b6040850151909250611b2e816117ed565b809150509250925092565b6000600160ff1b8201611b4e57611b4e611976565b5060000390565b600082611b6457611b646119cb565b600160ff1b821460001984141615611b7e57611b7e611976565b500590565b600082611b9257611b926119cb565b50049056fea2646970667358221220486d109f7a6d2985f24fd4d36306d36cb4477331cfb1c8220c09a2d3b4e9073764736f6c63430008170033",
405
+ "bytecode": "0x608060405234801561001057600080fd5b50611c00806100206000396000f3fe608060405234801561001057600080fd5b506004361061008e5760003560e01c80630ac6aa69146100935780630f8cb321146100b95780635dc9bdbe146100cc57806362576930146100df578063955ee4e7146100f2578063a34560c614610105578063bcc454e214610118578063d1b087c91461012b578063e8a89c761461013e578063f2344deb146101f8575b600080fd5b6100a66100a1366004611843565b61020b565b6040519081526020015b60405180910390f35b6100a66100c7366004611843565b6102a6565b6100a66100da3660046118a6565b6103fb565b6100a66100ed366004611951565b6104bf565b6100a6610100366004611951565b61054a565b6100a6610113366004611843565b6105e7565b6100a6610126366004611951565b610611565b6100a6610139366004611843565b61068f565b61015161014c366004611951565b6106b8565b604080516001600160a01b03978816815295871660208088019190915294871686820152606080870194909452608080870193909352815160a0808801919091529482015160c0808801919091529082015160e080880191909152938201519096166101008087019190915291810151610120860152928301516101408501529382015161016084015281015161018083015291909101516101a08201526101c0016100b0565b6100a6610206366004611951565b610713565b60008061021b846100c785610734565b9050600061022985856102a6565b9050600061023f670de0b6b3a76400008461074d565b90506000610255670de0b6b3a76400008461074d565b905060006102628561077c565b9050600061026f8561077c565b9050600061027d838661074d565b9050600061028b838661074d565b90506102978282610794565b9b9a5050505050505050505050565b6000826001600160a01b0316632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030a919061196e565b1561031e5750670de0b6b3a76400006103f5565b81600061032a856107be565b9050600061034261033a87610834565b83904261089b565b9050600061036383600001518360200151846000015185604001518861099c565b905060008413156103cf576000610387836060015183610a5990919063ffffffff16565b9050670de0b6b3a76400008112156103ba5760405163329e322960e21b8152600481018290526024015b60405180910390fd5b6103c381610a88565b955050505050506103f5565b6103ee6103e9836060015183610a9b90919063ffffffff16565b610a88565b9450505050505b92915050565b6000826001600160a01b0316632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045f919061196e565b156104735750670de0b6b3a76400006103f5565b600061048961048185610834565b84904261089b565b905060006104ab8460000151836020015184600001518560400151600061099c565b90506104b681610a88565b95945050505050565b6000806104cb83610ab9565b50509050610543816001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105349190611990565b61053d85610713565b9061074d565b9392505050565b600080610556836107be565b9050600061056384610834565b90506000428360a0015111610595576020830151610582908390610b2d565b835161058e91906119bf565b90506105cd565b60006105a284844261089b565b90506105ba6105b2878686610b71565b855190610a9b565b81602001516105c991906119bf565b9150505b6104b66103e9846040015183610a5990919063ffffffff16565b6000806105f7846100c785610734565b9050600061060585856102a6565b90506104b68282610794565b60008061061d83610ab9565b50509050610543816001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611990565b61053d8561054a565b6000806106a76106a2856100c786610734565b61077c565b905060006106056106a286866102a6565b60008060008060006106c86117cb565b60008060006106d68a610ab9565b9250925092508198508097508296506106ee8a6107be565b93506106f98a610c3e565b95506107058a856103fb565b945050505091939550919395565b60008061071f836107be565b9050610543838261072f86610834565b610b71565b6000808213610745576000196103f5565b600192915050565b600080610762670de0b6b3a7640000856119e7565b9050828181610773576107736119fe565b04949350505050565b60006103f58261053d670de0b6b3a764000082611a14565b60006105438361053d6107a685610c67565b6107af87610c67565b6107b99190611a27565b610c7d565b6107c66117cb565b60405163794052f360e01b81526001600160a01b0383169063794052f3906107f2903090600401611a4e565b61012060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190611a6d565b6040516314ae175360e11b8152600090309063295c2ea69061085a908590600401611a4e565b602060405180830381865afa158015610877573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190611990565b6108c66040518060800160405280600081526020016000815260200160008152602001600081525090565b60a084015182106108ea5760405163b2094b5960e01b815260040160405180910390fd5b6000828560a001516108fc9190611a14565b90506109088582610c94565b8252602085015161091a908590610b2d565b60208301528451158061092f57506020820151155b1561095d578451602083015160405163b1c4aefb60e01b8152600481019290925260248201526044016103b1565b61097b85600001518661010001518460200151856000015185610cf0565b604083015260c085015161098f9082610d71565b6060830152509392505050565b6000806109a98784610daa565b905060006109c16109ba888a6119bf565b8390610a59565b9050670d529ae9e86000008113156109fd57604051637e34684f60e11b815260048101829052670d529ae9e860000060248201526044016103b1565b6000610a0882610df1565b905085610a158289610a59565b610a1f91906119bf565b9350670de0b6b3a7640000841215610a4d5760405163329e322960e21b8152600481018590526024016103b1565b50505095945050505050565b600080610a6e670de0b6b3a764000085611aef565b9050828181610a7f57610a7f6119fe565b05949350505050565b600080821215610a9757600080fd5b5090565b600080610aa88385611aef565b9050670de0b6b3a764000081610a7f565b6000806000836001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190611b1f565b9250925092509193909250565b60008060008312610b3f576001610b43565b6000195b9050610b5f610b5a85610b5586610c7d565b610e44565b610c67565b610b699082611aef565b949350505050565b6000428360a0015111610bfb576000610b8985610ab9565b50509050610bf383826001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bcf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d9190611990565b915050610543565b6000428460a00151610c0d9190611a14565b90506000610c2085610100015183610d71565b9050610c34670de0b6b3a764000082610a59565b9695505050505050565b600080610c4a836107be565b90506000610c5c826101000151610c67565b9050610b6981610e63565b60006001600160ff1b03821115610a9757600080fd5b6000808213610a9757610c8f82611b6c565b6103f5565b6000610c9f82610c67565b610cb1610b5a6201518061016d6119e7565b8460800151610cc09190611aef565b610cca9190611b88565b9050600081136103f557604051630e520c3b60e11b8152600481018290526024016103b1565b600080610cfd8684610d71565b9050670de0b6b3a7640000811215610d2b5760405163329e322960e21b8152600481018290526024016103b1565b6000610d41610d3a878a6119bf565b8990610a59565b90506000610d4e82610df1565b9050610d5a8187610a59565b610d649084611a27565b9998505050505050505050565b600080610d836201518061016d6119e7565b610d8d84866119e7565b610d979190611bb6565b9050610b69610da582610c67565b610e63565b600081831215610de75760405162461bcd60e51b81526020600482015260086024820152676e6567617469766560c01b60448201526064016103b1565b6105438284611a27565b6000670de0b6b3a76400008203610e1b5760405163a9c8b14d60e01b815260040160405180910390fd5b6000610e39610e3284670de0b6b3a7640000611a27565b8490610a59565b905061054381611278565b6000670de0b6b3a7640000610e5984846119e7565b6105439190611bb6565b6000680238fd42c5cf03ffff198212158015610e88575068070c1cc73b00c800008213155b610ec75760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908195e1c1bdb995b9d60821b60448201526064016103b1565b6000821215610eff57610edc82600003610e63565b6a0c097ce7bc90715b34b9f160241b81610ef857610ef86119fe565b0592915050565b60006806f05b59d3b20000008312610f3d57506806f05b59d3b1ffffff199091019072195e54c5dd42177f53a27172fa9ec63026282760241b610f73565b6803782dace9d90000008312610f6f57506803782dace9d8ffffff19909101906b1425982cf597cd205cef7380610f73565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412610fc35768ad78ebc5ac61ffffff199093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412610fff576856bc75e2d630ffffff199093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b18800000841261103957682b5e3af16b187fffff199093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412611073576815af1d78b58c3fffff199093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac620000084126110ac57680ad78ebc5ac61fffff199093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d6310000084126110e55768056bc75e2d630fffff199093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b1880000841261111e576802b5e3af16b187ffff199093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c4000084126111575768015af1d78b58c3ffff199093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b60008082136112b95760405162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b60448201526064016103b1565b670c7d713b49da0000821380156112d75750670f43fc2c04ee000082125b156112fb57670de0b6b3a76400006112ee83611309565b81610ef857610ef86119fe565b6103f582611428565b919050565b670de0b6b3a7640000026000806a0c097ce7bc90715b34b9f160241b808401906ec097ce7bc90715b34b9f0fffffffff198501028161134a5761134a6119fe565b05905060006a0c097ce7bc90715b34b9f160241b82800205905081806a0c097ce7bc90715b34b9f160241b81840205915060038205016a0c097ce7bc90715b34b9f160241b82840205915060058205016a0c097ce7bc90715b34b9f160241b82840205915060078205016a0c097ce7bc90715b34b9f160241b82840205915060098205016a0c097ce7bc90715b34b9f160241b828402059150600b8205016a0c097ce7bc90715b34b9f160241b828402059150600d8205016a0c097ce7bc90715b34b9f160241b828402059150600f82050160020295945050505050565b6000670de0b6b3a764000082121561146957611460826a0c097ce7bc90715b34b9f160241b8161145a5761145a6119fe565b05611428565b60000392915050565b6000775803bcc5cb9634ba4cfb2213f784019318ed4dcb6017880f60361b83126114b45772195e54c5dd42177f53a27172fa9ec63026282760241b830592506806f05b59d3b2000000015b6f8bcc0026baae9e45e470190267a230cf60191b83126114eb576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff00840008312611533576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a700831261156e576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf85083126115a557693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e283126115dc57690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d0383126116115768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb41746121110831261163c57680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d8312611671576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f177578893793783126116a6576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b28660383126116da576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac831261170e576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d631000008086030281611737576117376119fe565b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b60405180610120016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461183557600080fd5b50565b803561130481611820565b6000806040838503121561185657600080fd5b823561186181611820565b946020939093013593505050565b60405161012081016001600160401b03811182821017156118a057634e487b7160e01b600052604160045260246000fd5b60405290565b6000808284036101408112156118bb57600080fd5b83356118c681611820565b9250610120601f1982018113156118dc57600080fd5b6118e461186f565b915060208501358252604085013560208301526060850135604083015261190d60808601611838565b606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e084015281860135818401525050809150509250929050565b60006020828403121561196357600080fd5b813561054381611820565b60006020828403121561198057600080fd5b8151801515811461054357600080fd5b6000602082840312156119a257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820182811260008312801582168215821617156119df576119df6119a9565b505092915050565b80820281158282048414176103f5576103f56119a9565b634e487b7160e01b600052601260045260246000fd5b818103818111156103f5576103f56119a9565b8181036000831280158383131683831282161715611a4757611a476119a9565b5092915050565b6001600160a01b0391909116815260200190565b805161130481611820565b60006101208284031215611a8057600080fd5b611a8861186f565b825181526020830151602082015260408301516040820152611aac60608401611a62565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b80820260008212600160ff1b84141615611b0b57611b0b6119a9565b81810583148215176103f5576103f56119a9565b600080600060608486031215611b3457600080fd5b8351611b3f81611820565b6020850151909350611b5081611820565b6040850151909250611b6181611820565b809150509250925092565b6000600160ff1b8201611b8157611b816119a9565b5060000390565b600082611b9757611b976119fe565b600160ff1b821460001984141615611bb157611bb16119a9565b500590565b600082611bc557611bc56119fe565b50049056fea264697066735822122000254ccfefbe47eadb51690a04493cd1c46637b9b1a23864a58f23530403749f64736f6c63430008170033",
406
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061008e5760003560e01c80630ac6aa69146100935780630f8cb321146100b95780635dc9bdbe146100cc57806362576930146100df578063955ee4e7146100f2578063a34560c614610105578063bcc454e214610118578063d1b087c91461012b578063e8a89c761461013e578063f2344deb146101f8575b600080fd5b6100a66100a1366004611843565b61020b565b6040519081526020015b60405180910390f35b6100a66100c7366004611843565b6102a6565b6100a66100da3660046118a6565b6103fb565b6100a66100ed366004611951565b6104bf565b6100a6610100366004611951565b61054a565b6100a6610113366004611843565b6105e7565b6100a6610126366004611951565b610611565b6100a6610139366004611843565b61068f565b61015161014c366004611951565b6106b8565b604080516001600160a01b03978816815295871660208088019190915294871686820152606080870194909452608080870193909352815160a0808801919091529482015160c0808801919091529082015160e080880191909152938201519096166101008087019190915291810151610120860152928301516101408501529382015161016084015281015161018083015291909101516101a08201526101c0016100b0565b6100a6610206366004611951565b610713565b60008061021b846100c785610734565b9050600061022985856102a6565b9050600061023f670de0b6b3a76400008461074d565b90506000610255670de0b6b3a76400008461074d565b905060006102628561077c565b9050600061026f8561077c565b9050600061027d838661074d565b9050600061028b838661074d565b90506102978282610794565b9b9a5050505050505050505050565b6000826001600160a01b0316632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030a919061196e565b1561031e5750670de0b6b3a76400006103f5565b81600061032a856107be565b9050600061034261033a87610834565b83904261089b565b9050600061036383600001518360200151846000015185604001518861099c565b905060008413156103cf576000610387836060015183610a5990919063ffffffff16565b9050670de0b6b3a76400008112156103ba5760405163329e322960e21b8152600481018290526024015b60405180910390fd5b6103c381610a88565b955050505050506103f5565b6103ee6103e9836060015183610a9b90919063ffffffff16565b610a88565b9450505050505b92915050565b6000826001600160a01b0316632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045f919061196e565b156104735750670de0b6b3a76400006103f5565b600061048961048185610834565b84904261089b565b905060006104ab8460000151836020015184600001518560400151600061099c565b90506104b681610a88565b95945050505050565b6000806104cb83610ab9565b50509050610543816001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610510573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105349190611990565b61053d85610713565b9061074d565b9392505050565b600080610556836107be565b9050600061056384610834565b90506000428360a0015111610595576020830151610582908390610b2d565b835161058e91906119bf565b90506105cd565b60006105a284844261089b565b90506105ba6105b2878686610b71565b855190610a9b565b81602001516105c991906119bf565b9150505b6104b66103e9846040015183610a5990919063ffffffff16565b6000806105f7846100c785610734565b9050600061060585856102a6565b90506104b68282610794565b60008061061d83610ab9565b50509050610543816001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106869190611990565b61053d8561054a565b6000806106a76106a2856100c786610734565b61077c565b905060006106056106a286866102a6565b60008060008060006106c86117cb565b60008060006106d68a610ab9565b9250925092508198508097508296506106ee8a6107be565b93506106f98a610c3e565b95506107058a856103fb565b945050505091939550919395565b60008061071f836107be565b9050610543838261072f86610834565b610b71565b6000808213610745576000196103f5565b600192915050565b600080610762670de0b6b3a7640000856119e7565b9050828181610773576107736119fe565b04949350505050565b60006103f58261053d670de0b6b3a764000082611a14565b60006105438361053d6107a685610c67565b6107af87610c67565b6107b99190611a27565b610c7d565b6107c66117cb565b60405163794052f360e01b81526001600160a01b0383169063794052f3906107f2903090600401611a4e565b61012060405180830381865afa158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190611a6d565b6040516314ae175360e11b8152600090309063295c2ea69061085a908590600401611a4e565b602060405180830381865afa158015610877573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190611990565b6108c66040518060800160405280600081526020016000815260200160008152602001600081525090565b60a084015182106108ea5760405163b2094b5960e01b815260040160405180910390fd5b6000828560a001516108fc9190611a14565b90506109088582610c94565b8252602085015161091a908590610b2d565b60208301528451158061092f57506020820151155b1561095d578451602083015160405163b1c4aefb60e01b8152600481019290925260248201526044016103b1565b61097b85600001518661010001518460200151856000015185610cf0565b604083015260c085015161098f9082610d71565b6060830152509392505050565b6000806109a98784610daa565b905060006109c16109ba888a6119bf565b8390610a59565b9050670d529ae9e86000008113156109fd57604051637e34684f60e11b815260048101829052670d529ae9e860000060248201526044016103b1565b6000610a0882610df1565b905085610a158289610a59565b610a1f91906119bf565b9350670de0b6b3a7640000841215610a4d5760405163329e322960e21b8152600481018590526024016103b1565b50505095945050505050565b600080610a6e670de0b6b3a764000085611aef565b9050828181610a7f57610a7f6119fe565b05949350505050565b600080821215610a9757600080fd5b5090565b600080610aa88385611aef565b9050670de0b6b3a764000081610a7f565b6000806000836001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190611b1f565b9250925092509193909250565b60008060008312610b3f576001610b43565b6000195b9050610b5f610b5a85610b5586610c7d565b610e44565b610c67565b610b699082611aef565b949350505050565b6000428360a0015111610bfb576000610b8985610ab9565b50509050610bf383826001600160a01b0316633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bcf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d9190611990565b915050610543565b6000428460a00151610c0d9190611a14565b90506000610c2085610100015183610d71565b9050610c34670de0b6b3a764000082610a59565b9695505050505050565b600080610c4a836107be565b90506000610c5c826101000151610c67565b9050610b6981610e63565b60006001600160ff1b03821115610a9757600080fd5b6000808213610a9757610c8f82611b6c565b6103f5565b6000610c9f82610c67565b610cb1610b5a6201518061016d6119e7565b8460800151610cc09190611aef565b610cca9190611b88565b9050600081136103f557604051630e520c3b60e11b8152600481018290526024016103b1565b600080610cfd8684610d71565b9050670de0b6b3a7640000811215610d2b5760405163329e322960e21b8152600481018290526024016103b1565b6000610d41610d3a878a6119bf565b8990610a59565b90506000610d4e82610df1565b9050610d5a8187610a59565b610d649084611a27565b9998505050505050505050565b600080610d836201518061016d6119e7565b610d8d84866119e7565b610d979190611bb6565b9050610b69610da582610c67565b610e63565b600081831215610de75760405162461bcd60e51b81526020600482015260086024820152676e6567617469766560c01b60448201526064016103b1565b6105438284611a27565b6000670de0b6b3a76400008203610e1b5760405163a9c8b14d60e01b815260040160405180910390fd5b6000610e39610e3284670de0b6b3a7640000611a27565b8490610a59565b905061054381611278565b6000670de0b6b3a7640000610e5984846119e7565b6105439190611bb6565b6000680238fd42c5cf03ffff198212158015610e88575068070c1cc73b00c800008213155b610ec75760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908195e1c1bdb995b9d60821b60448201526064016103b1565b6000821215610eff57610edc82600003610e63565b6a0c097ce7bc90715b34b9f160241b81610ef857610ef86119fe565b0592915050565b60006806f05b59d3b20000008312610f3d57506806f05b59d3b1ffffff199091019072195e54c5dd42177f53a27172fa9ec63026282760241b610f73565b6803782dace9d90000008312610f6f57506803782dace9d8ffffff19909101906b1425982cf597cd205cef7380610f73565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412610fc35768ad78ebc5ac61ffffff199093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412610fff576856bc75e2d630ffffff199093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b18800000841261103957682b5e3af16b187fffff199093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412611073576815af1d78b58c3fffff199093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac620000084126110ac57680ad78ebc5ac61fffff199093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d6310000084126110e55768056bc75e2d630fffff199093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b1880000841261111e576802b5e3af16b187ffff199093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c4000084126111575768015af1d78b58c3ffff199093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b60008082136112b95760405162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b60448201526064016103b1565b670c7d713b49da0000821380156112d75750670f43fc2c04ee000082125b156112fb57670de0b6b3a76400006112ee83611309565b81610ef857610ef86119fe565b6103f582611428565b919050565b670de0b6b3a7640000026000806a0c097ce7bc90715b34b9f160241b808401906ec097ce7bc90715b34b9f0fffffffff198501028161134a5761134a6119fe565b05905060006a0c097ce7bc90715b34b9f160241b82800205905081806a0c097ce7bc90715b34b9f160241b81840205915060038205016a0c097ce7bc90715b34b9f160241b82840205915060058205016a0c097ce7bc90715b34b9f160241b82840205915060078205016a0c097ce7bc90715b34b9f160241b82840205915060098205016a0c097ce7bc90715b34b9f160241b828402059150600b8205016a0c097ce7bc90715b34b9f160241b828402059150600d8205016a0c097ce7bc90715b34b9f160241b828402059150600f82050160020295945050505050565b6000670de0b6b3a764000082121561146957611460826a0c097ce7bc90715b34b9f160241b8161145a5761145a6119fe565b05611428565b60000392915050565b6000775803bcc5cb9634ba4cfb2213f784019318ed4dcb6017880f60361b83126114b45772195e54c5dd42177f53a27172fa9ec63026282760241b830592506806f05b59d3b2000000015b6f8bcc0026baae9e45e470190267a230cf60191b83126114eb576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff00840008312611533576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a700831261156e576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf85083126115a557693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e283126115dc57690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d0383126116115768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb41746121110831261163c57680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d8312611671576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f177578893793783126116a6576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b28660383126116da576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac831261170e576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d631000008086030281611737576117376119fe565b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b60405180610120016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461183557600080fd5b50565b803561130481611820565b6000806040838503121561185657600080fd5b823561186181611820565b946020939093013593505050565b60405161012081016001600160401b03811182821017156118a057634e487b7160e01b600052604160045260246000fd5b60405290565b6000808284036101408112156118bb57600080fd5b83356118c681611820565b9250610120601f1982018113156118dc57600080fd5b6118e461186f565b915060208501358252604085013560208301526060850135604083015261190d60808601611838565b606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e084015281860135818401525050809150509250929050565b60006020828403121561196357600080fd5b813561054381611820565b60006020828403121561198057600080fd5b8151801515811461054357600080fd5b6000602082840312156119a257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820182811260008312801582168215821617156119df576119df6119a9565b505092915050565b80820281158282048414176103f5576103f56119a9565b634e487b7160e01b600052601260045260246000fd5b818103818111156103f5576103f56119a9565b8181036000831280158383131683831282161715611a4757611a476119a9565b5092915050565b6001600160a01b0391909116815260200190565b805161130481611820565b60006101208284031215611a8057600080fd5b611a8861186f565b825181526020830151602082015260408301516040820152611aac60608401611a62565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b80820260008212600160ff1b84141615611b0b57611b0b6119a9565b81810583148215176103f5576103f56119a9565b600080600060608486031215611b3457600080fd5b8351611b3f81611820565b6020850151909350611b5081611820565b6040850151909250611b6181611820565b809150509250925092565b6000600160ff1b8201611b8157611b816119a9565b5060000390565b600082611b9757611b976119fe565b600160ff1b821460001984141615611bb157611bb16119a9565b500590565b600082611bc557611bc56119fe565b50049056fea264697066735822122000254ccfefbe47eadb51690a04493cd1c46637b9b1a23864a58f23530403749f64736f6c63430008170033",
407
407
  "linkReferences": {},
408
408
  "deployedLinkReferences": {}
409
409
  }
@@ -10,7 +10,12 @@ contract PendleERC20WithSupplyCapSY is PendleERC20SY {
10
10
 
11
11
  error SupplyCapExceeded(uint256 totalSupply, uint256 supplyCap);
12
12
 
13
- constructor(string memory _name, string memory _symbol, address _erc20, uint256 _initialSupplyCap) PendleERC20SY(_name, _symbol, _erc20) {
13
+ constructor(
14
+ string memory _name,
15
+ string memory _symbol,
16
+ address _erc20,
17
+ uint256 _initialSupplyCap
18
+ ) PendleERC20SY(_name, _symbol, _erc20) {
14
19
  _updateSupplyCap(_initialSupplyCap);
15
20
  }
16
21
 
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "./PendleSwellStakingERC20SY.sol";
5
+ import "../../../../interfaces/Swell/IRswETH.sol";
6
+
7
+ contract PendleSwellRswETHStakingSY is PendleSwellStakingERC20SY {
8
+ using PMath for uint256;
9
+
10
+ address public constant REFERRAL = 0x8119EC16F0573B7dAc7C0CB94EB504FB32456ee1;
11
+ address public constant RSWETH = 0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0;
12
+
13
+ constructor() PendleSwellStakingERC20SY("SY Swell L2 Deposit RswETH", "SY-sw2Rsweth", RSWETH) {}
14
+
15
+ /*///////////////////////////////////////////////////////////////
16
+ EXCHANGE-RATE
17
+ //////////////////////////////////////////////////////////////*/
18
+ function exchangeRate() public view virtual override returns (uint256) {
19
+ return IRswETH(RSWETH).getRate();
20
+ }
21
+
22
+ /*///////////////////////////////////////////////////////////////
23
+ ADDITIONAL TOKEN IN FUNCTIONS
24
+ //////////////////////////////////////////////////////////////*/
25
+
26
+ function _getAdditionalTokens() internal view virtual override returns (address[] memory) {
27
+ return ArrayLib.create(NATIVE);
28
+ }
29
+
30
+ function _previewToStakeToken(
31
+ address,
32
+ uint256 amountNativeToDeposit
33
+ ) internal view virtual override returns (uint256) {
34
+ return amountNativeToDeposit.divDown(IRswETH(RSWETH).getRate());
35
+ }
36
+
37
+ function _wrapToStakeToken(address, uint256 amountNativeToDeposit) internal virtual override returns (uint256) {
38
+ uint256 preBalance = _selfBalance(RSWETH);
39
+ IRswETH(RSWETH).depositWithReferral{value: amountNativeToDeposit}(REFERRAL);
40
+ return _selfBalance(RSWETH) - preBalance;
41
+ }
42
+
43
+ function _canWrapToStakeToken(address token) internal view virtual override returns (bool) {
44
+ return token == NATIVE;
45
+ }
46
+
47
+ function assetInfo()
48
+ external
49
+ view
50
+ virtual
51
+ override
52
+ returns (AssetType assetType, address assetAddress, uint8 assetDecimals)
53
+ {
54
+ return (AssetType.TOKEN, NATIVE, 18);
55
+ }
56
+
57
+ }
@@ -0,0 +1,111 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "../../SYBase.sol";
5
+ import "../../../../interfaces/Swell/ISwellSimpleStakingERC20.sol";
6
+
7
+ contract PendleSwellStakingERC20SY is SYBase {
8
+ using ArrayLib for address[];
9
+
10
+ address public constant SWELL_STAKING = 0x38D43a6Cb8DA0E855A42fB6b0733A0498531d774;
11
+
12
+ // solhint-disable immutable-vars-naming
13
+ address public immutable stakeToken;
14
+
15
+ constructor(string memory _name, string memory _symbol, address _stakeToken) SYBase(_name, _symbol, _stakeToken) {
16
+ stakeToken = _stakeToken;
17
+ _safeApproveInf(_stakeToken, SWELL_STAKING);
18
+ }
19
+
20
+ /*///////////////////////////////////////////////////////////////
21
+ DEPOSIT/REDEEM USING BASE TOKENS
22
+ //////////////////////////////////////////////////////////////*/
23
+
24
+ function _deposit(
25
+ address tokenIn,
26
+ uint256 amountDeposited
27
+ ) internal virtual override returns (uint256 /*amountSharesOut*/) {
28
+ if (tokenIn != stakeToken) {
29
+ amountDeposited = _wrapToStakeToken(tokenIn, amountDeposited);
30
+ }
31
+ ISwellSimpleStakingERC20(SWELL_STAKING).deposit(stakeToken, amountDeposited, address(this));
32
+ return amountDeposited;
33
+ }
34
+
35
+ function _redeem(
36
+ address receiver,
37
+ address /*tokenOut*/,
38
+ uint256 amountSharesToRedeem
39
+ ) internal virtual override returns (uint256 /*amountTokenOut*/) {
40
+ ISwellSimpleStakingERC20(SWELL_STAKING).withdraw(stakeToken, amountSharesToRedeem, receiver);
41
+ return amountSharesToRedeem;
42
+ }
43
+
44
+ /*///////////////////////////////////////////////////////////////
45
+ EXCHANGE-RATE
46
+ //////////////////////////////////////////////////////////////*/
47
+ function exchangeRate() public view virtual override returns (uint256) {
48
+ return PMath.ONE;
49
+ }
50
+
51
+ /*///////////////////////////////////////////////////////////////
52
+ MISC FUNCTIONS FOR METADATA
53
+ //////////////////////////////////////////////////////////////*/
54
+
55
+ function _previewDeposit(address tokenIn, uint256 amountTokenToDeposit) internal view override returns (uint256) {
56
+ if (tokenIn == stakeToken) {
57
+ return amountTokenToDeposit;
58
+ }
59
+ return _previewToStakeToken(tokenIn, amountTokenToDeposit);
60
+ }
61
+
62
+ function _previewRedeem(
63
+ address /*tokenOut*/,
64
+ uint256 amountSharesToRedeem
65
+ ) internal pure override returns (uint256 /*amountTokenOut*/) {
66
+ return amountSharesToRedeem;
67
+ }
68
+
69
+ function getTokensIn() public view virtual override returns (address[] memory) {
70
+ return ArrayLib.create(stakeToken).merge(_getAdditionalTokens());
71
+ }
72
+
73
+ function getTokensOut() public view virtual override returns (address[] memory) {
74
+ return ArrayLib.create(stakeToken);
75
+ }
76
+
77
+ function isValidTokenIn(address token) public view virtual override returns (bool) {
78
+ return token == stakeToken || _canWrapToStakeToken(token);
79
+ }
80
+
81
+ function isValidTokenOut(address token) public view virtual override returns (bool) {
82
+ return token == stakeToken;
83
+ }
84
+
85
+ function assetInfo()
86
+ external
87
+ view
88
+ virtual
89
+ returns (AssetType assetType, address assetAddress, uint8 assetDecimals)
90
+ {
91
+ return (AssetType.TOKEN, stakeToken, IERC20Metadata(stakeToken).decimals());
92
+ }
93
+
94
+ /*///////////////////////////////////////////////////////////////
95
+ ADDITIONAL TOKEN IN FUNCTIONS
96
+ //////////////////////////////////////////////////////////////*/
97
+
98
+ function _getAdditionalTokens() internal view virtual returns (address[] memory) {}
99
+
100
+ function _previewToStakeToken(address, uint256) internal view virtual returns (uint256) {
101
+ assert(false);
102
+ }
103
+
104
+ function _wrapToStakeToken(address, uint256) internal virtual returns (uint256) {
105
+ assert(false);
106
+ }
107
+
108
+ function _canWrapToStakeToken(address) internal view virtual returns (bool) {
109
+ return false;
110
+ }
111
+ }
@@ -0,0 +1,66 @@
1
+ // SPDX-License-Identifier: UNLICENSED
2
+ pragma solidity ^0.8.0;
3
+
4
+ interface ISwellSimpleStakingERC20 {
5
+ /// @notice Struct to hold the supported booleans
6
+ /// @param deposit true if deposit is supported
7
+ /// @param withdraw true if withdraw is supported
8
+ struct Supported {
9
+ bool deposit;
10
+ bool withdraw;
11
+ }
12
+
13
+ /// @notice Error emitted when the amount is null
14
+ error AMOUNT_NULL();
15
+
16
+ /// @notice Error emitted when the address is null
17
+ error ADDRESS_NULL();
18
+
19
+ /// @notice Error emitted when the balance is insufficient
20
+ error INSUFFICIENT_BALANCE();
21
+
22
+ /// @notice Error emitted when the token is not allowed
23
+ error TOKEN_NOT_ALLOWED(address token);
24
+
25
+ /// @notice Event emitted when a token is added or removed
26
+ /// @param token address of the token
27
+ /// @param supported struct with deposit and withdraw booleans
28
+ event SupportedToken(address indexed token, Supported supported);
29
+
30
+ /// @notice Event emitted when a deposit is made
31
+ /// @param token address of the token
32
+ /// @param staker address of the staker
33
+ /// @param amount amount of the deposit
34
+ event Deposit(address indexed token, address indexed staker, uint256 amount);
35
+
36
+ /// @notice Event emitted when a withdrawal is made
37
+ /// @param token address of the token
38
+ /// @param staker address of the staker
39
+ /// @param amount amount of the withdrawal
40
+ event Withdraw(address indexed token, address indexed staker, uint256 amount);
41
+
42
+ /// @notice Method to deposit tokens
43
+ /// @dev token are transferred from the sender, and the receiver is credited
44
+ /// @param _token address of the token
45
+ /// @param _amount amount to deposit
46
+ /// @param _receiver address of the receiver
47
+ function deposit(address _token, uint256 _amount, address _receiver) external;
48
+
49
+ /// @notice Method to rescue tokens, only callable by the owner
50
+ /// @dev difference between balance and internal balance is transferred to the owner
51
+ /// @param _token address of the token
52
+ function rescueERC20(address _token) external;
53
+
54
+ /// @notice Method to add or remove a token
55
+ /// @dev only callable by the owner
56
+ /// @param _token address of the token
57
+ /// @param _supported struct with deposit and withdraw booleans
58
+ function supportToken(address _token, Supported calldata _supported) external;
59
+
60
+ /// @notice Method to rescue tokens, only callable by the owner
61
+ /// @dev token are transferred to the receiver and sender is credited
62
+ /// @param _token address of the token
63
+ /// @param _amount amount to withdraw
64
+ /// @param _receiver address of the receiver
65
+ function withdraw(address _token, uint256 _amount, address _receiver) external;
66
+ }
@@ -114,12 +114,20 @@ contract ActionMarketAuxStatic is IPActionMarketAuxStatic {
114
114
  function getLpToAssetRate(address market) public view returns (uint256) {
115
115
  MarketState memory state = _readState(market);
116
116
  PYIndex pyIndexCurrent = _pyIndex(market);
117
- MarketPreCompute memory comp = state.getMarketPreCompute(pyIndexCurrent, block.timestamp);
118
117
 
119
- int256 totalHypotheticalAsset = comp.totalAsset +
120
- state.totalPt.mulDown(int256(_getPtToAssetRate(market, state, pyIndexCurrent)));
118
+ int256 totalHypotheticalAsset;
119
+ if (state.expiry <= block.timestamp) {
120
+ // 1 PT = 1 Asset post-expiry
121
+ totalHypotheticalAsset = state.totalPt + pyIndexCurrent.syToAsset(state.totalSy);
122
+ } else {
123
+ MarketPreCompute memory comp = state.getMarketPreCompute(pyIndexCurrent, block.timestamp);
124
+
125
+ totalHypotheticalAsset =
126
+ comp.totalAsset +
127
+ state.totalPt.mulDown(int256(_getPtToAssetRate(market, state, pyIndexCurrent)));
128
+ }
121
129
 
122
- return uint256(totalHypotheticalAsset.divDown(state.totalLp));
130
+ return totalHypotheticalAsset.divDown(state.totalLp).Uint();
123
131
  }
124
132
 
125
133
  function getPtToAssetRate(address market) public view returns (uint256) {
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "SY ezETH",
3
+ "SY": "0x22E12A50e3ca49FB183074235cB1db84Fe4C716D",
4
+ "YT": "0x1623F1A991584A6b69baBbdbffD26E2B46485465",
5
+ "PT": "0x248241244356D18f63d0c16082996839ecB0C7bF",
6
+ "market": "0xcDBD5ff3E03b6828Db9C32e2131A60ABA5137901",
7
+ "expiry": 1727308800,
8
+ "scalarRoot": "7728447732000000000",
9
+ "initAnchor": "1116672357000000000",
10
+ "lnFeeRateRoot": "2995508979000000"
11
+ }