@cdktn/hcl2cdk 0.24.0-pre.81 → 0.24.0-pre.84

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.
package/build/index.d.ts CHANGED
@@ -1,12 +1,10 @@
1
1
  import { isRegistryModule } from "@cdktn/provider-generator";
2
2
  import * as rosetta from "jsii-rosetta";
3
- import * as z from "zod";
4
3
  import { attributeNameToCdktfName } from "./generation";
5
4
  import { replaceCsharpImports, replaceGoImports, replaceJavaImports, replacePythonImports } from "./jsii-rosetta-workarounds";
6
5
  import { ProviderSchema } from "@cdktn/commons";
7
6
  export declare const CODE_MARKER = "// define resources here";
8
7
  export declare function getParsedHcl(hcl: string): Promise<{
9
- provider?: Record<string, Record<string, any>[]> | undefined;
10
8
  data?: Record<string, Record<string, Record<string, any>[]>> | undefined;
11
9
  import?: {
12
10
  to: string;
@@ -14,15 +12,17 @@ export declare function getParsedHcl(hcl: string): Promise<{
14
12
  provider?: any;
15
13
  }[] | undefined;
16
14
  locals?: Record<string, any>[] | undefined;
17
- module?: Record<string, z.objectOutputType<{
18
- source: z.ZodString;
19
- }, z.ZodTypeAny, "passthrough">[]> | undefined;
15
+ module?: Record<string, {
16
+ [x: string]: unknown;
17
+ source: string;
18
+ }[]> | undefined;
20
19
  output?: Record<string, {
21
- sensitive?: boolean | undefined;
22
20
  value?: any;
23
21
  description?: string | undefined;
22
+ sensitive?: boolean | undefined;
24
23
  depends_on?: string | undefined;
25
24
  }[]> | undefined;
25
+ provider?: Record<string, Record<string, any>[]> | undefined;
26
26
  resource?: Record<string, Record<string, Record<string, any>[]>> | undefined;
27
27
  terraform?: {
28
28
  required_version?: string | undefined;
@@ -33,15 +33,15 @@ export declare function getParsedHcl(hcl: string): Promise<{
33
33
  backend?: Record<string, Record<string, any>[]> | undefined;
34
34
  }[] | undefined;
35
35
  variable?: Record<string, {
36
- sensitive?: boolean | undefined;
37
36
  type?: string | undefined;
37
+ default?: any;
38
38
  description?: string | undefined;
39
+ sensitive?: boolean | undefined;
40
+ nullable?: boolean | undefined;
39
41
  validation?: {
40
42
  error_message: string;
41
- condition?: any;
43
+ condition: any;
42
44
  }[] | undefined;
43
- default?: any;
44
- nullable?: boolean | undefined;
45
45
  }[]> | undefined;
46
46
  }>;
47
47
  export declare function parseProviderRequirements(hcl: string): Promise<Record<string, string>>;
package/build/index.js CHANGED
@@ -69,7 +69,7 @@ async function getParsedHcl(hcl) {
69
69
  catch (err) {
70
70
  throw new Error(`Error: HCL-JSON does not conform to schema. This is not expected, please file a bug under https://github.com/open-constructs/cdk-terrain/issues/new?assignees=&labels=bug%2C+new%2C+feature%2Fconvert&template=bug-report.yml&title=
71
71
  Please include this information:
72
- ${JSON.stringify(err.errors)}`);
72
+ ${JSON.stringify(err.issues)}`);
73
73
  }
74
74
  return plan;
75
75
  }
@@ -361,4 +361,4 @@ async function convertProject(combinedHcl, { language, providerSchema }) {
361
361
  };
362
362
  }
363
363
  exports.convertProject = convertProject;
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDhDQUF3QztBQUN4QyxrRUFJbUM7QUFna0IxQixpR0Fua0JQLHFDQUFnQixPQW1rQk87QUE5akJ6QixnREFBa0M7QUFDbEMsd0RBQWdDO0FBQ2hDLDJDQUE2QjtBQUM3QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLDJDQUEyQztBQUMzQyxzREFBd0M7QUFHeEMscUNBQWtDO0FBQ2xDLDZDQUFrRDtBQUNsRCw2Q0Flc0I7QUFFdEIsMkNBS3FCO0FBQ3JCLHlDQUFxRDtBQUNyRCxtQ0FBaUM7QUFFakMsNkNBQXdEO0FBeWhCN0IseUdBemhCbEIscUNBQXdCLE9BeWhCa0I7QUF4aEJuRCx5RUFLb0M7QUFFcEMsMkNBQTRDO0FBRS9CLFFBQUEsV0FBVyxHQUFHLDBCQUEwQixDQUFDO0FBRS9DLEtBQUssVUFBVSxZQUFZLENBQUMsR0FBVztJQUM1QyxjQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLHlDQUF5QztJQUN6QyxJQUFJLElBQTZCLENBQUM7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsSUFBSSxHQUFHLE1BQU0sSUFBQSxnQkFBSyxFQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGNBQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FDYixrU0FBa1MsQ0FDblMsQ0FBQztJQUNKLENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsSUFBSSxJQUE0QixDQUFDO0lBQ2pDLElBQUksQ0FBQztRQUNILElBQUksR0FBRyxlQUFNLENBQUMs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LEVBQUU7WUFDdkMsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7WUFDekMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztZQUN2QyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsS0FBSztLQUNOLENBQUM7QUFDSixDQUFDO0FBakNELHdDQWlDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJAY2RrdG4vaGNsMmpzb25cIjtcbmltcG9ydCB7XG4gIGlzUmVnaXN0cnlNb2R1bGUsXG4gIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yLFxuICBDb2RlTWFrZXIsXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5cbmltcG9ydCAqIGFzIHQgZnJvbSBcIkBiYWJlbC90eXBlc1wiO1xuaW1wb3J0IHByZXR0aWVyIGZyb20gXCJwcmV0dGllclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZ2xvYiBmcm9tIFwiZ2xvYlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBEaXJlY3RlZEdyYXBoIH0gZnJvbSBcImdyYXBob2xvZ3lcIjtcbmltcG9ydCAqIGFzIHJvc2V0dGEgZnJvbSBcImpzaWktcm9zZXR0YVwiO1xuaW1wb3J0ICogYXMgeiBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZmluZFVzZWRSZWZlcmVuY2VzIH0gZnJvbSBcIi4vcmVmZXJlbmNlc1wiO1xuaW1wb3J0IHtcbiAgYmFja2VuZFRvRXhwcmVzc2lvbixcbiAgZ2VuLFxuICBsb2NhbCxcbiAgbW9kdWxlSW1wb3J0cyxcbiAgbW9kdWxlcyxcbiAgb3V0cHV0LFxuICBwcm92aWRlcixcbiAgcmVzb3VyY2UsXG4gIHZhcmlhYmxlLFxuICB3cmFwQ29kZUluQ29uc3RydWN0b3IsXG4gIGFkZEltcG9ydEZvckNvZGVDb250YWluZXIsXG4gIGJ1aWxkSW1wb3J0cyxcbiAgZ2VuZXJhdGVDb25maWdUeXBlLFxuICBpbXBvcnRzLFxufSBmcm9tIFwiLi9nZW5lcmF0aW9uXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLCBQcm9ncmFtU2NvcGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZm9yRWFjaFByb3ZpZGVyLFxuICBmb3JFYWNoR2xvYmFsLFxuICBmb3JFYWNoTmFtZXNwYWNlZCxcbiAgcmVzb3VyY2VTdGF0cyxcbn0gZnJvbSBcIi4vaXRlcmF0aW9uXCI7XG5pbXBvcnQgeyBnZXRQcm92aWRlclJlcXVpcmVtZW50cyB9IGZyb20gXCIuL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgRlFQTiB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBhdHRyaWJ1dGVOYW1lVG9DZGt0Zk5hbWUgfSBmcm9tIFwiLi9nZW5lcmF0aW9uXCI7XG5pbXBvcnQge1xuICByZXBsYWNlQ3NoYXJwSW1wb3J0cyxcbiAgcmVwbGFjZUdvSW1wb3J0cyxcbiAgcmVwbGFjZUphdmFJbXBvcnRzLFxuICByZXBsYWNlUHl0aG9uSW1wb3J0cyxcbn0gZnJvbSBcIi4vanNpaS1yb3NldHRhLXdvcmthcm91bmRzXCI7XG5pbXBvcnQgeyBQcm92aWRlclNjaGVtYSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgZm9yRWFjaEltcG9ydCB9IGZyb20gXCIuL2l0ZXJhdGlvblwiO1xuXG5leHBvcnQgY29uc3QgQ09ERV9NQVJLRVIgPSBcIi8vIGRlZmluZSByZXNvdXJjZXMgaGVyZVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGFyc2VkSGNsKGhjbDogc3RyaW5nKSB7XG4gIGxvZ2dlci5kZWJ1ZyhgUGFyc2luZyBIQ0w6ICR7aGNsfWApO1xuICAvLyBHZXQgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIEhDTFxuICBsZXQganNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRyeSB7XG4gICAganNvbiA9IGF3YWl0IHBhcnNlKFwidGVycmFmb3JtLnRmXCIsIGhjbCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIEhDTDogJHtlcnJ9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVycm9yOiBDb3VsZCBub3QgcGFyc2UgSENMLCB0aGlzIG1lYW5zIGVpdGhlciB0aGF0IHRoZSBIQ0wgcGFzc2VkIGlzIGludmFsaWQgb3IgdGhhdCB5b3UgZm91bmQgYSBidWcuIElmIHRoZSBIQ0wgc2VlbXMgdmFsaWQsIHBsZWFzZSBmaWxlIGEgYnVnIHVuZGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLWNvbnN0cnVjdHMvY2RrLXRlcnJhaW4vaXNzdWVzL25ldz9hc3NpZ25lZXM9JmxhYmVscz1idWclMkMrbmV3JTJDK2ZlYXR1cmUlMkZjb252ZXJ0JnRlbXBsYXRlPWJ1Zy1yZXBvcnQueW1sJnRpdGxlPWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEVuc3VyZSB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBtYXRjaGVzIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmVcbiAgbGV0IHBsYW46IHouaW5mZXI8dHlwZW9mIHNjaGVtYT47XG4gIHRyeSB7XG4gICAgcGxhbiA9IHNjaGVtYS5wYXJzZShqc29uKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogSENMLUpTT04gZG9lcyBub3QgY29uZm9ybSB0byBzY2hlbWEuIFRoaXMgaXMgbm90IGV4cGVjdGVkLCBwbGVhc2UgZmlsZSBhIGJ1ZyB1bmRlciBodHRwczovL2dpdGh1Yi5jb20vb3Blbi1jb25zdHJ1Y3RzL2Nkay10ZXJyYWluL2lzc3Vlcy9uZXc/YXNzaWduZWVzPSZsYWJlbHM9YnVnJTJDK25ldyUyQytmZWF0dXJlJTJGY29udmVydCZ0ZW1wbGF0ZT1idWctcmVwb3J0LnltbCZ0aXRsZT1cblBsZWFzZSBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb246XG4ke0pTT04uc3RyaW5naWZ5KChlcnIgYXMgei5ab2RFcnJvcikuZXJyb3JzKX1gKTtcbiAgfVxuXG4gIHJldHVybiBwbGFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VQcm92aWRlclJlcXVpcmVtZW50cyhoY2w6IHN0cmluZykge1xuICBsb2dnZXIuZGVidWcoXCJQYXJzaW5nIHByb3ZpZGVyIHJlcXVpcmVtZW50c1wiKTtcbiAgY29uc3QgcGxhbiA9IGF3YWl0IGdldFBhcnNlZEhjbChoY2wpO1xuICByZXR1cm4gZ2V0UHJvdmlkZXJSZXF1aXJlbWVudHMocGxhbik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb252ZXJ0VG9UeXBlc2NyaXB0KFxuICBoY2w6IHN0cmluZyxcbiAgcHJvdmlkZXJTY2hlbWE6IFByb3ZpZGVyU2NoZW1hLFxuICBjb2RlQ29udGFpbmVyOiBzdHJpbmcsXG4pIHtcbiAgbG9nZ2VyLmRlYnVnKFwiQ29udmVydGluZyB0byB0eXBlc2NyaXB0XCIpO1xuICBjb25zdCBwbGFuID0gYXdhaXQgZ2V0UGFyc2VkSGNsKGhjbCk7XG5cbiAgLy8gRWFjaCBrZXkgaW4gdGhlIHNjb3BlIG5lZWRzIHRvIGJlIHVuaXF1ZSwgdGhlcmVmb3JlIHdlIHNhdmUgdGhlbSBpbiBhIHNldFxuICAvLyBFYWNoIHZhcmlhYmxlIG5lZWRzIHRvIGJlIHVuaXF1ZSBhcyB3ZWxsLCB3ZSBzYXZlIHRoZW0gaW4gYSByZWNvcmQgc28gd2UgY2FuIGlkZW50aWZ5IGlmIHR3byB2YXJpYWJsZXMgYXJlIHRoZSBzYW1lXG4gIGNvbnN0IHNjb3BlOiBQcm9ncmFtU2NvcGUgPSB7XG4gICAgcHJvdmlkZXJTY2hlbWEsXG4gICAgcHJvdmlkZXJHZW5lcmF0b3I6IE9iamVjdC5rZXlzKFxuICAgICAgcHJvdmlkZXJTY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSxcbiAgICApLnJlZHVjZSgoY2FycnksIGZxcG4pID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyR2VuZXJhdG9yID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yKFxuICAgICAgICBuZXcgQ29kZU1ha2VyKCksXG4gICAgICAgIHByb3ZpZGVyU2NoZW1hLFxuICAgICAgKTtcbiAgICAgIHByb3ZpZGVyR2VuZXJhdG9yLmJ1aWxkUmVzb3VyY2VNb2RlbHMoZnFwbiBhcyBGUVBOKTsgLy8gY2FuJ3QgdXNlIHRoYXQgdHlwZSBvbiB0aGUga2V5cyB5ZXQsIHNpbmNlIHdlIGFyZSBub3Qgb24gVFMgPj00LjQgeWV0IDpzYWRjYXQ6XG4gICAgICByZXR1cm4geyAuLi5jYXJyeSwgW2ZxcG5dOiBwcm92aWRlckdlbmVyYXRvciB9O1xuICAgIH0sIHt9KSxcbiAgICBjb25zdHJ1Y3RzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICB2YXJpYWJsZXM6IHt9LFxuICAgIGhhc1Rva2VuQmFzZWRUeXBlQ29lcmNpb246IGZhbHNlLFxuICAgIG5vZGVJZHM6IFtdLFxuICAgIGltcG9ydGFibGVzOiBbXSxcbiAgICB0b3BMZXZlbENvbmZpZzoge30sXG4gIH07XG5cbiAgY29uc3QgZ3JhcGggPSBuZXcgRGlyZWN0ZWRHcmFwaDx7XG4gICAgY29kZTogKFxuICAgICAgZzogRGlyZWN0ZWRHcmFwaDxhbnk+LFxuICAgICkgPT4gUHJvbWlzZTxBcnJheTx0LlN0YXRlbWVudCB8IHQuVmFyaWFibGVEZWNsYXJhdGlvbj4+O1xuICB9PigpO1xuXG4gIC8vIEdldCBhbGwgaXRlbXMgaW4gdGhlIEpTT04gYXMgYSBtYXAgb2YgaWQgdG8gZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgdGhlIEFTVFxuICAvLyBXZSB3aWxsIHVzZSB0aGlzIHRvIGNvbnN0cnVjdCB0aGUgbm9kZXMgZm9yIGEgZGVwZW5kZW5jeSBncmFwaFxuICAvLyBXZSBuZWVkIHRvIHVzZSBhIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgc2FtZSBub2RlIGhhcyBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb24gYmFzZWQgb24gaWYgaXQncyByZWZlcmVuY2VkIGJ5IGFub3RoZXIgb25lXG4gIGNvbnN0IG5vZGVNYXA6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgY29kZTogKFxuICAgICAgICBnOiB0eXBlb2YgZ3JhcGgsXG4gICAgICApID0+IFByb21pc2U8QXJyYXk8dC5TdGF0ZW1lbnQgfCB0LlZhcmlhYmxlRGVjbGFyYXRpb24+PjtcbiAgICAgIHZhbHVlOiB1bmtub3duO1xuICAgIH1cbiAgPiA9IHtcbiAgICAuLi5mb3JFYWNoUHJvdmlkZXIoc2NvcGUsIHBsYW4ucHJvdmlkZXIsIHByb3ZpZGVyKSxcbiAgICAuLi5mb3JFYWNoR2xvYmFsKHNjb3BlLCBcInZhclwiLCBwbGFuLnZhcmlhYmxlLCB2YXJpYWJsZSksXG4gICAgLy8gbG9jYWxzIGFyZSBhIHNwZWNpYWwgY2FzZVxuICAgIC4uLmZvckVhY2hHbG9iYWwoXG4gICAgICBzY29wZSxcbiAgICAgIFwibG9jYWxcIixcbiAgICAgIEFycmF5LmlzQXJyYXkocGxhbi5sb2NhbHMpXG4gICAgICAgID8gcGxhbi5sb2NhbHMucmVkdWNlKChjYXJyeSwgbG9jYWxzKSA9PiAoeyAuLi5jYXJyeSwgLi4ubG9jYWxzIH0pLCB7fSlcbiAgICAgICAgOiB7fSxcbiAgICAgIGxvY2FsLFxuICAgICksXG4gICAgLi4uZm9yRWFjaEdsb2JhbChzY29wZSwgXCJvdXRcIiwgcGxhbi5vdXRwdXQsIG91dHB1dCksXG4gICAgLi4uZm9yRWFjaEdsb2JhbChzY29wZSwgXCJtb2R1bGVcIiwgcGxhbi5tb2R1bGUsIG1vZHVsZXMpLFxuICAgIC4uLmZvckVhY2hJbXBvcnQoc2NvcGUsIFwiaW1wb3J0XCIsIHBsYW4uaW1wb3J0LCBpbXBvcnRzKSxcbiAgICAuLi5mb3JFYWNoTmFtZXNwYWNlZChzY29wZSwgcGxhbi5yZXNvdXJjZSwgcmVzb3VyY2UpLFxuICAgIC4uLmZvckVhY2hOYW1lc3BhY2VkKHNjb3BlLCBwbGFuLmRhdGEsIHJlc291cmNlLCBcImRhdGFcIiksXG4gIH07XG5cbiAgLy8gQWRkIGFsbCBub2RlcyB0byB0aGUgZGVwZW5kZW5jeSBncmFwaCBzbyB3ZSBjYW4gZGV0ZWN0IGlmIGFuIGVkZ2UgaXMgYWRkZWQgZm9yIGFuIHVua25vd24gbGlua1xuICBPYmplY3QuZW50cmllcyhub2RlTWFwKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEFkZGluZyBub2RlICcke2tleX0nIHRvIGdyYXBoYCk7XG4gICAgZ3JhcGguYWRkTm9kZShrZXksIHZhbHVlKTtcbiAgfSk7XG5cbiAgLy8gRmluZGluZyByZWZlcmVuY2VzIGJlY29tZXMgZWFzaWVyIG9mIHRoZSB0byBiZSByZWZlcmVuY2VkIGlkcyBhcmUgYWxyZWFkeSBrbm93blxuICBjb25zdCBub2RlSWRzID0gT2JqZWN0LmtleXMobm9kZU1hcCk7XG4gIHNjb3BlLm5vZGVJZHMgPSBub2RlSWRzO1xuICBhc3luYyBmdW5jdGlvbiBhZGRFZGdlcyhpZDogc3RyaW5nLCB2YWx1ZTogVGVycmFmb3JtUmVzb3VyY2VCbG9jaykge1xuICAgIChhd2FpdCBmaW5kVXNlZFJlZmVyZW5jZXMobm9kZUlkcywgdmFsdWUpKS5mb3JFYWNoKChyZWYpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWdyYXBoLmhhc0RpcmVjdGVkRWRnZShyZWYucmVmZXJlbmNlZS5pZCwgaWQpICYmXG4gICAgICAgIGdyYXBoLmhhc05vZGUocmVmLnJlZmVyZW5jZWUuaWQpIC8vIGluIGNhc2UgdGhlIHJlZmVyZW5jZWUgaXMgYSBkeW5hbWljIHZhcmlhYmxlXG4gICAgICApIHtcbiAgICAgICAgaWYgKCFncmFwaC5oYXNOb2RlKGlkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgZGVwZW5kZW5jeSBncmFwaCBpcyBleHBlY3RlZCB0byBsaW5rIGZyb20gJHtcbiAgICAgICAgICAgICAgcmVmLnJlZmVyZW5jZWUuaWRcbiAgICAgICAgICAgIH0gdG8gJHtpZH0gYnV0ICR7aWR9IGRvZXMgbm90IGV4aXN0LlxuICAgICAgICAgICAgVGhlc2Ugbm9kZXMgZXhpc3Q6ICR7Z3JhcGgubm9kZXMoKS5qb2luKFwiXFxuXCIpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBncmFwaCBzaG91bGQgaGF2ZSBubyBzZWxmLXJlZmVyZW5jZXNcbiAgICAgICAgaWYgKGlkID09PSByZWYucmVmZXJlbmNlZS5pZCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU2tpcHBpbmcgc2VsZi1yZWZlcmVuY2UgZm9yICR7aWR9YCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBBZGRpbmcgZWRnZSBmcm9tICR7cmVmLnJlZmVyZW5jZWUuaWR9IHRvICR7aWR9YCk7XG4gICAgICAgIGdyYXBoLmFkZERpcmVjdGVkRWRnZShyZWYucmVmZXJlbmNlZS5pZCwgaWQsIHsgcmVmIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gV2UgcmVjdXJzaXZlbHkgaW5zcGVjdCBlYWNoIHJlc291cmNlIHZhbHVlIHRvIGZpbmQgcmVmZXJlbmNlcyB0byBvdGhlciB2YWx1ZXNcbiAgLy8gV2UgYWRkIHRoZXNlIHRvIGEgZGVwZW5kZW5jeSBncmFwaCBzbyB0aGF0IHRoZSBwcm9ncmFtbWluZyBjb2RlIGhhcyB0aGUgcmlnaHQgb3JkZXJcbiAgYXN5bmMgZnVuY3Rpb24gYWRkR2xvYmFsRWRnZXMoXG4gICAgX3Njb3BlOiBQcm9ncmFtU2NvcGUsXG4gICAgX2tleTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdmFsdWU6IFRlcnJhZm9ybVJlc291cmNlQmxvY2ssXG4gICkge1xuICAgIGF3YWl0IGFkZEVkZ2VzKGlkLCB2YWx1ZSk7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gYWRkUHJvdmlkZXJFZGdlcyhcbiAgICBfc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgICBfa2V5OiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICB2YWx1ZTogVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgKSB7XG4gICAgYXdhaXQgYWRkRWRnZXMoaWQsIHZhbHVlKTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBhZGROYW1lc3BhY2VkRWRnZXMoXG4gICAgX3Njb3BlOiBQcm9ncmFtU2NvcGUsXG4gICAgX3R5cGU6IHN0cmluZyxcbiAgICBfa2V5OiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICB2YWx1ZTogVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgKSB7XG4gICAgYXdhaXQgYWRkRWRnZXMoaWQsIHZhbHVlKTtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIE9iamVjdC52YWx1ZXMoe1xuICAgICAgLi4uZm9yRWFjaFByb3ZpZGVyKHNjb3BlLCBwbGFuLnByb3ZpZGVyLCBhZGRQcm92aWRlckVkZ2VzKSxcbiAgICAgIC4uLmZvckVhY2hHbG9iYWwoc2NvcGUsIFwidmFyXCIsIHBsYW4udmFyaWFibGUsIGFkZEdsb2JhbEVkZ2VzKSxcbiAgICAgIC8vIGxvY2FscyBhcmUgYSBzcGVjaWFsIGNhc2VcbiAgICAgIC4uLmZvckVhY2hHbG9iYWwoXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBcImxvY2FsXCIsXG4gICAgICAgIEFycmF5LmlzQXJyYXkocGxhbi5sb2NhbHMpXG4gICAgICAgICAgPyBwbGFuLmxvY2Fscy5yZWR1Y2UoKGNhcnJ5LCBsb2NhbHMpID0+ICh7IC4uLmNhcnJ5LCAuLi5sb2NhbHMgfSksIHt9KVxuICAgICAgICAgIDoge30sXG4gICAgICAgIGFkZEdsb2JhbEVkZ2VzLFxuICAgICAgKSxcbiAgICAgIC4uLmZvckVhY2hHbG9iYWwoc2NvcGUsIFwib3V0XCIsIHBsYW4ub3V0cHV0LCBhZGRHbG9iYWxFZGdlcyksXG4gICAgICAuLi5mb3JFYWNoR2xvYmFsKHNjb3BlLCBcIm1vZHVsZVwiLCBwbGFuLm1vZHVsZSwgYWRkR2xvYmFsRWRnZXMpLFxuICAgICAgLi4uZm9yRWFjaE5hbWVzcGFjZWQoc2NvcGUsIHBsYW4ucmVzb3VyY2UsIGFkZE5hbWVzcGFjZWRFZGdlcyksXG4gICAgICAuLi5mb3JFYWNoTmFtZXNwYWNlZChzY29wZSwgcGxhbi5kYXRhLCBhZGROYW1lc3BhY2VkRWRnZXMsIFwiZGF0YVwiKSxcbiAgICB9KS5tYXAoKHsgY29kZTogYWRkRWRnZXNUb0dyYXBoIH0pID0+IGFkZEVkZ2VzVG9HcmFwaChncmFwaCkpLFxuICApO1xuXG4gIGxvZ2dlci5kZWJ1ZyhgR3JhcGg6ICR7SlNPTi5zdHJpbmdpZnkoZ3JhcGgsIG51bGwsIDIpfWApO1xuICBsb2dnZXIuZGVidWcoYFN0YXJ0aW5nIHRvIGFzc2VtYmxlIHRoZSB0eXBlc2NyaXB0IGNvZGVgKTtcbiAgLy8gV2UgdHJhdmVyc2UgdGhlIGRlcGVuZGVuY3kgZ3JhcGggdG8gZ2V0IHRoZSB1bm9yZGVyZWQgSlNPTiBub2RlcyBpbnRvIGFuIG9yZGVyZWQgYXJyYXlcbiAgLy8gd2hlcmUgbm8gbm9kZSBpcyByZWZlcmVuY2VkIGJlZm9yZSBpdCdzIGRlZmluZWRcbiAgLy8gQXMgd2UgY2hlY2sgdGhhdCB0aGUgbm9kZXMgb24gYm90aCBlbmRzIG9mIGFuIGVkZ2UgZXhpc3Qgd2UgY2FuIGJlIHN1cmVcbiAgLy8gdGhhdCBubyBpbmZpbml0ZSBsb29wIGV4aXN0cywgdGhlcmUgY2FuIGJlIG5vIHN0cmF5IGRlcGVuZGVuY3kgb24gYSBub2RlXG4gIGNvbnN0IGV4cHJlc3Npb25zOiB0LlN0YXRlbWVudFtdID0gW107XG4gIGxldCBub2Rlc1RvVmlzaXQgPSBbLi4ubm9kZUlkc107XG4gIC8vIFRoaXMgZW5zdXJlcyB3ZSBkZXRlY3QgY3ljbGVzIGFuZCBkb24ndCBlbmQgdXAgaW4gYW4gZW5kbGVzcyBsb29wXG4gIGxldCBub2Rlc1Zpc2l0ZWRUaGlzSXRlcmF0aW9uID0gMDtcbiAgZG8ge1xuICAgIG5vZGVzVmlzaXRlZFRoaXNJdGVyYXRpb24gPSAwO1xuXG4gICAgLy8gRmluZCBuZXh0IG5vZGVzIHRvIHZpc2l0XG4gICAgY29uc3Qgbm9kZUV4cHJlc3Npb25HZW5lcmF0b3JzID0gZ3JhcGgubWFwTm9kZXMoKG5vZGVJZCwgeyBjb2RlIH0pID0+IHtcbiAgICAgIGlmICghbm9kZXNUb1Zpc2l0LmluY2x1ZGVzKG5vZGVJZCkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW5yZXNvbHZlZERlcGVuZGVuY2llcyA9IGdyYXBoXG4gICAgICAgIC5pbk5laWdoYm9ycyhub2RlSWQpXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IG5vZGVzVG9WaXNpdC5pbmNsdWRlcyhpdGVtKSk7XG5cbiAgICAgIGlmICh1bnJlc29sdmVkRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBub2Rlc1RvVmlzaXQgPSBub2Rlc1RvVmlzaXQuZmlsdGVyKChpZCkgPT4gbm9kZUlkICE9PSBpZCk7XG4gICAgICAgIG5vZGVzVmlzaXRlZFRoaXNJdGVyYXRpb24gPSBub2Rlc1Zpc2l0ZWRUaGlzSXRlcmF0aW9uICsgMTtcblxuICAgICAgICBsb2dnZXIuZGVidWcoYFZpc2l0aW5nIG5vZGUgJHtub2RlSWR9YCk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICAgIC8vIEdlbmVyYXRlIHRoZSBjb2RlIGZvciB0aGUgbm9kZXNcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2Ygbm9kZUV4cHJlc3Npb25HZW5lcmF0b3JzKSB7XG4gICAgICBpZiAoY29kZSkge1xuICAgICAgICBleHByZXNzaW9ucy5wdXNoKC4uLihhd2FpdCBjb2RlKGdyYXBoKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGAke25vZGVzVG9WaXNpdC5sZW5ndGh9IHVudmlzaXRlZCBub2RlczogJHtub2Rlc1RvVmlzaXQuam9pbihcIiwgXCIpfWAsXG4gICAgKTtcbiAgfSB3aGlsZSAobm9kZXNUb1Zpc2l0Lmxlbmd0aCA+IDAgJiYgbm9kZXNWaXNpdGVkVGhpc0l0ZXJhdGlvbiAhPSAwKTtcblxuICBpZiAobm9kZXNUb1Zpc2l0Lmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlcmUgYXJlICR7XG4gICAgICAgIG5vZGVzVG9WaXNpdC5sZW5ndGhcbiAgICAgIH0gdGVycmFmb3JtIGVsZW1lbnRzIHRoYXQgY291bGQgbm90IGJlIHZpc2l0ZWQuXG4gICAgICBUaGlzIGlzIGxpa2VseSBkdWUgdG8gYSBjeWNsZSBpbiB0aGUgZGVwZW5kZW5jeSBncmFwaC5cbiAgICAgIFRoZXNlIG5vZGVzIGFyZTogJHtub2Rlc1RvVmlzaXQuam9pbihcIiwgXCIpfWAsXG4gICAgKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgJHtub2Rlc1RvVmlzaXQubGVuZ3RofSB1bnZpc2l0ZWQgbm9kZXM6ICR7bm9kZXNUb1Zpc2l0LmpvaW4oXCIsIFwiKX1gLFxuICApO1xuXG4gIGNvbnN0IGJhY2tlbmRFeHByZXNzaW9ucyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHBsYW4udGVycmFmb3JtPy5tYXAoKHRlcnJhZm9ybSkgPT5cbiAgICAgICAgYmFja2VuZFRvRXhwcmVzc2lvbihzY29wZSwgdGVycmFmb3JtLmJhY2tlbmQpLFxuICAgICAgKSB8fCBbUHJvbWlzZS5yZXNvbHZlKFtdKV0sXG4gICAgKVxuICApLnJlZHVjZSgoY2FycnksIGl0ZW0pID0+IFsuLi5jYXJyeSwgLi4uaXRlbV0sIFtdKTtcblxuICBsb2dnZXIuZGVidWcoXG4gICAgYFVzaW5nIHRoZXNlIGJhY2tlbmQgZXhwcmVzc2lvbnM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBiYWNrZW5kRXhwcmVzc2lvbnMsXG4gICAgICBudWxsLFxuICAgICAgMixcbiAgICApfWAsXG4gICk7XG5cbiAgLy8gV2UgY29sbGVjdCBhbGwgbW9kdWxlIHNvdXJjZXNcbiAgY29uc3QgbW9kdWxlUmVxdWlyZW1lbnRzID0gW1xuICAgIC4uLm5ldyBTZXQoXG4gICAgICBPYmplY3QudmFsdWVzKHBsYW4ubW9kdWxlIHx8IHt9KS5yZWR1Y2UoXG4gICAgICAgIChjYXJyeSwgbW9kdWxlQmxvY2spID0+IFtcbiAgICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgICAuLi5tb2R1bGVCbG9jay5yZWR1Y2UoXG4gICAgICAgICAgICAoYXJyLCB7IHNvdXJjZSwgdmVyc2lvbiB9KSA9PiBbXG4gICAgICAgICAgICAgIC4uLmFycixcbiAgICAgICAgICAgICAgdmVyc2lvbiA/IGAke3NvdXJjZX1AJHt2ZXJzaW9ufWAgOiBzb3VyY2UsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW10gYXMgc3RyaW5nW10sXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgICAgW10gYXMgc3RyaW5nW10sXG4gICAgICApIHx8IFtdLFxuICAgICksXG4gIF07XG5cbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBGb3VuZCB0aGVzZSBtb2R1bGVzOiAke0pTT04uc3RyaW5naWZ5KG1vZHVsZVJlcXVpcmVtZW50cywgbnVsbCwgMil9YCxcbiAgKTtcblxuICBpZiAoT2JqZWN0LmtleXMocGxhbi52YXJpYWJsZSB8fCB7fSkubGVuZ3RoID4gMCAmJiBleHByZXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgZXhwcmVzc2lvbnNbMF0gPSB0LmFkZENvbW1lbnQoXG4gICAgICBleHByZXNzaW9uc1swXSxcbiAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgYFRlcnJhZm9ybSBWYXJpYWJsZXMgYXJlIG5vdCBhbHdheXMgdGhlIGJlc3QgZml0IGZvciBnZXR0aW5nIGlucHV0cyBpbiB0aGUgY29udGV4dCBvZiBUZXJyYWZvcm0gQ0RLLlxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBhdCBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvdmFyaWFibGVzLWFuZC1vdXRwdXRzI2lucHV0LXZhcmlhYmxlc2AsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHByb3ZpZGVyUmVxdWlyZW1lbnRzID0gZ2V0UHJvdmlkZXJSZXF1aXJlbWVudHMocGxhbik7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgRm91bmQgdGhlc2UgcHJvdmlkZXIgcmVxdWlyZW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgcHJvdmlkZXJSZXF1aXJlbWVudHMsXG4gICAgICBudWxsLFxuICAgICAgMixcbiAgICApfWAsXG4gICk7XG5cbiAgLy8gV2UgYWRkIGEgY29tbWVudCBpZiB0aGVyZSBhcmUgcHJvdmlkZXJzIHdpdGggbWlzc2luZyBzY2hlbWEgaW5mb3JtYXRpb25cbiAgY29uc3QgcHJvdmlkZXJzTGFja2luZ1NjaGVtYSA9IE9iamVjdC5rZXlzKHByb3ZpZGVyUmVxdWlyZW1lbnRzKS5maWx0ZXIoXG4gICAgKHByb3ZpZGVyTmFtZSkgPT5cbiAgICAgIHByb3ZpZGVyTmFtZSAhPT0gXCJ0ZXJyYWZvcm1cIiAmJlxuICAgICAgIU9iamVjdC5rZXlzKHByb3ZpZGVyU2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pLnNvbWUoKHNjaGVtYU5hbWUpID0+XG4gICAgICAgIHNjaGVtYU5hbWUuZW5kc1dpdGgocHJvdmlkZXJOYW1lKSxcbiAgICAgICksXG4gICk7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgJHtcbiAgICAgIHByb3ZpZGVyc0xhY2tpbmdTY2hlbWEubGVuZ3RoXG4gICAgfSBwcm92aWRlcnMgbGFjayBzY2hlbWEgaW5mb3JtYXRpb246ICR7cHJvdmlkZXJzTGFja2luZ1NjaGVtYS5qb2luKFwiLCBcIil9YCxcbiAgKTtcblxuICBpZiAocHJvdmlkZXJzTGFja2luZ1NjaGVtYS5sZW5ndGggPiAwKSB7XG4gICAgZXhwcmVzc2lvbnNbMF0gPSB0LmFkZENvbW1lbnQoXG4gICAgICBleHByZXNzaW9uc1swXSxcbiAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgYFRoZSBmb2xsb3dpbmcgcHJvdmlkZXJzIGFyZSBtaXNzaW5nIHNjaGVtYSBpbmZvcm1hdGlvbiBhbmQgbWlnaHQgbmVlZCBtYW51YWwgYWRqdXN0bWVudHMgdG8gc3ludGhlc2l6ZSBjb3JyZWN0bHk6ICR7cHJvdmlkZXJzTGFja2luZ1NjaGVtYS5qb2luKFxuICAgICAgICBcIiwgXCIsXG4gICAgICApfS5cbkZvciBhIG1vcmUgcHJlY2lzZSBjb252ZXJzaW9uIHBsZWFzZSB1c2UgdGhlIC0tcHJvdmlkZXIgZmxhZyBpbiBjb252ZXJ0LmAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEFsd2F5cyBhZGQgY29uc3RydWN0c1xuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIkNvbnN0cnVjdFwiLFxuICAgIHByb3ZpZGVyOiBcImNvbnN0cnVjdHNcIixcbiAgfSk7XG5cbiAgaWYgKHNjb3BlLmhhc1Rva2VuQmFzZWRUeXBlQ29lcmNpb24pIHtcbiAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVG9rZW5cIixcbiAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBZGQgc3BlY2lmaWMgaW1wb3J0IGZvciBjb2RlQ29udGFpbmVyXG4gIGFkZEltcG9ydEZvckNvZGVDb250YWluZXIoc2NvcGUsIGNvZGVDb250YWluZXIpO1xuICBjb25zdCBjb25zdHJ1Y3RJbXBvcnRzID0gYnVpbGRJbXBvcnRzKHNjb3BlLmltcG9ydGFibGVzKTtcblxuICBjb25zdCBjb2RlID0gWy4uLihiYWNrZW5kRXhwcmVzc2lvbnMgfHwgW10pLCAuLi5leHByZXNzaW9uc107XG4gIGNvbnN0IGNvbmZpZ1R5cGVOYW1lID1cbiAgICBPYmplY3Qua2V5cyhzY29wZS50b3BMZXZlbENvbmZpZykubGVuZ3RoID4gMCA/IFwiTXlDb25maWdcIiA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBjbGFzc0NvbmZpZyA9IGNvbmZpZ1R5cGVOYW1lXG4gICAgPyBbZ2VuZXJhdGVDb25maWdUeXBlKGNvbmZpZ1R5cGVOYW1lLCBzY29wZS50b3BMZXZlbENvbmZpZyldXG4gICAgOiBbXTtcblxuICAvLyBXZSBzcGxpdCB1cCB0aGUgZ2VuZXJhdGVkIGNvZGUgc28gdGhhdCB1c2VycyBjYW4gaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB3aGF0IHRvIGluc2VydCB3aGVyZVxuICByZXR1cm4ge1xuICAgIC8vIFRPRE86IFJlbW92ZSBpbXBvcnRzIGFuZCBjb2RlIGJlY2F1c2Ugcm9zZXR0YSB3b24ndCBiZSBhYmxlIHRvIHRyYW5zbGF0ZSB0aGVtXG4gICAgYWxsOiBhd2FpdCBnZW4oW1xuICAgICAgLi4uY29uc3RydWN0SW1wb3J0cyxcbiAgICAgIC4uLm1vZHVsZUltcG9ydHMocGxhbi5tb2R1bGUpLFxuICAgICAgLi4uY2xhc3NDb25maWcsXG4gICAgICB3cmFwQ29kZUluQ29uc3RydWN0b3IoXG4gICAgICAgIGNvZGVDb250YWluZXIsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIFwiTXlDb252ZXJ0ZWRDb2RlXCIsXG4gICAgICAgIGNvbmZpZ1R5cGVOYW1lLFxuICAgICAgKSxcbiAgICBdKSxcbiAgICBpbXBvcnRzOiBhd2FpdCBnZW4oWy4uLmNvbnN0cnVjdEltcG9ydHMsIC4uLm1vZHVsZUltcG9ydHMocGxhbi5tb2R1bGUpXSksXG4gICAgY29kZTogYXdhaXQgZ2VuKGNvZGUpLFxuICAgIHByb3ZpZGVyczogT2JqZWN0LmVudHJpZXMocHJvdmlkZXJSZXF1aXJlbWVudHMpLm1hcCgoW3NvdXJjZSwgdmVyc2lvbl0pID0+XG4gICAgICB2ZXJzaW9uID09PSBcIipcIiA/IHNvdXJjZSA6IGAke3NvdXJjZX1AJHt2ZXJzaW9ufWAsXG4gICAgKSxcbiAgICBtb2R1bGVzOiBtb2R1bGVSZXF1aXJlbWVudHMsXG4gICAgLy8gV2UgdHJhY2sgc29tZSB1c2FnZSBkYXRhIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyB1c2VkXG4gICAgc3RhdHM6IHtcbiAgICAgIG51bWJlck9mTW9kdWxlczogbW9kdWxlUmVxdWlyZW1lbnRzLmxlbmd0aCxcbiAgICAgIG51bWJlck9mUHJvdmlkZXJzOiBPYmplY3Qua2V5cyhwcm92aWRlclJlcXVpcmVtZW50cykubGVuZ3RoLFxuICAgICAgcmVzb3VyY2VzOiByZXNvdXJjZVN0YXRzKHBsYW4ucmVzb3VyY2UgfHwge30pLFxuICAgICAgZGF0YTogcmVzb3VyY2VTdGF0cyhwbGFuLmRhdGEgfHwge30pLFxuICAgICAgY29udmVydGVkTGluZXM6IGhjbC5zcGxpdChcIlxcblwiKS5sZW5ndGgsXG4gICAgfSxcbiAgfTtcbn1cblxudHlwZSBGaWxlID0geyBjb250ZW50czogc3RyaW5nOyBmaWxlTmFtZTogc3RyaW5nIH07XG5jb25zdCB0cmFuc2xhdG9ycyA9IHtcbiAgcHl0aG9uOiB7XG4gICAgdmlzaXRvcjogKCkgPT4gbmV3IHJvc2V0dGEuUHl0aG9uVmlzaXRvcigpLFxuICAgIHBvc3RUcmFuc2xhdGlvbk11dGF0aW9uOiByZXBsYWNlUHl0aG9uSW1wb3J0cyxcbiAgfSxcbiAgamF2YToge1xuICAgIHZpc2l0b3I6ICgpID0+IG5ldyByb3NldHRhLkphdmFWaXNpdG9yKCksXG4gICAgcG9zdFRyYW5zbGF0aW9uTXV0YXRpb246IHJlcGxhY2VKYXZhSW1wb3J0cyxcbiAgfSxcbiAgY3NoYXJwOiB7XG4gICAgdmlzaXRvcjogKCkgPT4gbmV3IHJvc2V0dGEuQ1NoYXJwVmlzaXRvcigpLFxuICAgIHBvc3RUcmFuc2xhdGlvbk11dGF0aW9uOiByZXBsYWNlQ3NoYXJwSW1wb3J0cyxcbiAgfSxcbiAgZ286IHtcbiAgICB2aXNpdG9yOiAoKSA9PiBuZXcgcm9zZXR0YS5Hb1Zpc2l0b3IoKSxcbiAgICBwb3N0VHJhbnNsYXRpb25NdXRhdGlvbjogcmVwbGFjZUdvSW1wb3J0cyxcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHRyYW5zbGF0b3JGb3JMYW5ndWFnZShsYW5ndWFnZToga2V5b2YgdHlwZW9mIHRyYW5zbGF0b3JzKSB7XG4gIHJldHVybiAoZmlsZTogRmlsZSwgdGhyb3dPblRyYW5zbGF0aW9uRXJyb3I6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCB7IHZpc2l0b3IsIHBvc3RUcmFuc2xhdGlvbk11dGF0aW9uIH0gPSB0cmFuc2xhdG9yc1tsYW5ndWFnZV07XG4gICAgY29uc3QgeyB0cmFuc2xhdGlvbiwgZGlhZ25vc3RpY3MgfSA9IHJvc2V0dGEudHJhbnNsYXRlVHlwZVNjcmlwdChcbiAgICAgIGZpbGUsXG4gICAgICB2aXNpdG9yKCksXG4gICAgICB0aHJvd09uVHJhbnNsYXRpb25FcnJvciA/IHsgaW5jbHVkZUNvbXBpbGVyRGlhZ25vc3RpY3M6IHRydWUgfSA6IHt9LFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICB0aHJvd09uVHJhbnNsYXRpb25FcnJvciAmJlxuICAgICAgZGlhZ25vc3RpY3MuZmlsdGVyKChkaWFnKSA9PiBkaWFnLmlzRXJyb3IpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ291bGQgbm90IHRyYW5zbGF0ZSBUUyB0byAke2xhbmd1YWdlfTpcXG4ke2ZpbGUuY29udGVudHN9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgdHJhbnNsYXRlIFRTIHRvICR7bGFuZ3VhZ2V9OiAke2RpYWdub3N0aWNzXG4gICAgICAgICAgLm1hcCgoZGlhZykgPT4gZGlhZy5mb3JtYXR0ZWRNZXNzYWdlKVxuICAgICAgICAgIC5qb2luKFwiXFxuXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwb3N0VHJhbnNsYXRpb25NdXRhdGlvbih0cmFuc2xhdGlvbik7XG4gIH07XG59XG5cbnR5cGUgQ29udmVydE9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2UgdG8gY29udmVydCB0b1xuICAgKi9cbiAgbGFuZ3VhZ2U6IGtleW9mIHR5cGVvZiB0cmFuc2xhdG9ycyB8IFwidHlwZXNjcmlwdFwiO1xuICAvKipcbiAgICogVGhlIHByb3ZpZGVyIHNjaGVtYSB0byB1c2UgZm9yIGNvbnZlcnNpb25cbiAgICovXG4gIHByb3ZpZGVyU2NoZW1hOiBQcm92aWRlclNjaGVtYTtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIGNsYXNzIHRvIGV4dGVuZCBmcm9tLiBEZWZhdWx0cyB0byBgY29uc3RydWN0cy5Db25zdHJ1Y3RgXG4gICAqL1xuICBjb2RlQ29udGFpbmVyPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdHJhbnNsYXRpb24gZmFpbHNcbiAgICogRGVmYXVsdHMgdG8gZmFsc2VcbiAgICovXG4gIHRocm93T25UcmFuc2xhdGlvbkVycm9yPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb252ZXJ0KFxuICBoY2w6IHN0cmluZyxcbiAge1xuICAgIGxhbmd1YWdlLFxuICAgIHByb3ZpZGVyU2NoZW1hLFxuICAgIHRocm93T25UcmFuc2xhdGlvbkVycm9yID0gZmFsc2UsXG4gICAgY29kZUNvbnRhaW5lciA9IFwiY2RrdG4uVGVycmFmb3JtU3RhY2tcIixcbiAgfTogQ29udmVydE9wdGlvbnMsXG4pIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBcInRlcnJhZm9ybS50ZlwiO1xuICBjb25zdCB0cmFuc2xhdGVyID1cbiAgICBsYW5ndWFnZSA9PT0gXCJ0eXBlc2NyaXB0XCJcbiAgICAgID8gKGZpbGU6IEZpbGUsIF90aHJvd09uVHJhbnNsYXRpb25FcnJvcjogYm9vbGVhbikgPT4gZmlsZS5jb250ZW50c1xuICAgICAgOiB0cmFuc2xhdG9yRm9yTGFuZ3VhZ2UobGFuZ3VhZ2UpO1xuXG4gIGlmICghdHJhbnNsYXRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGxhbmd1YWdlIHVzZWQ6IFwiICsgbGFuZ3VhZ2UpO1xuICB9XG5cbiAgY29uc3QgdHNDb2RlID0gYXdhaXQgY29udmVydFRvVHlwZXNjcmlwdChoY2wsIHByb3ZpZGVyU2NoZW1hLCBjb2RlQ29udGFpbmVyKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnRzQ29kZSxcbiAgICBhbGw6IHRyYW5zbGF0ZXIoXG4gICAgICB7IGZpbGVOYW1lLCBjb250ZW50czogdHNDb2RlLmFsbCB9LFxuICAgICAgdGhyb3dPblRyYW5zbGF0aW9uRXJyb3IsXG4gICAgKSxcbiAgICBpbXBvcnRzOiB0cmFuc2xhdGVyKHsgZmlsZU5hbWUsIGNvbnRlbnRzOiB0c0NvZGUuaW1wb3J0cyB9LCBmYWxzZSksXG4gICAgY29kZTogdHJhbnNsYXRlcih7IGZpbGVOYW1lLCBjb250ZW50czogdHNDb2RlLmNvZGUgfSwgZmFsc2UpLFxuICAgIHN0YXRzOiB7IC4uLnRzQ29kZS5zdGF0cywgbGFuZ3VhZ2UgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcnJhZm9ybUNvbmZpZ0Zyb21EaXIoaW1wb3J0UGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUoaW1wb3J0UGF0aCk7XG4gIGNvbnN0IGZpbGVDb250ZW50cyA9IGdsb2JcbiAgICAuc3luYyhcIi4vKi50ZlwiLCB7IGN3ZDogYWJzUGF0aCB9KVxuICAgIC5tYXAoKHApID0+IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoYWJzUGF0aCwgcCksIFwidXRmOFwiKSk7XG5cbiAgcmV0dXJuIGZpbGVDb250ZW50cy5qb2luKFwiXFxuXCIpO1xufVxuXG50eXBlIENka3RmSnNvbiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYge1xuICB0ZXJyYWZvcm1Qcm92aWRlcnM6IGFueVtdO1xuICB0ZXJyYWZvcm1Nb2R1bGVzOiBhbnlbXTtcbn07XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydFByb2plY3QoXG4gIGNvbWJpbmVkSGNsOiBzdHJpbmcsXG4gIHsgbGFuZ3VhZ2UsIHByb3ZpZGVyU2NoZW1hIH06IENvbnZlcnRPcHRpb25zLFxuKSB7XG4gIGlmIChsYW5ndWFnZSAhPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBsYW5ndWFnZSB1c2VkOiBcIiArIGxhbmd1YWdlKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpbXBvcnRzLFxuICAgIGNvZGUsXG4gICAgcHJvdmlkZXJzLFxuICAgIG1vZHVsZXM6IHRmTW9kdWxlcyxcbiAgICBzdGF0cyxcbiAgfSA9IGF3YWl0IGNvbnZlcnQoY29tYmluZWRIY2wsIHtcbiAgICBsYW5ndWFnZSxcbiAgICBwcm92aWRlclNjaGVtYSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlOiAoaW5wdXRNYWluRmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpbXBvcnRNYWluRmlsZSA9IFtpbXBvcnRzLCBpbnB1dE1haW5GaWxlXS5qb2luKFwiXFxuXCIpO1xuICAgICAgY29uc3Qgb3V0cHV0TWFpbkZpbGUgPSBpbXBvcnRNYWluRmlsZS5yZXBsYWNlKENPREVfTUFSS0VSLCBjb2RlKTtcbiAgICAgIHJldHVybiBwcmV0dGllci5mb3JtYXQob3V0cHV0TWFpbkZpbGUsIHsgcGFyc2VyOiBcImJhYmVsXCIgfSk7XG4gICAgfSxcbiAgICBjZGt0Zkpzb246IChpbnB1dENka3RmSnNvbjogQ2RrdGZKc29uKSA9PiB7XG4gICAgICBjb25zdCBjZGt0Zkpzb24gPSB7IC4uLmlucHV0Q2RrdGZKc29uIH07XG4gICAgICBjZGt0Zkpzb24udGVycmFmb3JtUHJvdmlkZXJzID0gcHJvdmlkZXJzO1xuICAgICAgY2RrdGZKc29uLnRlcnJhZm9ybU1vZHVsZXMgPSB0Zk1vZHVsZXM7XG4gICAgICByZXR1cm4gY2RrdGZKc29uO1xuICAgIH0sXG4gICAgc3RhdHMsXG4gIH07XG59XG5cbmV4cG9ydCB7IGlzUmVnaXN0cnlNb2R1bGUsIGF0dHJpYnV0ZU5hbWVUb0Nka3RmTmFtZSB9O1xuIl19
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDhDQUF3QztBQUN4QyxrRUFJbUM7QUFna0IxQixpR0Fua0JQLHFDQUFnQixPQW1rQk87QUE5akJ6QixnREFBa0M7QUFDbEMsd0RBQWdDO0FBQ2hDLDJDQUE2QjtBQUM3QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLDJDQUEyQztBQUMzQyxzREFBd0M7QUFHeEMscUNBQWtDO0FBQ2xDLDZDQUFrRDtBQUNsRCw2Q0Flc0I7QUFFdEIsMkNBS3FCO0FBQ3JCLHlDQUFxRDtBQUNyRCxtQ0FBaUM7QUFFakMsNkNBQXdEO0FBeWhCN0IseUdBemhCbEIscUNBQXdCLE9BeWhCa0I7QUF4aEJuRCx5RUFLb0M7QUFFcEMsMkNBQTRDO0FBRS9CLFFBQUEsV0FBVyxHQUFHLDBCQUEwQixDQUFDO0FBRS9DLEtBQUssVUFBVSxZQUFZLENBQUMsR0FBVztJQUM1QyxjQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLHlDQUF5QztJQUN6QyxJQUFJLElBQTZCLENBQUM7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsSUFBSSxHQUFHLE1BQU0sSUFBQSxnQkFBSyxFQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGNBQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FDYixrU0FBa1MsQ0FDblMsQ0FBQztJQUNKLENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsSUFBSSxJQUE0QixDQUFDO0lBQ2pDLElBQUksQ0FBQztRQUNILElBQUksR0FBRyxlQUFNLENBQUMs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LEVBQUU7WUFDdkMsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7WUFDekMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztZQUN2QyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsS0FBSztLQUNOLENBQUM7QUFDSixDQUFDO0FBakNELHdDQWlDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJAY2RrdG4vaGNsMmpzb25cIjtcbmltcG9ydCB7XG4gIGlzUmVnaXN0cnlNb2R1bGUsXG4gIFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yLFxuICBDb2RlTWFrZXIsXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5cbmltcG9ydCAqIGFzIHQgZnJvbSBcIkBiYWJlbC90eXBlc1wiO1xuaW1wb3J0IHByZXR0aWVyIGZyb20gXCJwcmV0dGllclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZ2xvYiBmcm9tIFwiZ2xvYlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBEaXJlY3RlZEdyYXBoIH0gZnJvbSBcImdyYXBob2xvZ3lcIjtcbmltcG9ydCAqIGFzIHJvc2V0dGEgZnJvbSBcImpzaWktcm9zZXR0YVwiO1xuaW1wb3J0ICogYXMgeiBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgZmluZFVzZWRSZWZlcmVuY2VzIH0gZnJvbSBcIi4vcmVmZXJlbmNlc1wiO1xuaW1wb3J0IHtcbiAgYmFja2VuZFRvRXhwcmVzc2lvbixcbiAgZ2VuLFxuICBsb2NhbCxcbiAgbW9kdWxlSW1wb3J0cyxcbiAgbW9kdWxlcyxcbiAgb3V0cHV0LFxuICBwcm92aWRlcixcbiAgcmVzb3VyY2UsXG4gIHZhcmlhYmxlLFxuICB3cmFwQ29kZUluQ29uc3RydWN0b3IsXG4gIGFkZEltcG9ydEZvckNvZGVDb250YWluZXIsXG4gIGJ1aWxkSW1wb3J0cyxcbiAgZ2VuZXJhdGVDb25maWdUeXBlLFxuICBpbXBvcnRzLFxufSBmcm9tIFwiLi9nZW5lcmF0aW9uXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1SZXNvdXJjZUJsb2NrLCBQcm9ncmFtU2NvcGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZm9yRWFjaFByb3ZpZGVyLFxuICBmb3JFYWNoR2xvYmFsLFxuICBmb3JFYWNoTmFtZXNwYWNlZCxcbiAgcmVzb3VyY2VTdGF0cyxcbn0gZnJvbSBcIi4vaXRlcmF0aW9uXCI7XG5pbXBvcnQgeyBnZXRQcm92aWRlclJlcXVpcmVtZW50cyB9IGZyb20gXCIuL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgRlFQTiB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBhdHRyaWJ1dGVOYW1lVG9DZGt0Zk5hbWUgfSBmcm9tIFwiLi9nZW5lcmF0aW9uXCI7XG5pbXBvcnQge1xuICByZXBsYWNlQ3NoYXJwSW1wb3J0cyxcbiAgcmVwbGFjZUdvSW1wb3J0cyxcbiAgcmVwbGFjZUphdmFJbXBvcnRzLFxuICByZXBsYWNlUHl0aG9uSW1wb3J0cyxcbn0gZnJvbSBcIi4vanNpaS1yb3NldHRhLXdvcmthcm91bmRzXCI7XG5pbXBvcnQgeyBQcm92aWRlclNjaGVtYSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgZm9yRWFjaEltcG9ydCB9IGZyb20gXCIuL2l0ZXJhdGlvblwiO1xuXG5leHBvcnQgY29uc3QgQ09ERV9NQVJLRVIgPSBcIi8vIGRlZmluZSByZXNvdXJjZXMgaGVyZVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGFyc2VkSGNsKGhjbDogc3RyaW5nKSB7XG4gIGxvZ2dlci5kZWJ1ZyhgUGFyc2luZyBIQ0w6ICR7aGNsfWApO1xuICAvLyBHZXQgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIEhDTFxuICBsZXQganNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRyeSB7XG4gICAganNvbiA9IGF3YWl0IHBhcnNlKFwidGVycmFmb3JtLnRmXCIsIGhjbCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIEhDTDogJHtlcnJ9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVycm9yOiBDb3VsZCBub3QgcGFyc2UgSENMLCB0aGlzIG1lYW5zIGVpdGhlciB0aGF0IHRoZSBIQ0wgcGFzc2VkIGlzIGludmFsaWQgb3IgdGhhdCB5b3UgZm91bmQgYSBidWcuIElmIHRoZSBIQ0wgc2VlbXMgdmFsaWQsIHBsZWFzZSBmaWxlIGEgYnVnIHVuZGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLWNvbnN0cnVjdHMvY2RrLXRlcnJhaW4vaXNzdWVzL25ldz9hc3NpZ25lZXM9JmxhYmVscz1idWclMkMrbmV3JTJDK2ZlYXR1cmUlMkZjb252ZXJ0JnRlbXBsYXRlPWJ1Zy1yZXBvcnQueW1sJnRpdGxlPWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEVuc3VyZSB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBtYXRjaGVzIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmVcbiAgbGV0IHBsYW46IHouaW5mZXI8dHlwZW9mIHNjaGVtYT47XG4gIHRyeSB7XG4gICAgcGxhbiA9IHNjaGVtYS5wYXJzZShqc29uKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogSENMLUpTT04gZG9lcyBub3QgY29uZm9ybSB0byBzY2hlbWEuIFRoaXMgaXMgbm90IGV4cGVjdGVkLCBwbGVhc2UgZmlsZSBhIGJ1ZyB1bmRlciBodHRwczovL2dpdGh1Yi5jb20vb3Blbi1jb25zdHJ1Y3RzL2Nkay10ZXJyYWluL2lzc3Vlcy9uZXc/YXNzaWduZWVzPSZsYWJlbHM9YnVnJTJDK25ldyUyQytmZWF0dXJlJTJGY29udmVydCZ0ZW1wbGF0ZT1idWctcmVwb3J0LnltbCZ0aXRsZT1cblBsZWFzZSBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb246XG4ke0pTT04uc3RyaW5naWZ5KChlcnIgYXMgei5ab2RFcnJvcikuaXNzdWVzKX1gKTtcbiAgfVxuXG4gIHJldHVybiBwbGFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VQcm92aWRlclJlcXVpcmVtZW50cyhoY2w6IHN0cmluZykge1xuICBsb2dnZXIuZGVidWcoXCJQYXJzaW5nIHByb3ZpZGVyIHJlcXVpcmVtZW50c1wiKTtcbiAgY29uc3QgcGxhbiA9IGF3YWl0IGdldFBhcnNlZEhjbChoY2wpO1xuICByZXR1cm4gZ2V0UHJvdmlkZXJSZXF1aXJlbWVudHMocGxhbik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb252ZXJ0VG9UeXBlc2NyaXB0KFxuICBoY2w6IHN0cmluZyxcbiAgcHJvdmlkZXJTY2hlbWE6IFByb3ZpZGVyU2NoZW1hLFxuICBjb2RlQ29udGFpbmVyOiBzdHJpbmcsXG4pIHtcbiAgbG9nZ2VyLmRlYnVnKFwiQ29udmVydGluZyB0byB0eXBlc2NyaXB0XCIpO1xuICBjb25zdCBwbGFuID0gYXdhaXQgZ2V0UGFyc2VkSGNsKGhjbCk7XG5cbiAgLy8gRWFjaCBrZXkgaW4gdGhlIHNjb3BlIG5lZWRzIHRvIGJlIHVuaXF1ZSwgdGhlcmVmb3JlIHdlIHNhdmUgdGhlbSBpbiBhIHNldFxuICAvLyBFYWNoIHZhcmlhYmxlIG5lZWRzIHRvIGJlIHVuaXF1ZSBhcyB3ZWxsLCB3ZSBzYXZlIHRoZW0gaW4gYSByZWNvcmQgc28gd2UgY2FuIGlkZW50aWZ5IGlmIHR3byB2YXJpYWJsZXMgYXJlIHRoZSBzYW1lXG4gIGNvbnN0IHNjb3BlOiBQcm9ncmFtU2NvcGUgPSB7XG4gICAgcHJvdmlkZXJTY2hlbWEsXG4gICAgcHJvdmlkZXJHZW5lcmF0b3I6IE9iamVjdC5rZXlzKFxuICAgICAgcHJvdmlkZXJTY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSxcbiAgICApLnJlZHVjZSgoY2FycnksIGZxcG4pID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyR2VuZXJhdG9yID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yKFxuICAgICAgICBuZXcgQ29kZU1ha2VyKCksXG4gICAgICAgIHByb3ZpZGVyU2NoZW1hLFxuICAgICAgKTtcbiAgICAgIHByb3ZpZGVyR2VuZXJhdG9yLmJ1aWxkUmVzb3VyY2VNb2RlbHMoZnFwbiBhcyBGUVBOKTsgLy8gY2FuJ3QgdXNlIHRoYXQgdHlwZSBvbiB0aGUga2V5cyB5ZXQsIHNpbmNlIHdlIGFyZSBub3Qgb24gVFMgPj00LjQgeWV0IDpzYWRjYXQ6XG4gICAgICByZXR1cm4geyAuLi5jYXJyeSwgW2ZxcG5dOiBwcm92aWRlckdlbmVyYXRvciB9O1xuICAgIH0sIHt9KSxcbiAgICBjb25zdHJ1Y3RzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICB2YXJpYWJsZXM6IHt9LFxuICAgIGhhc1Rva2VuQmFzZWRUeXBlQ29lcmNpb246IGZhbHNlLFxuICAgIG5vZGVJZHM6IFtdLFxuICAgIGltcG9ydGFibGVzOiBbXSxcbiAgICB0b3BMZXZlbENvbmZpZzoge30sXG4gIH07XG5cbiAgY29uc3QgZ3JhcGggPSBuZXcgRGlyZWN0ZWRHcmFwaDx7XG4gICAgY29kZTogKFxuICAgICAgZzogRGlyZWN0ZWRHcmFwaDxhbnk+LFxuICAgICkgPT4gUHJvbWlzZTxBcnJheTx0LlN0YXRlbWVudCB8IHQuVmFyaWFibGVEZWNsYXJhdGlvbj4+O1xuICB9PigpO1xuXG4gIC8vIEdldCBhbGwgaXRlbXMgaW4gdGhlIEpTT04gYXMgYSBtYXAgb2YgaWQgdG8gZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgdGhlIEFTVFxuICAvLyBXZSB3aWxsIHVzZSB0aGlzIHRvIGNvbnN0cnVjdCB0aGUgbm9kZXMgZm9yIGEgZGVwZW5kZW5jeSBncmFwaFxuICAvLyBXZSBuZWVkIHRvIHVzZSBhIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB0aGUgc2FtZSBub2RlIGhhcyBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb24gYmFzZWQgb24gaWYgaXQncyByZWZlcmVuY2VkIGJ5IGFub3RoZXIgb25lXG4gIGNvbnN0IG5vZGVNYXA6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgY29kZTogKFxuICAgICAgICBnOiB0eXBlb2YgZ3JhcGgsXG4gICAgICApID0+IFByb21pc2U8QXJyYXk8dC5TdGF0ZW1lbnQgfCB0LlZhcmlhYmxlRGVjbGFyYXRpb24+PjtcbiAgICAgIHZhbHVlOiB1bmtub3duO1xuICAgIH1cbiAgPiA9IHtcbiAgICAuLi5mb3JFYWNoUHJvdmlkZXIoc2NvcGUsIHBsYW4ucHJvdmlkZXIsIHByb3ZpZGVyKSxcbiAgICAuLi5mb3JFYWNoR2xvYmFsKHNjb3BlLCBcInZhclwiLCBwbGFuLnZhcmlhYmxlLCB2YXJpYWJsZSksXG4gICAgLy8gbG9jYWxzIGFyZSBhIHNwZWNpYWwgY2FzZVxuICAgIC4uLmZvckVhY2hHbG9iYWwoXG4gICAgICBzY29wZSxcbiAgICAgIFwibG9jYWxcIixcbiAgICAgIEFycmF5LmlzQXJyYXkocGxhbi5sb2NhbHMpXG4gICAgICAgID8gcGxhbi5sb2NhbHMucmVkdWNlKChjYXJyeSwgbG9jYWxzKSA9PiAoeyAuLi5jYXJyeSwgLi4ubG9jYWxzIH0pLCB7fSlcbiAgICAgICAgOiB7fSxcbiAgICAgIGxvY2FsLFxuICAgICksXG4gICAgLi4uZm9yRWFjaEdsb2JhbChzY29wZSwgXCJvdXRcIiwgcGxhbi5vdXRwdXQsIG91dHB1dCksXG4gICAgLi4uZm9yRWFjaEdsb2JhbChzY29wZSwgXCJtb2R1bGVcIiwgcGxhbi5tb2R1bGUsIG1vZHVsZXMpLFxuICAgIC4uLmZvckVhY2hJbXBvcnQoc2NvcGUsIFwiaW1wb3J0XCIsIHBsYW4uaW1wb3J0LCBpbXBvcnRzKSxcbiAgICAuLi5mb3JFYWNoTmFtZXNwYWNlZChzY29wZSwgcGxhbi5yZXNvdXJjZSwgcmVzb3VyY2UpLFxuICAgIC4uLmZvckVhY2hOYW1lc3BhY2VkKHNjb3BlLCBwbGFuLmRhdGEsIHJlc291cmNlLCBcImRhdGFcIiksXG4gIH07XG5cbiAgLy8gQWRkIGFsbCBub2RlcyB0byB0aGUgZGVwZW5kZW5jeSBncmFwaCBzbyB3ZSBjYW4gZGV0ZWN0IGlmIGFuIGVkZ2UgaXMgYWRkZWQgZm9yIGFuIHVua25vd24gbGlua1xuICBPYmplY3QuZW50cmllcyhub2RlTWFwKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEFkZGluZyBub2RlICcke2tleX0nIHRvIGdyYXBoYCk7XG4gICAgZ3JhcGguYWRkTm9kZShrZXksIHZhbHVlKTtcbiAgfSk7XG5cbiAgLy8gRmluZGluZyByZWZlcmVuY2VzIGJlY29tZXMgZWFzaWVyIG9mIHRoZSB0byBiZSByZWZlcmVuY2VkIGlkcyBhcmUgYWxyZWFkeSBrbm93blxuICBjb25zdCBub2RlSWRzID0gT2JqZWN0LmtleXMobm9kZU1hcCk7XG4gIHNjb3BlLm5vZGVJZHMgPSBub2RlSWRzO1xuICBhc3luYyBmdW5jdGlvbiBhZGRFZGdlcyhpZDogc3RyaW5nLCB2YWx1ZTogVGVycmFmb3JtUmVzb3VyY2VCbG9jaykge1xuICAgIChhd2FpdCBmaW5kVXNlZFJlZmVyZW5jZXMobm9kZUlkcywgdmFsdWUpKS5mb3JFYWNoKChyZWYpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWdyYXBoLmhhc0RpcmVjdGVkRWRnZShyZWYucmVmZXJlbmNlZS5pZCwgaWQpICYmXG4gICAgICAgIGdyYXBoLmhhc05vZGUocmVmLnJlZmVyZW5jZWUuaWQpIC8vIGluIGNhc2UgdGhlIHJlZmVyZW5jZWUgaXMgYSBkeW5hbWljIHZhcmlhYmxlXG4gICAgICApIHtcbiAgICAgICAgaWYgKCFncmFwaC5oYXNOb2RlKGlkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgZGVwZW5kZW5jeSBncmFwaCBpcyBleHBlY3RlZCB0byBsaW5rIGZyb20gJHtcbiAgICAgICAgICAgICAgcmVmLnJlZmVyZW5jZWUuaWRcbiAgICAgICAgICAgIH0gdG8gJHtpZH0gYnV0ICR7aWR9IGRvZXMgbm90IGV4aXN0LlxuICAgICAgICAgICAgVGhlc2Ugbm9kZXMgZXhpc3Q6ICR7Z3JhcGgubm9kZXMoKS5qb2luKFwiXFxuXCIpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBncmFwaCBzaG91bGQgaGF2ZSBubyBzZWxmLXJlZmVyZW5jZXNcbiAgICAgICAgaWYgKGlkID09PSByZWYucmVmZXJlbmNlZS5pZCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU2tpcHBpbmcgc2VsZi1yZWZlcmVuY2UgZm9yICR7aWR9YCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBBZGRpbmcgZWRnZSBmcm9tICR7cmVmLnJlZmVyZW5jZWUuaWR9IHRvICR7aWR9YCk7XG4gICAgICAgIGdyYXBoLmFkZERpcmVjdGVkRWRnZShyZWYucmVmZXJlbmNlZS5pZCwgaWQsIHsgcmVmIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gV2UgcmVjdXJzaXZlbHkgaW5zcGVjdCBlYWNoIHJlc291cmNlIHZhbHVlIHRvIGZpbmQgcmVmZXJlbmNlcyB0byBvdGhlciB2YWx1ZXNcbiAgLy8gV2UgYWRkIHRoZXNlIHRvIGEgZGVwZW5kZW5jeSBncmFwaCBzbyB0aGF0IHRoZSBwcm9ncmFtbWluZyBjb2RlIGhhcyB0aGUgcmlnaHQgb3JkZXJcbiAgYXN5bmMgZnVuY3Rpb24gYWRkR2xvYmFsRWRnZXMoXG4gICAgX3Njb3BlOiBQcm9ncmFtU2NvcGUsXG4gICAgX2tleTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdmFsdWU6IFRlcnJhZm9ybVJlc291cmNlQmxvY2ssXG4gICkge1xuICAgIGF3YWl0IGFkZEVkZ2VzKGlkLCB2YWx1ZSk7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gYWRkUHJvdmlkZXJFZGdlcyhcbiAgICBfc2NvcGU6IFByb2dyYW1TY29wZSxcbiAgICBfa2V5OiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICB2YWx1ZTogVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgKSB7XG4gICAgYXdhaXQgYWRkRWRnZXMoaWQsIHZhbHVlKTtcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBhZGROYW1lc3BhY2VkRWRnZXMoXG4gICAgX3Njb3BlOiBQcm9ncmFtU2NvcGUsXG4gICAgX3R5cGU6IHN0cmluZyxcbiAgICBfa2V5OiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICB2YWx1ZTogVGVycmFmb3JtUmVzb3VyY2VCbG9jayxcbiAgKSB7XG4gICAgYXdhaXQgYWRkRWRnZXMoaWQsIHZhbHVlKTtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIE9iamVjdC52YWx1ZXMoe1xuICAgICAgLi4uZm9yRWFjaFByb3ZpZGVyKHNjb3BlLCBwbGFuLnByb3ZpZGVyLCBhZGRQcm92aWRlckVkZ2VzKSxcbiAgICAgIC4uLmZvckVhY2hHbG9iYWwoc2NvcGUsIFwidmFyXCIsIHBsYW4udmFyaWFibGUsIGFkZEdsb2JhbEVkZ2VzKSxcbiAgICAgIC8vIGxvY2FscyBhcmUgYSBzcGVjaWFsIGNhc2VcbiAgICAgIC4uLmZvckVhY2hHbG9iYWwoXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBcImxvY2FsXCIsXG4gICAgICAgIEFycmF5LmlzQXJyYXkocGxhbi5sb2NhbHMpXG4gICAgICAgICAgPyBwbGFuLmxvY2Fscy5yZWR1Y2UoKGNhcnJ5LCBsb2NhbHMpID0+ICh7IC4uLmNhcnJ5LCAuLi5sb2NhbHMgfSksIHt9KVxuICAgICAgICAgIDoge30sXG4gICAgICAgIGFkZEdsb2JhbEVkZ2VzLFxuICAgICAgKSxcbiAgICAgIC4uLmZvckVhY2hHbG9iYWwoc2NvcGUsIFwib3V0XCIsIHBsYW4ub3V0cHV0LCBhZGRHbG9iYWxFZGdlcyksXG4gICAgICAuLi5mb3JFYWNoR2xvYmFsKHNjb3BlLCBcIm1vZHVsZVwiLCBwbGFuLm1vZHVsZSwgYWRkR2xvYmFsRWRnZXMpLFxuICAgICAgLi4uZm9yRWFjaE5hbWVzcGFjZWQoc2NvcGUsIHBsYW4ucmVzb3VyY2UsIGFkZE5hbWVzcGFjZWRFZGdlcyksXG4gICAgICAuLi5mb3JFYWNoTmFtZXNwYWNlZChzY29wZSwgcGxhbi5kYXRhLCBhZGROYW1lc3BhY2VkRWRnZXMsIFwiZGF0YVwiKSxcbiAgICB9KS5tYXAoKHsgY29kZTogYWRkRWRnZXNUb0dyYXBoIH0pID0+IGFkZEVkZ2VzVG9HcmFwaChncmFwaCkpLFxuICApO1xuXG4gIGxvZ2dlci5kZWJ1ZyhgR3JhcGg6ICR7SlNPTi5zdHJpbmdpZnkoZ3JhcGgsIG51bGwsIDIpfWApO1xuICBsb2dnZXIuZGVidWcoYFN0YXJ0aW5nIHRvIGFzc2VtYmxlIHRoZSB0eXBlc2NyaXB0IGNvZGVgKTtcbiAgLy8gV2UgdHJhdmVyc2UgdGhlIGRlcGVuZGVuY3kgZ3JhcGggdG8gZ2V0IHRoZSB1bm9yZGVyZWQgSlNPTiBub2RlcyBpbnRvIGFuIG9yZGVyZWQgYXJyYXlcbiAgLy8gd2hlcmUgbm8gbm9kZSBpcyByZWZlcmVuY2VkIGJlZm9yZSBpdCdzIGRlZmluZWRcbiAgLy8gQXMgd2UgY2hlY2sgdGhhdCB0aGUgbm9kZXMgb24gYm90aCBlbmRzIG9mIGFuIGVkZ2UgZXhpc3Qgd2UgY2FuIGJlIHN1cmVcbiAgLy8gdGhhdCBubyBpbmZpbml0ZSBsb29wIGV4aXN0cywgdGhlcmUgY2FuIGJlIG5vIHN0cmF5IGRlcGVuZGVuY3kgb24gYSBub2RlXG4gIGNvbnN0IGV4cHJlc3Npb25zOiB0LlN0YXRlbWVudFtdID0gW107XG4gIGxldCBub2Rlc1RvVmlzaXQgPSBbLi4ubm9kZUlkc107XG4gIC8vIFRoaXMgZW5zdXJlcyB3ZSBkZXRlY3QgY3ljbGVzIGFuZCBkb24ndCBlbmQgdXAgaW4gYW4gZW5kbGVzcyBsb29wXG4gIGxldCBub2Rlc1Zpc2l0ZWRUaGlzSXRlcmF0aW9uID0gMDtcbiAgZG8ge1xuICAgIG5vZGVzVmlzaXRlZFRoaXNJdGVyYXRpb24gPSAwO1xuXG4gICAgLy8gRmluZCBuZXh0IG5vZGVzIHRvIHZpc2l0XG4gICAgY29uc3Qgbm9kZUV4cHJlc3Npb25HZW5lcmF0b3JzID0gZ3JhcGgubWFwTm9kZXMoKG5vZGVJZCwgeyBjb2RlIH0pID0+IHtcbiAgICAgIGlmICghbm9kZXNUb1Zpc2l0LmluY2x1ZGVzKG5vZGVJZCkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW5yZXNvbHZlZERlcGVuZGVuY2llcyA9IGdyYXBoXG4gICAgICAgIC5pbk5laWdoYm9ycyhub2RlSWQpXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IG5vZGVzVG9WaXNpdC5pbmNsdWRlcyhpdGVtKSk7XG5cbiAgICAgIGlmICh1bnJlc29sdmVkRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBub2Rlc1RvVmlzaXQgPSBub2Rlc1RvVmlzaXQuZmlsdGVyKChpZCkgPT4gbm9kZUlkICE9PSBpZCk7XG4gICAgICAgIG5vZGVzVmlzaXRlZFRoaXNJdGVyYXRpb24gPSBub2Rlc1Zpc2l0ZWRUaGlzSXRlcmF0aW9uICsgMTtcblxuICAgICAgICBsb2dnZXIuZGVidWcoYFZpc2l0aW5nIG5vZGUgJHtub2RlSWR9YCk7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICAgIC8vIEdlbmVyYXRlIHRoZSBjb2RlIGZvciB0aGUgbm9kZXNcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2Ygbm9kZUV4cHJlc3Npb25HZW5lcmF0b3JzKSB7XG4gICAgICBpZiAoY29kZSkge1xuICAgICAgICBleHByZXNzaW9ucy5wdXNoKC4uLihhd2FpdCBjb2RlKGdyYXBoKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGAke25vZGVzVG9WaXNpdC5sZW5ndGh9IHVudmlzaXRlZCBub2RlczogJHtub2Rlc1RvVmlzaXQuam9pbihcIiwgXCIpfWAsXG4gICAgKTtcbiAgfSB3aGlsZSAobm9kZXNUb1Zpc2l0Lmxlbmd0aCA+IDAgJiYgbm9kZXNWaXNpdGVkVGhpc0l0ZXJhdGlvbiAhPSAwKTtcblxuICBpZiAobm9kZXNUb1Zpc2l0Lmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlcmUgYXJlICR7XG4gICAgICAgIG5vZGVzVG9WaXNpdC5sZW5ndGhcbiAgICAgIH0gdGVycmFmb3JtIGVsZW1lbnRzIHRoYXQgY291bGQgbm90IGJlIHZpc2l0ZWQuXG4gICAgICBUaGlzIGlzIGxpa2VseSBkdWUgdG8gYSBjeWNsZSBpbiB0aGUgZGVwZW5kZW5jeSBncmFwaC5cbiAgICAgIFRoZXNlIG5vZGVzIGFyZTogJHtub2Rlc1RvVmlzaXQuam9pbihcIiwgXCIpfWAsXG4gICAgKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgJHtub2Rlc1RvVmlzaXQubGVuZ3RofSB1bnZpc2l0ZWQgbm9kZXM6ICR7bm9kZXNUb1Zpc2l0LmpvaW4oXCIsIFwiKX1gLFxuICApO1xuXG4gIGNvbnN0IGJhY2tlbmRFeHByZXNzaW9ucyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHBsYW4udGVycmFmb3JtPy5tYXAoKHRlcnJhZm9ybSkgPT5cbiAgICAgICAgYmFja2VuZFRvRXhwcmVzc2lvbihzY29wZSwgdGVycmFmb3JtLmJhY2tlbmQpLFxuICAgICAgKSB8fCBbUHJvbWlzZS5yZXNvbHZlKFtdKV0sXG4gICAgKVxuICApLnJlZHVjZSgoY2FycnksIGl0ZW0pID0+IFsuLi5jYXJyeSwgLi4uaXRlbV0sIFtdKTtcblxuICBsb2dnZXIuZGVidWcoXG4gICAgYFVzaW5nIHRoZXNlIGJhY2tlbmQgZXhwcmVzc2lvbnM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBiYWNrZW5kRXhwcmVzc2lvbnMsXG4gICAgICBudWxsLFxuICAgICAgMixcbiAgICApfWAsXG4gICk7XG5cbiAgLy8gV2UgY29sbGVjdCBhbGwgbW9kdWxlIHNvdXJjZXNcbiAgY29uc3QgbW9kdWxlUmVxdWlyZW1lbnRzID0gW1xuICAgIC4uLm5ldyBTZXQoXG4gICAgICBPYmplY3QudmFsdWVzKHBsYW4ubW9kdWxlIHx8IHt9KS5yZWR1Y2UoXG4gICAgICAgIChjYXJyeSwgbW9kdWxlQmxvY2spID0+IFtcbiAgICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgICAuLi5tb2R1bGVCbG9jay5yZWR1Y2UoXG4gICAgICAgICAgICAoYXJyLCB7IHNvdXJjZSwgdmVyc2lvbiB9KSA9PiBbXG4gICAgICAgICAgICAgIC4uLmFycixcbiAgICAgICAgICAgICAgdmVyc2lvbiA/IGAke3NvdXJjZX1AJHt2ZXJzaW9ufWAgOiBzb3VyY2UsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW10gYXMgc3RyaW5nW10sXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgICAgW10gYXMgc3RyaW5nW10sXG4gICAgICApIHx8IFtdLFxuICAgICksXG4gIF07XG5cbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBGb3VuZCB0aGVzZSBtb2R1bGVzOiAke0pTT04uc3RyaW5naWZ5KG1vZHVsZVJlcXVpcmVtZW50cywgbnVsbCwgMil9YCxcbiAgKTtcblxuICBpZiAoT2JqZWN0LmtleXMocGxhbi52YXJpYWJsZSB8fCB7fSkubGVuZ3RoID4gMCAmJiBleHByZXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgZXhwcmVzc2lvbnNbMF0gPSB0LmFkZENvbW1lbnQoXG4gICAgICBleHByZXNzaW9uc1swXSxcbiAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgYFRlcnJhZm9ybSBWYXJpYWJsZXMgYXJlIG5vdCBhbHdheXMgdGhlIGJlc3QgZml0IGZvciBnZXR0aW5nIGlucHV0cyBpbiB0aGUgY29udGV4dCBvZiBUZXJyYWZvcm0gQ0RLLlxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBhdCBodHRwczovL2Nka3RuLmlvL2RvY3MvY29uY2VwdHMvdmFyaWFibGVzLWFuZC1vdXRwdXRzI2lucHV0LXZhcmlhYmxlc2AsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHByb3ZpZGVyUmVxdWlyZW1lbnRzID0gZ2V0UHJvdmlkZXJSZXF1aXJlbWVudHMocGxhbik7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgRm91bmQgdGhlc2UgcHJvdmlkZXIgcmVxdWlyZW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgcHJvdmlkZXJSZXF1aXJlbWVudHMsXG4gICAgICBudWxsLFxuICAgICAgMixcbiAgICApfWAsXG4gICk7XG5cbiAgLy8gV2UgYWRkIGEgY29tbWVudCBpZiB0aGVyZSBhcmUgcHJvdmlkZXJzIHdpdGggbWlzc2luZyBzY2hlbWEgaW5mb3JtYXRpb25cbiAgY29uc3QgcHJvdmlkZXJzTGFja2luZ1NjaGVtYSA9IE9iamVjdC5rZXlzKHByb3ZpZGVyUmVxdWlyZW1lbnRzKS5maWx0ZXIoXG4gICAgKHByb3ZpZGVyTmFtZSkgPT5cbiAgICAgIHByb3ZpZGVyTmFtZSAhPT0gXCJ0ZXJyYWZvcm1cIiAmJlxuICAgICAgIU9iamVjdC5rZXlzKHByb3ZpZGVyU2NoZW1hLnByb3ZpZGVyX3NjaGVtYXMgfHwge30pLnNvbWUoKHNjaGVtYU5hbWUpID0+XG4gICAgICAgIHNjaGVtYU5hbWUuZW5kc1dpdGgocHJvdmlkZXJOYW1lKSxcbiAgICAgICksXG4gICk7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgJHtcbiAgICAgIHByb3ZpZGVyc0xhY2tpbmdTY2hlbWEubGVuZ3RoXG4gICAgfSBwcm92aWRlcnMgbGFjayBzY2hlbWEgaW5mb3JtYXRpb246ICR7cHJvdmlkZXJzTGFja2luZ1NjaGVtYS5qb2luKFwiLCBcIil9YCxcbiAgKTtcblxuICBpZiAocHJvdmlkZXJzTGFja2luZ1NjaGVtYS5sZW5ndGggPiAwKSB7XG4gICAgZXhwcmVzc2lvbnNbMF0gPSB0LmFkZENvbW1lbnQoXG4gICAgICBleHByZXNzaW9uc1swXSxcbiAgICAgIFwibGVhZGluZ1wiLFxuICAgICAgYFRoZSBmb2xsb3dpbmcgcHJvdmlkZXJzIGFyZSBtaXNzaW5nIHNjaGVtYSBpbmZvcm1hdGlvbiBhbmQgbWlnaHQgbmVlZCBtYW51YWwgYWRqdXN0bWVudHMgdG8gc3ludGhlc2l6ZSBjb3JyZWN0bHk6ICR7cHJvdmlkZXJzTGFja2luZ1NjaGVtYS5qb2luKFxuICAgICAgICBcIiwgXCIsXG4gICAgICApfS5cbkZvciBhIG1vcmUgcHJlY2lzZSBjb252ZXJzaW9uIHBsZWFzZSB1c2UgdGhlIC0tcHJvdmlkZXIgZmxhZyBpbiBjb252ZXJ0LmAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEFsd2F5cyBhZGQgY29uc3RydWN0c1xuICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICBjb25zdHJ1Y3ROYW1lOiBcIkNvbnN0cnVjdFwiLFxuICAgIHByb3ZpZGVyOiBcImNvbnN0cnVjdHNcIixcbiAgfSk7XG5cbiAgaWYgKHNjb3BlLmhhc1Rva2VuQmFzZWRUeXBlQ29lcmNpb24pIHtcbiAgICBzY29wZS5pbXBvcnRhYmxlcy5wdXNoKHtcbiAgICAgIGNvbnN0cnVjdE5hbWU6IFwiVG9rZW5cIixcbiAgICAgIHByb3ZpZGVyOiBcImNka3RuXCIsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBZGQgc3BlY2lmaWMgaW1wb3J0IGZvciBjb2RlQ29udGFpbmVyXG4gIGFkZEltcG9ydEZvckNvZGVDb250YWluZXIoc2NvcGUsIGNvZGVDb250YWluZXIpO1xuICBjb25zdCBjb25zdHJ1Y3RJbXBvcnRzID0gYnVpbGRJbXBvcnRzKHNjb3BlLmltcG9ydGFibGVzKTtcblxuICBjb25zdCBjb2RlID0gWy4uLihiYWNrZW5kRXhwcmVzc2lvbnMgfHwgW10pLCAuLi5leHByZXNzaW9uc107XG4gIGNvbnN0IGNvbmZpZ1R5cGVOYW1lID1cbiAgICBPYmplY3Qua2V5cyhzY29wZS50b3BMZXZlbENvbmZpZykubGVuZ3RoID4gMCA/IFwiTXlDb25maWdcIiA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBjbGFzc0NvbmZpZyA9IGNvbmZpZ1R5cGVOYW1lXG4gICAgPyBbZ2VuZXJhdGVDb25maWdUeXBlKGNvbmZpZ1R5cGVOYW1lLCBzY29wZS50b3BMZXZlbENvbmZpZyldXG4gICAgOiBbXTtcblxuICAvLyBXZSBzcGxpdCB1cCB0aGUgZ2VuZXJhdGVkIGNvZGUgc28gdGhhdCB1c2VycyBjYW4gaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB3aGF0IHRvIGluc2VydCB3aGVyZVxuICByZXR1cm4ge1xuICAgIC8vIFRPRE86IFJlbW92ZSBpbXBvcnRzIGFuZCBjb2RlIGJlY2F1c2Ugcm9zZXR0YSB3b24ndCBiZSBhYmxlIHRvIHRyYW5zbGF0ZSB0aGVtXG4gICAgYWxsOiBhd2FpdCBnZW4oW1xuICAgICAgLi4uY29uc3RydWN0SW1wb3J0cyxcbiAgICAgIC4uLm1vZHVsZUltcG9ydHMocGxhbi5tb2R1bGUpLFxuICAgICAgLi4uY2xhc3NDb25maWcsXG4gICAgICB3cmFwQ29kZUluQ29uc3RydWN0b3IoXG4gICAgICAgIGNvZGVDb250YWluZXIsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIFwiTXlDb252ZXJ0ZWRDb2RlXCIsXG4gICAgICAgIGNvbmZpZ1R5cGVOYW1lLFxuICAgICAgKSxcbiAgICBdKSxcbiAgICBpbXBvcnRzOiBhd2FpdCBnZW4oWy4uLmNvbnN0cnVjdEltcG9ydHMsIC4uLm1vZHVsZUltcG9ydHMocGxhbi5tb2R1bGUpXSksXG4gICAgY29kZTogYXdhaXQgZ2VuKGNvZGUpLFxuICAgIHByb3ZpZGVyczogT2JqZWN0LmVudHJpZXMocHJvdmlkZXJSZXF1aXJlbWVudHMpLm1hcCgoW3NvdXJjZSwgdmVyc2lvbl0pID0+XG4gICAgICB2ZXJzaW9uID09PSBcIipcIiA/IHNvdXJjZSA6IGAke3NvdXJjZX1AJHt2ZXJzaW9ufWAsXG4gICAgKSxcbiAgICBtb2R1bGVzOiBtb2R1bGVSZXF1aXJlbWVudHMsXG4gICAgLy8gV2UgdHJhY2sgc29tZSB1c2FnZSBkYXRhIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyB1c2VkXG4gICAgc3RhdHM6IHtcbiAgICAgIG51bWJlck9mTW9kdWxlczogbW9kdWxlUmVxdWlyZW1lbnRzLmxlbmd0aCxcbiAgICAgIG51bWJlck9mUHJvdmlkZXJzOiBPYmplY3Qua2V5cyhwcm92aWRlclJlcXVpcmVtZW50cykubGVuZ3RoLFxuICAgICAgcmVzb3VyY2VzOiByZXNvdXJjZVN0YXRzKHBsYW4ucmVzb3VyY2UgfHwge30pLFxuICAgICAgZGF0YTogcmVzb3VyY2VTdGF0cyhwbGFuLmRhdGEgfHwge30pLFxuICAgICAgY29udmVydGVkTGluZXM6IGhjbC5zcGxpdChcIlxcblwiKS5sZW5ndGgsXG4gICAgfSxcbiAgfTtcbn1cblxudHlwZSBGaWxlID0geyBjb250ZW50czogc3RyaW5nOyBmaWxlTmFtZTogc3RyaW5nIH07XG5jb25zdCB0cmFuc2xhdG9ycyA9IHtcbiAgcHl0aG9uOiB7XG4gICAgdmlzaXRvcjogKCkgPT4gbmV3IHJvc2V0dGEuUHl0aG9uVmlzaXRvcigpLFxuICAgIHBvc3RUcmFuc2xhdGlvbk11dGF0aW9uOiByZXBsYWNlUHl0aG9uSW1wb3J0cyxcbiAgfSxcbiAgamF2YToge1xuICAgIHZpc2l0b3I6ICgpID0+IG5ldyByb3NldHRhLkphdmFWaXNpdG9yKCksXG4gICAgcG9zdFRyYW5zbGF0aW9uTXV0YXRpb246IHJlcGxhY2VKYXZhSW1wb3J0cyxcbiAgfSxcbiAgY3NoYXJwOiB7XG4gICAgdmlzaXRvcjogKCkgPT4gbmV3IHJvc2V0dGEuQ1NoYXJwVmlzaXRvcigpLFxuICAgIHBvc3RUcmFuc2xhdGlvbk11dGF0aW9uOiByZXBsYWNlQ3NoYXJwSW1wb3J0cyxcbiAgfSxcbiAgZ286IHtcbiAgICB2aXNpdG9yOiAoKSA9PiBuZXcgcm9zZXR0YS5Hb1Zpc2l0b3IoKSxcbiAgICBwb3N0VHJhbnNsYXRpb25NdXRhdGlvbjogcmVwbGFjZUdvSW1wb3J0cyxcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHRyYW5zbGF0b3JGb3JMYW5ndWFnZShsYW5ndWFnZToga2V5b2YgdHlwZW9mIHRyYW5zbGF0b3JzKSB7XG4gIHJldHVybiAoZmlsZTogRmlsZSwgdGhyb3dPblRyYW5zbGF0aW9uRXJyb3I6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCB7IHZpc2l0b3IsIHBvc3RUcmFuc2xhdGlvbk11dGF0aW9uIH0gPSB0cmFuc2xhdG9yc1tsYW5ndWFnZV07XG4gICAgY29uc3QgeyB0cmFuc2xhdGlvbiwgZGlhZ25vc3RpY3MgfSA9IHJvc2V0dGEudHJhbnNsYXRlVHlwZVNjcmlwdChcbiAgICAgIGZpbGUsXG4gICAgICB2aXNpdG9yKCksXG4gICAgICB0aHJvd09uVHJhbnNsYXRpb25FcnJvciA/IHsgaW5jbHVkZUNvbXBpbGVyRGlhZ25vc3RpY3M6IHRydWUgfSA6IHt9LFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICB0aHJvd09uVHJhbnNsYXRpb25FcnJvciAmJlxuICAgICAgZGlhZ25vc3RpY3MuZmlsdGVyKChkaWFnKSA9PiBkaWFnLmlzRXJyb3IpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ291bGQgbm90IHRyYW5zbGF0ZSBUUyB0byAke2xhbmd1YWdlfTpcXG4ke2ZpbGUuY29udGVudHN9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgdHJhbnNsYXRlIFRTIHRvICR7bGFuZ3VhZ2V9OiAke2RpYWdub3N0aWNzXG4gICAgICAgICAgLm1hcCgoZGlhZykgPT4gZGlhZy5mb3JtYXR0ZWRNZXNzYWdlKVxuICAgICAgICAgIC5qb2luKFwiXFxuXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwb3N0VHJhbnNsYXRpb25NdXRhdGlvbih0cmFuc2xhdGlvbik7XG4gIH07XG59XG5cbnR5cGUgQ29udmVydE9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2UgdG8gY29udmVydCB0b1xuICAgKi9cbiAgbGFuZ3VhZ2U6IGtleW9mIHR5cGVvZiB0cmFuc2xhdG9ycyB8IFwidHlwZXNjcmlwdFwiO1xuICAvKipcbiAgICogVGhlIHByb3ZpZGVyIHNjaGVtYSB0byB1c2UgZm9yIGNvbnZlcnNpb25cbiAgICovXG4gIHByb3ZpZGVyU2NoZW1hOiBQcm92aWRlclNjaGVtYTtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIGNsYXNzIHRvIGV4dGVuZCBmcm9tLiBEZWZhdWx0cyB0byBgY29uc3RydWN0cy5Db25zdHJ1Y3RgXG4gICAqL1xuICBjb2RlQ29udGFpbmVyPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdHJhbnNsYXRpb24gZmFpbHNcbiAgICogRGVmYXVsdHMgdG8gZmFsc2VcbiAgICovXG4gIHRocm93T25UcmFuc2xhdGlvbkVycm9yPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb252ZXJ0KFxuICBoY2w6IHN0cmluZyxcbiAge1xuICAgIGxhbmd1YWdlLFxuICAgIHByb3ZpZGVyU2NoZW1hLFxuICAgIHRocm93T25UcmFuc2xhdGlvbkVycm9yID0gZmFsc2UsXG4gICAgY29kZUNvbnRhaW5lciA9IFwiY2RrdG4uVGVycmFmb3JtU3RhY2tcIixcbiAgfTogQ29udmVydE9wdGlvbnMsXG4pIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBcInRlcnJhZm9ybS50ZlwiO1xuICBjb25zdCB0cmFuc2xhdGVyID1cbiAgICBsYW5ndWFnZSA9PT0gXCJ0eXBlc2NyaXB0XCJcbiAgICAgID8gKGZpbGU6IEZpbGUsIF90aHJvd09uVHJhbnNsYXRpb25FcnJvcjogYm9vbGVhbikgPT4gZmlsZS5jb250ZW50c1xuICAgICAgOiB0cmFuc2xhdG9yRm9yTGFuZ3VhZ2UobGFuZ3VhZ2UpO1xuXG4gIGlmICghdHJhbnNsYXRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGxhbmd1YWdlIHVzZWQ6IFwiICsgbGFuZ3VhZ2UpO1xuICB9XG5cbiAgY29uc3QgdHNDb2RlID0gYXdhaXQgY29udmVydFRvVHlwZXNjcmlwdChoY2wsIHByb3ZpZGVyU2NoZW1hLCBjb2RlQ29udGFpbmVyKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnRzQ29kZSxcbiAgICBhbGw6IHRyYW5zbGF0ZXIoXG4gICAgICB7IGZpbGVOYW1lLCBjb250ZW50czogdHNDb2RlLmFsbCB9LFxuICAgICAgdGhyb3dPblRyYW5zbGF0aW9uRXJyb3IsXG4gICAgKSxcbiAgICBpbXBvcnRzOiB0cmFuc2xhdGVyKHsgZmlsZU5hbWUsIGNvbnRlbnRzOiB0c0NvZGUuaW1wb3J0cyB9LCBmYWxzZSksXG4gICAgY29kZTogdHJhbnNsYXRlcih7IGZpbGVOYW1lLCBjb250ZW50czogdHNDb2RlLmNvZGUgfSwgZmFsc2UpLFxuICAgIHN0YXRzOiB7IC4uLnRzQ29kZS5zdGF0cywgbGFuZ3VhZ2UgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcnJhZm9ybUNvbmZpZ0Zyb21EaXIoaW1wb3J0UGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUoaW1wb3J0UGF0aCk7XG4gIGNvbnN0IGZpbGVDb250ZW50cyA9IGdsb2JcbiAgICAuc3luYyhcIi4vKi50ZlwiLCB7IGN3ZDogYWJzUGF0aCB9KVxuICAgIC5tYXAoKHApID0+IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoYWJzUGF0aCwgcCksIFwidXRmOFwiKSk7XG5cbiAgcmV0dXJuIGZpbGVDb250ZW50cy5qb2luKFwiXFxuXCIpO1xufVxuXG50eXBlIENka3RmSnNvbiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYge1xuICB0ZXJyYWZvcm1Qcm92aWRlcnM6IGFueVtdO1xuICB0ZXJyYWZvcm1Nb2R1bGVzOiBhbnlbXTtcbn07XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydFByb2plY3QoXG4gIGNvbWJpbmVkSGNsOiBzdHJpbmcsXG4gIHsgbGFuZ3VhZ2UsIHByb3ZpZGVyU2NoZW1hIH06IENvbnZlcnRPcHRpb25zLFxuKSB7XG4gIGlmIChsYW5ndWFnZSAhPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBsYW5ndWFnZSB1c2VkOiBcIiArIGxhbmd1YWdlKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpbXBvcnRzLFxuICAgIGNvZGUsXG4gICAgcHJvdmlkZXJzLFxuICAgIG1vZHVsZXM6IHRmTW9kdWxlcyxcbiAgICBzdGF0cyxcbiAgfSA9IGF3YWl0IGNvbnZlcnQoY29tYmluZWRIY2wsIHtcbiAgICBsYW5ndWFnZSxcbiAgICBwcm92aWRlclNjaGVtYSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlOiAoaW5wdXRNYWluRmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpbXBvcnRNYWluRmlsZSA9IFtpbXBvcnRzLCBpbnB1dE1haW5GaWxlXS5qb2luKFwiXFxuXCIpO1xuICAgICAgY29uc3Qgb3V0cHV0TWFpbkZpbGUgPSBpbXBvcnRNYWluRmlsZS5yZXBsYWNlKENPREVfTUFSS0VSLCBjb2RlKTtcbiAgICAgIHJldHVybiBwcmV0dGllci5mb3JtYXQob3V0cHV0TWFpbkZpbGUsIHsgcGFyc2VyOiBcImJhYmVsXCIgfSk7XG4gICAgfSxcbiAgICBjZGt0Zkpzb246IChpbnB1dENka3RmSnNvbjogQ2RrdGZKc29uKSA9PiB7XG4gICAgICBjb25zdCBjZGt0Zkpzb24gPSB7IC4uLmlucHV0Q2RrdGZKc29uIH07XG4gICAgICBjZGt0Zkpzb24udGVycmFmb3JtUHJvdmlkZXJzID0gcHJvdmlkZXJzO1xuICAgICAgY2RrdGZKc29uLnRlcnJhZm9ybU1vZHVsZXMgPSB0Zk1vZHVsZXM7XG4gICAgICByZXR1cm4gY2RrdGZKc29uO1xuICAgIH0sXG4gICAgc3RhdHMsXG4gIH07XG59XG5cbmV4cG9ydCB7IGlzUmVnaXN0cnlNb2R1bGUsIGF0dHJpYnV0ZU5hbWVUb0Nka3RmTmFtZSB9O1xuIl19
package/build/schema.d.ts CHANGED
@@ -4,17 +4,7 @@ declare const outputConfig: z.ZodArray<z.ZodObject<{
4
4
  description: z.ZodOptional<z.ZodOptional<z.ZodString>>;
5
5
  sensitive: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
6
6
  depends_on: z.ZodOptional<z.ZodOptional<z.ZodString>>;
7
- }, "strip", z.ZodTypeAny, {
8
- sensitive?: boolean | undefined;
9
- value?: any;
10
- description?: string | undefined;
11
- depends_on?: string | undefined;
12
- }, {
13
- sensitive?: boolean | undefined;
14
- value?: any;
15
- description?: string | undefined;
16
- depends_on?: string | undefined;
17
- }>, "many">;
7
+ }, z.core.$strip>>;
18
8
  export type Output = z.infer<typeof outputConfig>;
19
9
  declare const variableConfig: z.ZodArray<z.ZodObject<{
20
10
  type: z.ZodOptional<z.ZodString>;
@@ -25,160 +15,60 @@ declare const variableConfig: z.ZodArray<z.ZodObject<{
25
15
  validation: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
26
16
  error_message: z.ZodString;
27
17
  condition: z.ZodAny;
28
- }, "strip", z.ZodTypeAny, {
29
- error_message: string;
30
- condition?: any;
31
- }, {
32
- error_message: string;
33
- condition?: any;
34
- }>, "many">>>;
35
- }, "strip", z.ZodTypeAny, {
36
- sensitive?: boolean | undefined;
37
- type?: string | undefined;
38
- description?: string | undefined;
39
- validation?: {
40
- error_message: string;
41
- condition?: any;
42
- }[] | undefined;
43
- default?: any;
44
- nullable?: boolean | undefined;
45
- }, {
46
- sensitive?: boolean | undefined;
47
- type?: string | undefined;
48
- description?: string | undefined;
49
- validation?: {
50
- error_message: string;
51
- condition?: any;
52
- }[] | undefined;
53
- default?: any;
54
- nullable?: boolean | undefined;
55
- }>, "many">;
18
+ }, z.core.$strip>>>>;
19
+ }, z.core.$strip>>;
56
20
  export type Variable = z.infer<typeof variableConfig>;
57
- declare const providerConfig: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">;
21
+ declare const providerConfig: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>;
58
22
  export type Provider = z.infer<typeof providerConfig>;
59
23
  declare const moduleConfig: z.ZodArray<z.ZodObject<{
60
24
  source: z.ZodString;
61
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
62
- source: z.ZodString;
63
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
64
- source: z.ZodString;
65
- }, z.ZodTypeAny, "passthrough">>, "many">;
25
+ }, z.core.$loose>>;
66
26
  export type Module = z.infer<typeof moduleConfig>;
67
- declare const resourceConfig: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">;
27
+ declare const resourceConfig: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>;
68
28
  export type Resource = z.infer<typeof resourceConfig>;
69
29
  export type Data = Resource;
70
30
  declare const importConfig: z.ZodObject<{
71
31
  to: z.ZodString;
72
32
  id: z.ZodString;
73
33
  provider: z.ZodOptional<z.ZodAny>;
74
- }, "strip", z.ZodTypeAny, {
75
- to: string;
76
- id: string;
77
- provider?: any;
78
- }, {
79
- to: string;
80
- id: string;
81
- provider?: any;
82
- }>;
34
+ }, z.core.$strip>;
83
35
  export type Import = z.infer<typeof importConfig>;
84
36
  declare const terraformConfig: z.ZodObject<{
85
37
  required_version: z.ZodOptional<z.ZodString>;
86
- required_providers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
38
+ required_providers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
87
39
  source: z.ZodOptional<z.ZodString>;
88
40
  version: z.ZodOptional<z.ZodString>;
89
- }, "strip", z.ZodTypeAny, {
90
- source?: string | undefined;
91
- version?: string | undefined;
92
- }, {
93
- source?: string | undefined;
94
- version?: string | undefined;
95
- }>, z.ZodString]>>, "many">>;
96
- backend: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">>>;
97
- }, "strip", z.ZodTypeAny, {
98
- required_version?: string | undefined;
99
- required_providers?: Record<string, string | {
100
- source?: string | undefined;
101
- version?: string | undefined;
102
- }>[] | undefined;
103
- backend?: Record<string, Record<string, any>[]> | undefined;
104
- }, {
105
- required_version?: string | undefined;
106
- required_providers?: Record<string, string | {
107
- source?: string | undefined;
108
- version?: string | undefined;
109
- }>[] | undefined;
110
- backend?: Record<string, Record<string, any>[]> | undefined;
111
- }>;
41
+ }, z.core.$strip>, z.ZodString]>>>>;
42
+ backend: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>>>;
43
+ }, z.core.$strip>;
112
44
  export type TerraformConfig = z.infer<typeof terraformConfig>;
113
45
  export declare const schema: z.ZodObject<{
114
- data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">>>>;
46
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>>>>;
115
47
  import: z.ZodOptional<z.ZodArray<z.ZodObject<{
116
48
  to: z.ZodString;
117
49
  id: z.ZodString;
118
50
  provider: z.ZodOptional<z.ZodAny>;
119
- }, "strip", z.ZodTypeAny, {
120
- to: string;
121
- id: string;
122
- provider?: any;
123
- }, {
124
- to: string;
125
- id: string;
126
- provider?: any;
127
- }>, "many">>;
128
- locals: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">>;
51
+ }, z.core.$strip>>>;
52
+ locals: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>>;
129
53
  module: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
130
54
  source: z.ZodString;
131
- }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
132
- source: z.ZodString;
133
- }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
134
- source: z.ZodString;
135
- }, z.ZodTypeAny, "passthrough">>, "many">>>;
55
+ }, z.core.$loose>>>>;
136
56
  output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
137
57
  value: z.ZodOptional<z.ZodAny>;
138
58
  description: z.ZodOptional<z.ZodOptional<z.ZodString>>;
139
59
  sensitive: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
140
60
  depends_on: z.ZodOptional<z.ZodOptional<z.ZodString>>;
141
- }, "strip", z.ZodTypeAny, {
142
- sensitive?: boolean | undefined;
143
- value?: any;
144
- description?: string | undefined;
145
- depends_on?: string | undefined;
146
- }, {
147
- sensitive?: boolean | undefined;
148
- value?: any;
149
- description?: string | undefined;
150
- depends_on?: string | undefined;
151
- }>, "many">>>;
152
- provider: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">>>;
153
- resource: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">>>>;
61
+ }, z.core.$strip>>>>;
62
+ provider: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>>>;
63
+ resource: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>>>>;
154
64
  terraform: z.ZodOptional<z.ZodArray<z.ZodObject<{
155
65
  required_version: z.ZodOptional<z.ZodString>;
156
- required_providers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
66
+ required_providers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
157
67
  source: z.ZodOptional<z.ZodString>;
158
68
  version: z.ZodOptional<z.ZodString>;
159
- }, "strip", z.ZodTypeAny, {
160
- source?: string | undefined;
161
- version?: string | undefined;
162
- }, {
163
- source?: string | undefined;
164
- version?: string | undefined;
165
- }>, z.ZodString]>>, "many">>;
166
- backend: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">>>;
167
- }, "strip", z.ZodTypeAny, {
168
- required_version?: string | undefined;
169
- required_providers?: Record<string, string | {
170
- source?: string | undefined;
171
- version?: string | undefined;
172
- }>[] | undefined;
173
- backend?: Record<string, Record<string, any>[]> | undefined;
174
- }, {
175
- required_version?: string | undefined;
176
- required_providers?: Record<string, string | {
177
- source?: string | undefined;
178
- version?: string | undefined;
179
- }>[] | undefined;
180
- backend?: Record<string, Record<string, any>[]> | undefined;
181
- }>, "many">>;
69
+ }, z.core.$strip>, z.ZodString]>>>>;
70
+ backend: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>>>>;
71
+ }, z.core.$strip>>>;
182
72
  variable: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
183
73
  type: z.ZodOptional<z.ZodString>;
184
74
  default: z.ZodOptional<z.ZodAny>;
@@ -188,110 +78,8 @@ export declare const schema: z.ZodObject<{
188
78
  validation: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
189
79
  error_message: z.ZodString;
190
80
  condition: z.ZodAny;
191
- }, "strip", z.ZodTypeAny, {
192
- error_message: string;
193
- condition?: any;
194
- }, {
195
- error_message: string;
196
- condition?: any;
197
- }>, "many">>>;
198
- }, "strip", z.ZodTypeAny, {
199
- sensitive?: boolean | undefined;
200
- type?: string | undefined;
201
- description?: string | undefined;
202
- validation?: {
203
- error_message: string;
204
- condition?: any;
205
- }[] | undefined;
206
- default?: any;
207
- nullable?: boolean | undefined;
208
- }, {
209
- sensitive?: boolean | undefined;
210
- type?: string | undefined;
211
- description?: string | undefined;
212
- validation?: {
213
- error_message: string;
214
- condition?: any;
215
- }[] | undefined;
216
- default?: any;
217
- nullable?: boolean | undefined;
218
- }>, "many">>>;
219
- }, "strip", z.ZodTypeAny, {
220
- provider?: Record<string, Record<string, any>[]> | undefined;
221
- data?: Record<string, Record<string, Record<string, any>[]>> | undefined;
222
- import?: {
223
- to: string;
224
- id: string;
225
- provider?: any;
226
- }[] | undefined;
227
- locals?: Record<string, any>[] | undefined;
228
- module?: Record<string, z.objectOutputType<{
229
- source: z.ZodString;
230
- }, z.ZodTypeAny, "passthrough">[]> | undefined;
231
- output?: Record<string, {
232
- sensitive?: boolean | undefined;
233
- value?: any;
234
- description?: string | undefined;
235
- depends_on?: string | undefined;
236
- }[]> | undefined;
237
- resource?: Record<string, Record<string, Record<string, any>[]>> | undefined;
238
- terraform?: {
239
- required_version?: string | undefined;
240
- required_providers?: Record<string, string | {
241
- source?: string | undefined;
242
- version?: string | undefined;
243
- }>[] | undefined;
244
- backend?: Record<string, Record<string, any>[]> | undefined;
245
- }[] | undefined;
246
- variable?: Record<string, {
247
- sensitive?: boolean | undefined;
248
- type?: string | undefined;
249
- description?: string | undefined;
250
- validation?: {
251
- error_message: string;
252
- condition?: any;
253
- }[] | undefined;
254
- default?: any;
255
- nullable?: boolean | undefined;
256
- }[]> | undefined;
257
- }, {
258
- provider?: Record<string, Record<string, any>[]> | undefined;
259
- data?: Record<string, Record<string, Record<string, any>[]>> | undefined;
260
- import?: {
261
- to: string;
262
- id: string;
263
- provider?: any;
264
- }[] | undefined;
265
- locals?: Record<string, any>[] | undefined;
266
- module?: Record<string, z.objectInputType<{
267
- source: z.ZodString;
268
- }, z.ZodTypeAny, "passthrough">[]> | undefined;
269
- output?: Record<string, {
270
- sensitive?: boolean | undefined;
271
- value?: any;
272
- description?: string | undefined;
273
- depends_on?: string | undefined;
274
- }[]> | undefined;
275
- resource?: Record<string, Record<string, Record<string, any>[]>> | undefined;
276
- terraform?: {
277
- required_version?: string | undefined;
278
- required_providers?: Record<string, string | {
279
- source?: string | undefined;
280
- version?: string | undefined;
281
- }>[] | undefined;
282
- backend?: Record<string, Record<string, any>[]> | undefined;
283
- }[] | undefined;
284
- variable?: Record<string, {
285
- sensitive?: boolean | undefined;
286
- type?: string | undefined;
287
- description?: string | undefined;
288
- validation?: {
289
- error_message: string;
290
- condition?: any;
291
- }[] | undefined;
292
- default?: any;
293
- nullable?: boolean | undefined;
294
- }[]> | undefined;
295
- }>;
81
+ }, z.core.$strip>>>>;
82
+ }, z.core.$strip>>>>;
83
+ }, z.core.$strip>;
296
84
  export {};
297
85
  //# sourceMappingURL=schema.d.ts.map
package/build/schema.js CHANGED
@@ -46,9 +46,9 @@ const variableConfig = tfObject({
46
46
  nullable: z.boolean().optional(),
47
47
  validation: z.array(validationConfig).optional(),
48
48
  });
49
- const providerConfig = z.array(z.record(z.any()));
50
- const moduleConfig = z.array(z.object({ source: z.string() }).nonstrict());
51
- const resourceConfig = z.array(z.record(z.any()));
49
+ const providerConfig = z.array(z.record(z.string(), z.any()));
50
+ const moduleConfig = z.array(z.object({ source: z.string() }).loose());
51
+ const resourceConfig = z.array(z.record(z.string(), z.any()));
52
52
  const importConfig = z.object({
53
53
  to: z.string(),
54
54
  id: z.string(),
@@ -61,21 +61,21 @@ const providerSpecification = z.union([
61
61
  const terraformConfig = z
62
62
  .object({
63
63
  required_version: z.string(),
64
- required_providers: z.array(z.record(providerSpecification)),
65
- backend: z.record(z.array(z.record(z.any()))),
64
+ required_providers: z.array(z.record(z.string(), providerSpecification)),
65
+ backend: z.record(z.string(), z.array(z.record(z.string(), z.any()))),
66
66
  })
67
67
  .partial();
68
68
  exports.schema = z
69
69
  .object({
70
- data: z.record(z.record(resourceConfig)),
70
+ data: z.record(z.string(), z.record(z.string(), resourceConfig)),
71
71
  import: z.array(importConfig),
72
- locals: z.array(z.record(z.any())),
73
- module: z.record(moduleConfig),
74
- output: z.record(outputConfig),
75
- provider: z.record(providerConfig),
76
- resource: z.record(z.record(resourceConfig)),
72
+ locals: z.array(z.record(z.string(), z.any())),
73
+ module: z.record(z.string(), moduleConfig),
74
+ output: z.record(z.string(), outputConfig),
75
+ provider: z.record(z.string(), providerConfig),
76
+ resource: z.record(z.string(), z.record(z.string(), resourceConfig)),
77
77
  terraform: z.array(terraformConfig),
78
- variable: z.record(variableConfig),
78
+ variable: z.record(z.string(), variableConfig),
79
79
  })
80
80
  .partial();
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsdUNBQXlCO0FBRXpCLE1BQU0sUUFBUSxHQUFHLENBQTBCLE1BQVMsRUFBRSxFQUFFLENBQ3RELENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBRXRDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztJQUM1QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRTtJQUNkLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2xDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2xDLENBQUMsQ0FBQztBQUdILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN6QixTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRTtDQUNuQixDQUFDLENBQUM7QUFFSCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7SUFDOUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDaEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDaEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDdkIsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDdEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDaEMsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDakQsQ0FBQyxDQUFDO0FBR0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFHbEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUczRSxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUlsRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVCLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2QsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM3QixDQUFDLENBQUM7QUFHSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQy9ELENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDWCxDQUFDLENBQUM7QUFFSCxNQUFNLGVBQWUsR0FBRyxDQUFDO0tBQ3RCLE1BQU0sQ0FBQztJQUNOLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDNUIsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDNUQsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUMsQ0FBQztLQUNELE9BQU8sRUFBRSxDQUFDO0FBR0EsUUFBQSxNQUFNLEdBQUcsQ0FBQztLQUNwQixNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUM3QixNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUM5QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDOUIsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0lBQ2xDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0lBQ25DLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztDQUNuQyxDQUFDO0tBQ0QsT0FBTyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgeiBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IHRmT2JqZWN0ID0gPFQgZXh0ZW5kcyB6LlpvZFJhd1NoYXBlPihjb25maWc6IFQpID0+XG4gIHouYXJyYXkoei5vYmplY3QoY29uZmlnKS5wYXJ0aWFsKCkpO1xuXG5jb25zdCBvdXRwdXRDb25maWcgPSB0Zk9iamVjdCh7XG4gIHZhbHVlOiB6LmFueSgpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzZW5zaXRpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGRlcGVuZHNfb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgT3V0cHV0ID0gei5pbmZlcjx0eXBlb2Ygb3V0cHV0Q29uZmlnPjtcblxuY29uc3QgdmFsaWRhdGlvbkNvbmZpZyA9IHoub2JqZWN0KHtcbiAgZXJyb3JfbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgY29uZGl0aW9uOiB6LmFueSgpLFxufSk7XG5cbmNvbnN0IHZhcmlhYmxlQ29uZmlnID0gdGZPYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBkZWZhdWx0OiB6LmFueSgpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgc2Vuc2l0aXZlOiB6LmJvb2xlYW4oKSxcbiAgbnVsbGFibGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHZhbGlkYXRpb246IHouYXJyYXkodmFsaWRhdGlvbkNvbmZpZykub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVmFyaWFibGUgPSB6LmluZmVyPHR5cGVvZiB2YXJpYWJsZUNvbmZpZz47XG5cbmNvbnN0IHByb3ZpZGVyQ29uZmlnID0gei5hcnJheSh6LnJlY29yZCh6LmFueSgpKSk7XG5leHBvcnQgdHlwZSBQcm92aWRlciA9IHouaW5mZXI8dHlwZW9mIHByb3ZpZGVyQ29uZmlnPjtcblxuY29uc3QgbW9kdWxlQ29uZmlnID0gei5hcnJheSh6Lm9iamVjdCh7IHNvdXJjZTogei5zdHJpbmcoKSB9KS5ub25zdHJpY3QoKSk7XG5leHBvcnQgdHlwZSBNb2R1bGUgPSB6LmluZmVyPHR5cGVvZiBtb2R1bGVDb25maWc+O1xuXG5jb25zdCByZXNvdXJjZUNvbmZpZyA9IHouYXJyYXkoei5yZWNvcmQoei5hbnkoKSkpO1xuZXhwb3J0IHR5cGUgUmVzb3VyY2UgPSB6LmluZmVyPHR5cGVvZiByZXNvdXJjZUNvbmZpZz47XG5leHBvcnQgdHlwZSBEYXRhID0gUmVzb3VyY2U7XG5cbmNvbnN0IGltcG9ydENvbmZpZyA9IHoub2JqZWN0KHtcbiAgdG86IHouc3RyaW5nKCksXG4gIGlkOiB6LnN0cmluZygpLFxuICBwcm92aWRlcjogei5hbnkoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBJbXBvcnQgPSB6LmluZmVyPHR5cGVvZiBpbXBvcnRDb25maWc+O1xuXG5jb25zdCBwcm92aWRlclNwZWNpZmljYXRpb24gPSB6LnVuaW9uKFtcbiAgei5vYmplY3QoeyBzb3VyY2U6IHouc3RyaW5nKCksIHZlcnNpb246IHouc3RyaW5nKCkgfSkucGFydGlhbCgpLFxuICB6LnN0cmluZygpLFxuXSk7XG5cbmNvbnN0IHRlcnJhZm9ybUNvbmZpZyA9IHpcbiAgLm9iamVjdCh7XG4gICAgcmVxdWlyZWRfdmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICByZXF1aXJlZF9wcm92aWRlcnM6IHouYXJyYXkoei5yZWNvcmQocHJvdmlkZXJTcGVjaWZpY2F0aW9uKSksXG4gICAgYmFja2VuZDogei5yZWNvcmQoei5hcnJheSh6LnJlY29yZCh6LmFueSgpKSkpLFxuICB9KVxuICAucGFydGlhbCgpO1xuZXhwb3J0IHR5cGUgVGVycmFmb3JtQ29uZmlnID0gei5pbmZlcjx0eXBlb2YgdGVycmFmb3JtQ29uZmlnPjtcblxuZXhwb3J0IGNvbnN0IHNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZGF0YTogei5yZWNvcmQoei5yZWNvcmQocmVzb3VyY2VDb25maWcpKSxcbiAgICBpbXBvcnQ6IHouYXJyYXkoaW1wb3J0Q29uZmlnKSxcbiAgICBsb2NhbHM6IHouYXJyYXkoei5yZWNvcmQoei5hbnkoKSkpLFxuICAgIG1vZHVsZTogei5yZWNvcmQobW9kdWxlQ29uZmlnKSxcbiAgICBvdXRwdXQ6IHoucmVjb3JkKG91dHB1dENvbmZpZyksXG4gICAgcHJvdmlkZXI6IHoucmVjb3JkKHByb3ZpZGVyQ29uZmlnKSxcbiAgICByZXNvdXJjZTogei5yZWNvcmQoei5yZWNvcmQocmVzb3VyY2VDb25maWcpKSxcbiAgICB0ZXJyYWZvcm06IHouYXJyYXkodGVycmFmb3JtQ29uZmlnKSxcbiAgICB2YXJpYWJsZTogei5yZWNvcmQodmFyaWFibGVDb25maWcpLFxuICB9KVxuICAucGFydGlhbCgpO1xuIl19
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsdUNBQXlCO0FBRXpCLE1BQU0sUUFBUSxHQUFHLENBQTBCLE1BQVMsRUFBRSxFQUFFLENBQ3RELENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBRXRDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztJQUM1QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRTtJQUNkLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2xDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2xDLENBQUMsQ0FBQztBQUdILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN6QixTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRTtDQUNuQixDQUFDLENBQUM7QUFFSCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7SUFDOUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDaEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDaEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDdkIsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDdEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDaEMsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDakQsQ0FBQyxDQUFDO0FBR0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRzlELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFHdkUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBSTlELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNkLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQztBQUdILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDL0QsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNYLENBQUMsQ0FBQztBQUVILE1BQU0sZUFBZSxHQUFHLENBQUM7S0FDdEIsTUFBTSxDQUFDO0lBQ04sZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUM1QixrQkFBa0IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDeEUsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUN0RSxDQUFDO0tBQ0QsT0FBTyxFQUFFLENBQUM7QUFHQSxRQUFBLE1BQU0sR0FBRyxDQUFDO0tBQ3BCLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNoRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDN0IsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLFlBQVksQ0FBQztJQUMxQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWSxDQUFDO0lBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxjQUFjLENBQUM7SUFDOUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BFLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztJQUNuQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxDQUFDO0NBQy9DLENBQUM7S0FDRCxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyB6IGZyb20gXCJ6b2RcIjtcblxuY29uc3QgdGZPYmplY3QgPSA8VCBleHRlbmRzIHouWm9kUmF3U2hhcGU+KGNvbmZpZzogVCkgPT5cbiAgei5hcnJheSh6Lm9iamVjdChjb25maWcpLnBhcnRpYWwoKSk7XG5cbmNvbnN0IG91dHB1dENvbmZpZyA9IHRmT2JqZWN0KHtcbiAgdmFsdWU6IHouYW55KCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHNlbnNpdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZGVwZW5kc19vbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBvdXRwdXRDb25maWc+O1xuXG5jb25zdCB2YWxpZGF0aW9uQ29uZmlnID0gei5vYmplY3Qoe1xuICBlcnJvcl9tZXNzYWdlOiB6LnN0cmluZygpLFxuICBjb25kaXRpb246IHouYW55KCksXG59KTtcblxuY29uc3QgdmFyaWFibGVDb25maWcgPSB0Zk9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGRlZmF1bHQ6IHouYW55KCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxuICBzZW5zaXRpdmU6IHouYm9vbGVhbigpLFxuICBudWxsYWJsZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdmFsaWRhdGlvbjogei5hcnJheSh2YWxpZGF0aW9uQ29uZmlnKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBWYXJpYWJsZSA9IHouaW5mZXI8dHlwZW9mIHZhcmlhYmxlQ29uZmlnPjtcblxuY29uc3QgcHJvdmlkZXJDb25maWcgPSB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKTtcbmV4cG9ydCB0eXBlIFByb3ZpZGVyID0gei5pbmZlcjx0eXBlb2YgcHJvdmlkZXJDb25maWc+O1xuXG5jb25zdCBtb2R1bGVDb25maWcgPSB6LmFycmF5KHoub2JqZWN0KHsgc291cmNlOiB6LnN0cmluZygpIH0pLmxvb3NlKCkpO1xuZXhwb3J0IHR5cGUgTW9kdWxlID0gei5pbmZlcjx0eXBlb2YgbW9kdWxlQ29uZmlnPjtcblxuY29uc3QgcmVzb3VyY2VDb25maWcgPSB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKTtcbmV4cG9ydCB0eXBlIFJlc291cmNlID0gei5pbmZlcjx0eXBlb2YgcmVzb3VyY2VDb25maWc+O1xuZXhwb3J0IHR5cGUgRGF0YSA9IFJlc291cmNlO1xuXG5jb25zdCBpbXBvcnRDb25maWcgPSB6Lm9iamVjdCh7XG4gIHRvOiB6LnN0cmluZygpLFxuICBpZDogei5zdHJpbmcoKSxcbiAgcHJvdmlkZXI6IHouYW55KCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgSW1wb3J0ID0gei5pbmZlcjx0eXBlb2YgaW1wb3J0Q29uZmlnPjtcblxuY29uc3QgcHJvdmlkZXJTcGVjaWZpY2F0aW9uID0gei51bmlvbihbXG4gIHoub2JqZWN0KHsgc291cmNlOiB6LnN0cmluZygpLCB2ZXJzaW9uOiB6LnN0cmluZygpIH0pLnBhcnRpYWwoKSxcbiAgei5zdHJpbmcoKSxcbl0pO1xuXG5jb25zdCB0ZXJyYWZvcm1Db25maWcgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHJlcXVpcmVkX3ZlcnNpb246IHouc3RyaW5nKCksXG4gICAgcmVxdWlyZWRfcHJvdmlkZXJzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHByb3ZpZGVyU3BlY2lmaWNhdGlvbikpLFxuICAgIGJhY2tlbmQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpKSxcbiAgfSlcbiAgLnBhcnRpYWwoKTtcbmV4cG9ydCB0eXBlIFRlcnJhZm9ybUNvbmZpZyA9IHouaW5mZXI8dHlwZW9mIHRlcnJhZm9ybUNvbmZpZz47XG5cbmV4cG9ydCBjb25zdCBzY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHoucmVjb3JkKHouc3RyaW5nKCksIHJlc291cmNlQ29uZmlnKSksXG4gICAgaW1wb3J0OiB6LmFycmF5KGltcG9ydENvbmZpZyksXG4gICAgbG9jYWxzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgICBtb2R1bGU6IHoucmVjb3JkKHouc3RyaW5nKCksIG1vZHVsZUNvbmZpZyksXG4gICAgb3V0cHV0OiB6LnJlY29yZCh6LnN0cmluZygpLCBvdXRwdXRDb25maWcpLFxuICAgIHByb3ZpZGVyOiB6LnJlY29yZCh6LnN0cmluZygpLCBwcm92aWRlckNvbmZpZyksXG4gICAgcmVzb3VyY2U6IHoucmVjb3JkKHouc3RyaW5nKCksIHoucmVjb3JkKHouc3RyaW5nKCksIHJlc291cmNlQ29uZmlnKSksXG4gICAgdGVycmFmb3JtOiB6LmFycmF5KHRlcnJhZm9ybUNvbmZpZyksXG4gICAgdmFyaWFibGU6IHoucmVjb3JkKHouc3RyaW5nKCksIHZhcmlhYmxlQ29uZmlnKSxcbiAgfSlcbiAgLnBhcnRpYWwoKTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdktn/hcl2cdk",
3
- "version": "0.24.0-pre.81",
3
+ "version": "0.24.0-pre.84",
4
4
  "description": "Transform HCL into CDK",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -37,12 +37,12 @@
37
37
  "jsii-rosetta": "~5.9.0",
38
38
  "prettier": "2.8.8",
39
39
  "reserved-words": "0.1.2",
40
- "zod": "3.25.76",
41
- "@cdktn/commons": "0.24.0-pre.81",
42
- "@cdktn/hcl2json": "0.24.0-pre.81",
43
- "@cdktn/provider-generator": "0.24.0-pre.81",
44
- "@cdktn/provider-schema": "0.24.0-pre.81",
45
- "cdktn": "0.24.0-pre.81"
40
+ "zod": "4.4.3",
41
+ "@cdktn/hcl2json": "0.24.0-pre.84",
42
+ "@cdktn/commons": "0.24.0-pre.84",
43
+ "@cdktn/provider-generator": "0.24.0-pre.84",
44
+ "@cdktn/provider-schema": "0.24.0-pre.84",
45
+ "cdktn": "0.24.0-pre.84"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/babel__generator": "7.27.0",
@@ -53,7 +53,7 @@
53
53
  "@types/prettier": "2.7.3",
54
54
  "@types/reserved-words": "0.1.4",
55
55
  "execa": "5.1.1",
56
- "fs-extra": "11.3.4",
56
+ "fs-extra": "11.3.6",
57
57
  "tsx": "4.6.1",
58
58
  "typescript": "^5.0.0"
59
59
  },
package/src/index.ts CHANGED
@@ -76,7 +76,7 @@ export async function getParsedHcl(hcl: string) {
76
76
  } catch (err) {
77
77
  throw new Error(`Error: HCL-JSON does not conform to schema. This is not expected, please file a bug under https://github.com/open-constructs/cdk-terrain/issues/new?assignees=&labels=bug%2C+new%2C+feature%2Fconvert&template=bug-report.yml&title=
78
78
  Please include this information:
79
- ${JSON.stringify((err as z.ZodError).errors)}`);
79
+ ${JSON.stringify((err as z.ZodError).issues)}`);
80
80
  }
81
81
 
82
82
  return plan;
package/src/schema.ts CHANGED
@@ -28,13 +28,13 @@ const variableConfig = tfObject({
28
28
  });
29
29
  export type Variable = z.infer<typeof variableConfig>;
30
30
 
31
- const providerConfig = z.array(z.record(z.any()));
31
+ const providerConfig = z.array(z.record(z.string(), z.any()));
32
32
  export type Provider = z.infer<typeof providerConfig>;
33
33
 
34
- const moduleConfig = z.array(z.object({ source: z.string() }).nonstrict());
34
+ const moduleConfig = z.array(z.object({ source: z.string() }).loose());
35
35
  export type Module = z.infer<typeof moduleConfig>;
36
36
 
37
- const resourceConfig = z.array(z.record(z.any()));
37
+ const resourceConfig = z.array(z.record(z.string(), z.any()));
38
38
  export type Resource = z.infer<typeof resourceConfig>;
39
39
  export type Data = Resource;
40
40
 
@@ -53,22 +53,22 @@ const providerSpecification = z.union([
53
53
  const terraformConfig = z
54
54
  .object({
55
55
  required_version: z.string(),
56
- required_providers: z.array(z.record(providerSpecification)),
57
- backend: z.record(z.array(z.record(z.any()))),
56
+ required_providers: z.array(z.record(z.string(), providerSpecification)),
57
+ backend: z.record(z.string(), z.array(z.record(z.string(), z.any()))),
58
58
  })
59
59
  .partial();
60
60
  export type TerraformConfig = z.infer<typeof terraformConfig>;
61
61
 
62
62
  export const schema = z
63
63
  .object({
64
- data: z.record(z.record(resourceConfig)),
64
+ data: z.record(z.string(), z.record(z.string(), resourceConfig)),
65
65
  import: z.array(importConfig),
66
- locals: z.array(z.record(z.any())),
67
- module: z.record(moduleConfig),
68
- output: z.record(outputConfig),
69
- provider: z.record(providerConfig),
70
- resource: z.record(z.record(resourceConfig)),
66
+ locals: z.array(z.record(z.string(), z.any())),
67
+ module: z.record(z.string(), moduleConfig),
68
+ output: z.record(z.string(), outputConfig),
69
+ provider: z.record(z.string(), providerConfig),
70
+ resource: z.record(z.string(), z.record(z.string(), resourceConfig)),
71
71
  terraform: z.array(terraformConfig),
72
- variable: z.record(variableConfig),
72
+ variable: z.record(z.string(), variableConfig),
73
73
  })
74
74
  .partial();