@aws-cdk/aws-bedrock-agentcore-alpha 2.221.0-alpha.0 → 2.222.0-alpha.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 (33) hide show
  1. package/.jsii +3794 -502
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +69 -1
  4. package/README.md +327 -5
  5. package/agentcore/index.d.ts +4 -0
  6. package/agentcore/index.js +5 -1
  7. package/agentcore/memory/memory-strategy.d.ts +164 -0
  8. package/agentcore/memory/memory-strategy.js +174 -0
  9. package/agentcore/memory/memory.d.ts +538 -0
  10. package/agentcore/memory/memory.js +661 -0
  11. package/agentcore/memory/perms.d.ts +63 -0
  12. package/agentcore/memory/perms.js +90 -0
  13. package/agentcore/memory/strategies/managed-strategy.d.ts +133 -0
  14. package/agentcore/memory/strategies/managed-strategy.js +209 -0
  15. package/agentcore/memory/strategies/self-managed-strategy.d.ts +127 -0
  16. package/agentcore/memory/strategies/self-managed-strategy.js +254 -0
  17. package/agentcore/memory/validation-helpers.d.ts +41 -0
  18. package/agentcore/memory/validation-helpers.js +89 -0
  19. package/agentcore/network/network-configuration.js +4 -4
  20. package/agentcore/runtime/runtime-artifact.js +1 -1
  21. package/agentcore/runtime/runtime-authorizer-configuration.d.ts +4 -4
  22. package/agentcore/runtime/runtime-authorizer-configuration.js +13 -32
  23. package/agentcore/runtime/runtime-base.js +3 -13
  24. package/agentcore/runtime/runtime-endpoint-base.js +1 -1
  25. package/agentcore/runtime/runtime-endpoint.js +1 -1
  26. package/agentcore/runtime/runtime.d.ts +2 -2
  27. package/agentcore/runtime/runtime.js +16 -17
  28. package/agentcore/runtime/types.d.ts +5 -1
  29. package/agentcore/runtime/types.js +5 -1
  30. package/agentcore/tools/browser.js +2 -2
  31. package/agentcore/tools/code-interpreter.js +2 -2
  32. package/package.json +14 -7
  33. package/rosetta/default.ts-fixture +4 -0
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
+ * with the License. A copy of the License is located at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
+ * and limitations under the License.
12
+ */
13
+ export declare namespace MemoryPerms {
14
+ /******************************************************************************
15
+ * Data Plane Permissions
16
+ *****************************************************************************/
17
+ /**
18
+ * Permissions for Short-Term Memory (STM)
19
+ */
20
+ namespace STM {
21
+ /**
22
+ * Permissions to write Short-Term Memory (STM)
23
+ */
24
+ const WRITE_PERMS: string[];
25
+ /**
26
+ * Permissions to read Short-Term Memory (STM)
27
+ */
28
+ const READ_PERMS: string[];
29
+ /**
30
+ * Permissions to delete Short-Term Memory (STM)
31
+ */
32
+ const DELETE_PERMS: string[];
33
+ }
34
+ /**
35
+ * Permissions for Long-Term Memory (LTM)
36
+ */
37
+ namespace LTM {
38
+ /**
39
+ * Permissions to read Long-Term Memory (LTM)
40
+ */
41
+ const READ_PERMS: string[];
42
+ /**
43
+ * Permissions to delete Long-Term Memory (LTM)
44
+ */
45
+ const DELETE_PERMS: string[];
46
+ }
47
+ /**
48
+ * Permissions to read both Short-Term Memory (STM) and Long-Term Memory (LTM)
49
+ */
50
+ const READ_PERMS: string[];
51
+ /**
52
+ * Permissions to delete both Short-Term Memory (STM) and Long-Term Memory (LTM)
53
+ */
54
+ const DELETE_PERMS: string[];
55
+ /******************************************************************************
56
+ * Control Plane Permissions
57
+ *****************************************************************************/
58
+ /**
59
+ * Grants control plane operations to manage the memory (CRUD)
60
+ */
61
+ const ADMIN_PERMS: string[];
62
+ const FULL_ACCESS_PERMS: string[];
63
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.MemoryPerms = void 0;
16
+ var MemoryPerms;
17
+ (function (MemoryPerms) {
18
+ /******************************************************************************
19
+ * Data Plane Permissions
20
+ *****************************************************************************/
21
+ /**
22
+ * Permissions for Short-Term Memory (STM)
23
+ */
24
+ let STM;
25
+ (function (STM) {
26
+ /**
27
+ * Permissions to write Short-Term Memory (STM)
28
+ */
29
+ STM.WRITE_PERMS = ['bedrock-agentcore:CreateEvent'];
30
+ /**
31
+ * Permissions to read Short-Term Memory (STM)
32
+ */
33
+ STM.READ_PERMS = [
34
+ 'bedrock-agentcore:GetEvent',
35
+ 'bedrock-agentcore:ListEvents',
36
+ 'bedrock-agentcore:ListActors',
37
+ 'bedrock-agentcore:ListSessions',
38
+ ];
39
+ /**
40
+ * Permissions to delete Short-Term Memory (STM)
41
+ */
42
+ STM.DELETE_PERMS = ['bedrock-agentcore:DeleteEvent'];
43
+ })(STM = MemoryPerms.STM || (MemoryPerms.STM = {}));
44
+ /**
45
+ * Permissions for Long-Term Memory (LTM)
46
+ */
47
+ let LTM;
48
+ (function (LTM) {
49
+ // Note how there is no "bedrock-agentcore:CreateMemoryRecord" as you cannot write directly to LTM
50
+ // This is done asynchronously once extraction stategies have been configured.
51
+ /**
52
+ * Permissions to read Long-Term Memory (LTM)
53
+ */
54
+ LTM.READ_PERMS = [
55
+ 'bedrock-agentcore:GetMemoryRecord',
56
+ 'bedrock-agentcore:RetrieveMemoryRecords', // Read via sematic query
57
+ 'bedrock-agentcore:ListMemoryRecords',
58
+ 'bedrock-agentcore:ListActors',
59
+ 'bedrock-agentcore:ListSessions',
60
+ ];
61
+ /**
62
+ * Permissions to delete Long-Term Memory (LTM)
63
+ */
64
+ LTM.DELETE_PERMS = ['bedrock-agentcore:DeleteMemoryRecord'];
65
+ })(LTM = MemoryPerms.LTM || (MemoryPerms.LTM = {}));
66
+ /**
67
+ * Permissions to read both Short-Term Memory (STM) and Long-Term Memory (LTM)
68
+ */
69
+ MemoryPerms.READ_PERMS = [...new Set([...STM.READ_PERMS, ...LTM.READ_PERMS])];
70
+ /**
71
+ * Permissions to delete both Short-Term Memory (STM) and Long-Term Memory (LTM)
72
+ */
73
+ MemoryPerms.DELETE_PERMS = [...new Set([...STM.DELETE_PERMS, ...LTM.DELETE_PERMS])];
74
+ /******************************************************************************
75
+ * Control Plane Permissions
76
+ *****************************************************************************/
77
+ /**
78
+ * Grants control plane operations to manage the memory (CRUD)
79
+ */
80
+ MemoryPerms.ADMIN_PERMS = [
81
+ 'bedrock-agentcore:CreateMemory',
82
+ 'bedrock-agentcore:GetMemory',
83
+ 'bedrock-agentcore:DeleteMemory',
84
+ 'bedrock-agentcore:UpdateMemory',
85
+ ];
86
+ MemoryPerms.FULL_ACCESS_PERMS = [
87
+ ...new Set([...STM.WRITE_PERMS, ...MemoryPerms.READ_PERMS, ...MemoryPerms.DELETE_PERMS, ...MemoryPerms.ADMIN_PERMS]),
88
+ ];
89
+ })(MemoryPerms || (exports.MemoryPerms = MemoryPerms = {}));
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwZXJtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUVILElBQWlCLFdBQVcsQ0EwRTNCO0FBMUVELFdBQWlCLFdBQVc7SUFDMUI7O21GQUUrRTtJQUMvRTs7T0FFRztJQUNILElBQWlCLEdBQUcsQ0FrQm5CO0lBbEJELFdBQWlCLEdBQUc7UUFDbEI7O1dBRUc7UUFDVSxlQUFXLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzdEOztXQUVHO1FBQ1UsY0FBVSxHQUFHO1lBQ3hCLDRCQUE0QjtZQUM1Qiw4QkFBOEI7WUFDOUIsOEJBQThCO1lBQzlCLGdDQUFnQztTQUNqQyxDQUFDO1FBQ0Y7O1dBRUc7UUFDVSxnQkFBWSxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNoRSxDQUFDLEVBbEJnQixHQUFHLEdBQUgsZUFBRyxLQUFILGVBQUcsUUFrQm5CO0lBRUQ7O09BRUc7SUFDSCxJQUFpQixHQUFHLENBaUJuQjtJQWpCRCxXQUFpQixHQUFHO1FBQ2xCLGtHQUFrRztRQUNsRyw4RUFBOEU7UUFDOUU7O1dBRUc7UUFDVSxjQUFVLEdBQUc7WUFDeEIsbUNBQW1DO1lBQ25DLHlDQUF5QyxFQUFFLHlCQUF5QjtZQUNwRSxxQ0FBcUM7WUFDckMsOEJBQThCO1lBQzlCLGdDQUFnQztTQUNqQyxDQUFDO1FBQ0Y7O1dBRUc7UUFDVSxnQkFBWSxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN2RSxDQUFDLEVBakJnQixHQUFHLEdBQUgsZUFBRyxLQUFILGVBQUcsUUFpQm5CO0lBRUQ7O09BRUc7SUFDVSxzQkFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0U7O09BRUc7SUFDVSx3QkFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckY7O21GQUUrRTtJQUMvRTs7T0FFRztJQUNVLHVCQUFXLEdBQUc7UUFDekIsZ0NBQWdDO1FBQ2hDLDZCQUE2QjtRQUM3QixnQ0FBZ0M7UUFDaEMsZ0NBQWdDO0tBQ2pDLENBQUM7SUFFVyw2QkFBaUIsR0FBRztRQUMvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsWUFBQSxVQUFVLEVBQUUsR0FBRyxZQUFBLFlBQVksRUFBRSxHQUFHLFlBQUEsV0FBVyxDQUFDLENBQUM7S0FDakYsQ0FBQztBQUNKLENBQUMsRUExRWdCLFdBQVcsMkJBQVgsV0FBVyxRQTBFM0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgbmFtZXNwYWNlIE1lbW9yeVBlcm1zIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSBQbGFuZSBQZXJtaXNzaW9uc1xuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIC8qKlxuICAgKiBQZXJtaXNzaW9ucyBmb3IgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSlcbiAgICovXG4gIGV4cG9ydCBuYW1lc3BhY2UgU1RNIHtcbiAgICAvKipcbiAgICAgKiBQZXJtaXNzaW9ucyB0byB3cml0ZSBTaG9ydC1UZXJtIE1lbW9yeSAoU1RNKVxuICAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBXUklURV9QRVJNUyA9IFsnYmVkcm9jay1hZ2VudGNvcmU6Q3JlYXRlRXZlbnQnXTtcbiAgICAvKipcbiAgICAgKiBQZXJtaXNzaW9ucyB0byByZWFkIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pXG4gICAgICovXG4gICAgZXhwb3J0IGNvbnN0IFJFQURfUEVSTVMgPSBbXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0RXZlbnQnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RFdmVudHMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RBY3RvcnMnLFxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RTZXNzaW9ucycsXG4gICAgXTtcbiAgICAvKipcbiAgICAgKiBQZXJtaXNzaW9ucyB0byBkZWxldGUgU2hvcnQtVGVybSBNZW1vcnkgKFNUTSlcbiAgICAgKi9cbiAgICBleHBvcnQgY29uc3QgREVMRVRFX1BFUk1TID0gWydiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVFdmVudCddO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pc3Npb25zIGZvciBMb25nLVRlcm0gTWVtb3J5IChMVE0pXG4gICAqL1xuICBleHBvcnQgbmFtZXNwYWNlIExUTSB7XG4gICAgLy8gTm90ZSBob3cgdGhlcmUgaXMgbm8gXCJiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVNZW1vcnlSZWNvcmRcIiBhcyB5b3UgY2Fubm90IHdyaXRlIGRpcmVjdGx5IHRvIExUTVxuICAgIC8vIFRoaXMgaXMgZG9uZSBhc3luY2hyb25vdXNseSBvbmNlIGV4dHJhY3Rpb24gc3RhdGVnaWVzIGhhdmUgYmVlbiBjb25maWd1cmVkLlxuICAgIC8qKlxuICAgICAqIFBlcm1pc3Npb25zIHRvIHJlYWQgTG9uZy1UZXJtIE1lbW9yeSAoTFRNKVxuICAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBSRUFEX1BFUk1TID0gW1xuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeVJlY29yZCcsXG4gICAgICAnYmVkcm9jay1hZ2VudGNvcmU6UmV0cmlldmVNZW1vcnlSZWNvcmRzJywgLy8gUmVhZCB2aWEgc2VtYXRpYyBxdWVyeVxuICAgICAgJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RNZW1vcnlSZWNvcmRzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0QWN0b3JzJyxcbiAgICAgICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0U2Vzc2lvbnMnLFxuICAgIF07XG4gICAgLyoqXG4gICAgICogUGVybWlzc2lvbnMgdG8gZGVsZXRlIExvbmctVGVybSBNZW1vcnkgKExUTSlcbiAgICAgKi9cbiAgICBleHBvcnQgY29uc3QgREVMRVRFX1BFUk1TID0gWydiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVNZW1vcnlSZWNvcmQnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXNzaW9ucyB0byByZWFkIGJvdGggU2hvcnQtVGVybSBNZW1vcnkgKFNUTSkgYW5kIExvbmctVGVybSBNZW1vcnkgKExUTSlcbiAgICovXG4gIGV4cG9ydCBjb25zdCBSRUFEX1BFUk1TID0gWy4uLm5ldyBTZXQoWy4uLlNUTS5SRUFEX1BFUk1TLCAuLi5MVE0uUkVBRF9QRVJNU10pXTtcbiAgLyoqXG4gICAqIFBlcm1pc3Npb25zIHRvIGRlbGV0ZSBib3RoIFNob3J0LVRlcm0gTWVtb3J5IChTVE0pIGFuZCBMb25nLVRlcm0gTWVtb3J5IChMVE0pXG4gICAqL1xuICBleHBvcnQgY29uc3QgREVMRVRFX1BFUk1TID0gWy4uLm5ldyBTZXQoWy4uLlNUTS5ERUxFVEVfUEVSTVMsIC4uLkxUTS5ERUxFVEVfUEVSTVNdKV07XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIFBsYW5lIFBlcm1pc3Npb25zXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgLyoqXG4gICAqIEdyYW50cyBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHRoZSBtZW1vcnkgKENSVUQpXG4gICAqL1xuICBleHBvcnQgY29uc3QgQURNSU5fUEVSTVMgPSBbXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZU1lbW9yeScsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldE1lbW9yeScsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZU1lbW9yeScsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOlVwZGF0ZU1lbW9yeScsXG4gIF07XG5cbiAgZXhwb3J0IGNvbnN0IEZVTExfQUNDRVNTX1BFUk1TID0gW1xuICAgIC4uLm5ldyBTZXQoWy4uLlNUTS5XUklURV9QRVJNUywgLi4uUkVBRF9QRVJNUywgLi4uREVMRVRFX1BFUk1TLCAuLi5BRE1JTl9QRVJNU10pLFxuICBdO1xufVxuIl19
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
+ * with the License. A copy of the License is located at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
+ * and limitations under the License.
12
+ */
13
+ import { IBedrockInvokable } from '@aws-cdk/aws-bedrock-alpha';
14
+ import * as bedrockagentcore from 'aws-cdk-lib/aws-bedrockagentcore';
15
+ import { Grant, IGrantable } from 'aws-cdk-lib/aws-iam';
16
+ import { MemoryStrategyCommonProps, IMemoryStrategy, MemoryStrategyType } from '../memory-strategy';
17
+ /**
18
+ * Configuration for overriding model and prompt template
19
+ */
20
+ export interface OverrideConfig {
21
+ /**
22
+ * The model to use for consolidation/extraction
23
+ */
24
+ readonly model: IBedrockInvokable;
25
+ /**
26
+ * The prompt that will be appended to the system prompt to define
27
+ * the model's memory consolidation/extraction strategy.
28
+ * This configuration provides customization to how the model identifies and extracts
29
+ * relevant information for memory storage. You can use the default user prompt or create a customized one.
30
+ *
31
+ * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/system-prompts.html
32
+ */
33
+ readonly appendToPrompt: string;
34
+ }
35
+ /**
36
+ * Configuration parameters for a memory strategy that can override
37
+ * existing built-in default prompts/models
38
+ */
39
+ export interface ManagedStrategyProps extends MemoryStrategyCommonProps {
40
+ /**
41
+ * The configuration for the custom extraction.
42
+ * This configuration provides customization to how the model identifies
43
+ * and extracts relevant information for memory storage.
44
+ * @default - No custom extraction
45
+ * @required - No
46
+ */
47
+ readonly customExtraction?: OverrideConfig;
48
+ /**
49
+ * The configuration for the custom consolidation.
50
+ * This configuration provides customization to how the model identifies
51
+ * and extracts relevant information for memory storage.
52
+ * @default - No custom extraction
53
+ * @required - No
54
+ */
55
+ readonly customConsolidation?: OverrideConfig;
56
+ /**
57
+ * The namespaces for the strategy
58
+ * Represents a namespace for organizing memory data
59
+ * Use a hierarchical format separated by forward slashes (/)
60
+ *
61
+ * Use a hierarchical format separated by forward slashes (/) to organize namespaces logically.
62
+ * You can include these defined variables:
63
+ *
64
+ * - {sessionId} - the user identifier to be created in the CreateEvent API
65
+ * - {memoryStrategyId} - an identifier for an extraction strategy
66
+ * - {sessionId} - an identifier for each session
67
+ *
68
+ * Example namespace path:
69
+ * /strategies/{memoryStrategyId}/actions/{actionId}/sessions/{sessionId}
70
+ *
71
+ * After memory creation, this namespace might look like:
72
+ * /actor/actor-3afc5aa8fef9/strategy/summarization-fy5c5fwc7/session/session-qj7tpd1kvr8
73
+ * @required - Yes
74
+ */
75
+ readonly namespaces: string[];
76
+ }
77
+ /**
78
+ * Managed memory strategy that handles both built-in and override configurations.
79
+ * This strategy can be used for quick setup with built-in defaults or customized
80
+ * with specific models and prompt templates.
81
+ */
82
+ export declare class ManagedMemoryStrategy implements IMemoryStrategy {
83
+ readonly name: string;
84
+ readonly description?: string;
85
+ /**
86
+ * The namespaces for the strategy
87
+ */
88
+ readonly namespaces: string[];
89
+ /**
90
+ * The configuration for the custom consolidation.
91
+ */
92
+ readonly consolidationOverride?: OverrideConfig;
93
+ /**
94
+ * The configuration for the custom extraction.
95
+ */
96
+ readonly extractionOverride?: OverrideConfig;
97
+ readonly strategyType: MemoryStrategyType;
98
+ /**
99
+ * Constructor to create a new managed memory strategy
100
+ * @param strategyType the strategy type
101
+ * @param props the properties for the strategy
102
+ */
103
+ constructor(strategyType: MemoryStrategyType, props: ManagedStrategyProps);
104
+ /**
105
+ * Renders the network configuration as a CloudFormation property.
106
+ * @returns The CloudFormation property for the memory strategy.
107
+ */
108
+ render(): bedrockagentcore.CfnMemory.MemoryStrategyProperty;
109
+ /**
110
+ * Grants the necessary permissions to the role
111
+ * @param grantee - The grantee to grant permissions to
112
+ * @returns The Grant object for chaining
113
+ */
114
+ grant(grantee: IGrantable): Grant | undefined;
115
+ /**
116
+ * Validates the memory strategy name
117
+ * @param name - The name to validate
118
+ * @returns Array of validation error messages, empty if valid
119
+ */
120
+ private _validateMemoryStrategyName;
121
+ /**
122
+ * Validates the prompt
123
+ * @param prompt - The prompt to validate
124
+ * @returns Array of validation error messages, empty if valid
125
+ */
126
+ private _validatePrompt;
127
+ /**
128
+ * Validates the memory strategy namespaces
129
+ * @param namespaces - The namespaces to validate
130
+ * @returns Array of validation error messages, empty if valid
131
+ */
132
+ private _validateMemoryStrategyNamespaces;
133
+ }
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManagedMemoryStrategy = void 0;
4
+ const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const memory_strategy_1 = require("../memory-strategy");
8
+ const validation_helpers_1 = require("../validation-helpers");
9
+ /******************************************************************************
10
+ * CONSTANTS
11
+ *****************************************************************************/
12
+ /**
13
+ * Minimum length for prompt
14
+ * @internal
15
+ */
16
+ const PROMPT_MIN_LENGTH = 1;
17
+ /**
18
+ * Maximum length for prompt
19
+ * @internal
20
+ */
21
+ const PROMPT_MAX_LENGTH = 30000;
22
+ /**
23
+ * Managed memory strategy that handles both built-in and override configurations.
24
+ * This strategy can be used for quick setup with built-in defaults or customized
25
+ * with specific models and prompt templates.
26
+ */
27
+ class ManagedMemoryStrategy {
28
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ManagedMemoryStrategy", version: "2.222.0-alpha.0" };
29
+ name;
30
+ description;
31
+ /**
32
+ * The namespaces for the strategy
33
+ */
34
+ namespaces;
35
+ /**
36
+ * The configuration for the custom consolidation.
37
+ */
38
+ consolidationOverride;
39
+ /**
40
+ * The configuration for the custom extraction.
41
+ */
42
+ extractionOverride;
43
+ strategyType;
44
+ /**
45
+ * Constructor to create a new managed memory strategy
46
+ * @param strategyType the strategy type
47
+ * @param props the properties for the strategy
48
+ */
49
+ constructor(strategyType, props) {
50
+ try {
51
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_MemoryStrategyType(strategyType);
52
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ManagedStrategyProps(props);
53
+ }
54
+ catch (error) {
55
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
56
+ Error.captureStackTrace(error, ManagedMemoryStrategy);
57
+ }
58
+ throw error;
59
+ }
60
+ // ------------------------------------------------------
61
+ // Set properties and defaults
62
+ // ------------------------------------------------------
63
+ this.name = props.name;
64
+ this.description = props.description;
65
+ this.namespaces = props.namespaces;
66
+ this.strategyType = strategyType;
67
+ this.consolidationOverride = props.customConsolidation;
68
+ this.extractionOverride = props.customExtraction;
69
+ // ------------------------------------------------------
70
+ // Validations
71
+ // ------------------------------------------------------
72
+ (0, validation_helpers_1.throwIfInvalid)(this._validatePrompt, this.consolidationOverride?.appendToPrompt);
73
+ (0, validation_helpers_1.throwIfInvalid)(this._validatePrompt, this.extractionOverride?.appendToPrompt);
74
+ (0, validation_helpers_1.throwIfInvalid)(this._validateMemoryStrategyName, this.name);
75
+ if (this.namespaces) {
76
+ (0, validation_helpers_1.throwIfInvalid)(this._validateMemoryStrategyNamespaces, this.namespaces);
77
+ }
78
+ }
79
+ /**
80
+ * Renders the network configuration as a CloudFormation property.
81
+ * @returns The CloudFormation property for the memory strategy.
82
+ */
83
+ render() {
84
+ // If no overrides, use built-in strategy format
85
+ if (!this.consolidationOverride && !this.extractionOverride) {
86
+ const cfnStrategyMap = {
87
+ [memory_strategy_1.MemoryStrategyType.USER_PREFERENCE]: 'userPreferenceMemoryStrategy',
88
+ [memory_strategy_1.MemoryStrategyType.SEMANTIC]: 'semanticMemoryStrategy',
89
+ [memory_strategy_1.MemoryStrategyType.SUMMARIZATION]: 'summaryMemoryStrategy',
90
+ [memory_strategy_1.MemoryStrategyType.CUSTOM]: 'customMemoryStrategy',
91
+ };
92
+ const strategyKey = cfnStrategyMap[this.strategyType];
93
+ return {
94
+ [strategyKey]: {
95
+ name: this.name,
96
+ description: this.description,
97
+ namespaces: this.namespaces,
98
+ type: this.strategyType,
99
+ },
100
+ };
101
+ }
102
+ // If overrides are provided, use custom strategy format
103
+ const cfnStrategyMap = {
104
+ [memory_strategy_1.MemoryStrategyType.USER_PREFERENCE]: 'userPreferenceOverride',
105
+ [memory_strategy_1.MemoryStrategyType.SEMANTIC]: 'semanticOverride',
106
+ [memory_strategy_1.MemoryStrategyType.SUMMARIZATION]: 'summaryOverride',
107
+ [memory_strategy_1.MemoryStrategyType.CUSTOM]: '',
108
+ };
109
+ const strategyKey = cfnStrategyMap[this.strategyType];
110
+ return {
111
+ customMemoryStrategy: {
112
+ name: this.name,
113
+ description: this.description,
114
+ namespaces: this.namespaces,
115
+ type: this.strategyType,
116
+ configuration: {
117
+ [strategyKey]: {
118
+ ...(this.consolidationOverride && {
119
+ consolidation: {
120
+ modelId: aws_cdk_lib_1.Arn.split(this.consolidationOverride.model.invokableArn, aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME)
121
+ .resourceName,
122
+ appendToPrompt: this.consolidationOverride.appendToPrompt,
123
+ },
124
+ }),
125
+ ...(this.extractionOverride && {
126
+ extraction: {
127
+ modelId: aws_cdk_lib_1.Arn.split(this.extractionOverride.model.invokableArn, aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME)
128
+ .resourceName,
129
+ appendToPrompt: this.extractionOverride.appendToPrompt,
130
+ },
131
+ }),
132
+ },
133
+ },
134
+ },
135
+ };
136
+ }
137
+ /**
138
+ * Grants the necessary permissions to the role
139
+ * @param grantee - The grantee to grant permissions to
140
+ * @returns The Grant object for chaining
141
+ */
142
+ grant(grantee) {
143
+ const grant1 = this.consolidationOverride?.model.grantInvoke(grantee);
144
+ const grant2 = this.extractionOverride?.model.grantInvoke(grantee);
145
+ return grant1 && grant2 ? grant1.combine(grant2) : grant1 || grant2;
146
+ }
147
+ // ------------------------------------------------------
148
+ // VALIDATORS
149
+ // ------------------------------------------------------
150
+ /**
151
+ * Validates the memory strategy name
152
+ * @param name - The name to validate
153
+ * @returns Array of validation error messages, empty if valid
154
+ */
155
+ _validateMemoryStrategyName = (name, scope) => {
156
+ let errors = [];
157
+ errors.push(...(0, validation_helpers_1.validateStringFieldLength)({
158
+ value: name,
159
+ fieldName: 'Memory name',
160
+ minLength: memory_strategy_1.MEMORY_NAME_MIN_LENGTH,
161
+ maxLength: memory_strategy_1.MEMORY_NAME_MAX_LENGTH,
162
+ }, scope));
163
+ // Check if name matches the AWS API pattern: [a-zA-Z][a-zA-Z0-9_]{0,47}
164
+ // Must start with a letter, followed by up to 47 letters, numbers, or underscores
165
+ const validNamePattern = /^[a-zA-Z][a-zA-Z0-9_]{0,47}$/;
166
+ errors.push(...(0, validation_helpers_1.validateFieldPattern)(name, 'Memory name', validNamePattern, undefined, scope));
167
+ return errors;
168
+ };
169
+ /**
170
+ * Validates the prompt
171
+ * @param prompt - The prompt to validate
172
+ * @returns Array of validation error messages, empty if valid
173
+ */
174
+ _validatePrompt = (prompt, scope) => {
175
+ let errors = [];
176
+ if (!prompt) {
177
+ return errors;
178
+ }
179
+ errors.push(...(0, validation_helpers_1.validateStringFieldLength)({
180
+ value: prompt,
181
+ fieldName: 'Prompt',
182
+ minLength: PROMPT_MIN_LENGTH,
183
+ maxLength: PROMPT_MAX_LENGTH,
184
+ }, scope));
185
+ return errors;
186
+ };
187
+ /**
188
+ * Validates the memory strategy namespaces
189
+ * @param namespaces - The namespaces to validate
190
+ * @returns Array of validation error messages, empty if valid
191
+ */
192
+ _validateMemoryStrategyNamespaces = (namespaces) => {
193
+ let errors = [];
194
+ if (namespaces.length === 0) {
195
+ return errors;
196
+ }
197
+ for (const namespace of namespaces) {
198
+ // Only check for template variables in namespace definition
199
+ if (namespace.includes('{') && !(namespace.includes('{actorId}') ||
200
+ namespace.includes('{sessionId}') ||
201
+ namespace.includes('{memoryStrategyId}'))) {
202
+ errors.push(`Namespace with templates should contain valid variables: ${namespace}`);
203
+ }
204
+ }
205
+ return errors;
206
+ };
207
+ }
208
+ exports.ManagedMemoryStrategy = ManagedMemoryStrategy;
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZC1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hbmFnZWQtc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFjQSw2Q0FBNkM7QUFJN0Msd0RBQW9KO0FBQ3BKLDhEQUF3RztBQUV4Rzs7K0VBRStFO0FBQy9FOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBZ0VoQzs7OztHQUlHO0FBQ0gsTUFBYSxxQkFBcUI7O0lBQ2hCLElBQUksQ0FBUztJQUNiLFdBQVcsQ0FBVTtJQUNyQzs7T0FFRztJQUNhLFVBQVUsQ0FBVztJQUNyQzs7T0FFRztJQUNhLHFCQUFxQixDQUFrQjtJQUN2RDs7T0FFRztJQUNhLGtCQUFrQixDQUFrQjtJQUNwQyxZQUFZLENBQXFCO0lBRWpEOzs7O09BSUc7SUFDSCxZQUFZLFlBQWdDLEVBQUUsS0FBMkI7Ozs7Ozs7K0NBdEI5RCxxQkFBcUI7Ozs7UUF1QjlCLHlEQUF5RDtRQUN6RCw4QkFBOEI7UUFDOUIseURBQXlEO1FBQ3pELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUVqRCx5REFBeUQ7UUFDekQsY0FBYztRQUNkLHlEQUF5RDtRQUN6RCxJQUFBLG1DQUFjLEVBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMscUJB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TUFBTSxHQUFhLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUEsOENBQXlCLEVBQUM7WUFDdkMsS0FBSyxFQUFFLE1BQU07WUFDYixTQUFTLEVBQUUsUUFBUTtZQUNuQixTQUFTLEVBQUUsaUJBQWlCO1lBQzVCLFNBQVMsRUFBRSxpQkFBaUI7U0FDN0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ1gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNLLGlDQUFpQyxHQUFHLENBQUMsVUFBb0IsRUFBWSxFQUFFO1FBQzdFLElBQUksTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUUxQixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsNERBQTREO1lBQzVELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQzlCLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2dCQUMzQixTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztnQkFDakMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUM3QyxFQUFFLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyw0REFBNEQsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQzs7QUF6TEosc0RBMExDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgSUJlZHJvY2tJbnZva2FibGUgfSBmcm9tICdAYXdzLWNkay9hd3MtYmVkcm9jay1hbHBoYSc7XG5pbXBvcnQgeyBBcm4sIEFybkZvcm1hdCB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHsgR3JhbnQsIElHcmFudGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IE1lbW9yeVN0cmF0ZWd5Q29tbW9uUHJvcHMsIElNZW1vcnlTdHJhdGVneSwgTWVtb3J5U3RyYXRlZ3lUeXBlLCBNRU1PUllfTkFNRV9NSU5fTEVOR1RILCBNRU1PUllfTkFNRV9NQVhfTEVOR1RIIH0gZnJvbSAnLi4vbWVtb3J5LXN0cmF0ZWd5JztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGRMZW5ndGgsIHRocm93SWZJbnZhbGlkLCB2YWxpZGF0ZUZpZWxkUGF0dGVybiB9IGZyb20gJy4uL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1RBTlRTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gbGVuZ3RoIGZvciBwcm9tcHRcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBQUk9NUFRfTUlOX0xFTkdUSCA9IDE7XG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIGZvciBwcm9tcHRcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBQUk9NUFRfTUFYX0xFTkdUSCA9IDMwMDAwO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIG92ZXJyaWRpbmcgbW9kZWwgYW5kIHByb21wdCB0ZW1wbGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBtb2RlbCB0byB1c2UgZm9yIGNvbnNvbGlkYXRpb24vZXh0cmFjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZWw6IElCZWRyb2NrSW52b2thYmxlO1xuICAvKipcbiAgICogVGhlIHByb21wdCB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHN5c3RlbSBwcm9tcHQgdG8gZGVmaW5lXG4gICAqIHRoZSBtb2RlbCdzIG1lbW9yeSBjb25zb2xpZGF0aW9uL2V4dHJhY3Rpb24gc3RyYXRlZ3kuXG4gICAqIFRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcyBjdXN0b21pemF0aW9uIHRvIGhvdyB0aGUgbW9kZWwgaWRlbnRpZmllcyBhbmQgZXh0cmFjdHNcbiAgICogcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yIG1lbW9yeSBzdG9yYWdlLiBZb3UgY2FuIHVzZSB0aGUgZGVmYXVsdCB1c2VyIHByb21wdCBvciBjcmVhdGUgYSBjdXN0b21pemVkIG9uZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL3N5c3RlbS1wcm9tcHRzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGFwcGVuZFRvUHJvbXB0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBhIG1lbW9yeSBzdHJhdGVneSB0aGF0IGNhbiBvdmVycmlkZVxuICogZXhpc3RpbmcgYnVpbHQtaW4gZGVmYXVsdCBwcm9tcHRzL21vZGVsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRTdHJhdGVneVByb3BzIGV4dGVuZHMgTWVtb3J5U3RyYXRlZ3lDb21tb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1c3RvbSBleHRyYWN0aW9uLlxuICAgKiBUaGlzIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgY3VzdG9taXphdGlvbiB0byBob3cgdGhlIG1vZGVsIGlkZW50aWZpZXNcbiAgICogYW5kIGV4dHJhY3RzIHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciBtZW1vcnkgc3RvcmFnZS5cbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZXh0cmFjdGlvblxuICAgKiBAcmVxdWlyZWQgLSBOb1xuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tRXh0cmFjdGlvbj86IE92ZXJyaWRlQ29uZmlnO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjdXN0b20gY29uc29saWRhdGlvbi5cbiAgICogVGhpcyBjb25maWd1cmF0aW9uIHByb3ZpZGVzIGN1c3RvbWl6YXRpb24gdG8gaG93IHRoZSBtb2RlbCBpZGVudGlmaWVzXG4gICAqIGFuZCBleHRyYWN0cyByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgbWVtb3J5IHN0b3JhZ2UuXG4gICAqIEBkZWZhdWx0IC0gTm8gY3VzdG9tIGV4dHJhY3Rpb25cbiAgICogQHJlcXVpcmVkIC0gTm9cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUNvbnNvbGlkYXRpb24/OiBPdmVycmlkZUNvbmZpZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2VzIGZvciB0aGUgc3RyYXRlZ3lcbiAgICogUmVwcmVzZW50cyBhIG5hbWVzcGFjZSBmb3Igb3JnYW5pemluZyBtZW1vcnkgZGF0YVxuICAgKiBVc2UgYSBoaWVyYXJjaGljYWwgZm9ybWF0IHNlcGFyYXRlZCBieSBmb3J3YXJkIHNsYXNoZXMgKC8pXG4gICAqXG4gICAqIFVzZSBhIGhpZXJhcmNoaWNhbCBmb3JtYXQgc2VwYXJhdGVkIGJ5IGZvcndhcmQgc2xhc2hlcyAoLykgdG8gb3JnYW5pemUgbmFtZXNwYWNlcyBsb2dpY2FsbHkuXG4gICAqIFlvdSBjYW4gaW5jbHVkZSB0aGVzZSBkZWZpbmVkIHZhcmlhYmxlczpcbiAgICpcbiAgICogLSB7c2Vzc2lvbklkfSAtIHRoZSB1c2VyIGlkZW50aWZpZXIgdG8gYmUgY3JlYXRlZCBpbiB0aGUgQ3JlYXRlRXZlbnQgQVBJXG4gICAqIC0ge21lbW9yeVN0cmF0ZWd5SWR9IC0gYW4gaWRlbnRpZmllciBmb3IgYW4gZXh0cmFjdGlvbiBzdHJhdGVneVxuICAgKiAtIHtzZXNzaW9uSWR9IC0gYW4gaWRlbnRpZmllciBmb3IgZWFjaCBzZXNzaW9uXG4gICAqXG4gICAqIEV4YW1wbGUgbmFtZXNwYWNlIHBhdGg6XG4gICAqIC9zdHJhdGVnaWVzL3ttZW1vcnlTdHJhdGVneUlkfS9hY3Rpb25zL3thY3Rpb25JZH0vc2Vzc2lvbnMve3Nlc3Npb25JZH1cbiAgICpcbiAgICogQWZ0ZXIgbWVtb3J5IGNyZWF0aW9uLCB0aGlzIG5hbWVzcGFjZSBtaWdodCBsb29rIGxpa2U6XG4gICAqIC9hY3Rvci9hY3Rvci0zYWZjNWFhOGZlZjkvc3RyYXRlZ3kvc3VtbWFyaXphdGlvbi1meTVjNWZ3Yzcvc2Vzc2lvbi9zZXNzaW9uLXFqN3RwZDFrdnI4XG4gICAqIEByZXF1aXJlZCAtIFllc1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogTWFuYWdlZCBtZW1vcnkgc3RyYXRlZ3kgdGhhdCBoYW5kbGVzIGJvdGggYnVpbHQtaW4gYW5kIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb25zLlxuICogVGhpcyBzdHJhdGVneSBjYW4gYmUgdXNlZCBmb3IgcXVpY2sgc2V0dXAgd2l0aCBidWlsdC1pbiBkZWZhdWx0cyBvciBjdXN0b21pemVkXG4gKiB3aXRoIHNwZWNpZmljIG1vZGVscyBhbmQgcHJvbXB0IHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hbmFnZWRNZW1vcnlTdHJhdGVneSBpbXBsZW1lbnRzIElNZW1vcnlTdHJhdGVneSB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2VzIGZvciB0aGUgc3RyYXRlZ3lcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lc3BhY2VzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VzdG9tIGNvbnNvbGlkYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29uc29saWRhdGlvbk92ZXJyaWRlPzogT3ZlcnJpZGVDb25maWc7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1c3RvbSBleHRyYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4dHJhY3Rpb25PdmVycmlkZT86IE92ZXJyaWRlQ29uZmlnO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RyYXRlZ3lUeXBlOiBNZW1vcnlTdHJhdGVneVR5cGU7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIG5ldyBtYW5hZ2VkIG1lbW9yeSBzdHJhdGVneVxuICAgKiBAcGFyYW0gc3RyYXRlZ3lUeXBlIHRoZSBzdHJhdGVneSB0eXBlXG4gICAqIEBwYXJhbSBwcm9wcyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHN0cmF0ZWd5XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdHJhdGVneVR5cGU6IE1lbW9yeVN0cmF0ZWd5VHlwZSwgcHJvcHM6IE1hbmFnZWRTdHJhdGVneVByb3BzKSB7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2V0IHByb3BlcnRpZXMgYW5kIGRlZmF1bHRzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5uYW1lc3BhY2VzID0gcHJvcHMubmFtZXNwYWNlcztcbiAgICB0aGlzLnN0cmF0ZWd5VHlwZSA9IHN0cmF0ZWd5VHlwZTtcbiAgICB0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZSA9IHByb3BzLmN1c3RvbUNvbnNvbGlkYXRpb247XG4gICAgdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUgPSBwcm9wcy5jdXN0b21FeHRyYWN0aW9uO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVmFsaWRhdGlvbnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZVByb21wdCwgdGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGU/LmFwcGVuZFRvUHJvbXB0KTtcbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZVByb21wdCwgdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGU/LmFwcGVuZFRvUHJvbXB0KTtcbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZU1lbW9yeVN0cmF0ZWd5TmFtZSwgdGhpcy5uYW1lKTtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2VzKSB7XG4gICAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZU1lbW9yeVN0cmF0ZWd5TmFtZXNwYWNlcywgdGhpcy5uYW1lc3BhY2VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGFzIGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSBmb3IgdGhlIG1lbW9yeSBzdHJhdGVneS5cbiAgICovXG4gIHB1YmxpYyByZW5kZXIoKTogYmVkcm9ja2FnZW50Y29yZS5DZm5NZW1vcnkuTWVtb3J5U3RyYXRlZ3lQcm9wZXJ0eSB7XG4gICAgLy8gSWYgbm8gb3ZlcnJpZGVzLCB1c2UgYnVpbHQtaW4gc3RyYXRlZ3kgZm9ybWF0XG4gICAgaWYgKCF0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZSAmJiAhdGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUpIHtcbiAgICAgIGNvbnN0IGNmblN0cmF0ZWd5TWFwOiBSZWNvcmQ8TWVtb3J5U3RyYXRlZ3lUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLlVTRVJfUFJFRkVSRU5DRV06ICd1c2VyUHJlZmVyZW5jZU1lbW9yeVN0cmF0ZWd5JyxcbiAgICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5TRU1BTlRJQ106ICdzZW1hbnRpY01lbW9yeVN0cmF0ZWd5JyxcbiAgICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5TVU1NQVJJWkFUSU9OXTogJ3N1bW1hcnlNZW1vcnlTdHJhdGVneScsXG4gICAgICAgIFtNZW1vcnlTdHJhdGVneVR5cGUuQ1VTVE9NXTogJ2N1c3RvbU1lbW9yeVN0cmF0ZWd5JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBzdHJhdGVneUtleSA9IGNmblN0cmF0ZWd5TWFwW3RoaXMuc3RyYXRlZ3lUeXBlXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtzdHJhdGVneUtleV06IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbmFtZXNwYWNlczogdGhpcy5uYW1lc3BhY2VzLFxuICAgICAgICAgIHR5cGU6IHRoaXMuc3RyYXRlZ3lUeXBlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBvdmVycmlkZXMgYXJlIHByb3ZpZGVkLCB1c2UgY3VzdG9tIHN0cmF0ZWd5IGZvcm1hdFxuICAgIGNvbnN0IGNmblN0cmF0ZWd5TWFwOiBSZWNvcmQ8TWVtb3J5U3RyYXRlZ3lUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5VU0VSX1BSRUZFUkVOQ0VdOiAndXNlclByZWZlcmVuY2VPdmVycmlkZScsXG4gICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLlNFTUFOVElDXTogJ3NlbWFudGljT3ZlcnJpZGUnLFxuICAgICAgW01lbW9yeVN0cmF0ZWd5VHlwZS5TVU1NQVJJWkFUSU9OXTogJ3N1bW1hcnlPdmVycmlkZScsXG4gICAgICBbTWVtb3J5U3RyYXRlZ3lUeXBlLkNVU1RPTV06ICcnLFxuICAgIH07XG5cbiAgICBjb25zdCBzdHJhdGVneUtleSA9IGNmblN0cmF0ZWd5TWFwW3RoaXMuc3RyYXRlZ3lUeXBlXTtcbiAgICByZXR1cm4ge1xuICAgICAgY3VzdG9tTWVtb3J5U3RyYXRlZ3k6IHtcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgbmFtZXNwYWNlczogdGhpcy5uYW1lc3BhY2VzLFxuICAgICAgICB0eXBlOiB0aGlzLnN0cmF0ZWd5VHlwZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIFtzdHJhdGVneUtleV06IHtcbiAgICAgICAgICAgIC4uLih0aGlzLmNvbnNvbGlkYXRpb25PdmVycmlkZSAmJiB7XG4gICAgICAgICAgICAgIGNvbnNvbGlkYXRpb246IHtcbiAgICAgICAgICAgICAgICBtb2RlbElkOiBBcm4uc3BsaXQodGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGUubW9kZWwuaW52b2thYmxlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSlcbiAgICAgICAgICAgICAgICAgIC5yZXNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgYXBwZW5kVG9Qcm9tcHQ6IHRoaXMuY29uc29saWRhdGlvbk92ZXJyaWRlLmFwcGVuZFRvUHJvbXB0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4odGhpcy5leHRyYWN0aW9uT3ZlcnJpZGUgJiYge1xuICAgICAgICAgICAgICBleHRyYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgbW9kZWxJZDogQXJuLnNwbGl0KHRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlLm1vZGVsLmludm9rYWJsZUFybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpXG4gICAgICAgICAgICAgICAgICAucmVzb3VyY2VOYW1lLFxuICAgICAgICAgICAgICAgIGFwcGVuZFRvUHJvbXB0OiB0aGlzLmV4dHJhY3Rpb25PdmVycmlkZS5hcHBlbmRUb1Byb21wdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgdG8gdGhlIHJvbGVcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgZ3JhbnRlZSB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcmV0dXJucyBUaGUgR3JhbnQgb2JqZWN0IGZvciBjaGFpbmluZ1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZ3JhbnQxID0gdGhpcy5jb25zb2xpZGF0aW9uT3ZlcnJpZGU/Lm1vZGVsLmdyYW50SW52b2tlKGdyYW50ZWUpO1xuICAgIGNvbnN0IGdyYW50MiA9IHRoaXMuZXh0cmFjdGlvbk92ZXJyaWRlPy5tb2RlbC5ncmFudEludm9rZShncmFudGVlKTtcbiAgICByZXR1cm4gZ3JhbnQxICYmIGdyYW50MiA/IGdyYW50MS5jb21iaW5lKGdyYW50MikgOiBncmFudDEgfHwgZ3JhbnQyO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFZBTElEQVRPUlNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG1lbW9yeSBzdHJhdGVneSBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlTWVtb3J5U3RyYXRlZ3lOYW1lID0gKG5hbWU6IHN0cmluZywgc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgZmllbGROYW1lOiAnTWVtb3J5IG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiBNRU1PUllfTkFNRV9NSU5fTEVOR1RILFxuICAgICAgbWF4TGVuZ3RoOiBNRU1PUllfTkFNRV9NQVhfTEVOR1RILFxuICAgIH0sIHNjb3BlKSk7XG5cbiAgICAvLyBDaGVjayBpZiBuYW1lIG1hdGNoZXMgdGhlIEFXUyBBUEkgcGF0dGVybjogW2EtekEtWl1bYS16QS1aMC05X117MCw0N31cbiAgICAvLyBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHVwIHRvIDQ3IGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzXG4gICAgY29uc3QgdmFsaWROYW1lUGF0dGVybiA9IC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLztcbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihuYW1lLCAnTWVtb3J5IG5hbWUnLCB2YWxpZE5hbWVQYXR0ZXJuLCB1bmRlZmluZWQsIHNjb3BlKSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb21wdFxuICAgKiBAcGFyYW0gcHJvbXB0IC0gVGhlIHByb21wdCB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVQcm9tcHQgPSAocHJvbXB0Pzogc3RyaW5nLCBzY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoIXByb21wdCkge1xuICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG4gICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICB2YWx1ZTogcHJvbXB0LFxuICAgICAgZmllbGROYW1lOiAnUHJvbXB0JyxcbiAgICAgIG1pbkxlbmd0aDogUFJPTVBUX01JTl9MRU5HVEgsXG4gICAgICBtYXhMZW5ndGg6IFBST01QVF9NQVhfTEVOR1RILFxuICAgIH0sIHNjb3BlKSk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBtZW1vcnkgc3RyYXRlZ3kgbmFtZXNwYWNlc1xuICAgKiBAcGFyYW0gbmFtZXNwYWNlcyAtIFRoZSBuYW1lc3BhY2VzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZU1lbW9yeVN0cmF0ZWd5TmFtZXNwYWNlcyA9IChuYW1lc3BhY2VzOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKG5hbWVzcGFjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIG5hbWVzcGFjZXMpIHtcbiAgICAgIC8vIE9ubHkgY2hlY2sgZm9yIHRlbXBsYXRlIHZhcmlhYmxlcyBpbiBuYW1lc3BhY2UgZGVmaW5pdGlvblxuICAgICAgaWYgKG5hbWVzcGFjZS5pbmNsdWRlcygneycpICYmICEoXG4gICAgICAgIG5hbWVzcGFjZS5pbmNsdWRlcygne2FjdG9ySWR9JykgfHxcbiAgICAgICAgICAgIG5hbWVzcGFjZS5pbmNsdWRlcygne3Nlc3Npb25JZH0nKSB8fFxuICAgICAgICAgICAgbmFtZXNwYWNlLmluY2x1ZGVzKCd7bWVtb3J5U3RyYXRlZ3lJZH0nKVxuICAgICAgKSkge1xuICAgICAgICBlcnJvcnMucHVzaChgTmFtZXNwYWNlIHdpdGggdGVtcGxhdGVzIHNob3VsZCBjb250YWluIHZhbGlkIHZhcmlhYmxlczogJHtuYW1lc3BhY2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfTtcbn1cbiJdfQ==