@coti-io/coti-contracts 0.1.0 → 1.0.0

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 (71) hide show
  1. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +3 -115
  2. package/contracts/mocks/README.md +1 -1
  3. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +105 -280
  4. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +83 -187
  5. package/contracts/mocks/utils/mpc/{Comparison1Tests.Contract.sol → Comparison1TestsContract.sol} +67 -115
  6. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +68 -116
  7. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +69 -164
  8. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +70 -52
  9. package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +270 -0
  10. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +102 -0
  11. package/contracts/mocks/utils/mpc/README.md +12 -12
  12. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +54 -211
  13. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +162 -640
  14. package/contracts/onboard/AccountOnboard.sol +3 -3
  15. package/contracts/utils/mpc/MpcCore.sol +2835 -988
  16. package/contracts/utils/mpc/MpcInterface.sol +6 -4
  17. package/hardhat.config.ts +8 -5
  18. package/package.json +2 -2
  19. package/test/utils/accounts.ts +1 -1
  20. package/test/utils/mpc/Precompile.test.ts +26 -37
  21. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract.ts +374 -0
  22. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract.ts +374 -0
  23. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/index.ts +5 -0
  24. package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.ts +30 -10
  25. package/typechain-types/contracts/mocks/utils/mpc/BitwiseTestsContract.ts +39 -5
  26. package/typechain-types/contracts/mocks/utils/mpc/Comparison1TestsContract.ts +374 -0
  27. package/typechain-types/contracts/mocks/utils/mpc/Comparison2TestsContract.ts +39 -5
  28. package/typechain-types/contracts/mocks/utils/mpc/MinMaxTestsContract.ts +25 -5
  29. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.ts +62 -0
  30. package/typechain-types/contracts/mocks/utils/mpc/MiscellaneousTestsContract.ts +396 -0
  31. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.ts +221 -0
  32. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract.ts +11 -8
  33. package/typechain-types/contracts/mocks/utils/mpc/TransferScalarTestsContract.ts +15 -15
  34. package/typechain-types/contracts/mocks/utils/mpc/TransferTestsContract.ts +15 -15
  35. package/typechain-types/contracts/mocks/utils/mpc/index.ts +3 -6
  36. package/typechain-types/contracts/onboard/AccountOnboard.ts +9 -4
  37. package/typechain-types/contracts/utils/mpc/MpcCore.ts +84 -0
  38. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +81 -40
  39. package/typechain-types/contracts/utils/mpc/index.ts +1 -0
  40. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  41. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +1 -1
  42. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  43. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract__factory.ts +387 -0
  44. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract__factory.ts +388 -0
  45. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/index.ts +5 -0
  46. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +20 -7
  47. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +28 -2
  48. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract__factory.ts +1 -1
  49. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +387 -0
  50. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +28 -2
  51. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +15 -2
  52. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +66 -1
  53. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous2TestsContract__factory.ts +1 -1
  54. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +424 -0
  55. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +289 -0
  56. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract__factory.ts +19 -3
  57. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  58. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  59. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +4 -4
  60. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +4 -4
  61. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +3 -4
  62. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
  63. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +8 -2
  64. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +77 -0
  65. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +124 -61
  66. package/typechain-types/factories/contracts/utils/mpc/index.ts +1 -0
  67. package/typechain-types/hardhat.d.ts +26 -26
  68. package/typechain-types/index.ts +8 -8
  69. package/contracts/mocks/utils/mpc/Miscellaneous2TestsContract.sol +0 -448
  70. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol +0 -81
  71. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +0 -311
@@ -0,0 +1,387 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import {
5
+ Contract,
6
+ ContractFactory,
7
+ ContractTransactionResponse,
8
+ Interface,
9
+ } from "ethers";
10
+ import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
11
+ import type { NonPayableOverrides } from "../../../../../common";
12
+ import type {
13
+ Comparison1TestsContract,
14
+ Comparison1TestsContractInterface,
15
+ } from "../../../../../contracts/mocks/utils/mpc/Comparison1TestsContract";
16
+
17
+ const _abi = [
18
+ {
19
+ inputs: [
20
+ {
21
+ components: [
22
+ {
23
+ internalType: "gtBool",
24
+ name: "res16_16",
25
+ type: "uint256",
26
+ },
27
+ {
28
+ internalType: "gtBool",
29
+ name: "res8_16",
30
+ type: "uint256",
31
+ },
32
+ {
33
+ internalType: "gtBool",
34
+ name: "res16_8",
35
+ type: "uint256",
36
+ },
37
+ ],
38
+ internalType: "struct Comparison1TestsContract.Check16",
39
+ name: "check16",
40
+ type: "tuple",
41
+ },
42
+ ],
43
+ name: "decryptAndCompareResults16",
44
+ outputs: [
45
+ {
46
+ internalType: "bool",
47
+ name: "",
48
+ type: "bool",
49
+ },
50
+ ],
51
+ stateMutability: "nonpayable",
52
+ type: "function",
53
+ },
54
+ {
55
+ inputs: [
56
+ {
57
+ components: [
58
+ {
59
+ internalType: "gtBool",
60
+ name: "res32_32",
61
+ type: "uint256",
62
+ },
63
+ {
64
+ internalType: "gtBool",
65
+ name: "res8_32",
66
+ type: "uint256",
67
+ },
68
+ {
69
+ internalType: "gtBool",
70
+ name: "res32_8",
71
+ type: "uint256",
72
+ },
73
+ {
74
+ internalType: "gtBool",
75
+ name: "res16_32",
76
+ type: "uint256",
77
+ },
78
+ {
79
+ internalType: "gtBool",
80
+ name: "res32_16",
81
+ type: "uint256",
82
+ },
83
+ ],
84
+ internalType: "struct Comparison1TestsContract.Check32",
85
+ name: "check32",
86
+ type: "tuple",
87
+ },
88
+ ],
89
+ name: "decryptAndCompareResults32",
90
+ outputs: [
91
+ {
92
+ internalType: "bool",
93
+ name: "",
94
+ type: "bool",
95
+ },
96
+ ],
97
+ stateMutability: "nonpayable",
98
+ type: "function",
99
+ },
100
+ {
101
+ inputs: [
102
+ {
103
+ components: [
104
+ {
105
+ internalType: "gtBool",
106
+ name: "res64_64",
107
+ type: "uint256",
108
+ },
109
+ {
110
+ internalType: "gtBool",
111
+ name: "res8_64",
112
+ type: "uint256",
113
+ },
114
+ {
115
+ internalType: "gtBool",
116
+ name: "res64_8",
117
+ type: "uint256",
118
+ },
119
+ {
120
+ internalType: "gtBool",
121
+ name: "res16_64",
122
+ type: "uint256",
123
+ },
124
+ {
125
+ internalType: "gtBool",
126
+ name: "res64_16",
127
+ type: "uint256",
128
+ },
129
+ {
130
+ internalType: "gtBool",
131
+ name: "res32_64",
132
+ type: "uint256",
133
+ },
134
+ {
135
+ internalType: "gtBool",
136
+ name: "res64_32",
137
+ type: "uint256",
138
+ },
139
+ ],
140
+ internalType: "struct Comparison1TestsContract.Check64",
141
+ name: "check64",
142
+ type: "tuple",
143
+ },
144
+ ],
145
+ name: "decryptAndCompareResults64",
146
+ outputs: [
147
+ {
148
+ internalType: "bool",
149
+ name: "",
150
+ type: "bool",
151
+ },
152
+ ],
153
+ stateMutability: "nonpayable",
154
+ type: "function",
155
+ },
156
+ {
157
+ inputs: [],
158
+ name: "getGtResult",
159
+ outputs: [
160
+ {
161
+ internalType: "bool",
162
+ name: "",
163
+ type: "bool",
164
+ },
165
+ ],
166
+ stateMutability: "view",
167
+ type: "function",
168
+ },
169
+ {
170
+ inputs: [],
171
+ name: "getLeResult",
172
+ outputs: [
173
+ {
174
+ internalType: "bool",
175
+ name: "",
176
+ type: "bool",
177
+ },
178
+ ],
179
+ stateMutability: "view",
180
+ type: "function",
181
+ },
182
+ {
183
+ inputs: [],
184
+ name: "getLtResult",
185
+ outputs: [
186
+ {
187
+ internalType: "bool",
188
+ name: "",
189
+ type: "bool",
190
+ },
191
+ ],
192
+ stateMutability: "view",
193
+ type: "function",
194
+ },
195
+ {
196
+ inputs: [
197
+ {
198
+ internalType: "uint8",
199
+ name: "a",
200
+ type: "uint8",
201
+ },
202
+ {
203
+ internalType: "uint8",
204
+ name: "b",
205
+ type: "uint8",
206
+ },
207
+ ],
208
+ name: "gtTest",
209
+ outputs: [
210
+ {
211
+ internalType: "bool",
212
+ name: "",
213
+ type: "bool",
214
+ },
215
+ ],
216
+ stateMutability: "nonpayable",
217
+ type: "function",
218
+ },
219
+ {
220
+ inputs: [
221
+ {
222
+ internalType: "uint8",
223
+ name: "a",
224
+ type: "uint8",
225
+ },
226
+ {
227
+ internalType: "uint8",
228
+ name: "b",
229
+ type: "uint8",
230
+ },
231
+ ],
232
+ name: "leTest",
233
+ outputs: [
234
+ {
235
+ internalType: "bool",
236
+ name: "",
237
+ type: "bool",
238
+ },
239
+ ],
240
+ stateMutability: "nonpayable",
241
+ type: "function",
242
+ },
243
+ {
244
+ inputs: [
245
+ {
246
+ internalType: "uint8",
247
+ name: "a",
248
+ type: "uint8",
249
+ },
250
+ {
251
+ internalType: "uint8",
252
+ name: "b",
253
+ type: "uint8",
254
+ },
255
+ ],
256
+ name: "ltTest",
257
+ outputs: [
258
+ {
259
+ internalType: "bool",
260
+ name: "",
261
+ type: "bool",
262
+ },
263
+ ],
264
+ stateMutability: "nonpayable",
265
+ type: "function",
266
+ },
267
+ {
268
+ inputs: [
269
+ {
270
+ components: [
271
+ {
272
+ internalType: "gtUint8",
273
+ name: "a8_s",
274
+ type: "uint256",
275
+ },
276
+ {
277
+ internalType: "gtUint8",
278
+ name: "b8_s",
279
+ type: "uint256",
280
+ },
281
+ {
282
+ internalType: "gtUint16",
283
+ name: "a16_s",
284
+ type: "uint256",
285
+ },
286
+ {
287
+ internalType: "gtUint16",
288
+ name: "b16_s",
289
+ type: "uint256",
290
+ },
291
+ {
292
+ internalType: "gtUint32",
293
+ name: "a32_s",
294
+ type: "uint256",
295
+ },
296
+ {
297
+ internalType: "gtUint32",
298
+ name: "b32_s",
299
+ type: "uint256",
300
+ },
301
+ {
302
+ internalType: "gtUint64",
303
+ name: "a64_s",
304
+ type: "uint256",
305
+ },
306
+ {
307
+ internalType: "gtUint64",
308
+ name: "b64_s",
309
+ type: "uint256",
310
+ },
311
+ ],
312
+ internalType: "struct Comparison1TestsContract.AllGTCastingValues",
313
+ name: "castingValues",
314
+ type: "tuple",
315
+ },
316
+ {
317
+ internalType: "uint8",
318
+ name: "a",
319
+ type: "uint8",
320
+ },
321
+ {
322
+ internalType: "uint8",
323
+ name: "b",
324
+ type: "uint8",
325
+ },
326
+ ],
327
+ name: "setPublicValues",
328
+ outputs: [],
329
+ stateMutability: "nonpayable",
330
+ type: "function",
331
+ },
332
+ ] as const;
333
+
334
+ const _bytecode =
335
+ "0x608060405234801561001057600080fd5b506156af80620000216000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80637d2e0f48116100665780637d2e0f481461016f57806380f937bc1461018d5780638b6e7a8c146101bd578063acb38169146101ed578063ebb571fd1461021d5761009e565b806308c90f0d146100a357806329875348146100d35780632e544aa0146100f15780632e5950eb14610121578063791175491461013f575b600080fd5b6100bd60048036038101906100b89190614467565b610239565b6040516100ca91906144c2565b60405180910390f35b6100db61074a565b6040516100e891906144c2565b60405180910390f35b61010b60048036038101906101069190614608565b610760565b60405161011891906144c2565b60405180910390f35b6101296107e8565b60405161013691906144c2565b60405180910390f35b61015960048036038101906101549190614467565b6107fe565b60405161016691906144c2565b60405180910390f35b610177610d10565b60405161018491906144c2565b60405180910390f35b6101a760048036038101906101a291906146e9565b610d26565b6040516101b491906144c2565b60405180910390f35b6101d760048036038101906101d29190614467565b610e1a565b6040516101e491906144c2565b60405180910390f35b610207600480360381019061020291906147a2565b61132c565b60405161021491906144c2565b60405180910390f35b61023760048036038101906102329190614949565b6113ea565b005b600061024361434d565b61024b614392565b6102536143b3565b61025b6143e2565b6102668488886113ea565b600061028261027d86600001518760200151611491565b611528565b9050806000806101000a81548160ff0219169083151502179055506102af856040015186606001516115cf565b8460000181815250506102ca85600001518660600151611666565b8460200181815250506102e5856040015186602001516116fe565b84604001818152505060006102f985610760565b905081151581151514610341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610338906149fc565b60405180910390fd5b61035386608001518760a00151611796565b84600001818152505061036e86600001518760a0015161182d565b846020018181525050610389866080015187602001516118c5565b8460400181815250506103a486604001518760a0015161195d565b8460600181815250506103bf866080015187606001516119f5565b84608001818152505060006103d38561132c565b90508015158315151461041b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041290614a68565b60405180910390fd5b61042d8760c001518860e00151611a8d565b84600001818152505061044887600001518860e00151611b24565b8460200181815250506104638760c001518860200151611bbc565b84604001818152505061047e87604001518860e00151611c54565b8460600181815250506104998760c001518860600151611cec565b8460800181815250506104b487608001518860e00151611d84565b8460a00181815250506104cf8760c001518860a00151611e1c565b8460c001818152505060006104e385610d26565b90508015158415151461052b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052290614ad4565b60405180910390fd5b61054161053c8c8a60200151611eb4565b611528565b151584151514801561056b575061056461055f89600001518c611f4e565b611528565b1515841515145b6105aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a190614b66565b60405180910390fd5b6105c36105be8c60ff168a60600151611fe8565b611528565b15158415151480156105f057506105e96105e489604001518c60ff16612083565b611528565b1515841515145b61062f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062690614bf8565b60405180910390fd5b6106486106438c60ff168a60a0015161211e565b611528565b1515841515148015610675575061066e61066989608001518c60ff166121bb565b611528565b1515841515145b6106b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ab90614c8a565b60405180910390fd5b6106cd6106c88c60ff168a60e00151612258565b611528565b15158415151480156106fa57506106f36106ee8960c001518c60ff166122f9565b611528565b1515841515145b610739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073090614d1c565b60405180910390fd5b839850505050505050505092915050565b60008060019054906101000a900460ff16905090565b6000806107708360000151611528565b905061077f8360200151611528565b15158115151480156107a057506107998360400151611528565b1515811515145b6107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d690614dd4565b60405180910390fd5b80915050919050565b60008060029054906101000a900460ff16905090565b600061080861434d565b610810614392565b6108186143b3565b6108206143e2565b61082b8488886113ea565b60006108476108428660000151876020015161239a565b611528565b905080600060016101000a81548160ff02191690831515021790555061087585604001518660600151612431565b846000018181525050610890856000015186606001516124c8565b8460200181815250506108ab85604001518660200151612560565b84604001818152505060006108bf85610760565b905081151581151514610907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fe90614e40565b60405180910390fd5b61091986608001518760a001516125f8565b84600001818152505061093486600001518760a0015161268f565b84602001818152505061094f86608001518760200151612727565b84604001818152505061096a86604001518760a001516127bf565b84606001818152505061098586608001518760600151612857565b84608001818152505060006109998561132c565b9050801515831515146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890614eac565b60405180910390fd5b6109f38760c001518860e001516128ef565b846000018181525050610a0e87600001518860e00151612986565b846020018181525050610a298760c001518860200151612a1e565b846040018181525050610a4487604001518860e00151612ab6565b846060018181525050610a5f8760c001518860600151612b4e565b846080018181525050610a7a87608001518860e00151612be6565b8460a0018181525050610a958760c001518860a00151612c7e565b8460c00181815250506000610aa985610d26565b905080151584151514610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae890614f18565b60405180910390fd5b610b07610b028c8a60200151612d16565b611528565b1515841515148015610b315750610b2a610b2589600001518c612db0565b611528565b1515841515145b610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6790614faa565b60405180910390fd5b610b89610b848c60ff168a60600151612e4a565b611528565b1515841515148015610bb65750610baf610baa89604001518c60ff16612ee5565b611528565b1515841515145b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec9061503c565b60405180910390fd5b610c0e610c098c60ff168a60a00151612f80565b611528565b1515841515148015610c3b5750610c34610c2f89608001518c60ff1661301d565b611528565b1515841515145b610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c71906150ce565b60405180910390fd5b610c93610c8e8c60ff168a60e001516130ba565b611528565b1515841515148015610cc05750610cb9610cb48960c001518c60ff1661315b565b611528565b1515841515145b610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf690615160565b60405180910390fd5b839850505050505050505092915050565b60008060009054906101000a900460ff16905090565b600080610d368360000151611528565b9050610d458360200151611528565b1515811515148015610d665750610d5f8360400151611528565b1515811515145b8015610d815750610d7a8360800151611528565b1515811515145b8015610d9c5750610d958360600151611528565b1515811515145b8015610db75750610db08360c00151611528565b1515811515145b8015610dd25750610dcb8360a00151611528565b1515811515145b610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890614dd4565b60405180910390fd5b80915050919050565b6000610e2461434d565b610e2c614392565b610e346143b3565b610e3c6143e2565b610e478488886113ea565b6000610e63610e5e866000015187602001516131fc565b611528565b905080600060026101000a81548160ff021916908315150217905550610e9185604001518660600151613293565b846000018181525050610eac8560000151866060015161332a565b846020018181525050610ec7856040015186602001516133c2565b8460400181815250506000610edb85610760565b905081151581151514610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a906151cc565b60405180910390fd5b610f3586608001518760a0015161345a565b846000018181525050610f5086600001518760a001516134f1565b846020018181525050610f6b86608001518760200151613589565b846040018181525050610f8686604001518760a00151613621565b846060018181525050610fa1866080015187606001516136b9565b8460800181815250506000610fb58561132c565b905080151583151514610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490615238565b60405180910390fd5b61100f8760c001518860e00151613751565b84600001818152505061102a87600001518860e001516137e8565b8460200181815250506110458760c001518860200151613880565b84604001818152505061106087604001518860e00151613918565b84606001818152505061107b8760c0015188606001516139b0565b84608001818152505061109687608001518860e00151613a48565b8460a00181815250506110b18760c001518860a00151613ae0565b8460c001818152505060006110c585610d26565b90508015158415151461110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906152a4565b60405180910390fd5b61112361111e8c8a60200151613b78565b611528565b151584151514801561114d575061114661114189600001518c613c12565b611528565b1515841515145b61118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390615336565b60405180910390fd5b6111a56111a08c60ff168a60600151613cac565b611528565b15158415151480156111d257506111cb6111c689604001518c60ff16613d47565b611528565b1515841515145b611211576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611208906153c8565b60405180910390fd5b61122a6112258c60ff168a60a00151613de2565b611528565b1515841515148015611257575061125061124b89608001518c60ff16613e7f565b611528565b1515841515145b611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d9061545a565b60405180910390fd5b6112af6112aa8c60ff168a60e00151613f1c565b611528565b15158415151480156112dc57506112d56112d08960c001518c60ff16613fbd565b611528565b1515841515145b61131b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611312906154ec565b60405180910390fd5b839850505050505050505092915050565b60008061133c8360000151611528565b905061134b8360200151611528565b151581151514801561136c57506113658360400151611528565b1515811515145b801561138757506113808360800151611528565b1515811515145b80156113a2575061139b8360600151611528565b1515811515145b6113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890614dd4565b60405180910390fd5b80915050919050565b6113f38261405e565b8360000181815250506114058161405e565b83602001818152505061141a8260ff166140ff565b83604001818152505061142f8160ff166140ff565b8360600181815250506114448260ff166141a1565b8360800181815250506114598160ff166141a1565b8360a001818152505061146e8260ff16614245565b8360c00181815250506114838160ff16614245565b8360e0018181525050505050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e6114bd60018060006142ec565b85856040518463ffffffff1660e01b81526004016114dd93929190615556565b6020604051808303816000875af11580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152091906155b9565b905092915050565b600080606473ffffffffffffffffffffffffffffffffffffffff16630cfed5616000600481111561155c5761155b6155e6565b5b60f81b856040518363ffffffff1660e01b815260040161157d929190615650565b6020604051808303816000875af115801561159c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c091906155b9565b90506000811415915050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e6115fb60028060006142ec565b85856040518463ffffffff1660e01b815260040161161b93929190615556565b6020604051808303816000875af115801561163a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165e91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e6116936001600260006142ec565b85856040518463ffffffff1660e01b81526004016116b393929190615556565b6020604051808303816000875af11580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f691906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e61172b6002600160006142ec565b85856040518463ffffffff1660e01b815260040161174b93929190615556565b6020604051808303816000875af115801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178e91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e6117c260038060006142ec565b85856040518463ffffffff1660e01b81526004016117e293929190615556565b6020604051808303816000875af1158015611801573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182591906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e61185a6001600360006142ec565b85856040518463ffffffff1660e01b815260040161187a93929190615556565b6020604051808303816000875af1158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bd91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e6118f26003600160006142ec565b85856040518463ffffffff1660e01b815260040161191293929190615556565b6020604051808303816000875af1158015611931573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195591906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e61198a6002600360006142ec565b85856040518463ffffffff1660e01b81526004016119aa93929190615556565b6020604051808303816000875af11580156119c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ed91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611a226003600260006142ec565b85856040518463ffffffff1660e01b8152600401611a4293929190615556565b6020604051808303816000875af1158015611a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8591906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611ab960048060006142ec565b85856040518463ffffffff1660e01b8152600401611ad993929190615556565b6020604051808303816000875af1158015611af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1c91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611b516001600460006142ec565b85856040518463ffffffff1660e01b8152600401611b7193929190615556565b6020604051808303816000875af1158015611b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb491906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611be96004600160006142ec565b85856040518463ffffffff1660e01b8152600401611c0993929190615556565b6020604051808303816000875af1158015611c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4c91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611c816002600460006142ec565b85856040518463ffffffff1660e01b8152600401611ca193929190615556565b6020604051808303816000875af1158015611cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce491906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611d196004600260006142ec565b85856040518463ffffffff1660e01b8152600401611d3993929190615556565b6020604051808303816000875af1158015611d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7c91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611db16003600460006142ec565b85856040518463ffffffff1660e01b8152600401611dd193929190615556565b6020604051808303816000875af1158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1491906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611e496004600360006142ec565b85856040518463ffffffff1660e01b8152600401611e6993929190615556565b6020604051808303816000875af1158015611e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eac91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611ee060018060016142ec565b8560ff16856040518463ffffffff1660e01b8152600401611f0393929190615556565b6020604051808303816000875af1158015611f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4691906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e611f7a60018060026142ec565b858560ff166040518463ffffffff1660e01b8152600401611f9d93929190615556565b6020604051808303816000875af1158015611fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe091906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e61201460028060016142ec565b8561ffff16856040518463ffffffff1660e01b815260040161203893929190615556565b6020604051808303816000875af1158015612057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207b91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e6120af60028060026142ec565b858561ffff166040518463ffffffff1660e01b81526004016120d393929190615556565b6020604051808303816000875af11580156120f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211691906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e61214a60038060016142ec565b8563ffffffff16856040518463ffffffff1660e01b815260040161217093929190615556565b6020604051808303816000875af115801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b391906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e6121e760038060026142ec565b858563ffffffff166040518463ffffffff1660e01b815260040161220d93929190615556565b6020604051808303816000875af115801561222c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225091906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e61228460048060016142ec565b8567ffffffffffffffff16856040518463ffffffff1660e01b81526004016122ae93929190615556565b6020604051808303816000875af11580156122cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f191906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff16636d82e45e61232560048060026142ec565b858567ffffffffffffffff166040518463ffffffff1660e01b815260040161234f93929190615556565b6020604051808303816000875af115801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c6123c660018060006142ec565b85856040518463ffffffff1660e01b81526004016123e693929190615556565b6020604051808303816000875af1158015612405573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242991906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c61245d60028060006142ec565b85856040518463ffffffff1660e01b815260040161247d93929190615556565b6020604051808303816000875af115801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c091906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c6124f56001600260006142ec565b85856040518463ffffffff1660e01b815260040161251593929190615556565b6020604051808303816000875af1158015612534573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255891906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c61258d6002600160006142ec565b85856040518463ffffffff1660e01b81526004016125ad93929190615556565b6020604051808303816000875af11580156125cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f091906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c61262460038060006142ec565b85856040518463ffffffff1660e01b815260040161264493929190615556565b6020604051808303816000875af1158015612663573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268791906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c6126bc6001600360006142ec565b85856040518463ffffffff1660e01b81526004016126dc93929190615556565b6020604051808303816000875af11580156126fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271f91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c6127546003600160006142ec565b85856040518463ffffffff1660e01b815260040161277493929190615556565b6020604051808303816000875af1158015612793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b791906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c6127ec6002600360006142ec565b85856040518463ffffffff1660e01b815260040161280c93929190615556565b6020604051808303816000875af115801561282b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284f91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c6128846003600260006142ec565b85856040518463ffffffff1660e01b81526004016128a493929190615556565b6020604051808303816000875af11580156128c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e791906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c61291b60048060006142ec565b85856040518463ffffffff1660e01b815260040161293b93929190615556565b6020604051808303816000875af115801561295a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297e91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c6129b36001600460006142ec565b85856040518463ffffffff1660e01b81526004016129d393929190615556565b6020604051808303816000875af11580156129f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1691906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612a4b6004600160006142ec565b85856040518463ffffffff1660e01b8152600401612a6b93929190615556565b6020604051808303816000875af1158015612a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aae91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612ae36002600460006142ec565b85856040518463ffffffff1660e01b8152600401612b0393929190615556565b6020604051808303816000875af1158015612b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4691906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612b7b6004600260006142ec565b85856040518463ffffffff1660e01b8152600401612b9b93929190615556565b6020604051808303816000875af1158015612bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bde91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612c136003600460006142ec565b85856040518463ffffffff1660e01b8152600401612c3393929190615556565b6020604051808303816000875af1158015612c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7691906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612cab6004600360006142ec565b85856040518463ffffffff1660e01b8152600401612ccb93929190615556565b6020604051808303816000875af1158015612cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0e91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612d4260018060016142ec565b8560ff16856040518463ffffffff1660e01b8152600401612d6593929190615556565b6020604051808303816000875af1158015612d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da891906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612ddc60018060026142ec565b858560ff166040518463ffffffff1660e01b8152600401612dff93929190615556565b6020604051808303816000875af1158015612e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e4291906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612e7660028060016142ec565b8561ffff16856040518463ffffffff1660e01b8152600401612e9a93929190615556565b6020604051808303816000875af1158015612eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edd91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612f1160028060026142ec565b858561ffff166040518463ffffffff1660e01b8152600401612f3593929190615556565b6020604051808303816000875af1158015612f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7891906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c612fac60038060016142ec565b8563ffffffff16856040518463ffffffff1660e01b8152600401612fd293929190615556565b6020604051808303816000875af1158015612ff1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301591906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c61304960038060026142ec565b858563ffffffff166040518463ffffffff1660e01b815260040161306f93929190615556565b6020604051808303816000875af115801561308e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b291906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c6130e660048060016142ec565b8567ffffffffffffffff16856040518463ffffffff1660e01b815260040161311093929190615556565b6020604051808303816000875af115801561312f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315391906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663145fca2c61318760048060026142ec565b858567ffffffffffffffff166040518463ffffffff1660e01b81526004016131b193929190615556565b6020604051808303816000875af11580156131d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f491906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd14869361322860018060006142ec565b85856040518463ffffffff1660e01b815260040161324893929190615556565b6020604051808303816000875af1158015613267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328b91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd1486936132bf60028060006142ec565b85856040518463ffffffff1660e01b81526004016132df93929190615556565b6020604051808303816000875af11580156132fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332291906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd1486936133576001600260006142ec565b85856040518463ffffffff1660e01b815260040161337793929190615556565b6020604051808303816000875af1158015613396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ba91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd1486936133ef6002600160006142ec565b85856040518463ffffffff1660e01b815260040161340f93929190615556565b6020604051808303816000875af115801561342e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345291906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd14869361348660038060006142ec565b85856040518463ffffffff1660e01b81526004016134a693929190615556565b6020604051808303816000875af11580156134c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e991906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd14869361351e6001600360006142ec565b85856040518463ffffffff1660e01b815260040161353e93929190615556565b6020604051808303816000875af115801561355d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061358191906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd1486936135b66003600160006142ec565b85856040518463ffffffff1660e01b81526004016135d693929190615556565b6020604051808303816000875af11580156135f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361991906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd14869361364e6002600360006142ec565b85856040518463ffffffff1660e01b815260040161366e93929190615556565b6020604051808303816000875af115801561368d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b191906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd1486936136e66003600260006142ec565b85856040518463ffffffff1660e01b815260040161370693929190615556565b6020604051808303816000875af1158015613725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374991906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd14869361377d60048060006142ec565b85856040518463ffffffff1660e01b815260040161379d93929190615556565b6020604051808303816000875af11580156137bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e091906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd1486936138156001600460006142ec565b85856040518463ffffffff1660e01b815260040161383593929190615556565b6020604051808303816000875af1158015613854573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387891906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd1486936138ad6004600160006142ec565b85856040518463ffffffff1660e01b81526004016138cd93929190615556565b6020604051808303816000875af11580156138ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391091906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd1486936139456002600460006142ec565b85856040518463ffffffff1660e01b815260040161396593929190615556565b6020604051808303816000875af1158015613984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a891906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd1486936139dd6004600260006142ec565b85856040518463ffffffff1660e01b81526004016139fd93929190615556565b6020604051808303816000875af1158015613a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4091906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613a756003600460006142ec565b85856040518463ffffffff1660e01b8152600401613a9593929190615556565b6020604051808303816000875af1158015613ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad891906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613b0d6004600360006142ec565b85856040518463ffffffff1660e01b8152600401613b2d93929190615556565b6020604051808303816000875af1158015613b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7091906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613ba460018060016142ec565b8560ff16856040518463ffffffff1660e01b8152600401613bc793929190615556565b6020604051808303816000875af1158015613be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0a91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613c3e60018060026142ec565b858560ff166040518463ffffffff1660e01b8152600401613c6193929190615556565b6020604051808303816000875af1158015613c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca491906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613cd860028060016142ec565b8561ffff16856040518463ffffffff1660e01b8152600401613cfc93929190615556565b6020604051808303816000875af1158015613d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d3f91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613d7360028060026142ec565b858561ffff166040518463ffffffff1660e01b8152600401613d9793929190615556565b6020604051808303816000875af1158015613db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dda91906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613e0e60038060016142ec565b8563ffffffff16856040518463ffffffff1660e01b8152600401613e3493929190615556565b6020604051808303816000875af1158015613e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e7791906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613eab60038060026142ec565b858563ffffffff166040518463ffffffff1660e01b8152600401613ed193929190615556565b6020604051808303816000875af1158015613ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1491906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613f4860048060016142ec565b8567ffffffffffffffff16856040518463ffffffff1660e01b8152600401613f7293929190615556565b6020604051808303816000875af1158015613f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb591906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663dd148693613fe960048060026142ec565b858567ffffffffffffffff166040518463ffffffff1660e01b815260040161401393929190615556565b6020604051808303816000875af1158015614032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405691906155b9565b905092915050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b6060016004811115614091576140906155e6565b5b60f81b8460ff166040518363ffffffff1660e01b81526004016140b5929190615650565b6020604051808303816000875af11580156140d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f891906155b9565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b6060026004811115614132576141316155e6565b5b60f81b8461ffff166040518363ffffffff1660e01b8152600401614157929190615650565b6020604051808303816000875af1158015614176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419a91906155b9565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b60600360048111156141d4576141d36155e6565b5b60f81b8463ffffffff166040518363ffffffff1660e01b81526004016141fb929190615650565b6020604051808303816000875af115801561421a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423e91906155b9565b9050919050565b6000606473ffffffffffffffffffffffffffffffffffffffff1663d9b60b60600480811115614277576142766155e6565b5b60f81b8467ffffffffffffffff166040518363ffffffff1660e01b81526004016142a2929190615650565b6020604051808303816000875af11580156142c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e591906155b9565b9050919050565b6000816002811115614301576143006155e6565b5b60ff166008846004811115614319576143186155e6565b5b61ffff16901b61ffff166010866004811115614338576143376155e6565b5b62ffffff16901b171760e81b90509392505050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600060ff82169050919050565b6144448161442e565b811461444f57600080fd5b50565b6000813590506144618161443b565b92915050565b6000806040838503121561447e5761447d614429565b5b600061448c85828601614452565b925050602061449d85828601614452565b9150509250929050565b60008115159050919050565b6144bc816144a7565b82525050565b60006020820190506144d760008301846144b3565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61452b826144e2565b810181811067ffffffffffffffff8211171561454a576145496144f3565b5b80604052505050565b600061455d61441f565b90506145698282614522565b919050565b6000819050919050565b6145818161456e565b811461458c57600080fd5b50565b60008135905061459e81614578565b92915050565b6000606082840312156145ba576145b96144dd565b5b6145c46060614553565b905060006145d48482850161458f565b60008301525060206145e88482850161458f565b60208301525060406145fc8482850161458f565b60408301525092915050565b60006060828403121561461e5761461d614429565b5b600061462c848285016145a4565b91505092915050565b600060e0828403121561464b5761464a6144dd565b5b61465560e0614553565b905060006146658482850161458f565b60008301525060206146798482850161458f565b602083015250604061468d8482850161458f565b60408301525060606146a18482850161458f565b60608301525060806146b58482850161458f565b60808301525060a06146c98482850161458f565b60a08301525060c06146dd8482850161458f565b60c08301525092915050565b600060e082840312156146ff576146fe614429565b5b600061470d84828501614635565b91505092915050565b600060a0828403121561472c5761472b6144dd565b5b61473660a0614553565b905060006147468482850161458f565b600083015250602061475a8482850161458f565b602083015250604061476e8482850161458f565b60408301525060606147828482850161458f565b60608301525060806147968482850161458f565b60808301525092915050565b600060a082840312156147b8576147b7614429565b5b60006147c684828501614716565b91505092915050565b6147d88161456e565b81146147e357600080fd5b50565b6000813590506147f5816147cf565b92915050565b6148048161456e565b811461480f57600080fd5b50565b600081359050614821816147fb565b92915050565b6148308161456e565b811461483b57600080fd5b50565b60008135905061484d81614827565b92915050565b61485c8161456e565b811461486757600080fd5b50565b60008135905061487981614853565b92915050565b60006101008284031215614896576148956144dd565b5b6148a1610100614553565b905060006148b1848285016147e6565b60008301525060206148c5848285016147e6565b60208301525060406148d984828501614812565b60408301525060606148ed84828501614812565b60608301525060806149018482850161483e565b60808301525060a06149158482850161483e565b60a08301525060c06149298482850161486a565b60c08301525060e061493d8482850161486a565b60e08301525092915050565b6000806000610140848603121561496357614962614429565b5b60006149718682870161487f565b93505061010061498386828701614452565b92505061012061499586828701614452565b9150509250925092565b600082825260208201905092915050565b7f6774546573743a2063617374203136206661696c656400000000000000000000600082015250565b60006149e660168361499f565b91506149f1826149b0565b602082019050919050565b60006020820190508181036000830152614a15816149d9565b9050919050565b7f6774546573743a2063617374203332206661696c656400000000000000000000600082015250565b6000614a5260168361499f565b9150614a5d82614a1c565b602082019050919050565b60006020820190508181036000830152614a8181614a45565b9050919050565b7f6774546573743a2063617374203634206661696c656400000000000000000000600082015250565b6000614abe60168361499f565b9150614ac982614a88565b602082019050919050565b60006020820190508181036000830152614aed81614ab1565b9050919050565b7f6774546573743a2074657374203820626974732077697468207363616c61722060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b6000614b5060268361499f565b9150614b5b82614af4565b604082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f6774546573743a207465737420313620626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000614be260278361499f565b9150614bed82614b86565b604082019050919050565b60006020820190508181036000830152614c1181614bd5565b9050919050565b7f6774546573743a207465737420333220626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000614c7460278361499f565b9150614c7f82614c18565b604082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f6774546573743a207465737420363420626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000614d0660278361499f565b9150614d1182614caa565b604082019050919050565b60006020820190508181036000830152614d3581614cf9565b9050919050565b7f64656372797074416e64436f6d70617265416c6c526573756c74733a2046616960008201527f6c656420746f206465637279707420616e6420636f6d7061726520616c6c207260208201527f6573756c74730000000000000000000000000000000000000000000000000000604082015250565b6000614dbe60468361499f565b9150614dc982614d3c565b606082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f6c65546573743a2063617374203136206661696c656400000000000000000000600082015250565b6000614e2a60168361499f565b9150614e3582614df4565b602082019050919050565b60006020820190508181036000830152614e5981614e1d565b9050919050565b7f6c65546573743a2063617374203332206661696c656400000000000000000000600082015250565b6000614e9660168361499f565b9150614ea182614e60565b602082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f6c65546573743a2063617374203634206661696c656400000000000000000000600082015250565b6000614f0260168361499f565b9150614f0d82614ecc565b602082019050919050565b60006020820190508181036000830152614f3181614ef5565b9050919050565b7f6c65546573743a2074657374203820626974732077697468207363616c61722060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b6000614f9460268361499f565b9150614f9f82614f38565b604082019050919050565b60006020820190508181036000830152614fc381614f87565b9050919050565b7f6c65546573743a207465737420313620626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b600061502660278361499f565b915061503182614fca565b604082019050919050565b6000602082019050818103600083015261505581615019565b9050919050565b7f6c65546573743a207465737420333220626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b60006150b860278361499f565b91506150c38261505c565b604082019050919050565b600060208201905081810360008301526150e7816150ab565b9050919050565b7f6c65546573743a207465737420363420626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b600061514a60278361499f565b9150615155826150ee565b604082019050919050565b600060208201905081810360008301526151798161513d565b9050919050565b7f6c6574546573743a2063617374203136206661696c6564000000000000000000600082015250565b60006151b660178361499f565b91506151c182615180565b602082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b7f6c6574546573743a2063617374203332206661696c6564000000000000000000600082015250565b600061522260178361499f565b915061522d826151ec565b602082019050919050565b6000602082019050818103600083015261525181615215565b9050919050565b7f6c6574546573743a2063617374203634206661696c6564000000000000000000600082015250565b600061528e60178361499f565b915061529982615258565b602082019050919050565b600060208201905081810360008301526152bd81615281565b9050919050565b7f6c6574546573743a2074657374203820626974732077697468207363616c617260008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b600061532060278361499f565b915061532b826152c4565b604082019050919050565b6000602082019050818103600083015261534f81615313565b9050919050565b7f6c6574546573743a207465737420313620626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b60006153b260288361499f565b91506153bd82615356565b604082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b7f6c6574546573743a207465737420333220626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b600061544460288361499f565b915061544f826153e8565b604082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b7f6c6574546573743a207465737420363420626974732077697468207363616c6160008201527f72206661696c6564000000000000000000000000000000000000000000000000602082015250565b60006154d660288361499f565b91506154e18261547a565b604082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b60007fffffff000000000000000000000000000000000000000000000000000000000082169050919050565b6155418161550c565b82525050565b6155508161456e565b82525050565b600060608201905061556b6000830186615538565b6155786020830185615547565b6155856040830184615547565b949350505050565b6155968161456e565b81146155a157600080fd5b50565b6000815190506155b38161558d565b92915050565b6000602082840312156155cf576155ce614429565b5b60006155dd848285016155a4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61564a81615615565b82525050565b60006040820190506156656000830185615641565b6156726020830184615547565b939250505056fea26469706673582212201e28dc3f17982ee0788f6aff18c7d18e47db88256da1a59466d02c500ab0c69664736f6c63430008140033";
336
+
337
+ type Comparison1TestsContractConstructorParams =
338
+ | [signer?: Signer]
339
+ | ConstructorParameters<typeof ContractFactory>;
340
+
341
+ const isSuperArgs = (
342
+ xs: Comparison1TestsContractConstructorParams
343
+ ): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
344
+
345
+ export class Comparison1TestsContract__factory extends ContractFactory {
346
+ constructor(...args: Comparison1TestsContractConstructorParams) {
347
+ if (isSuperArgs(args)) {
348
+ super(...args);
349
+ } else {
350
+ super(_abi, _bytecode, args[0]);
351
+ }
352
+ }
353
+
354
+ override getDeployTransaction(
355
+ overrides?: NonPayableOverrides & { from?: string }
356
+ ): Promise<ContractDeployTransaction> {
357
+ return super.getDeployTransaction(overrides || {});
358
+ }
359
+ override deploy(overrides?: NonPayableOverrides & { from?: string }) {
360
+ return super.deploy(overrides || {}) as Promise<
361
+ Comparison1TestsContract & {
362
+ deploymentTransaction(): ContractTransactionResponse;
363
+ }
364
+ >;
365
+ }
366
+ override connect(
367
+ runner: ContractRunner | null
368
+ ): Comparison1TestsContract__factory {
369
+ return super.connect(runner) as Comparison1TestsContract__factory;
370
+ }
371
+
372
+ static readonly bytecode = _bytecode;
373
+ static readonly abi = _abi;
374
+ static createInterface(): Comparison1TestsContractInterface {
375
+ return new Interface(_abi) as Comparison1TestsContractInterface;
376
+ }
377
+ static connect(
378
+ address: string,
379
+ runner?: ContractRunner | null
380
+ ): Comparison1TestsContract {
381
+ return new Contract(
382
+ address,
383
+ _abi,
384
+ runner
385
+ ) as unknown as Comparison1TestsContract;
386
+ }
387
+ }