@etherisc/gif-next 0.0.2-e5ea33d → 0.0.2-e6ad61d-739

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 (153) hide show
  1. package/README.md +10 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +28 -2
  4. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +1 -1
  5. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +2 -2
  6. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +78 -2
  8. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +32 -150
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +121 -6
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +121 -6
  14. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  16. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  18. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  20. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  29. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  34. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  37. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  38. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  40. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +686 -99
  44. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  45. package/artifacts/contracts/instance/Instance.sol/Instance.json +757 -99
  46. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +1 -1
  47. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +1 -1
  48. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +1 -1
  49. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +1 -1
  50. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +1 -1
  51. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
  52. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +14 -42
  53. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +1 -1
  54. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +65 -10
  55. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +1 -1
  56. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +1 -1
  57. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +28 -2
  58. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +1 -1
  59. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +12 -40
  60. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +47 -0
  62. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +1 -1
  63. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  64. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +134 -0
  65. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
  66. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.json +182 -0
  67. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
  68. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
  69. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
  70. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
  71. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +26 -3
  72. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
  73. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +26 -3
  74. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +1 -1
  75. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
  76. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +15 -35
  77. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
  78. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +22 -29
  79. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +1 -1
  80. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +13 -0
  82. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +1 -1
  83. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +41 -12
  85. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  86. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.json +10 -0
  87. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  88. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +490 -0
  89. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  90. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +45 -0
  91. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  92. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +490 -0
  93. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  94. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  95. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  96. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +1 -1
  97. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +1 -1
  98. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +2 -2
  99. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  100. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +4 -95
  101. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +1 -1
  102. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +1 -1
  103. package/artifacts/contracts/registry/Registry.sol/Registerable.json +2 -2
  104. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/Registry.sol/Registry.json +14 -105
  106. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +2 -2
  108. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  109. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  110. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  111. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  112. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  113. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  114. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  115. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  116. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  117. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  118. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  119. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +2 -2
  120. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  121. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +37 -11
  122. package/contracts/components/Component.sol +24 -7
  123. package/contracts/components/IPool.sol +6 -0
  124. package/contracts/components/IProduct.sol +9 -2
  125. package/contracts/components/Pool.sol +34 -4
  126. package/contracts/components/Product.sol +38 -4
  127. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  128. package/contracts/experiment/statemachine/ISM.sol +25 -0
  129. package/contracts/experiment/statemachine/README.md +112 -0
  130. package/contracts/experiment/statemachine/SM.sol +57 -0
  131. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  132. package/contracts/instance/IInstance.sol +9 -2
  133. package/contracts/instance/Instance.sol +13 -5
  134. package/contracts/instance/component/ComponentModule.sol +99 -38
  135. package/contracts/instance/component/IComponent.sol +18 -17
  136. package/contracts/instance/lifecycle/ILifecycle.sol +47 -0
  137. package/contracts/instance/lifecycle/LifecycleModule.sol +88 -0
  138. package/contracts/instance/policy/IPolicy.sol +8 -9
  139. package/contracts/instance/policy/PolicyModule.sol +32 -9
  140. package/contracts/instance/pool/IPoolModule.sol +2 -8
  141. package/contracts/instance/pool/PoolModule.sol +24 -16
  142. package/contracts/instance/product/IProductService.sol +1 -1
  143. package/contracts/instance/product/ProductService.sol +54 -30
  144. package/contracts/instance/treasury/ITreasury.sol +91 -0
  145. package/contracts/instance/treasury/TokenHandler.sol +24 -0
  146. package/contracts/instance/treasury/TreasuryModule.sol +168 -0
  147. package/contracts/registry/IRegistry.sol +4 -17
  148. package/contracts/registry/Registry.sol +4 -31
  149. package/contracts/types/Fee.sol +32 -0
  150. package/contracts/types/ObjectType.sol +107 -0
  151. package/contracts/types/StateId.sol +91 -0
  152. package/contracts/types/UFixed.sol +19 -14
  153. package/package.json +7 -4
@@ -44,15 +44,41 @@
44
44
  },
45
45
  {
46
46
  "inputs": [],
47
- "name": "ROUNDING_DEFAULT",
47
+ "name": "ROUNDING_DOWN",
48
48
  "outputs": [
49
49
  {
50
- "internalType": "enum UFixedMathLib.Rounding",
50
+ "internalType": "uint8",
51
51
  "name": "",
52
- "type": "UFixedMathLib.Rounding"
52
+ "type": "uint8"
53
53
  }
54
54
  ],
55
- "stateMutability": "view",
55
+ "stateMutability": "pure",
56
+ "type": "function"
57
+ },
58
+ {
59
+ "inputs": [],
60
+ "name": "ROUNDING_HALF_UP",
61
+ "outputs": [
62
+ {
63
+ "internalType": "uint8",
64
+ "name": "",
65
+ "type": "uint8"
66
+ }
67
+ ],
68
+ "stateMutability": "pure",
69
+ "type": "function"
70
+ },
71
+ {
72
+ "inputs": [],
73
+ "name": "ROUNDING_UP",
74
+ "outputs": [
75
+ {
76
+ "internalType": "uint8",
77
+ "name": "",
78
+ "type": "uint8"
79
+ }
80
+ ],
81
+ "stateMutability": "pure",
56
82
  "type": "function"
57
83
  },
58
84
  {
@@ -189,6 +215,11 @@
189
215
  "internalType": "UFixed",
190
216
  "name": "a",
191
217
  "type": "uint256"
218
+ },
219
+ {
220
+ "internalType": "uint8",
221
+ "name": "rounding",
222
+ "type": "uint8"
192
223
  }
193
224
  ],
194
225
  "name": "ftoi",
@@ -208,11 +239,6 @@
208
239
  "internalType": "UFixed",
209
240
  "name": "a",
210
241
  "type": "uint256"
211
- },
212
- {
213
- "internalType": "enum UFixedMathLib.Rounding",
214
- "name": "rounding",
215
- "type": "UFixedMathLib.Rounding"
216
242
  }
217
243
  ],
218
244
  "name": "ftoi",
@@ -446,8 +472,8 @@
446
472
  "type": "function"
447
473
  }
448
474
  ],
449
- "bytecode": "0x611461610053600b82828239805160001a607314610046577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061014c5760003560e01c8063b4773329116100c2578063d05b045211610086578063d05b045214610409578063dd45daa114610439578063ea6515c414610469578063eb646d7114610499578063f30ed598146104b7578063f70dd33e146104d55761014c565b8063b47733291461032b578063b67d77c51461035b578063bc1b392d1461038b578063c8a4ac9c146103a9578063cc8b7b73146103d95761014c565b806332148d731161011457806332148d731461020b578063753b14a51461023b578063771602f71461026b5780637a858b971461029b57806392ae8ce0146102cb578063a391c15b146102fb5761014c565b8063059f8b1614610151578063118fc88c1461016f5780631a12cd471461019f57806321e5749b146101bd578063313ce567146101ed575b600080fd5b610159610505565b6040516101669190610b5e565b60405180910390f35b61018960048036038101906101849190610baa565b610519565b6040516101969190610c05565b60405180910390f35b6101a761052d565b6040516101b49190610c3c565b60405180910390f35b6101d760048036038101906101d29190610baa565b610532565b6040516101e49190610c05565b60405180910390f35b6101f5610546565b6040516102029190610b5e565b60405180910390f35b61022560048036038101906102209190610baa565b610552565b6040516102329190610c05565b60405180910390f35b61025560048036038101906102509190610c57565b610566565b6040516102629190610c05565b60405180910390f35b61028560048036038101906102809190610baa565b610578565b6040516102929190610cbf565b60405180910390f35b6102b560048036038101906102b09190610c57565b61058c565b6040516102c29190610c05565b60405180910390f35b6102e560048036038101906102e09190610d06565b61059e565b6040516102f29190610cbf565b60405180910390f35b61031560048036038101906103109190610baa565b6105c3565b6040516103229190610cbf565b60405180910390f35b61034560048036038101906103409190610baa565b6105d7565b6040516103529190610c05565b60405180910390f35b61037560048036038101906103709190610baa565b6105eb565b6040516103829190610cbf565b60405180910390f35b6103936105ff565b6040516103a09190610cbf565b60405180910390f35b6103c360048036038101906103be9190610baa565b610604565b6040516103d09190610cbf565b60405180910390f35b6103f360048036038101906103ee9190610baa565b610618565b6040516104009190610cbf565b60405180910390f35b610423600480360381019061041e9190610c57565b61062c565b6040516104309190610b5e565b60405180910390f35b610453600480360381019061044e9190610d5f565b610640565b6040516104609190610cbf565b60405180910390f35b610483600480360381019061047e9190610baa565b610713565b6040516104909190610c05565b60405180910390f35b6104a1610727565b6040516104ae9190610b5e565b60405180910390f35b6104bf610747565b6040516104cc9190610e16565b60405180910390f35b6104ef60048036038101906104ea9190610e56565b61074c565b6040516104fc9190610b5e565b60405180910390f35b601260000b600a6105169190610ff8565b81565b6000610525838361083d565b905092915050565b601281565b600061053e838361084a565b905092915050565b6000601260ff16905090565b600061055e8383610857565b905092915050565b600061057182610864565b9050919050565b60006105848383610870565b905092915050565b600061059782610886565b9050919050565b6000601260000b600a6105b19190610ff8565b826105bc9190611043565b9050919050565b60006105cf8383610892565b905092915050565b60006105e383836108f1565b905092915050565b60006105f783836108ff565b905092915050565b600090565b6000610610838361095e565b905092915050565b6000610624838361097b565b905092915050565b600061063982600261074c565b9050919050565b6000808260126106509190611085565b60000b1215610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068b9061113b565b60405180910390fd5b60408260126106a39190611085565b60000b13156106e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106de906111a7565b60405180910390fd5b8160126106f49190611085565b600a61070091906111d4565b8361070b9190611043565b905092915050565b600061071f83836109b0565b905092915050565b6002601260000b600a61073a9190610ff8565b610744919061124e565b81565b600281565b600060028081111561076157610760610d9f565b5b82600281111561077457610773610d9f565b5b036107c5576107be6002601260000b600a61078f9190610ff8565b610799919061124e565b846107a4919061127f565b6001601260000b600a6107b79190610ff8565b60006109be565b9050610837565b600060028111156107d9576107d8610d9f565b5b8260028111156107ec576107eb610d9f565b5b036108165761080f836001601260000b600a6108089190610ff8565b60006109be565b9050610837565b610834836001601260000b600a61082d9190610ff8565b60016109be565b90505b92915050565b6000818310905092915050565b6000818311905092915050565b6000818314905092915050565b60008082149050919050565b6000818361087e919061127f565b905092915050565b60008082119050919050565b60008082116108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd906112ff565b60405180910390fd5b6108e983670de0b6b3a764000084610a34565b905092915050565b600081831015905092915050565b600061090b83836108f1565b61094a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109419061136b565b60405180910390fd5b8183610956919061138b565b905092915050565b60006109738383670de0b6b3a7640000610a34565b905092915050565b6000610987838361084a565b1561099d5761099683836108ff565b90506109aa565b6109a782846108ff565b90505b92915050565b600081831115905092915050565b6000806109cc868686610a34565b9050600160028111156109e2576109e1610d9f565b5b8360028111156109f5576109f4610d9f565b5b148015610a13575060008480610a0e57610a0d61121f565b5b868809115b15610a2857600181610a25919061127f565b90505b80915050949350505050565b6000806000801985870985870292508281108382030391505060008103610a6f57838281610a6557610a6461121f565b5b0492505050610b3e565b808411610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa89061140b565b60405180910390fd5b60008486880990508281118203915080830392506000600186190186169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b6000819050919050565b610b5881610b45565b82525050565b6000602082019050610b736000830184610b4f565b92915050565b600080fd5b610b8781610b45565b8114610b9257600080fd5b50565b600081359050610ba481610b7e565b92915050565b60008060408385031215610bc157610bc0610b79565b5b6000610bcf85828601610b95565b9250506020610be085828601610b95565b9150509250929050565b60008115159050919050565b610bff81610bea565b82525050565b6000602082019050610c1a6000830184610bf6565b92915050565b60008160000b9050919050565b610c3681610c20565b82525050565b6000602082019050610c516000830184610c2d565b92915050565b600060208284031215610c6d57610c6c610b79565b5b6000610c7b84828501610b95565b91505092915050565b6000819050919050565b6000610ca9610ca4610c9f84610b45565b610c84565b610b45565b9050919050565b610cb981610c8e565b82525050565b6000602082019050610cd46000830184610cb0565b92915050565b610ce381610b45565b8114610cee57600080fd5b50565b600081359050610d0081610cda565b92915050565b600060208284031215610d1c57610d1b610b79565b5b6000610d2a84828501610cf1565b91505092915050565b610d3c81610c20565b8114610d4757600080fd5b50565b600081359050610d5981610d33565b92915050565b60008060408385031215610d7657610d75610b79565b5b6000610d8485828601610cf1565b9250506020610d9585828601610d4a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110610ddf57610dde610d9f565b5b50565b6000819050610df082610dce565b919050565b6000610e0082610de2565b9050919050565b610e1081610df5565b82525050565b6000602082019050610e2b6000830184610e07565b92915050565b60038110610e3e57600080fd5b50565b600081359050610e5081610e31565b92915050565b60008060408385031215610e6d57610e6c610b79565b5b6000610e7b85828601610b95565b9250506020610e8c85828601610e41565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115610f1c57808604811115610ef857610ef7610e96565b5b6001851615610f075780820291505b8081029050610f1585610ec5565b9450610edc565b94509492505050565b600082610f355760019050610ff1565b81610f435760009050610ff1565b8160018114610f595760028114610f6357610f92565b6001915050610ff1565b60ff841115610f7557610f74610e96565b5b8360020a915084821115610f8c57610f8b610e96565b5b50610ff1565b5060208310610133831016604e8410600b8410161715610fc75782820a905083811115610fc257610fc1610e96565b5b610ff1565b610fd48484846001610ed2565b92509050818404811115610feb57610fea610e96565b5b81810290505b9392505050565b600061100382610b45565b915061100e83610b45565b925061103b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610f25565b905092915050565b600061104e82610b45565b915061105983610b45565b925082820261106781610b45565b9150828204841483151761107e5761107d610e96565b5b5092915050565b600061109082610c20565b915061109b83610c20565b925082820190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808112607f821317156110d8576110d7610e96565b5b92915050565b600082825260208201905092915050565b7f4552524f523a464d2d3031303a4558504f4e454e545f544f4f5f534d414c4c00600082015250565b6000611125601f836110de565b9150611130826110ef565b602082019050919050565b6000602082019050818103600083015261115481611118565b9050919050565b7f4552524f523a464d2d3031313a4558504f4e454e545f544f4f5f4c4152474500600082015250565b6000611191601f836110de565b915061119c8261115b565b602082019050919050565b600060208201905081810360008301526111c081611184565b9050919050565b600060ff82169050919050565b60006111df82610b45565b91506111ea836111c7565b92506112177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610f25565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061125982610b45565b915061126483610b45565b9250826112745761127361121f565b5b828204905092915050565b600061128a82610b45565b915061129583610b45565b92508282019050808211156112ad576112ac610e96565b5b92915050565b7f4552524f523a55464d2d3032303a44495649534f525f5a45524f000000000000600082015250565b60006112e9601a836110de565b91506112f4826112b3565b602082019050919050565b60006020820190508181036000830152611318816112dc565b9050919050565b7f4552524f523a55464d2d3031303a4e454741544956455f524553554c54000000600082015250565b6000611355601d836110de565b91506113608261131f565b602082019050919050565b6000602082019050818103600083015261138481611348565b9050919050565b600061139682610b45565b91506113a183610b45565b92508282039050818111156113b9576113b8610e96565b5b92915050565b7f4d6174683a206d756c446976206f766572666c6f770000000000000000000000600082015250565b60006113f56015836110de565b9150611400826113bf565b602082019050919050565b60006020820190508181036000830152611424816113e8565b905091905056fea26469706673582212200b064018c158255b7b936e4318df22e360e216c5f727a99c0c4b27d79d6f863564736f6c63430008140033",
450
- "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061014c5760003560e01c8063b4773329116100c2578063d05b045211610086578063d05b045214610409578063dd45daa114610439578063ea6515c414610469578063eb646d7114610499578063f30ed598146104b7578063f70dd33e146104d55761014c565b8063b47733291461032b578063b67d77c51461035b578063bc1b392d1461038b578063c8a4ac9c146103a9578063cc8b7b73146103d95761014c565b806332148d731161011457806332148d731461020b578063753b14a51461023b578063771602f71461026b5780637a858b971461029b57806392ae8ce0146102cb578063a391c15b146102fb5761014c565b8063059f8b1614610151578063118fc88c1461016f5780631a12cd471461019f57806321e5749b146101bd578063313ce567146101ed575b600080fd5b610159610505565b6040516101669190610b5e565b60405180910390f35b61018960048036038101906101849190610baa565b610519565b6040516101969190610c05565b60405180910390f35b6101a761052d565b6040516101b49190610c3c565b60405180910390f35b6101d760048036038101906101d29190610baa565b610532565b6040516101e49190610c05565b60405180910390f35b6101f5610546565b6040516102029190610b5e565b60405180910390f35b61022560048036038101906102209190610baa565b610552565b6040516102329190610c05565b60405180910390f35b61025560048036038101906102509190610c57565b610566565b6040516102629190610c05565b60405180910390f35b61028560048036038101906102809190610baa565b610578565b6040516102929190610cbf565b60405180910390f35b6102b560048036038101906102b09190610c57565b61058c565b6040516102c29190610c05565b60405180910390f35b6102e560048036038101906102e09190610d06565b61059e565b6040516102f29190610cbf565b60405180910390f35b61031560048036038101906103109190610baa565b6105c3565b6040516103229190610cbf565b60405180910390f35b61034560048036038101906103409190610baa565b6105d7565b6040516103529190610c05565b60405180910390f35b61037560048036038101906103709190610baa565b6105eb565b6040516103829190610cbf565b60405180910390f35b6103936105ff565b6040516103a09190610cbf565b60405180910390f35b6103c360048036038101906103be9190610baa565b610604565b6040516103d09190610cbf565b60405180910390f35b6103f360048036038101906103ee9190610baa565b610618565b6040516104009190610cbf565b60405180910390f35b610423600480360381019061041e9190610c57565b61062c565b6040516104309190610b5e565b60405180910390f35b610453600480360381019061044e9190610d5f565b610640565b6040516104609190610cbf565b60405180910390f35b610483600480360381019061047e9190610baa565b610713565b6040516104909190610c05565b60405180910390f35b6104a1610727565b6040516104ae9190610b5e565b60405180910390f35b6104bf610747565b6040516104cc9190610e16565b60405180910390f35b6104ef60048036038101906104ea9190610e56565b61074c565b6040516104fc9190610b5e565b60405180910390f35b601260000b600a6105169190610ff8565b81565b6000610525838361083d565b905092915050565b601281565b600061053e838361084a565b905092915050565b6000601260ff16905090565b600061055e8383610857565b905092915050565b600061057182610864565b9050919050565b60006105848383610870565b905092915050565b600061059782610886565b9050919050565b6000601260000b600a6105b19190610ff8565b826105bc9190611043565b9050919050565b60006105cf8383610892565b905092915050565b60006105e383836108f1565b905092915050565b60006105f783836108ff565b905092915050565b600090565b6000610610838361095e565b905092915050565b6000610624838361097b565b905092915050565b600061063982600261074c565b9050919050565b6000808260126106509190611085565b60000b1215610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068b9061113b565b60405180910390fd5b60408260126106a39190611085565b60000b13156106e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106de906111a7565b60405180910390fd5b8160126106f49190611085565b600a61070091906111d4565b8361070b9190611043565b905092915050565b600061071f83836109b0565b905092915050565b6002601260000b600a61073a9190610ff8565b610744919061124e565b81565b600281565b600060028081111561076157610760610d9f565b5b82600281111561077457610773610d9f565b5b036107c5576107be6002601260000b600a61078f9190610ff8565b610799919061124e565b846107a4919061127f565b6001601260000b600a6107b79190610ff8565b60006109be565b9050610837565b600060028111156107d9576107d8610d9f565b5b8260028111156107ec576107eb610d9f565b5b036108165761080f836001601260000b600a6108089190610ff8565b60006109be565b9050610837565b610834836001601260000b600a61082d9190610ff8565b60016109be565b90505b92915050565b6000818310905092915050565b6000818311905092915050565b6000818314905092915050565b60008082149050919050565b6000818361087e919061127f565b905092915050565b60008082119050919050565b60008082116108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd906112ff565b60405180910390fd5b6108e983670de0b6b3a764000084610a34565b905092915050565b600081831015905092915050565b600061090b83836108f1565b61094a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109419061136b565b60405180910390fd5b8183610956919061138b565b905092915050565b60006109738383670de0b6b3a7640000610a34565b905092915050565b6000610987838361084a565b1561099d5761099683836108ff565b90506109aa565b6109a782846108ff565b90505b92915050565b600081831115905092915050565b6000806109cc868686610a34565b9050600160028111156109e2576109e1610d9f565b5b8360028111156109f5576109f4610d9f565b5b148015610a13575060008480610a0e57610a0d61121f565b5b868809115b15610a2857600181610a25919061127f565b90505b80915050949350505050565b6000806000801985870985870292508281108382030391505060008103610a6f57838281610a6557610a6461121f565b5b0492505050610b3e565b808411610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa89061140b565b60405180910390fd5b60008486880990508281118203915080830392506000600186190186169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b6000819050919050565b610b5881610b45565b82525050565b6000602082019050610b736000830184610b4f565b92915050565b600080fd5b610b8781610b45565b8114610b9257600080fd5b50565b600081359050610ba481610b7e565b92915050565b60008060408385031215610bc157610bc0610b79565b5b6000610bcf85828601610b95565b9250506020610be085828601610b95565b9150509250929050565b60008115159050919050565b610bff81610bea565b82525050565b6000602082019050610c1a6000830184610bf6565b92915050565b60008160000b9050919050565b610c3681610c20565b82525050565b6000602082019050610c516000830184610c2d565b92915050565b600060208284031215610c6d57610c6c610b79565b5b6000610c7b84828501610b95565b91505092915050565b6000819050919050565b6000610ca9610ca4610c9f84610b45565b610c84565b610b45565b9050919050565b610cb981610c8e565b82525050565b6000602082019050610cd46000830184610cb0565b92915050565b610ce381610b45565b8114610cee57600080fd5b50565b600081359050610d0081610cda565b92915050565b600060208284031215610d1c57610d1b610b79565b5b6000610d2a84828501610cf1565b91505092915050565b610d3c81610c20565b8114610d4757600080fd5b50565b600081359050610d5981610d33565b92915050565b60008060408385031215610d7657610d75610b79565b5b6000610d8485828601610cf1565b9250506020610d9585828601610d4a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110610ddf57610dde610d9f565b5b50565b6000819050610df082610dce565b919050565b6000610e0082610de2565b9050919050565b610e1081610df5565b82525050565b6000602082019050610e2b6000830184610e07565b92915050565b60038110610e3e57600080fd5b50565b600081359050610e5081610e31565b92915050565b60008060408385031215610e6d57610e6c610b79565b5b6000610e7b85828601610b95565b9250506020610e8c85828601610e41565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115610f1c57808604811115610ef857610ef7610e96565b5b6001851615610f075780820291505b8081029050610f1585610ec5565b9450610edc565b94509492505050565b600082610f355760019050610ff1565b81610f435760009050610ff1565b8160018114610f595760028114610f6357610f92565b6001915050610ff1565b60ff841115610f7557610f74610e96565b5b8360020a915084821115610f8c57610f8b610e96565b5b50610ff1565b5060208310610133831016604e8410600b8410161715610fc75782820a905083811115610fc257610fc1610e96565b5b610ff1565b610fd48484846001610ed2565b92509050818404811115610feb57610fea610e96565b5b81810290505b9392505050565b600061100382610b45565b915061100e83610b45565b925061103b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610f25565b905092915050565b600061104e82610b45565b915061105983610b45565b925082820261106781610b45565b9150828204841483151761107e5761107d610e96565b5b5092915050565b600061109082610c20565b915061109b83610c20565b925082820190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808112607f821317156110d8576110d7610e96565b5b92915050565b600082825260208201905092915050565b7f4552524f523a464d2d3031303a4558504f4e454e545f544f4f5f534d414c4c00600082015250565b6000611125601f836110de565b9150611130826110ef565b602082019050919050565b6000602082019050818103600083015261115481611118565b9050919050565b7f4552524f523a464d2d3031313a4558504f4e454e545f544f4f5f4c4152474500600082015250565b6000611191601f836110de565b915061119c8261115b565b602082019050919050565b600060208201905081810360008301526111c081611184565b9050919050565b600060ff82169050919050565b60006111df82610b45565b91506111ea836111c7565b92506112177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610f25565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061125982610b45565b915061126483610b45565b9250826112745761127361121f565b5b828204905092915050565b600061128a82610b45565b915061129583610b45565b92508282019050808211156112ad576112ac610e96565b5b92915050565b7f4552524f523a55464d2d3032303a44495649534f525f5a45524f000000000000600082015250565b60006112e9601a836110de565b91506112f4826112b3565b602082019050919050565b60006020820190508181036000830152611318816112dc565b9050919050565b7f4552524f523a55464d2d3031303a4e454741544956455f524553554c54000000600082015250565b6000611355601d836110de565b91506113608261131f565b602082019050919050565b6000602082019050818103600083015261138481611348565b9050919050565b600061139682610b45565b91506113a183610b45565b92508282039050818111156113b9576113b8610e96565b5b92915050565b7f4d6174683a206d756c446976206f766572666c6f770000000000000000000000600082015250565b60006113f56015836110de565b9150611400826113bf565b602082019050919050565b60006020820190508181036000830152611424816113e8565b905091905056fea26469706673582212200b064018c158255b7b936e4318df22e360e216c5f727a99c0c4b27d79d6f863564736f6c63430008140033",
475
+ "bytecode": "0x610a2d61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c806393aa8725116100cd578063c8a4ac9c11610086578063c8a4ac9c146102af578063cc8b7b73146102c2578063d05b0452146102d5578063dd45daa1146102e8578063ea6515c4146102fb578063eb646d711461030e57600080fd5b806393aa872514610261578063a391c15b14610268578063b47733291461027b578063b67d77c51461028e578063bc1b392d146102a1578063bdbb4630146102a857600080fd5b8063753b14a51161011f578063753b14a5146101ed578063771602f7146102005780637a858b971461021357806389fa8ed7146102265780638f24f6011461023b57806392ae8ce01461024e57600080fd5b8063059f8b1614610167578063118fc88c146101825780631a12cd47146101a557806321e5749b146101c0578063313ce567146101d357806332148d73146101da575b600080fd5b61016f610316565b6040519081526020015b60405180910390f35b61019561019036600461079a565b610325565b6040519015158152602001610179565b6101ad601281565b60405160009190910b8152602001610179565b6101956101ce36600461079a565b610334565b601261016f565b6101956101e836600461079a565b61033e565b6101956101fb3660046107bc565b610348565b61016f61020e36600461079a565b610351565b6101956102213660046107bc565b61035d565b60025b60405160ff9091168152602001610179565b61016f6102493660046107d5565b610367565b61016f61025c3660046107bc565b6103e9565b6000610229565b61016f61027636600461079a565b610401565b61019561028936600461079a565b61040d565b61016f61029c36600461079a565b610418565b600061016f565b6001610229565b61016f6102bd36600461079a565b610424565b61016f6102d036600461079a565b610430565b61016f6102e33660046107bc565b61043c565b61016f6102f636600461080b565b610449565b61019561030936600461079a565b61052b565b61016f610536565b6103226012600a610930565b81565b60008282115b90505b92915050565b600082821061032b565b600081831461032b565b6000811561032e565b600061032b838361054e565b600081151561032e565b600060011960ff8316016103b6576103af60026103866012600a610930565b6103909190610952565b61039a9085610974565b60016103a86012600a610930565b600061055a565b905061032e565b60ff82166103d0576103af8360016103a86012600a610930565b6103af8360016103e26012600a610930565b600161055a565b60006103f76012600a610930565b61032e9083610987565b600061032b83836105b7565b60008282111561032b565b600061032b838361061b565b600061032b8383610677565b600061032b838361068c565b600061032e826002610367565b60008061045783601261099e565b60000b12156104ad5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031303a4558504f4e454e545f544f4f5f534d414c4c0060448201526064015b60405180910390fd5b60406104ba83601261099e565b60000b131561050b5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031313a4558504f4e454e545f544f4f5f4c415247450060448201526064016104a4565b61051682601261099e565b61052190600a6109bf565b61032b9084610987565b60008282101561032b565b60026105446012600a610930565b6103229190610952565b600061032b8284610974565b6000806105688686866106aa565b9050600183600281111561057e5761057e6109ce565b14801561059b5750600084806105965761059661093c565b868809115b156105ae576105ab600182610974565b90505b95945050505050565b60008082116106085760405162461bcd60e51b815260206004820152601a60248201527f4552524f523a55464d2d3032303a44495649534f525f5a45524f00000000000060448201526064016104a4565b61032b83670de0b6b3a7640000846106aa565b60008282111561066d5760405162461bcd60e51b815260206004820152601d60248201527f4552524f523a55464d2d3031303a4e454741544956455f524553554c5400000060448201526064016104a4565b61032b82846109e4565b600061032b8383670de0b6b3a76400006106aa565b6000828210156106a0576103af838361061b565b61032b828461061b565b60008080600019858709858702925082811083820303915050806000036106e4578382816106da576106da61093c565b0492505050610793565b80841161072b5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016104a4565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080604083850312156107ad57600080fd5b50508035926020909101359150565b6000602082840312156107ce57600080fd5b5035919050565b600080604083850312156107e857600080fd5b82359150602083013560ff8116811461080057600080fd5b809150509250929050565b6000806040838503121561081e57600080fd5b8235915060208301358060000b811461080057600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561088757816000190482111561086d5761086d610836565b8085161561087a57918102915b93841c9390800290610851565b509250929050565b60008261089e5750600161032e565b816108ab5750600061032e565b81600181146108c157600281146108cb576108e7565b600191505061032e565b60ff8411156108dc576108dc610836565b50506001821b61032e565b5060208310610133831016604e8410600b841016171561090a575081810a61032e565b610914838361084c565b806000190482111561092857610928610836565b029392505050565b600061032b838361088f565b634e487b7160e01b600052601260045260246000fd5b60008261096f57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561032e5761032e610836565b808202811582820484141761032e5761032e610836565b600081810b9083900b01607f8113607f198212171561032e5761032e610836565b600061032b60ff84168361088f565b634e487b7160e01b600052602160045260246000fd5b8181038181111561032e5761032e61083656fea2646970667358221220a5d86e098c418522257789f942a85f958c24134c3527e49c06970e7022704f0964736f6c63430008140033",
476
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c806393aa8725116100cd578063c8a4ac9c11610086578063c8a4ac9c146102af578063cc8b7b73146102c2578063d05b0452146102d5578063dd45daa1146102e8578063ea6515c4146102fb578063eb646d711461030e57600080fd5b806393aa872514610261578063a391c15b14610268578063b47733291461027b578063b67d77c51461028e578063bc1b392d146102a1578063bdbb4630146102a857600080fd5b8063753b14a51161011f578063753b14a5146101ed578063771602f7146102005780637a858b971461021357806389fa8ed7146102265780638f24f6011461023b57806392ae8ce01461024e57600080fd5b8063059f8b1614610167578063118fc88c146101825780631a12cd47146101a557806321e5749b146101c0578063313ce567146101d357806332148d73146101da575b600080fd5b61016f610316565b6040519081526020015b60405180910390f35b61019561019036600461079a565b610325565b6040519015158152602001610179565b6101ad601281565b60405160009190910b8152602001610179565b6101956101ce36600461079a565b610334565b601261016f565b6101956101e836600461079a565b61033e565b6101956101fb3660046107bc565b610348565b61016f61020e36600461079a565b610351565b6101956102213660046107bc565b61035d565b60025b60405160ff9091168152602001610179565b61016f6102493660046107d5565b610367565b61016f61025c3660046107bc565b6103e9565b6000610229565b61016f61027636600461079a565b610401565b61019561028936600461079a565b61040d565b61016f61029c36600461079a565b610418565b600061016f565b6001610229565b61016f6102bd36600461079a565b610424565b61016f6102d036600461079a565b610430565b61016f6102e33660046107bc565b61043c565b61016f6102f636600461080b565b610449565b61019561030936600461079a565b61052b565b61016f610536565b6103226012600a610930565b81565b60008282115b90505b92915050565b600082821061032b565b600081831461032b565b6000811561032e565b600061032b838361054e565b600081151561032e565b600060011960ff8316016103b6576103af60026103866012600a610930565b6103909190610952565b61039a9085610974565b60016103a86012600a610930565b600061055a565b905061032e565b60ff82166103d0576103af8360016103a86012600a610930565b6103af8360016103e26012600a610930565b600161055a565b60006103f76012600a610930565b61032e9083610987565b600061032b83836105b7565b60008282111561032b565b600061032b838361061b565b600061032b8383610677565b600061032b838361068c565b600061032e826002610367565b60008061045783601261099e565b60000b12156104ad5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031303a4558504f4e454e545f544f4f5f534d414c4c0060448201526064015b60405180910390fd5b60406104ba83601261099e565b60000b131561050b5760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a464d2d3031313a4558504f4e454e545f544f4f5f4c415247450060448201526064016104a4565b61051682601261099e565b61052190600a6109bf565b61032b9084610987565b60008282101561032b565b60026105446012600a610930565b6103229190610952565b600061032b8284610974565b6000806105688686866106aa565b9050600183600281111561057e5761057e6109ce565b14801561059b5750600084806105965761059661093c565b868809115b156105ae576105ab600182610974565b90505b95945050505050565b60008082116106085760405162461bcd60e51b815260206004820152601a60248201527f4552524f523a55464d2d3032303a44495649534f525f5a45524f00000000000060448201526064016104a4565b61032b83670de0b6b3a7640000846106aa565b60008282111561066d5760405162461bcd60e51b815260206004820152601d60248201527f4552524f523a55464d2d3031303a4e454741544956455f524553554c5400000060448201526064016104a4565b61032b82846109e4565b600061032b8383670de0b6b3a76400006106aa565b6000828210156106a0576103af838361061b565b61032b828461061b565b60008080600019858709858702925082811083820303915050806000036106e4578382816106da576106da61093c565b0492505050610793565b80841161072b5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016104a4565b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600080604083850312156107ad57600080fd5b50508035926020909101359150565b6000602082840312156107ce57600080fd5b5035919050565b600080604083850312156107e857600080fd5b82359150602083013560ff8116811461080057600080fd5b809150509250929050565b6000806040838503121561081e57600080fd5b8235915060208301358060000b811461080057600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561088757816000190482111561086d5761086d610836565b8085161561087a57918102915b93841c9390800290610851565b509250929050565b60008261089e5750600161032e565b816108ab5750600061032e565b81600181146108c157600281146108cb576108e7565b600191505061032e565b60ff8411156108dc576108dc610836565b50506001821b61032e565b5060208310610133831016604e8410600b841016171561090a575081810a61032e565b610914838361084c565b806000190482111561092857610928610836565b029392505050565b600061032b838361088f565b634e487b7160e01b600052601260045260246000fd5b60008261096f57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561032e5761032e610836565b808202811582820484141761032e5761032e610836565b600081810b9083900b01607f8113607f198212171561032e5761032e610836565b600061032b60ff84168361088f565b634e487b7160e01b600052602160045260246000fd5b8181038181111561032e5761032e61083656fea2646970667358221220a5d86e098c418522257789f942a85f958c24134c3527e49c06970e7022704f0964736f6c63430008140033",
451
477
  "linkReferences": {},
452
478
  "deployedLinkReferences": {}
453
479
  }
@@ -1,6 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
4
6
  import {IRegistry, IRegisterable, IRegistryLinked} from "../registry/IRegistry.sol";
5
7
  import {Registerable} from "../registry/Registry.sol";
6
8
  import {IInstance} from "../instance/IInstance.sol";
@@ -15,11 +17,6 @@ contract InstanceLinked is IInstanceLinked {
15
17
  _instance = IInstance(instance);
16
18
  }
17
19
 
18
- // function setInstance(address instance) public override {
19
- // require(address(_instance) == address(0), "ERROR:RGL-001:INSTANCE_ALREADY_SET");
20
- // _instance = IInstance(instance);
21
- // }
22
-
23
20
  function getInstance() public view override returns (IInstance instance) {
24
21
  return _instance;
25
22
  }
@@ -31,11 +28,17 @@ abstract contract Component is
31
28
  IComponentContract
32
29
  {
33
30
  address private _deployer;
31
+ address private _wallet;
32
+ IERC20Metadata private _token;
34
33
 
35
34
  constructor(
36
35
  address registry,
37
- address instance
38
- ) Registerable(registry) InstanceLinked(instance) {}
36
+ address instance,
37
+ address token
38
+ ) Registerable(registry) InstanceLinked(instance) {
39
+ _wallet = address(this);
40
+ _token = IERC20Metadata(token);
41
+ }
39
42
 
40
43
  // from registerable
41
44
  function register() public override returns (NftId componentId) {
@@ -57,4 +60,18 @@ abstract contract Component is
57
60
  function getParentNftId() public view override returns (NftId) {
58
61
  return getInstance().getNftId();
59
62
  }
63
+
64
+ // from component contract
65
+ function getWallet()
66
+ external
67
+ view
68
+ override
69
+ returns (address walletAddress)
70
+ {
71
+ return _wallet;
72
+ }
73
+
74
+ function getToken() external view override returns (IERC20Metadata token) {
75
+ return _token;
76
+ }
60
77
  }
@@ -1,9 +1,15 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {Fee} from "../types/Fee.sol";
4
5
  import {IComponentContract} from "../instance/component/IComponent.sol";
5
6
 
6
7
  // just marker interface for now
7
8
  interface IPoolComponent is IComponentContract {
9
+ function getStakingFee() external view returns (Fee memory stakingFee);
8
10
 
11
+ function getPerformanceFee()
12
+ external
13
+ view
14
+ returns (Fee memory performanceFee);
9
15
  }
@@ -1,9 +1,16 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IComponentContract} from "../instance/component/IComponent.sol";
5
4
  import {NftId} from "../types/NftId.sol";
5
+ import {Fee} from "../types/Fee.sol";
6
6
 
7
- interface IProductComponent is IComponentContract {
7
+ interface IProductComponent {
8
8
  function getPoolNftId() external view returns (NftId poolNftId);
9
+
10
+ function getPolicyFee() external view returns (Fee memory policyFee);
11
+
12
+ function getProcessingFee()
13
+ external
14
+ view
15
+ returns (Fee memory processingFee);
9
16
  }
@@ -1,18 +1,48 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {ObjectType, POOL} from "../types/ObjectType.sol";
5
+ import {Fee} from "../types/Fee.sol";
4
6
  import {IPoolComponent} from "./IPool.sol";
5
7
  import {Component} from "./Component.sol";
6
8
 
7
9
  contract Pool is Component, IPoolComponent {
10
+ Fee private _stakingFee;
11
+ Fee private _performanceFee;
12
+
8
13
  constructor(
9
14
  address registry,
10
- address instance
11
- ) Component(registry, instance) {}
15
+ address instance,
16
+ address token,
17
+ Fee memory stakingFee,
18
+ Fee memory performanceFee
19
+ ) Component(registry, instance, token) {
20
+ _stakingFee = stakingFee;
21
+ _performanceFee = performanceFee;
22
+ }
23
+
24
+ // from pool component
25
+ function getStakingFee()
26
+ external
27
+ view
28
+ override
29
+ returns (Fee memory stakingFee)
30
+ {
31
+ return _stakingFee;
32
+ }
33
+
34
+ function getPerformanceFee()
35
+ external
36
+ view
37
+ override
38
+ returns (Fee memory performanceFee)
39
+ {
40
+ return _performanceFee;
41
+ }
12
42
 
13
43
  // from registerable
14
- function getType() public view override returns (uint256) {
15
- return _registry.POOL();
44
+ function getType() public pure override returns (ObjectType) {
45
+ return POOL();
16
46
  }
17
47
 
18
48
  // from registerable
@@ -5,18 +5,29 @@ import {IProductService} from "../instance/product/IProductService.sol";
5
5
  import {Component} from "./Component.sol";
6
6
  import {IProductComponent} from "./IProduct.sol";
7
7
  import {NftId} from "../types/NftId.sol";
8
+ import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
9
+ import {Fee} from "../types/Fee.sol";
10
+ import {Component} from "./Component.sol";
8
11
 
9
12
  contract Product is Component, IProductComponent {
10
13
  IProductService private _productService;
11
14
  address private _pool;
15
+ Fee private _policyFee;
16
+ Fee private _processingFee;
12
17
 
13
18
  constructor(
14
19
  address registry,
15
20
  address instance,
16
- address pool
17
- ) Component(registry, instance) {
21
+ address token,
22
+ address pool,
23
+ Fee memory policyFee,
24
+ Fee memory processingFee
25
+ ) Component(registry, instance, token) {
26
+ // TODO add validation
18
27
  _productService = _instance.getProductService();
19
28
  _pool = pool;
29
+ _policyFee = policyFee;
30
+ _processingFee = processingFee;
20
31
  }
21
32
 
22
33
  function _createApplication(
@@ -39,13 +50,36 @@ contract Product is Component, IProductComponent {
39
50
  _productService.underwrite(nftId);
40
51
  }
41
52
 
53
+ function _collectPremium(NftId nftId) internal {
54
+ _productService.collectPremium(nftId);
55
+ }
56
+
42
57
  function getPoolNftId() external view override returns (NftId poolNftId) {
43
58
  return _registry.getNftId(_pool);
44
59
  }
45
60
 
61
+ // from product component
62
+ function getPolicyFee()
63
+ external
64
+ view
65
+ override
66
+ returns (Fee memory policyFee)
67
+ {
68
+ return _policyFee;
69
+ }
70
+
71
+ function getProcessingFee()
72
+ external
73
+ view
74
+ override
75
+ returns (Fee memory processingFee)
76
+ {
77
+ return _processingFee;
78
+ }
79
+
46
80
  // from registerable
47
- function getType() public view override returns (uint256) {
48
- return _registry.PRODUCT();
81
+ function getType() public pure override returns (ObjectType) {
82
+ return PRODUCT();
49
83
  }
50
84
 
51
85
  // from registerable
@@ -0,0 +1,27 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {ObjectType} from "../../types/ObjectType.sol";
5
+ import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
6
+
7
+ contract LifeCycleModule {
8
+ mapping(ObjectType objectType => StateId initialState)
9
+ private _initialState;
10
+
11
+ mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
12
+ private _isValidTransition;
13
+
14
+ function getInitialState(
15
+ ObjectType objectType
16
+ ) external view returns (StateId) {
17
+ return _initialState[objectType];
18
+ }
19
+
20
+ function isValidTransition(
21
+ ObjectType objectType,
22
+ StateId fromId,
23
+ StateId toId
24
+ ) external view returns (bool) {
25
+ return _isValidTransition[objectType][fromId][toId];
26
+ }
27
+ }
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {StateId} from "../../types/StateId.sol";
5
+
6
+ interface ISMEE {
7
+ error ErrorInitialStateUndefined();
8
+ error ErrorStartStateUndefined();
9
+ error ErrorNextStateUndefined();
10
+ error ErrorStateChangeInvalid(StateId currentStateId, StateId newStateId);
11
+
12
+ event LogInitialStateSet(StateId initialStateId);
13
+ event LogStateChanged(StateId oldStateId, StateId newStateId);
14
+ }
15
+
16
+ interface ISM is ISMEE {
17
+ function changeToState(StateId newStateId) external;
18
+
19
+ function isValidTransition(
20
+ StateId currentStateId,
21
+ StateId newStateId
22
+ ) external view returns (bool isValid);
23
+
24
+ function getState() external view returns (StateId currentStateId);
25
+ }
@@ -0,0 +1,112 @@
1
+ # State Machines
2
+
3
+ Most GIF objects have a life cycle defined by a state machine.
4
+
5
+ For each object type the set of possible states is defined together with its initial state and the set of valid state transitions.
6
+
7
+ ## Object Types without States
8
+
9
+ * Protocol
10
+ * Chains
11
+ * Registries (both chain and main registry)
12
+
13
+ ## Object Types with States
14
+
15
+ * Tokens
16
+ * Instances
17
+ * Products
18
+ * Oracles
19
+ * Pools
20
+ * Bundles
21
+ * Policies
22
+ * Claim (non-NFT)
23
+ * Payout (non-NFT)
24
+
25
+ ### Simple State Machine
26
+
27
+ Valid states
28
+
29
+ * Active (initial state)
30
+ * Paused
31
+ * Archived (final state)
32
+
33
+ Valid state transitions:
34
+
35
+ * Active -> Paused
36
+ * Paused -> Active
37
+ * Paused -> Archived
38
+
39
+
40
+ Candidate object types for simple state machine
41
+
42
+ * Token
43
+ * Instance
44
+ * Product
45
+ * Oracle
46
+ * Pool
47
+
48
+ To discuss:
49
+
50
+ * Archived is final state
51
+ * What mechanism should exist to revert an unintended transition to 'Archived' state. Should there be such a mechanism?
52
+ * What mechanism should exist when the NFT of such an object is burned prematurely. Should there be such a mechanism
53
+
54
+ ### Bundle State Machine
55
+
56
+ Valid states
57
+
58
+ * Active (initial state)
59
+ * Paused
60
+ * Expired (implicit state)
61
+ * Closed (final state)
62
+
63
+ Expired is not an explicit state.
64
+ A bundle is expired for block.timestamp >= expiredAt
65
+
66
+ ### Policy State Machine
67
+
68
+ Valid states
69
+
70
+ * Applied (initial state)
71
+ * Revoked (final state)
72
+ * Declined (final state)
73
+ * Active
74
+ * Expired (implicit state)
75
+ * Closed (final state)
76
+
77
+ Expired is not an explicit state.
78
+ A policy is expired for block.timestamp >= expiredAt
79
+
80
+ To discuss:
81
+
82
+ * Should 'Closed' be less explicit using a closedAt state variable?
83
+ * Or even more lighweight? ie. block.timestamp >= expiredAt and no open claims
84
+
85
+ Valid state transitions:
86
+
87
+ * Applied -> Revoked
88
+ * Applied -> Declined
89
+ * Applied -> Active
90
+ * Active -> Closed (needs to be expired)
91
+
92
+ ### Claim State Machine
93
+
94
+ Valid states
95
+ * Applied (initial state)
96
+ * Confirmed
97
+ * Declined (final state)
98
+ * Closed (final state)
99
+
100
+ Valid state transitions:
101
+ * Applied -> Confirmed
102
+ * Applied -> Declined
103
+ * Confirmed -> Closed
104
+
105
+ ### Payout State Machine
106
+
107
+ Valid states
108
+ * Expected
109
+ * PaidOut
110
+
111
+ Valid state transitions:
112
+ * Expected -> PaidOut
@@ -0,0 +1,57 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {StateId, toStateId, zeroStateId} from "../../types/StateId.sol";
5
+ import {ISM} from "./ISM.sol";
6
+
7
+ contract SM is ISM {
8
+ mapping(StateId currentState => mapping(StateId newState => bool isValid))
9
+ private _isValidTransition;
10
+
11
+ StateId internal _state;
12
+
13
+ function setInitialState(StateId initialStateId) internal {
14
+ if (initialStateId == zeroStateId()) {
15
+ revert ErrorInitialStateUndefined();
16
+ }
17
+
18
+ _state = initialStateId;
19
+ }
20
+
21
+ function addTransition(
22
+ StateId currentStateId,
23
+ StateId nextStateId
24
+ ) internal {
25
+ if (currentStateId == zeroStateId()) {
26
+ revert ErrorStartStateUndefined();
27
+ }
28
+
29
+ if (nextStateId == zeroStateId()) {
30
+ revert ErrorNextStateUndefined();
31
+ }
32
+
33
+ _isValidTransition[currentStateId][nextStateId] = true;
34
+ }
35
+
36
+ function changeToState(StateId newStateId) external override {
37
+ if (!_isValidTransition[_state][newStateId]) {
38
+ revert ErrorStateChangeInvalid(_state, newStateId);
39
+ }
40
+
41
+ StateId stateOld = _state;
42
+ _state = newStateId;
43
+
44
+ emit LogStateChanged(stateOld, _state);
45
+ }
46
+
47
+ function isValidTransition(
48
+ StateId currentStateId,
49
+ StateId newStateId
50
+ ) external view override returns (bool isValid) {
51
+ return _isValidTransition[currentStateId][newStateId];
52
+ }
53
+
54
+ function getState() external view override returns (StateId state) {
55
+ return _state;
56
+ }
57
+ }
@@ -0,0 +1,31 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {StateId, toStateId} from "../../types/StateId.sol";
5
+ import {SM} from "./SM.sol";
6
+
7
+ contract SimpleStateMachine is SM {
8
+ uint8 public constant STATE_ACTIVE = 10;
9
+ uint8 public constant STATE_PAUSED = 20;
10
+ uint8 public constant STATE_ARCHIVED = 30;
11
+
12
+ constructor() {
13
+ addTransition(ACTIVE(), PAUSED());
14
+ addTransition(PAUSED(), ACTIVE());
15
+ addTransition(PAUSED(), ARCHIVED());
16
+
17
+ setInitialState(ACTIVE());
18
+ }
19
+
20
+ function ACTIVE() public pure returns (StateId stateId) {
21
+ return toStateId(STATE_ACTIVE);
22
+ }
23
+
24
+ function PAUSED() public pure returns (StateId stateId) {
25
+ return toStateId(STATE_PAUSED);
26
+ }
27
+
28
+ function ARCHIVED() public pure returns (StateId stateId) {
29
+ return toStateId(STATE_ARCHIVED);
30
+ }
31
+ }
@@ -3,16 +3,23 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegisterable} from "../registry/IRegistry.sol";
5
5
  import {IAccessModule} from "./access/IAccess.sol";
6
+ import {ILifecycleModule} from "./lifecycle/ILifecycle.sol";
6
7
  import {IComponentModule} from "./component/IComponent.sol";
7
8
  import {IProductModule} from "./product/IProductService.sol";
8
9
  import {IPolicyModule} from "./policy/IPolicy.sol";
9
10
  import {IPoolModule} from "./pool/IPoolModule.sol";
11
+ import {ITreasuryModule} from "./treasury/ITreasury.sol";
10
12
 
13
+ // solhint-disable-next-line no-empty-blocks
11
14
  interface IInstance is
12
15
  IRegisterable,
13
16
  IAccessModule,
17
+ ILifecycleModule,
14
18
  IPolicyModule,
15
19
  IPoolModule,
16
20
  IComponentModule,
17
- IProductModule
18
- {}
21
+ IProductModule,
22
+ ITreasuryModule
23
+ {
24
+
25
+ }