@coralogix/rum-cli 1.1.2 → 1.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 (40) hide show
  1. package/README.md +24 -7
  2. package/api/rum-api.ts +3 -3
  3. package/dist/api/rum-api.d.ts +1 -1
  4. package/dist/api/rum-api.js +2 -2
  5. package/dist/proto-models/com/coralogix/rum/v2/audit_log.js +62 -0
  6. package/dist/proto-models/com/coralogix/rum/v2/chunk.js +330 -0
  7. package/dist/proto-models/com/coralogix/rum/v2/file.js +140 -0
  8. package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +233 -0
  9. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +181 -0
  10. package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +277 -0
  11. package/dist/proto-models/google/protobuf/descriptor.js +3612 -0
  12. package/dist/services/source-maps/source-maps.service.js +2 -2
  13. package/dist/services/source-maps/utils/traverse-folder.util.d.ts +1 -1
  14. package/dist/services/source-maps/utils/traverse-folder.util.js +1 -1
  15. package/generate-protos.sh +3 -3
  16. package/package.json +2 -2
  17. package/protoset.bin +0 -0
  18. package/services/source-maps/source-maps.service.ts +1 -1
  19. package/services/source-maps/utils/traverse-folder.util.ts +2 -2
  20. package/dist/src/app/proto-models/com/coralogix/rum/v2/audit_log.js +0 -62
  21. package/dist/src/app/proto-models/com/coralogix/rum/v2/chunk.js +0 -330
  22. package/dist/src/app/proto-models/com/coralogix/rum/v2/file.js +0 -140
  23. package/dist/src/app/proto-models/com/coralogix/rum/v2/rum_service.js +0 -233
  24. package/dist/src/app/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +0 -181
  25. package/dist/src/app/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +0 -277
  26. package/dist/src/app/proto-models/google/protobuf/descriptor.js +0 -3612
  27. /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/audit_log.d.ts +0 -0
  28. /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/chunk.d.ts +0 -0
  29. /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/file.d.ts +0 -0
  30. /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_service.d.ts +0 -0
  31. /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_source_map_service.d.ts +0 -0
  32. /package/dist/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/source_code_file_mapping.d.ts +0 -0
  33. /package/dist/{src/app/proto-models → proto-models}/google/protobuf/descriptor.d.ts +0 -0
  34. /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/audit_log.ts +0 -0
  35. /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/chunk.ts +0 -0
  36. /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/file.ts +0 -0
  37. /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_service.ts +0 -0
  38. /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/rum_source_map_service.ts +0 -0
  39. /package/{src/app/proto-models → proto-models}/com/coralogix/rum/v2/source_code_file_mapping.ts +0 -0
  40. /package/{src/app/proto-models → proto-models}/google/protobuf/descriptor.ts +0 -0
package/README.md CHANGED
@@ -6,8 +6,9 @@ The Coralogix RUM CLI is a command-line interface tool that simplifies the proce
6
6
 
7
7
  ## Links
8
8
 
9
- - [Coralogix Real User Monitoring](https://coralogix.com/docs/real-user-monitoring/)
9
+ - [Coralogix Real User Monitoring Docs](https://coralogix.com/docs/real-user-monitoring/)
10
10
 
11
+ - [Coralogix SDK for Browsers](https://www.npmjs.com/package/@coralogix/browser)
11
12
  ## Installation
12
13
 
13
14
  To install the Coralogix RUM CLI, follow these steps:
@@ -22,7 +23,7 @@ Here are some examples of how to use the Coralogix RUM CLI:
22
23
 
23
24
  1. Upload source maps:
24
25
 
25
- - `coralogix-rum-cli upload-source-maps -k <privateKey> -a <application> -r <releaseId> -f <folderPath> -e <env> -c <commitHash> -n <repoName> -u <user>`
26
+ - `coralogix-rum-cli upload-source-maps -k <privateKey> -a <application> -r <releaseId> -f <folderPath> -e <env> -c <commitHash> -n <repoName> -o <orgName>`
26
27
 
27
28
  2. Display help:
28
29
 
@@ -48,6 +49,8 @@ To use the CLI, execute the following command:
48
49
 
49
50
  To simplify the process of uploading source maps using the Coralogix RUM CLI, you can create a bash script that automates the task. Follow these steps to set up the script:
50
51
 
52
+ ## For CI Integration:
53
+
51
54
  1. Create a new file named `upload-source-maps.sh` and open it for editing.
52
55
 
53
56
  2. Copy and paste the following script into the file, replacing the placeholder values with your actual information:
@@ -62,22 +65,36 @@ APPLICATION="your-application-name"
62
65
  ENV="your-environment"
63
66
  SOURCE_MAPS_PATH="your-source-maps-path"
64
67
  PRIVATE_KEY="your-coralogix-private-key"
68
+ RELEASE_ID="your-release-id"
65
69
 
66
70
  # Get the commit hash using git rev-parse
67
71
  COMMIT_HASH=$(git rev-parse HEAD)
68
72
 
69
- # Calculate short hash for release name
70
- RELEASE_NAME=${COMMIT_HASH:0:8}
71
-
72
73
  # Run Coralogix RUM CLI to upload source maps
73
74
  coralogix-rum-cli upload-source-maps -k "$PRIVATE_KEY" -a "$APPLICATION" -r "$RELEASE_NAME" -f "$SOURCE_MAPS_PATH" -e "$ENV" -c "$COMMIT_HASH" -n "$REPO_NAME" -o "$ORG_NAME"
74
75
  ```
75
76
 
76
- If any of the required arguments are missing, the CLI will display an error message and exit.
77
+ | IMPORTANT: The $RELEASE_ID must align with the content of the version field in your CoralogixRum.init() configuration in [Coralogix SDK for Browsers](https://www.npmjs.com/package/@coralogix/browser) |
78
+ | --- |
79
+
80
+ ## For Non-CI Integration:
81
+ 1. Create a new file named upload-source-maps.sh and open it for editing.
82
+
83
+ 2. Copy and paste the script provided above, and replace the placeholder values with your actual information.
77
84
 
85
+ 3. Open a terminal window, navigate to the directory containing the upload-source-maps.sh script, and execute the script using the command:
86
+
87
+ If any of the required arguments are missing, the CLI will display an error message and exit.
78
88
 
79
89
  Please ensure you provide valid values for the options when using the CLI.
80
90
 
91
+ By following these instructions, you can effortlessly upload source maps using the Coralogix RUM CLI script in both CI and non-CI environments.
92
+
93
+ # Illustration
94
+ Here's an overview of the process, showing the parsed stacktrace in the source map:
95
+
96
+ ![Screen Shot 2023-08-22 at 13.23.31.png](..%2FScreen%20Shot%202023-08-22%20at%2013.23.31.png)
97
+
81
98
  # Available Environments
82
99
 
83
100
  The Coralogix RUM CLI supports the following environments:
@@ -101,7 +118,7 @@ The following options are optional and relate to GitHub information, providing c
101
118
 
102
119
 
103
120
  - `-o, --org-name <orgName>`: This option enables you to input your GitHub organization user, helping to attribute the source maps to the appropriate organization user.
104
- Providing these GitHub-related options can enhance the accuracy of source map management and issue tracking within Coralogix RUM. However, they are not mandatory and can be omitted if not applicable.
121
+ Providing these GitHub-related options can enhance the accuracy of source map management and issue tracking within Coralogix RUM. However, they are not mandatory and can be omitted if not applicable.
105
122
 
106
123
  ## License
107
124
 
package/api/rum-api.ts CHANGED
@@ -2,12 +2,12 @@ import {Client, createChannel, createClient, Metadata} from 'nice-grpc';
2
2
  import {envToDomain} from "../model/cli.model";
3
3
  import * as pako from 'pako';
4
4
  import config from "../config/config";
5
- import {FileMetadata} from "../src/app/proto-models/com/coralogix/rum/v2/file";
5
+ import {RED_COLOR} from "../cli/theme";
6
+ import {FileMetadata} from "../proto-models/com/coralogix/rum/v2/file";
6
7
  import {
7
8
  RumSourceMapServiceDefinition,
8
9
  UploadSourceMapsRequest
9
- } from "../src/app/proto-models/com/coralogix/rum/v2/rum_source_map_service";
10
- import {RED_COLOR} from "../cli/theme";
10
+ } from "../proto-models/com/coralogix/rum/v2/rum_source_map_service";
11
11
 
12
12
  export class RumApi {
13
13
  static async uploadSourceMaps(request: UploadSourceMapsRequest, env: string, privateKey: string) {
@@ -1,4 +1,4 @@
1
- import { UploadSourceMapsRequest } from "../src/app/proto-models/com/coralogix/rum/v2/rum_source_map_service";
1
+ import { UploadSourceMapsRequest } from "../proto-models/com/coralogix/rum/v2/rum_source_map_service";
2
2
  export declare class RumApi {
3
3
  static uploadSourceMaps(request: UploadSourceMapsRequest, env: string, privateKey: string): Promise<void>;
4
4
  private static compressFileContentChunks;
@@ -40,8 +40,8 @@ const nice_grpc_1 = require("nice-grpc");
40
40
  const cli_model_1 = require("../model/cli.model");
41
41
  const pako = __importStar(require("pako"));
42
42
  const config_1 = __importDefault(require("../config/config"));
43
- const rum_source_map_service_1 = require("../src/app/proto-models/com/coralogix/rum/v2/rum_source_map_service");
44
43
  const theme_1 = require("../cli/theme");
44
+ const rum_source_map_service_1 = require("../proto-models/com/coralogix/rum/v2/rum_source_map_service");
45
45
  class RumApi {
46
46
  static uploadSourceMaps(request, env, privateKey) {
47
47
  return __awaiter(this, void 0, void 0, function* () {
@@ -95,4 +95,4 @@ RumApi.compressFileContentChunks = (fileContent) => {
95
95
  console.error(theme_1.RED_COLOR, msg);
96
96
  return result;
97
97
  };
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVtLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FwaS9ydW0tYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXdFO0FBQ3hFLGtEQUErQztBQUMvQywyQ0FBNkI7QUFDN0IsOERBQXNDO0FBRXRDLGdIQUc2RTtBQUM3RSx3Q0FBdUM7QUFFdkMsTUFBYSxNQUFNO0lBQ2YsTUFBTSxDQUFPLGdCQUFnQixDQUFDLE9BQWdDLEVBQUUsR0FBVyxFQUFFLFVBQWtCOztZQUUzRixNQUFNLEVBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBQyxHQUFHLGdCQUFNLENBQUMsTUFBTSxDQUFDO1lBRTVFLElBQUk7Z0JBQ0EsTUFBTSxPQUFPLEdBQUcsSUFBQSx5QkFBYSxFQUFDLHVCQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFO29CQUN2RCxpQ0FBaUMsRUFBRSxjQUFjO29CQUNqRCw4QkFBOEIsRUFBRSxjQUFjO29CQUM5Qyx3QkFBd0IsRUFBRSxlQUFlO29CQUN6QywyQkFBMkIsRUFBRSxrQkFBa0I7aUJBQ2xELENBQUMsQ0FBQztnQkFFSCxNQUFNLE1BQU0sR0FBaUQsSUFBQSx3QkFBWSxFQUFDLHNEQUE2QixFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUVsSCxNQUFNLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsR0FBRyxPQUFPLENBQUM7Z0JBRTVFLE1BQU0sZUFBZSxHQUFtQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3JELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBTyxJQUFrQixFQUFFLEVBQUU7b0JBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFFdEUsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO29CQUVyQyxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBQyxDQUFDO2dCQUN4RSxDQUFDLENBQUEsQ0FBQyxDQUNMLENBQUM7Z0JBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQkFBUSxFQUFFLENBQUM7Z0JBRWhDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQzFCLEtBQUssRUFBRSxlQUFlO29CQUN0QixTQUFTO29CQUNULFdBQVc7b0JBQ1gsUUFBUTtvQkFDUixVQUFVO29CQUNWLElBQUk7aUJBQ1AsRUFBRSxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7YUFFbEI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDWixNQUFNLEtBQUssQ0FBQzthQUNmO1FBQ0wsQ0FBQztLQUFBO0lBQUEsQ0FBQzs7QUEzQ04sd0JBa0VDO0FBckJrQixnQ0FBeUIsR0FBRyxDQUFDLFdBQXVCLEVBQWMsRUFBRTtJQUMvRSxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0I7SUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRTlELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRTFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsTUFBTSxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFDLEdBQUcsT0FBTyxDQUFDO0lBRW5DLElBQUksR0FBRztRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUV2QyxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsaWVudCwgY3JlYXRlQ2hhbm5lbCwgY3JlYXRlQ2xpZW50LCBNZXRhZGF0YX0gZnJvbSAnbmljZS1ncnBjJztcbmltcG9ydCB7ZW52VG9Eb21haW59IGZyb20gXCIuLi9tb2RlbC9jbGkubW9kZWxcIjtcbmltcG9ydCAqIGFzIHBha28gZnJvbSAncGFrbyc7XG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi9jb25maWcvY29uZmlnXCI7XG5pbXBvcnQge0ZpbGVNZXRhZGF0YX0gZnJvbSBcIi4uL3NyYy9hcHAvcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL2ZpbGVcIjtcbmltcG9ydCB7XG4gICAgUnVtU291cmNlTWFwU2VydmljZURlZmluaXRpb24sXG4gICAgVXBsb2FkU291cmNlTWFwc1JlcXVlc3Rcbn0gZnJvbSBcIi4uL3NyYy9hcHAvcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL3J1bV9zb3VyY2VfbWFwX3NlcnZpY2VcIjtcbmltcG9ydCB7UkVEX0NPTE9SfSBmcm9tIFwiLi4vY2xpL3RoZW1lXCI7XG5cbmV4cG9ydCBjbGFzcyBSdW1BcGkge1xuICAgIHN0YXRpYyBhc3luYyB1cGxvYWRTb3VyY2VNYXBzKHJlcXVlc3Q6IFVwbG9hZFNvdXJjZU1hcHNSZXF1ZXN0LCBlbnY6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nKSB7XG5cbiAgICAgICAgY29uc3Qge21heE1lc3NhZ2VTaXplLCBrZWVwYWxpdmVUaW1lTXMsIGtlZXBhbGl2ZVRpbWVvdXRNc30gPSBjb25maWcucnVtQXBpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjaGFubmVsID0gY3JlYXRlQ2hhbm5lbChlbnZUb0RvbWFpbltlbnZdLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICBcImdycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGhcIjogbWF4TWVzc2FnZVNpemUsXG4gICAgICAgICAgICAgICAgXCJncnBjLm1heF9zZW5kX21lc3NhZ2VfbGVuZ3RoXCI6IG1heE1lc3NhZ2VTaXplLFxuICAgICAgICAgICAgICAgICdncnBjLmtlZXBhbGl2ZV90aW1lX21zJzoga2VlcGFsaXZlVGltZU1zLFxuICAgICAgICAgICAgICAgICdncnBjLmtlZXBhbGl2ZV90aW1lb3V0X21zJzoga2VlcGFsaXZlVGltZW91dE1zLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNsaWVudDogQ2xpZW50PHR5cGVvZiBSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbj4gPSBjcmVhdGVDbGllbnQoUnVtU291cmNlTWFwU2VydmljZURlZmluaXRpb24sIGNoYW5uZWwpO1xuXG4gICAgICAgICAgICBjb25zdCB7ZmlsZXMsIHJlbGVhc2VJZCwgYXBwbGljYXRpb24sIHJlcG9OYW1lLCBjb21taXRIYXNoLCB1c2VyfSA9IHJlcXVlc3Q7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbXByZXNzZWRGaWxlczogRmlsZU1ldGFkYXRhW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBmaWxlcy5tYXAoYXN5bmMgKGZpbGU6IEZpbGVNZXRhZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wcmVzc2VkQ2h1bmtzID0gdGhpcy5jb21wcmVzc0ZpbGVDb250ZW50Q2h1bmtzKGZpbGUuY29udGVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IGNvbXByZXNzZWRDaHVua3MubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y2h1bmtOYW1lOiBmaWxlLmNodW5rTmFtZSwgc2l6ZSwgY29udGVudDogY29tcHJlc3NlZENodW5rc307XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICAgICAgICAgIG1ldGFkYXRhLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHtwcml2YXRlS2V5fWApO1xuXG4gICAgICAgICAgICBhd2FpdCBjbGllbnQudXBsb2FkU291cmNlTWFwcyh7XG4gICAgICAgICAgICAgICAgZmlsZXM6IGNvbXByZXNzZWRGaWxlcyxcbiAgICAgICAgICAgICAgICByZWxlYXNlSWQsXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb24sXG4gICAgICAgICAgICAgICAgcmVwb05hbWUsXG4gICAgICAgICAgICAgICAgY29tbWl0SGFzaCxcbiAgICAgICAgICAgICAgICB1c2VyXG4gICAgICAgICAgICB9LCB7bWV0YWRhdGF9KTtcblxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY29tcHJlc3NGaWxlQ29udGVudENodW5rcyA9IChmaWxlQ29udGVudDogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgICAgICBjb25zdCB7Y2h1bmtTaXplfSA9IGNvbmZpZy5ydW1BcGk7IC8vIDUxMiBLQiBjaHVuayBzaXplXG4gICAgICAgIGNvbnN0IGRlZmxhdGUgPSBuZXcgcGFrby5EZWZsYXRlKCk7XG4gICAgICAgIGNvbnN0IHRvdGFsQ2h1bmtzID0gTWF0aC5jZWlsKGZpbGVDb250ZW50Lmxlbmd0aCAvIGNodW5rU2l6ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbENodW5rczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IGkgKiBjaHVua1NpemU7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIGNodW5rU2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGNodW5rID0gZmlsZUNvbnRlbnQuc3ViYXJyYXkoc3RhcnQsIGVuZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTGFzdENodW5rID0gaSA9PT0gdG90YWxDaHVua3MgLSAxO1xuXG4gICAgICAgICAgICBkZWZsYXRlLnB1c2goY2h1bmssIGlzTGFzdENodW5rKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtlcnIsIG1zZywgcmVzdWx0fSA9IGRlZmxhdGU7XG5cbiAgICAgICAgaWYgKGVycikgY29uc29sZS5lcnJvcihSRURfQ09MT1IsIG1zZyk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbiJdfQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVtLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FwaS9ydW0tYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXdFO0FBQ3hFLGtEQUErQztBQUMvQywyQ0FBNkI7QUFDN0IsOERBQXNDO0FBQ3RDLHdDQUF1QztBQUV2Qyx3R0FHcUU7QUFFckUsTUFBYSxNQUFNO0lBQ2YsTUFBTSxDQUFPLGdCQUFnQixDQUFDLE9BQWdDLEVBQUUsR0FBVyxFQUFFLFVBQWtCOztZQUUzRixNQUFNLEVBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBQyxHQUFHLGdCQUFNLENBQUMsTUFBTSxDQUFDO1lBRTVFLElBQUk7Z0JBQ0EsTUFBTSxPQUFPLEdBQUcsSUFBQSx5QkFBYSxFQUFDLHVCQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFO29CQUN2RCxpQ0FBaUMsRUFBRSxjQUFjO29CQUNqRCw4QkFBOEIsRUFBRSxjQUFjO29CQUM5Qyx3QkFBd0IsRUFBRSxlQUFlO29CQUN6QywyQkFBMkIsRUFBRSxrQkFBa0I7aUJBQ2xELENBQUMsQ0FBQztnQkFFSCxNQUFNLE1BQU0sR0FBaUQsSUFBQSx3QkFBWSxFQUFDLHNEQUE2QixFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUVsSCxNQUFNLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsR0FBRyxPQUFPLENBQUM7Z0JBRTVFLE1BQU0sZUFBZSxHQUFtQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3JELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBTyxJQUFrQixFQUFFLEVBQUU7b0JBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFFdEUsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO29CQUVyQyxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBQyxDQUFDO2dCQUN4RSxDQUFDLENBQUEsQ0FBQyxDQUNMLENBQUM7Z0JBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQkFBUSxFQUFFLENBQUM7Z0JBRWhDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQzFCLEtBQUssRUFBRSxlQUFlO29CQUN0QixTQUFTO29CQUNULFdBQVc7b0JBQ1gsUUFBUTtvQkFDUixVQUFVO29CQUNWLElBQUk7aUJBQ1AsRUFBRSxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7YUFFbEI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDWixNQUFNLEtBQUssQ0FBQzthQUNmO1FBQ0wsQ0FBQztLQUFBO0lBQUEsQ0FBQzs7QUEzQ04sd0JBa0VDO0FBckJrQixnQ0FBeUIsR0FBRyxDQUFDLFdBQXVCLEVBQWMsRUFBRTtJQUMvRSxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxvQkFBb0I7SUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRTlELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRTFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsTUFBTSxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFDLEdBQUcsT0FBTyxDQUFDO0lBRW5DLElBQUksR0FBRztRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUV2QyxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsaWVudCwgY3JlYXRlQ2hhbm5lbCwgY3JlYXRlQ2xpZW50LCBNZXRhZGF0YX0gZnJvbSAnbmljZS1ncnBjJztcbmltcG9ydCB7ZW52VG9Eb21haW59IGZyb20gXCIuLi9tb2RlbC9jbGkubW9kZWxcIjtcbmltcG9ydCAqIGFzIHBha28gZnJvbSAncGFrbyc7XG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi9jb25maWcvY29uZmlnXCI7XG5pbXBvcnQge1JFRF9DT0xPUn0gZnJvbSBcIi4uL2NsaS90aGVtZVwiO1xuaW1wb3J0IHtGaWxlTWV0YWRhdGF9IGZyb20gXCIuLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvZmlsZVwiO1xuaW1wb3J0IHtcbiAgICBSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbixcbiAgICBVcGxvYWRTb3VyY2VNYXBzUmVxdWVzdFxufSBmcm9tIFwiLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL3J1bV9zb3VyY2VfbWFwX3NlcnZpY2VcIjtcblxuZXhwb3J0IGNsYXNzIFJ1bUFwaSB7XG4gICAgc3RhdGljIGFzeW5jIHVwbG9hZFNvdXJjZU1hcHMocmVxdWVzdDogVXBsb2FkU291cmNlTWFwc1JlcXVlc3QsIGVudjogc3RyaW5nLCBwcml2YXRlS2V5OiBzdHJpbmcpIHtcblxuICAgICAgICBjb25zdCB7bWF4TWVzc2FnZVNpemUsIGtlZXBhbGl2ZVRpbWVNcywga2VlcGFsaXZlVGltZW91dE1zfSA9IGNvbmZpZy5ydW1BcGk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSBjcmVhdGVDaGFubmVsKGVudlRvRG9tYWluW2Vudl0sIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgIFwiZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aFwiOiBtYXhNZXNzYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBcImdycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGhcIjogbWF4TWVzc2FnZVNpemUsXG4gICAgICAgICAgICAgICAgJ2dycGMua2VlcGFsaXZlX3RpbWVfbXMnOiBrZWVwYWxpdmVUaW1lTXMsXG4gICAgICAgICAgICAgICAgJ2dycGMua2VlcGFsaXZlX3RpbWVvdXRfbXMnOiBrZWVwYWxpdmVUaW1lb3V0TXMsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY2xpZW50OiBDbGllbnQ8dHlwZW9mIFJ1bVNvdXJjZU1hcFNlcnZpY2VEZWZpbml0aW9uPiA9IGNyZWF0ZUNsaWVudChSdW1Tb3VyY2VNYXBTZXJ2aWNlRGVmaW5pdGlvbiwgY2hhbm5lbCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHtmaWxlcywgcmVsZWFzZUlkLCBhcHBsaWNhdGlvbiwgcmVwb05hbWUsIGNvbW1pdEhhc2gsIHVzZXJ9ID0gcmVxdWVzdDtcblxuICAgICAgICAgICAgY29uc3QgY29tcHJlc3NlZEZpbGVzOiBGaWxlTWV0YWRhdGFbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIGZpbGVzLm1hcChhc3luYyAoZmlsZTogRmlsZU1ldGFkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXByZXNzZWRDaHVua3MgPSB0aGlzLmNvbXByZXNzRmlsZUNvbnRlbnRDaHVua3MoZmlsZS5jb250ZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplID0gY29tcHJlc3NlZENodW5rcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjaHVua05hbWU6IGZpbGUuY2h1bmtOYW1lLCBzaXplLCBjb250ZW50OiBjb21wcmVzc2VkQ2h1bmtzfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcblxuICAgICAgICAgICAgbWV0YWRhdGEuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3ByaXZhdGVLZXl9YCk7XG5cbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC51cGxvYWRTb3VyY2VNYXBzKHtcbiAgICAgICAgICAgICAgICBmaWxlczogY29tcHJlc3NlZEZpbGVzLFxuICAgICAgICAgICAgICAgIHJlbGVhc2VJZCxcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbixcbiAgICAgICAgICAgICAgICByZXBvTmFtZSxcbiAgICAgICAgICAgICAgICBjb21taXRIYXNoLFxuICAgICAgICAgICAgICAgIHVzZXJcbiAgICAgICAgICAgIH0sIHttZXRhZGF0YX0pO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb21wcmVzc0ZpbGVDb250ZW50Q2h1bmtzID0gKGZpbGVDb250ZW50OiBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gICAgICAgIGNvbnN0IHtjaHVua1NpemV9ID0gY29uZmlnLnJ1bUFwaTsgLy8gNTEyIEtCIGNodW5rIHNpemVcbiAgICAgICAgY29uc3QgZGVmbGF0ZSA9IG5ldyBwYWtvLkRlZmxhdGUoKTtcbiAgICAgICAgY29uc3QgdG90YWxDaHVua3MgPSBNYXRoLmNlaWwoZmlsZUNvbnRlbnQubGVuZ3RoIC8gY2h1bmtTaXplKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gaSAqIGNodW5rU2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgY2h1bmtTaXplO1xuICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBmaWxlQ29udGVudC5zdWJhcnJheShzdGFydCwgZW5kKTtcblxuICAgICAgICAgICAgY29uc3QgaXNMYXN0Q2h1bmsgPSBpID09PSB0b3RhbENodW5rcyAtIDE7XG5cbiAgICAgICAgICAgIGRlZmxhdGUucHVzaChjaHVuaywgaXNMYXN0Q2h1bmspO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge2VyciwgbXNnLCByZXN1bHR9ID0gZGVmbGF0ZTtcblxuICAgICAgICBpZiAoZXJyKSBjb25zb2xlLmVycm9yKFJFRF9DT0xPUiwgbXNnKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuIl19
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AuditLogDescription = exports.protobufPackage = void 0;
7
+ /* eslint-disable */
8
+ const minimal_1 = __importDefault(require("protobufjs/minimal"));
9
+ exports.protobufPackage = "com.coralogix.rum.v2";
10
+ function createBaseAuditLogDescription() {
11
+ return { description: undefined };
12
+ }
13
+ exports.AuditLogDescription = {
14
+ encode(message, writer = minimal_1.default.Writer.create()) {
15
+ if (message.description !== undefined) {
16
+ writer.uint32(10).string(message.description);
17
+ }
18
+ return writer;
19
+ },
20
+ decode(input, length) {
21
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
22
+ let end = length === undefined ? reader.len : reader.pos + length;
23
+ const message = createBaseAuditLogDescription();
24
+ while (reader.pos < end) {
25
+ const tag = reader.uint32();
26
+ switch (tag >>> 3) {
27
+ case 1:
28
+ if (tag !== 10) {
29
+ break;
30
+ }
31
+ message.description = reader.string();
32
+ continue;
33
+ }
34
+ if ((tag & 7) === 4 || tag === 0) {
35
+ break;
36
+ }
37
+ reader.skipType(tag & 7);
38
+ }
39
+ return message;
40
+ },
41
+ fromJSON(object) {
42
+ return { description: isSet(object.description) ? String(object.description) : undefined };
43
+ },
44
+ toJSON(message) {
45
+ const obj = {};
46
+ message.description !== undefined && (obj.description = message.description);
47
+ return obj;
48
+ },
49
+ create(base) {
50
+ return exports.AuditLogDescription.fromPartial(base !== null && base !== void 0 ? base : {});
51
+ },
52
+ fromPartial(object) {
53
+ var _a;
54
+ const message = createBaseAuditLogDescription();
55
+ message.description = (_a = object.description) !== null && _a !== void 0 ? _a : undefined;
56
+ return message;
57
+ },
58
+ };
59
+ function isSet(value) {
60
+ return value !== null && value !== undefined;
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXRfbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL2F1ZGl0X2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvQkFBb0I7QUFDcEIsaUVBQXFDO0FBRXhCLFFBQUEsZUFBZSxHQUFHLHNCQUFzQixDQUFDO0FBTXRELFNBQVMsNkJBQTZCO0lBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDcEMsQ0FBQztBQUVZLFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsTUFBTSxDQUFDLE9BQTRCLEVBQUUsU0FBcUIsaUJBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQzNFLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUE4QixFQUFFLE1BQWU7UUFDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLGlCQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RSxJQUFJLEdBQUcsR0FBRyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyw2QkFBNkIsRUFBRSxDQUFDO1FBQ2hELE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUU7WUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDakIsS0FBSyxDQUFDO29CQUNKLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRTt3QkFDZCxNQUFNO3FCQUNQO29CQUVELE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN0QyxTQUFTO2FBQ1o7WUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUNoQyxNQUFNO2FBQ1A7WUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBVztRQUNsQixPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzdGLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBNEI7UUFDakMsTUFBTSxHQUFHLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0UsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQXVDO1FBQzVDLE9BQU8sMkJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksYUFBSixJQUFJLGNBQUosSUFBSSxHQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxXQUFXLENBQUMsTUFBd0M7O1FBQ2xELE1BQU0sT0FBTyxHQUFHLDZCQUE2QixFQUFFLENBQUM7UUFDaEQsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFBLE1BQU0sQ0FBQyxXQUFXLG1DQUFJLFNBQVMsQ0FBQztRQUN0RCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YsQ0FBQztBQVVGLFNBQVMsS0FBSyxDQUFDLEtBQVU7SUFDdkIsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gXCJwcm90b2J1ZmpzL21pbmltYWxcIjtcblxuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9IFwiY29tLmNvcmFsb2dpeC5ydW0udjJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0Rlc2NyaXB0aW9uIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VBdWRpdExvZ0Rlc2NyaXB0aW9uKCk6IEF1ZGl0TG9nRGVzY3JpcHRpb24ge1xuICByZXR1cm4geyBkZXNjcmlwdGlvbjogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBBdWRpdExvZ0Rlc2NyaXB0aW9uID0ge1xuICBlbmNvZGUobWVzc2FnZTogQXVkaXRMb2dEZXNjcmlwdGlvbiwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmRlc2NyaXB0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBBdWRpdExvZ0Rlc2NyaXB0aW9uIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUF1ZGl0TG9nRGVzY3JpcHRpb24oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlc2NyaXB0aW9uID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogQXVkaXRMb2dEZXNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHsgZGVzY3JpcHRpb246IGlzU2V0KG9iamVjdC5kZXNjcmlwdGlvbikgPyBTdHJpbmcob2JqZWN0LmRlc2NyaXB0aW9uKSA6IHVuZGVmaW5lZCB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBBdWRpdExvZ0Rlc2NyaXB0aW9uKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgKG9iai5kZXNjcmlwdGlvbiA9IG1lc3NhZ2UuZGVzY3JpcHRpb24pO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxBdWRpdExvZ0Rlc2NyaXB0aW9uPik6IEF1ZGl0TG9nRGVzY3JpcHRpb24ge1xuICAgIHJldHVybiBBdWRpdExvZ0Rlc2NyaXB0aW9uLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8QXVkaXRMb2dEZXNjcmlwdGlvbj4pOiBBdWRpdExvZ0Rlc2NyaXB0aW9uIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUF1ZGl0TG9nRGVzY3JpcHRpb24oKTtcbiAgICBtZXNzYWdlLmRlc2NyaXB0aW9uID0gb2JqZWN0LmRlc2NyaXB0aW9uID8/IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbnR5cGUgQnVpbHRpbiA9IERhdGUgfCBGdW5jdGlvbiB8IFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluID8gVFxuICA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IEFycmF5PERlZXBQYXJ0aWFsPFU+PiA6IFQgZXh0ZW5kcyBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gUmVhZG9ubHlBcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgeyAkY2FzZTogc3RyaW5nIH0gPyB7IFtLIGluIGtleW9mIE9taXQ8VCwgXCIkY2FzZVwiPl0/OiBEZWVwUGFydGlhbDxUW0tdPiB9ICYgeyAkY2FzZTogVFtcIiRjYXNlXCJdIH1cbiAgOiBUIGV4dGVuZHMge30gPyB7IFtLIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtLXT4gfVxuICA6IFBhcnRpYWw8VD47XG5cbmZ1bmN0aW9uIGlzU2V0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -0,0 +1,330 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MappedChunk = exports.CodeLine = exports.Chunk = exports.protobufPackage = void 0;
7
+ /* eslint-disable */
8
+ const long_1 = __importDefault(require("long"));
9
+ const minimal_1 = __importDefault(require("protobufjs/minimal"));
10
+ exports.protobufPackage = "com.coralogix.rum.v2";
11
+ function createBaseChunk() {
12
+ return { chunkName: "", generatedLineNumber: 0, generatedColumnNumber: 0 };
13
+ }
14
+ exports.Chunk = {
15
+ encode(message, writer = minimal_1.default.Writer.create()) {
16
+ if (message.chunkName !== "") {
17
+ writer.uint32(10).string(message.chunkName);
18
+ }
19
+ if (message.generatedLineNumber !== 0) {
20
+ writer.uint32(16).int64(message.generatedLineNumber);
21
+ }
22
+ if (message.generatedColumnNumber !== 0) {
23
+ writer.uint32(24).int64(message.generatedColumnNumber);
24
+ }
25
+ return writer;
26
+ },
27
+ decode(input, length) {
28
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
29
+ let end = length === undefined ? reader.len : reader.pos + length;
30
+ const message = createBaseChunk();
31
+ while (reader.pos < end) {
32
+ const tag = reader.uint32();
33
+ switch (tag >>> 3) {
34
+ case 1:
35
+ if (tag !== 10) {
36
+ break;
37
+ }
38
+ message.chunkName = reader.string();
39
+ continue;
40
+ case 2:
41
+ if (tag !== 16) {
42
+ break;
43
+ }
44
+ message.generatedLineNumber = longToNumber(reader.int64());
45
+ continue;
46
+ case 3:
47
+ if (tag !== 24) {
48
+ break;
49
+ }
50
+ message.generatedColumnNumber = longToNumber(reader.int64());
51
+ continue;
52
+ }
53
+ if ((tag & 7) === 4 || tag === 0) {
54
+ break;
55
+ }
56
+ reader.skipType(tag & 7);
57
+ }
58
+ return message;
59
+ },
60
+ fromJSON(object) {
61
+ return {
62
+ chunkName: isSet(object.chunkName) ? String(object.chunkName) : "",
63
+ generatedLineNumber: isSet(object.generatedLineNumber) ? Number(object.generatedLineNumber) : 0,
64
+ generatedColumnNumber: isSet(object.generatedColumnNumber) ? Number(object.generatedColumnNumber) : 0,
65
+ };
66
+ },
67
+ toJSON(message) {
68
+ const obj = {};
69
+ message.chunkName !== undefined && (obj.chunkName = message.chunkName);
70
+ message.generatedLineNumber !== undefined && (obj.generatedLineNumber = Math.round(message.generatedLineNumber));
71
+ message.generatedColumnNumber !== undefined &&
72
+ (obj.generatedColumnNumber = Math.round(message.generatedColumnNumber));
73
+ return obj;
74
+ },
75
+ create(base) {
76
+ return exports.Chunk.fromPartial(base !== null && base !== void 0 ? base : {});
77
+ },
78
+ fromPartial(object) {
79
+ var _a, _b, _c;
80
+ const message = createBaseChunk();
81
+ message.chunkName = (_a = object.chunkName) !== null && _a !== void 0 ? _a : "";
82
+ message.generatedLineNumber = (_b = object.generatedLineNumber) !== null && _b !== void 0 ? _b : 0;
83
+ message.generatedColumnNumber = (_c = object.generatedColumnNumber) !== null && _c !== void 0 ? _c : 0;
84
+ return message;
85
+ },
86
+ };
87
+ function createBaseCodeLine() {
88
+ return { lineIndex: 0, lineCode: "" };
89
+ }
90
+ exports.CodeLine = {
91
+ encode(message, writer = minimal_1.default.Writer.create()) {
92
+ if (message.lineIndex !== 0) {
93
+ writer.uint32(16).int64(message.lineIndex);
94
+ }
95
+ if (message.lineCode !== "") {
96
+ writer.uint32(10).string(message.lineCode);
97
+ }
98
+ return writer;
99
+ },
100
+ decode(input, length) {
101
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
102
+ let end = length === undefined ? reader.len : reader.pos + length;
103
+ const message = createBaseCodeLine();
104
+ while (reader.pos < end) {
105
+ const tag = reader.uint32();
106
+ switch (tag >>> 3) {
107
+ case 2:
108
+ if (tag !== 16) {
109
+ break;
110
+ }
111
+ message.lineIndex = longToNumber(reader.int64());
112
+ continue;
113
+ case 1:
114
+ if (tag !== 10) {
115
+ break;
116
+ }
117
+ message.lineCode = reader.string();
118
+ continue;
119
+ }
120
+ if ((tag & 7) === 4 || tag === 0) {
121
+ break;
122
+ }
123
+ reader.skipType(tag & 7);
124
+ }
125
+ return message;
126
+ },
127
+ fromJSON(object) {
128
+ return {
129
+ lineIndex: isSet(object.lineIndex) ? Number(object.lineIndex) : 0,
130
+ lineCode: isSet(object.lineCode) ? String(object.lineCode) : "",
131
+ };
132
+ },
133
+ toJSON(message) {
134
+ const obj = {};
135
+ message.lineIndex !== undefined && (obj.lineIndex = Math.round(message.lineIndex));
136
+ message.lineCode !== undefined && (obj.lineCode = message.lineCode);
137
+ return obj;
138
+ },
139
+ create(base) {
140
+ return exports.CodeLine.fromPartial(base !== null && base !== void 0 ? base : {});
141
+ },
142
+ fromPartial(object) {
143
+ var _a, _b;
144
+ const message = createBaseCodeLine();
145
+ message.lineIndex = (_a = object.lineIndex) !== null && _a !== void 0 ? _a : 0;
146
+ message.lineCode = (_b = object.lineCode) !== null && _b !== void 0 ? _b : "";
147
+ return message;
148
+ },
149
+ };
150
+ function createBaseMappedChunk() {
151
+ return {
152
+ chunkName: "",
153
+ originalLineNumber: 0,
154
+ originalColumnNumber: 0,
155
+ sourceFileName: "",
156
+ sourceCodeLines: [],
157
+ generatedLineNumber: 0,
158
+ generatedColumnNumber: 0,
159
+ sourceFunctionName: "",
160
+ };
161
+ }
162
+ exports.MappedChunk = {
163
+ encode(message, writer = minimal_1.default.Writer.create()) {
164
+ if (message.chunkName !== "") {
165
+ writer.uint32(10).string(message.chunkName);
166
+ }
167
+ if (message.originalLineNumber !== 0) {
168
+ writer.uint32(16).int64(message.originalLineNumber);
169
+ }
170
+ if (message.originalColumnNumber !== 0) {
171
+ writer.uint32(24).int64(message.originalColumnNumber);
172
+ }
173
+ if (message.sourceFileName !== "") {
174
+ writer.uint32(34).string(message.sourceFileName);
175
+ }
176
+ for (const v of message.sourceCodeLines) {
177
+ exports.CodeLine.encode(v, writer.uint32(42).fork()).ldelim();
178
+ }
179
+ if (message.generatedLineNumber !== 0) {
180
+ writer.uint32(48).int64(message.generatedLineNumber);
181
+ }
182
+ if (message.generatedColumnNumber !== 0) {
183
+ writer.uint32(56).int64(message.generatedColumnNumber);
184
+ }
185
+ if (message.sourceFunctionName !== "") {
186
+ writer.uint32(66).string(message.sourceFunctionName);
187
+ }
188
+ return writer;
189
+ },
190
+ decode(input, length) {
191
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
192
+ let end = length === undefined ? reader.len : reader.pos + length;
193
+ const message = createBaseMappedChunk();
194
+ while (reader.pos < end) {
195
+ const tag = reader.uint32();
196
+ switch (tag >>> 3) {
197
+ case 1:
198
+ if (tag !== 10) {
199
+ break;
200
+ }
201
+ message.chunkName = reader.string();
202
+ continue;
203
+ case 2:
204
+ if (tag !== 16) {
205
+ break;
206
+ }
207
+ message.originalLineNumber = longToNumber(reader.int64());
208
+ continue;
209
+ case 3:
210
+ if (tag !== 24) {
211
+ break;
212
+ }
213
+ message.originalColumnNumber = longToNumber(reader.int64());
214
+ continue;
215
+ case 4:
216
+ if (tag !== 34) {
217
+ break;
218
+ }
219
+ message.sourceFileName = reader.string();
220
+ continue;
221
+ case 5:
222
+ if (tag !== 42) {
223
+ break;
224
+ }
225
+ message.sourceCodeLines.push(exports.CodeLine.decode(reader, reader.uint32()));
226
+ continue;
227
+ case 6:
228
+ if (tag !== 48) {
229
+ break;
230
+ }
231
+ message.generatedLineNumber = longToNumber(reader.int64());
232
+ continue;
233
+ case 7:
234
+ if (tag !== 56) {
235
+ break;
236
+ }
237
+ message.generatedColumnNumber = longToNumber(reader.int64());
238
+ continue;
239
+ case 8:
240
+ if (tag !== 66) {
241
+ break;
242
+ }
243
+ message.sourceFunctionName = reader.string();
244
+ continue;
245
+ }
246
+ if ((tag & 7) === 4 || tag === 0) {
247
+ break;
248
+ }
249
+ reader.skipType(tag & 7);
250
+ }
251
+ return message;
252
+ },
253
+ fromJSON(object) {
254
+ return {
255
+ chunkName: isSet(object.chunkName) ? String(object.chunkName) : "",
256
+ originalLineNumber: isSet(object.originalLineNumber) ? Number(object.originalLineNumber) : 0,
257
+ originalColumnNumber: isSet(object.originalColumnNumber) ? Number(object.originalColumnNumber) : 0,
258
+ sourceFileName: isSet(object.sourceFileName) ? String(object.sourceFileName) : "",
259
+ sourceCodeLines: Array.isArray(object === null || object === void 0 ? void 0 : object.sourceCodeLines)
260
+ ? object.sourceCodeLines.map((e) => exports.CodeLine.fromJSON(e))
261
+ : [],
262
+ generatedLineNumber: isSet(object.generatedLineNumber) ? Number(object.generatedLineNumber) : 0,
263
+ generatedColumnNumber: isSet(object.generatedColumnNumber) ? Number(object.generatedColumnNumber) : 0,
264
+ sourceFunctionName: isSet(object.sourceFunctionName) ? String(object.sourceFunctionName) : "",
265
+ };
266
+ },
267
+ toJSON(message) {
268
+ const obj = {};
269
+ message.chunkName !== undefined && (obj.chunkName = message.chunkName);
270
+ message.originalLineNumber !== undefined && (obj.originalLineNumber = Math.round(message.originalLineNumber));
271
+ message.originalColumnNumber !== undefined && (obj.originalColumnNumber = Math.round(message.originalColumnNumber));
272
+ message.sourceFileName !== undefined && (obj.sourceFileName = message.sourceFileName);
273
+ if (message.sourceCodeLines) {
274
+ obj.sourceCodeLines = message.sourceCodeLines.map((e) => e ? exports.CodeLine.toJSON(e) : undefined);
275
+ }
276
+ else {
277
+ obj.sourceCodeLines = [];
278
+ }
279
+ message.generatedLineNumber !== undefined && (obj.generatedLineNumber = Math.round(message.generatedLineNumber));
280
+ message.generatedColumnNumber !== undefined &&
281
+ (obj.generatedColumnNumber = Math.round(message.generatedColumnNumber));
282
+ message.sourceFunctionName !== undefined && (obj.sourceFunctionName = message.sourceFunctionName);
283
+ return obj;
284
+ },
285
+ create(base) {
286
+ return exports.MappedChunk.fromPartial(base !== null && base !== void 0 ? base : {});
287
+ },
288
+ fromPartial(object) {
289
+ var _a, _b, _c, _d, _e, _f, _g, _h;
290
+ const message = createBaseMappedChunk();
291
+ message.chunkName = (_a = object.chunkName) !== null && _a !== void 0 ? _a : "";
292
+ message.originalLineNumber = (_b = object.originalLineNumber) !== null && _b !== void 0 ? _b : 0;
293
+ message.originalColumnNumber = (_c = object.originalColumnNumber) !== null && _c !== void 0 ? _c : 0;
294
+ message.sourceFileName = (_d = object.sourceFileName) !== null && _d !== void 0 ? _d : "";
295
+ message.sourceCodeLines = ((_e = object.sourceCodeLines) === null || _e === void 0 ? void 0 : _e.map((e) => exports.CodeLine.fromPartial(e))) || [];
296
+ message.generatedLineNumber = (_f = object.generatedLineNumber) !== null && _f !== void 0 ? _f : 0;
297
+ message.generatedColumnNumber = (_g = object.generatedColumnNumber) !== null && _g !== void 0 ? _g : 0;
298
+ message.sourceFunctionName = (_h = object.sourceFunctionName) !== null && _h !== void 0 ? _h : "";
299
+ return message;
300
+ },
301
+ };
302
+ var tsProtoGlobalThis = (() => {
303
+ if (typeof globalThis !== "undefined") {
304
+ return globalThis;
305
+ }
306
+ if (typeof self !== "undefined") {
307
+ return self;
308
+ }
309
+ if (typeof window !== "undefined") {
310
+ return window;
311
+ }
312
+ if (typeof global !== "undefined") {
313
+ return global;
314
+ }
315
+ throw "Unable to locate global object";
316
+ })();
317
+ function longToNumber(long) {
318
+ if (long.gt(Number.MAX_SAFE_INTEGER)) {
319
+ throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
320
+ }
321
+ return long.toNumber();
322
+ }
323
+ if (minimal_1.default.util.Long !== long_1.default) {
324
+ minimal_1.default.util.Long = long_1.default;
325
+ minimal_1.default.configure();
326
+ }
327
+ function isSet(value) {
328
+ return value !== null && value !== undefined;
329
+ }
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2h1bmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ydW0vdjIvY2h1bmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixpRUFBcUM7QUFFeEIsUUFBQSxlQUFlLEdBQUcsc0JBQXNCLENBQUM7QUF3QnRELFNBQVMsZUFBZTtJQUN0QixPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0UsQ0FBQztBQUVZLFFBQUEsS0FBSyxHQUFHO0lBQ25CLE1BQU0sQ0FBQyxPQUFjLEVBQUUsU0FBcUIsaUJBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQzdELElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxPQUFPLENBQUMsbUJBQW1CLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxPQUFPLENBQUMscUJBQXFCLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUE4QixFQUFFLE1BQWU7UUFDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLGlCQUFHLENBQUMsTUFB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LGdCQUFnQixDQUFDLEVBQUU7UUFDcEMsTUFBTSxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0tBQ25GO0lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVELElBQUksaUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQUksRUFBRTtJQUMxQixpQkFBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBVyxDQUFDO0lBQzVCLGlCQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDakI7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFVO0lBQ3ZCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IExvbmcgZnJvbSBcImxvbmdcIjtcbmltcG9ydCBfbTAgZnJvbSBcInByb3RvYnVmanMvbWluaW1hbFwiO1xuXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gXCJjb20uY29yYWxvZ2l4LnJ1bS52MlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENodW5rIHtcbiAgY2h1bmtOYW1lOiBzdHJpbmc7XG4gIGdlbmVyYXRlZExpbmVOdW1iZXI6IG51bWJlcjtcbiAgZ2VuZXJhdGVkQ29sdW1uTnVtYmVyOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUxpbmUge1xuICBsaW5lSW5kZXg6IG51bWJlcjtcbiAgbGluZUNvZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBwZWRDaHVuayB7XG4gIGNodW5rTmFtZTogc3RyaW5nO1xuICBvcmlnaW5hbExpbmVOdW1iZXI6IG51bWJlcjtcbiAgb3JpZ2luYWxDb2x1bW5OdW1iZXI6IG51bWJlcjtcbiAgc291cmNlRmlsZU5hbWU6IHN0cmluZztcbiAgc291cmNlQ29kZUxpbmVzOiBDb2RlTGluZVtdO1xuICBnZW5lcmF0ZWRMaW5lTnVtYmVyOiBudW1iZXI7XG4gIGdlbmVyYXRlZENvbHVtbk51bWJlcjogbnVtYmVyO1xuICBzb3VyY2VGdW5jdGlvbk5hbWU6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZUNodW5rKCk6IENodW5rIHtcbiAgcmV0dXJuIHsgY2h1bmtOYW1lOiBcIlwiLCBnZW5lcmF0ZWRMaW5lTnVtYmVyOiAwLCBnZW5lcmF0ZWRDb2x1bW5OdW1iZXI6IDAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IENodW5rID0ge1xuICBlbmNvZGUobWVzc2FnZTogQ2h1bmssIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5jaHVua05hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmNodW5rTmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDY0KG1lc3NhZ2UuZ2VuZXJhdGVkTGluZU51bWJlcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlciAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50NjQobWVzc2FnZS5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IENodW5rIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNodW5rKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5jaHVua05hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5nZW5lcmF0ZWRMaW5lTnVtYmVyID0gbG9uZ1RvTnVtYmVyKHJlYWRlci5pbnQ2NCgpIGFzIExvbmcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZ2VuZXJhdGVkQ29sdW1uTnVtYmVyID0gbG9uZ1RvTnVtYmVyKHJlYWRlci5pbnQ2NCgpIGFzIExvbmcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogQ2h1bmsge1xuICAgIHJldHVybiB7XG4gICAgICBjaHVua05hbWU6IGlzU2V0KG9iamVjdC5jaHVua05hbWUpID8gU3RyaW5nKG9iamVjdC5jaHVua05hbWUpIDogXCJcIixcbiAgICAgIGdlbmVyYXRlZExpbmVOdW1iZXI6IGlzU2V0KG9iamVjdC5nZW5lcmF0ZWRMaW5lTnVtYmVyKSA/IE51bWJlcihvYmplY3QuZ2VuZXJhdGVkTGluZU51bWJlcikgOiAwLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uTnVtYmVyOiBpc1NldChvYmplY3QuZ2VuZXJhdGVkQ29sdW1uTnVtYmVyKSA/IE51bWJlcihvYmplY3QuZ2VuZXJhdGVkQ29sdW1uTnVtYmVyKSA6IDAsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogQ2h1bmspOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UuY2h1bmtOYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5jaHVua05hbWUgPSBtZXNzYWdlLmNodW5rTmFtZSk7XG4gICAgbWVzc2FnZS5nZW5lcmF0ZWRMaW5lTnVtYmVyICE9PSB1bmRlZmluZWQgJiYgKG9iai5nZW5lcmF0ZWRMaW5lTnVtYmVyID0gTWF0aC5yb3VuZChtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIpKTtcbiAgICBtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLmdlbmVyYXRlZENvbHVtbk51bWJlciA9IE1hdGgucm91bmQobWVzc2FnZS5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIpKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8Q2h1bms+KTogQ2h1bmsge1xuICAgIHJldHVybiBDaHVuay5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPENodW5rPik6IENodW5rIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNodW5rKCk7XG4gICAgbWVzc2FnZS5jaHVua05hbWUgPSBvYmplY3QuY2h1bmtOYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5nZW5lcmF0ZWRMaW5lTnVtYmVyID0gb2JqZWN0LmdlbmVyYXRlZExpbmVOdW1iZXIgPz8gMDtcbiAgICBtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlciA9IG9iamVjdC5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIgPz8gMDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VDb2RlTGluZSgpOiBDb2RlTGluZSB7XG4gIHJldHVybiB7IGxpbmVJbmRleDogMCwgbGluZUNvZGU6IFwiXCIgfTtcbn1cblxuZXhwb3J0IGNvbnN0IENvZGVMaW5lID0ge1xuICBlbmNvZGUobWVzc2FnZTogQ29kZUxpbmUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5saW5lSW5kZXggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDY0KG1lc3NhZ2UubGluZUluZGV4KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGluZUNvZGUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmxpbmVDb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBDb2RlTGluZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VDb2RlTGluZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubGluZUluZGV4ID0gbG9uZ1RvTnVtYmVyKHJlYWRlci5pbnQ2NCgpIGFzIExvbmcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubGluZUNvZGUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBDb2RlTGluZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmVJbmRleDogaXNTZXQob2JqZWN0LmxpbmVJbmRleCkgPyBOdW1iZXIob2JqZWN0LmxpbmVJbmRleCkgOiAwLFxuICAgICAgbGluZUNvZGU6IGlzU2V0KG9iamVjdC5saW5lQ29kZSkgPyBTdHJpbmcob2JqZWN0LmxpbmVDb2RlKSA6IFwiXCIsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogQ29kZUxpbmUpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubGluZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgKG9iai5saW5lSW5kZXggPSBNYXRoLnJvdW5kKG1lc3NhZ2UubGluZUluZGV4KSk7XG4gICAgbWVzc2FnZS5saW5lQ29kZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubGluZUNvZGUgPSBtZXNzYWdlLmxpbmVDb2RlKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8Q29kZUxpbmU+KTogQ29kZUxpbmUge1xuICAgIHJldHVybiBDb2RlTGluZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPENvZGVMaW5lPik6IENvZGVMaW5lIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNvZGVMaW5lKCk7XG4gICAgbWVzc2FnZS5saW5lSW5kZXggPSBvYmplY3QubGluZUluZGV4ID8/IDA7XG4gICAgbWVzc2FnZS5saW5lQ29kZSA9IG9iamVjdC5saW5lQ29kZSA/PyBcIlwiO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZU1hcHBlZENodW5rKCk6IE1hcHBlZENodW5rIHtcbiAgcmV0dXJuIHtcbiAgICBjaHVua05hbWU6IFwiXCIsXG4gICAgb3JpZ2luYWxMaW5lTnVtYmVyOiAwLFxuICAgIG9yaWdpbmFsQ29sdW1uTnVtYmVyOiAwLFxuICAgIHNvdXJjZUZpbGVOYW1lOiBcIlwiLFxuICAgIHNvdXJjZUNvZGVMaW5lczogW10sXG4gICAgZ2VuZXJhdGVkTGluZU51bWJlcjogMCxcbiAgICBnZW5lcmF0ZWRDb2x1bW5OdW1iZXI6IDAsXG4gICAgc291cmNlRnVuY3Rpb25OYW1lOiBcIlwiLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgTWFwcGVkQ2h1bmsgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBNYXBwZWRDaHVuaywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmNodW5rTmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuY2h1bmtOYW1lKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3JpZ2luYWxMaW5lTnVtYmVyICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQ2NChtZXNzYWdlLm9yaWdpbmFsTGluZU51bWJlcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9yaWdpbmFsQ29sdW1uTnVtYmVyICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5pbnQ2NChtZXNzYWdlLm9yaWdpbmFsQ29sdW1uTnVtYmVyKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc291cmNlRmlsZU5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQpLnN0cmluZyhtZXNzYWdlLnNvdXJjZUZpbGVOYW1lKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uuc291cmNlQ29kZUxpbmVzKSB7XG4gICAgICBDb2RlTGluZS5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmludDY0KG1lc3NhZ2UuZ2VuZXJhdGVkTGluZU51bWJlcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlciAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1NikuaW50NjQobWVzc2FnZS5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zb3VyY2VGdW5jdGlvbk5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjYpLnN0cmluZyhtZXNzYWdlLnNvdXJjZUZ1bmN0aW9uTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogTWFwcGVkQ2h1bmsge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWFwcGVkQ2h1bmsoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmNodW5rTmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbmFsTGluZU51bWJlciA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbmFsQ29sdW1uTnVtYmVyID0gbG9uZ1RvTnVtYmVyKHJlYWRlci5pbnQ2NCgpIGFzIExvbmcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc291cmNlRmlsZU5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0Mikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zb3VyY2VDb2RlTGluZXMucHVzaChDb2RlTGluZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQ4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIgPSBsb25nVG9OdW1iZXIocmVhZGVyLmludDY0KCkgYXMgTG9uZyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBpZiAodGFnICE9PSA1Nikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIgPSBsb25nVG9OdW1iZXIocmVhZGVyLmludDY0KCkgYXMgTG9uZyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBpZiAodGFnICE9PSA2Nikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zb3VyY2VGdW5jdGlvbk5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBNYXBwZWRDaHVuayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNodW5rTmFtZTogaXNTZXQob2JqZWN0LmNodW5rTmFtZSkgPyBTdHJpbmcob2JqZWN0LmNodW5rTmFtZSkgOiBcIlwiLFxuICAgICAgb3JpZ2luYWxMaW5lTnVtYmVyOiBpc1NldChvYmplY3Qub3JpZ2luYWxMaW5lTnVtYmVyKSA/IE51bWJlcihvYmplY3Qub3JpZ2luYWxMaW5lTnVtYmVyKSA6IDAsXG4gICAgICBvcmlnaW5hbENvbHVtbk51bWJlcjogaXNTZXQob2JqZWN0Lm9yaWdpbmFsQ29sdW1uTnVtYmVyKSA/IE51bWJlcihvYmplY3Qub3JpZ2luYWxDb2x1bW5OdW1iZXIpIDogMCxcbiAgICAgIHNvdXJjZUZpbGVOYW1lOiBpc1NldChvYmplY3Quc291cmNlRmlsZU5hbWUpID8gU3RyaW5nKG9iamVjdC5zb3VyY2VGaWxlTmFtZSkgOiBcIlwiLFxuICAgICAgc291cmNlQ29kZUxpbmVzOiBBcnJheS5pc0FycmF5KG9iamVjdD8uc291cmNlQ29kZUxpbmVzKVxuICAgICAgICA/IG9iamVjdC5zb3VyY2VDb2RlTGluZXMubWFwKChlOiBhbnkpID0+IENvZGVMaW5lLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgICAgZ2VuZXJhdGVkTGluZU51bWJlcjogaXNTZXQob2JqZWN0LmdlbmVyYXRlZExpbmVOdW1iZXIpID8gTnVtYmVyKG9iamVjdC5nZW5lcmF0ZWRMaW5lTnVtYmVyKSA6IDAsXG4gICAgICBnZW5lcmF0ZWRDb2x1bW5OdW1iZXI6IGlzU2V0KG9iamVjdC5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIpID8gTnVtYmVyKG9iamVjdC5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIpIDogMCxcbiAgICAgIHNvdXJjZUZ1bmN0aW9uTmFtZTogaXNTZXQob2JqZWN0LnNvdXJjZUZ1bmN0aW9uTmFtZSkgPyBTdHJpbmcob2JqZWN0LnNvdXJjZUZ1bmN0aW9uTmFtZSkgOiBcIlwiLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IE1hcHBlZENodW5rKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmNodW5rTmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmouY2h1bmtOYW1lID0gbWVzc2FnZS5jaHVua05hbWUpO1xuICAgIG1lc3NhZ2Uub3JpZ2luYWxMaW5lTnVtYmVyICE9PSB1bmRlZmluZWQgJiYgKG9iai5vcmlnaW5hbExpbmVOdW1iZXIgPSBNYXRoLnJvdW5kKG1lc3NhZ2Uub3JpZ2luYWxMaW5lTnVtYmVyKSk7XG4gICAgbWVzc2FnZS5vcmlnaW5hbENvbHVtbk51bWJlciAhPT0gdW5kZWZpbmVkICYmIChvYmoub3JpZ2luYWxDb2x1bW5OdW1iZXIgPSBNYXRoLnJvdW5kKG1lc3NhZ2Uub3JpZ2luYWxDb2x1bW5OdW1iZXIpKTtcbiAgICBtZXNzYWdlLnNvdXJjZUZpbGVOYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5zb3VyY2VGaWxlTmFtZSA9IG1lc3NhZ2Uuc291cmNlRmlsZU5hbWUpO1xuICAgIGlmIChtZXNzYWdlLnNvdXJjZUNvZGVMaW5lcykge1xuICAgICAgb2JqLnNvdXJjZUNvZGVMaW5lcyA9IG1lc3NhZ2Uuc291cmNlQ29kZUxpbmVzLm1hcCgoZSkgPT4gZSA/IENvZGVMaW5lLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5zb3VyY2VDb2RlTGluZXMgPSBbXTtcbiAgICB9XG4gICAgbWVzc2FnZS5nZW5lcmF0ZWRMaW5lTnVtYmVyICE9PSB1bmRlZmluZWQgJiYgKG9iai5nZW5lcmF0ZWRMaW5lTnVtYmVyID0gTWF0aC5yb3VuZChtZXNzYWdlLmdlbmVyYXRlZExpbmVOdW1iZXIpKTtcbiAgICBtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLmdlbmVyYXRlZENvbHVtbk51bWJlciA9IE1hdGgucm91bmQobWVzc2FnZS5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIpKTtcbiAgICBtZXNzYWdlLnNvdXJjZUZ1bmN0aW9uTmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmouc291cmNlRnVuY3Rpb25OYW1lID0gbWVzc2FnZS5zb3VyY2VGdW5jdGlvbk5hbWUpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxNYXBwZWRDaHVuaz4pOiBNYXBwZWRDaHVuayB7XG4gICAgcmV0dXJuIE1hcHBlZENodW5rLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8TWFwcGVkQ2h1bms+KTogTWFwcGVkQ2h1bmsge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWFwcGVkQ2h1bmsoKTtcbiAgICBtZXNzYWdlLmNodW5rTmFtZSA9IG9iamVjdC5jaHVua05hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm9yaWdpbmFsTGluZU51bWJlciA9IG9iamVjdC5vcmlnaW5hbExpbmVOdW1iZXIgPz8gMDtcbiAgICBtZXNzYWdlLm9yaWdpbmFsQ29sdW1uTnVtYmVyID0gb2JqZWN0Lm9yaWdpbmFsQ29sdW1uTnVtYmVyID8/IDA7XG4gICAgbWVzc2FnZS5zb3VyY2VGaWxlTmFtZSA9IG9iamVjdC5zb3VyY2VGaWxlTmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uuc291cmNlQ29kZUxpbmVzID0gb2JqZWN0LnNvdXJjZUNvZGVMaW5lcz8ubWFwKChlKSA9PiBDb2RlTGluZS5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5nZW5lcmF0ZWRMaW5lTnVtYmVyID0gb2JqZWN0LmdlbmVyYXRlZExpbmVOdW1iZXIgPz8gMDtcbiAgICBtZXNzYWdlLmdlbmVyYXRlZENvbHVtbk51bWJlciA9IG9iamVjdC5nZW5lcmF0ZWRDb2x1bW5OdW1iZXIgPz8gMDtcbiAgICBtZXNzYWdlLnNvdXJjZUZ1bmN0aW9uTmFtZSA9IG9iamVjdC5zb3VyY2VGdW5jdGlvbk5hbWUgPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmRlY2xhcmUgdmFyIHNlbGY6IGFueSB8IHVuZGVmaW5lZDtcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55IHwgdW5kZWZpbmVkO1xuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnkgfCB1bmRlZmluZWQ7XG52YXIgdHNQcm90b0dsb2JhbFRoaXM6IGFueSA9ICgoKSA9PiB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBzZWxmO1xuICB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBnbG9iYWw7XG4gIH1cbiAgdGhyb3cgXCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIjtcbn0pKCk7XG5cbnR5cGUgQnVpbHRpbiA9IERhdGUgfCBGdW5jdGlvbiB8IFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluID8gVFxuICA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IEFycmF5PERlZXBQYXJ0aWFsPFU+PiA6IFQgZXh0ZW5kcyBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gUmVhZG9ubHlBcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgeyAkY2FzZTogc3RyaW5nIH0gPyB7IFtLIGluIGtleW9mIE9taXQ8VCwgXCIkY2FzZVwiPl0/OiBEZWVwUGFydGlhbDxUW0tdPiB9ICYgeyAkY2FzZTogVFtcIiRjYXNlXCJdIH1cbiAgOiBUIGV4dGVuZHMge30gPyB7IFtLIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtLXT4gfVxuICA6IFBhcnRpYWw8VD47XG5cbmZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nOiBMb25nKTogbnVtYmVyIHtcbiAgaWYgKGxvbmcuZ3QoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcIik7XG4gIH1cbiAgcmV0dXJuIGxvbmcudG9OdW1iZXIoKTtcbn1cblxuaWYgKF9tMC51dGlsLkxvbmcgIT09IExvbmcpIHtcbiAgX20wLnV0aWwuTG9uZyA9IExvbmcgYXMgYW55O1xuICBfbTAuY29uZmlndXJlKCk7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=