@coti-io/coti-contracts 0.1.0 → 1.0.2

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