@coti-io/coti-contracts 1.1.0 → 1.3.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 (433) hide show
  1. package/.github/workflows/npm-publish.yml +19 -15
  2. package/README.md +3 -1
  3. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.sol +452 -0
  4. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.sol +490 -0
  5. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +432 -0
  6. package/contracts/disperse/disperseToken/MintDisperser.sol +120 -0
  7. package/contracts/disperse/disperseToken/TokenDisperser.sol +139 -0
  8. package/contracts/messaging/PrivateMessaging.sol +456 -0
  9. package/contracts/mocks/messaging/PrivateMessagingHarness.sol +54 -0
  10. package/contracts/mocks/oracle/CotiPriceConsumerMock.sol +31 -0
  11. package/contracts/mocks/token/ERC20DecimalsMock.sol +21 -0
  12. package/contracts/mocks/token/ERC20Mock.sol +19 -0
  13. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +18 -0
  14. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +18 -0
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +44 -0
  16. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +23 -0
  17. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +29 -0
  18. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +9 -4
  19. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +39 -0
  20. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +29 -0
  21. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +18 -0
  22. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +12 -0
  23. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +123 -0
  24. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +122 -0
  25. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +65 -0
  26. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +65 -0
  27. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +64 -0
  28. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +64 -0
  29. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +98 -0
  30. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +98 -0
  31. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +44 -0
  32. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +44 -0
  33. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +55 -0
  34. package/contracts/mocks/utils/mpc/MinimalProxy.sol +27 -0
  35. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +267 -0
  36. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +334 -0
  37. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +24 -0
  38. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +24 -0
  39. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +93 -0
  40. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +116 -0
  41. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +157 -0
  42. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +133 -0
  43. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +137 -0
  44. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +32 -0
  45. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +32 -0
  46. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +36 -0
  47. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +36 -0
  48. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +29 -0
  49. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +29 -0
  50. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +32 -0
  51. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +32 -0
  52. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +59 -0
  53. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +63 -0
  54. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +99 -0
  55. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +7 -6
  56. package/contracts/node/CotiNodeRewards.sol +199 -0
  57. package/contracts/node/SoulboundNodeNFT.sol +519 -0
  58. package/contracts/oracle/CotiPriceConsumer.sol +103 -0
  59. package/contracts/oracle/ICotiPriceConsumer.sol +15 -0
  60. package/contracts/oracle/IStdReference.sol +26 -0
  61. package/contracts/privacyBridge/PrivacyBridge.sol +600 -0
  62. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +316 -0
  63. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +333 -0
  64. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +22 -0
  65. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +23 -0
  66. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +23 -0
  67. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +23 -0
  68. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +23 -0
  69. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +23 -0
  70. package/contracts/token/PrivateERC20/IPrivateERC20.sol +273 -40
  71. package/contracts/token/PrivateERC20/ITokenReceiver.sol +17 -0
  72. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +20 -0
  73. package/contracts/token/PrivateERC20/PrivateERC20.sol +861 -152
  74. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +17 -0
  75. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +13 -0
  76. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +17 -0
  77. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +17 -0
  78. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +17 -0
  79. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +17 -0
  80. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +13 -0
  81. package/contracts/utils/mpc/MpcCore.sol +10780 -4962
  82. package/contracts/utils/mpc/MpcInterface.sol +7 -2
  83. package/hardhat/gasPriceBump.ts +60 -0
  84. package/hardhat.config.ts +63 -12
  85. package/package.json +22 -4
  86. package/scripts/add-bridge-operators.cjs +87 -0
  87. package/scripts/deploy-coti-price-consumer-mainnet.cjs +49 -0
  88. package/scripts/deployCotiNodeRewards.ts +51 -0
  89. package/scripts/deploySoulboundNodeNFT.ts +57 -0
  90. package/scripts/redeploy-private-and-bridges.cjs +201 -0
  91. package/scripts/set-bridge-limits-mainnet.cjs +177 -0
  92. package/scripts/verify-mainnet-private-bridges.cjs +289 -0
  93. package/sonar-project.properties +11 -0
  94. package/test/messaging/PrivateMessaging.test.ts +158 -0
  95. package/test/privacyBridge/UnifiedPrivacyBridges.test.cjs +1663 -0
  96. package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +250 -0
  97. package/test/token/PrivateERC20/PrivateERC20.test.ts +1109 -268
  98. package/test/utils/mpc/Bitwise128.test.ts +92 -0
  99. package/test/utils/mpc/Bitwise256.test.ts +101 -0
  100. package/test/utils/mpc/BuildInputText128.test.ts +398 -0
  101. package/test/utils/mpc/CheckedArithmetic128.test.ts +45 -0
  102. package/test/utils/mpc/CheckedArithmetic256.test.ts +45 -0
  103. package/test/utils/mpc/Comparison128.test.ts +48 -0
  104. package/test/utils/mpc/Comparison256.test.ts +48 -0
  105. package/test/utils/mpc/InvalidCiphertext.test.ts +179 -0
  106. package/test/utils/mpc/InvalidCiphertext128.test.ts +179 -0
  107. package/test/utils/mpc/InvalidCiphertext256.test.ts +201 -0
  108. package/test/utils/mpc/InvalidTransfer128.test.ts +166 -0
  109. package/test/utils/mpc/InvalidTransfer256.test.ts +158 -0
  110. package/test/utils/mpc/MinMax128.test.ts +44 -0
  111. package/test/utils/mpc/MinMax256.test.ts +44 -0
  112. package/test/utils/mpc/MinimalProxyDemo.test.ts +280 -0
  113. package/test/utils/mpc/MpcOperations.test.ts +589 -0
  114. package/test/utils/mpc/MpcOperations128.test.ts +632 -0
  115. package/test/utils/mpc/Mux128.test.ts +41 -0
  116. package/test/utils/mpc/Mux256.test.ts +41 -0
  117. package/test/utils/mpc/NegativeCases.test.ts +478 -0
  118. package/test/utils/mpc/NegativeCases128.test.ts +237 -0
  119. package/test/utils/mpc/NegativeCases256.test.ts +236 -0
  120. package/test/utils/mpc/OnBoard128.test.ts +90 -0
  121. package/test/utils/mpc/OnBoard256.test.ts +114 -0
  122. package/test/utils/mpc/Precompile128.test.ts +51 -0
  123. package/test/utils/mpc/Precompile256.test.ts +115 -0
  124. package/test/utils/mpc/ProxyValidation.test.ts +199 -0
  125. package/test/utils/mpc/Random128.test.ts +47 -0
  126. package/test/utils/mpc/Random256.test.ts +47 -0
  127. package/test/utils/mpc/Shift128.test.ts +41 -0
  128. package/test/utils/mpc/Shift256.test.ts +41 -0
  129. package/test/utils/mpc/Transfer128.test.ts +46 -0
  130. package/test/utils/mpc/Transfer256.test.ts +46 -0
  131. package/test/utils/mpc/TransferWithAllowance128.test.ts +48 -0
  132. package/test/utils/mpc/TransferWithAllowance256.test.ts +48 -0
  133. package/test/utils/mpc/UpgradeablePrivacyProxy.test.ts +307 -0
  134. package/test/utils/mpc/ValidateCiphertext.test.ts +221 -0
  135. package/test/utils/mpc/ValidateCiphertext256.test.ts +161 -0
  136. package/test/utils/mpc/ValidateCiphertext256Decryption.test.ts +383 -0
  137. package/test/utils/mpc/WalletEncryptionFailures.test.ts +494 -0
  138. package/test/utils/privateErc20Helpers.ts +97 -0
  139. package/typechain-types/@openzeppelin/contracts/access/AccessControl.ts +324 -0
  140. package/typechain-types/@openzeppelin/contracts/access/AccessControlEnumerable.ts +361 -0
  141. package/typechain-types/@openzeppelin/contracts/access/IAccessControl.ts +292 -0
  142. package/typechain-types/@openzeppelin/contracts/access/IAccessControlEnumerable.ts +329 -0
  143. package/typechain-types/@openzeppelin/contracts/access/Ownable.ts +153 -0
  144. package/typechain-types/@openzeppelin/contracts/access/index.ts +8 -0
  145. package/typechain-types/@openzeppelin/contracts/index.ts +4 -0
  146. package/typechain-types/@openzeppelin/contracts/security/Pausable.ts +150 -0
  147. package/typechain-types/@openzeppelin/contracts/security/index.ts +4 -0
  148. package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +330 -0
  149. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +262 -0
  150. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +286 -0
  151. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.ts +143 -0
  152. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +5 -0
  153. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +7 -0
  154. package/typechain-types/@openzeppelin/contracts/token/ERC721/ERC721.ts +420 -0
  155. package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.ts +420 -0
  156. package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
  157. package/typechain-types/@openzeppelin/contracts/token/ERC721/index.ts +3 -0
  158. package/typechain-types/@openzeppelin/contracts/token/index.ts +2 -0
  159. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.ts +679 -0
  160. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.ts +735 -0
  161. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.ts +734 -0
  162. package/typechain-types/contracts/disperse/coinByRatio/index.ts +6 -0
  163. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20.ts +97 -0
  164. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable.ts +95 -0
  165. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +228 -0
  166. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +6 -0
  167. package/typechain-types/contracts/disperse/disperseToken/TokenDisperser.ts +191 -0
  168. package/typechain-types/contracts/disperse/disperseToken/index.ts +6 -0
  169. package/typechain-types/contracts/disperse/index.ts +7 -0
  170. package/typechain-types/contracts/index.ts +10 -0
  171. package/typechain-types/contracts/messaging/PrivateMessaging.ts +871 -0
  172. package/typechain-types/contracts/messaging/index.ts +4 -0
  173. package/typechain-types/contracts/mocks/index.ts +4 -0
  174. package/typechain-types/contracts/mocks/messaging/PrivateMessagingHarness.ts +951 -0
  175. package/typechain-types/contracts/mocks/messaging/index.ts +4 -0
  176. package/typechain-types/contracts/mocks/oracle/CotiPriceConsumerMock.ts +163 -0
  177. package/typechain-types/contracts/mocks/oracle/index.ts +4 -0
  178. package/typechain-types/contracts/mocks/token/ERC20DecimalsMock.ts +349 -0
  179. package/typechain-types/contracts/mocks/token/ERC20Mock.ts +368 -0
  180. package/typechain-types/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.ts +108 -0
  181. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.ts +1892 -0
  182. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.ts +1296 -0
  183. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.ts +1270 -0
  184. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.ts +166 -0
  185. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +827 -78
  186. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted.ts +102 -0
  187. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock.ts +154 -0
  188. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
  189. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.ts +155 -0
  190. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.ts +107 -0
  191. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.ts +100 -0
  192. package/typechain-types/contracts/mocks/token/PrivateERC20/index.ts +10 -0
  193. package/typechain-types/contracts/mocks/token/index.ts +2 -0
  194. package/typechain-types/contracts/mocks/utils/mpc/{Arithmetic128BitTestsContract.ts → Arithmetic128TestsContract.ts} +96 -126
  195. package/typechain-types/contracts/mocks/utils/mpc/{Arithmetic256BitTestsContract.ts → Arithmetic256TestsContract.ts} +97 -133
  196. package/typechain-types/contracts/mocks/utils/mpc/{Bitwise128BitTestsContract.ts → Bitwise128TestsContract.ts} +52 -59
  197. package/typechain-types/contracts/mocks/utils/mpc/{Bitwise256BitTestsContract.ts → Bitwise256TestsContract.ts} +52 -59
  198. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.ts +206 -0
  199. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.ts +206 -0
  200. package/typechain-types/contracts/mocks/utils/mpc/{Comparison128BitTestsContract.ts → Comparison128TestsContract.ts} +115 -97
  201. package/typechain-types/contracts/mocks/utils/mpc/{Comparison256BitTestsContract.ts → Comparison256TestsContract.ts} +115 -97
  202. package/typechain-types/contracts/mocks/utils/mpc/MinMax128TestsContract.ts +142 -0
  203. package/typechain-types/contracts/mocks/utils/mpc/MinMax256TestsContract.ts +142 -0
  204. package/typechain-types/contracts/mocks/utils/mpc/MinimalImplementation.ts +259 -0
  205. package/typechain-types/contracts/mocks/utils/mpc/MinimalProxy.ts +90 -0
  206. package/typechain-types/contracts/mocks/utils/mpc/MpcOperations128TestContract.ts +388 -0
  207. package/typechain-types/contracts/mocks/utils/mpc/MpcOperationsTestContract.ts +455 -0
  208. package/typechain-types/contracts/mocks/utils/mpc/Mux128TestsContract.ts +109 -0
  209. package/typechain-types/contracts/mocks/utils/mpc/Mux256TestsContract.ts +109 -0
  210. package/typechain-types/contracts/mocks/utils/mpc/OnBoard128TestsContract.ts +166 -0
  211. package/typechain-types/contracts/mocks/utils/mpc/OnBoard256TestsContract.ts +194 -0
  212. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV1.ts +385 -0
  213. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV2.ts +441 -0
  214. package/typechain-types/contracts/mocks/utils/mpc/PrivacyProxy.ts +201 -0
  215. package/typechain-types/contracts/mocks/utils/mpc/Random128TestsContract.ts +131 -0
  216. package/typechain-types/contracts/mocks/utils/mpc/Random256TestsContract.ts +131 -0
  217. package/typechain-types/contracts/mocks/utils/mpc/Shift128TestsContract.ts +142 -0
  218. package/typechain-types/contracts/mocks/utils/mpc/Shift256TestsContract.ts +142 -0
  219. package/typechain-types/contracts/mocks/utils/mpc/Transfer128TestsContract.ts +109 -0
  220. package/typechain-types/contracts/mocks/utils/mpc/Transfer256TestsContract.ts +109 -0
  221. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.ts +128 -0
  222. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.ts +128 -0
  223. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.ts +198 -0
  224. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.ts +182 -0
  225. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.ts +257 -0
  226. package/typechain-types/contracts/mocks/utils/mpc/index.ts +32 -8
  227. package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.ts +6 -6
  228. package/typechain-types/contracts/node/CotiNodeRewards.ts +566 -0
  229. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/IERC5192.ts +123 -0
  230. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT.ts +975 -0
  231. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
  232. package/typechain-types/contracts/node/index.ts +6 -0
  233. package/typechain-types/contracts/oracle/CotiPriceConsumer.ts +256 -0
  234. package/typechain-types/contracts/oracle/ICotiPriceConsumer.ts +119 -0
  235. package/typechain-types/contracts/oracle/IStdReference.ts +136 -0
  236. package/typechain-types/contracts/oracle/index.ts +6 -0
  237. package/typechain-types/contracts/privacyBridge/PrivacyBridge.ts +1628 -0
  238. package/typechain-types/contracts/privacyBridge/PrivacyBridgeCotiNative.ts +1870 -0
  239. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals.ts +84 -0
  240. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20.ts +1892 -0
  241. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
  242. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDCe.ts +1892 -0
  243. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDT.ts +1892 -0
  244. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWADA.ts +1892 -0
  245. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWBTC.ts +1892 -0
  246. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWETH.ts +1892 -0
  247. package/typechain-types/contracts/privacyBridge/PrivacyBridgegCoti.ts +1892 -0
  248. package/typechain-types/contracts/privacyBridge/index.ts +13 -0
  249. package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +507 -70
  250. package/typechain-types/contracts/token/PrivateERC20/ITokenReceiver.ts +100 -0
  251. package/typechain-types/contracts/token/PrivateERC20/ITokenReceiverEncrypted.ts +99 -0
  252. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +833 -68
  253. package/typechain-types/contracts/token/PrivateERC20/index.ts +4 -0
  254. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.ts +1270 -0
  255. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTI.ts +1270 -0
  256. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.ts +1270 -0
  257. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.ts +1270 -0
  258. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.ts +1270 -0
  259. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.ts +1270 -0
  260. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.ts +1270 -0
  261. package/typechain-types/contracts/token/PrivateERC20/tokens/index.ts +10 -0
  262. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +111 -10
  263. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControlEnumerable__factory.ts +276 -0
  264. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControl__factory.ts +229 -0
  265. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControlEnumerable__factory.ts +244 -0
  266. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControl__factory.ts +197 -0
  267. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +74 -0
  268. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +8 -0
  269. package/typechain-types/factories/@openzeppelin/contracts/index.ts +2 -0
  270. package/typechain-types/factories/@openzeppelin/contracts/security/Pausable__factory.ts +61 -0
  271. package/typechain-types/factories/@openzeppelin/contracts/security/index.ts +4 -0
  272. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +356 -0
  273. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +205 -0
  274. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +247 -0
  275. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit__factory.ts +100 -0
  276. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +5 -0
  277. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +6 -0
  278. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +416 -0
  279. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata__factory.ts +355 -0
  280. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
  281. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/index.ts +2 -0
  282. package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +1 -0
  283. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1__factory.ts +791 -0
  284. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow__factory.ts +711 -0
  285. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +759 -0
  286. package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +6 -0
  287. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20__factory.ts +43 -0
  288. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable__factory.ts +35 -0
  289. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +203 -0
  290. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +6 -0
  291. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +198 -0
  292. package/typechain-types/factories/contracts/disperse/disperseToken/index.ts +5 -0
  293. package/typechain-types/factories/contracts/disperse/index.ts +5 -0
  294. package/typechain-types/factories/contracts/index.ts +5 -0
  295. package/typechain-types/factories/contracts/messaging/PrivateMessaging__factory.ts +1035 -0
  296. package/typechain-types/factories/contracts/messaging/index.ts +4 -0
  297. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  298. package/typechain-types/factories/contracts/mocks/index.ts +2 -0
  299. package/typechain-types/factories/contracts/mocks/messaging/PrivateMessagingHarness__factory.ts +1161 -0
  300. package/typechain-types/factories/contracts/mocks/messaging/index.ts +4 -0
  301. package/typechain-types/factories/contracts/mocks/oracle/CotiPriceConsumerMock__factory.ts +159 -0
  302. package/typechain-types/factories/contracts/mocks/oracle/index.ts +4 -0
  303. package/typechain-types/factories/contracts/mocks/token/ERC20DecimalsMock__factory.ts +394 -0
  304. package/typechain-types/factories/contracts/mocks/token/ERC20Mock__factory.ts +392 -0
  305. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock__factory.ts +125 -0
  306. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock__factory.ts +1797 -0
  307. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock__factory.ts +1514 -0
  308. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock__factory.ts +1466 -0
  309. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock__factory.ts +165 -0
  310. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +975 -127
  311. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted__factory.ts +54 -0
  312. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock__factory.ts +159 -0
  313. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
  314. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock__factory.ts +164 -0
  315. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock__factory.ts +130 -0
  316. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock__factory.ts +102 -0
  317. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/index.ts +9 -0
  318. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  319. package/typechain-types/factories/contracts/mocks/token/index.ts +2 -0
  320. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +330 -0
  321. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +330 -0
  322. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  323. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +184 -0
  324. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +184 -0
  325. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  326. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +203 -0
  327. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +203 -0
  328. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  329. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +295 -0
  330. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  331. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +295 -0
  332. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  333. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +147 -0
  334. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +147 -0
  335. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  336. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +263 -0
  337. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +104 -0
  338. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  339. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  340. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +723 -0
  341. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1410 -0
  342. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +115 -0
  343. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +115 -0
  344. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  345. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +175 -0
  346. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +205 -0
  347. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +521 -0
  348. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +648 -0
  349. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +179 -0
  350. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +131 -0
  351. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +131 -0
  352. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +147 -0
  353. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +147 -0
  354. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  355. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  356. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +135 -0
  357. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +135 -0
  358. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  359. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  360. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +154 -0
  361. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +154 -0
  362. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  363. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  364. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  365. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  366. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  367. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  368. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +190 -0
  369. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +210 -0
  370. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +260 -0
  371. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +32 -8
  372. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +10 -28
  373. package/typechain-types/factories/contracts/node/CotiNodeRewards__factory.ts +549 -0
  374. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/IERC5192__factory.ts +54 -0
  375. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT__factory.ts +947 -0
  376. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
  377. package/typechain-types/factories/contracts/node/index.ts +5 -0
  378. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
  379. package/typechain-types/factories/contracts/oracle/CotiPriceConsumer__factory.ts +295 -0
  380. package/typechain-types/factories/contracts/oracle/ICotiPriceConsumer__factory.ts +73 -0
  381. package/typechain-types/factories/contracts/oracle/IStdReference__factory.ts +107 -0
  382. package/typechain-types/factories/contracts/oracle/index.ts +6 -0
  383. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeCotiNative__factory.ts +1676 -0
  384. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals__factory.ts +38 -0
  385. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20__factory.ts +1678 -0
  386. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
  387. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDCe__factory.ts +1782 -0
  388. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDT__factory.ts +1782 -0
  389. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWADA__factory.ts +1782 -0
  390. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWBTC__factory.ts +1782 -0
  391. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWETH__factory.ts +1782 -0
  392. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridge__factory.ts +1367 -0
  393. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgegCoti__factory.ts +1782 -0
  394. package/typechain-types/factories/contracts/privacyBridge/index.ts +12 -0
  395. package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +639 -61
  396. package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiverEncrypted__factory.ts +53 -0
  397. package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiver__factory.ts +54 -0
  398. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +986 -120
  399. package/typechain-types/factories/contracts/token/PrivateERC20/index.ts +3 -0
  400. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC__factory.ts +1445 -0
  401. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken__factory.ts +1451 -0
  402. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTI__factory.ts +1442 -0
  403. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateTetherUSD__factory.ts +1445 -0
  404. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedADA__factory.ts +1445 -0
  405. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC__factory.ts +1445 -0
  406. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedEther__factory.ts +1451 -0
  407. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/index.ts +10 -0
  408. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
  409. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +126 -0
  410. package/typechain-types/hardhat.d.ts +1772 -278
  411. package/typechain-types/index.ts +182 -16
  412. package/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.sol +0 -260
  413. package/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.sol +0 -264
  414. package/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.sol +0 -91
  415. package/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.sol +0 -91
  416. package/contracts/mocks/utils/mpc/Comparison128BitTestsContract.sol +0 -158
  417. package/contracts/mocks/utils/mpc/Comparison256BitTestsContract.sol +0 -158
  418. package/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.sol +0 -185
  419. package/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.sol +0 -190
  420. package/contracts/mocks/utils/mpc/README.md +0 -486
  421. package/test/utils/mpc/Unsigned128BitIntegers.test.ts +0 -945
  422. package/test/utils/mpc/Unsigned256BitIntegers.test.ts +0 -1124
  423. package/test/utils/mpc/helpers.ts +0 -77
  424. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.ts +0 -302
  425. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.ts +0 -322
  426. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract__factory.ts +0 -349
  427. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract__factory.ts +0 -364
  428. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128BitTestsContract__factory.ts +0 -182
  429. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256BitTestsContract__factory.ts +0 -182
  430. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128BitTestsContract__factory.ts +0 -255
  431. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256BitTestsContract__factory.ts +0 -255
  432. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract__factory.ts +0 -332
  433. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract__factory.ts +0 -380
@@ -246,7 +246,7 @@ const _abi = [
246
246
  ] as const;
247
247
 
248
248
  const _bytecode =
249
- "0x6080604052600080546001600160801b031916905534801561002057600080fd5b50611a1f806100306000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80639266057811610076578063d3d8aff41161005b578063d3d8aff414610284578063dbc221d0146102a2578063dfbba08f146102b557600080fd5b8063926605781461025d578063aacc5a171461027257600080fd5b806334c7c817116100a757806334c7c81714610202578063598f9579146102295780635adb57781461025557600080fd5b8063103bdb87146100c3578063276b8288146101dd575b600080fd5b6000546040805160ff70010000000000000000000000000000000084048116151582527101000000000000000000000000000000000084048116151560208301527201000000000000000000000000000000000000840481161515928201929092527301000000000000000000000000000000000000008304821615156060820152740100000000000000000000000000000000000000008304821615156080820152750100000000000000000000000000000000000000000083048216151560a082015276010000000000000000000000000000000000000000000083048216151560c08201527701000000000000000000000000000000000000000000000090920416151560e0820152610100015b60405180910390f35b6101f06101eb366004611675565b6102c8565b60405160ff90911681526020016101d4565b6000547801000000000000000000000000000000000000000000000000900460ff166101f0565b61023c610237366004611723565b610731565b60405167ffffffffffffffff90911681526020016101d4565b61023c610744565b61027061026b36600461174e565b610756565b005b60005467ffffffffffffffff1661023c565b60005468010000000000000000900467ffffffffffffffff1661023c565b6102706102b03660046117d8565b610a39565b61023c6102c336600461186c565b610b11565b60006102e7604051806040016040528060008152602001606081525090565b878152604080516020601f860181900481028201810190925284815290859085908190840183828082843760009201829052506020808701959095526040805180820190915290815260609481019490945250610342915050565b878152604080516020601f87018190048102820181019092528581529086908690819084018382808284376000920182905250602080870195909552604080518082019091529081526060948101949094525061039d915050565b878152604080516020601f8801819004810282018101909252868152908790879081908401838280828437600092018290525060208087019590955260408051808201909152908152606094810194909452506103f8915050565b878152604080516020601f8901819004810282018101909252878152908890889081908401838280828437600092019190915250505050602082015261044561044085610ef5565b610f89565b6000805460ff929092167801000000000000000000000000000000000000000000000000027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff9092169190911781556104a56104a085610fe3565b610ff3565b6000549091507801000000000000000000000000000000000000000000000000900460ff1661ffff821614610561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f76616c696461746543697068657274657874546573743a2076616c696461746560448201527f4369706865727465787420776974682031362062697473206661696c6564000060648201526084015b60405180910390fd5b600061057461056f85611003565b611013565b6000549091507801000000000000000000000000000000000000000000000000900460ff1663ffffffff82161461062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f76616c696461746543697068657274657874546573743a2076616c696461746560448201527f4369706865727465787420776974682033322062697473206661696c656400006064820152608401610558565b600061064061063b85611023565b611033565b6000549091507801000000000000000000000000000000000000000000000000900460ff1667ffffffffffffffff8216146106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f76616c696461746543697068657274657874546573743a2076616c696461746560448201527f4369706865727465787420776974682036342062697473206661696c656400006064820152608401610558565b50506000547801000000000000000000000000000000000000000000000000900460ff169c9b505050505050505050505050565b600061073e600183610b11565b92915050565b6000610751600080610b11565b905090565b600061076184611043565b9050600061076e84611043565b9050600061077b84611043565b905061078f61078a84846110e7565b611180565b60008054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff9092169190911790556107e061078a8484611211565b6000805491151571010000000000000000000000000000000000027fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff90921691909117905561083261078a8484611225565b600080549115157201000000000000000000000000000000000000027fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff90921691909117905561088461078a84611239565b60008054911515730100000000000000000000000000000000000000027fffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff9092169190911790556108d861078a8484611248565b6000805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90921691909117905561092d61078a848461125c565b600080549115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff90921691909117905561098461078a828585611270565b60008054911515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff9092169190911781556109d78461133c565b90506109e561078a8261134b565b6000805491151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff90921691909117905550505050505050565b60005b82811015610b0b57600160ff83161b8482600a8110610a5d57610a5d61189f565b602002015167ffffffffffffffff1610610af9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f72616e646f6d546573743a2072616e646f6d206661696c65642c206f7574206f60448201527f6620626f756e64730000000000000000000000000000000000000000000000006064820152608401610558565b80610b03816118ce565b915050610a3c565b50505050565b6000600a610b1d611656565b84610b715760005b82811015610b6657610b3861078a61135a565b8282600a8110610b4a57610b4a61189f565b9115156020909202015280610b5e816118ce565b915050610b25565b50610b7181836113ef565b610b79611656565b85610b8357600a92505b60005b83811015610c145786610bcc57610b9e6104406114d4565b60ff168282600a8110610bb357610bb361189f565b67ffffffffffffffff9092166020929092020152610c02565b610bd8610440876114e4565b60ff168282600a8110610bed57610bed61189f565b67ffffffffffffffff90921660209290920201525b80610c0c816118ce565b915050610b86565b508515610c2657610c26818487610a39565b610c308184611541565b85610c3a57600392505b60005b83811015610ccd5786610c8457610c556104a0611599565b61ffff168282600a8110610c6b57610c6b61189f565b67ffffffffffffffff9092166020929092020152610cbb565b610c906104a0876115a9565b61ffff168282600a8110610ca657610ca661189f565b67ffffffffffffffff90921660209290920201525b80610cc5816118ce565b915050610c3d565b508515610cdf57610cdf818487610a39565b610ce98184611541565b85610cf357600392505b60005b83811015610d8a5786610d3f57610d0e61056f6115b9565b63ffffffff168282600a8110610d2657610d2661189f565b67ffffffffffffffff9092166020929092020152610d78565b610d4b61056f876115c9565b63ffffffff168282600a8110610d6357610d6361189f565b67ffffffffffffffff90921660209290920201525b80610d82816118ce565b915050610cf6565b508515610d9c57610d9c818487610a39565b610da68184611541565b85610db057600292505b60005b83811015610e3b5786610df657610dcb61063b6115d9565b8282600a8110610ddd57610ddd61189f565b67ffffffffffffffff9092166020929092020152610e29565b610e0261063b876115e9565b8282600a8110610e1457610e1461189f565b67ffffffffffffffff90921660209290920201525b80610e33816118ce565b915050610db3565b508515610e9957610e4d818487610a39565b80516000805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055610ed4565b8051600080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff9092169190911790555b610ede8184611541565b505060005467ffffffffffffffff16949350505050565b6000606463e4f36e1060015b845160208601516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152610f469360f81b92919060040161195c565b6020604051808303816000875af1158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e91906119f9565b60006064630cfed56160015b60f81b846040518363ffffffff1660e01b8152600401610f469291907fff00000000000000000000000000000000000000000000000000000000000000929092168252602082015260400190565b6000606463e4f36e106002610f01565b60006064630cfed5616002610f95565b6000606463e4f36e106003610f01565b60006064630cfed5616003610f95565b6000606463e4f36e106004610f01565b60006064630cfed5616004610f95565b60008082611052576000611055565b60015b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081526000600482015260ff9190911660248201819052915060649063d9b60b60906044016020604051808303816000875af11580156110bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e091906119f9565b9392505050565b6000606463fe9c73d16110fb8380806115f9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015260248101869052604481018590526064016020604051808303816000875af11580156110bc573d6000803e3d6000fd5b6040517f0cfed56100000000000000000000000000000000000000000000000000000000815260006004820181905260248201839052908190606490630cfed561906044016020604051808303816000875af11580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120891906119f9565b15159392505050565b6000606463fb7da35f6110fb8380806115f9565b60006064636f962e2c6110fb8380806115f9565b60006064631d79e49a82610f95565b60006064637c12a1eb6110fb8380806115f9565b600060646342094c566110fb8380806115f9565b600060646320cc408d6112848380806115f9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810187905260448101869052606481018590526084016020604051808303816000875af1158015611310573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133491906119f9565b949350505050565b6000606463c50c9c0282610f95565b6000606463d2c135e582610f95565b6000606463134eb890825b60f81b6040518263ffffffff1660e01b81526004016113ac91907fff0000000000000000000000000000000000000000000000000000000000000091909116815260200190565b6020604051808303816000875af11580156113cb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075191906119f9565b6001805b8281101561143f578381600a811061140d5761140d61189f565b602002015184519015159015150361142d5781611429816118ce565b9250505b80611437816118ce565b9150506113f3565b508181036114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f72616e646f6d546573743a2072616e646f6d206661696c65642c20616c6c207660448201527f616c75657320617265207468652073616d6500000000000000000000000000006064820152608401610558565b505050565b6000606463134eb8906001611365565b6000606463072d17fc60015b60f81b846040518363ffffffff1660e01b8152600401610f469291907fff0000000000000000000000000000000000000000000000000000000000000092909216825260ff16602082015260400190565b6001805b8281101561143f578381600a811061155f5761155f61189f565b6020020151845167ffffffffffffffff9182169116036115875781611583816118ce565b9250505b80611591816118ce565b915050611545565b6000606463134eb8906002611365565b6000606463072d17fc60026114f0565b6000606463134eb8906003611365565b6000606463072d17fc60036114f0565b6000606463134eb8906004611365565b6000606463072d17fc60046114f0565b600081600281111561160d5761160d61192d565b60ff1660088460048111156116245761162461192d565b61ffff16901b61ffff1660108660048111156116425761164261192d565b62ffffff16901b171760e81b949350505050565b604051806101400160405280600a906020820280368337509192915050565b60008060008060008060a0878903121561168e57600080fd5b86359550602087013594506040870135935060608701359250608087013567ffffffffffffffff808211156116c257600080fd5b818901915089601f8301126116d657600080fd5b8135818111156116e557600080fd5b8a60208285010111156116f757600080fd5b6020830194508093505050509295509295509295565b803560ff8116811461171e57600080fd5b919050565b60006020828403121561173557600080fd5b6110e08261170d565b8035801515811461171e57600080fd5b60008060006060848603121561176357600080fd5b61176c8461173e565b925061177a6020850161173e565b91506117886040850161173e565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803567ffffffffffffffff8116811461171e57600080fd5b600080600061018084860312156117ee57600080fd5b84601f8501126117fd57600080fd5b60405161014080820182811067ffffffffffffffff8211171561182257611822611791565b6040528501818782111561183557600080fd5b865b8281101561185657611848816117c0565b825260209182019101611837565b509194503592506117889050610160850161170d565b6000806040838503121561187f57600080fd5b6118888361173e565b91506118966020840161170d565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611926577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fff000000000000000000000000000000000000000000000000000000000000008416815260006020848184015260606040840152835180606085015260005b818110156119b85785810183015185820160800152820161199c565b5060006080828601015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050949350505050565b600060208284031215611a0b57600080fd5b505191905056fea164736f6c6343000813000a";
249
+ "0x6080806040523461002657600080546001600160801b03191690556129c5908161002c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163103bdb871461212457508063276b828814611a3457806334c7c81714611a10578063598f95791461161e5780635adb57781461111b5780639266057814610981578063aacc5a1714610959578063d3d8aff41461092e578063dbc221d0146108b15763dfbba08f1461008d57600080fd5b346102d75760406003193601126102d7576100a66121a4565b60249060ff823581811681036102d757600a926040516100c5816121b3565b6101409384368337821591826107a1575b5081604051956100e5876121b3565b36873761079c575b829060005b878110610651575050610641575b8061010b8686612511565b610638575b8160005b8681106104f857506104e8575b8061012c8686612511565b6104df575b8160005b8681106103885750610378575b8061014d8686612511565b61036f575b60005b85811061020c57506101ba955050156101d157610173908383612383565b80517fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff00000000000000006000549260401b16911617600055612511565b602067ffffffffffffffff60005416604051908152f35b5067ffffffffffffffff8151167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006000541617600055612511565b81156102ef57604051907f134eb8900000000000000000000000000000000000000000000000000000000082527f0400000000000000000000000000000000000000000000000000000000000000600483015260209182818a81600060645af19283156102e3576000936102aa575b50506102896102a592612904565b67ffffffffffffffff61029c838961227e565b91169052612222565b610155565b90809350813d83116102dc575b6102c181836121ff565b810103126102d7576102896102a592519261027b565b600080fd5b503d6102b7565b6040513d6000823e3d90fd5b6040517f072d17fc0000000000000000000000000000000000000000000000000000000081527f0400000000000000000000000000000000000000000000000000000000000000600482015260ff85166024820152602091908281604481600060645af19283156102e3576000936102aa5750506102896102a592612904565b60029450610152565b610383838686612383565b610142565b9050811561045a57604051907f134eb8900000000000000000000000000000000000000000000000000000000082527f0300000000000000000000000000000000000000000000000000000000000000600483015260209182818a81600060645af19283156102e357600093610424575b505063ffffffff61040c61041d93612858565b16610417828861227e565b52612222565b8290610135565b90809350813d8311610453575b61043b81836121ff565b810103126102d75790519063ffffffff61040c6103f9565b503d610431565b6040517f072d17fc0000000000000000000000000000000000000000000000000000000081527f0300000000000000000000000000000000000000000000000000000000000000600482015260ff85166024820152602091908281604481600060645af19283156102e35760009361042457505063ffffffff61040c61041d93612858565b60039450610131565b6104f3838686612383565b610121565b905081156105b557604051907f134eb8900000000000000000000000000000000000000000000000000000000082527f0200000000000000000000000000000000000000000000000000000000000000600483015260209182818a81600060645af19283156102e357600093610581575b505061ffff61040c61057a936127b0565b8290610114565b90809350813d83116105ae575b61059881836121ff565b810103126102d75790519061ffff61040c610569565b503d61058e565b6040517f072d17fc0000000000000000000000000000000000000000000000000000000081527f0200000000000000000000000000000000000000000000000000000000000000600482015260ff85166024820152602091908281604481600060645af19283156102e35760009361058157505061ffff61040c61057a936127b0565b60039450610110565b61064c838686612383565b610100565b909150821561071b57604051907f134eb8900000000000000000000000000000000000000000000000000000000082527f01000000000000000000000000000000000000000000000000000000000000006004830152602080838b81600060645af19283156102e35784916000946106e5575b50506106d26106dd9361270a565b16610417828961227e565b9083916100f2565b8194508092503d8311610714575b6106fd81836121ff565b810103126102d757826106d26106dd9351936106c4565b503d6106f3565b6040517f072d17fc0000000000000000000000000000000000000000000000000000000081527f0100000000000000000000000000000000000000000000000000000000000000600482015260ff861660248201529060208083604481600060645af19283156102e35784916000946106e55750506106d26106dd9361270a565b6100ed565b60005b87811061080c575086600191825b8281106107cc5750506107c69114156123c6565b386100d6565b908092505115156107dd828461227e565b511515146107f7575b6107ef90612222565b9088916107b2565b916108046107ef91612222565b9290506107e6565b604051907f134eb8900000000000000000000000000000000000000000000000000000000082526000600483015260209182818c81600060645af19283156102e35760009361087d575b505061086461087892612676565b61086e828561227e565b9015159052612222565b6107a4565b90809350813d83116108aa575b61089481836121ff565b810103126102d757610864610878925192610856565b503d61088a565b346102d7576101806003193601126102d75736602312156102d7576040516108d8816121b3565b80610144913683116102d7576004905b83821061090d575050610164359060ff821682036102d75761090b923590612383565b005b813567ffffffffffffffff811681036102d7578152602091820191016108e8565b346102d75760006003193601126102d757602067ffffffffffffffff60005460401c16604051908152f35b346102d75760006003193601126102d757602067ffffffffffffffff60005416604051908152f35b346102d75760606003193601126102d75761099a6121a4565b6024359081151582036102d7576044359081151582036102d7576109c96109c36109cf926125e0565b936125e0565b916125e0565b6040517ffe9c73d1000000000000000000000000000000000000000000000000000000008152600060048201526024810184905260448101839052926020929091908460648101039484816064978160008a5af180156102e3576000906110ec575b610a3b9150612676565b15157fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff70ff000000000000000000000000000000006000549260801b169116176000556040517ffb7da35f000000000000000000000000000000000000000000000000000000008152848180610ac98588600484016040909392919360608101946000825260208201520152565b038160008a5af180156102e3576000906110bd575b610ae89150612676565b15157fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff71ff00000000000000000000000000000000006000549260881b169116176000556040517f6f962e2c000000000000000000000000000000000000000000000000000000008152848180610b778588600484016040909392919360608101946000825260208201520152565b038160008a5af180156102e35760009061108e575b610b969150612676565b15157fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff72ff0000000000000000000000000000000000006000549260901b169116176000556040517f1d79e49a00000000000000000000000000000000000000000000000000000000815260006004820152836024820152848160448160008a5af180156102e35760009061105f575b610c309150612676565b15157fffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff73ff000000000000000000000000000000000000006000549260981b169116176000556040517f7c12a1eb000000000000000000000000000000000000000000000000000000008152848180610cc18588600484016040909392919360608101946000825260208201520152565b038160008a5af180156102e357600090611030575b610ce09150612676565b15157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff00000000000000000000000000000000000000006000549260a01b169116176000556040517f42094c56000000000000000000000000000000000000000000000000000000008152848180610d728588600484016040909392919360608101946000825260208201520152565b038160008a5af180156102e357600090611001575b610d919150612676565b15157fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff75ff0000000000000000000000000000000000000000006000549260a81b16911617600055604051917f20cc408d0000000000000000000000000000000000000000000000000000000083526000600484015260248301528260448301528482015282816084816000885af180156102e357600090610fd2575b610e389150612676565b15157fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff76ff000000000000000000000000000000000000000000006000549260b01b16911617600055604051907fc50c9c0200000000000000000000000000000000000000000000000000000000825260006004830152602482015281816044816000875af19081156102e357600091610fa4575b506000926044839260405195869384927fd2c135e500000000000000000000000000000000000000000000000000000000845282600485015260248401525af19081156102e357600091610f74575b610f2582612676565b15157fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff77ff00000000000000000000000000000000000000000000006000549260b81b16911617600055600080f35b905081813d8311610f9d575b610f8a81836121ff565b810103126102d757610f25905182610f1c565b503d610f80565b90508181813d8311610fcb575b610fbb81836121ff565b810103126102d757516000610ecd565b503d610fb1565b508281813d8311610ffa575b610fe881836121ff565b810103126102d757610e389051610e2e565b503d610fde565b508481813d8311611029575b61101781836121ff565b810103126102d757610d919051610d87565b503d61100d565b508481813d8311611058575b61104681836121ff565b810103126102d757610ce09051610cd6565b503d61103c565b508481813d8311611087575b61107581836121ff565b810103126102d757610c309051610c26565b503d61106b565b508481813d83116110b6575b6110a481836121ff565b810103126102d757610b969051610b8c565b503d61109a565b508481813d83116110e5575b6110d381836121ff565b810103126102d757610ae89051610ade565b503d6110c9565b508481813d8311611114575b61110281836121ff565b810103126102d757610a3b9051610a31565b503d6110f8565b346102d75760006003193601126102d757604051611138816121b3565b610140908136823760005b600a811061158c5750600190815b600a8110611552575050611169600a809214156123c6565b60405191611176836121b3565b36833760005b818110611495578261118d81612451565b60005b600381106113e157506111a2816124b2565b60005b6003811061131e57506111b7816124b2565b60005b6002811061125a575067ffffffffffffffff8082511690817fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006000541617600055600192835b600281106112205760208461121860028814156123c6565b604051908152f35b828251168361122f838561227e565b511614611245575b61124090612222565b611200565b9361125261124091612222565b949050611237565b604051907f134eb8900000000000000000000000000000000000000000000000000000000082527f040000000000000000000000000000000000000000000000000000000000000060048301526020918281602481600060645af19283156102e3576000936112ea575b50506112d26112e592612904565b67ffffffffffffffff61029c838661227e565b6111ba565b90809350813d8311611317575b61130181836121ff565b810103126102d7576112d26112e59251926112c4565b503d6112f7565b604051907f134eb8900000000000000000000000000000000000000000000000000000000082527f030000000000000000000000000000000000000000000000000000000000000060048301526020918281602481600060645af19283156102e3576000936113ab575b505063ffffffff61139b6113a693612858565b16610417828561227e565b6111a5565b90809350813d83116113da575b6113c281836121ff565b810103126102d75790519063ffffffff61139b611388565b503d6113b8565b604051907f134eb8900000000000000000000000000000000000000000000000000000000082527f020000000000000000000000000000000000000000000000000000000000000060048301526020918281602481600060645af19283156102e357600093611461575b505061ffff61139b61145c936127b0565b611190565b90809350813d831161148e575b61147881836121ff565b810103126102d75790519061ffff61139b61144b565b503d61146e565b604051907f134eb8900000000000000000000000000000000000000000000000000000000082527f010000000000000000000000000000000000000000000000000000000000000060048301526020918281602481600060645af19283156102e35760009361151f575b505060ff61150f61151a9361270a565b16610417828661227e565b61117c565b90809350813d831161154b575b61153681836121ff565b810103126102d75790519060ff61150f6114ff565b503d61152c565b81511515611560828461227e565b51151514611577575b61157290612222565b611151565b9161158461157291612222565b929050611569565b604051907f134eb890000000000000000000000000000000000000000000000000000000008252600060048301526020918281602481600060645af19283156102e3576000936115ea575b50506108646115e592612676565b611143565b90809350813d8311611617575b61160181836121ff565b810103126102d7576108646115e59251926115d7565b503d6115f7565b346102d7576020806003193601126102d75760043560ff80821682036102d7576040519061164b826121b3565b610140809236903760405191611660836121b3565b36833760005b600a811061195857505061167a82826122be565b61168381612451565b60005b600a81106118a2575061169982826122be565b6116a281612451565b60005b600a81106117e857506116b882826122be565b6116c181612451565b60005b600a81106117355750906116d890826122be565b6117238151916fffffffffffffffff00000000000000006000549360401b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff841617600055612451565b67ffffffffffffffff60405191168152f35b6040517f072d17fc0000000000000000000000000000000000000000000000000000000081527f0400000000000000000000000000000000000000000000000000000000000000600482015260ff84166024820152908482604481600060645af19182156102e3576000926117b7575b506112d26117b292612904565b6116c4565b91508482813d83116117e1575b6117ce81836121ff565b810103126102d7579051906112d26117a5565b503d6117c4565b6040517f072d17fc0000000000000000000000000000000000000000000000000000000081527f0300000000000000000000000000000000000000000000000000000000000000600482015260ff84166024820152908482604481600060645af19182156102e35760009261186f575b5063ffffffff61139b61186a93612858565b6116a5565b91508482813d831161189b575b61188681836121ff565b810103126102d75790519063ffffffff611858565b503d61187c565b6040517f072d17fc0000000000000000000000000000000000000000000000000000000081527f0200000000000000000000000000000000000000000000000000000000000000600482015260ff84166024820152908482604481600060645af19182156102e357600092611927575b5061ffff61139b611922936127b0565b611686565b91508482813d8311611951575b61193e81836121ff565b810103126102d75790519061ffff611912565b503d611934565b6040517f072d17fc0000000000000000000000000000000000000000000000000000000081527f0100000000000000000000000000000000000000000000000000000000000000600482015260ff85166024820152908582604481600060645af19182156102e35783906000936119dc575b5061150f6119d79361270a565b611666565b809350878092503d8311611a09575b6119f581836121ff565b810103126102d7579051908261150f6119ca565b503d6119eb565b346102d75760006003193601126102d757602060ff60005460c01c16604051908152f35b346102d75760a06003193601126102d75760843567ffffffffffffffff81116102d757366023820112156102d75767ffffffffffffffff8160040135116102d7573660248260040135830101116102d757611a8d61256e565b6004358152611aa436836004013560248501612599565b6020820152611ab161256e565b6024358152611ac836846004013560248601612599565b6020820152611ad561256e565b916044358352611aed36856004013560248701612599565b6020840152611b13611afd61256e565b9460643586523690602481600401359101612599565b602085015260208151910151604051917fe4f36e100000000000000000000000000000000000000000000000000000000083527f010000000000000000000000000000000000000000000000000000000000000060048401526024830152606060448301528181519182606483015260005b83811061210c575050608481601f19601f856000856020988601015201168101030181600060645af180156102e3576000906120d8575b611bc6915061270a565b7fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff78ff0000000000000000000000000000000000000000000000006000549260c01b1691161760005560208151910151604051917fe4f36e100000000000000000000000000000000000000000000000000000000083527f020000000000000000000000000000000000000000000000000000000000000060048401526024830152606060448301528181519182606483015260005b8381106120c0575050608481601f19601f856000856020988601015201168101030181600060645af180156102e35760009061208c575b611cbd91506127b0565b61ffff60ff60005460c01c169116036120085760208151910151604051917fe4f36e100000000000000000000000000000000000000000000000000000000083527f030000000000000000000000000000000000000000000000000000000000000060048401526024830152606060448301528181519182606483015260005b838110611ff0575050608481601f19601f856000856020988601015201168101030181600060645af180156102e357600090611fbc575b611d7e9150612858565b63ffffffff60ff60005460c01c16911603611f385760208151910151604051917fe4f36e100000000000000000000000000000000000000000000000000000000083527f040000000000000000000000000000000000000000000000000000000000000060048401526024830152606060448301528181519182606483015260005b838110611f20575050608481601f19601f856000856020988601015201168101030181600060645af19081156102e357600091611eec575b50611e4b67ffffffffffffffff91612904565b60ff60005460c01c169182911603611e6857602090604051908152f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f76616c696461746543697068657274657874546573743a2076616c696461746560448201527f4369706865727465787420776974682036342062697473206661696c656400006064820152fd5b90506020813d602011611f18575b81611f07602093836121ff565b810103126102d75751611e4b611e38565b3d9150611efa565b60208282018101516084878401015285935001611e00565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f76616c696461746543697068657274657874546573743a2076616c696461746560448201527f4369706865727465787420776974682033322062697473206661696c656400006064820152fd5b506020813d602011611fe8575b81611fd6602093836121ff565b810103126102d757611d7e9051611d74565b3d9150611fc9565b60208282018101516084878401015285935001611d3d565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f76616c696461746543697068657274657874546573743a2076616c696461746560448201527f4369706865727465787420776974682031362062697473206661696c656400006064820152fd5b506020813d6020116120b8575b816120a6602093836121ff565b810103126102d757611cbd9051611cb3565b3d9150612099565b60208282018101516084878401015285935001611c7c565b506020813d602011612104575b816120f2602093836121ff565b810103126102d757611bc69051611bbc565b3d91506120e5565b60208282018101516084878401015285935001611b85565b346102d75760006003193601126102d7576101009060005460ff90818160801c1615158352818160881c1615156020840152818160901c1615156040840152818160981c1615156060840152818160a01c1615156080840152818160a81c16151560a0840152818160b01c16151560c084015260b81c16151560e0820152f35b6004359081151582036102d757565b610140810190811067ffffffffffffffff8211176121d057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff8211176121d057604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461224f5760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600a81101561228f5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005b600a81106122cf57505050565b67ffffffffffffffff6122e2828561227e565b5116600160ff84161b11156122ff576122fa90612222565b6122c2565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f72616e646f6d546573743a2072616e646f6d206661696c65642c206f7574206f60448201527f6620626f756e64730000000000000000000000000000000000000000000000006064820152fd5b91909160005b8381106123965750505050565b67ffffffffffffffff6123a9828461227e565b5116600160ff85161b11156122ff576123c190612222565b612389565b156123cd57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f72616e646f6d546573743a2072616e646f6d206661696c65642c20616c6c207660448201527f616c75657320617265207468652073616d6500000000000000000000000000006064820152fd5b600190815b600a811061246f575050600a61246d9114156123c6565b565b67ffffffffffffffff8083511690612487838561227e565b51161461249d575b61249890612222565b612456565b916124aa61249891612222565b92905061248f565b600190815b600381106124ce575050600361246d9114156123c6565b67ffffffffffffffff80835116906124e6838561227e565b5116146124fc575b6124f790612222565b6124b7565b916125096124f791612222565b9290506124ee565b600190815b83811061252b5750509061246d9114156123c6565b67ffffffffffffffff8083511690612543838561227e565b511614612559575b61255490612222565b612516565b9161256661255491612222565b92905061254b565b604051906040820182811067ffffffffffffffff8211176121d0576040526060602083600081520152565b92919267ffffffffffffffff82116121d057604051916125c36020601f19601f84011601846121ff565b8294818452818301116102d7578281602093846000960137010152565b60009015612671575060015b60ff604051917fd9b60b6000000000000000000000000000000000000000000000000000000000835260006004840152166024820152602081604481600060645af19081156102e357600091612640575090565b906020823d8211612669575b81612659602093836121ff565b8101031261266657505190565b80fd5b3d915061264c565b6125ec565b6040517f0cfed56100000000000000000000000000000000000000000000000000000000815260009182600483015260248201526020816044818560645af19182156126fe5780926126ca575b5050151590565b9091506020823d82116126f6575b816126e5602093836121ff565b8101031261266657505138806126c3565b3d91506126d8565b604051903d90823e3d90fd5b604051907f0cfed5610000000000000000000000000000000000000000000000000000000082527f010000000000000000000000000000000000000000000000000000000000000060048301526024820152602081604481600060645af180156102e35760009061277e575b60ff91501690565b6020823d82116127a8575b81612796602093836121ff565b81010312612666575060ff9051612776565b3d9150612789565b604051907f0cfed5610000000000000000000000000000000000000000000000000000000082527f020000000000000000000000000000000000000000000000000000000000000060048301526024820152602081604481600060645af180156102e357600090612825575b61ffff91501690565b6020823d8211612850575b8161283d602093836121ff565b81010312612666575061ffff905161281c565b3d9150612830565b604051907f0cfed5610000000000000000000000000000000000000000000000000000000082527f030000000000000000000000000000000000000000000000000000000000000060048301526024820152602081604481600060645af180156102e3576000906128cf575b63ffffffff91501690565b6020823d82116128fc575b816128e7602093836121ff565b81010312612666575063ffffffff90516128c4565b3d91506128da565b604051907f0cfed5610000000000000000000000000000000000000000000000000000000082527f040000000000000000000000000000000000000000000000000000000000000060048301526024820152602081604481600060645af180156102e35760009061297f575b67ffffffffffffffff91501690565b6020823d82116129b0575b81612997602093836121ff565b81010312612666575067ffffffffffffffff9051612970565b3d915061298a56fea164736f6c6343000813000a";
250
250
 
251
251
  type Miscellaneous1TestsContractConstructorParams =
252
252
  | [signer?: Signer]
@@ -369,7 +369,7 @@ const _abi = [
369
369
  ] as const;
370
370
 
371
371
  const _bytecode =
372
- "0x608060405234801561001057600080fd5b50613193806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806392bba35611610081578063acb381691161005b578063acb38169146101c7578063d74e55e7146101ef578063ebb571fd1461020057600080fd5b806392bba3561461018f578063a103e4c0146101a1578063a609476a146101b457600080fd5b8063690ec3d9116100b2578063690ec3d91461012d5780636c74e7141461015057806380f937bc1461016357600080fd5b80632684f863146100d95780632e544aa0146100f75780632e5dda1e1461011d575b600080fd5b60005460ff165b60405160ff90911681526020015b60405180910390f35b61010a610105366004612e28565b610215565b60405161ffff90911681526020016100ee565b600054610100900460ff166100e0565b61014061013b366004612ec0565b610300565b60405190151581526020016100ee565b6100e061015e366004612eec565b610367565b610176610171366004612f2f565b610a65565b60405167ffffffffffffffff90911681526020016100ee565b6000546301000000900460ff16610140565b6100e06101af366004612fda565b610c08565b6100e06101c2366004612fda565b6112c8565b6101da6101d536600461300d565b611975565b60405163ffffffff90911681526020016100ee565b60005462010000900460ff166100e0565b61021361020e3660046130a4565b611aa2565b005b6000806102258360000151611b29565b90506102348360200151611b29565b61ffff168161ffff1614801561025d57506102528360400151611b29565b61ffff168161ffff16145b6102fa5760405162461bcd60e51b815260206004820152604660248201527f64656372797074416e64436f6d70617265416c6c526573756c74733a2046616960448201527f6c656420746f206465637279707420616e6420636f6d7061726520616c6c207260648201527f6573756c74730000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b92915050565b60008061030c83611bc6565b9050600061031982611c6b565b905061032481611c7a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1663010000009215158302179081905560ff91900416949350505050565b60006103b160405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6103d560405180606001604052806000815260200160008152602001600081525090565b6104076040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6104476040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610452848888611aa2565b600061045d89611bc6565b9050600061047c6104778388600001518960200151611d0b565b611dd9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000060ff841602179055604087015160608801519192506104c791849190611de9565b8552855160608701516104db918491611dfe565b8560200181815250506104f78287604001518860200151611e14565b6040860152600061050786610215565b90508160ff168161ffff161461055f5760405162461bcd60e51b815260206004820152601760248201527f6d7578546573743a2063617374203136206661696c656400000000000000000060448201526064016102f1565b6105728388608001518960a00151611e2a565b8552865160a0880151610586918591611e3f565b8560200181815250506105a28388608001518960200151611e55565b8560400181815250506105be8388604001518960a00151611e6b565b8560600181815250506105da8388608001518960600151611e81565b608086015260006105ea86611975565b90508063ffffffff168360ff16146106445760405162461bcd60e51b815260206004820152601760248201527f6d7578546573743a2063617374203332206661696c656400000000000000000060448201526064016102f1565b610657848960c001518a60e00151611e97565b8552875160e089015161066b918691611eac565b856020018181525050610687848960c001518a60200151611ec2565b8560400181815250506106a38489604001518a60e00151611ed8565b8560600181815250506106bf848960c001518a60600151611eee565b8560800181815250506106db8489608001518a60e00151611f04565b8560a00181815250506106f7848960c001518a60a00151611f1a565b60c0860152600061070786610a65565b90508067ffffffffffffffff168460ff16146107655760405162461bcd60e51b815260206004820152601760248201527f6d7578546573743a2063617374203634206661696c656400000000000000000060448201526064016102f1565b610777610477868e8c60200151611f30565b60ff168460ff161480156107a15750610798610477868b600001518e611fb9565b60ff168460ff16145b6108135760405162461bcd60e51b815260206004820152602760248201527f6d7578546573743a2074657374203820626974732077697468207363616c617260448201527f206661696c65640000000000000000000000000000000000000000000000000060648201526084016102f1565b61082d610828868e60ff168c60600151612043565b611b29565b61ffff168460ff1614801561085c5750610852610828868b604001518e60ff166120ce565b61ffff168460ff16145b6108ce5760405162461bcd60e51b815260206004820152602860248201527f6d7578546573743a207465737420313620626974732077697468207363616c6160448201527f72206661696c656400000000000000000000000000000000000000000000000060648201526084016102f1565b6108e86108e3868e60ff168c60a00151612158565b6121e5565b63ffffffff168460ff1614801561091b575061090f6108e3868b608001518e60ff166121f5565b63ffffffff168460ff16145b61098d5760405162461bcd60e51b815260206004820152602860248201527f6d7578546573743a207465737420333220626974732077697468207363616c6160448201527f72206661696c656400000000000000000000000000000000000000000000000060648201526084016102f1565b6109a76109a2868e60ff168c60e00151612282565b612313565b67ffffffffffffffff168460ff161480156109e257506109d26109a2868b60c001518e60ff16612323565b67ffffffffffffffff168460ff16145b610a545760405162461bcd60e51b815260206004820152602860248201527f6d7578546573743a207465737420363420626974732077697468207363616c6160448201527f72206661696c656400000000000000000000000000000000000000000000000060648201526084016102f1565b50919b9a5050505050505050505050565b600080610a758360000151612313565b9050610a848360200151612313565b67ffffffffffffffff168167ffffffffffffffff16148015610ac55750610aae8360400151612313565b67ffffffffffffffff168167ffffffffffffffff16145b8015610af05750610ad98360800151612313565b67ffffffffffffffff168167ffffffffffffffff16145b8015610b1b5750610b048360600151612313565b67ffffffffffffffff168167ffffffffffffffff16145b8015610b465750610b2f8360c00151612313565b67ffffffffffffffff168167ffffffffffffffff16145b801561025d5750610b5a8360a00151612313565b67ffffffffffffffff168167ffffffffffffffff16146102fa5760405162461bcd60e51b815260206004820152604660248201527f64656372797074416e64436f6d70617265416c6c526573756c74733a2046616960448201527f6c656420746f206465637279707420616e6420636f6d7061726520616c6c207260648201527f6573756c74730000000000000000000000000000000000000000000000000000608482015260a4016102f1565b6000610c5260405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610c7660405180606001604052806000815260200160008152602001600081525090565b610ca86040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b610ce86040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610cf3848888611aa2565b6000610d0a610477866000015187602001516123b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff84160217905560408601516060870151919250610d519161244e565b845284516060860151610d649190612463565b846020018181525050610d7f85604001518660200151612479565b60408501526000610d8f85610215565b90508160ff168161ffff1614610de75760405162461bcd60e51b815260206004820152601760248201527f72656d546573743a2063617374203136206661696c656400000000000000000060448201526064016102f1565b610df986608001518760a0015161248f565b8452855160a0870151610e0c91906124a4565b846020018181525050610e27866080015187602001516124ba565b846040018181525050610e4286604001518760a001516124d0565b846060018181525050610e5d866080015187606001516124e6565b60808501526000610e6d85611975565b90508063ffffffff168360ff1614610ec75760405162461bcd60e51b815260206004820152601760248201527f72656d546573743a2063617374203332206661696c656400000000000000000060448201526064016102f1565b610ed98760c001518860e001516124fc565b8452865160e0880151610eec9190612511565b846020018181525050610f078760c001518860200151612527565b846040018181525050610f2287604001518860e0015161253d565b846060018181525050610f3d8760c001518860600151612553565b846080018181525050610f5887608001518860e00151612569565b8460a0018181525050610f738760c001518860a0015161257f565b60c08501526000610f8385610a65565b90508067ffffffffffffffff168460ff1614610fe15760405162461bcd60e51b815260206004820152601760248201527f72656d546573743a2063617374203634206661696c656400000000000000000060448201526064016102f1565b610ff26104778c8a60200151612595565b60ff168460ff1614801561101b575061101261047789600001518c612617565b60ff168460ff16145b61108d5760405162461bcd60e51b815260206004820152602760248201527f72656d546573743a2074657374203820626974732077697468207363616c617260448201527f206661696c65640000000000000000000000000000000000000000000000000060648201526084016102f1565b6110a16108288c60ff168a6060015161269a565b61ffff168460ff161480156110cf57506110c561082889604001518c60ff1661271e565b61ffff168460ff16145b6111415760405162461bcd60e51b815260206004820152602860248201527f72656d546573743a207465737420313620626974732077697468207363616c6160448201527f72206661696c656400000000000000000000000000000000000000000000000060648201526084016102f1565b6111556108e38c60ff168a60a001516127a1565b63ffffffff168460ff16148015611187575061117b6108e389608001518c60ff16612827565b63ffffffff168460ff16145b6111f95760405162461bcd60e51b815260206004820152602860248201527f72656d546573743a207465737420333220626974732077697468207363616c6160448201527f72206661696c656400000000000000000000000000000000000000000000000060648201526084016102f1565b61120d6109a28c60ff168a60e001516128ad565b67ffffffffffffffff168460ff1614801561124757506112376109a28960c001518c60ff16612937565b67ffffffffffffffff168460ff16145b6112b95760405162461bcd60e51b815260206004820152602860248201527f72656d546573743a207465737420363420626974732077697468207363616c6160448201527f72206661696c656400000000000000000000000000000000000000000000000060648201526084016102f1565b50919998505050505050505050565b600061131260405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61133660405180606001604052806000815260200160008152602001600081525090565b6113686040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6113a86040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6113b3848888611aa2565b60006113ca610477866000015187602001516129c1565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff83161790556040860151606087015191925061140d916129d6565b84528451606086015161142091906129eb565b84602001818152505061143b85604001518660200151612a01565b6040850152600061144b85610215565b90508160ff168161ffff16146114a35760405162461bcd60e51b815260206004820152601760248201527f646976546573743a2063617374203136206661696c656400000000000000000060448201526064016102f1565b6114b586608001518760a00151612a17565b8452855160a08701516114c89190612a2c565b8460200181815250506114e386608001518760200151612a42565b8460400181815250506114fe86604001518760a00151612a58565b84606001818152505061151986608001518760600151612a6e565b6080850152600061152985611975565b90508063ffffffff168360ff16146115835760405162461bcd60e51b815260206004820152601760248201527f646976546573743a2063617374203332206661696c656400000000000000000060448201526064016102f1565b6115958760c001518860e00151612a84565b8452865160e08801516115a89190612a99565b8460200181815250506115c38760c001518860200151612aaf565b8460400181815250506115de87604001518860e00151612ac5565b8460600181815250506115f98760c001518860600151612adb565b84608001818152505061161487608001518860e00151612af1565b8460a001818152505061162f8760c001518860a00151612b07565b60c0850152600061163f85610a65565b90508067ffffffffffffffff168460ff161461169d5760405162461bcd60e51b815260206004820152601760248201527f646976546573743a2063617374203634206661696c656400000000000000000060448201526064016102f1565b6116ae6104778c8a60200151612b1d565b60ff168460ff161480156116d757506116ce61047789600001518c612b32565b60ff168460ff16145b6117495760405162461bcd60e51b815260206004820152602760248201527f646976546573743a2074657374203820626974732077697468207363616c617260448201527f206661696c65640000000000000000000000000000000000000000000000000060648201526084016102f1565b61175d6108288c60ff168a60600151612b48565b61ffff168460ff1614801561178b575061178161082889604001518c60ff16612b5e565b61ffff168460ff16145b6117fd5760405162461bcd60e51b815260206004820152602860248201527f646976546573743a207465737420313620626974732077697468207363616c6160448201527f72206661696c656400000000000000000000000000000000000000000000000060648201526084016102f1565b6118116108e38c60ff168a60a00151612b73565b63ffffffff168460ff1614801561184357506118376108e389608001518c60ff16612b89565b63ffffffff168460ff16145b6118b55760405162461bcd60e51b815260206004820152602860248201527f646976546573743a207465737420333220626974732077697468207363616c6160448201527f72206661696c656400000000000000000000000000000000000000000000000060648201526084016102f1565b6118c96109a28c60ff168a60e00151612b9f565b67ffffffffffffffff168460ff1614801561190357506118f36109a28960c001518c60ff16612bb5565b67ffffffffffffffff168460ff16145b6112b95760405162461bcd60e51b815260206004820152602860248201527f646976546573743a207465737420363420626974732077697468207363616c6160448201527f72206661696c656400000000000000000000000000000000000000000000000060648201526084016102f1565b60008061198583600001516121e5565b905061199483602001516121e5565b63ffffffff168163ffffffff161480156119c557506119b683604001516121e5565b63ffffffff168163ffffffff16145b80156119e857506119d983608001516121e5565b63ffffffff168163ffffffff16145b801561025d57506119fc83606001516121e5565b63ffffffff168163ffffffff16146102fa5760405162461bcd60e51b815260206004820152604660248201527f64656372797074416e64436f6d70617265416c6c526573756c74733a2046616960448201527f6c656420746f206465637279707420616e6420636f6d7061726520616c6c207260648201527f6573756c74730000000000000000000000000000000000000000000000000000608482015260a4016102f1565b611aab82612bcb565b8352611ab681612bcb565b6020840152611ac760ff8316612c34565b6040840152611ad860ff8216612c34565b6060840152611ae960ff8316612c9e565b6080840152611afa60ff8216612c9e565b60a0840152611b0b60ff8316612d0a565b60c0840152611b1c60ff8216612d0a565b60e0909301929092525050565b60006064630cfed56160025b60f81b846040518363ffffffff1660e01b8152600401611b839291907fff00000000000000000000000000000000000000000000000000000000000000929092168252602082015260400190565b6020604051808303816000875af1158015611ba2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fa919061316d565b60008082611bd5576000611bd8565b60015b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081526000600482015260ff9190911660248201819052915060649063d9b60b60906044015b6020604051808303816000875af1158015611c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c64919061316d565b9392505050565b60006064631d79e49a82611b35565b6040517f0cfed56100000000000000000000000000000000000000000000000000000000815260006004820181905260248201839052908190606490630cfed561906044016020604051808303816000875af1158015611cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d02919061316d565b15159392505050565b600060646320cc408d611d2060018085612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810187905260448101869052606481018590526084015b6020604051808303816000875af1158015611dad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd1919061316d565b949350505050565b60006064630cfed5616001611b35565b600060646320cc408d611d2060028085612d7a565b600060646320cc408d611d206001600285612d7a565b600060646320cc408d611d206002600185612d7a565b600060646320cc408d611d2060038085612d7a565b600060646320cc408d611d206001600385612d7a565b600060646320cc408d611d206003600185612d7a565b600060646320cc408d611d206002600385612d7a565b600060646320cc408d611d206003600285612d7a565b600060646320cc408d611d2060048085612d7a565b600060646320cc408d611d206001600485612d7a565b600060646320cc408d611d206004600185612d7a565b600060646320cc408d611d206002600485612d7a565b600060646320cc408d611d206004600285612d7a565b600060646320cc408d611d206003600485612d7a565b600060646320cc408d611d206004600385612d7a565b600060646320cc408d611f4560018080612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810187905260ff8616604482015260648101859052608401611d8e565b600060646320cc408d611fcf6001806002612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff00000000000000000000000000000000000000000000000000000000009091166004820152602481018790526044810186905260ff85166064820152608401611d8e565b600060646320cc408d6120596002806001612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810187905261ffff8616604482015260648101859052608401611d8e565b600060646320cc408d6120e360028080612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff00000000000000000000000000000000000000000000000000000000009091166004820152602481018790526044810186905261ffff85166064820152608401611d8e565b600060646320cc408d61216e6003806001612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810187905263ffffffff8616604482015260648101859052608401611d8e565b60006064630cfed5616003611b35565b600060646320cc408d61220b6003806002612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff00000000000000000000000000000000000000000000000000000000009091166004820152602481018790526044810186905263ffffffff85166064820152608401611d8e565b600060646320cc408d6122986004806001612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810187905267ffffffffffffffff8616604482015260648101859052608401611d8e565b60006064630cfed5616004611b35565b600060646320cc408d6123396004806002612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff00000000000000000000000000000000000000000000000000000000009091166004820152602481018790526044810186905267ffffffffffffffff85166064820152608401611d8e565b600060646386e3b7b96123c960018085612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015260248101869052604481018590526064016020604051808303816000875af1158015611c40573d6000803e3d6000fd5b600060646386e3b7b96123c960028085612d7a565b600060646386e3b7b96123c96001600285612d7a565b600060646386e3b7b96123c96002600185612d7a565b600060646386e3b7b96123c960038085612d7a565b600060646386e3b7b96123c96001600385612d7a565b600060646386e3b7b96123c96003600185612d7a565b600060646386e3b7b96123c96002600385612d7a565b600060646386e3b7b96123c96003600285612d7a565b600060646386e3b7b96123c960048085612d7a565b600060646386e3b7b96123c96001600485612d7a565b600060646386e3b7b96123c96004600185612d7a565b600060646386e3b7b96123c96002600485612d7a565b600060646386e3b7b96123c96004600285612d7a565b600060646386e3b7b96123c96003600485612d7a565b600060646386e3b7b96123c96004600385612d7a565b600060646386e3b7b96125aa60018080612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015260ff8616602482015260448101859052606401611c21565b600060646386e3b7b961262d6001806002612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905260ff85166044820152606401611c21565b600060646386e3b7b96126b06002806001612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015261ffff8616602482015260448101859052606401611c21565b600060646386e3b7b961273360028080612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905261ffff85166044820152606401611c21565b600060646386e3b7b96127b76003806001612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015263ffffffff8616602482015260448101859052606401611c21565b600060646386e3b7b961283d6003806002612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905263ffffffff85166044820152606401611c21565b600060646386e3b7b96128c36004806001612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff0000000000000000000000000000000000000000000000000000000000909116600482015267ffffffffffffffff8616602482015260448101859052606401611c21565b600060646386e3b7b961294d6004806002612d7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681527fffffff000000000000000000000000000000000000000000000000000000000090911660048201526024810186905267ffffffffffffffff85166044820152606401611c21565b60006064634e9ba4b56123c960018085612d7a565b60006064634e9ba4b56123c960028085612d7a565b60006064634e9ba4b56123c96001600285612d7a565b60006064634e9ba4b56123c96002600185612d7a565b60006064634e9ba4b56123c960038085612d7a565b60006064634e9ba4b56123c96001600385612d7a565b60006064634e9ba4b56123c96003600185612d7a565b60006064634e9ba4b56123c96002600385612d7a565b60006064634e9ba4b56123c96003600285612d7a565b60006064634e9ba4b56123c960048085612d7a565b60006064634e9ba4b56123c96001600485612d7a565b60006064634e9ba4b56123c96004600185612d7a565b60006064634e9ba4b56123c96002600485612d7a565b60006064634e9ba4b56123c96004600285612d7a565b60006064634e9ba4b56123c96003600485612d7a565b60006064634e9ba4b56123c96004600385612d7a565b60006064634e9ba4b56125aa60018080612d7a565b60006064634e9ba4b561262d6001806002612d7a565b60006064634e9ba4b56126b06002806001612d7a565b60006064634e9ba4b561273360028080612d7a565b60006064634e9ba4b56127b76003806001612d7a565b60006064634e9ba4b561283d6003806002612d7a565b60006064634e9ba4b56128c36004806001612d7a565b60006064634e9ba4b561294d6004806002612d7a565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0100000000000000000000000000000000000000000000000000000000000000600482015260ff8216602482015260009060649063d9b60b6090604401611b83565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0200000000000000000000000000000000000000000000000000000000000000600482015261ffff8216602482015260009060649063d9b60b6090604401611b83565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0300000000000000000000000000000000000000000000000000000000000000600482015263ffffffff8216602482015260009060649063d9b60b6090604401611b83565b6040517fd9b60b600000000000000000000000000000000000000000000000000000000081527f0400000000000000000000000000000000000000000000000000000000000000600482015267ffffffffffffffff8216602482015260009060649063d9b60b6090604401611b83565b6000816002811115612d8e57612d8e61313e565b60ff166008846004811115612da557612da561313e565b61ffff16901b61ffff166010866004811115612dc357612dc361313e565b62ffffff16901b171760e81b949350505050565b604051610100810167ffffffffffffffff81118282101715612e22577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b600060608284031215612e3a57600080fd5b6040516060810181811067ffffffffffffffff82111715612e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80604052508235815260208301356020820152604083013560408201528091505092915050565b80358015158114612ebb57600080fd5b919050565b600060208284031215612ed257600080fd5b611c6482612eab565b803560ff81168114612ebb57600080fd5b600080600060608486031215612f0157600080fd5b612f0a84612eab565b9250612f1860208501612edb565b9150612f2660408501612edb565b90509250925092565b600060e08284031215612f4157600080fd5b60405160e0810181811067ffffffffffffffff82111715612f8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c08201528091505092915050565b60008060408385031215612fed57600080fd5b612ff683612edb565b915061300460208401612edb565b90509250929050565b600060a0828403121561301f57600080fd5b60405160a0810181811067ffffffffffffffff82111715613069577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b806040525082358152602083013560208201526040830135604082015260608301356060820152608083013560808201528091505092915050565b60008060008385036101408112156130bb57600080fd5b610100808212156130cb57600080fd5b6130d3612dd7565b9150853582526020860135602083015260408601356040830152606086013560608301526080860135608083015260a086013560a083015260c086013560c083015260e086013560e083015281945061312d818701612edb565b93505050612f266101208501612edb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561317f57600080fd5b505191905056fea164736f6c6343000813000a";
372
+ "0x6080806040523461001657614707908161001c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081632684f86314613d44575080632e544aa014613cfd5780632e5dda1e14613cd9578063690ec3d914613b7f5780636c74e7141461283d57806380f937bc146127d057806392bba356146127aa578063a103e4c0146114a8578063a609476a146101b1578063acb3816914610158578063d74e55e7146101345763ebb571fd146100a357600080fd5b3461012f576003193601610140811261012f576101001361012f576040516100ca81613de5565b6004358152602435602082015260443560408201526064356060820152608435608082015260a43560a082015260c43560c082015260e43560e08201526101043560ff8116810361012f57610124359060ff8216820361012f5761012d92613e72565b005b600080fd5b3461012f57600060031936011261012f57602060ff60005460101c16604051908152f35b3461012f5760a060031936011261012f5760206101a360405161017a81613dc9565b600435815260243583820152604435604082015260643560608201526084356080820152613fd3565b63ffffffff60405191168152f35b3461012f57604060031936011261012f576101ca613e62565b6101d2613e52565b6101da61411f565b906101e361415d565b926101ec61417c565b6101f46141a7565b90610200848487613e72565b8451602080870151604051634e9ba4b560e01b81527f0101000000000000000000000000000000000000000000000000000000000000600482015260248101939093526044830152816064816000825af1908115610c8557600091611475575b5060ff61026f6102f6926142e8565b1696877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006000541617600055602060408801516060890151906040519485928392634e9ba4b560e01b8452600484016040909392919360608101947f0202000000000000000000000000000000000000000000000000000000000000825260208201520152565b0381600060645af18015610c8557600090611441575b815286516060880151604051634e9ba4b560e01b81527f0102000000000000000000000000000000000000000000000000000000000000600482015260248101929092526044820152915060208280606481015b0381600060645af18015610c855760009061140d575b6103da925060208201526020604088015181890151906040519485928392634e9ba4b560e01b8452600484016040909392919360608101947f0201000000000000000000000000000000000000000000000000000000000000825260208201520152565b0381600060645af18015610c855788926000916113d4575b508161040591604061ffff940152613f80565b160361139057608085015160a0860151604051634e9ba4b560e01b81527f03030000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c855760009161135e575b508152845160a0860151604051634e9ba4b560e01b81527f01030000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c855760009161132c575b50602082810191909152608086015186820151604051634e9ba4b560e01b81527f030100000000000000000000000000000000000000000000000000000000000060048201526024810192909252604482015290816064816000825af1908115610c85576000916112fa575b5060408201526105a36020604087015160a0880151906040519384928392634e9ba4b560e01b8452600484016040909392919360608101947f0203000000000000000000000000000000000000000000000000000000000000825260208201520152565b0381600060645af1908115610c85576000916112c8575b50606082810191909152608086015190860151604051634e9ba4b560e01b81527f03020000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c8557600091611292575b508161063c91608063ffffffff940152613fd3565b16850361124e5760c084015160e0850151604051634e9ba4b560e01b81527f04040000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c855760009161121c575b508152835160e0850151604051634e9ba4b560e01b81527f01040000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c85576000916111ea575b5060208281019190915260c085015185820151604051634e9ba4b560e01b81527f040100000000000000000000000000000000000000000000000000000000000060048201526024810192909252604482015290816064816000825af1908115610c85576000916111b8575b5060408201526107db6020604086015160e0870151906040519384928392634e9ba4b560e01b8452600484016040909392919360608101947f0204000000000000000000000000000000000000000000000000000000000000825260208201520152565b0381600060645af1908115610c8557600091611186575b5060608281019190915260c085015190850151604051634e9ba4b560e01b81527f04020000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c8557600091611154575b5060808281019190915284015160e0850151604051634e9ba4b560e01b81527f03040000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c8557600091611122575b5060a08281019190915260c085015190850151604051634e9ba4b560e01b81527f04030000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c85576000916110e8575b50816109519160c067ffffffffffffffff940152614058565b1684036110a457602083810151604051634e9ba4b560e01b81527f0101010000000000000000000000000000000000000000000000000000000000600482015260ff84166024820152604481019190915290816064816000825af1908115610c8557600091611070575b506109c760ff916142e8565b16841480610fc7575b15610f5d576060830151604051634e9ba4b560e01b81527f0202010000000000000000000000000000000000000000000000000000000000600482015260ff8316602482015260448101919091526020816064816000825af1908115610c8557600091610f29575b50610a4561ffff91614402565b16841480610e7c575b15610e125760a0830151604051634e9ba4b560e01b81527f0303010000000000000000000000000000000000000000000000000000000000600482015260ff8316602482015260448101919091526020816064816000825af1908115610c8557600091610dde575b50610ac563ffffffff91614520565b16841480610d2f575b15610cc55760e0830151604051634e9ba4b560e01b81527f0404010000000000000000000000000000000000000000000000000000000000600482015260ff92909216602483015260448201526020816064816000825af1908115610c8557600091610c91575b50610b4867ffffffffffffffff91614646565b1683149182610bce575b505015610b6457602090604051908152f35b608460405162461bcd60e51b815260206004820152602860248201527f646976546573743a207465737420363420626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152fd5b60c00151604051634e9ba4b560e01b81527f04040200000000000000000000000000000000000000000000000000000000006004820152602481019190915260ff91909116604482015290506020816064816000825af1908115610c8557600091610c51575b50610c4767ffffffffffffffff91614646565b1681148280610b52565b90506020813d602011610c7d575b81610c6c60209383613e02565b8101031261012f5751610c47610c34565b3d9150610c5f565b6040513d6000823e3d90fd5b90506020813d602011610cbd575b81610cac60209383613e02565b8101031261012f5751610b48610b35565b3d9150610c9f565b608460405162461bcd60e51b815260206004820152602860248201527f646976546573743a207465737420333220626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152fd5b506080830151604051634e9ba4b560e01b81527f03030200000000000000000000000000000000000000000000000000000000006004820152602481019190915260ff831660448201526020816064816000825af1908115610c8557600091610daa575b50610da263ffffffff91614520565b168414610ace565b90506020813d602011610dd6575b81610dc560209383613e02565b8101031261012f5751610da2610d93565b3d9150610db8565b90506020813d602011610e0a575b81610df960209383613e02565b8101031261012f5751610ac5610ab6565b3d9150610dec565b608460405162461bcd60e51b815260206004820152602860248201527f646976546573743a207465737420313620626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152fd5b506040838101519051634e9ba4b560e01b81527f02020200000000000000000000000000000000000000000000000000000000006004820152602481019190915260ff831660448201526020816064816000825af1908115610c8557600091610ef5575b50610eed61ffff91614402565b168414610a4e565b90506020813d602011610f21575b81610f1060209383613e02565b8101031261012f5751610eed610ee0565b3d9150610f03565b90506020813d602011610f55575b81610f4460209383613e02565b8101031261012f5751610a45610a38565b3d9150610f37565b608460405162461bcd60e51b815260206004820152602760248201527f646976546573743a2074657374203820626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152fd5b508251604051634e9ba4b560e01b81527f01010200000000000000000000000000000000000000000000000000000000006004820152602481019190915260ff831660448201526020816064816000825af1908115610c855760009161103c575b5061103460ff916142e8565b1684146109d0565b90506020813d602011611068575b8161105760209383613e02565b8101031261012f5751611034611028565b3d915061104a565b90506020813d60201161109c575b8161108b60209383613e02565b8101031261012f57516109c76109bb565b3d915061107e565b606460405162461bcd60e51b815260206004820152601760248201527f646976546573743a2063617374203634206661696c65640000000000000000006044820152fd5b90506020813d60201161111a575b8161110360209383613e02565b8101031261012f575167ffffffffffffffff610938565b3d91506110f6565b90506020813d60201161114c575b8161113d60209383613e02565b8101031261012f5751866108cb565b3d9150611130565b90506020813d60201161117e575b8161116f60209383613e02565b8101031261012f57518661085f565b3d9150611162565b90506020813d6020116111b0575b816111a160209383613e02565b8101031261012f5751866107f2565b3d9150611194565b90506020813d6020116111e2575b816111d360209383613e02565b8101031261012f575186610777565b3d91506111c6565b90506020813d602011611214575b8161120560209383613e02565b8101031261012f57518661070b565b3d91506111f8565b90506020813d602011611246575b8161123760209383613e02565b8101031261012f5751866106a7565b3d915061122a565b606460405162461bcd60e51b815260206004820152601760248201527f646976546573743a2063617374203332206661696c65640000000000000000006044820152fd5b90506020813d6020116112c0575b816112ad60209383613e02565b8101031261012f575163ffffffff610627565b3d91506112a0565b90506020813d6020116112f2575b816112e360209383613e02565b8101031261012f5751876105ba565b3d91506112d6565b90506020813d602011611324575b8161131560209383613e02565b8101031261012f57518761053f565b3d9150611308565b90506020813d602011611356575b8161134760209383613e02565b8101031261012f5751876104d3565b3d915061133a565b90506020813d602011611388575b8161137960209383613e02565b8101031261012f57518761046f565b3d915061136c565b606460405162461bcd60e51b815260206004820152601760248201527f646976546573743a2063617374203136206661696c65640000000000000000006044820152fd5b9250506020823d602011611405575b816113f060209383613e02565b8101031261012f57905187919061ffff6103f2565b3d91506113e3565b506020823d602011611439575b8161142760209383613e02565b8101031261012f576103da9151610376565b3d915061141a565b506020823d60201161146d575b8161145b60209383613e02565b8101031261012f57610360915161030c565b3d915061144e565b90506020813d6020116114a0575b8161149060209383613e02565b8101031261012f575160ff610260565b3d9150611483565b3461012f57604060031936011261012f576114c1613e62565b6114c9613e52565b6114d161411f565b906114da61415d565b926114e361417c565b6114eb6141a7565b906114f7848487613e72565b84516020808701516040516386e3b7b960e01b81527f0101000000000000000000000000000000000000000000000000000000000000600482015260248101939093526044830152816064816000825af18015610c8557600090612776575b61156091506142e8565b956000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff61ff008960081b169116176000556115f16020604088015160608901519060405193849283926386e3b7b960e01b8452600484016040909392919360608101947f0202000000000000000000000000000000000000000000000000000000000000825260208201520152565b0381600060645af1908115610c8557600091612744575b508152855160608701516040516386e3b7b960e01b81527f01020000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c8557600091612712575b5060208201526116cf60206040880151818901519060405193849283926386e3b7b960e01b8452600484016040909392919360608101947f0201000000000000000000000000000000000000000000000000000000000000825260208201520152565b0381600060645af1908115610c85576000916126e0575b50604082015261ffff6116fc60ff891692613f80565b160361269c57608085015160a08601516040516386e3b7b960e01b81527f03030000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c855760009161266a575b508152845160a08601516040516386e3b7b960e01b81527f01030000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c8557600091612638575b506020828101919091526080860151868201516040516386e3b7b960e01b81527f030100000000000000000000000000000000000000000000000000000000000060048201526024810192909252604482015290816064816000825af1908115610c8557600091612606575b50604082015261189a6020604087015160a08801519060405193849283926386e3b7b960e01b8452600484016040909392919360608101947f0203000000000000000000000000000000000000000000000000000000000000825260208201520152565b0381600060645af1908115610c85576000916125d4575b506060828101919091526080860151908601516040516386e3b7b960e01b81527f03020000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c855760009161259e575b508161193391608063ffffffff940152613fd3565b1660ff86160361255a5760c084015160e08501516040516386e3b7b960e01b81527f04040000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c8557600091612528575b508152835160e08501516040516386e3b7b960e01b81527f01040000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c85576000916124f6575b5060208281019190915260c0850151858201516040516386e3b7b960e01b81527f040100000000000000000000000000000000000000000000000000000000000060048201526024810192909252604482015290816064816000825af1908115610c85576000916124c4575b506040820152611ad56020604086015160e08701519060405193849283926386e3b7b960e01b8452600484016040909392919360608101947f0204000000000000000000000000000000000000000000000000000000000000825260208201520152565b0381600060645af1908115610c8557600091612492575b5060608281019190915260c0850151908501516040516386e3b7b960e01b81527f04020000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c8557600091612460575b5060808281019190915284015160e08501516040516386e3b7b960e01b81527f03040000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c855760009161242e575b5060a08281019190915260c0850151908501516040516386e3b7b960e01b81527f04030000000000000000000000000000000000000000000000000000000000006004820152602481019290925260448201526020816064816000825af1908115610c85576000916123f4575b5081611c4b9160c067ffffffffffffffff940152614058565b1660ff8516036123b0576020838101516040516386e3b7b960e01b81527f0101010000000000000000000000000000000000000000000000000000000000600482015260ff84166024820152604481019190915290816064816000825af1908115610c855760009161237c575b50611cc460ff916142e8565b1660ff851614806122d0575b156122665760608301516040516386e3b7b960e01b81527f0202010000000000000000000000000000000000000000000000000000000000600482015260ff8316602482015260448101919091526020816064816000825af1908115610c8557600091612232575b50611d4561ffff91614402565b1660ff85161480612182575b156121185760a08301516040516386e3b7b960e01b81527f0303010000000000000000000000000000000000000000000000000000000000600482015260ff8316602482015260448101919091526020816064816000825af1908115610c85576000916120e4575b50611dc863ffffffff91614520565b1660ff85161480612032575b15611fc85760e08301516040516386e3b7b960e01b81527f0404010000000000000000000000000000000000000000000000000000000000600482015260ff92909216602483015260448201526020816064816000825af1908115610c8557600091611f94575b50611e4e67ffffffffffffffff91614646565b1660ff8416149182611eda575b505015611e705760209060ff60405191168152f35b608460405162461bcd60e51b815260206004820152602860248201527f72656d546573743a207465737420363420626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152fd5b60c001516040516386e3b7b960e01b81527f04040200000000000000000000000000000000000000000000000000000000006004820152602481019190915260ff91909116604482015290506020816064816000825af1908115610c8557600091611f60575b50611f5367ffffffffffffffff91614646565b1660ff8216148280611e5b565b90506020813d602011611f8c575b81611f7b60209383613e02565b8101031261012f5751611f53611f40565b3d9150611f6e565b90506020813d602011611fc0575b81611faf60209383613e02565b8101031261012f5751611e4e611e3b565b3d9150611fa2565b608460405162461bcd60e51b815260206004820152602860248201527f72656d546573743a207465737420333220626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152fd5b5060808301516040516386e3b7b960e01b81527f03030200000000000000000000000000000000000000000000000000000000006004820152602481019190915260ff831660448201526020816064816000825af1908115610c85576000916120b0575b506120a563ffffffff91614520565b1660ff851614611dd4565b90506020813d6020116120dc575b816120cb60209383613e02565b8101031261012f57516120a5612096565b3d91506120be565b90506020813d602011612110575b816120ff60209383613e02565b8101031261012f5751611dc8611db9565b3d91506120f2565b608460405162461bcd60e51b815260206004820152602860248201527f72656d546573743a207465737420313620626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152fd5b5060408381015190516386e3b7b960e01b81527f02020200000000000000000000000000000000000000000000000000000000006004820152602481019190915260ff831660448201526020816064816000825af1908115610c85576000916121fe575b506121f361ffff91614402565b1660ff851614611d51565b90506020813d60201161222a575b8161221960209383613e02565b8101031261012f57516121f36121e6565b3d915061220c565b90506020813d60201161225e575b8161224d60209383613e02565b8101031261012f5751611d45611d38565b3d9150612240565b608460405162461bcd60e51b815260206004820152602760248201527f72656d546573743a2074657374203820626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152fd5b5082516040516386e3b7b960e01b81527f01010200000000000000000000000000000000000000000000000000000000006004820152602481019190915260ff831660448201526020816064816000825af1908115610c8557600091612348575b5061233d60ff916142e8565b1660ff851614611cd0565b90506020813d602011612374575b8161236360209383613e02565b8101031261012f575161233d612331565b3d9150612356565b90506020813d6020116123a8575b8161239760209383613e02565b8101031261012f5751611cc4611cb8565b3d915061238a565b606460405162461bcd60e51b815260206004820152601760248201527f72656d546573743a2063617374203634206661696c65640000000000000000006044820152fd5b90506020813d602011612426575b8161240f60209383613e02565b8101031261012f575167ffffffffffffffff611c32565b3d9150612402565b90506020813d602011612458575b8161244960209383613e02565b8101031261012f575186611bc5565b3d915061243c565b90506020813d60201161248a575b8161247b60209383613e02565b8101031261012f575186611b59565b3d915061246e565b90506020813d6020116124bc575b816124ad60209383613e02565b8101031261012f575186611aec565b3d91506124a0565b90506020813d6020116124ee575b816124df60209383613e02565b8101031261012f575186611a71565b3d91506124d2565b90506020813d602011612520575b8161251160209383613e02565b8101031261012f575186611a05565b3d9150612504565b90506020813d602011612552575b8161254360209383613e02565b8101031261012f5751866119a1565b3d9150612536565b606460405162461bcd60e51b815260206004820152601760248201527f72656d546573743a2063617374203332206661696c65640000000000000000006044820152fd5b90506020813d6020116125cc575b816125b960209383613e02565b8101031261012f575163ffffffff61191e565b3d91506125ac565b90506020813d6020116125fe575b816125ef60209383613e02565b8101031261012f5751876118b1565b3d91506125e2565b90506020813d602011612630575b8161262160209383613e02565b8101031261012f575187611836565b3d9150612614565b90506020813d602011612662575b8161265360209383613e02565b8101031261012f5751876117ca565b3d9150612646565b90506020813d602011612694575b8161268560209383613e02565b8101031261012f575187611766565b3d9150612678565b606460405162461bcd60e51b815260206004820152601760248201527f72656d546573743a2063617374203136206661696c65640000000000000000006044820152fd5b90506020813d60201161270a575b816126fb60209383613e02565b8101031261012f5751886116e6565b3d91506126ee565b90506020813d60201161273c575b8161272d60209383613e02565b8101031261012f57518861166c565b3d9150612720565b90506020813d60201161276e575b8161275f60209383613e02565b8101031261012f575188611608565b3d9150612752565b506020813d6020116127a2575b8161279060209383613e02565b8101031261012f576115609051611556565b3d9150612783565b3461012f57600060031936011261012f57602060ff60005460181c166040519015158152f35b3461012f5760e060031936011261012f57602061282b6040516127f281613dad565b60043581526024358382015260443560408201526064356060820152608435608082015260a43560a082015260c43560c0820152614058565b67ffffffffffffffff60405191168152f35b3461012f57606060031936011261012f57612856613e43565b61285e613e52565b906044359060ff8216820361012f5761287561411f565b9161287e61415d565b9361288761417c565b926128a46128936141a7565b9161289f858589613e72565b6141df565b9385516020870151604051916320cc408d60e01b83527f0101000000000000000000000000000000000000000000000000000000000000600484015287602484015260448301526064820152602081608481600060645af18015610c8557600090613b4b575b61291491506142e8565b966000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff62ff00008a60101b1691161760005560408701516060880151604051916320cc408d60e01b83527f0202000000000000000000000000000000000000000000000000000000000000600484015288602484015260448301526064820152602081608481600060645af1908115610c8557600091613b19575b50815286516060880151604051916320cc408d60e01b83527f0102000000000000000000000000000000000000000000000000000000000000600484015288602484015260448301526064820152602081608481600060645af1908115610c8557600091613ae7575b50602082015260408701516020880151604051916320cc408d60e01b83527f0201000000000000000000000000000000000000000000000000000000000000600484015288602484015260448301526064820152602081608481600060645af1908115610c8557600091613ab5575b50604082015261ffff612a9f60ff8a1692613f80565b1603613a7157608086015160a0870151604051916320cc408d60e01b83527f0303000000000000000000000000000000000000000000000000000000000000600484015287602484015260448301526064820152602081608481600060645af1908115610c8557600091613a3f575b508152855160a0870151604051916320cc408d60e01b83527f0103000000000000000000000000000000000000000000000000000000000000600484015287602484015260448301526064820152602081608481600060645af1908115610c8557600091613a0d575b50602082015260808601516020870151604051916320cc408d60e01b83527f0301000000000000000000000000000000000000000000000000000000000000600484015287602484015260448301526064820152602081608481600060645af1908115610c85576000916139db575b506040820152604086015160a0870151604051916320cc408d60e01b83527f0203000000000000000000000000000000000000000000000000000000000000600484015287602484015260448301526064820152602081608481600060645af1908115610c85576000916139a9575b50606082015260808601516060870151604051916320cc408d60e01b83527f0302000000000000000000000000000000000000000000000000000000000000600484015287602484015260448301526064820152602081608481600060645af1908115610c8557600091613973575b5081612cd991608063ffffffff940152613fd3565b1660ff87160361392f5760c085015160e0860151604051916320cc408d60e01b83527f0404000000000000000000000000000000000000000000000000000000000000600484015286602484015260448301526064820152602081608481600060645af1908115610c85576000916138fd575b508152845160e0860151604051916320cc408d60e01b83527f0104000000000000000000000000000000000000000000000000000000000000600484015286602484015260448301526064820152602081608481600060645af1908115610c85576000916138cb575b50602082015260c08501516020860151604051916320cc408d60e01b83527f0401000000000000000000000000000000000000000000000000000000000000600484015286602484015260448301526064820152602081608481600060645af1908115610c8557600091613899575b506040820152604085015160e0860151604051916320cc408d60e01b83527f0204000000000000000000000000000000000000000000000000000000000000600484015286602484015260448301526064820152602081608481600060645af1908115610c8557600091613867575b50606082015260c08501516060860151604051916320cc408d60e01b83527f0402000000000000000000000000000000000000000000000000000000000000600484015286602484015260448301526064820152602081608481600060645af1908115610c8557600091613835575b506080820152608085015160e0860151604051916320cc408d60e01b83527f0304000000000000000000000000000000000000000000000000000000000000600484015286602484015260448301526064820152602081608481600060645af1908115610c8557600091613803575b5060a082015260c085015160a0860151604051916320cc408d60e01b83527f0403000000000000000000000000000000000000000000000000000000000000600484015286602484015260448301526064820152602081608481600060645af1908115610c85576000916137c9575b5081612ff99160c067ffffffffffffffff940152614058565b1660ff861603613785576020840151604051906320cc408d60e01b82527f0101010000000000000000000000000000000000000000000000000000000000600483015284602483015260ff831660448301526064820152602081608481600060645af1908115610c8557600091613751575b5061307760ff916142e8565b1660ff861614806136a0575b15613636576060840151604051906320cc408d60e01b82527f0202010000000000000000000000000000000000000000000000000000000000600483015284602483015260ff831660448301526064820152602081608481600060645af1908115610c8557600091613602575b506130fd61ffff91614402565b1660ff8616148061354d575b156134e35760a0840151604051906320cc408d60e01b82527f0303010000000000000000000000000000000000000000000000000000000000600483015284602483015260ff831660448301526064820152602081608481600060645af1908115610c85576000916134af575b5061318563ffffffff91614520565b1660ff861614806133f8575b1561338e5760e084015160ff604051926320cc408d60e01b84527f040401000000000000000000000000000000000000000000000000000000000060048501528560248501521660448301526064820152602081608481600060645af1908115610c855760009161335a575b5061321067ffffffffffffffff91614646565b1660ff851614928361329d575b505050156132335760209060ff60405191168152f35b608460405162461bcd60e51b815260206004820152602860248201527f6d7578546573743a207465737420363420626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152fd5b60ff92935060c00151604051936320cc408d60e01b85527f0404020000000000000000000000000000000000000000000000000000000000600486015260248501526044840152166064820152602081608481600060645af1908115610c8557600091613326575b5061331867ffffffffffffffff91614646565b1660ff82161482808061321d565b90506020813d602011613352575b8161334160209383613e02565b8101031261012f5751613318613305565b3d9150613334565b90506020813d602011613386575b8161337560209383613e02565b8101031261012f57516132106131fd565b3d9150613368565b608460405162461bcd60e51b815260206004820152602860248201527f6d7578546573743a207465737420333220626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152fd5b506080840151604051906320cc408d60e01b82527f03030200000000000000000000000000000000000000000000000000000000006004830152846024830152604482015260ff83166064820152602081608481600060645af1908115610c855760009161347b575b5061347063ffffffff91614520565b1660ff861614613191565b90506020813d6020116134a7575b8161349660209383613e02565b8101031261012f5751613470613461565b3d9150613489565b90506020813d6020116134db575b816134ca60209383613e02565b8101031261012f5751613185613176565b3d91506134bd565b608460405162461bcd60e51b815260206004820152602860248201527f6d7578546573743a207465737420313620626974732077697468207363616c6160448201527f72206661696c65640000000000000000000000000000000000000000000000006064820152fd5b506040840151604051906320cc408d60e01b82527f02020200000000000000000000000000000000000000000000000000000000006004830152846024830152604482015260ff83166064820152602081608481600060645af1908115610c85576000916135ce575b506135c361ffff91614402565b1660ff861614613109565b90506020813d6020116135fa575b816135e960209383613e02565b8101031261012f57516135c36135b6565b3d91506135dc565b90506020813d60201161362e575b8161361d60209383613e02565b8101031261012f57516130fd6130f0565b3d9150613610565b608460405162461bcd60e51b815260206004820152602760248201527f6d7578546573743a2074657374203820626974732077697468207363616c617260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152fd5b508351604051906320cc408d60e01b82527f01010200000000000000000000000000000000000000000000000000000000006004830152846024830152604482015260ff83166064820152602081608481600060645af1908115610c855760009161371d575b5061371260ff916142e8565b1660ff861614613083565b90506020813d602011613749575b8161373860209383613e02565b8101031261012f5751613712613706565b3d915061372b565b90506020813d60201161377d575b8161376c60209383613e02565b8101031261012f575161307761306b565b3d915061375f565b606460405162461bcd60e51b815260206004820152601760248201527f6d7578546573743a2063617374203634206661696c65640000000000000000006044820152fd5b90506020813d6020116137fb575b816137e460209383613e02565b8101031261012f575167ffffffffffffffff612fe0565b3d91506137d7565b90506020813d60201161382d575b8161381e60209383613e02565b8101031261012f575187612f71565b3d9150613811565b90506020813d60201161385f575b8161385060209383613e02565b8101031261012f575187612f02565b3d9150613843565b90506020813d602011613891575b8161388260209383613e02565b8101031261012f575187612e93565b3d9150613875565b90506020813d6020116138c3575b816138b460209383613e02565b8101031261012f575187612e24565b3d91506138a7565b90506020813d6020116138f5575b816138e660209383613e02565b8101031261012f575187612db5565b3d91506138d9565b90506020813d602011613927575b8161391860209383613e02565b8101031261012f575187612d4c565b3d915061390b565b606460405162461bcd60e51b815260206004820152601760248201527f6d7578546573743a2063617374203332206661696c65640000000000000000006044820152fd5b90506020813d6020116139a1575b8161398e60209383613e02565b8101031261012f575163ffffffff612cc4565b3d9150613981565b90506020813d6020116139d3575b816139c460209383613e02565b8101031261012f575188612c55565b3d91506139b7565b90506020813d602011613a05575b816139f660209383613e02565b8101031261012f575188612be6565b3d91506139e9565b90506020813d602011613a37575b81613a2860209383613e02565b8101031261012f575188612b77565b3d9150613a1b565b90506020813d602011613a69575b81613a5a60209383613e02565b8101031261012f575188612b0e565b3d9150613a4d565b606460405162461bcd60e51b815260206004820152601760248201527f6d7578546573743a2063617374203136206661696c65640000000000000000006044820152fd5b90506020813d602011613adf575b81613ad060209383613e02565b8101031261012f575189612a89565b3d9150613ac3565b90506020813d602011613b11575b81613b0260209383613e02565b8101031261012f575189612a1a565b3d9150613af5565b90506020813d602011613b43575b81613b3460209383613e02565b8101031261012f5751896129b1565b3d9150613b27565b506020813d602011613b77575b81613b6560209383613e02565b8101031261012f57612914905161290a565b3d9150613b58565b3461012f5760208060031936011261012f57613b9c61289f613e43565b604051907f1d79e49a0000000000000000000000000000000000000000000000000000000082526000600483015260248201528181604481600060645af1908115610c8557600091613cac575b50604051907f0cfed5610000000000000000000000000000000000000000000000000000000082526000600483015260248201528181604481600060645af1908115610c8557600091613c7f575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff63ff00000060005492151560181b169116178060005560ff6040519160181c1615158152f35b90508181813d8311613ca5575b613c968183613e02565b8101031261012f575182613c37565b503d613c8c565b90508181813d8311613cd2575b613cc38183613e02565b8101031261012f575182613be9565b503d613cb9565b3461012f57600060031936011261012f57602060ff60005460081c16604051908152f35b3461012f57606060031936011261012f576020613d38604051613d1f81613d62565b6004358152602435838201526044356040820152613f80565b61ffff60405191168152f35b3461012f57600060031936011261012f5760209060ff600054168152f35b6060810190811067ffffffffffffffff821117613d7e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff821117613d7e57604052565b60a0810190811067ffffffffffffffff821117613d7e57604052565b610100810190811067ffffffffffffffff821117613d7e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117613d7e57604052565b60043590811515820361012f57565b6024359060ff8216820361012f57565b6004359060ff8216820361012f57565b91613ee490613eda60ff8060e095613e8981614275565b8852613e9485614275565b60208901521692613ea48461438e565b60408801521691613eb48361438e565b6060870152613ec2816144aa565b6080870152613ed0836144aa565b60a08701526145cc565b60c08501526145cc565b910152565b15613ef057565b60a460405162461bcd60e51b815260206004820152604660248201527f64656372797074416e64436f6d70617265416c6c526573756c74733a2046616960448201527f6c656420746f206465637279707420616e6420636f6d7061726520616c6c207260648201527f6573756c747300000000000000000000000000000000000000000000000000006084820152fd5b613fb6613f8d8251614402565b9161ffff80613f9f6020840151614402565b16908085169182149283613fb9575b505050613ee9565b90565b613fc99192935060400151614402565b1614388080613fae565b613fb6613fe08251614520565b9163ffffffff80613ff46020840151614520565b1690808516918214928361403f575b83614026575b8361401657505050613ee9565b613fc99192935060600151614520565b9250806140366080850151614520565b16821492614009565b92508061404f6040850151614520565b16821492614003565b613fb66140658251614646565b9167ffffffffffffffff8061407d6020840151614646565b16908085169182149283614106575b836140ed575b836140d4575b836140bb575b836140ab57505050613ee9565b613fc99192935060a00151614646565b9250806140cb60c0850151614646565b1682149261409e565b9250806140e46060850151614646565b16821492614098565b9250806140fd6080850151614646565b16821492614092565b9250806141166040850151614646565b1682149261408c565b6040519061412c82613de5565b8160e06000918281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b6040519061416a82613d62565b60006040838281528260208201520152565b6040519061418982613dc9565b60006080838281528260208201528260408201528260608201520152565b604051906141b482613dad565b8160c06000918281528260208201528260408201528260608201528260808201528260a08201520152565b60009015614270575060015b60ff604051917fd9b60b6000000000000000000000000000000000000000000000000000000000835260006004840152166024820152602081604481600060645af1908115610c855760009161423f575090565b906020823d8211614268575b8161425860209383613e02565b8101031261426557505190565b80fd5b3d915061424b565b6141eb565b60ff604051917fd9b60b600000000000000000000000000000000000000000000000000000000083527f01000000000000000000000000000000000000000000000000000000000000006004840152166024820152602081604481600060645af1908115610c855760009161423f575090565b604051907f0cfed5610000000000000000000000000000000000000000000000000000000082527f010000000000000000000000000000000000000000000000000000000000000060048301526024820152602081604481600060645af18015610c855760009061435c575b60ff91501690565b6020823d8211614386575b8161437460209383613e02565b81010312614265575060ff9051614354565b3d9150614367565b61ffff604051917fd9b60b600000000000000000000000000000000000000000000000000000000083527f02000000000000000000000000000000000000000000000000000000000000006004840152166024820152602081604481600060645af1908115610c855760009161423f575090565b604051907f0cfed5610000000000000000000000000000000000000000000000000000000082527f020000000000000000000000000000000000000000000000000000000000000060048301526024820152602081604481600060645af18015610c8557600090614477575b61ffff91501690565b6020823d82116144a2575b8161448f60209383613e02565b81010312614265575061ffff905161446e565b3d9150614482565b63ffffffff604051917fd9b60b600000000000000000000000000000000000000000000000000000000083527f03000000000000000000000000000000000000000000000000000000000000006004840152166024820152602081604481600060645af1908115610c855760009161423f575090565b604051907f0cfed5610000000000000000000000000000000000000000000000000000000082527f030000000000000000000000000000000000000000000000000000000000000060048301526024820152602081604481600060645af18015610c8557600090614597575b63ffffffff91501690565b6020823d82116145c4575b816145af60209383613e02565b81010312614265575063ffffffff905161458c565b3d91506145a2565b67ffffffffffffffff604051917fd9b60b600000000000000000000000000000000000000000000000000000000083527f04000000000000000000000000000000000000000000000000000000000000006004840152166024820152602081604481600060645af1908115610c855760009161423f575090565b604051907f0cfed5610000000000000000000000000000000000000000000000000000000082527f040000000000000000000000000000000000000000000000000000000000000060048301526024820152602081604481600060645af18015610c85576000906146c1575b67ffffffffffffffff91501690565b6020823d82116146f2575b816146d960209383613e02565b81010312614265575067ffffffffffffffff90516146b2565b3d91506146cc56fea164736f6c6343000813000a";
373
373
 
374
374
  type MiscellaneousTestsContractConstructorParams =
375
375
  | [signer?: Signer]