@boostxyz/sdk 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/Actions/Action.cjs +1 -1
  2. package/dist/Actions/Action.cjs.map +1 -1
  3. package/dist/Actions/Action.d.ts +2 -1
  4. package/dist/Actions/Action.d.ts.map +1 -1
  5. package/dist/Actions/Action.js +14 -13
  6. package/dist/Actions/Action.js.map +1 -1
  7. package/dist/Actions/EventAction.cjs +1 -1
  8. package/dist/Actions/EventAction.cjs.map +1 -1
  9. package/dist/Actions/EventAction.d.ts.map +1 -1
  10. package/dist/Actions/EventAction.js +33 -33
  11. package/dist/Actions/EventAction.js.map +1 -1
  12. package/dist/AllowLists/AllowList.cjs +1 -1
  13. package/dist/AllowLists/AllowList.cjs.map +1 -1
  14. package/dist/AllowLists/AllowList.d.ts +2 -1
  15. package/dist/AllowLists/AllowList.d.ts.map +1 -1
  16. package/dist/AllowLists/AllowList.js +19 -18
  17. package/dist/AllowLists/AllowList.js.map +1 -1
  18. package/dist/AllowLists/SimpleAllowList.cjs +1 -1
  19. package/dist/AllowLists/SimpleAllowList.js +7 -7
  20. package/dist/AllowLists/SimpleDenyList.cjs +1 -1
  21. package/dist/AllowLists/SimpleDenyList.js +3 -3
  22. package/dist/Auth/PassthroughAuth.cjs +1 -1
  23. package/dist/Auth/PassthroughAuth.js +1 -1
  24. package/dist/BoostCore.cjs +2 -2
  25. package/dist/BoostCore.cjs.map +1 -1
  26. package/dist/BoostCore.d.ts +13 -4
  27. package/dist/BoostCore.d.ts.map +1 -1
  28. package/dist/BoostCore.js +58 -57
  29. package/dist/BoostCore.js.map +1 -1
  30. package/dist/BoostRegistry.cjs +1 -1
  31. package/dist/BoostRegistry.js +11 -11
  32. package/dist/{Budget-DpQgIZEx.js → Budget-B0q1S08L.js} +33 -32
  33. package/dist/{Budget-DpQgIZEx.js.map → Budget-B0q1S08L.js.map} +1 -1
  34. package/dist/{Budget-BxQMnsdx.cjs → Budget-BA_1sa1e.cjs} +2 -2
  35. package/dist/{Budget-BxQMnsdx.cjs.map → Budget-BA_1sa1e.cjs.map} +1 -1
  36. package/dist/Budgets/Budget.cjs +1 -1
  37. package/dist/Budgets/Budget.d.ts +2 -1
  38. package/dist/Budgets/Budget.d.ts.map +1 -1
  39. package/dist/Budgets/Budget.js +2 -2
  40. package/dist/Budgets/ManagedBudget.cjs +1 -1
  41. package/dist/Budgets/ManagedBudget.js +11 -11
  42. package/dist/Deployable/DeployableTarget.cjs +1 -1
  43. package/dist/Deployable/DeployableTarget.js +1 -1
  44. package/dist/Deployable/DeployableTargetWithRBAC.cjs +1 -1
  45. package/dist/Deployable/DeployableTargetWithRBAC.cjs.map +1 -1
  46. package/dist/Deployable/DeployableTargetWithRBAC.d.ts +158 -0
  47. package/dist/Deployable/DeployableTargetWithRBAC.d.ts.map +1 -1
  48. package/dist/Deployable/DeployableTargetWithRBAC.js +268 -31
  49. package/dist/Deployable/DeployableTargetWithRBAC.js.map +1 -1
  50. package/dist/Incentives/AllowListIncentive.cjs +1 -1
  51. package/dist/Incentives/AllowListIncentive.cjs.map +1 -1
  52. package/dist/Incentives/AllowListIncentive.js +27 -27
  53. package/dist/Incentives/AllowListIncentive.js.map +1 -1
  54. package/dist/Incentives/CGDAIncentive.cjs +1 -1
  55. package/dist/Incentives/CGDAIncentive.cjs.map +1 -1
  56. package/dist/Incentives/CGDAIncentive.js +9 -9
  57. package/dist/Incentives/CGDAIncentive.js.map +1 -1
  58. package/dist/Incentives/ERC20Incentive.cjs +1 -1
  59. package/dist/Incentives/ERC20Incentive.cjs.map +1 -1
  60. package/dist/Incentives/ERC20Incentive.js +30 -30
  61. package/dist/Incentives/ERC20Incentive.js.map +1 -1
  62. package/dist/Incentives/ERC20VariableCriteriaIncentive.cjs +1 -1
  63. package/dist/Incentives/ERC20VariableCriteriaIncentive.js +11 -11
  64. package/dist/Incentives/ERC20VariableIncentive.cjs +1 -1
  65. package/dist/Incentives/ERC20VariableIncentive.cjs.map +1 -1
  66. package/dist/Incentives/ERC20VariableIncentive.js +12 -12
  67. package/dist/Incentives/ERC20VariableIncentive.js.map +1 -1
  68. package/dist/Incentives/Incentive.cjs +1 -1
  69. package/dist/Incentives/Incentive.cjs.map +1 -1
  70. package/dist/Incentives/Incentive.d.ts +2 -1
  71. package/dist/Incentives/Incentive.d.ts.map +1 -1
  72. package/dist/Incentives/Incentive.js +29 -28
  73. package/dist/Incentives/Incentive.js.map +1 -1
  74. package/dist/Incentives/PointsIncentive.cjs +1 -1
  75. package/dist/Incentives/PointsIncentive.cjs.map +1 -1
  76. package/dist/Incentives/PointsIncentive.js +25 -25
  77. package/dist/Incentives/PointsIncentive.js.map +1 -1
  78. package/dist/{SimpleDenyList-CA24drhL.cjs → SimpleDenyList-DrQrJ14i.cjs} +2 -2
  79. package/dist/{SimpleDenyList-CA24drhL.cjs.map → SimpleDenyList-DrQrJ14i.cjs.map} +1 -1
  80. package/dist/{SimpleDenyList-UHgnaOb_.js → SimpleDenyList-DuCoaOlG.js} +9 -9
  81. package/dist/{SimpleDenyList-UHgnaOb_.js.map → SimpleDenyList-DuCoaOlG.js.map} +1 -1
  82. package/dist/Validators/LimitedSignerValidator.cjs +1 -1
  83. package/dist/Validators/LimitedSignerValidator.js +7 -7
  84. package/dist/Validators/SignerValidator.cjs +1 -1
  85. package/dist/Validators/SignerValidator.js +5 -5
  86. package/dist/Validators/Validator.cjs +1 -1
  87. package/dist/Validators/Validator.cjs.map +1 -1
  88. package/dist/Validators/Validator.d.ts +2 -1
  89. package/dist/Validators/Validator.d.ts.map +1 -1
  90. package/dist/Validators/Validator.js +22 -21
  91. package/dist/Validators/Validator.js.map +1 -1
  92. package/dist/deployments-BucJ-gwk.cjs +2 -0
  93. package/dist/deployments-BucJ-gwk.cjs.map +1 -0
  94. package/dist/deployments-CQu0bLhU.js +102 -0
  95. package/dist/deployments-CQu0bLhU.js.map +1 -0
  96. package/dist/deployments.json +77 -74
  97. package/dist/{generated-B0XfMfoq.js → generated-1ZT_mHJx.js} +673 -450
  98. package/dist/generated-1ZT_mHJx.js.map +1 -0
  99. package/dist/generated-CgBgbMNe.cjs +3 -0
  100. package/dist/generated-CgBgbMNe.cjs.map +1 -0
  101. package/dist/index.cjs +1 -1
  102. package/dist/index.js +3 -3
  103. package/package.json +2 -2
  104. package/src/Actions/Action.ts +3 -0
  105. package/src/Actions/EventAction.test.ts +49 -2
  106. package/src/Actions/EventAction.ts +12 -4
  107. package/src/AllowLists/AllowList.ts +3 -0
  108. package/src/BoostCore.ts +16 -11
  109. package/src/Budgets/Budget.ts +3 -0
  110. package/src/Deployable/DeployableTargetWithRBAC.test.ts +175 -0
  111. package/src/Deployable/DeployableTargetWithRBAC.ts +281 -0
  112. package/src/Incentives/AllowListIncentive.test.ts +48 -0
  113. package/src/Incentives/AllowListIncentive.ts +1 -1
  114. package/src/Incentives/CGDAIncentive.test.ts +50 -0
  115. package/src/Incentives/CGDAIncentive.ts +1 -1
  116. package/src/Incentives/ERC1155Incentive.ts +1 -1
  117. package/src/Incentives/ERC20Incentive.test.ts +49 -0
  118. package/src/Incentives/ERC20Incentive.ts +1 -1
  119. package/src/Incentives/ERC20VariableIncentive.test.ts +48 -0
  120. package/src/Incentives/ERC20VariableIncentive.ts +1 -1
  121. package/src/Incentives/Incentive.ts +3 -0
  122. package/src/Incentives/PointsIncentive.test.ts +51 -0
  123. package/src/Incentives/PointsIncentive.ts +1 -1
  124. package/src/Validators/Validator.ts +3 -0
  125. package/dist/deployments-BDumesUK.cjs +0 -2
  126. package/dist/deployments-BDumesUK.cjs.map +0 -1
  127. package/dist/deployments-DvYsMioW.js +0 -99
  128. package/dist/deployments-DvYsMioW.js.map +0 -1
  129. package/dist/generated-B0XfMfoq.js.map +0 -1
  130. package/dist/generated-pNKCp_Ez.cjs +0 -3
  131. package/dist/generated-pNKCp_Ez.cjs.map +0 -1
@@ -8,6 +8,7 @@ import { readContract } from '@wagmi/core';
8
8
  import { type Address, type Hex, decodeAbiParameters } from 'viem';
9
9
  import type { DeployableOptions } from '../Deployable/Deployable';
10
10
  import { InvalidComponentInterfaceError } from '../errors';
11
+ import type { ReadParams } from '../utils';
11
12
  import { LimitedSignerValidator } from './LimitedSignerValidator';
12
13
  import { SignerValidator } from './SignerValidator';
13
14
 
@@ -45,11 +46,13 @@ export const ValidatorByComponentInterface = {
45
46
  export async function validatorFromAddress(
46
47
  options: DeployableOptions,
47
48
  address: Address,
49
+ params?: ReadParams,
48
50
  ) {
49
51
  const interfaceId = (await readContract(options.config, {
50
52
  abi: aValidatorAbi,
51
53
  functionName: 'getComponentInterface',
52
54
  address,
55
+ ...params,
53
56
  })) as keyof typeof ValidatorByComponentInterface;
54
57
  const Ctor = ValidatorByComponentInterface[interfaceId];
55
58
  if (!Ctor) {
@@ -1,2 +0,0 @@
1
- "use strict";const e={10:"0x5AA51DCC8F3bdeD3a270613d3C9682EA10062782",8453:"0x5AA51DCC8F3bdeD3a270613d3C9682EA10062782",42161:"0x5AA51DCC8F3bdeD3a270613d3C9682EA10062782",84532:"0x1E7779eD5E6eb1754a3e7Aa728e3edFFDf53Ff90",11155111:"0x1E7779eD5E6eb1754a3e7Aa728e3edFFDf53Ff90"},D={10:"0xE2D376c791cAA498b86ebfc3C87121112Fd8Cd5b",8453:"0xE2D376c791cAA498b86ebfc3C87121112Fd8Cd5b",42161:"0xE2D376c791cAA498b86ebfc3C87121112Fd8Cd5b",84532:"0xD0468a11Ade4cB9dC970eC077D1e09F14BD5037e",11155111:"0xD0468a11Ade4cB9dC970eC077D1e09F14BD5037e"},b={10:"0x694c04324C2F4D97eBF98FaC633DF54E7A95334f",8453:"0x694c04324C2F4D97eBF98FaC633DF54E7A95334f",42161:"0x694c04324C2F4D97eBF98FaC633DF54E7A95334f",84532:"0xbA077293b78d2A6C17f7B91B64e70E09De4d353E",11155111:"0xbA077293b78d2A6C17f7B91B64e70E09De4d353E"},B={10:"0x2B5E78665C7e79791078dfFE94f04c1d1C42558F",8453:"0x2B5E78665C7e79791078dfFE94f04c1d1C42558F",42161:"0x2B5E78665C7e79791078dfFE94f04c1d1C42558F",84532:"0x05b843596b9e43bf1Fdf9DE88d0d848727E0325E",11155111:"0x05b843596b9e43bf1Fdf9DE88d0d848727E0325E"},F={10:"0x449094B4fb2A9Bf25dd9876E90ab2310aa386697",8453:"0x449094B4fb2A9Bf25dd9876E90ab2310aa386697",42161:"0x449094B4fb2A9Bf25dd9876E90ab2310aa386697",84532:"0xb9E7ee3F3406D028279211dd388Ff302008205ca",11155111:"0xb9E7ee3F3406D028279211dd388Ff302008205ca"},C={10:"0x96b23C5B81FEA6Da7f12B70050D4C4f76d3a9D0D",8453:"0x96b23C5B81FEA6Da7f12B70050D4C4f76d3a9D0D",42161:"0x96b23C5B81FEA6Da7f12B70050D4C4f76d3a9D0D",84532:"0x7e1f6c3842e27b651e687A177Eb28A98cab93EB0",11155111:"0x7e1f6c3842e27b651e687A177Eb28A98cab93EB0"},A={10:"0x8Db3E5226FD46F14E666954F65557539e7025136",8453:"0x8Db3E5226FD46F14E666954F65557539e7025136",42161:"0x8Db3E5226FD46F14E666954F65557539e7025136",84532:"0x814254258FB65fbbf26eb7F91D66f7C885C5ddc4",11155111:"0x814254258FB65fbbf26eb7F91D66f7C885C5ddc4"},E={10:"0x674f6b02e0B1159D61DFFCEe096776fd3B2bb7C1",8453:"0x674f6b02e0B1159D61DFFCEe096776fd3B2bb7C1",42161:"0x674f6b02e0B1159D61DFFCEe096776fd3B2bb7C1",84532:"0x8e73B68CfD7e11105D1460A2943e1D92082AD0D2",11155111:"0x8e73B68CfD7e11105D1460A2943e1D92082AD0D2"},a={10:"0xC9fB769A6A1e71663E85AE30CCfE97bf67B6d42F",8453:"0xC9fB769A6A1e71663E85AE30CCfE97bf67B6d42F",42161:"0xC9fB769A6A1e71663E85AE30CCfE97bf67B6d42F",84532:"0x8dbF292B6096CF43c6B5707904EBb44CB8A02872",11155111:"0x8dbF292B6096CF43c6B5707904EBb44CB8A02872"},d={10:"0x817aD27DF5a20a995bCD87962A8B32eB60c6c2D9",8453:"0x817aD27DF5a20a995bCD87962A8B32eB60c6c2D9",42161:"0x817aD27DF5a20a995bCD87962A8B32eB60c6c2D9",84532:"0xA69e8F314ba326440f8bfB770678f211D9499871",11155111:"0xA69e8F314ba326440f8bfB770678f211D9499871"},f={10:"0x72D733558473Cb3e9A66B25B99cb9810111f5E11",8453:"0x72D733558473Cb3e9A66B25B99cb9810111f5E11",42161:"0x72D733558473Cb3e9A66B25B99cb9810111f5E11",84532:"0x3C27Ce8C31ae5D54F403E07529a265478D13911A",11155111:"0x3C27Ce8C31ae5D54F403E07529a265478D13911A"},c={10:"0x5aE607016b0a742D0eF3aDD7B3257881bA383CB3",8453:"0x5aE607016b0a742D0eF3aDD7B3257881bA383CB3",42161:"0x5aE607016b0a742D0eF3aDD7B3257881bA383CB3",84532:"0x997993F4FF00400455BaEd41f27F13A316BbE5bB",11155111:"0x997993F4FF00400455BaEd41f27F13A316BbE5bB"},x={10:"0x5b0eD712b54775584cbB28fe7954e854781AA805",8453:"0x5b0eD712b54775584cbB28fe7954e854781AA805",42161:"0x5b0eD712b54775584cbB28fe7954e854781AA805",84532:"0xad2241aF94cd8E2d2a82A9B58F6891f749dDA6Fd",11155111:"0xad2241aF94cd8E2d2a82A9B58F6891f749dDA6Fd"},t={84532:"0xd42B2Ef48069814381E5eB5B06690f9932A4dF5A",11155111:"0xd42B2Ef48069814381E5eB5B06690f9932A4dF5A"};exports.AllowListIncentive=e;exports.BoostCore=D;exports.BoostRegistry=b;exports.CGDAIncentive=B;exports.ERC20Incentive=F;exports.ERC20VariableCriteriaIncentive=C;exports.ERC20VariableIncentive=A;exports.EventAction=E;exports.ManagedBudget=a;exports.ManagedBudgetWithFees=t;exports.PointsIncentive=d;exports.SignerValidator=f;exports.SimpleAllowList=c;exports.SimpleDenyList=x;
2
- //# sourceMappingURL=deployments-BDumesUK.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deployments-BDumesUK.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,99 +0,0 @@
1
- const e = {
2
- 10: "0x5AA51DCC8F3bdeD3a270613d3C9682EA10062782",
3
- 8453: "0x5AA51DCC8F3bdeD3a270613d3C9682EA10062782",
4
- 42161: "0x5AA51DCC8F3bdeD3a270613d3C9682EA10062782",
5
- 84532: "0x1E7779eD5E6eb1754a3e7Aa728e3edFFDf53Ff90",
6
- 11155111: "0x1E7779eD5E6eb1754a3e7Aa728e3edFFDf53Ff90"
7
- }, D = {
8
- 10: "0xE2D376c791cAA498b86ebfc3C87121112Fd8Cd5b",
9
- 8453: "0xE2D376c791cAA498b86ebfc3C87121112Fd8Cd5b",
10
- 42161: "0xE2D376c791cAA498b86ebfc3C87121112Fd8Cd5b",
11
- 84532: "0xD0468a11Ade4cB9dC970eC077D1e09F14BD5037e",
12
- 11155111: "0xD0468a11Ade4cB9dC970eC077D1e09F14BD5037e"
13
- }, b = {
14
- 10: "0x694c04324C2F4D97eBF98FaC633DF54E7A95334f",
15
- 8453: "0x694c04324C2F4D97eBF98FaC633DF54E7A95334f",
16
- 42161: "0x694c04324C2F4D97eBF98FaC633DF54E7A95334f",
17
- 84532: "0xbA077293b78d2A6C17f7B91B64e70E09De4d353E",
18
- 11155111: "0xbA077293b78d2A6C17f7B91B64e70E09De4d353E"
19
- }, B = {
20
- 10: "0x2B5E78665C7e79791078dfFE94f04c1d1C42558F",
21
- 8453: "0x2B5E78665C7e79791078dfFE94f04c1d1C42558F",
22
- 42161: "0x2B5E78665C7e79791078dfFE94f04c1d1C42558F",
23
- 84532: "0x05b843596b9e43bf1Fdf9DE88d0d848727E0325E",
24
- 11155111: "0x05b843596b9e43bf1Fdf9DE88d0d848727E0325E"
25
- }, F = {
26
- 10: "0x449094B4fb2A9Bf25dd9876E90ab2310aa386697",
27
- 8453: "0x449094B4fb2A9Bf25dd9876E90ab2310aa386697",
28
- 42161: "0x449094B4fb2A9Bf25dd9876E90ab2310aa386697",
29
- 84532: "0xb9E7ee3F3406D028279211dd388Ff302008205ca",
30
- 11155111: "0xb9E7ee3F3406D028279211dd388Ff302008205ca"
31
- }, a = {
32
- 10: "0x96b23C5B81FEA6Da7f12B70050D4C4f76d3a9D0D",
33
- 8453: "0x96b23C5B81FEA6Da7f12B70050D4C4f76d3a9D0D",
34
- 42161: "0x96b23C5B81FEA6Da7f12B70050D4C4f76d3a9D0D",
35
- 84532: "0x7e1f6c3842e27b651e687A177Eb28A98cab93EB0",
36
- 11155111: "0x7e1f6c3842e27b651e687A177Eb28A98cab93EB0"
37
- }, C = {
38
- 10: "0x8Db3E5226FD46F14E666954F65557539e7025136",
39
- 8453: "0x8Db3E5226FD46F14E666954F65557539e7025136",
40
- 42161: "0x8Db3E5226FD46F14E666954F65557539e7025136",
41
- 84532: "0x814254258FB65fbbf26eb7F91D66f7C885C5ddc4",
42
- 11155111: "0x814254258FB65fbbf26eb7F91D66f7C885C5ddc4"
43
- }, A = {
44
- 10: "0x674f6b02e0B1159D61DFFCEe096776fd3B2bb7C1",
45
- 8453: "0x674f6b02e0B1159D61DFFCEe096776fd3B2bb7C1",
46
- 42161: "0x674f6b02e0B1159D61DFFCEe096776fd3B2bb7C1",
47
- 84532: "0x8e73B68CfD7e11105D1460A2943e1D92082AD0D2",
48
- 11155111: "0x8e73B68CfD7e11105D1460A2943e1D92082AD0D2"
49
- }, E = {
50
- 10: "0xC9fB769A6A1e71663E85AE30CCfE97bf67B6d42F",
51
- 8453: "0xC9fB769A6A1e71663E85AE30CCfE97bf67B6d42F",
52
- 42161: "0xC9fB769A6A1e71663E85AE30CCfE97bf67B6d42F",
53
- 84532: "0x8dbF292B6096CF43c6B5707904EBb44CB8A02872",
54
- 11155111: "0x8dbF292B6096CF43c6B5707904EBb44CB8A02872"
55
- }, f = {
56
- 10: "0x817aD27DF5a20a995bCD87962A8B32eB60c6c2D9",
57
- 8453: "0x817aD27DF5a20a995bCD87962A8B32eB60c6c2D9",
58
- 42161: "0x817aD27DF5a20a995bCD87962A8B32eB60c6c2D9",
59
- 84532: "0xA69e8F314ba326440f8bfB770678f211D9499871",
60
- 11155111: "0xA69e8F314ba326440f8bfB770678f211D9499871"
61
- }, d = {
62
- 10: "0x72D733558473Cb3e9A66B25B99cb9810111f5E11",
63
- 8453: "0x72D733558473Cb3e9A66B25B99cb9810111f5E11",
64
- 42161: "0x72D733558473Cb3e9A66B25B99cb9810111f5E11",
65
- 84532: "0x3C27Ce8C31ae5D54F403E07529a265478D13911A",
66
- 11155111: "0x3C27Ce8C31ae5D54F403E07529a265478D13911A"
67
- }, x = {
68
- 10: "0x5aE607016b0a742D0eF3aDD7B3257881bA383CB3",
69
- 8453: "0x5aE607016b0a742D0eF3aDD7B3257881bA383CB3",
70
- 42161: "0x5aE607016b0a742D0eF3aDD7B3257881bA383CB3",
71
- 84532: "0x997993F4FF00400455BaEd41f27F13A316BbE5bB",
72
- 11155111: "0x997993F4FF00400455BaEd41f27F13A316BbE5bB"
73
- }, c = {
74
- 10: "0x5b0eD712b54775584cbB28fe7954e854781AA805",
75
- 8453: "0x5b0eD712b54775584cbB28fe7954e854781AA805",
76
- 42161: "0x5b0eD712b54775584cbB28fe7954e854781AA805",
77
- 84532: "0xad2241aF94cd8E2d2a82A9B58F6891f749dDA6Fd",
78
- 11155111: "0xad2241aF94cd8E2d2a82A9B58F6891f749dDA6Fd"
79
- }, s = {
80
- 84532: "0xd42B2Ef48069814381E5eB5B06690f9932A4dF5A",
81
- 11155111: "0xd42B2Ef48069814381E5eB5B06690f9932A4dF5A"
82
- };
83
- export {
84
- e as A,
85
- b as B,
86
- B as C,
87
- F as E,
88
- E as M,
89
- f as P,
90
- x as S,
91
- c as a,
92
- a as b,
93
- C as c,
94
- d,
95
- s as e,
96
- A as f,
97
- D as g
98
- };
99
- //# sourceMappingURL=deployments-DvYsMioW.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deployments-DvYsMioW.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}