@super-protocol/sdk-js 2.2.0-beta.99 → 3.0.0-beta.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 (87) hide show
  1. package/dist/cjs/RIGenerator.d.ts +2 -5
  2. package/dist/cjs/RIGenerator.js +2 -5
  3. package/dist/cjs/TIIGenerator.d.ts +6 -7
  4. package/dist/cjs/TIIGenerator.js +20 -93
  5. package/dist/cjs/TeeInputGeneratorBase.d.ts +3 -7
  6. package/dist/cjs/TeeInputGeneratorBase.js +37 -32
  7. package/dist/cjs/contracts/abi.d.ts +173 -28
  8. package/dist/cjs/contracts/abi.js +218 -33
  9. package/dist/cjs/index.d.ts +3 -0
  10. package/dist/cjs/index.js +7 -3
  11. package/dist/cjs/models/Offer.d.ts +11 -1
  12. package/dist/cjs/models/Offer.js +45 -6
  13. package/dist/cjs/models/TeeOffer.js +9 -6
  14. package/dist/cjs/proto/Compression.d.ts +1 -1
  15. package/dist/cjs/proto/TRI.d.ts +3 -3
  16. package/dist/cjs/proto/TeeProperties.d.ts +5 -5
  17. package/dist/cjs/providers/storage/S3StorageProvider.js +5 -8
  18. package/dist/cjs/providers/storage/StorjCredentialsManager.js +25 -2
  19. package/dist/cjs/providers/storage/StorjStorageProvider.js +25 -2
  20. package/dist/cjs/staticModels/Consensus.d.ts +3 -2
  21. package/dist/cjs/staticModels/Consensus.js +22 -11
  22. package/dist/cjs/staticModels/OfferResources.d.ts +1 -0
  23. package/dist/cjs/staticModels/OfferResources.js +10 -1
  24. package/dist/cjs/staticModels/Offers.js +7 -4
  25. package/dist/cjs/staticModels/TeeOffers.js +2 -2
  26. package/dist/cjs/tee/QuoteParser.js +7 -5
  27. package/dist/cjs/tee/QuoteValidator.d.ts +2 -0
  28. package/dist/cjs/tee/QuoteValidator.js +24 -7
  29. package/dist/cjs/tee/TcbSerializer.d.ts +20 -0
  30. package/dist/cjs/tee/TcbSerializer.js +27 -0
  31. package/dist/cjs/tee/TeeBlockVerifier.d.ts +0 -4
  32. package/dist/cjs/tee/TeeBlockVerifier.js +5 -46
  33. package/dist/cjs/tee/TeeCertificateService.d.ts +13 -0
  34. package/dist/cjs/tee/TeeCertificateService.js +42 -0
  35. package/dist/cjs/tee/helpers.d.ts +1 -1
  36. package/dist/cjs/tee/helpers.js +2 -7
  37. package/dist/cjs/types/Offer.d.ts +14 -4
  38. package/dist/cjs/types/Offer.js +9 -2
  39. package/dist/cjs/types/Order.d.ts +2 -5
  40. package/dist/cjs/utils/schema-validators/index.d.ts +1 -0
  41. package/dist/cjs/utils/schema-validators/index.js +6 -0
  42. package/dist/cjs/utils/schema-validators/validator.d.ts +7 -0
  43. package/dist/cjs/utils/schema-validators/validator.js +49 -0
  44. package/dist/mjs/RIGenerator.d.ts +2 -5
  45. package/dist/mjs/RIGenerator.js +2 -5
  46. package/dist/mjs/TIIGenerator.d.ts +6 -7
  47. package/dist/mjs/TIIGenerator.js +20 -93
  48. package/dist/mjs/TeeInputGeneratorBase.d.ts +3 -7
  49. package/dist/mjs/TeeInputGeneratorBase.js +39 -34
  50. package/dist/mjs/contracts/abi.d.ts +173 -28
  51. package/dist/mjs/contracts/abi.js +216 -31
  52. package/dist/mjs/index.d.ts +3 -0
  53. package/dist/mjs/index.js +4 -1
  54. package/dist/mjs/models/Offer.d.ts +11 -1
  55. package/dist/mjs/models/Offer.js +46 -7
  56. package/dist/mjs/models/TeeOffer.js +9 -6
  57. package/dist/mjs/proto/Compression.d.ts +1 -1
  58. package/dist/mjs/proto/TRI.d.ts +3 -3
  59. package/dist/mjs/proto/TeeProperties.d.ts +5 -5
  60. package/dist/mjs/providers/storage/S3StorageProvider.js +5 -8
  61. package/dist/mjs/providers/storage/StorjCredentialsManager.js +2 -2
  62. package/dist/mjs/providers/storage/StorjStorageProvider.js +2 -2
  63. package/dist/mjs/staticModels/Consensus.d.ts +3 -2
  64. package/dist/mjs/staticModels/Consensus.js +22 -11
  65. package/dist/mjs/staticModels/OfferResources.d.ts +1 -0
  66. package/dist/mjs/staticModels/OfferResources.js +10 -1
  67. package/dist/mjs/staticModels/Offers.js +7 -4
  68. package/dist/mjs/staticModels/TeeOffers.js +2 -2
  69. package/dist/mjs/tee/QuoteParser.js +7 -5
  70. package/dist/mjs/tee/QuoteValidator.d.ts +2 -0
  71. package/dist/mjs/tee/QuoteValidator.js +24 -7
  72. package/dist/mjs/tee/TcbSerializer.d.ts +20 -0
  73. package/dist/mjs/tee/TcbSerializer.js +23 -0
  74. package/dist/mjs/tee/TeeBlockVerifier.d.ts +0 -4
  75. package/dist/mjs/tee/TeeBlockVerifier.js +5 -46
  76. package/dist/mjs/tee/TeeCertificateService.d.ts +13 -0
  77. package/dist/mjs/tee/TeeCertificateService.js +35 -0
  78. package/dist/mjs/tee/helpers.d.ts +1 -1
  79. package/dist/mjs/tee/helpers.js +2 -7
  80. package/dist/mjs/types/Offer.d.ts +14 -4
  81. package/dist/mjs/types/Offer.js +8 -1
  82. package/dist/mjs/types/Order.d.ts +2 -5
  83. package/dist/mjs/utils/schema-validators/index.d.ts +1 -0
  84. package/dist/mjs/utils/schema-validators/index.js +2 -0
  85. package/dist/mjs/utils/schema-validators/validator.d.ts +7 -0
  86. package/dist/mjs/utils/schema-validators/validator.js +45 -0
  87. package/package.json +5 -3
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import { EncryptionKey, Hash, Encryption } from '@super-protocol/dto-js';
2
+ import { EncryptionKey, Hash, Encryption, RuntimeInputInfo } from '@super-protocol/dto-js';
3
3
  import { OrderEncryptedInfo, OrderResultInfo } from './types/index.js';
4
4
  import TeeInputGeneratorBase from './TeeInputGeneratorBase.js';
5
5
  declare class RIGenerator extends TeeInputGeneratorBase {
@@ -8,10 +8,7 @@ declare class RIGenerator extends TeeInputGeneratorBase {
8
8
  offerId: string;
9
9
  encryptionPrivateKey: EncryptionKey;
10
10
  pccsServiceApiUrl: string;
11
- solutionHashes: Hash[];
12
- dataHashes: Hash[];
13
- imageHashes: Hash[];
14
- linkage?: string;
11
+ runtimeInputInfos: RuntimeInputInfo[];
15
12
  argsHash?: Hash;
16
13
  }): Promise<OrderResultInfo>;
17
14
  static getResultInfo(encryptedResultInfo: Encryption, privateKey: Buffer): Promise<OrderEncryptedInfo>;
@@ -23,10 +23,7 @@ class RIGenerator extends TeeInputGeneratorBase {
23
23
  };
24
24
  const orderInfoToEncrypt = {
25
25
  publicKey: resultEncryption,
26
- solutionHashes: params.solutionHashes || [],
27
- dataHashes: params.dataHashes || [],
28
- imageHashes: params.imageHashes || [],
29
- linkage: params.linkage ?? '',
26
+ runtimeInputInfos: params.runtimeInputInfos,
30
27
  ...(params.argsHash && { argsHash: params.argsHash }),
31
28
  };
32
29
  const encryptedInfo = await this.encryptByTeeBlock(params.offerId, JSON.stringify(orderInfoToEncrypt), params.pccsServiceApiUrl);
@@ -44,4 +41,4 @@ class RIGenerator extends TeeInputGeneratorBase {
44
41
  }
45
42
  }
46
43
  export default RIGenerator;
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUklHZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvUklHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFFBQVEsRUFDUixlQUFlLEVBRWYsYUFBYSxHQUNkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVwQyxPQUFPLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLHFCQUFxQixNQUFNLDRCQUE0QixDQUFDO0FBRS9ELE1BQU0sV0FBWSxTQUFRLHFCQUFxQjtJQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLG1CQUFrQztRQUNsRSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFJLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQ25FLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FDMUQsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtZQUMzQixRQUFRLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtZQUNwQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUs7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQVNyQjtRQUNDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUUxRSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFNUUsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFJLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwRixNQUFNLFNBQVMsR0FBRztZQUNoQixHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDbEQsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3pCLElBQUksRUFBRSxlQUFlLENBQUMsS0FBSztTQUNkLENBQUM7UUFFaEIsTUFBTSxrQkFBa0IsR0FBdUI7WUFDN0MsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsSUFBSSxFQUFFO1lBQzNDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUU7WUFDbkMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRTtZQUNyQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQzdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN0RCxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQ2hELE1BQU0sQ0FBQyxPQUFPLEVBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUNsQyxNQUFNLENBQUMsaUJBQWlCLENBQ3pCLENBQUM7UUFFRixPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQ3BDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztTQUM3QyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUN4QixtQkFBK0IsRUFDL0IsVUFBa0I7UUFFbEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQy9CLEdBQUcsbUJBQW1CO1lBQ3RCLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztTQUN2RCxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBRUQsZUFBZSxXQUFXLENBQUMifQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUklHZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvUklHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFFBQVEsRUFDUixlQUFlLEVBRWYsYUFBYSxHQUVkLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVwQyxPQUFPLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLHFCQUFxQixNQUFNLDRCQUE0QixDQUFDO0FBRS9ELE1BQU0sV0FBWSxTQUFRLHFCQUFxQjtJQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLG1CQUFrQztRQUNsRSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFJLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQ25FLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FDMUQsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtZQUMzQixRQUFRLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtZQUNwQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUs7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQU1yQjtRQUNDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUUxRSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFNUUsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFJLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwRixNQUFNLFNBQVMsR0FBRztZQUNoQixHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDbEQsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3pCLElBQUksRUFBRSxlQUFlLENBQUMsS0FBSztTQUNkLENBQUM7UUFFaEIsTUFBTSxrQkFBa0IsR0FBdUI7WUFDN0MsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQzNDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN0RCxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQ2hELE1BQU0sQ0FBQyxPQUFPLEVBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUNsQyxNQUFNLENBQUMsaUJBQWlCLENBQ3pCLENBQUM7UUFFRixPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQ3BDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztTQUM3QyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUN4QixtQkFBK0IsRUFDL0IsVUFBa0I7UUFFbEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQy9CLEdBQUcsbUJBQW1CO1lBQ3RCLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztTQUN2RCxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBRUQsZUFBZSxXQUFXLENBQUMifQ==
@@ -1,22 +1,21 @@
1
1
  /// <reference types="node" />
2
2
  import { BlockchainId } from './types/index.js';
3
- import { Encryption, Hash, Resource, TeeRunInfo } from '@super-protocol/dto-js';
3
+ import { Encryption, Resource, RuntimeInputInfo, TeeInputInfo, TeeRunInfo } from '@super-protocol/dto-js';
4
4
  import TeeInputGeneratorBase from './TeeInputGeneratorBase.js';
5
5
  declare class TIIGenerator extends TeeInputGeneratorBase {
6
- static generateByOffer({ offerId, solutionHashes, imageHashes, linkageString, resource, args, encryption, sgxApiUrl, }: GenerateByOfferParams): Promise<string>;
7
- static generate(orderId: BlockchainId, resource: Resource, args: any, encryption: Encryption, sgxApiUrl: string): Promise<string>;
6
+ protected static buildTII(params: Pick<GenerateByOfferParams, 'offerId' | 'sgxApiUrl' | 'resource' | 'runtimeInputInfos' | 'encryption'>): Promise<TeeInputInfo>;
7
+ static generateByOffer(params: GenerateByOfferParams): Promise<string>;
8
+ static generate(orderId: BlockchainId, resource: Resource, args: unknown, encryption: Encryption, sgxApiUrl: string): Promise<string>;
8
9
  static getTRI(tii: string, decryptionKey: Buffer): Promise<TeeRunInfo>;
9
10
  static getUrl(tii: string, decryptionKey: Buffer): Promise<string>;
10
11
  static getResource<T>(tii: string, decryptionKey: Buffer): Promise<T>;
11
12
  }
12
13
  export type GenerateByOfferParams = {
13
14
  offerId: BlockchainId;
14
- solutionHashes: Hash[];
15
- imageHashes: Hash[];
16
- linkageString: string | undefined;
17
15
  resource: Resource;
18
- args: any;
16
+ args: unknown;
19
17
  encryption: Encryption;
20
18
  sgxApiUrl: string;
19
+ runtimeInputInfos: RuntimeInputInfo[];
21
20
  };
22
21
  export default TIIGenerator;
@@ -1,117 +1,44 @@
1
- import nodeGzip from 'node-gzip';
2
- import { Compression, Compression_TYPE } from './proto/Compression.js';
3
- import { TRI } from './proto/TRI.js';
4
1
  import Crypto from './crypto/index.js';
5
2
  import { Order, TeeOffer } from './models/index.js';
6
- import { Encoding, } from '@super-protocol/dto-js';
7
3
  import TeeInputGeneratorBase from './TeeInputGeneratorBase.js';
8
- const { gzip, ungzip } = nodeGzip;
9
4
  class TIIGenerator extends TeeInputGeneratorBase {
10
- static async generateByOffer({ offerId, solutionHashes, imageHashes, linkageString, resource, args, encryption, sgxApiUrl, }) {
11
- const teeOffer = new TeeOffer(offerId);
5
+ static async buildTII(params) {
6
+ const triEncryption = await this.getVerifiedBlockEncryption(params.offerId, params.sgxApiUrl);
7
+ const teeOffer = new TeeOffer(params.offerId);
12
8
  const teeOfferInfo = await teeOffer.getInfo();
13
- const linkage = linkageString
14
- ? JSON.parse(linkageString)
15
- : {
16
- encoding: Encoding.base64,
17
- mrenclave: '',
18
- mrsigner: '',
19
- };
20
- const blockEncryption = await this.getVerifiedBlockEncryption(offerId, sgxApiUrl);
21
- // TODO: check env with SP-149
22
- const mac = encryption.authTag || encryption.mac;
23
- const rawTri = {
24
- solutionHashes: solutionHashes.map((hash) => ({
25
- algo: hash.algo,
26
- hash: Buffer.from(hash.hash, hash.encoding),
27
- })),
28
- imageHashes: imageHashes.map((hash) => ({
29
- algo: hash.algo,
30
- hash: Buffer.from(hash.hash, hash.encoding),
31
- })),
32
- mrenclave: Buffer.from(linkage.mrenclave, linkage.encoding),
33
- mrsigner: Buffer.from(linkage.mrsigner, linkage.encoding),
34
- args: JSON.stringify(args || ''),
35
- encryption: {
36
- ...encryption,
37
- ciphertext: encryption.ciphertext
38
- ? Buffer.from(encryption.ciphertext, encryption.encoding)
39
- : undefined,
40
- key: encryption.key ? Buffer.from(encryption.key, encryption.encoding) : undefined,
41
- iv: encryption.iv
42
- ? Buffer.from(encryption.iv, encryption.encoding)
43
- : undefined,
44
- mac: mac ? Buffer.from(mac, encryption.encoding) : undefined,
45
- },
9
+ const resourceEncryption = JSON.parse(teeOfferInfo.argsPublicKey);
10
+ const tri = {
11
+ runtimeInputInfos: params.runtimeInputInfos,
12
+ encryption: params.encryption,
13
+ };
14
+ return {
15
+ encryptedResource: await Crypto.encrypt(JSON.stringify(params.resource), resourceEncryption),
16
+ encryptedTRI: await Crypto.encrypt(JSON.stringify(tri), triEncryption),
46
17
  };
47
- const tri = TRI.encode(rawTri).finish();
48
- const compressedTri = Compression.encode({
49
- data: await gzip(tri),
50
- type: Compression_TYPE.GZIP,
51
- }).finish();
52
- return JSON.stringify({
53
- encryptedResource: await Crypto.encrypt(JSON.stringify(resource), JSON.parse(teeOfferInfo.argsPublicKey)),
54
- tri: await Crypto.encrypt(Buffer.from(compressedTri).toString(Encoding.base64), blockEncryption),
55
- });
18
+ }
19
+ static async generateByOffer(params) {
20
+ const tii = await this.buildTII(params);
21
+ return JSON.stringify(tii);
56
22
  }
57
23
  static async generate(orderId, resource, args, encryption, sgxApiUrl) {
58
24
  const order = new Order(orderId);
59
25
  const parentOrderId = await order.getParentOrder();
60
26
  const parentOrder = new Order(parentOrderId);
61
27
  const parentOrderInfo = await parentOrder.getOrderInfo();
62
- const { solutionHashes, imageHashes, linkage } = await this.getOffersHashesAndLinkage(parentOrderInfo.args.inputOffersIds);
63
28
  return this.generateByOffer({
64
29
  offerId: parentOrderInfo.offerId,
65
- solutionHashes,
66
- imageHashes,
67
- linkageString: linkage,
68
30
  resource,
69
31
  args,
70
32
  encryption,
71
33
  sgxApiUrl,
34
+ runtimeInputInfos: await this.generateRiiByOfferIds(parentOrderInfo.args.inputOffersIds),
72
35
  });
73
36
  }
74
37
  static async getTRI(tii, decryptionKey) {
75
38
  const tiiObj = JSON.parse(tii);
76
- tiiObj.tri.key = decryptionKey.toString(tiiObj.tri.encoding);
77
- const tri = await Crypto.decrypt(tiiObj.tri);
78
- const compression = Compression.decode(Buffer.from(tri, tiiObj.tri.encoding));
79
- let decompressed;
80
- switch (compression.type) {
81
- case Compression_TYPE.GZIP:
82
- decompressed = await ungzip(compression.data);
83
- break;
84
- default:
85
- throw Error('Unknown compression method');
86
- }
87
- const decoded = TRI.decode(decompressed);
88
- return {
89
- solutionHashes: decoded.solutionHashes.map((hash) => ({
90
- hash: Buffer.from(hash.hash).toString(Encoding.base64),
91
- algo: hash.algo,
92
- encoding: Encoding.base64,
93
- })),
94
- imageHashes: decoded.imageHashes.map((hash) => ({
95
- hash: Buffer.from(hash.hash).toString(Encoding.base64),
96
- algo: hash.algo,
97
- encoding: Encoding.base64,
98
- })),
99
- linkage: {
100
- encoding: Encoding.base64,
101
- mrenclave: Buffer.from(decoded.mrenclave).toString(Encoding.base64),
102
- mrsigner: Buffer.from(decoded.mrsigner).toString(Encoding.base64),
103
- },
104
- args: decoded.args,
105
- encryption: {
106
- algo: decoded.encryption.algo,
107
- cipher: decoded.encryption.cipher,
108
- encoding: Encoding.base64,
109
- key: Buffer.from(decoded.encryption.key).toString(Encoding.base64),
110
- iv: decoded.encryption.iv && Buffer.from(decoded.encryption.iv).toString(Encoding.base64),
111
- mac: decoded.encryption.mac &&
112
- Buffer.from(decoded.encryption.mac).toString(Encoding.base64),
113
- },
114
- };
39
+ tiiObj.encryptedTRI.key = decryptionKey.toString(tiiObj.encryptedTRI.encoding);
40
+ const stringTri = await Crypto.decrypt(tiiObj.encryptedTRI);
41
+ return JSON.parse(stringTri);
115
42
  }
116
43
  static async getUrl(tii, decryptionKey) {
117
44
  const res = await TIIGenerator.getResource(tii, decryptionKey);
@@ -125,4 +52,4 @@ class TIIGenerator extends TeeInputGeneratorBase {
125
52
  }
126
53
  }
127
54
  export default TIIGenerator;
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVElJR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RJSUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFHTCxRQUFRLEdBU1QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLHFCQUFxQixNQUFNLDRCQUE0QixDQUFDO0FBRS9ELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDO0FBRWxDLE1BQU0sWUFBYSxTQUFRLHFCQUFxQjtJQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUNsQyxPQUFPLEVBQ1AsY0FBYyxFQUNkLFdBQVcsRUFDWCxhQUFhLEVBQ2IsUUFBUSxFQUNSLElBQUksRUFDSixVQUFVLEVBQ1YsU0FBUyxHQUNhO1FBQ3RCLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFpQixNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBWSxhQUFhO1lBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztZQUMzQixDQUFDLENBQUM7Z0JBQ0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNO2dCQUN6QixTQUFTLEVBQUUsRUFBRTtnQkFDYixRQUFRLEVBQUUsRUFBRTthQUNiLENBQUM7UUFFTixNQUFNLGVBQWUs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
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVElJR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RJSUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBVXBELE9BQU8scUJBQXFCLE1BQU0sNEJBQTRCLENBQUM7QUFFL0QsTUFBTSxZQUFhLFNBQVEscUJBQXFCO0lBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUM3QixNQUdDO1FBRUQsTUFBTSxhQUFhLEdBQWUsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQ3JFLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsTUFBTSxDQUFDLFNBQVMsQ0FDakIsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBaUIsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUQsTUFBTSxrQkFBa0IsR0FBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RSxNQUFNLEdBQUcsR0FBZTtZQUN0QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1lBQzNDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtTQUM5QixDQUFDO1FBQ0YsT0FBTztZQUNMLGlCQUFpQixFQUFFLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxrQkFBa0IsQ0FBQztZQUM1RixZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDO1NBQ3ZFLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBNkI7UUFDeEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzFCLE9BQXFCLEVBQ3JCLFFBQWtCLEVBQ2xCLElBQWEsRUFDYixVQUFzQixFQUN0QixTQUFpQjtRQUVqQixNQUFNLEtBQUssR0FBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4QyxNQUFNLGFBQWEsR0FBRyxNQUFNLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBVSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxNQUFNLGVBQWUsR0FBYyxNQUFNLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDMUIsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPO1lBQ2hDLFFBQVE7WUFDUixJQUFJO1lBQ0osVUFBVTtZQUNWLFNBQVM7WUFDVCxpQkFBaUIsRUFBRSxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUN6RixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBVyxFQUFFLGFBQXFCO1FBQzNELE1BQU0sTUFBTSxHQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRSxNQUFNLFNBQVMsR0FBVyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXBFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBVyxFQUFFLGFBQXFCO1FBQ3BELE1BQU0sR0FBRyxHQUFHLE1BQU0sWUFBWSxDQUFDLFdBQVcsQ0FBYyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFNUUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBSSxHQUFXLEVBQUUsYUFBcUI7UUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUErQixDQUFDO1FBQzFFLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sUUFBUSxHQUFXLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWpFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQU0sQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFXRCxlQUFlLFlBQVksQ0FBQyJ9
@@ -1,12 +1,8 @@
1
- import { Encryption, Hash } from '@super-protocol/dto-js';
1
+ import { Encryption, RuntimeInputInfo } from '@super-protocol/dto-js';
2
2
  import { BlockchainId } from './types/index.js';
3
3
  export default class TeeInputGeneratorBase {
4
- static getOffersHashesAndLinkage(inputOffersIds: BlockchainId[]): Promise<{
5
- solutionHashes: Hash[];
6
- imageHashes: Hash[];
7
- dataHashes: Hash[];
8
- linkage?: string;
9
- }>;
4
+ protected static generateRiiByOfferId(offerId: string): Promise<RuntimeInputInfo | null>;
5
+ static generateRiiByOfferIds(inputOffersIds: BlockchainId[]): Promise<RuntimeInputInfo[]>;
10
6
  static encryptByTeeBlock(offerId: string, data: string, sgxApiUrl: string): Promise<Encryption>;
11
7
  protected static getVerifiedBlockEncryption(offerId: string, sgxApiUrl: string): Promise<Encryption>;
12
8
  }
@@ -1,46 +1,52 @@
1
- import { CryptoAlgorithm, Encoding } from '@super-protocol/dto-js';
2
- import { TeeOffer, TCB, Offer } from './models/index.js';
1
+ import { CryptoAlgorithm, Encoding, } from '@super-protocol/dto-js';
2
+ import { Offer, TCB, TeeOffer } from './models/index.js';
3
3
  import { OfferType } from './types/index.js';
4
4
  import Crypto from './crypto/index.js';
5
5
  import { TeeBlockVerifier } from './tee/TeeBlockVerifier.js';
6
6
  import { ZERO_HASH } from './constants.js';
7
7
  export default class TeeInputGeneratorBase {
8
- static async getOffersHashesAndLinkage(inputOffersIds) {
9
- const solutionHashes = [];
10
- const dataHashes = [];
11
- const imageHashes = [];
12
- let solutionLinkage;
13
- let anyLinkage;
14
- await Promise.all(inputOffersIds.map(async (offerId) => {
15
- const offer = new Offer(offerId);
16
- const offerInfo = await offer.getInfo();
17
- if (offerInfo.offerType === OfferType.Solution) {
18
- const isBaseImage = await offer.isBaseImage();
19
- const isPublic = await offer.isOfferPublic();
20
- if (!isBaseImage) {
21
- solutionLinkage = offerInfo.linkage;
22
- solutionHashes.push(offerInfo.hash ? JSON.parse(offerInfo.hash) : ZERO_HASH);
8
+ static async generateRiiByOfferId(offerId) {
9
+ const offer = new Offer(offerId);
10
+ const offerInfo = await offer.getInfo();
11
+ const calcType = (offerType, offer) => {
12
+ switch (offerType) {
13
+ case OfferType.Solution: {
14
+ const isBaseImage = offer.isBaseImage();
15
+ const isOfferPublic = offer.isOfferPublic();
16
+ if (!isBaseImage) {
17
+ return 'Solution';
18
+ }
19
+ else if (!isOfferPublic) {
20
+ return 'Image';
21
+ }
22
+ break;
23
23
  }
24
- else if (!isPublic) {
25
- anyLinkage = offerInfo.linkage;
26
- imageHashes.push(offerInfo.hash ? JSON.parse(offerInfo.hash) : ZERO_HASH);
27
- }
28
- }
29
- if (offerInfo.offerType === OfferType.Data) {
30
- dataHashes.push(offerInfo.hash ? JSON.parse(offerInfo.hash) : ZERO_HASH);
24
+ case OfferType.Data:
25
+ return 'Data';
31
26
  }
32
- }));
27
+ };
28
+ const type = calcType(offerInfo.offerType, offer);
29
+ if (!type) {
30
+ return null;
31
+ }
32
+ const hardwareContext = offerInfo.hardwareContext && JSON.parse(offerInfo.hardwareContext);
33
33
  return {
34
- solutionHashes,
35
- dataHashes,
36
- imageHashes,
37
- linkage: solutionLinkage || anyLinkage,
34
+ args: undefined,
35
+ hash: offerInfo.hash ? JSON.parse(offerInfo.hash) : ZERO_HASH,
36
+ ...(offerInfo.signatureKeyHash && {
37
+ signatureKeyHash: JSON.parse(offerInfo.signatureKeyHash),
38
+ }),
39
+ type,
40
+ ...(hardwareContext && { hardwareContext }),
38
41
  };
39
42
  }
43
+ static async generateRiiByOfferIds(inputOffersIds) {
44
+ const inputs = await Promise.all(inputOffersIds.map(this.generateRiiByOfferId));
45
+ return inputs.filter(Boolean);
46
+ }
40
47
  static async encryptByTeeBlock(offerId, data, sgxApiUrl) {
41
48
  const encryption = await this.getVerifiedBlockEncryption(offerId, sgxApiUrl);
42
- const encryptedInfo = await Crypto.encrypt(data, encryption);
43
- return encryptedInfo;
49
+ return Crypto.encrypt(data, encryption);
44
50
  }
45
51
  static async getVerifiedBlockEncryption(offerId, sgxApiUrl) {
46
52
  const teeOffer = new TeeOffer(offerId);
@@ -52,12 +58,11 @@ export default class TeeInputGeneratorBase {
52
58
  const { pubKey, quote } = await tcb.getUtilityData();
53
59
  await TeeBlockVerifier.verifyTcb(tcb, quote, pubKey, sgxApiUrl);
54
60
  // TODO: must be 'blockEncryption = JSON.parse(pubKey);'
55
- const encryption = {
61
+ return {
56
62
  algo: CryptoAlgorithm.ECIES,
57
63
  key: pubKey,
58
64
  encoding: Encoding.base64,
59
65
  };
60
- return encryption;
61
66
  }
62
67
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVlSW5wdXRHZW5lcmF0b3JCYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RlZUlucHV0R2VuZXJhdG9yQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsZUFBZSxFQUFFLFFBQVEsRUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBMkIsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxNQUFNLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sQ0FBQyxPQUFPLE9BQU8scUJBQXFCO0lBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsY0FBOEI7UUFNMUUsTUFBTSxjQUFjLEdBQVcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFXLEVBQUUsQ0FBQztRQUM5QixNQUFNLFdBQVcsR0FBVyxFQUFFLENBQUM7UUFDL0IsSUFBSSxlQUFtQyxDQUFDO1FBQ3hDLElBQUksVUFBOEIsQ0FBQztRQUVuQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFpQixFQUFFO1lBQ2xELE1BQU0sS0FBSyxHQUFVLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sU0FBUyxHQUFjLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRW5ELElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9DLE1BQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxDQUFD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
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVlSW5wdXRHZW5lcmF0b3JCYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1RlZUlucHV0R2VuZXJhdG9yQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFFBQVEsR0FJVCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBMkIsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxNQUFNLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sQ0FBQyxPQUFPLE9BQU8scUJBQXFCO0lBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsT0FBZTtRQUN6RCxNQUFNLEtBQUssR0FBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBYyxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBRyxDQUFDLFNBQW9CLEVBQUUsS0FBWSxFQUF1QixFQUFFO1lBQzNFLFFBQVEsU0FBUyxFQUFFLENBQUM7Z0JBQ2xCLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDeEMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUM1QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2pCLE9BQU8sVUFBVSxDQUFDO29CQUNwQixDQUFDO3lCQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUs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