@cubist-labs/cubesigner-sdk 0.4.236 → 0.4.239

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.
@@ -34,6 +34,8 @@ export * from "./contact";
34
34
  export * from "./scopes";
35
35
  /** Policies */
36
36
  export * from "./policy";
37
+ /** Buckets */
38
+ export * from "./bucket";
37
39
  /** Access control */
38
40
  export * from "./acl";
39
41
  /** Utils */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,cAAc,SAAS,CAAC;AACxB,UAAU;AACV,cAAc,qBAAqB,CAAC;AACpC,aAAa;AACb,cAAc,UAAU,CAAC;AACzB,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACvE,oBAAoB;AACpB,cAAc,OAAO,CAAC;AACtB,WAAW;AACX,cAAc,OAAO,CAAC;AACtB,aAAa;AACb,cAAc,UAAU,CAAC;AACzB,YAAY;AACZ,cAAc,QAAQ,CAAC;AACvB,UAAU;AACV,cAAc,OAAO,CAAC;AACtB,WAAW;AACX,cAAc,OAAO,CAAC;AACtB,iBAAiB;AACjB,cAAc,aAAa,CAAC;AAC5B,eAAe;AACf,cAAc,YAAY,CAAC;AAC3B,YAAY;AACZ,cAAc,gBAAgB,CAAC;AAC/B,eAAe;AACf,cAAc,kBAAkB,CAAC;AACjC,sBAAsB;AACtB,cAAc,kBAAkB,CAAC;AACjC,eAAe;AACf,cAAc,WAAW,CAAC;AAC1B,aAAa;AACb,cAAc,UAAU,CAAC;AACzB,eAAe;AACf,cAAc,UAAU,CAAC;AACzB,qBAAqB;AACrB,cAAc,OAAO,CAAC;AACtB,YAAY;AACZ,cAAc,QAAQ,CAAC;AACvB,oCAAoC;AACpC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAClG,uCAAuC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,wBAAwB;AACxB,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,cAAc,SAAS,CAAC;AACxB,UAAU;AACV,cAAc,qBAAqB,CAAC;AACpC,aAAa;AACb,cAAc,UAAU,CAAC;AACzB,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACvE,oBAAoB;AACpB,cAAc,OAAO,CAAC;AACtB,WAAW;AACX,cAAc,OAAO,CAAC;AACtB,aAAa;AACb,cAAc,UAAU,CAAC;AACzB,YAAY;AACZ,cAAc,QAAQ,CAAC;AACvB,UAAU;AACV,cAAc,OAAO,CAAC;AACtB,WAAW;AACX,cAAc,OAAO,CAAC;AACtB,iBAAiB;AACjB,cAAc,aAAa,CAAC;AAC5B,eAAe;AACf,cAAc,YAAY,CAAC;AAC3B,YAAY;AACZ,cAAc,gBAAgB,CAAC;AAC/B,eAAe;AACf,cAAc,kBAAkB,CAAC;AACjC,sBAAsB;AACtB,cAAc,kBAAkB,CAAC;AACjC,eAAe;AACf,cAAc,WAAW,CAAC;AAC1B,aAAa;AACb,cAAc,UAAU,CAAC;AACzB,eAAe;AACf,cAAc,UAAU,CAAC;AACzB,cAAc;AACd,cAAc,UAAU,CAAC;AACzB,qBAAqB;AACrB,cAAc,OAAO,CAAC;AACtB,YAAY;AACZ,cAAc,QAAQ,CAAC;AACvB,oCAAoC;AACpC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAClG,uCAAuC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,wBAAwB;AACxB,cAAc,OAAO,CAAC"}
package/dist/src/index.js CHANGED
@@ -52,6 +52,8 @@ __exportStar(require("./contact"), exports);
52
52
  __exportStar(require("./scopes"), exports);
53
53
  /** Policies */
54
54
  __exportStar(require("./policy"), exports);
55
+ /** Buckets */
56
+ __exportStar(require("./bucket"), exports);
55
57
  /** Access control */
56
58
  __exportStar(require("./acl"), exports);
57
59
  /** Utils */
@@ -67,4 +69,4 @@ var diffie_hellman_1 = require("./diffie_hellman");
67
69
  Object.defineProperty(exports, "diffieHellmanDecrypt", { enumerable: true, get: function () { return diffie_hellman_1.diffieHellmanDecrypt; } });
68
70
  /** Ethers.js helpers */
69
71
  __exportStar(require("./evm"), exports);
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxhQUFhO0FBQ2IsMENBQXdCO0FBQ3hCLFVBQVU7QUFDVixzREFBb0M7QUFDcEMsYUFBYTtBQUNiLDJDQUF5QjtBQUN6QixnQkFBZ0I7QUFDaEIsb0RBQXVFO0FBQWxELGtIQUFBLG1CQUFtQixPQUFBO0FBQ3hDLG9CQUFvQjtBQUNwQix3Q0FBc0I7QUFDdEIsV0FBVztBQUNYLHdDQUFzQjtBQUN0QixhQUFhO0FBQ2IsMkNBQXlCO0FBQ3pCLFlBQVk7QUFDWix5Q0FBdUI7QUFDdkIsVUFBVTtBQUNWLHdDQUFzQjtBQUN0QixXQUFXO0FBQ1gsd0NBQXNCO0FBQ3RCLGlCQUFpQjtBQUNqQiw4Q0FBNEI7QUFDNUIsZUFBZTtBQUNmLDZDQUEyQjtBQUMzQixZQUFZO0FBQ1osaURBQStCO0FBQy9CLGVBQWU7QUFDZixtREFBaUM7QUFDakMsc0JBQXNCO0FBQ3RCLG1EQUFpQztBQUNqQyxlQUFlO0FBQ2YsNENBQTBCO0FBQzFCLGFBQWE7QUFDYiwyQ0FBeUI7QUFDekIsZUFBZTtBQUNmLDJDQUF5QjtBQUN6QixxQkFBcUI7QUFDckIsd0NBQXNCO0FBQ3RCLFlBQVk7QUFDWix5Q0FBdUI7QUFDdkIsb0NBQW9DO0FBQ3BDLDZDQUFrRztBQUF6Rix5R0FBQSxVQUFVLE9BQUE7QUFBRSwrR0FBQSxnQkFBZ0IsT0FBQTtBQUFFLGdIQUFBLGlCQUFpQixPQUFBO0FBQUUsK0dBQUEsZ0JBQWdCLE9BQUE7QUFDMUUsdUNBQXVDO0FBQ3ZDLG1EQUF3RDtBQUEvQyxzSEFBQSxvQkFBb0IsT0FBQTtBQUM3Qix3QkFBd0I7QUFDeEIsd0NBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEVycm9ycyAqL1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JcIjtcbi8qKiBBUEkgKi9cbmV4cG9ydCAqIGZyb20gXCIuL2NsaWVudC9hcGlfY2xpZW50XCI7XG4vKiogQ2xpZW50ICovXG5leHBvcnQgKiBmcm9tIFwiLi9jbGllbnRcIjtcbi8qKiBDYWxsYmFja3MgKi9cbmV4cG9ydCB7IEVycm9yRXZlbnQsIFNlc3Npb25FeHBpcmVkRXZlbnQgfSBmcm9tIFwiLi9jbGllbnQvYmFzZV9jbGllbnRcIjtcbi8qKiBPcmdhbml6YXRpb25zICovXG5leHBvcnQgKiBmcm9tIFwiLi9vcmdcIjtcbi8qKiBLZXlzICovXG5leHBvcnQgKiBmcm9tIFwiLi9rZXlcIjtcbi8qKiBFdmVudHMgKi9cbmV4cG9ydCAqIGZyb20gXCIuL2V2ZW50c1wiO1xuLyoqIFJvbGVzICovXG5leHBvcnQgKiBmcm9tIFwiLi9yb2xlXCI7XG4vKiogRW52ICovXG5leHBvcnQgKiBmcm9tIFwiLi9lbnZcIjtcbi8qKiBGaWRvICovXG5leHBvcnQgKiBmcm9tIFwiLi9tZmFcIjtcbi8qKiBQYWdpbmF0aW9uICovXG5leHBvcnQgKiBmcm9tIFwiLi9wYWdpbmF0b3JcIjtcbi8qKiBSZXNwb25zZSAqL1xuZXhwb3J0ICogZnJvbSBcIi4vcmVzcG9uc2VcIjtcbi8qKiBUeXBlcyAqL1xuZXhwb3J0ICogZnJvbSBcIi4vc2NoZW1hX3R5cGVzXCI7XG4vKiogU2Vzc2lvbnMgKi9cbmV4cG9ydCAqIGZyb20gXCIuL3NpZ25lcl9zZXNzaW9uXCI7XG4vKiogU2Vzc2lvbiBzdG9yYWdlICovXG5leHBvcnQgKiBmcm9tIFwiLi9jbGllbnQvc2Vzc2lvblwiO1xuLyoqIENvbnRhY3RzICovXG5leHBvcnQgKiBmcm9tIFwiLi9jb250YWN0XCI7XG4vKiogU2NvcGVzICovXG5leHBvcnQgKiBmcm9tIFwiLi9zY29wZXNcIjtcbi8qKiBQb2xpY2llcyAqL1xuZXhwb3J0ICogZnJvbSBcIi4vcG9saWN5XCI7XG4vKiogQWNjZXNzIGNvbnRyb2wgKi9cbmV4cG9ydCAqIGZyb20gXCIuL2FjbFwiO1xuLyoqIFV0aWxzICovXG5leHBvcnQgKiBmcm9tIFwiLi91dGlsXCI7XG4vKiogVXNlci1leHBvcnQgZGVjcnlwdGlvbiBoZWxwZXIgKi9cbmV4cG9ydCB7IGxvYWRDcnlwdG8sIGxvYWRTdWJ0bGVDcnlwdG8sIHVzZXJFeHBvcnREZWNyeXB0LCB1c2VyRXhwb3J0S2V5Z2VuIH0gZnJvbSBcIi4vdXNlcl9leHBvcnRcIjtcbi8qKiBEaWZmaWUtSGVsbG1hbiBkZWNyeXB0aW9uIGhlbHBlciAqL1xuZXhwb3J0IHsgZGlmZmllSGVsbG1hbkRlY3J5cHQgfSBmcm9tIFwiLi9kaWZmaWVfaGVsbG1hblwiO1xuLyoqIEV0aGVycy5qcyBoZWxwZXJzICovXG5leHBvcnQgKiBmcm9tIFwiLi9ldm1cIjtcbiJdfQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxhQUFhO0FBQ2IsMENBQXdCO0FBQ3hCLFVBQVU7QUFDVixzREFBb0M7QUFDcEMsYUFBYTtBQUNiLDJDQUF5QjtBQUN6QixnQkFBZ0I7QUFDaEIsb0RBQXVFO0FBQWxELGtIQUFBLG1CQUFtQixPQUFBO0FBQ3hDLG9CQUFvQjtBQUNwQix3Q0FBc0I7QUFDdEIsV0FBVztBQUNYLHdDQUFzQjtBQUN0QixhQUFhO0FBQ2IsMkNBQXlCO0FBQ3pCLFlBQVk7QUFDWix5Q0FBdUI7QUFDdkIsVUFBVTtBQUNWLHdDQUFzQjtBQUN0QixXQUFXO0FBQ1gsd0NBQXNCO0FBQ3RCLGlCQUFpQjtBQUNqQiw4Q0FBNEI7QUFDNUIsZUFBZTtBQUNmLDZDQUEyQjtBQUMzQixZQUFZO0FBQ1osaURBQStCO0FBQy9CLGVBQWU7QUFDZixtREFBaUM7QUFDakMsc0JBQXNCO0FBQ3RCLG1EQUFpQztBQUNqQyxlQUFlO0FBQ2YsNENBQTBCO0FBQzFCLGFBQWE7QUFDYiwyQ0FBeUI7QUFDekIsZUFBZTtBQUNmLDJDQUF5QjtBQUN6QixjQUFjO0FBQ2QsMkNBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQix3Q0FBc0I7QUFDdEIsWUFBWTtBQUNaLHlDQUF1QjtBQUN2QixvQ0FBb0M7QUFDcEMsNkNBQWtHO0FBQXpGLHlHQUFBLFVBQVUsT0FBQTtBQUFFLCtHQUFBLGdCQUFnQixPQUFBO0FBQUUsZ0hBQUEsaUJBQWlCLE9BQUE7QUFBRSwrR0FBQSxnQkFBZ0IsT0FBQTtBQUMxRSx1Q0FBdUM7QUFDdkMsbURBQXdEO0FBQS9DLHNIQUFBLG9CQUFvQixPQUFBO0FBQzdCLHdCQUF3QjtBQUN4Qix3Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogRXJyb3JzICovXG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvclwiO1xuLyoqIEFQSSAqL1xuZXhwb3J0ICogZnJvbSBcIi4vY2xpZW50L2FwaV9jbGllbnRcIjtcbi8qKiBDbGllbnQgKi9cbmV4cG9ydCAqIGZyb20gXCIuL2NsaWVudFwiO1xuLyoqIENhbGxiYWNrcyAqL1xuZXhwb3J0IHsgRXJyb3JFdmVudCwgU2Vzc2lvbkV4cGlyZWRFdmVudCB9IGZyb20gXCIuL2NsaWVudC9iYXNlX2NsaWVudFwiO1xuLyoqIE9yZ2FuaXphdGlvbnMgKi9cbmV4cG9ydCAqIGZyb20gXCIuL29yZ1wiO1xuLyoqIEtleXMgKi9cbmV4cG9ydCAqIGZyb20gXCIuL2tleVwiO1xuLyoqIEV2ZW50cyAqL1xuZXhwb3J0ICogZnJvbSBcIi4vZXZlbnRzXCI7XG4vKiogUm9sZXMgKi9cbmV4cG9ydCAqIGZyb20gXCIuL3JvbGVcIjtcbi8qKiBFbnYgKi9cbmV4cG9ydCAqIGZyb20gXCIuL2VudlwiO1xuLyoqIEZpZG8gKi9cbmV4cG9ydCAqIGZyb20gXCIuL21mYVwiO1xuLyoqIFBhZ2luYXRpb24gKi9cbmV4cG9ydCAqIGZyb20gXCIuL3BhZ2luYXRvclwiO1xuLyoqIFJlc3BvbnNlICovXG5leHBvcnQgKiBmcm9tIFwiLi9yZXNwb25zZVwiO1xuLyoqIFR5cGVzICovXG5leHBvcnQgKiBmcm9tIFwiLi9zY2hlbWFfdHlwZXNcIjtcbi8qKiBTZXNzaW9ucyAqL1xuZXhwb3J0ICogZnJvbSBcIi4vc2lnbmVyX3Nlc3Npb25cIjtcbi8qKiBTZXNzaW9uIHN0b3JhZ2UgKi9cbmV4cG9ydCAqIGZyb20gXCIuL2NsaWVudC9zZXNzaW9uXCI7XG4vKiogQ29udGFjdHMgKi9cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnRhY3RcIjtcbi8qKiBTY29wZXMgKi9cbmV4cG9ydCAqIGZyb20gXCIuL3Njb3Blc1wiO1xuLyoqIFBvbGljaWVzICovXG5leHBvcnQgKiBmcm9tIFwiLi9wb2xpY3lcIjtcbi8qKiBCdWNrZXRzICovXG5leHBvcnQgKiBmcm9tIFwiLi9idWNrZXRcIjtcbi8qKiBBY2Nlc3MgY29udHJvbCAqL1xuZXhwb3J0ICogZnJvbSBcIi4vYWNsXCI7XG4vKiogVXRpbHMgKi9cbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxcIjtcbi8qKiBVc2VyLWV4cG9ydCBkZWNyeXB0aW9uIGhlbHBlciAqL1xuZXhwb3J0IHsgbG9hZENyeXB0bywgbG9hZFN1YnRsZUNyeXB0bywgdXNlckV4cG9ydERlY3J5cHQsIHVzZXJFeHBvcnRLZXlnZW4gfSBmcm9tIFwiLi91c2VyX2V4cG9ydFwiO1xuLyoqIERpZmZpZS1IZWxsbWFuIGRlY3J5cHRpb24gaGVscGVyICovXG5leHBvcnQgeyBkaWZmaWVIZWxsbWFuRGVjcnlwdCB9IGZyb20gXCIuL2RpZmZpZV9oZWxsbWFuXCI7XG4vKiogRXRoZXJzLmpzIGhlbHBlcnMgKi9cbmV4cG9ydCAqIGZyb20gXCIuL2V2bVwiO1xuIl19
@@ -1,4 +1,4 @@
1
- import type { ApiClient, C2FResponse, CubeSignerResponse, EditPolicy, Empty, InvokeC2FResponse, JsonValue, KeyPolicy, KeyPolicyRule, MfaReceipts, PolicyAttachedToId, PolicyInfo, PolicyType, RolePolicy, RolePolicyRule, UpdatePolicyRequest, WasmRule, Acl, AceAttribute, PolicyAction } from ".";
1
+ import type { ApiClient, C2FResponse, CubeSignerResponse, EditPolicy, Empty, InvokeC2FResponse, JsonValue, KeyPolicy, KeyPolicyRule, MfaReceipts, PolicyAttachedToId, PolicyType, RolePolicy, RolePolicyRule, UpdatePolicyRequest, WasmRule, AceAttribute, PolicyAction, Ace, PolicyInfo } from ".";
2
2
  /**
3
3
  * Named policy rule type.
4
4
  */
@@ -7,7 +7,7 @@ export type PolicyRule = KeyPolicyRule | RolePolicyRule | WasmRule;
7
7
  * A helper type for {@link PolicyInfo} with a more detailed `acl` type.
8
8
  */
9
9
  type NamedPolicyInfo = PolicyInfo & {
10
- acl?: Acl<PolicyAction, PolicyCtx>;
10
+ acl?: PolicyAcl;
11
11
  };
12
12
  /**
13
13
  * The policy info for a named key policy.
@@ -36,7 +36,9 @@ export type C2FInfo = WasmPolicyInfo;
36
36
  */
37
37
  export type Version = `v${number}` | `latest`;
38
38
  /** A policy access control entry. */
39
- export type PolicyAcl = Acl<PolicyAction, PolicyCtx>;
39
+ export type PolicyAce = Ace<PolicyAction, PolicyCtx>;
40
+ /** A policy access control list. */
41
+ export type PolicyAcl = PolicyAce[];
40
42
  /** Additional contexts when using policies. */
41
43
  export type PolicyCtx = {
42
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/policy.ts"],"names":[],"mappings":"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"}
@@ -354,7 +354,7 @@ class C2FFunction extends NamedPolicy {
354
354
  async setWasmFunction(policy, mfaReceipt) {
355
355
  // upload the policy object
356
356
  const hash = await uploadWasmFunction(this.apiClient, policy);
357
- // update this policy with the new policy verison.
357
+ // update this policy with the new policy version.
358
358
  const body = { rules: [{ hash }] };
359
359
  this.data = (await this.update(body, mfaReceipt));
360
360
  }
@@ -513,4 +513,4 @@ _C2FInvocation_data = new WeakMap();
513
513
  exports.NamedWasmPolicy = C2FFunction;
514
514
  /** The result of invoking a named WASM policy. */
515
515
  exports.PolicyInvocation = C2FInvocation;
516
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFnR0EsZ0RBdUJDO0FBaEdELHdCQUFxQztBQWdFckM7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLFNBQW9CLEVBQ3BCLE1BQWtCO0lBRWxCLDhEQUE4RDtJQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsbUJBQWdCLEdBQUUsQ0FBQztJQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUzRCxxQkFBcUI7SUFDckIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVsRSx5QkFBeUI7SUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFO1FBQ25DLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLE1BQU07S0FDYixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBRW5EOztHQUVHO0FBQ0gsTUFBc0IsV0FBVztJQUkvQjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQW9CLEVBQUUsSUFBZ0I7UUFDcEQsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSxjQUFjLENBQUMsU0FBUyxFQUFFLElBQXFCLENBQUMsQ0FBQztZQUM5RCxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBc0IsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFlLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixJQUFJLEVBQUU7UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQWdCO1FBQzVCLElBQUksV0FBVyxDQUFDO1FBRWhCLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFvQixDQUFDO1FBQ3RGLENBQUM7UUFFRCxPQUFPLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWSxFQUFFLFVBQXdCO1FBQ2xELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQWEsRUFBRSxVQUF3QjtRQUNwRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsUUFBcUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFtQixFQUFFLFVBQXdCO1FBQzdELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBc0IsRUFBRSxVQUF3QjtRQUNsRSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFjLEVBQUUsVUFBd0I7UUFDbkQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxXQUFXO1FBQ2YsOERBQThEO1FBQzlELDBDQUEwQztRQUMxQyw4REFBOEQ7UUFDOUQsMENBQTBDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLFdBQVcsR0FBeUIsRUFBRSxDQUFDO1FBRTNDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNoRSxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzFCLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBQ0YsV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVELE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUF3QjtRQUNuQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFFN0U7Ozs7OztPQU1HO0lBQ0gsWUFBc0IsU0FBb0IsRUFBRSxJQUFxQjtRQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTyxLQUFLLENBQUMsTUFBTSxDQUNwQixPQUE0QixFQUM1QixVQUF3QjtRQUV4QixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBcUIsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBbUIsUUFBUTtRQUMvQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFvQixDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUE1UEQsa0NBNFBDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxXQUFXO0lBRzdDOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBZ0IsRUFBRSxVQUF3QjtRQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFFN0U7Ozs7OztPQU1HO0lBQ0gsWUFBWSxTQUFvQixFQUFFLElBQW1CO1FBQ25ELEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBN0JELHdDQTZCQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLFdBQVc7SUFHOUM7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFpQixFQUFFLFVBQXdCO1FBQ3hELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUU3RTs7Ozs7O09BTUc7SUFDSCxZQUFZLFNBQW9CLEVBQUUsSUFBb0I7UUFDcEQsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUE3QkQsMENBNkJDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFdBQVksU0FBUSxXQUFXO0lBRzFDOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQWtCLEVBQUUsVUFBd0I7UUFDaEUsMkJBQTJCO1FBQzNCLE1BQU0sSUFBSSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU5RCxrREFBa0Q7UUFDbEQsTUFBTSxJQUFJLEdBQXdCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQVksQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FDVixLQUFjLEVBQ2QsVUFBbUIsUUFBUSxFQUMzQixPQUFtQixFQUNuQixNQUFlO1FBRWYsMkVBQTJFO1FBQzNFLGlFQUFpRTtRQUNqRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFO1lBQy9ELE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTztZQUNQLE9BQU8sRUFBRSxNQUFNO1NBQ2hCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBYUQsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFFN0U7Ozs7OztPQU1HO0lBQ0gsWUFBWSxTQUFvQixFQUFFLElBQWE7UUFDN0MsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQXZCekIscURBQXFEO1FBQ3JEOzs7Ozs7O1dBT0c7UUFDSCxrQkFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFlbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBeEVELGtDQXdFQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFLM0I7Ozs7T0FJRztJQUNILElBQUksRUFBRTtRQUNKLE9BQU8sdUJBQUEsSUFBSSw4QkFBTSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksdUJBQUEsSUFBSSw4QkFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxLQUFLO1FBQ1AsT0FBTyx1QkFBQSxJQUFJLDhCQUFNLENBQUMsS0FBcUIsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVc7UUFDZixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBRTdFOzs7Ozs7T0FNRztJQUNILFlBQVksU0FBb0IsRUFBRSxJQUFxQjtRQWpEdkQsa0VBQWtFO1FBQ3pELDhDQUFzQjtRQUMvQix5Q0FBdUI7UUFnRHJCLHVCQUFBLElBQUksK0JBQWMsU0FBUyxNQUFBLENBQUM7UUFDNUIsdUJBQUEsSUFBSSwwQkFBUyxJQUFJLE1BQUEsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxLQUFLLENBQUMsS0FBSztRQUNqQix1QkFBQSxJQUFJLDBCQUFTLENBQUMsTUFBTSx1QkFBQSxJQUFJLG1DQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFvQixNQUFBLENBQUM7UUFDekYsT0FBTyx1QkFBQSxJQUFJLDhCQUFNLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBakVELDRDQWlFQzs7QUFFRDs7R0FFRztBQUNILE1BQWEsYUFBYTtJQUd4QiwyQ0FBMkM7SUFDM0MsSUFBSSxRQUFRO1FBQ1YsT0FBTyx1QkFBQSxJQUFJLDJCQUFNLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUFBLElBQUksMkJBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBQSxJQUFJLDJCQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBRTdFOzs7OztPQUtHO0lBQ0ssT0FBTyxDQUFDLEdBQVc7UUFDekIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLElBQXVCO1FBckMxQixzQ0FBeUI7UUFzQ2hDLHVCQUFBLElBQUksdUJBQVMsSUFBSSxNQUFBLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBekNELHNDQXlDQzs7QUFNRCx5Q0FBeUM7QUFDNUIsUUFBQSxlQUFlLEdBQUcsV0FBVyxDQUFDO0FBSTNDLGtEQUFrRDtBQUNyQyxRQUFBLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQXBpQ2xpZW50LFxuICBDMkZSZXNwb25zZSxcbiAgQ3ViZVNpZ25lclJlc3BvbnNlLFxuICBFZGl0UG9saWN5LFxuICBFbXB0eSxcbiAgSW52b2tlQzJGUmVzcG9uc2UsXG4gIEpzb25WYWx1ZSxcbiAgS2V5UG9saWN5LFxuICBLZXlQb2xpY3lSdWxlLFxuICBNZmFSZWNlaXB0cyxcbiAgUG9saWN5QXR0YWNoZWRUb0lkLFxuICBQb2xpY3lJbmZvLFxuICBQb2xpY3lUeXBlLFxuICBSb2xlUG9saWN5LFxuICBSb2xlUG9saWN5UnVsZSxcbiAgVXBkYXRlUG9saWN5UmVxdWVzdCxcbiAgV2FzbVJ1bGUsXG4gIEFjbCxcbiAgQWNlQXR0cmlidXRlLFxuICBQb2xpY3lBY3Rpb24sXG59IGZyb20gXCIuXCI7XG5cbmltcG9ydCB7IGxvYWRTdWJ0bGVDcnlwdG8gfSBmcm9tIFwiLlwiO1xuXG4vKipcbiAqIE5hbWVkIHBvbGljeSBydWxlIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeVJ1bGUgPSBLZXlQb2xpY3lSdWxlIHwgUm9sZVBvbGljeVJ1bGUgfCBXYXNtUnVsZTtcblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlIGZvciB7QGxpbmsgUG9saWN5SW5mb30gd2l0aCBhIG1vcmUgZGV0YWlsZWQgYGFjbGAgdHlwZS5cbiAqL1xudHlwZSBOYW1lZFBvbGljeUluZm8gPSBQb2xpY3lJbmZvICYge1xuICBhY2w/OiBBY2w8UG9saWN5QWN0aW9uLCBQb2xpY3lDdHg+O1xufTtcblxuLyoqXG4gKiBUaGUgcG9saWN5IGluZm8gZm9yIGEgbmFtZWQga2V5IHBvbGljeS5cbiAqL1xuZXhwb3J0IHR5cGUgS2V5UG9saWN5SW5mbyA9IE5hbWVkUG9saWN5SW5mbyAmIHtcbiAgcG9saWN5X3R5cGU6IFwiS2V5XCI7XG59O1xuXG4vKipcbiAqIFRoZSBwb2xpY3kgaW5mbyBmb3IgYSBuYW1lZCByb2xlIHBvbGljeS5cbiAqL1xuZXhwb3J0IHR5cGUgUm9sZVBvbGljeUluZm8gPSBOYW1lZFBvbGljeUluZm8gJiB7XG4gIHBvbGljeV90eXBlOiBcIlJvbGVcIjtcbn07XG5cbi8qKlxuICogVGhlIHBvbGljeSBpbmZvIGZvciBhIG5hbWVkIHdhc20gcG9saWN5LlxuICovXG5leHBvcnQgdHlwZSBXYXNtUG9saWN5SW5mbyA9IE5hbWVkUG9saWN5SW5mbyAmIHtcbiAgcG9saWN5X3R5cGU6IFwiV2FzbVwiO1xufTtcblxuLyoqXG4gKiBUaGUgcG9saWN5IGluZm8gZm9yIGEgQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBDMkZJbmZvID0gV2FzbVBvbGljeUluZm87XG5cbi8qKlxuICogQSBoZWxwZXIgdHlwZSBmb3IgdmFsaWQgbmFtZWQgcG9saWN5IHZlcnNpb24gc3RyaW5ncy5cbiAqL1xuZXhwb3J0IHR5cGUgVmVyc2lvbiA9IGB2JHtudW1iZXJ9YCB8IGBsYXRlc3RgO1xuXG4vKiogQSBwb2xpY3kgYWNjZXNzIGNvbnRyb2wgZW50cnkuICovXG5leHBvcnQgdHlwZSBQb2xpY3lBY2wgPSBBY2w8UG9saWN5QWN0aW9uLCBQb2xpY3lDdHg+O1xuXG4vKiogQWRkaXRpb25hbCBjb250ZXh0cyB3aGVuIHVzaW5nIHBvbGljaWVzLiAqL1xuZXhwb3J0IHR5cGUgUG9saWN5Q3R4ID0ge1xuICAvKipcbiAgICogVGhlIHJlc291cmNlcyAoa2V5cywgcm9sZXMsIGFuZCBrZXktaW4tcm9sZXMpIHRoYXQgdGhlIGFjY2VzcyBjb250cm9sIGVudHJ5XG4gICAqIGFwcGxpZXMgdG8uXG4gICAqL1xuICByZXNvdXJjZXM6IEFjZUF0dHJpYnV0ZTxQb2xpY3lSZXNvdXJjZT47XG59O1xuXG4vKiogQSByZXNvdXJjZSBhIHBvbGljeSBpcyBpbnZva2VkIHdpdGggb3IgYXR0YWNoZWQgdG8uICovXG5leHBvcnQgdHlwZSBQb2xpY3lSZXNvdXJjZSA9XG4gIC8qKiBBIGtleSBvciByb2xlIGlkLiAqL1xuICB8IHN0cmluZ1xuICAvKiogS2V5cyBhdHRhY2hlZCB0byByb2xlcy4gKi9cbiAgfCB7IGtleV9pZHM6IFwiKlwiIHwgc3RyaW5nW107IHJvbGVfaWRzOiBcIipcIiB8IHN0cmluZ1tdIH07XG5cbi8qKlxuICogVXBsb2FkIHRoZSBnaXZlbiBXYXNtIENvbmZpZGVudGlhbCBDbG91ZCBGdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAqIEBwYXJhbSBwb2xpY3kgVGhlIFdhc20gZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgV2FzbSBmdW5jdGlvbiBvYmplY3QgaGFzaCB0byB1c2UgZm9yIGNyZWF0aW5nL3VwZGF0aW5nIEMyRiBwb2xpY2llcy5cbiAqIEB0aHJvd3MgaWYgdXBsb2FkaW5nIHRoZSBwb2xpY3kgZmFpbHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwbG9hZFdhc21GdW5jdGlvbihcbiAgYXBpQ2xpZW50OiBBcGlDbGllbnQsXG4gIHBvbGljeTogVWludDhBcnJheSxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIGdldCB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHVwbG9hZCB1cmwuXG4gIGNvbnN0IHN1YnRsZSA9IGF3YWl0IGxvYWRTdWJ0bGVDcnlwdG8oKTtcbiAgY29uc3QgaGFzaEJ5dGVzID0gYXdhaXQgc3VidGxlLmRpZ2VzdChcIlNIQS0yNTZcIiwgcG9saWN5KTtcbiAgY29uc3QgaGFzaCA9IFwiMHhcIiArIEJ1ZmZlci5mcm9tKGhhc2hCeXRlcykudG9TdHJpbmcoXCJoZXhcIik7XG5cbiAgLy8gZ2V0IHRoZSB1cGxvYWQgVVJMXG4gIGNvbnN0IHsgc2lnbmVkX3VybCB9ID0gYXdhaXQgYXBpQ2xpZW50Lndhc21Qb2xpY3lVcGxvYWQoeyBoYXNoIH0pO1xuXG4gIC8vIHVwbG9hZCB0aGUgd2FzbSBvYmplY3RcbiAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKHNpZ25lZF91cmwsIHtcbiAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgYm9keTogcG9saWN5LFxuICB9KTtcblxuICBpZiAoIXJlc3Aub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byB1cGxvYWQgZnVuY3Rpb24gd2l0aCBzdGF0dXM6ICR7cmVzcC5zdGF0dXN9OiAke3Jlc3Auc3RhdHVzVGV4dH1gKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoO1xufVxuXG4vKipcbiAqIFVwbG9hZCB0aGUgZ2l2ZW4gV2FzbSBwb2xpY3kuXG4gKlxuICogQHBhcmFtIGFwaUNsaWVudCBUaGUgQVBJIGNsaWVudCB0byB1c2UuXG4gKiBAcGFyYW0gcG9saWN5IFRoZSBXYXNtIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIFdhc20gZnVuY3Rpb24gb2JqZWN0IGhhc2ggdG8gdXNlIGZvciBjcmVhdGluZy91cGRhdGluZyBDMkYgcG9saWNpZXMuXG4gKiBAdGhyb3dzIGlmIHVwbG9hZGluZyB0aGUgcG9saWN5IGZhaWxzLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRXYXNtUG9saWN5ID0gdXBsb2FkV2FzbUZ1bmN0aW9uO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIGZvciBzaGFyZWQgbWV0aG9kcyBiZXR3ZWVuIGtleSwgcm9sZSBhbmQgV2FzbSBwb2xpY2llcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hbWVkUG9saWN5IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwaUNsaWVudDogQXBpQ2xpZW50O1xuICBwcm90ZWN0ZWQgZGF0YTogTmFtZWRQb2xpY3lJbmZvO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBhIG5hbWVkIHBvbGljeSBmcm9tIGEgcG9saWN5IGluZm8uXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIGFwaSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gaW5mbyBUaGUgcG9saWN5IGluZm8uXG4gICAqIEByZXR1cm5zIFRoZSBuYW1lZCBwb2xpY3kgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gaW5mby5cbiAgICovXG4gIHN0YXRpYyBmcm9tSW5mbyhhcGlDbGllbnQ6IEFwaUNsaWVudCwgaW5mbzogUG9saWN5SW5mbyk6IE5hbWVkUG9saWN5IHtcbiAgICBzd2l0Y2ggKGluZm8ucG9saWN5X3R5cGUpIHtcbiAgICAgIGNhc2UgXCJLZXlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBOYW1lZEtleVBvbGljeShhcGlDbGllbnQsIGluZm8gYXMgS2V5UG9saWN5SW5mbyk7XG4gICAgICBjYXNlIFwiUm9sZVwiOlxuICAgICAgICByZXR1cm4gbmV3IE5hbWVkUm9sZVBvbGljeShhcGlDbGllbnQsIGluZm8gYXMgUm9sZVBvbGljeUluZm8pO1xuICAgICAgY2FzZSBcIldhc21cIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDMkZGdW5jdGlvbihhcGlDbGllbnQsIGluZm8gYXMgQzJGSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRoZSBwb2xpY3kgaWQgKi9cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wb2xpY3lfaWQ7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHBvbGljeSB0eXBlICovXG4gIGdldCBwb2xpY3lUeXBlKCk6IFBvbGljeVR5cGUge1xuICAgIHJldHVybiB0aGlzLmRhdGEucG9saWN5X3R5cGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgcG9saWN5LlxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgcG9saWN5IHZlcnNpb24gdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBUaGUgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgcG9saWN5LlxuICAgKi9cbiAgYXN5bmMgdmVyc2lvbih2ZXJzaW9uOiBWZXJzaW9uKTogUHJvbWlzZTxOYW1lZFBvbGljeVJ1bGVzPiB7XG4gICAgbGV0IHZlcnNpb25JbmZvO1xuXG4gICAgaWYgKHZlcnNpb24gPT0gYHYke3RoaXMuZGF0YS52ZXJzaW9ufWApIHtcbiAgICAgIHZlcnNpb25JbmZvID0gdGhpcy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2ZXJzaW9uSW5mbyA9IChhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lHZXQodGhpcy5pZCwgdmVyc2lvbikpIGFzIE5hbWVkUG9saWN5SW5mbztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE5hbWVkUG9saWN5UnVsZXModGhpcy5hcGlDbGllbnQsIHZlcnNpb25JbmZvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcG9saWN5LlxuICAgKi9cbiAgYXN5bmMgbGF0ZXN0KCk6IFByb21pc2U8TmFtZWRQb2xpY3lSdWxlcz4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKFwibGF0ZXN0XCIpO1xuICAgIHJldHVybiBuZXcgTmFtZWRQb2xpY3lSdWxlcyh0aGlzLmFwaUNsaWVudCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgY3VycmVudCBuYW1lIG9mIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBwb2xpY3kgbmFtZS5cbiAgICovXG4gIGFzeW5jIG5hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaCgpO1xuICAgIHJldHVybiBkYXRhLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IG5hbWUgZm9yIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuZXcgcG9saWN5IG5hbWUuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXROYW1lKG5hbWU6IHN0cmluZywgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGUoeyBuYW1lIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgb3duZXIgb2YgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHVzZXIgaWQgb2YgdGhlIHBvbGljeSBvd25lci5cbiAgICogQGV4YW1wbGUgVXNlciNjM2I5Mzc5Yy00ZThjLTQyMTYtYmQwYS02NWFjZTUzY2Y5OGZcbiAgICovXG4gIGFzeW5jIG93bmVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goKTtcbiAgICByZXR1cm4gZGF0YS5vd25lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgb3duZXIgZm9yIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSBvd25lciBUaGUgbmV3IG93bmVyIG9mIHRoZSBwb2xpY3kuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRPd25lcihvd25lcjogc3RyaW5nLCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IG93bmVyIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuZCByZXR1cm4gdGhlIG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgcG9saWN5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcG9saWN5IG1ldGFkYXRhLlxuICAgKi9cbiAgYXN5bmMgbWV0YWRhdGEoKTogUHJvbWlzZTxKc29uVmFsdWU+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaCgpO1xuICAgIHJldHVybiBkYXRhLm1ldGFkYXRhIGFzIEpzb25WYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgbmV3IG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgbmFtZWQgcG9saWN5IChvdmVyd3JpdGluZyB0aGUgZXhpc3RpbmcgdmFsdWUpLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0YWRhdGEgVGhlIG5ldyBtZXRhZGF0YSBmb3IgdGhlIG5hbWVkIHBvbGljeS5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldE1ldGFkYXRhKG1ldGFkYXRhOiBKc29uVmFsdWUsIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgbWV0YWRhdGEgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgZWRpdCBwb2xpY3kgZm9yIHRoZSBuYW1lZCBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBlZGl0IHBvbGljeSBmb3IgdGhpcyBuYW1lZCBwb2xpY3kuXG4gICAqL1xuICBhc3luYyBlZGl0UG9saWN5KCk6IFByb21pc2U8RWRpdFBvbGljeSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKCk7XG4gICAgcmV0dXJuIGRhdGEuZWRpdF9wb2xpY3k7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IGVkaXQgcG9saWN5IGZvciB0aGUgbmFtZWQgcG9saWN5LlxuICAgKlxuICAgKiBAcGFyYW0gZWRpdFBvbGljeSBUaGUgbmV3IGVkaXQgcG9saWN5LlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdChzKS5cbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZFxuICAgKi9cbiAgYXN5bmMgc2V0RWRpdFBvbGljeShlZGl0UG9saWN5OiBFZGl0UG9saWN5LCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IGVkaXRfcG9saWN5OiBlZGl0UG9saWN5IH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuZCByZXR1cm4gdGhlIGFjY2VzcyBjb250cm9sIGVudHJpZXMgZm9yIHRoZSBuYW1lZCBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhY2Nlc3MgY29udHJvbCBlbnRyaWVzIGZvciB0aGlzIG5hbWVkIHBvbGljeS5cbiAgICovXG4gIGFzeW5jIGFjbCgpOiBQcm9taXNlPFBvbGljeUFjbCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKCk7XG4gICAgcmV0dXJuIGRhdGEuYWNsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgbmV3IGFjY2VzcyBjb250cm9sIGVudHJpZXMgZm9yIHRoZSBuYW1lZCBwb2xpY3kgKG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZyBlbnRyaWVzKS5cbiAgICpcbiAgICogQHBhcmFtIGFjbCBUaGUgYWNjZXNzIGNvbnRyb2wgZW50cmllcyB0byBzZXQuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRBY2woYWNsOiBQb2xpY3lBY2wsIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgYWNsIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGEgbGlzdCBvZiBhbGwga2V5cywgcm9sZXMsIGFuZCBrZXktaW4tcm9sZXMgdGhhdCBhbGwgdmVyc2lvbnMgb2YgdGhpcyBwb2xpY3lcbiAgICogYXJlIGF0dGFjaGVkIHRvLlxuICAgKi9cbiAgYXN5bmMgYWxsQXR0YWNoZWQoKTogUHJvbWlzZTxQb2xpY3lBdHRhY2hlZFRvSWRbXT4ge1xuICAgIC8vIHRoZXJlIGlzIG5vIHNpbmdsZS1jYWxsIHdheSB0byBhY2hpZXZlIHRoaXMuIFNvIGluc3RlYWQsIHdlXG4gICAgLy8gMS4gR2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcG9saWN5XG4gICAgLy8gMi4gRm9yIGFsbCB2ZXJzaW9ucyBgdjBgIHRvIGBsYXRlc3RgLCBmZXRjaCB0aGUgcG9saWN5IGluZm9cbiAgICAvLyAzLiBKb2luIGFsbCBwb2xpY3kgYGF0dGFjaGVkX3RvYCBhcnJheXNcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaChcImxhdGVzdFwiKTtcblxuICAgIGNvbnN0IGxhdGVzdCA9IGRhdGEudmVyc2lvbjtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IEFycmF5LmZyb20oQXJyYXkobGF0ZXN0ICsgMSkua2V5cygpKTtcbiAgICBjb25zdCBiYXRjaFNpemUgPSAxMDtcbiAgICBsZXQgYWxsQXR0YWNoZWQ6IFBvbGljeUF0dGFjaGVkVG9JZFtdID0gW107XG5cbiAgICBmb3IgKGxldCBiYXRjaCA9IDA7IGJhdGNoIDwgdmVyc2lvbnMubGVuZ3RoOyBiYXRjaCArPSBiYXRjaFNpemUpIHtcbiAgICAgIGNvbnN0IHJzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHZlcnNpb25zLnNsaWNlKGJhdGNoLCBiYXRjaCArIGJhdGNoU2l6ZSkubWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXBpQ2xpZW50LnBvbGljeUdldCh0aGlzLmlkLCBgdiR7dmVyc2lvbn1gKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYWxsQXR0YWNoZWQgPSBhbGxBdHRhY2hlZC5jb25jYXQocnMuZmxhdE1hcCgocG9saWN5KSA9PiBwb2xpY3kuYXR0YWNoZWRfdG8pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsQXR0YWNoZWQuY29uY2F0KGRhdGEuYXR0YWNoZWRfdG8pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGlzIHBvbGljeS5cbiAgICpcbiAgICogVGhpcyBjYW4gZmFpbCBpZiB0aGUgcG9saWN5IGlzIHN0aWxsIGF0dGFjaGVkIHRvIGFueSBrZXksIHJvbGUsIG9yIGtleSBpbiByb2xlLlxuICAgKlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdChzKS5cbiAgICogQHJldHVybnMgQSByZXNwb25zZSB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHByb3ZlIE1GQSBpZiBuZWVkZWRcbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cyk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPEVtcHR5Pj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lEZWxldGUodGhpcy5pZCwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLSBJTlRFUk5BTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGFwaUNsaWVudCBUaGUgQVBJIGNsaWVudCB0byB1c2UuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBKU09OIHJlc3BvbnNlIGZyb20gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGFwaUNsaWVudDogQXBpQ2xpZW50LCBkYXRhOiBOYW1lZFBvbGljeUluZm8pIHtcbiAgICB0aGlzLmFwaUNsaWVudCA9IGFwaUNsaWVudDtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcG9saWN5LlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBUaGUgSlNPTiByZXF1ZXN0IHRvIHNlbmQgdG8gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBwb2xpY3kgaW5mb3JtYXRpb24uXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlKFxuICAgIHJlcXVlc3Q6IFVwZGF0ZVBvbGljeVJlcXVlc3QsXG4gICAgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzLFxuICApOiBQcm9taXNlPE5hbWVkUG9saWN5SW5mbz4ge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lVcGRhdGUodGhpcy5pZCwgcmVxdWVzdCwgbWZhUmVjZWlwdCk7XG4gICAgdGhpcy5kYXRhID0gcmVzcC5kYXRhKCkgYXMgTmFtZWRQb2xpY3lJbmZvO1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHZlcnNpb24gb2YgdGhlIHBvbGljeSB0byBmZXRjaC4gRGVmYXVsdHMgdG8gXCJsYXRlc3RcIi5cbiAgICogQHJldHVybnMgVGhlIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZmV0Y2godmVyc2lvbjogVmVyc2lvbiA9IFwibGF0ZXN0XCIpOiBQcm9taXNlPE5hbWVkUG9saWN5SW5mbz4ge1xuICAgIHRoaXMuZGF0YSA9IChhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lHZXQodGhpcy5pZCwgdmVyc2lvbikpIGFzIE5hbWVkUG9saWN5SW5mbztcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG59XG5cbi8qKlxuICogQSByZXByZXNlbnRhdGlvbiBvZiBhIG5hbWVkIGtleSBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYW1lZEtleVBvbGljeSBleHRlbmRzIE5hbWVkUG9saWN5IHtcbiAgb3ZlcnJpZGUgZGF0YTogS2V5UG9saWN5SW5mbztcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwb2xpY3kgd2l0aCBuZXcgcnVsZXMuXG4gICAqXG4gICAqIEBwYXJhbSBydWxlcyBUaGUgbmV3IHJ1bGVzIHRvIHVwZGF0ZSB0aGUgcG9saWN5IHdpdGguXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRSdWxlcyhydWxlczogS2V5UG9saWN5LCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IHJ1bGVzIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgSlNPTiByZXNwb25zZSBmcm9tIHRoZSBBUEkgc2VydmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKGFwaUNsaWVudDogQXBpQ2xpZW50LCBkYXRhOiBLZXlQb2xpY3lJbmZvKSB7XG4gICAgc3VwZXIoYXBpQ2xpZW50LCBkYXRhKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG59XG5cbi8qKlxuICogQSByZXByZXNlbnRhdGlvbiBvZiBhIG5hbWVkIHJvbGUgcG9saWN5LlxuICovXG5leHBvcnQgY2xhc3MgTmFtZWRSb2xlUG9saWN5IGV4dGVuZHMgTmFtZWRQb2xpY3kge1xuICBvdmVycmlkZSBkYXRhOiBSb2xlUG9saWN5SW5mbztcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwb2xpY3kgd2l0aCBuZXcgcnVsZXMuXG4gICAqXG4gICAqIEBwYXJhbSBydWxlcyBUaGUgbmV3IHJ1bGVzIHRvIHVwZGF0ZSB0aGUgcG9saWN5IHdpdGguXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRSdWxlcyhydWxlczogUm9sZVBvbGljeSwgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGUoeyBydWxlcyB9LCBtZmFSZWNlaXB0KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgZGF0YTogUm9sZVBvbGljeUluZm8pIHtcbiAgICBzdXBlcihhcGlDbGllbnQsIGRhdGEpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uIChDMkYpLlxuICpcbiAqIFRoaXMgY2xhc3MgZXh0ZW5kcyBOYW1lZFBvbGljeSBiZWNhdXNlIEMyRiBmdW5jdGlvbnMgY2FuIGJlIGF0dGFjaGVkXG4gKiB0byBrZXlzIGFuZCByb2xlcyBsaWtlIGEgbmFtZWQgcG9saWN5LlxuICovXG5leHBvcnQgY2xhc3MgQzJGRnVuY3Rpb24gZXh0ZW5kcyBOYW1lZFBvbGljeSB7XG4gIG92ZXJyaWRlIGRhdGE6IEMyRkluZm87XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGlzIEMyRiBmdW5jdGlvbiB3aXRoIGEgbmV3IFdhc20gZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwb2xpY3kgVGhlIG5ldyBXYXNtIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdChzKS5cbiAgICogQHRocm93cyBpZiB1cGxvYWRpbmcgdGhlIGZ1bmN0aW9uIGZhaWxzLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgYXN5bmMgc2V0V2FzbUZ1bmN0aW9uKHBvbGljeTogVWludDhBcnJheSwgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgLy8gdXBsb2FkIHRoZSBwb2xpY3kgb2JqZWN0XG4gICAgY29uc3QgaGFzaCA9IGF3YWl0IHVwbG9hZFdhc21GdW5jdGlvbih0aGlzLmFwaUNsaWVudCwgcG9saWN5KTtcblxuICAgIC8vIHVwZGF0ZSB0aGlzIHBvbGljeSB3aXRoIHRoZSBuZXcgcG9saWN5IHZlcmlzb24uXG4gICAgY29uc3QgYm9keTogVXBkYXRlUG9saWN5UmVxdWVzdCA9IHsgcnVsZXM6IFt7IGhhc2ggfV0gfTtcbiAgICB0aGlzLmRhdGEgPSAoYXdhaXQgdGhpcy51cGRhdGUoYm9keSwgbWZhUmVjZWlwdCkpIGFzIEMyRkluZm87XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIHRoaXMgQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5SWQgVGhlIG9wdGlvbmFsIGtleSBpZCB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgd2l0aC5cbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIHRvIGludm9rZS4gRGVmYXVsdHMgdG8gXCJsYXRlc3RcIi5cbiAgICogQHBhcmFtIHJlcXVlc3QgVGhlIG9wdGlvbmFsIHNpZ24gcmVxdWVzdCBib2R5IHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHJvbGVJZCBUaGUgb3B0aW9uYWwgcm9sZSBpZCB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgYnkuXG4gICAqIElmIGB1bmRlZmluZWRgLCB0aGUgcG9saWN5IHdpbGwgYmUgaW52b2tlZCBieSB0aGUgdXNlciBzZXNzaW9uLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIGFzeW5jIGludm9rZShcbiAgICBrZXlJZD86IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBWZXJzaW9uID0gXCJsYXRlc3RcIixcbiAgICByZXF1ZXN0PzogSnNvblZhbHVlLFxuICAgIHJvbGVJZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxDMkZJbnZvY2F0aW9uPiB7XG4gICAgLy8gVE9ETyBJZGVhbGx5LCBgdmVyc2lvbmAgc2hvdWxkIGJlIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIEJ1dCBmb3IgYmFja3dhcmRzXG4gICAgLy8gY29tcGF0aWJpbGl0eSwgd2Uga2VlcCBga2V5SWRgIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgZm9yIG5vdy5cbiAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5hcGlDbGllbnQucG9saWN5SW52b2tlKHRoaXMuaWQsIHZlcnNpb24sIHtcbiAgICAgIGtleV9pZDoga2V5SWQsXG4gICAgICByZXF1ZXN0LFxuICAgICAgcm9sZV9pZDogcm9sZUlkLFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUG9saWN5SW52b2NhdGlvbihyZXNwKTtcbiAgfVxuXG4gIC8vIEJhY2t3YXJkcyBjb21wYWJpbGl0eSB3aXRoIE5hbWVkIFdhc20gUG9saWN5IG5hbWVzXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBvbGljeSB3aXRoIHRoZSBuZXcgV2FzbSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSBwb2xpY3kgVGhlIG5ldyBXYXNtIHBvbGljeSBvYmplY3QuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIHVwbG9hZGluZyB0aGUgcG9saWN5IG9iamVjdCBmYWlscy5cbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIHNldFdhc21Qb2xpY3kgPSB0aGlzLnNldFdhc21GdW5jdGlvbjtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLSBJTlRFUk5BTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGFwaUNsaWVudCBUaGUgQVBJIGNsaWVudCB0byB1c2UuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBKU09OIHJlc3BvbnNlIGZyb20gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpQ2xpZW50OiBBcGlDbGllbnQsIGRhdGE6IEMyRkluZm8pIHtcbiAgICBzdXBlcihhcGlDbGllbnQsIGRhdGEpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNwZWNpZmljIHZlcnNpb24gb2YgYSBuYW1lZCBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYW1lZFBvbGljeVJ1bGVzIHtcbiAgLyoqIFRoZSBDdWJlU2lnbmVyIGluc3RhbmNlIHRoYXQgdGhpcyBwb2xpY3kgaXMgYXNzb2NpYXRlZCB3aXRoICovXG4gIHJlYWRvbmx5ICNhcGlDbGllbnQ6IEFwaUNsaWVudDtcbiAgI2RhdGE6IE5hbWVkUG9saWN5SW5mbztcblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBleGFtcGxlIE5hbWVkUG9saWN5I2E0YTQ1Y2MyLTA2NDItNGM5OC1iNmJkLTBkYTM0N2Q2MDhhNFxuICAgKi9cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2RhdGEucG9saWN5X2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kgdGhpcyBvYmplY3QgY29udGFpbnMuXG4gICAqL1xuICBnZXQgdmVyc2lvbigpOiBWZXJzaW9uIHtcbiAgICByZXR1cm4gYHYke3RoaXMuI2RhdGEudmVyc2lvbn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSBwb2xpY3kgcnVsZXMuXG4gICAqXG4gICAqIEBleGFtcGxlIFsgXCJBc3NlcnRFcmMyMFR4XCIgXVxuICAgKi9cbiAgZ2V0IHJ1bGVzKCk6IFBvbGljeVJ1bGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI2RhdGEucnVsZXMgYXMgUG9saWN5UnVsZVtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGEgbGlzdCBvZiBhbGwga2V5cywgcm9sZXMsIGFuZCBrZXktaW4tcm9sZXMgdGhpcyB2ZXJzaW9uIG9mIHRoZSBwb2xpY3lcbiAgICogICAgICAgICAgaXMgYXR0YWNoZWQgdG8uXG4gICAqL1xuICBhc3luYyBhbGxBdHRhY2hlZCgpOiBQcm9taXNlPFBvbGljeUF0dGFjaGVkVG9JZFtdPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goKTtcbiAgICByZXR1cm4gZGF0YS5hdHRhY2hlZF90bztcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgZGF0YTogTmFtZWRQb2xpY3lJbmZvKSB7XG4gICAgdGhpcy4jYXBpQ2xpZW50ID0gYXBpQ2xpZW50O1xuICAgIHRoaXMuI2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBwb2xpY3kgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBwb2xpY3kgaW5mb3JtYXRpb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaCgpOiBQcm9taXNlPE5hbWVkUG9saWN5SW5mbz4ge1xuICAgIHRoaXMuI2RhdGEgPSAoYXdhaXQgdGhpcy4jYXBpQ2xpZW50LnBvbGljeUdldCh0aGlzLmlkLCB0aGlzLnZlcnNpb24pKSBhcyBOYW1lZFBvbGljeUluZm87XG4gICAgcmV0dXJuIHRoaXMuI2RhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGludm9raW5nIGEgQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQzJGSW52b2NhdGlvbiB7XG4gIHJlYWRvbmx5ICNkYXRhOiBJbnZva2VDMkZSZXNwb25zZTtcblxuICAvKiogQHJldHVybnMgVGhlIHBvbGljeSByZXNwb25zZSBpdHNlbGYuICovXG4gIGdldCByZXNwb25zZSgpOiBDMkZSZXNwb25zZSB7XG4gICAgcmV0dXJuIHRoaXMuI2RhdGEucmVzcG9uc2U7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uIFVzdWFsbHkgYSBVVEYtOCBlbmNvZGVkIHN0cmluZy4gKi9cbiAgZ2V0IHN0ZG91dCgpOiBCdWZmZXIge1xuICAgIHJldHVybiB0aGlzLmZyb21IZXgodGhpcy4jZGF0YS5zdGRvdXQpO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uIFVzdWFsbHkgYSBVVEYtOCBlbmNvZGVkIHN0cmluZy4gKi9cbiAgZ2V0IHN0ZGVycigpOiBCdWZmZXIge1xuICAgIHJldHVybiB0aGlzLmZyb21IZXgodGhpcy4jZGF0YS5zdGRlcnIpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCBmb3IgY29udmVydGluZyBoZXgtZW5jb2RlZCBkYXRhIHRvIGEgYEJ1ZmZlcmAuXG4gICAqXG4gICAqIEBwYXJhbSBoZXggVGhlIGhleC1lbmNvZGVkIGRhdGEuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBmcm9tSGV4KGhleDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaGV4LnN0YXJ0c1dpdGgoXCIweFwiKSA/IGhleC5zbGljZSgyKSA6IGhleCwgXCJoZXhcIik7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBKU09OIHJlc3BvbnNlIGZyb20gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YTogSW52b2tlQzJGUmVzcG9uc2UpIHtcbiAgICB0aGlzLiNkYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vLyBCYWNrd2FyZHMgY29tcGFiaWxpdHkgd2l0aCBOYW1lZCBXYXNtIFBvbGljeSBuYW1lc1xuXG4vKiogQSByZXByZXNlbnRhdGlvbiBvZiBhIFdhc20gcG9saWN5LiAqL1xuZXhwb3J0IHR5cGUgTmFtZWRXYXNtUG9saWN5ID0gQzJGRnVuY3Rpb247XG4vKiogQSByZXByZXNlbnRhdGlvbiBvZiBhIFdhc20gcG9saWN5LiAqL1xuZXhwb3J0IGNvbnN0IE5hbWVkV2FzbVBvbGljeSA9IEMyRkZ1bmN0aW9uO1xuXG4vKiogVGhlIHJlc3VsdCBvZiBpbnZva2luZyBhIG5hbWVkIFdBU00gcG9saWN5LiAqL1xuZXhwb3J0IHR5cGUgUG9saWN5SW52b2NhdGlvbiA9IEMyRkludm9jYXRpb247XG4vKiogVGhlIHJlc3VsdCBvZiBpbnZva2luZyBhIG5hbWVkIFdBU00gcG9saWN5LiAqL1xuZXhwb3J0IGNvbnN0IFBvbGljeUludm9jYXRpb24gPSBDMkZJbnZvY2F0aW9uO1xuIl19
516
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFtR0EsZ0RBdUJDO0FBbkdELHdCQUFxQztBQW1FckM7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLFNBQW9CLEVBQ3BCLE1BQWtCO0lBRWxCLDhEQUE4RDtJQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsbUJBQWdCLEdBQUUsQ0FBQztJQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUzRCxxQkFBcUI7SUFDckIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVsRSx5QkFBeUI7SUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFO1FBQ25DLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLE1BQU07S0FDYixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBRW5EOztHQUVHO0FBQ0gsTUFBc0IsV0FBVztJQUkvQjs7Ozs7O09B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ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQXBpQ2xpZW50LFxuICBDMkZSZXNwb25zZSxcbiAgQ3ViZVNpZ25lclJlc3BvbnNlLFxuICBFZGl0UG9saWN5LFxuICBFbXB0eSxcbiAgSW52b2tlQzJGUmVzcG9uc2UsXG4gIEpzb25WYWx1ZSxcbiAgS2V5UG9saWN5LFxuICBLZXlQb2xpY3lSdWxlLFxuICBNZmFSZWNlaXB0cyxcbiAgUG9saWN5QXR0YWNoZWRUb0lkLFxuICBQb2xpY3lUeXBlLFxuICBSb2xlUG9saWN5LFxuICBSb2xlUG9saWN5UnVsZSxcbiAgVXBkYXRlUG9saWN5UmVxdWVzdCxcbiAgV2FzbVJ1bGUsXG4gIEFjZUF0dHJpYnV0ZSxcbiAgUG9saWN5QWN0aW9uLFxuICBBY2UsXG4gIFBvbGljeUluZm8sXG59IGZyb20gXCIuXCI7XG5cbmltcG9ydCB7IGxvYWRTdWJ0bGVDcnlwdG8gfSBmcm9tIFwiLlwiO1xuXG4vKipcbiAqIE5hbWVkIHBvbGljeSBydWxlIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeVJ1bGUgPSBLZXlQb2xpY3lSdWxlIHwgUm9sZVBvbGljeVJ1bGUgfCBXYXNtUnVsZTtcblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlIGZvciB7QGxpbmsgUG9saWN5SW5mb30gd2l0aCBhIG1vcmUgZGV0YWlsZWQgYGFjbGAgdHlwZS5cbiAqL1xudHlwZSBOYW1lZFBvbGljeUluZm8gPSBQb2xpY3lJbmZvICYge1xuICBhY2w/OiBQb2xpY3lBY2w7XG59O1xuXG4vKipcbiAqIFRoZSBwb2xpY3kgaW5mbyBmb3IgYSBuYW1lZCBrZXkgcG9saWN5LlxuICovXG5leHBvcnQgdHlwZSBLZXlQb2xpY3lJbmZvID0gTmFtZWRQb2xpY3lJbmZvICYge1xuICBwb2xpY3lfdHlwZTogXCJLZXlcIjtcbn07XG5cbi8qKlxuICogVGhlIHBvbGljeSBpbmZvIGZvciBhIG5hbWVkIHJvbGUgcG9saWN5LlxuICovXG5leHBvcnQgdHlwZSBSb2xlUG9saWN5SW5mbyA9IE5hbWVkUG9saWN5SW5mbyAmIHtcbiAgcG9saWN5X3R5cGU6IFwiUm9sZVwiO1xufTtcblxuLyoqXG4gKiBUaGUgcG9saWN5IGluZm8gZm9yIGEgbmFtZWQgd2FzbSBwb2xpY3kuXG4gKi9cbmV4cG9ydCB0eXBlIFdhc21Qb2xpY3lJbmZvID0gTmFtZWRQb2xpY3lJbmZvICYge1xuICBwb2xpY3lfdHlwZTogXCJXYXNtXCI7XG59O1xuXG4vKipcbiAqIFRoZSBwb2xpY3kgaW5mbyBmb3IgYSBDb25maWRlbnRpYWwgQ2xvdWQgRnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEMyRkluZm8gPSBXYXNtUG9saWN5SW5mbztcblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlIGZvciB2YWxpZCBuYW1lZCBwb2xpY3kgdmVyc2lvbiBzdHJpbmdzLlxuICovXG5leHBvcnQgdHlwZSBWZXJzaW9uID0gYHYke251bWJlcn1gIHwgYGxhdGVzdGA7XG5cbi8qKiBBIHBvbGljeSBhY2Nlc3MgY29udHJvbCBlbnRyeS4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeUFjZSA9IEFjZTxQb2xpY3lBY3Rpb24sIFBvbGljeUN0eD47XG5cbi8qKiBBIHBvbGljeSBhY2Nlc3MgY29udHJvbCBsaXN0LiAqL1xuZXhwb3J0IHR5cGUgUG9saWN5QWNsID0gUG9saWN5QWNlW107XG5cbi8qKiBBZGRpdGlvbmFsIGNvbnRleHRzIHdoZW4gdXNpbmcgcG9saWNpZXMuICovXG5leHBvcnQgdHlwZSBQb2xpY3lDdHggPSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2VzIChrZXlzLCByb2xlcywgYW5kIGtleS1pbi1yb2xlcykgdGhhdCB0aGUgYWNjZXNzIGNvbnRyb2wgZW50cnlcbiAgICogYXBwbGllcyB0by5cbiAgICovXG4gIHJlc291cmNlczogQWNlQXR0cmlidXRlPFBvbGljeVJlc291cmNlPjtcbn07XG5cbi8qKiBBIHJlc291cmNlIGEgcG9saWN5IGlzIGludm9rZWQgd2l0aCBvciBhdHRhY2hlZCB0by4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeVJlc291cmNlID1cbiAgLyoqIEEga2V5IG9yIHJvbGUgaWQuICovXG4gIHwgc3RyaW5nXG4gIC8qKiBLZXlzIGF0dGFjaGVkIHRvIHJvbGVzLiAqL1xuICB8IHsga2V5X2lkczogXCIqXCIgfCBzdHJpbmdbXTsgcm9sZV9pZHM6IFwiKlwiIHwgc3RyaW5nW10gfTtcblxuLyoqXG4gKiBVcGxvYWQgdGhlIGdpdmVuIFdhc20gQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICogQHBhcmFtIHBvbGljeSBUaGUgV2FzbSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBXYXNtIGZ1bmN0aW9uIG9iamVjdCBoYXNoIHRvIHVzZSBmb3IgY3JlYXRpbmcvdXBkYXRpbmcgQzJGIHBvbGljaWVzLlxuICogQHRocm93cyBpZiB1cGxvYWRpbmcgdGhlIHBvbGljeSBmYWlscy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBsb2FkV2FzbUZ1bmN0aW9uKFxuICBhcGlDbGllbnQ6IEFwaUNsaWVudCxcbiAgcG9saWN5OiBVaW50OEFycmF5LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLy8gZ2V0IHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgdXBsb2FkIHVybC5cbiAgY29uc3Qgc3VidGxlID0gYXdhaXQgbG9hZFN1YnRsZUNyeXB0bygpO1xuICBjb25zdCBoYXNoQnl0ZXMgPSBhd2FpdCBzdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLCBwb2xpY3kpO1xuICBjb25zdCBoYXNoID0gXCIweFwiICsgQnVmZmVyLmZyb20oaGFzaEJ5dGVzKS50b1N0cmluZyhcImhleFwiKTtcblxuICAvLyBnZXQgdGhlIHVwbG9hZCBVUkxcbiAgY29uc3QgeyBzaWduZWRfdXJsIH0gPSBhd2FpdCBhcGlDbGllbnQud2FzbVBvbGljeVVwbG9hZCh7IGhhc2ggfSk7XG5cbiAgLy8gdXBsb2FkIHRoZSB3YXNtIG9iamVjdFxuICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goc2lnbmVkX3VybCwge1xuICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICBib2R5OiBwb2xpY3ksXG4gIH0pO1xuXG4gIGlmICghcmVzcC5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHVwbG9hZCBmdW5jdGlvbiB3aXRoIHN0YXR1czogJHtyZXNwLnN0YXR1c306ICR7cmVzcC5zdGF0dXNUZXh0fWApO1xuICB9XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbi8qKlxuICogVXBsb2FkIHRoZSBnaXZlbiBXYXNtIHBvbGljeS5cbiAqXG4gKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAqIEBwYXJhbSBwb2xpY3kgVGhlIFdhc20gZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgV2FzbSBmdW5jdGlvbiBvYmplY3QgaGFzaCB0byB1c2UgZm9yIGNyZWF0aW5nL3VwZGF0aW5nIEMyRiBwb2xpY2llcy5cbiAqIEB0aHJvd3MgaWYgdXBsb2FkaW5nIHRoZSBwb2xpY3kgZmFpbHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHVwbG9hZFdhc21Qb2xpY3kgPSB1cGxvYWRXYXNtRnVuY3Rpb247XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgZm9yIHNoYXJlZCBtZXRob2RzIGJldHdlZW4ga2V5LCByb2xlIGFuZCBXYXNtIHBvbGljaWVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmFtZWRQb2xpY3kge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBpQ2xpZW50OiBBcGlDbGllbnQ7XG4gIHByb3RlY3RlZCBkYXRhOiBOYW1lZFBvbGljeUluZm87XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgbmFtZWQgcG9saWN5IGZyb20gYSBwb2xpY3kgaW5mby5cbiAgICpcbiAgICogQHBhcmFtIGFwaUNsaWVudCBUaGUgYXBpIGNsaWVudCB0byB1c2UuXG4gICAqIEBwYXJhbSBpbmZvIFRoZSBwb2xpY3kgaW5mby5cbiAgICogQHJldHVybnMgVGhlIG5hbWVkIHBvbGljeSBvYmplY3QgZm9yIHRoZSBnaXZlbiBpbmZvLlxuICAgKi9cbiAgc3RhdGljIGZyb21JbmZvKGFwaUNsaWVudDogQXBpQ2xpZW50LCBpbmZvOiBQb2xpY3lJbmZvKTogTmFtZWRQb2xpY3kge1xuICAgIHN3aXRjaCAoaW5mby5wb2xpY3lfdHlwZSkge1xuICAgICAgY2FzZSBcIktleVwiOlxuICAgICAgICByZXR1cm4gbmV3IE5hbWVkS2V5UG9saWN5KGFwaUNsaWVudCwgaW5mbyBhcyBLZXlQb2xpY3lJbmZvKTtcbiAgICAgIGNhc2UgXCJSb2xlXCI6XG4gICAgICAgIHJldHVybiBuZXcgTmFtZWRSb2xlUG9saWN5KGFwaUNsaWVudCwgaW5mbyBhcyBSb2xlUG9saWN5SW5mbyk7XG4gICAgICBjYXNlIFwiV2FzbVwiOlxuICAgICAgICByZXR1cm4gbmV3IEMyRkZ1bmN0aW9uKGFwaUNsaWVudCwgaW5mbyBhcyBDMkZJbmZvKTtcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHBvbGljeSBpZCAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnBvbGljeV9pZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgcG9saWN5IHR5cGUgKi9cbiAgZ2V0IHBvbGljeVR5cGUoKTogUG9saWN5VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wb2xpY3lfdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBwb2xpY3kgdmVyc2lvbiB0byBnZXQuXG4gICAqIEByZXR1cm5zIFRoZSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kuXG4gICAqL1xuICBhc3luYyB2ZXJzaW9uKHZlcnNpb246IFZlcnNpb24pOiBQcm9taXNlPE5hbWVkUG9saWN5UnVsZXM+IHtcbiAgICBsZXQgdmVyc2lvbkluZm87XG5cbiAgICBpZiAodmVyc2lvbiA9PSBgdiR7dGhpcy5kYXRhLnZlcnNpb259YCkge1xuICAgICAgdmVyc2lvbkluZm8gPSB0aGlzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZlcnNpb25JbmZvID0gKGF3YWl0IHRoaXMuYXBpQ2xpZW50LnBvbGljeUdldCh0aGlzLmlkLCB2ZXJzaW9uKSkgYXMgTmFtZWRQb2xpY3lJbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTmFtZWRQb2xpY3lSdWxlcyh0aGlzLmFwaUNsaWVudCwgdmVyc2lvbkluZm8pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kuXG4gICAqL1xuICBhc3luYyBsYXRlc3QoKTogUHJvbWlzZTxOYW1lZFBvbGljeVJ1bGVzPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goXCJsYXRlc3RcIik7XG4gICAgcmV0dXJuIG5ldyBOYW1lZFBvbGljeVJ1bGVzKHRoaXMuYXBpQ2xpZW50LCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IG5hbWUgb2YgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHBvbGljeSBuYW1lLlxuICAgKi9cbiAgYXN5bmMgbmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKCk7XG4gICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgbmFtZSBmb3IgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5ldyBwb2xpY3kgbmFtZS5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldE5hbWUobmFtZTogc3RyaW5nLCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IG5hbWUgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgY3VycmVudCBvd25lciBvZiB0aGUgcG9saWN5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdXNlciBpZCBvZiB0aGUgcG9saWN5IG93bmVyLlxuICAgKiBAZXhhbXBsZSBVc2VyI2MzYjkzNzljLTRlOGMtNDIxNi1iZDBhLTY1YWNlNTNjZjk4ZlxuICAgKi9cbiAgYXN5bmMgb3duZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaCgpO1xuICAgIHJldHVybiBkYXRhLm93bmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5ldyBvd25lciBmb3IgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHBhcmFtIG93bmVyIFRoZSBuZXcgb3duZXIgb2YgdGhlIHBvbGljeS5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldE93bmVyKG93bmVyOiBzdHJpbmcsIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgb3duZXIgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBwb2xpY3kgbWV0YWRhdGEuXG4gICAqL1xuICBhc3luYyBtZXRhZGF0YSgpOiBQcm9taXNlPEpzb25WYWx1ZT4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKCk7XG4gICAgcmV0dXJuIGRhdGEubWV0YWRhdGEgYXMgSnNvblZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBuZXcgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBuYW1lZCBwb2xpY3kgKG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZyB2YWx1ZSkuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRhZGF0YSBUaGUgbmV3IG1ldGFkYXRhIGZvciB0aGUgbmFtZWQgcG9saWN5LlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdChzKS5cbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZFxuICAgKi9cbiAgYXN5bmMgc2V0TWV0YWRhdGEobWV0YWRhdGE6IEpzb25WYWx1ZSwgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGUoeyBtZXRhZGF0YSB9LCBtZmFSZWNlaXB0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbmQgcmV0dXJuIHRoZSBlZGl0IHBvbGljeSBmb3IgdGhlIG5hbWVkIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGVkaXQgcG9saWN5IGZvciB0aGlzIG5hbWVkIHBvbGljeS5cbiAgICovXG4gIGFzeW5jIGVkaXRQb2xpY3koKTogUHJvbWlzZTxFZGl0UG9saWN5IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goKTtcbiAgICByZXR1cm4gZGF0YS5lZGl0X3BvbGljeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgZWRpdCBwb2xpY3kgZm9yIHRoZSBuYW1lZCBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0UG9saWN5IFRoZSBuZXcgZWRpdCBwb2xpY3kuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRFZGl0UG9saWN5KGVkaXRQb2xpY3k6IEVkaXRQb2xpY3ksIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgZWRpdF9wb2xpY3k6IGVkaXRQb2xpY3kgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgYWNjZXNzIGNvbnRyb2wgZW50cmllcyBmb3IgdGhlIG5hbWVkIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjY2VzcyBjb250cm9sIGVudHJpZXMgZm9yIHRoaXMgbmFtZWQgcG9saWN5LlxuICAgKi9cbiAgYXN5bmMgYWNsKCk6IFByb21pc2U8UG9saWN5QWNsIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goKTtcbiAgICByZXR1cm4gZGF0YS5hY2w7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBuZXcgYWNjZXNzIGNvbnRyb2wgZW50cmllcyBmb3IgdGhlIG5hbWVkIHBvbGljeSAob3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nIGVudHJpZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gYWNsIFRoZSBhY2Nlc3MgY29udHJvbCBlbnRyaWVzIHRvIHNldC5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldEFjbChhY2w6IFBvbGljeUFjbCwgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGUoeyBhY2wgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYSBsaXN0IG9mIGFsbCBrZXlzLCByb2xlcywgYW5kIGtleS1pbi1yb2xlcyB0aGF0IGFsbCB2ZXJzaW9ucyBvZiB0aGlzIHBvbGljeVxuICAgKiBhcmUgYXR0YWNoZWQgdG8uXG4gICAqL1xuICBhc3luYyBhbGxBdHRhY2hlZCgpOiBQcm9taXNlPFBvbGljeUF0dGFjaGVkVG9JZFtdPiB7XG4gICAgLy8gdGhlcmUgaXMgbm8gc2luZ2xlLWNhbGwgd2F5IHRvIGFjaGlldmUgdGhpcy4gU28gaW5zdGVhZCwgd2VcbiAgICAvLyAxLiBHZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwb2xpY3lcbiAgICAvLyAyLiBGb3IgYWxsIHZlcnNpb25zIGB2MGAgdG8gYGxhdGVzdGAsIGZldGNoIHRoZSBwb2xpY3kgaW5mb1xuICAgIC8vIDMuIEpvaW4gYWxsIHBvbGljeSBgYXR0YWNoZWRfdG9gIGFycmF5c1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKFwibGF0ZXN0XCIpO1xuXG4gICAgY29uc3QgbGF0ZXN0ID0gZGF0YS52ZXJzaW9uO1xuICAgIGNvbnN0IHZlcnNpb25zID0gQXJyYXkuZnJvbShBcnJheShsYXRlc3QgKyAxKS5rZXlzKCkpO1xuICAgIGNvbnN0IGJhdGNoU2l6ZSA9IDEwO1xuICAgIGxldCBhbGxBdHRhY2hlZDogUG9saWN5QXR0YWNoZWRUb0lkW10gPSBbXTtcblxuICAgIGZvciAobGV0IGJhdGNoID0gMDsgYmF0Y2ggPCB2ZXJzaW9ucy5sZW5ndGg7IGJhdGNoICs9IGJhdGNoU2l6ZSkge1xuICAgICAgY29uc3QgcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdmVyc2lvbnMuc2xpY2UoYmF0Y2gsIGJhdGNoICsgYmF0Y2hTaXplKS5tYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hcGlDbGllbnQucG9saWN5R2V0KHRoaXMuaWQsIGB2JHt2ZXJzaW9ufWApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBhbGxBdHRhY2hlZCA9IGFsbEF0dGFjaGVkLmNvbmNhdChycy5mbGF0TWFwKChwb2xpY3kpID0+IHBvbGljeS5hdHRhY2hlZF90bykpO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxBdHRhY2hlZC5jb25jYXQoZGF0YS5hdHRhY2hlZF90byk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHRoaXMgcG9saWN5LlxuICAgKlxuICAgKiBUaGlzIGNhbiBmYWlsIGlmIHRoZSBwb2xpY3kgaXMgc3RpbGwgYXR0YWNoZWQgdG8gYW55IGtleSwgcm9sZSwgb3Iga2V5IGluIHJvbGUuXG4gICAqXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAcmV0dXJucyBBIHJlc3BvbnNlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcHJvdmUgTUZBIGlmIG5lZWRlZFxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBkZWxldGUobWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8RW1wdHk+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBpQ2xpZW50LnBvbGljeURlbGV0ZSh0aGlzLmlkLCBtZmFSZWNlaXB0KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYXBpQ2xpZW50OiBBcGlDbGllbnQsIGRhdGE6IE5hbWVkUG9saWN5SW5mbykge1xuICAgIHRoaXMuYXBpQ2xpZW50ID0gYXBpQ2xpZW50O1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IFRoZSBKU09OIHJlcXVlc3QgdG8gc2VuZCB0byB0aGUgQVBJIHNlcnZlci5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGUoXG4gICAgcmVxdWVzdDogVXBkYXRlUG9saWN5UmVxdWVzdCxcbiAgICBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMsXG4gICk6IFByb21pc2U8TmFtZWRQb2xpY3lJbmZvPiB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuYXBpQ2xpZW50LnBvbGljeVVwZGF0ZSh0aGlzLmlkLCByZXF1ZXN0LCBtZmFSZWNlaXB0KTtcbiAgICB0aGlzLmRhdGEgPSByZXNwLmRhdGEoKSBhcyBOYW1lZFBvbGljeUluZm87XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgcG9saWN5IGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgcG9saWN5IHRvIGZldGNoLiBEZWZhdWx0cyB0byBcImxhdGVzdFwiLlxuICAgKiBAcmV0dXJucyBUaGUgcG9saWN5IGluZm9ybWF0aW9uLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBmZXRjaCh2ZXJzaW9uOiBWZXJzaW9uID0gXCJsYXRlc3RcIik6IFByb21pc2U8TmFtZWRQb2xpY3lJbmZvPiB7XG4gICAgdGhpcy5kYXRhID0gKGF3YWl0IHRoaXMuYXBpQ2xpZW50LnBvbGljeUdldCh0aGlzLmlkLCB2ZXJzaW9uKSkgYXMgTmFtZWRQb2xpY3lJbmZvO1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgbmFtZWQga2V5IHBvbGljeS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hbWVkS2V5UG9saWN5IGV4dGVuZHMgTmFtZWRQb2xpY3kge1xuICBvdmVycmlkZSBkYXRhOiBLZXlQb2xpY3lJbmZvO1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBvbGljeSB3aXRoIG5ldyBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtIHJ1bGVzIFRoZSBuZXcgcnVsZXMgdG8gdXBkYXRlIHRoZSBwb2xpY3kgd2l0aC5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldFJ1bGVzKHJ1bGVzOiBLZXlQb2xpY3ksIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgcnVsZXMgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLSBJTlRFUk5BTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGFwaUNsaWVudCBUaGUgQVBJIGNsaWVudCB0byB1c2UuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBKU09OIHJlc3BvbnNlIGZyb20gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpQ2xpZW50OiBBcGlDbGllbnQsIGRhdGE6IEtleVBvbGljeUluZm8pIHtcbiAgICBzdXBlcihhcGlDbGllbnQsIGRhdGEpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgbmFtZWQgcm9sZSBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYW1lZFJvbGVQb2xpY3kgZXh0ZW5kcyBOYW1lZFBvbGljeSB7XG4gIG92ZXJyaWRlIGRhdGE6IFJvbGVQb2xpY3lJbmZvO1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBvbGljeSB3aXRoIG5ldyBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtIHJ1bGVzIFRoZSBuZXcgcnVsZXMgdG8gdXBkYXRlIHRoZSBwb2xpY3kgd2l0aC5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldFJ1bGVzKHJ1bGVzOiBSb2xlUG9saWN5LCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IHJ1bGVzIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgSlNPTiByZXNwb25zZSBmcm9tIHRoZSBBUEkgc2VydmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKGFwaUNsaWVudDogQXBpQ2xpZW50LCBkYXRhOiBSb2xlUG9saWN5SW5mbykge1xuICAgIHN1cGVyKGFwaUNsaWVudCwgZGF0YSk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBDb25maWRlbnRpYWwgQ2xvdWQgRnVuY3Rpb24gKEMyRikuXG4gKlxuICogVGhpcyBjbGFzcyBleHRlbmRzIE5hbWVkUG9saWN5IGJlY2F1c2UgQzJGIGZ1bmN0aW9ucyBjYW4gYmUgYXR0YWNoZWRcbiAqIHRvIGtleXMgYW5kIHJvbGVzIGxpa2UgYSBuYW1lZCBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBDMkZGdW5jdGlvbiBleHRlbmRzIE5hbWVkUG9saWN5IHtcbiAgb3ZlcnJpZGUgZGF0YTogQzJGSW5mbztcblxuICAvKipcbiAgICogVXBkYXRlIHRoaXMgQzJGIGZ1bmN0aW9uIHdpdGggYSBuZXcgV2FzbSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgbmV3IFdhc20gZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIHVwbG9hZGluZyB0aGUgZnVuY3Rpb24gZmFpbHMuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWQuXG4gICAqL1xuICBhc3luYyBzZXRXYXNtRnVuY3Rpb24ocG9saWN5OiBVaW50OEFycmF5LCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICAvLyB1cGxvYWQgdGhlIHBvbGljeSBvYmplY3RcbiAgICBjb25zdCBoYXNoID0gYXdhaXQgdXBsb2FkV2FzbUZ1bmN0aW9uKHRoaXMuYXBpQ2xpZW50LCBwb2xpY3kpO1xuXG4gICAgLy8gdXBkYXRlIHRoaXMgcG9saWN5IHdpdGggdGhlIG5ldyBwb2xpY3kgdmVyc2lvbi5cbiAgICBjb25zdCBib2R5OiBVcGRhdGVQb2xpY3lSZXF1ZXN0ID0geyBydWxlczogW3sgaGFzaCB9XSB9O1xuICAgIHRoaXMuZGF0YSA9IChhd2FpdCB0aGlzLnVwZGF0ZShib2R5LCBtZmFSZWNlaXB0KSkgYXMgQzJGSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhpcyBDb25maWRlbnRpYWwgQ2xvdWQgRnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBrZXlJZCBUaGUgb3B0aW9uYWwga2V5IGlkIHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoLlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gdG8gaW52b2tlLiBEZWZhdWx0cyB0byBcImxhdGVzdFwiLlxuICAgKiBAcGFyYW0gcmVxdWVzdCBUaGUgb3B0aW9uYWwgc2lnbiByZXF1ZXN0IGJvZHkgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gcm9sZUlkIFRoZSBvcHRpb25hbCByb2xlIGlkIHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBieS5cbiAgICogSWYgYHVuZGVmaW5lZGAsIHRoZSBwb2xpY3kgd2lsbCBiZSBpbnZva2VkIGJ5IHRoZSB1c2VyIHNlc3Npb24uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgYXN5bmMgaW52b2tlKFxuICAgIGtleUlkPzogc3RyaW5nLFxuICAgIHZlcnNpb246IFZlcnNpb24gPSBcImxhdGVzdFwiLFxuICAgIHJlcXVlc3Q/OiBKc29uVmFsdWUsXG4gICAgcm9sZUlkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPEMyRkludm9jYXRpb24+IHtcbiAgICAvLyBUT0RPIElkZWFsbHksIGB2ZXJzaW9uYCBzaG91bGQgYmUgdGhlIGZpcnN0IHBhcmFtZXRlci4gQnV0IGZvciBiYWNrd2FyZHNcbiAgICAvLyBjb21wYXRpYmlsaXR5LCB3ZSBrZWVwIGBrZXlJZGAgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciBmb3Igbm93LlxuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lJbnZva2UodGhpcy5pZCwgdmVyc2lvbiwge1xuICAgICAga2V5X2lkOiBrZXlJZCxcbiAgICAgIHJlcXVlc3QsXG4gICAgICByb2xlX2lkOiByb2xlSWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQb2xpY3lJbnZvY2F0aW9uKHJlc3ApO1xuICB9XG5cbiAgLy8gQmFja3dhcmRzIGNvbXBhYmlsaXR5IHdpdGggTmFtZWQgV2FzbSBQb2xpY3kgbmFtZXNcbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcG9saWN5IHdpdGggdGhlIG5ldyBXYXNtIHBvbGljeS5cbiAgICpcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgbmV3IFdhc20gcG9saWN5IG9iamVjdC5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgdXBsb2FkaW5nIHRoZSBwb2xpY3kgb2JqZWN0IGZhaWxzLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgc2V0V2FzbVBvbGljeSA9IHRoaXMuc2V0V2FzbUZ1bmN0aW9uO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgZGF0YTogQzJGSW5mbykge1xuICAgIHN1cGVyKGFwaUNsaWVudCwgZGF0YSk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIG5hbWVkIHBvbGljeS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hbWVkUG9saWN5UnVsZXMge1xuICAvKiogVGhlIEN1YmVTaWduZXIgaW5zdGFuY2UgdGhhdCB0aGlzIHBvbGljeSBpcyBhc3NvY2lhdGVkIHdpdGggKi9cbiAgcmVhZG9ubHkgI2FwaUNsaWVudDogQXBpQ2xpZW50O1xuICAjZGF0YTogTmFtZWRQb2xpY3lJbmZvO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQGV4YW1wbGUgTmFtZWRQb2xpY3kjYTRhNDVjYzItMDY0Mi00Yzk4LWI2YmQtMGRhMzQ3ZDYwOGE0XG4gICAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZGF0YS5wb2xpY3lfaWQ7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIHZlcnNpb24gb2YgdGhlIHBvbGljeSB0aGlzIG9iamVjdCBjb250YWlucy5cbiAgICovXG4gIGdldCB2ZXJzaW9uKCk6IFZlcnNpb24ge1xuICAgIHJldHVybiBgdiR7dGhpcy4jZGF0YS52ZXJzaW9ufWA7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIHBvbGljeSBydWxlcy5cbiAgICpcbiAgICogQGV4YW1wbGUgWyBcIkFzc2VydEVyYzIwVHhcIiBdXG4gICAqL1xuICBnZXQgcnVsZXMoKTogUG9saWN5UnVsZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jZGF0YS5ydWxlcyBhcyBQb2xpY3lSdWxlW107XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYSBsaXN0IG9mIGFsbCBrZXlzLCByb2xlcywgYW5kIGtleS1pbi1yb2xlcyB0aGlzIHZlcnNpb24gb2YgdGhlIHBvbGljeVxuICAgKiAgICAgICAgICBpcyBhdHRhY2hlZCB0by5cbiAgICovXG4gIGFzeW5jIGFsbEF0dGFjaGVkKCk6IFByb21pc2U8UG9saWN5QXR0YWNoZWRUb0lkW10+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaCgpO1xuICAgIHJldHVybiBkYXRhLmF0dGFjaGVkX3RvO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgSlNPTiByZXNwb25zZSBmcm9tIHRoZSBBUEkgc2VydmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKGFwaUNsaWVudDogQXBpQ2xpZW50LCBkYXRhOiBOYW1lZFBvbGljeUluZm8pIHtcbiAgICB0aGlzLiNhcGlDbGllbnQgPSBhcGlDbGllbnQ7XG4gICAgdGhpcy4jZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoKCk6IFByb21pc2U8TmFtZWRQb2xpY3lJbmZvPiB7XG4gICAgdGhpcy4jZGF0YSA9IChhd2FpdCB0aGlzLiNhcGlDbGllbnQucG9saWN5R2V0KHRoaXMuaWQsIHRoaXMudmVyc2lvbikpIGFzIE5hbWVkUG9saWN5SW5mbztcbiAgICByZXR1cm4gdGhpcy4jZGF0YTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgaW52b2tpbmcgYSBDb25maWRlbnRpYWwgQ2xvdWQgRnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBDMkZJbnZvY2F0aW9uIHtcbiAgcmVhZG9ubHkgI2RhdGE6IEludm9rZUMyRlJlc3BvbnNlO1xuXG4gIC8qKiBAcmV0dXJucyBUaGUgcG9saWN5IHJlc3BvbnNlIGl0c2VsZi4gKi9cbiAgZ2V0IHJlc3BvbnNlKCk6IEMyRlJlc3BvbnNlIHtcbiAgICByZXR1cm4gdGhpcy4jZGF0YS5yZXNwb25zZTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbS4gVXN1YWxseSBhIFVURi04IGVuY29kZWQgc3RyaW5nLiAqL1xuICBnZXQgc3Rkb3V0KCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUhleCh0aGlzLiNkYXRhLnN0ZG91dCk7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4gVXN1YWxseSBhIFVURi04IGVuY29kZWQgc3RyaW5nLiAqL1xuICBnZXQgc3RkZXJyKCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUhleCh0aGlzLiNkYXRhLnN0ZGVycik7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLSBJTlRFUk5BTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjb252ZXJ0aW5nIGhleC1lbmNvZGVkIGRhdGEgdG8gYSBgQnVmZmVyYC5cbiAgICpcbiAgICogQHBhcmFtIGhleCBUaGUgaGV4LWVuY29kZWQgZGF0YS5cbiAgICogQHJldHVybnMgVGhlIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGZyb21IZXgoaGV4OiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShoZXguc3RhcnRzV2l0aChcIjB4XCIpID8gaGV4LnNsaWNlKDIpIDogaGV4LCBcImhleFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhOiBJbnZva2VDMkZSZXNwb25zZSkge1xuICAgIHRoaXMuI2RhdGEgPSBkYXRhO1xuICB9XG59XG5cbi8vIEJhY2t3YXJkcyBjb21wYWJpbGl0eSB3aXRoIE5hbWVkIFdhc20gUG9saWN5IG5hbWVzXG5cbi8qKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgV2FzbSBwb2xpY3kuICovXG5leHBvcnQgdHlwZSBOYW1lZFdhc21Qb2xpY3kgPSBDMkZGdW5jdGlvbjtcbi8qKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgV2FzbSBwb2xpY3kuICovXG5leHBvcnQgY29uc3QgTmFtZWRXYXNtUG9saWN5ID0gQzJGRnVuY3Rpb247XG5cbi8qKiBUaGUgcmVzdWx0IG9mIGludm9raW5nIGEgbmFtZWQgV0FTTSBwb2xpY3kuICovXG5leHBvcnQgdHlwZSBQb2xpY3lJbnZvY2F0aW9uID0gQzJGSW52b2NhdGlvbjtcbi8qKiBUaGUgcmVzdWx0IG9mIGludm9raW5nIGEgbmFtZWQgV0FTTSBwb2xpY3kuICovXG5leHBvcnQgY29uc3QgUG9saWN5SW52b2NhdGlvbiA9IEMyRkludm9jYXRpb247XG4iXX0=