@aws-cdk/toolkit-lib 0.1.3 → 0.1.4

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 (60) hide show
  1. package/CODE_REGISTRY.md +12 -9
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/actions/bootstrap/index.d.ts +174 -0
  5. package/lib/actions/bootstrap/index.js +94 -0
  6. package/lib/actions/bootstrap/private/helpers.d.ts +5 -0
  7. package/lib/actions/bootstrap/private/helpers.js +23 -0
  8. package/lib/actions/bootstrap/private/index.d.ts +1 -0
  9. package/lib/actions/bootstrap/private/index.js +18 -0
  10. package/lib/actions/destroy/index.d.ts +1 -1
  11. package/lib/actions/destroy/index.js +1 -1
  12. package/lib/actions/index.d.ts +1 -0
  13. package/lib/actions/index.js +2 -1
  14. package/lib/actions/list/index.d.ts +4 -0
  15. package/lib/actions/list/index.js +1 -1
  16. package/lib/api/aws-cdk.d.ts +3 -6
  17. package/lib/api/aws-cdk.js +710 -252
  18. package/lib/api/aws-cdk.js.map +4 -4
  19. package/lib/api/bootstrap/bootstrap-template.yaml +707 -0
  20. package/lib/api/cloud-assembly/context.d.ts +9 -0
  21. package/lib/api/cloud-assembly/context.js +3 -0
  22. package/lib/api/cloud-assembly/private/context-aware-source.js +3 -3
  23. package/lib/api/cloud-assembly/private/prepare-source.d.ts +1 -1
  24. package/lib/api/cloud-assembly/private/prepare-source.js +4 -3
  25. package/lib/api/cloud-assembly/private/source-builder.js +3 -3
  26. package/lib/api/io/index.d.ts +1 -2
  27. package/lib/api/io/index.js +1 -17
  28. package/lib/api/io/private/codes.d.ts +39 -59
  29. package/lib/api/io/private/codes.js +55 -67
  30. package/lib/api/io/private/index.d.ts +0 -1
  31. package/lib/api/io/private/index.js +1 -2
  32. package/lib/api/io/private/level-priority.d.ts +1 -1
  33. package/lib/api/io/private/level-priority.js +1 -1
  34. package/lib/api/io/private/logger.d.ts +3 -12
  35. package/lib/api/io/private/logger.js +1 -22
  36. package/lib/api/io/private/messages.d.ts +7 -3
  37. package/lib/api/io/private/messages.js +1 -2
  38. package/lib/api/io/private/timer.d.ts +2 -2
  39. package/lib/api/io/private/timer.js +13 -13
  40. package/lib/api/shared-private.d.ts +1 -0
  41. package/lib/api/shared-private.js +82 -0
  42. package/lib/api/shared-private.js.map +7 -0
  43. package/lib/api/shared-public.d.ts +130 -1
  44. package/lib/api/shared-public.js.map +1 -1
  45. package/lib/private/util.d.ts +1 -0
  46. package/lib/private/util.js +715 -0
  47. package/lib/private/util.js.map +7 -0
  48. package/lib/toolkit/private/index.d.ts +10 -1
  49. package/lib/toolkit/private/index.js +18 -1
  50. package/lib/toolkit/toolkit.d.ts +7 -11
  51. package/lib/toolkit/toolkit.js +126 -99
  52. package/lib/util/concurrency.d.ts +5 -0
  53. package/lib/util/concurrency.js +11 -0
  54. package/package.json +11 -11
  55. package/lib/api/io/io-host.d.ts +0 -15
  56. package/lib/api/io/io-host.js +0 -3
  57. package/lib/api/io/io-message.d.ts +0 -59
  58. package/lib/api/io/io-message.js +0 -3
  59. package/lib/api/io/private/types.d.ts +0 -25
  60. package/lib/api/io/private/types.js +0 -3
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Re-export p-limit for concurrency control
3
+ */
4
+ declare const pLimit: typeof import('p-limit');
5
+ export { pLimit };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pLimit = void 0;
4
+ /**
5
+ * Re-export p-limit for concurrency control
6
+ */
7
+ // Must use a require() otherwise esbuild complains about calling a namespace
8
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
9
+ const pLimit = require('p-limit');
10
+ exports.pLimit = pLimit;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY3VycmVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25jdXJyZW5jeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILDZFQUE2RTtBQUM3RSxpRUFBaUU7QUFDakUsTUFBTSxNQUFNLEdBQTZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRCx3QkFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmUtZXhwb3J0IHAtbGltaXQgZm9yIGNvbmN1cnJlbmN5IGNvbnRyb2xcbiAqL1xuLy8gTXVzdCB1c2UgYSByZXF1aXJlKCkgb3RoZXJ3aXNlIGVzYnVpbGQgY29tcGxhaW5zIGFib3V0IGNhbGxpbmcgYSBuYW1lc3BhY2Vcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBwTGltaXQ6IHR5cGVvZiBpbXBvcnQoJ3AtbGltaXQnKSA9IHJlcXVpcmUoJ3AtbGltaXQnKTtcbmV4cG9ydCB7IHBMaW1pdCB9O1xuIl19
package/package.json CHANGED
@@ -44,14 +44,15 @@
44
44
  "@types/split2": "^4.2.3",
45
45
  "@typescript-eslint/eslint-plugin": "^8",
46
46
  "@typescript-eslint/parser": "^8",
47
- "aws-cdk": "^2.1002.0",
48
- "aws-cdk-lib": "^2.180.0",
47
+ "aws-cdk": "^2.1003.0",
48
+ "aws-cdk-lib": "^2.181.1",
49
49
  "aws-sdk-client-mock": "^4.1.0",
50
50
  "commit-and-tag-version": "^12",
51
51
  "constructs": "^10.0.0",
52
+ "dts-bundle-generator": "^9.5.1",
52
53
  "esbuild": "^0.25.0",
53
54
  "eslint": "^9",
54
- "eslint-config-prettier": "^10.0.1",
55
+ "eslint-config-prettier": "^10.0.2",
55
56
  "eslint-import-resolver-typescript": "^3.8.3",
56
57
  "eslint-plugin-import": "^2.31.0",
57
58
  "eslint-plugin-jest": "^28.11.0",
@@ -63,14 +64,14 @@
63
64
  "prettier": "^2.8",
64
65
  "projen": "^0.91.13",
65
66
  "ts-jest": "^29.2.6",
66
- "typedoc": "^0.27.8",
67
+ "typedoc": "^0.27.9",
67
68
  "typescript": "5.6"
68
69
  },
69
70
  "dependencies": {
70
- "@aws-cdk/cloud-assembly-schema": "^40.7.0",
71
+ "@aws-cdk/cloud-assembly-schema": "^41.0.0",
71
72
  "@aws-cdk/cloudformation-diff": "^2.179.0",
72
- "@aws-cdk/cx-api": "^2.180.0",
73
- "@aws-cdk/region-info": "^2.180.0",
73
+ "@aws-cdk/cx-api": "^2.181.1",
74
+ "@aws-cdk/region-info": "^2.181.1",
74
75
  "@aws-sdk/client-appsync": "^3",
75
76
  "@aws-sdk/client-cloudcontrol": "^3",
76
77
  "@aws-sdk/client-cloudformation": "^3",
@@ -92,7 +93,6 @@
92
93
  "@aws-sdk/credential-providers": "^3",
93
94
  "@aws-sdk/ec2-metadata-service": "^3",
94
95
  "@aws-sdk/lib-storage": "^3",
95
- "@jsii/check-node": "^1.108.0",
96
96
  "@smithy/middleware-endpoint": "^4.0.6",
97
97
  "@smithy/node-http-handler": "^4.0.3",
98
98
  "@smithy/property-provider": "^4.0.1",
@@ -102,8 +102,8 @@
102
102
  "@smithy/util-waiter": "^4.0.2",
103
103
  "archiver": "^7.0.1",
104
104
  "camelcase": "^6",
105
- "cdk-assets": "^3.0.0",
106
- "cdk-from-cfn": "^0.191.0",
105
+ "cdk-assets": "^3.1.0",
106
+ "cdk-from-cfn": "^0.193.0",
107
107
  "chalk": "^4",
108
108
  "chokidar": "^3",
109
109
  "decamelize": "^5",
@@ -136,7 +136,7 @@
136
136
  "publishConfig": {
137
137
  "access": "public"
138
138
  },
139
- "version": "0.1.3",
139
+ "version": "0.1.4",
140
140
  "types": "lib/index.d.ts",
141
141
  "exports": {
142
142
  ".": {
@@ -1,15 +0,0 @@
1
- import { IoMessage, IoRequest } from './io-message';
2
- export interface IIoHost {
3
- /**
4
- * Notifies the host of a message.
5
- * The caller waits until the notification completes.
6
- */
7
- notify<T>(msg: IoMessage<T>): Promise<void>;
8
- /**
9
- * Notifies the host of a message that requires a response.
10
- *
11
- * If the host does not return a response the suggested
12
- * default response from the input message will be used.
13
- */
14
- requestResponse<T, U>(msg: IoRequest<T, U>): Promise<U>;
15
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8taG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImlvLWhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElvTWVzc2FnZSwgSW9SZXF1ZXN0IH0gZnJvbSAnLi9pby1tZXNzYWdlJztcblxuZXhwb3J0IGludGVyZmFjZSBJSW9Ib3N0IHtcbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoZSBob3N0IG9mIGEgbWVzc2FnZS5cbiAgICogVGhlIGNhbGxlciB3YWl0cyB1bnRpbCB0aGUgbm90aWZpY2F0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIG5vdGlmeTxUPihtc2c6IElvTWVzc2FnZTxUPik6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoZSBob3N0IG9mIGEgbWVzc2FnZSB0aGF0IHJlcXVpcmVzIGEgcmVzcG9uc2UuXG4gICAqXG4gICAqIElmIHRoZSBob3N0IGRvZXMgbm90IHJldHVybiBhIHJlc3BvbnNlIHRoZSBzdWdnZXN0ZWRcbiAgICogZGVmYXVsdCByZXNwb25zZSBmcm9tIHRoZSBpbnB1dCBtZXNzYWdlIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlcXVlc3RSZXNwb25zZTxULCBVPihtc2c6IElvUmVxdWVzdDxULCBVPik6IFByb21pc2U8VT47XG59XG4iXX0=
@@ -1,59 +0,0 @@
1
- import { ToolkitAction } from '../../toolkit';
2
- /**
3
- * The reporting level of the message.
4
- * All messages are always reported, it's up to the IoHost to decide what to log.
5
- */
6
- export type IoMessageLevel = 'error' | 'result' | 'warn' | 'info' | 'debug' | 'trace';
7
- /**
8
- * A valid message code. See https://github.com/aws/aws-cdk-cli/blob/main/packages/%40aws-cdk/toolkit-lib/CODE_REGISTRY.md
9
- */
10
- export type IoMessageCode = `CDK_${string}_${'E' | 'W' | 'I'}${number}${number}${number}${number}`;
11
- /**
12
- * An IO message emitted.
13
- */
14
- export interface IoMessage<T> {
15
- /**
16
- * The time the message was emitted.
17
- */
18
- readonly time: Date;
19
- /**
20
- * The log level of the message.
21
- */
22
- readonly level: IoMessageLevel;
23
- /**
24
- * The action that triggered the message.
25
- */
26
- readonly action: ToolkitAction;
27
- /**
28
- * A short message code uniquely identifying a message type using the format CDK_[CATEGORY]_[E/W/I][0000-9999].
29
- *
30
- * The level indicator follows these rules:
31
- * - 'E' for error level messages
32
- * - 'W' for warning level messages
33
- * - 'I' for info/debug/trace level messages
34
- *
35
- * Codes ending in 000 0 are generic messages, while codes ending in 0001-9999 are specific to a particular message.
36
- * The following are examples of valid and invalid message codes:
37
- * ```ts
38
- * 'CDK_ASSETS_I0000' // valid: generic assets info message
39
- * 'CDK_TOOLKIT_E0002' // valid: specific toolkit error message
40
- * 'CDK_SDK_W0023' // valid: specific sdk warning message
41
- * ```
42
- */
43
- readonly code: IoMessageCode;
44
- /**
45
- * The message text.
46
- * This is safe to print to an end-user.
47
- */
48
- readonly message: string;
49
- /**
50
- * The data attached to the message.
51
- */
52
- readonly data?: T;
53
- }
54
- export interface IoRequest<T, U> extends IoMessage<T> {
55
- /**
56
- * The default response that will be used if no data is returned.
57
- */
58
- readonly defaultResponse: U;
59
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tbWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImlvLW1lc3NhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2xraXRBY3Rpb24gfSBmcm9tICcuLi8uLi90b29sa2l0JztcblxuLyoqXG4gKiBUaGUgcmVwb3J0aW5nIGxldmVsIG9mIHRoZSBtZXNzYWdlLlxuICogQWxsIG1lc3NhZ2VzIGFyZSBhbHdheXMgcmVwb3J0ZWQsIGl0J3MgdXAgdG8gdGhlIElvSG9zdCB0byBkZWNpZGUgd2hhdCB0byBsb2cuXG4gKi9cbmV4cG9ydCB0eXBlIElvTWVzc2FnZUxldmVsID0gJ2Vycm9yJ3wgJ3Jlc3VsdCcgfCAnd2FybicgfCAnaW5mbycgfCAnZGVidWcnIHwgJ3RyYWNlJztcblxuLyoqXG4gKiBBIHZhbGlkIG1lc3NhZ2UgY29kZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay1jbGkvYmxvYi9tYWluL3BhY2thZ2VzLyU0MGF3cy1jZGsvdG9vbGtpdC1saWIvQ09ERV9SRUdJU1RSWS5tZFxuICovXG5leHBvcnQgdHlwZSBJb01lc3NhZ2VDb2RlID0gYENES18ke3N0cmluZ31fJHsnRScgfCAnVycgfCAnSSd9JHtudW1iZXJ9JHtudW1iZXJ9JHtudW1iZXJ9JHtudW1iZXJ9YDtcblxuLyoqXG4gKiBBbiBJTyBtZXNzYWdlIGVtaXR0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW9NZXNzYWdlPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB0aW1lIHRoZSBtZXNzYWdlIHdhcyBlbWl0dGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZTogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIGxvZyBsZXZlbCBvZiB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IGxldmVsOiBJb01lc3NhZ2VMZXZlbDtcblxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbjogVG9vbGtpdEFjdGlvbjtcblxuICAvKipcbiAgICogQSBzaG9ydCBtZXNzYWdlIGNvZGUgdW5pcXVlbHkgaWRlbnRpZnlpbmcgYSBtZXNzYWdlIHR5cGUgdXNpbmcgdGhlIGZvcm1hdCBDREtfW0NBVEVHT1JZXV9bRS9XL0ldWzAwMDAtOTk5OV0uXG4gICAqXG4gICAqIFRoZSBsZXZlbCBpbmRpY2F0b3IgZm9sbG93cyB0aGVzZSBydWxlczpcbiAgICogLSAnRScgZm9yIGVycm9yIGxldmVsIG1lc3NhZ2VzXG4gICAqIC0gJ1cnIGZvciB3YXJuaW5nIGxldmVsIG1lc3NhZ2VzXG4gICAqIC0gJ0knIGZvciBpbmZvL2RlYnVnL3RyYWNlIGxldmVsIG1lc3NhZ2VzXG4gICAqXG4gICAqIENvZGVzIGVuZGluZyBpbiAwMDAgMCBhcmUgZ2VuZXJpYyBtZXNzYWdlcywgd2hpbGUgY29kZXMgZW5kaW5nIGluIDAwMDEtOTk5OSBhcmUgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIG1lc3NhZ2UuXG4gICAqIFRoZSBmb2xsb3dpbmcgYXJlIGV4YW1wbGVzIG9mIHZhbGlkIGFuZCBpbnZhbGlkIG1lc3NhZ2UgY29kZXM6XG4gICAqIGBgYHRzXG4gICAqICdDREtfQVNTRVRTX0kwMDAwJyAgICAgICAvLyB2YWxpZDogZ2VuZXJpYyBhc3NldHMgaW5mbyBtZXNzYWdlXG4gICAqICdDREtfVE9PTEtJVF9FMDAwMicgICAgICAvLyB2YWxpZDogc3BlY2lmaWMgdG9vbGtpdCBlcnJvciBtZXNzYWdlXG4gICAqICdDREtfU0RLX1cwMDIzJyAgICAgICAgICAvLyB2YWxpZDogc3BlY2lmaWMgc2RrIHdhcm5pbmcgbWVzc2FnZVxuICAgKiBgYGBcbiAgICovXG4gIHJlYWRvbmx5IGNvZGU6IElvTWVzc2FnZUNvZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRleHQuXG4gICAqIFRoaXMgaXMgc2FmZSB0byBwcmludCB0byBhbiBlbmQtdXNlci5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRhdGEgYXR0YWNoZWQgdG8gdGhlIG1lc3NhZ2UuXG4gICAqL1xuICByZWFkb25seSBkYXRhPzogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJb1JlcXVlc3Q8VCwgVT4gZXh0ZW5kcyBJb01lc3NhZ2U8VD4ge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcmVzcG9uc2UgdGhhdCB3aWxsIGJlIHVzZWQgaWYgbm8gZGF0YSBpcyByZXR1cm5lZC5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSZXNwb25zZTogVTtcbn1cbiJdfQ==
@@ -1,25 +0,0 @@
1
- import { IIoHost } from '../io-host';
2
- import { IoMessage, IoRequest } from '../io-message';
3
- /**
4
- * Valid reporting categories for messages.
5
- */
6
- export type IoMessageCodeCategory = 'TOOLKIT' | 'SDK' | 'ASSETS' | 'ASSEMBLY';
7
- /**
8
- * Code level matching the reporting level.
9
- */
10
- export type IoCodeLevel = 'E' | 'W' | 'I';
11
- /**
12
- * A message code at a specific level
13
- */
14
- export type IoMessageSpecificCode<L extends IoCodeLevel> = `CDK_${IoMessageCodeCategory}_${L}${number}${number}${number}${number}`;
15
- export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
16
- export type SimplifiedMessage<T> = Pick<IoMessage<T>, 'level' | 'code' | 'message' | 'data'>;
17
- export type ActionLessMessage<T> = Omit<IoMessage<T>, 'action'>;
18
- export type ActionLessRequest<T, U> = Omit<IoRequest<T, U>, 'action'>;
19
- /**
20
- * Helper type for IoHosts that are action aware
21
- */
22
- export interface ActionAwareIoHost extends IIoHost {
23
- notify<T>(msg: ActionLessMessage<T>): Promise<void>;
24
- requestResponse<T, U>(msg: ActionLessRequest<T, U>): Promise<U>;
25
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUlvSG9zdCB9IGZyb20gJy4uL2lvLWhvc3QnO1xuaW1wb3J0IHsgSW9NZXNzYWdlLCBJb1JlcXVlc3QgfSBmcm9tICcuLi9pby1tZXNzYWdlJztcblxuLyoqXG4gKiBWYWxpZCByZXBvcnRpbmcgY2F0ZWdvcmllcyBmb3IgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCB0eXBlIElvTWVzc2FnZUNvZGVDYXRlZ29yeSA9ICdUT09MS0lUJyB8ICdTREsnIHwgJ0FTU0VUUycgfCAnQVNTRU1CTFknO1xuXG4vKipcbiAqIENvZGUgbGV2ZWwgbWF0Y2hpbmcgdGhlIHJlcG9ydGluZyBsZXZlbC5cbiAqL1xuZXhwb3J0IHR5cGUgSW9Db2RlTGV2ZWwgPSAnRScgfCAnVycgfCAnSSc7XG5cbi8qKlxuICogQSBtZXNzYWdlIGNvZGUgYXQgYSBzcGVjaWZpYyBsZXZlbFxuICovXG5leHBvcnQgdHlwZSBJb01lc3NhZ2VTcGVjaWZpY0NvZGU8TCBleHRlbmRzIElvQ29kZUxldmVsPiA9IGBDREtfJHtJb01lc3NhZ2VDb2RlQ2F0ZWdvcnl9XyR7TH0ke251bWJlcn0ke251bWJlcn0ke251bWJlcn0ke251bWJlcn1gO1xuXG5leHBvcnQgdHlwZSBPcHRpb25hbDxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBQaWNrPFBhcnRpYWw8VD4sIEs+ICYgT21pdDxULCBLPjtcbmV4cG9ydCB0eXBlIFNpbXBsaWZpZWRNZXNzYWdlPFQ+ID0gUGljazxJb01lc3NhZ2U8VD4sICdsZXZlbCcgfCAnY29kZScgfCAnbWVzc2FnZScgfCAnZGF0YSc+O1xuZXhwb3J0IHR5cGUgQWN0aW9uTGVzc01lc3NhZ2U8VD4gPSBPbWl0PElvTWVzc2FnZTxUPiwgJ2FjdGlvbic+O1xuZXhwb3J0IHR5cGUgQWN0aW9uTGVzc1JlcXVlc3Q8VCwgVT4gPSBPbWl0PElvUmVxdWVzdDxULCBVPiwgJ2FjdGlvbic+O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciBJb0hvc3RzIHRoYXQgYXJlIGFjdGlvbiBhd2FyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkF3YXJlSW9Ib3N0IGV4dGVuZHMgSUlvSG9zdCB7XG4gIG5vdGlmeTxUPihtc2c6IEFjdGlvbkxlc3NNZXNzYWdlPFQ+KTogUHJvbWlzZTx2b2lkPjtcbiAgcmVxdWVzdFJlc3BvbnNlPFQsIFU+KG1zZzogQWN0aW9uTGVzc1JlcXVlc3Q8VCwgVT4pOiBQcm9taXNlPFU+O1xufVxuIl19