cdk-nextjs 0.7.11 → 0.7.12

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.
@@ -15,7 +15,7 @@ const base_path_1 = require("../utils/base-path");
15
15
  * Base class for all Next.js root constructs
16
16
  */
17
17
  class NextjsBaseConstruct extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.7.11" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.7.12" };
19
19
  nextjsBuild;
20
20
  nextjsStaticAssets;
21
21
  nextjsCache;
@@ -191,10 +191,11 @@ class NextjsBaseConstruct extends constructs_1.Construct {
191
191
  };
192
192
  }
193
193
  /**
194
- * Runs after the init cache upload: invalidating the CDN before the new
195
- * cache is in place would only re-cache the responses the invalidation was
196
- * meant to drop, and CloudFormation infers no ordering between the two
197
- * custom resources on its own.
194
+ * Runs after the init cache and static asset uploads: invalidating the CDN
195
+ * before the new files are in place would only re-cache the responses the
196
+ * invalidation was meant to drop, and pruning before them could delete an
197
+ * object the upload is about to re-tag with this build's ID. CloudFormation
198
+ * infers no ordering between these custom resources on its own.
198
199
  */
199
200
  createNextjsPostDeploy(distribution) {
200
201
  const postDeploy = new nextjs_post_deploy_1.NextjsPostDeploy(this, "NextjsPostDeploy", {
@@ -208,8 +209,16 @@ class NextjsBaseConstruct extends constructs_1.Construct {
208
209
  overrides: this.baseProps.overrides?.nextjsPostDeploy,
209
210
  ...this.constructOverrides?.nextjsPostDeployProps,
210
211
  });
211
- if (this.nextjsCache.bucketDeployment) {
212
- postDeploy.node.addDependency(this.nextjsCache.bucketDeployment);
212
+ const { staticDeployment, serviceWorkerDeployment, publicDeployment } = this.nextjsStaticAssets;
213
+ for (const upload of [
214
+ this.nextjsCache.bucketDeployment,
215
+ staticDeployment,
216
+ serviceWorkerDeployment,
217
+ publicDeployment,
218
+ ]) {
219
+ if (upload) {
220
+ postDeploy.node.addDependency(upload);
221
+ }
213
222
  }
214
223
  return postDeploy;
215
224
  }
@@ -278,4 +287,4 @@ class NextjsBaseConstruct extends constructs_1.Construct {
278
287
  }
279
288
  }
280
289
  exports.NextjsBaseConstruct = NextjsBaseConstruct;
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJhc2UtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtYmFzZS1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUFvQztBQUtwQywyQ0FBdUM7QUFDdkMsNENBQXNEO0FBS3RELCtEQUEyRDtBQUMzRCxrREFBb0U7QUFFcEUseUVBSTRDO0FBQzVDLDhEQUcrQjtBQUMvQixrRUFJaUM7QUFDakMsa0RBSzRCO0FBOEg1Qjs7R0FFRztBQUNILE1BQXNCLG1CQUFvQixTQUFRLHNCQUFTOztJQUN6RCxXQUFXLENBQWM7SUFDekIsa0JBQWtCLENBQXFCO0lBQ3ZDLFdBQVcsQ0FBYztJQUlOLFVBQVUsQ0FBYTtJQUMxQyxxRUFBcUU7SUFDbEQsU0FBUyxDQUEyQjtJQUN2RCw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3RELGtCQUFrQixDQUFnQztJQUNyRTs7Ozs7T0FLRztJQUNnQixnQkFBZ0IsQ0FBVTtJQUU3QyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUErQixFQUMvQixVQUFzQjtRQUV0QixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1Qyx5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBQSwyQkFBZSxFQUNyQyxVQUFVLEVBQ1YsS0FBSyxDQUFDLFFBQVEsRUFDZCxJQUFJLENBQUMsV0FBVyxD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Q0FBQyxPQUFPO1lBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxrQkFBa0I7WUFDdkQsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCO1NBQ3BELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLHFCQUFxQjtRQUM3Qix1RUFBdUU7UUFDdkUsdUJBQXVCO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUMxQyxPQUFPLElBQUksa0NBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDbEQsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZTtZQUNqRCxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZO1lBQzNDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxTQUFTO2dCQUNaLGFBQWEsRUFBRTtvQkFDYixHQUFHLFNBQVMsRUFBRSxhQUFhO29CQUMzQiw4REFBOEQ7b0JBQzlELHVEQUF1RDtvQkFDdkQsdUVBQXVFO29CQUN2RSxtRUFBbUU7b0JBQ25FLGtFQUFrRTtvQkFDbEUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQzNEO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQXJUSCxrREFzVEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSURpc3RyaWJ1dGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgSVRhYmxlVjIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTE9HX1BSRUZJWCwgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzQnVpbGRQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0J1aWxkUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzQ2FjaGVQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0NhY2hlUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzXCI7XG5pbXBvcnQgeyBOZXh0anNBcGlPdmVycmlkZXMgfSBmcm9tIFwiLi4vbmV4dGpzLWFwaVwiO1xuaW1wb3J0IHsgTmV4dGpzQnVpbGQgfSBmcm9tIFwiLi4vbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZFwiO1xuaW1wb3J0IHsgTmV4dGpzQ2FjaGUsIE5leHRqc0NhY2hlT3ZlcnJpZGVzIH0gZnJvbSBcIi4uL25leHRqcy1jYWNoZVwiO1xuaW1wb3J0IHsgTmV4dGpzQ29tcHV0ZUJhc2VQcm9wcyB9IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtY29tcHV0ZS1iYXNlLXByb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNGdW5jdGlvbkdyb3VwLFxuICBOZXh0anNGdW5jdGlvbnMsXG4gIE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1mdW5jdGlvbnNcIjtcbmltcG9ydCB7XG4gIE5leHRqc1Bvc3REZXBsb3ksXG4gIE5leHRqc1Bvc3REZXBsb3lPdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtcG9zdC1kZXBsb3lcIjtcbmltcG9ydCB7XG4gIE5leHRqc1N0YXRpY0Fzc2V0cyxcbiAgTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzLFxuICBOZXh0anNTdGF0aWNBc3NldHNQcm9wcyxcbn0gZnJvbSBcIi4uL25leHRqcy1zdGF0aWMtYXNzZXRzXCI7XG5pbXBvcnQge1xuICBBcGlHYXRld2F5UHJlZml4LFxuICBpc0Fzc2V0UHJlZml4VW5zZXJ2ZWQsXG4gIHByZWZpeFdpdGhCYXNlUGF0aCxcbiAgcmVzb2x2ZUJhc2VQYXRoLFxufSBmcm9tIFwiLi4vdXRpbHMvYmFzZS1wYXRoXCI7XG5cbi8qKlxuICogQmFzZSBvdmVycmlkZXMgZm9yIHRoZSBwcm9wcyBwYXNzZWQgdG8gY29uc3RydWN0cyB3aXRoaW4gcm9vdC90b3AtbGV2ZWwgTmV4dC5qcyBjb25zdHJ1Y3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0J1aWxkUHJvcHM/OiBPcHRpb25hbE5leHRqc0J1aWxkUHJvcHM7XG4gIHJlYWRvbmx5IG5leHRqc0NhY2hlUHJvcHM/OiBPcHRpb25hbE5leHRqc0NhY2hlUHJvcHM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3lQcm9wcz86IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHNQcm9wcz86IE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzO1xufVxuXG4vKipcbiAqIEJhc2Ugb3ZlcnJpZGVzIGZvciBjb25zdHJ1Y3RzIHNoYXJlZCBiZXR3ZWVuIGFsbCByb290L3RvcC1sZXZlbCBOZXh0LmpzIGNvbnN0cnVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0NhY2hlPzogTmV4dGpzQ2FjaGVPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHM/OiBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFByZWZpeCB0byB0aGUgVVJJIHBhdGggdGhlIGFwcCB3aWxsIGJlIHNlcnZlZCBhdC4gQWxzbyBuYW1lc3BhY2VzIHRoZVxuICAgKiBzdGF0aWMgYXNzZXRzIGluIFMzLCBzbyBpdCBkb3VibGVzIGFzIGEgd2F5IHRvIGhvc3QgbXVsdGlwbGUgYXBwcyBvclxuICAgKiBicmFuY2hlcyBvdXQgb2Ygb25lIGJ1Y2tldC5cbiAgICpcbiAgICogSG93IHRoaXMgcmVsYXRlcyB0byB0aGUgYGJhc2VQYXRoYCBpbiB5b3VyIGFwcCdzIGBuZXh0LmNvbmZpZy5qc2AgZGVwZW5kc1xuICAgKiBvbiB0aGUgY29uc3RydWN0LCBhbmQgc3ludGggZmFpbHMgb24gYSBjb21iaW5hdGlvbiB0aGF0IGNhbid0IHNlcnZlIHRoZVxuICAgKiBhcHA6XG4gICAqXG4gICAqIC0gYE5leHRqc0dsb2JhbEZ1bmN0aW9uc2AvYE5leHRqc0dsb2JhbENvbnRhaW5lcnNgOiBsZWF2ZSB0aGlzIHVuc2V0IGFuZCBpdFxuICAgKiAgIGZvbGxvd3MgeW91ciBhcHAncyBgYmFzZVBhdGhgLCB3aGljaCBpcyB3aGF0IHlvdSB3YW50IOKAlCBDbG91ZEZyb250IHNlcnZlc1xuICAgKiAgIHN0YXRpYyBhc3NldHMgZnJvbSBTMyB1c2luZyB0aGUgcmVxdWVzdCBwYXRoIGFzIHRoZSBvYmplY3Qga2V5LCBzbyB0aGUgdHdvXG4gICAqICAgaGF2ZSB0byBiZSBpZGVudGljYWwgYW5kIGEgbWlzbWF0Y2ggNDA0cyBhbGwgb2YgdGhlbS4gU2V0dGluZyBhIGRpZmZlcmVudFxuICAgKiAgIHZhbHVlIHRocm93cy5cbiAgICogLSBgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNgOiBsZWF2ZSB0aGlzIHVuc2V0IGFuZCBpdCBmb2xsb3dzIHlvdXIgYXBwJ3NcbiAgICogICBgYmFzZVBhdGhgIG1pbnVzIHRoZSBwcmVmaXggQVBJIEdhdGV3YXkgc3RyaXBzIGJlZm9yZSBtYXRjaGluZyByZXNvdXJjZXMg4oCUXG4gICAqICAgdGhlIHN0YWdlIChgZGVwbG95T3B0aW9ucy5zdGFnZU5hbWVgLCBkZWZhdWx0IGBwcm9kYCksIG9yIHRoZSBiYXNlIHBhdGhcbiAgICogICBtYXBwaW5nIG9mIGEgY3VzdG9tIGRvbWFpbiBzZXQgaW4gYHJlc3RBcGlQcm9wcy5kb21haW5OYW1lYC4gU29cbiAgICogICBgYmFzZVBhdGg6IFwiL3Byb2RcImAgbW91bnRzIGF0IHRoZSByb290LCBgXCIvcHJvZC9iYXNlXCJgIHVuZGVyIGBiYXNlYCwgYW5kXG4gICAqICAgYFwiL2RvY3NcImAgYmVoaW5kIGEgY3VzdG9tIGRvbWFpbiBtYXBwZWQgYXQgdGhlIHJvb3QgdW5kZXIgYGRvY3NgLiBPbiB0aGVcbiAgICogICBleGVjdXRlLWFwaSBlbmRwb2ludCBhbiBhcHAgYGJhc2VQYXRoYCB0aGF0IGRvZXNuJ3Qgc3RhcnQgd2l0aCB0aGUgc3RhZ2VcbiAgICogICB3YXJucywgc2luY2UgaXRzIGxpbmtzIHdpbGwgbWlzcyB0aGUgc3RhZ2UuIElmIHlvdSBzZXQgdGhpcywgdGhlIGFwcCdzXG4gICAqICAgYGJhc2VQYXRoYCBtdXN0IGVuZCB3aXRoIGl0LiBBIGRvbWFpbiBhdHRhY2hlZCBsYXRlciB3aXRoXG4gICAqICAgYGFkZERvbWFpbk5hbWUoKWAgaXMgbm90IHNlZW4gYXQgc3ludGg7IHNldCB0aGlzIGV4cGxpY2l0bHkgdGhlbiDigJQgdG9cbiAgICogICBgXCIvXCJgIHdoZW4gdGhhdCBkb21haW4ncyBiYXNlIHBhdGggbWFwcGluZyBzdHJpcHMgeW91ciBhcHAncyB3aG9sZVxuICAgKiAgIGBiYXNlUGF0aGAsIHdoaWNoIG1vdW50cyBldmVyeSByZXNvdXJjZSBhdCB0aGUgcm9vdC5cbiAgICogLSBgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYDogb25seSBuYW1lc3BhY2VzIHRoZSBTMyBidWNrZXQuIFRoZSBBTEIgc2VuZHNcbiAgICogICBldmVyeSBwYXRoIHRvIHRoZSBjb250YWluZXIsIHdoaWNoIHNlcnZlcyBpdHMgb3duIHN0YXRpYyBhc3NldHMsIHNvIHRoaXNcbiAgICogICBpcyB1bmNvbnN0cmFpbmVkLlxuICAgKiBAZXhhbXBsZSBcIi9teS1iYXNlLXBhdGhcIlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVBhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb21tYW5kIHRvIGdlbmVyYXRlIG9wdGltaXplZCB2ZXJzaW9uIG9mIHlvdXIgTmV4dC5qcyBhcHAgaW4gY29udGFpbmVyO1xuICAgKiBAZGVmYXVsdCBcIm5wbSBydW4gYnVpbGRcIlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kPzogc3RyaW5nO1xuICAvKipcbiAgICogRGlyZWN0b3J5IHdoZXJlIHRoZSBOZXh0LmpzIGFwcGxpY2F0aW9uIGlzIGxvY2F0ZWQgZm9yIGxvY2FsIGJ1aWxkcy5cbiAgICogVGhpcyBzaG91bGQgY29udGFpbiB0aGUgcGFja2FnZS5qc29uIGFuZCBOZXh0LmpzIGFwcGxpY2F0aW9uIGZpbGVzLlxuICAgKiBUaGlzIGlzIHdoZXJlIHtAbGluayBOZXh0anNCYXNlUHJvcHMuYnVpbGRDb21tYW5kfSBpcyBydW4uXG4gICAqIEBleGFtcGxlIGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIndlYlwiKSBvciBcIi9wYXRoL3RvL25leHRqcy9hcHBcIlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGREaXJlY3Rvcnk6IHN0cmluZztcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIFMzIGJ1Y2tldCBmb3IgY2FjaGUgc3RvcmFnZS4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqc1xuICAgKiB3aWxsIHVzZSB0aGlzIGJ1Y2tldCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICpcbiAgICogVGhlIGJ1Y2tldCBtdXN0IGJlIGRlZGljYXRlZCB0byB0aGlzIG9uZSBkZXBsb3ltZW50LiBEb24ndCBzaGFyZSBpdCB3aXRoXG4gICAqIGFub3RoZXIgZGVwbG95bWVudCAoYW5vdGhlciBicmFuY2gsIHN0YWdlLCBvciBhcHApOiBldmVyeSBkZXBsb3knc1xuICAgKiBwb3N0LWRlcGxveSBzdGVwIGRlbGV0ZXMgZXZlcnkgb2JqZWN0IHVuZGVyIGEgdG9wLWxldmVsIHByZWZpeCBvdGhlciB0aGFuXG4gICAqIHRoZSBjdXJyZW50IGBidWlsZElkL2AsIHdoaWNoIGluY2x1ZGVzIGV2ZXJ5IG90aGVyIGRlcGxveW1lbnQncyBjYWNoZS5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlQnVja2V0PzogSUJ1Y2tldDtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIER5bmFtb0RCIHRhYmxlIGZvciByZXZhbGlkYXRpb24gbWV0YWRhdGEuIFdoZW4gcHJvdmlkZWQsXG4gICAqIGNkay1uZXh0anMgd2lsbCB1c2UgdGhpcyB0YWJsZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS4gVGhlIHRhYmxlXG4gICAqIG11c3QgaGF2ZSBgcGtgIChTdHJpbmcpIGFzIHBhcnRpdGlvbiBrZXkgYW5kIGBza2AgKFN0cmluZykgYXMgc29ydCBrZXkuXG4gICAqIEVuYWJsZSBUVEwgb24gaXRzIGB0dGxgIGF0dHJpYnV0ZSB0b286IGVhY2ggdGFnIHJldmFsaWRhdGlvbiB3cml0ZXMgYVxuICAgKiByZXZhbGlkYXRpb24gbG9nIHJvdyB0aGF0IGV4cGlyZXMgdGhyb3VnaCBpdCwgYW5kIHdpdGhvdXQgVFRMIHRob3NlIHJvd3NcbiAgICogYWNjdW11bGF0ZS5cbiAgICpcbiAgICogVGhlIHRhYmxlIG11c3QgYmUgZGVkaWNhdGVkIHRvIHRoaXMgb25lIGRlcGxveW1lbnQuIERvbid0IHNoYXJlIGl0IHdpdGhcbiAgICogYW5vdGhlciBkZXBsb3ltZW50IChhbm90aGVyIGJyYW5jaCwgc3RhZ2UsIG9yIGFwcCk6IGV2ZXJ5IGRlcGxveSdzXG4gICAqIHBvc3QtZGVwbG95IHN0ZXAgZGVsZXRlcyB0aGUgZW50cmllcyBvZiB0aGUgYnVpbGQgaXQgbGFzdCByZWNvcmRlZCBpbiB0aGVcbiAgICogdGFibGUsIHdoaWNoIHdpdGggYSBzaGFyZWQgdGFibGUgaXMgYW5vdGhlciBkZXBsb3ltZW50J3MgbGl2ZSBidWlsZC5cbiAgICovXG4gIHJlYWRvbmx5IHJldmFsaWRhdGlvblRhYmxlPzogSVRhYmxlVjI7XG4gIC8qKlxuICAgKiBTa2lwcyBydW5uaW5nIGBuZXh0IGJ1aWxkYC4gSWYgYHRydWVgLCB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBydW5uaW5nXG4gICAqIGBuZXh0IGJ1aWxkYCBiZWZvcmUgdGhpcyBjb25zdHJ1Y3QgaXMgc3ludGhlc2l6ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwQnVpbGQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gUzMgYnVja2V0IGZvciBzdGF0aWMgYXNzZXRzLiBXaGVuIHByb3ZpZGVkLCBjZGstbmV4dGpzXG4gICAqIHdpbGwgZGVwbG95IHN0YXRpYyBhc3NldHMgdG8gdGhpcyBidWNrZXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuXG4gICAqXG4gICAqIFVubGlrZSBgY2FjaGVCdWNrZXRgLCB0aGlzIG9uZSBjYW4gYmUgc2hhcmVkLCBidXQgb25seSBiZXR3ZWVuIGRlcGxveW1lbnRzXG4gICAqIHdpdGggZGlmZmVyZW50IGBiYXNlUGF0aGBzIChzbyBkaWZmZXJlbnQgUzMga2V5IHByZWZpeGVzKS4gUHJ1bmluZyBvbmx5XG4gICAqIHRvdWNoZXMgYDxiYXNlUGF0aD4vX25leHQvYCwgc28gaXQgbGVhdmVzIHRoZSBvdGhlcnMnIGFzc2V0cyBhbG9uZS4gVHdvXG4gICAqIGRlcGxveW1lbnRzIHVuZGVyIHRoZSBzYW1lIHByZWZpeCBvdmVyd3JpdGUgZWFjaCBvdGhlcidzIGBwdWJsaWMvYCBmaWxlc1xuICAgKiBhbmQgcHJ1bmUgZWFjaCBvdGhlcidzIGBfbmV4dC9gIGFzc2V0cyBvbmNlIHRoZXkgYXJlIHBhc3QgdGhlIHBydW5lXG4gICAqIFRUTCAoMzAgZGF5cyBieSBkZWZhdWx0KS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldD86IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBWUEMuXG4gICAqIElmIHByb3ZpZGVkLCB3aWxsIGJlIHBhc3NlZCB2aWEgb3ZlcnJpZGVzIHRvIHRoZSBFQ1MgQ2x1c3RlciAoZm9yIGNvbnRhaW5lci1iYXNlZCBjb25zdHJ1Y3RzKVxuICAgKiBvciB0byB0aGUgTGFtYmRhIGZ1bmN0aW9uIChmb3IgZnVuY3Rpb24tYmFzZWQgY29uc3RydWN0cykuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgRUNTIENsdXN0ZXIgd2lsbCBjcmVhdGUgYSBWUEMgYXV0b21hdGljYWxseSBmb3IgY29udGFpbmVycyxcbiAgICogYW5kIExhbWJkYSBmdW5jdGlvbnMgd2lsbCBydW4gb3V0c2lkZSBhIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGM7XG59XG5cbi8qKlxuICogUmVxdWlyZWQgYmVjYXVzZSBpZiB3ZSBhZGQgYG92ZXJyaWRlc2Agb250byBgTmV4dGpzQmFzZVByb3BzYCB3ZSBnZXQganNpaVxuICogZXJyb3I6IGBJbnRlcmZhY2UgLi4uIHJlLWRlY2xhcmVzIG1lbWJlciBcIm92ZXJyaWRlc1wiYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcyBleHRlbmRzIE5leHRqc0Jhc2VQcm9wcyB7XG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0Jhc2VPdmVycmlkZXM7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIE5leHQuanMgcm9vdCBjb25zdHJ1Y3RzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZXh0anNCYXNlQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgbmV4dGpzQnVpbGQ6IE5leHRqc0J1aWxkO1xuICBuZXh0anNTdGF0aWNBc3NldHM6IE5leHRqc1N0YXRpY0Fzc2V0cztcbiAgbmV4dGpzQ2FjaGU6IE5leHRqc0NhY2hlO1xuXG4gIGFic3RyYWN0IGdldCB1cmwoKTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvLyB1c2UgYmFzZVByb3BzIGluc3RlYWQgb2YgcHJvcHMgc28gdGhhdCBjaGlsZCBjbGFzc2VzIGNhbiB1c2UgcHJvcHNcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJhc2VQcm9wczogTmV4dGpzQmFzZUNvbnN0cnVjdFByb3BzO1xuICAvLyBXaWRlc3Qgc2hhcGUgb2YgdGhlIHBlci1gTmV4dGpzVHlwZWAgb3ZlcnJpZGVzLiBUaGUgcHVibGljIGludGVyZmFjZSBlYWNoXG4gIC8vIHJvb3QgY29uc3RydWN0IGFjY2VwdHMgaXMgd2hhdCBhY3R1YWxseSBnYXRlcyB3aGljaCBrZXlzIGFyZSBzZXR0YWJsZS5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnN0cnVjdE92ZXJyaWRlcz86IE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXM7XG4gIC8qKlxuICAgKiBUaGUgYGJhc2VQYXRoYCBldmVyeXRoaW5nIGRvd25zdHJlYW0gaXMgYnVpbHQgZnJvbTogdGhlIGBiYXNlUGF0aGAgcHJvcCB3aGVuXG4gICAqIHNldCwgb3RoZXJ3aXNlIHRoZSBhcHAncyBvd24gYGJhc2VQYXRoYCBmb3IgdGhlIGBOZXh0anNUeXBlYHMgd2hlcmUgdGhlIHR3b1xuICAgKiBhcmUgbmVjZXNzYXJpbHkgdGhlIHNhbWUuIE5vcm1hbGl6ZWQgdG8gYSBiYXJlIHBhdGggc2VnbWVudCwgYHVuZGVmaW5lZGAgZm9yXG4gICAqIG5vIGBiYXNlUGF0aGAuIFVzZSB0aGlzIGluc3RlYWQgb2YgYGJhc2VQcm9wcy5iYXNlUGF0aGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVzb2x2ZWRCYXNlUGF0aD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcyxcbiAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuYmFzZVByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5uZXh0anNUeXBlID0gbmV4dGpzVHlwZTtcbiAgICB0aGlzLmNvbnN0cnVjdE92ZXJyaWRlcyA9IHRoaXMuZ2V0Q29uc3RydWN0T3ZlcnJpZGVzKG5leHRqc1R5cGUpO1xuXG4gICAgdGhpcy5uZXh0anNCdWlsZCA9IHRoaXMuY3JlYXRlTmV4dGpzQnVpbGQoKTtcbiAgICAvLyBBIGJhc2VQYXRoIHRoYXQgZG9lc24ndCBsaW5lIHVwIHdpdGggdGhlIGFwcCdzIG93biBkZXBsb3lzIGNsZWFubHkgYW5kXG4gICAgLy8gdGhlbiA0MDRzIHN0YXRpYyBhc3NldHMsIHNvIHJlY29uY2lsZSB0aGUgdHdvIHVwIGZyb250IGFuZCBmYWlsIGF0IHN5bnRoXG4gICAgLy8gb24gYSBjb21iaW5hdGlvbiB0aGF0IGNhbid0IHdvcmsuXG4gICAgdGhpcy5yZXNvbHZlZEJhc2VQYXRoID0gcmVzb2x2ZUJhc2VQYXRoKFxuICAgICAgbmV4dGpzVHlwZSxcbiAgICAgIHByb3BzLmJhc2VQYXRoLFxuICAgICAgdGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQmFzZVBhdGgsXG4gICAgICB0aGlzLmFwaUdhdGV3YXlQcmVmaXgoKSxcbiAgICApO1xuICAgIHRoaXMubmV4dGpzQ2FjaGUgPSB0aGlzLmNyZWF0ZU5leHRqc0NhY2hlKCk7XG4gICAgdGhpcy5uZXh0anNTdGF0aWNBc3NldHMgPSB0aGlzLmNyZWF0ZU5leHRqc1N0YXRpY0Fzc2V0cygpO1xuICAgIHRoaXMudmFsaWRhdGVTdGF0aWNBc3NldHNLZXlQcmVmaXgoKTtcbiAgICB0aGlzLndhcm5VbnNlcnZlZEFzc2V0UHJlZml4KCk7XG4gIH1cblxuICAvKipcbiAgICogV2FybnMgd2hlbiBhIHBhdGgtc3R5bGUgYGFzc2V0UHJlZml4YCB3b3VsZCA0MDQgZXZlcnkgYnVuZGxlIG9uIHRoaXNcbiAgICogYE5leHRqc1R5cGVgIOKAlCBzZWUge0BsaW5rIGlzQXNzZXRQcmVmaXhVbnNlcnZlZH0gZm9yIHdoaWNoIGNvbWJpbmF0aW9ucyB0aG9zZVxuICAgKiBhcmUgYW5kIHdoeSBhIHByZWZpeCBlcXVhbCB0byB0aGUgYXBwJ3MgYGJhc2VQYXRoYCBpcyBub3Qgb25lIG9mIHRoZW0uXG4gICAqXG4gICAqIFdhcm4gcmF0aGVyIHRoYW4gdGhyb3c6IGl0IGlzIHRoZSBhcHAncyBjb25maWcsIHRoZSBkZXBsb3ltZW50IG90aGVyd2lzZVxuICAgKiB3b3JrcywgYW5kIGFuIGFic29sdXRlIGBhc3NldFByZWZpeGAgKGFscmVhZHkgcmVkdWNlZCB0byBgXCJcImAgYnlcbiAgICogYHJlbGF0aXZlQXNzZXRQcmVmaXhgKSBpcyB0aGUgc3VwcG9ydGVkIHdheSB0byBzZXJ2ZSBhc3NldHMgZnJvbVxuICAgKiBlbHNld2hlcmUuXG4gICAqL1xuICBwcml2YXRlIHdhcm5VbnNlcnZlZEFzc2V0UHJlZml4KCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICFpc0Fzc2V0UHJlZml4VW5zZXJ2ZWQoXG4gICAgICAgIHRoaXMubmV4dGpzVHlwZSxcbiAgICAgICAgdGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQXNzZXRQcmVmaXgsXG4gICAgICAgIHRoaXMubmV4dGpzQnVpbGQubmV4dENvbmZpZ0Jhc2VQYXRoLFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJHtMT0dfUFJFRklYfSB5b3VyIE5leHQuanMgYXBwIHNldHMgXFxgYXNzZXRQcmVmaXg6IFwiJHt0aGlzLm5leHRqc0J1aWxkLm5leHRDb25maWdBc3NldFByZWZpeH1cIlxcYCwgYCArXG4gICAgICAgIGB3aGljaCBOZXh0anNUeXBlLiR7dGhpcy5uZXh0anNUeXBlfSBjYW5ub3Qgc2VydmU6IHlvdXIgYnVuZGxlcyB3aWxsIGJlIHJlcXVlc3RlZCBhdCBgICtcbiAgICAgICAgYFwiJHt0aGlzLm5leHRqc0J1aWxkLm5leHRDb25maWdBc3NldFByZWZpeH0vX25leHQvc3RhdGljLy4uLlwiIGFuZCBub3RoaW5nIGFuc3dlcnMgdGhlcmUsIHNvIHRoZXkgd2lsbCA0MDQuIGAgK1xuICAgICAgICBcIkRyb3AgYGFzc2V0UHJlZml4YCwgdXNlIGFuIGFic29sdXRlIG9uZSBwb2ludGluZyBhdCBhIENETiB5b3UgZnJvbnQgdGhlIGFzc2V0cyBidWNrZXQgd2l0aCwgXCIgK1xuICAgICAgICBcIm9yIGRlcGxveSB3aXRoIE5leHRqc0dsb2JhbEZ1bmN0aW9ucy9OZXh0anNHbG9iYWxDb250YWluZXJzLlwiLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRm9yIHRoZSBHbG9iYWwgYE5leHRqc1R5cGVgcyB0aGUga2V5IHByZWZpeCBpc24ndCBhIGZyZWUgY2hvaWNlOiBpdCBoYXMgdG8gYmVcbiAgICogYGJhc2VQYXRoYCAoc2VlIGByZXNvbHZlQmFzZVBhdGhgKS4gQSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlIHRoYXRcbiAgICogbW92ZXMgdGhlIG9iamVjdHMgZWxzZXdoZXJlIGhhcyBubyB3YXkgdG8gdGVsbCB0aGUgZGlzdHJpYnV0aW9uIGFib3V0IGl0IOKAlFxuICAgKiB1bmxpa2UgdGhlIGZ1bmN0aW9ucycgaW1hZ2Ugb3B0aW1pemVyIGFuZCBgTmV4dGpzQXBpYCwgd2hpY2ggcmVhZFxuICAgKiBgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGAg4oCUIHNvIGZhaWwgYXQgc3ludGggcmF0aGVyIHRoYW4gNDA0IGV2ZXJ5XG4gICAqIHN0YXRpYyByZXF1ZXN0LlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVN0YXRpY0Fzc2V0c0tleVByZWZpeCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm5leHRqc1R5cGUgIT09IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyAmJlxuICAgICAgdGhpcy5uZXh0anNUeXBlICE9PSBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5yZXNvbHZlZEJhc2VQYXRoID8/IFwiXCI7XG4gICAgY29uc3QgYWN0dWFsID0gdGhpcy5uZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4O1xuICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke0xPR19QUkVGSVh9IHN0YXRpYyBhc3NldHMga2V5IHByZWZpeCBtaXNtYXRjaCBmb3IgTmV4dGpzVHlwZS4ke3RoaXMubmV4dGpzVHlwZX06IGAgK1xuICAgICAgICAgIGB0aGUgYXNzZXRzIGFyZSB1cGxvYWRlZCB1bmRlciAke2FjdHVhbCA/IGBcIiR7YWN0dWFsfVwiYCA6IFwidGhlIGJ1Y2tldCByb290XCJ9IGAgK1xuICAgICAgICAgIGBidXQgQ2xvdWRGcm9udCB3aWxsIHJlcXVlc3QgdGhlbSB1bmRlciAke2V4cGVjdGVkID8gYFwiJHtleHBlY3RlZH1cImAgOiBcInRoZSBidWNrZXQgcm9vdFwifSwgYCArXG4gICAgICAgICAgXCJ1c2luZyB0aGUgcmVxdWVzdCBwYXRoIGFzIHRoZSBTMyBvYmplY3Qga2V5LCBzbyBldmVyeSBgX25leHQvc3RhdGljYCBhbmQgYHB1YmxpYy9gIHJlcXVlc3Qgd291bGQgNDA0LiBcIiArXG4gICAgICAgICAgXCJEcm9wIHRoZSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlLCBvciBzZXQgaXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgYGJhc2VQYXRoYC4gXCIgK1xuICAgICAgICAgIFwiVG8gbmFtZXNwYWNlIGEgc2hhcmVkIGJ1Y2tldCwgdXNlIGBiYXNlUGF0aGAg4oCUIGl0IHByZWZpeGVzIHRoZSBrZXlzIGFuZCB0aGUgVVJMcyB0b2dldGhlci5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggQVBJIEdhdGV3YXkgd2lsbCBzdHJpcCwgcmVhZCBmcm9tIHRoZSBzYW1lIGByZXN0QXBpUHJvcHNgXG4gICAqIG92ZXJyaWRlIGBOZXh0anNBcGlgIGJ1aWxkcyBpdHMgYFJlc3RBcGlgIGZyb20uIE9ubHkgbWVhbmluZ2Z1bCBmb3JcbiAgICogYFJFR0lPTkFMX0ZVTkNUSU9OU2AsIGFuZCByZWFkIGJlZm9yZSBgTmV4dGpzQXBpYCBleGlzdHMgYmVjYXVzZSB0aGVcbiAgICogcmVzb2x2ZWQgYGJhc2VQYXRoYCBhbHNvIGRlY2lkZXMgdGhlIHN0YXRpYyBhc3NldHMnIFMzIGtleSBwcmVmaXguXG4gICAqXG4gICAqIEEgZG9tYWluIGF0dGFjaGVkIGxhdGVyIHdpdGggYGFwaS5hZGREb21haW5OYW1lKClgIGlzIGludmlzaWJsZSBoZXJlLCB0aGVcbiAgICogc2FtZSBsaW1pdGF0aW9uIGBOZXh0anNBcGkudXJsYCBkb2N1bWVudHMuXG4gICAqL1xuICBwcml2YXRlIGFwaUdhdGV3YXlQcmVmaXgoKTogQXBpR2F0ZXdheVByZWZpeCB7XG4gICAgLy8gYG92ZXJyaWRlcy5uZXh0anNBcGlgIGlzIHRoZSBvbmx5IHR5cGVkIHdheSB0byByZWFjaCB0aGUgYFJlc3RBcGlgJ3NcbiAgICAvLyBwcm9wczogYG5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zLm5leHRqc0FwaVByb3BzYCBpc1xuICAgIC8vIGBPcHRpb25hbE5leHRqc0FwaVByb3BzYCwgd2hpY2ggaGFzIG5vIGBvdmVycmlkZXNgLlxuICAgIGNvbnN0IGFwaU92ZXJyaWRlcyA9IChcbiAgICAgIHRoaXMuYmFzZVByb3BzLm92ZXJyaWRlcyBhcyB7IG5leHRqc0FwaT86IE5leHRqc0FwaU92ZXJyaWRlcyB9IHwgdW5kZWZpbmVkXG4gICAgKT8ubmV4dGpzQXBpO1xuICAgIGNvbnN0IHJlc3RBcGlQcm9wcyA9IGFwaU92ZXJyaWRlcz8ucmVzdEFwaVByb3BzO1xuICAgIGNvbnN0IGRvbWFpbk5hbWUgPSByZXN0QXBpUHJvcHM/LmRvbWFpbk5hbWU7XG4gICAgY29uc3Qgc3RyaXBwZWRQcmVmaXggPSBkb21haW5OYW1lXG4gICAgICA/IChkb21haW5OYW1lLmJhc2VQYXRoID8/IFwiXCIpXG4gICAgICA6IChyZXN0QXBpUHJvcHM/LmRlcGxveU9wdGlvbnM/LnN0YWdlTmFtZSA/PyBcInByb2RcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmlwcGVkUHJlZml4OiBUb2tlbi5pc1VucmVzb2x2ZWQoc3RyaXBwZWRQcmVmaXgpXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogc3RyaXBwZWRQcmVmaXgsXG4gICAgICBjdXN0b21Eb21haW46IGRvbWFpbk5hbWUgIT09IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGNvbnN0cnVjdCBvdmVycmlkZXMgKGlmIHByZXNlbnQpIG9uIHByb3BzIGZvciBhbnkgYE5leHRqc1R5cGVgXG4gICAqL1xuICBwcml2YXRlIGdldENvbnN0cnVjdE92ZXJyaWRlcyhuZXh0anNUeXBlOiBOZXh0anNUeXBlKSB7XG4gICAgY29uc3QgbmV4dGpzVHlwZVRvS2V5OiBSZWNvcmQ8TmV4dGpzVHlwZSwgc3RyaW5nPiA9IHtcbiAgICAgIFtOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTXTogXCJuZXh0anNHbG9iYWxDb250YWluZXJzXCIsXG4gICAgICBbTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TXTogXCJuZXh0anNHbG9iYWxGdW5jdGlvbnNcIixcbiAgICAgIFtOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlNdOiBcIm5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc1wiLFxuICAgICAgW05leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TXTogXCJuZXh0anNSZWdpb25hbEZ1bmN0aW9uc1wiLFxuICAgIH07XG4gICAgY29uc3Qga2V5ID0gbmV4dGpzVHlwZVRvS2V5W25leHRqc1R5cGVdO1xuICAgIGNvbnN0IG92ZXJyaWRlcyA9IHRoaXMuYmFzZVByb3BzLm92ZXJyaWRlcyBhc1xuICAgICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKG92ZXJyaWRlcyAmJiBrZXkgaW4gb3ZlcnJpZGVzKSB7XG4gICAgICByZXR1cm4gb3ZlcnJpZGVzW2tleV0gYXMgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcztcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIGBvdmVycmlkZXMubmV4dGpzRnVuY3Rpb25zYCwgd2hpY2ggb25seSB0aGUgdHdvIEZ1bmN0aW9ucyByb290IGNvbnN0cnVjdHNcbiAgICogZGVjbGFyZS4gQ2FzdCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIHtAbGluayBmdW5jdGlvbkdyb3Vwc30uXG4gICAqL1xuICBwcml2YXRlIGdldCBmdW5jdGlvbnNPdmVycmlkZXMoKTogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBvdmVycmlkZXMgPSB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXMgYXNcbiAgICAgIHsgbmV4dGpzRnVuY3Rpb25zPzogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzIH0gfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG92ZXJyaWRlcz8ubmV4dGpzRnVuY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIGBmdW5jdGlvbkdyb3Vwc2AsIHdoaWNoIG9ubHkgdGhlIHR3byBGdW5jdGlvbnMgcm9vdCBjb25zdHJ1Y3RzIGFjY2VwdCDigJRcbiAgICogQ29udGFpbmVycyBkZXBsb3kgb25lIHRhc2sgZGVmaW5pdGlvbiBhbmQgaGF2ZSBubyAyNTAgTUIgcGFja2FnZSBsaW1pdCB0b1xuICAgKiBzcGxpdCBhcm91bmQuXG4gICAqXG4gICAqIFJlYWQgb2ZmIGBiYXNlUHJvcHNgIHdpdGggYSBjYXN0IGZvciB0aGUgc2FtZSByZWFzb24gYXNcbiAgICoge0BsaW5rIGdldENvbnN0cnVjdE92ZXJyaWRlc306IGBjcmVhdGVOZXh0anNCdWlsZGAgYW5kXG4gICAqIGBjcmVhdGVOZXh0anNGdW5jdGlvbnNgIGFyZSBzaGFyZWQgaGVyZSwgYnV0IHRoZSBwcm9wIGlzIGRlY2xhcmVkIG9uIHRoZVxuICAgKiBzdWJjbGFzc2VzLCBzbyBub3RoaW5nIHdlYWtlciB0aGFuIGEgY2FzdCBjYW4gc2VlIGl0LiBBZGRpbmcgaXQgdG9cbiAgICogYE5leHRqc0Jhc2VQcm9wc2Agd291bGQgb2ZmZXIgaXQgdG8gQ29udGFpbmVycywgd2hlcmUgaXQgZG9lcyBub3RoaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmdW5jdGlvbkdyb3VwcygpOiBOZXh0anNGdW5jdGlvbkdyb3VwW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5iYXNlUHJvcHMgYXMgeyBmdW5jdGlvbkdyb3Vwcz86IE5leHRqc0Z1bmN0aW9uR3JvdXBbXSB9O1xuICAgIHJldHVybiBwcm9wcy5mdW5jdGlvbkdyb3VwcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGVhbHRoIGNoZWNrIHBhdGggYXMgdGhlIHJ1bm5pbmcgYXBwIGFjdHVhbGx5IHNlcnZlcyBpdC5cbiAgICpcbiAgICogQm90aCBjb25zdW1lcnMgb2YgdGhpcyBoaXQgdGhlIGFwcCBkaXJlY3RseSDigJQgdGhlIEFMQiB0YXJnZXQgZ3JvdXAgZm9yd2FyZHNcbiAgICogdGhlIHBhdGggdG8gdGhlIGNvbnRhaW5lciB1bmNoYW5nZWQsIGFuZCB0aGUgY29udGFpbmVyJ3MgYHdnZXRgIHByb2JlIHRhcmdldHNcbiAgICogdGhlIGxvY2FsIHNlcnZlciDigJQgc28gdGhlIHByZWZpeCB0aGF0IG1hdHRlcnMgaXMgdGhlIGFwcCdzIG93biBgYmFzZVBhdGhgLFxuICAgKiBub3QgYHJlc29sdmVkQmFzZVBhdGhgICh3aGljaCBmb3IgYFJFR0lPTkFMX0NPTlRBSU5FUlNgIGlzIG9ubHkgYW4gUzNcbiAgICogbmFtZXNwYWNlKS4gTGVmdCB1bnByZWZpeGVkLCBhbiBhcHAgd2l0aCBhIGBiYXNlUGF0aGAgNDA0cyBldmVyeSBoZWFsdGhcbiAgICogY2hlY2ssIHNvIHRoZSB0YXJnZXQgbmV2ZXIgdHVybnMgaGVhbHRoeSBhbmQgdGhlIGRlcGxveW1lbnQgcm9sbHMgYmFjay5cbiAgICogYGhlYWx0aENoZWNrUGF0aGAgaXMgdGhlcmVmb3JlIHRoZSBwYXRoIGFzIHRoZSBhcHAgcm91dGVzIGl0LCB3aXRob3V0XG4gICAqIGBiYXNlUGF0aGA7IG9uZSB0aGF0IGNhcnJpZXMgdGhlIHByZWZpeCBhbHJlYWR5IGdldHMgaXQgdHdpY2UsIHdoaWNoIGlzIHRoZVxuICAgKiAwLjYuMiBicmVha2luZyBjaGFuZ2UgZm9yIGFueW9uZSB3aG8gcHJlZml4ZWQgYnkgaGFuZCB0byB3b3JrIGFyb3VuZCB0aGlzLlxuICAgKlxuICAgKiBUYWtlcyB0aGUgcGF0aCBhcyBhbiBhcmd1bWVudCByYXRoZXIgdGhhbiByZWFkaW5nIGl0IG9mZiBgYmFzZVByb3BzYDogb25seVxuICAgKiB0aGUgdHdvIENvbnRhaW5lcnMgcm9vdCBjb25zdHJ1Y3RzIGRlY2xhcmUgYGhlYWx0aENoZWNrUGF0aGAsIHNpbmNlIHRoZXkncmVcbiAgICogdGhlIG9ubHkgb25lcyB3aXRoIHNvbWV0aGluZyB0byBoZWFsdGgtY2hlY2suXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZWRIZWFsdGhDaGVja1BhdGgoaGVhbHRoQ2hlY2tQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwcmVmaXhXaXRoQmFzZVBhdGgoXG4gICAgICB0aGlzLm5leHRqc0J1aWxkLm5leHRDb25maWdCYXNlUGF0aCxcbiAgICAgIGhlYWx0aENoZWNrUGF0aCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb21wdXRlIGJhc2UgcHJvcHMgZm9yIGJvdGggTGFtYmRhIGZ1bmN0aW9ucyBhbmQgY29udGFpbmVyc1xuICAgKi9cbiAgcHJvdGVjdGVkIGNvbXB1dGVCYXNlUHJvcHMoKTogTmV4dGpzQ29tcHV0ZUJhc2VQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhY2hlQnVja2V0OiB0aGlzLm5leHRqc0NhY2hlLmNhY2hlQnVja2V0LFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMubmV4dGpzQ2FjaGUucmV2YWxpZGF0aW9uVGFibGUsXG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIHN0YXRpY0Fzc2V0c0tleVByZWZpeDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhZnRlciB0aGUgaW5pdCBjYWNoZSB1cGxvYWQ6IGludmFsaWRhdGluZyB0aGUgQ0ROIGJlZm9yZSB0aGUgbmV3XG4gICAqIGNhY2hlIGlzIGluIHBsYWNlIHdvdWxkIG9ubHkgcmUtY2FjaGUgdGhlIHJlc3BvbnNlcyB0aGUgaW52YWxpZGF0aW9uIHdhc1xuICAgKiBtZWFudCB0byBkcm9wLCBhbmQgQ2xvdWRGb3JtYXRpb24gaW5mZXJzIG5vIG9yZGVyaW5nIGJldHdlZW4gdGhlIHR3b1xuICAgKiBjdXN0b20gcmVzb3VyY2VzIG9uIGl0cyBvd24uXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlTmV4dGpzUG9zdERlcGxveShcbiAgICBkaXN0cmlidXRpb24/OiBJRGlzdHJpYnV0aW9uLFxuICApOiBOZXh0anNQb3N0RGVwbG95IHtcbiAgICBjb25zdCBwb3N0RGVwbG95ID0gbmV3IE5leHRqc1Bvc3REZXBsb3kodGhpcywgXCJOZXh0anNQb3N0RGVwbG95XCIsIHtcbiAgICAgIGJhc2VQYXRoOiB0aGlzLnJlc29sdmVkQmFzZVBhdGgsXG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBkaXN0cmlidXRpb24sXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBzdGF0aWNBc3NldHNLZXlQcmVmaXg6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc1Bvc3REZXBsb3lQcm9wcyxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5uZXh0anNDYWNoZS5idWNrZXREZXBsb3ltZW50KSB7XG4gICAgICBwb3N0RGVwbG95Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLm5leHRqc0NhY2hlLmJ1Y2tldERlcGxveW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcG9zdERlcGxveTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQnVpbGQoKTogTmV4dGpzQnVpbGQge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQnVpbGQodGhpcywgXCJOZXh0anNCdWlsZFwiLCB7XG4gICAgICBidWlsZENvbW1hbmQ6IHRoaXMuYmFzZVByb3BzLmJ1aWxkQ29tbWFuZCxcbiAgICAgIGJ1aWxkRGlyZWN0b3J5OiB0aGlzLmJhc2VQcm9wcy5idWlsZERpcmVjdG9yeSxcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMubmV4dGpzVHlwZSxcbiAgICAgIHNraXBCdWlsZDogdGhpcy5iYXNlUHJvcHMuc2tpcEJ1aWxkLFxuICAgICAgLy8gVGhlIGJ1aWxkIHJlc29sdmVzIHRoZSBzcGxpdCwgc2luY2Ugb25seSBpdCBrbm93cyB0aGUgcm91dGUgdGVtcGxhdGVzO1xuICAgICAgLy8gdGhlIGNvbnN0cnVjdHMgcmVhZCB0aGUgcmVzdWx0IGJhY2sgb2ZmIHRoZSBtYW5pZmVzdC5cbiAgICAgIGZ1bmN0aW9uR3JvdXBzOiB0aGlzLmZ1bmN0aW9uR3JvdXBzPy5tYXAoKHsgbmFtZSwgcm91dGVzIH0pID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgIH0pKSxcbiAgICAgIC8vIFdoYXQgdGhlIExhbWJkYXMgd2lsbCBydW4gZGVjaWRlcyB0aGUgYHNoYXJwYCBiaW5hcmllcyBzdGFnZWQgZm9yIHRoZW0uXG4gICAgICBhcmNoaXRlY3R1cmU6IHRoaXMuZnVuY3Rpb25zT3ZlcnJpZGVzPy5mdW5jdGlvblByb3BzPy5hcmNoaXRlY3R1cmUsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzQnVpbGRQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQ2FjaGUoKTogTmV4dGpzQ2FjaGUge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQ2FjaGUodGhpcywgXCJOZXh0anNDYWNoZVwiLCB7XG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5iYXNlUHJvcHMuY2FjaGVCdWNrZXQsXG4gICAgICBpbml0Q2FjaGVEaXI6IHRoaXMubmV4dGpzQnVpbGQuaW5pdENhY2hlRGlyLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXM/Lm5leHRqc0NhY2hlLFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMuYmFzZVByb3BzLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc0NhY2hlUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1N0YXRpY0Fzc2V0cygpOiBOZXh0anNTdGF0aWNBc3NldHMge1xuICAgIHJldHVybiBuZXcgTmV4dGpzU3RhdGljQXNzZXRzKHRoaXMsIFwiTmV4dGpzU3RhdGljQXNzZXRzXCIsIHtcbiAgICAgIGJ1Y2tldDogdGhpcy5iYXNlUHJvcHMuc3RhdGljQXNzZXRzQnVja2V0LFxuICAgICAgYnVpbGREaXJlY3Rvcnk6IHRoaXMuYmFzZVByb3BzLmJ1aWxkRGlyZWN0b3J5LFxuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgYmFzZVBhdGg6IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNTdGF0aWNBc3NldHMsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzU3RhdGljQXNzZXRzUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hhcmVkIGJ5IGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgIGFuZCBgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZU5leHRqc0Z1bmN0aW9ucygpOiBOZXh0anNGdW5jdGlvbnMge1xuICAgIC8vIFRoZSBnZXR0ZXIsIG5vdCBhIHBhcmFtZXRlciwgc28gdGhlIGJ1aWxkIGFuZCB0aGUgZnVuY3Rpb25zIHJlYWQgdGhlXG4gICAgLy8gc2FtZSBgYXJjaGl0ZWN0dXJlYC5cbiAgICBjb25zdCBvdmVycmlkZXMgPSB0aGlzLmZ1bmN0aW9uc092ZXJyaWRlcztcbiAgICByZXR1cm4gbmV3IE5leHRqc0Z1bmN0aW9ucyh0aGlzLCBcIk5leHRqc0Z1bmN0aW9uc1wiLCB7XG4gICAgICAuLi50aGlzLmNvbXB1dGVCYXNlUHJvcHMoKSxcbiAgICAgIGRlcGxveW1lbnRSb290czogdGhpcy5uZXh0anNCdWlsZC5kZXBsb3ltZW50Um9vdHMsXG4gICAgICBhcmNoaXRlY3R1cmU6IHRoaXMubmV4dGpzQnVpbGQuYXJjaGl0ZWN0dXJlLFxuICAgICAgZnVuY3Rpb25Hcm91cHM6IHRoaXMuZnVuY3Rpb25Hcm91cHMsXG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBmdW5jdGlvblByb3BzOiB7XG4gICAgICAgICAgLi4ub3ZlcnJpZGVzPy5mdW5jdGlvblByb3BzLFxuICAgICAgICAgIC8vIFNwcmVhZCBjb25kaXRpb25hbGx5IHJhdGhlciB0aGFuIGFzc2lnbmVkOiBhbiB1bmNvbmRpdGlvbmFsXG4gICAgICAgICAgLy8gYHZwYzogdGhpcy5iYXNlUHJvcHMudnBjYCB3cml0ZXMgYHVuZGVmaW5lZGAgb3ZlciBhblxuICAgICAgICAgIC8vIGBvdmVycmlkZXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uUHJvcHMudnBjYCB0aGUgY29uc3VtZXIgc3VwcGxpZWQsXG4gICAgICAgICAgLy8gc28gdGhlIExhbWJkYXMgZGVwbG95IG91dHNpZGUgdGhlIFZQQyBhbmQgY2Fubm90IHJlYWNoIGEgcHJpdmF0ZVxuICAgICAgICAgIC8vIFJEUywgRWxhc3RpQ2FjaGUsIG9yIFZQQyBlbmRwb2ludCAtIHdpdGggbm90aGluZyBzYWlkIGF0IHN5bnRoLlxuICAgICAgICAgIC4uLih0aGlzLmJhc2VQcm9wcy52cGMgPyB7IHZwYzogdGhpcy5iYXNlUHJvcHMudnBjIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJhc2UtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtYmFzZS1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUFvQztBQUtwQywyQ0FBdUM7QUFDdkMsNENBQXNEO0FBS3RELCtEQUEyRDtBQUMzRCxrREFBb0U7QUFFcEUseUVBSTRDO0FBQzVDLDhEQUcrQjtBQUMvQixrRUFJaUM7QUFDakMsa0RBSzRCO0FBOEg1Qjs7R0FFRztBQUNILE1BQXNCLG1CQUFvQixTQUFRLHNCQUFTOztJQUN6RCxXQUFXLENBQWM7SUFDekIsa0JBQWtCLENBQXFCO0lBQ3ZDLFdBQVcsQ0FBYztJQUlOLFVBQVUsQ0FBYTtJQUMxQyxxRUFBcUU7SUFDbEQsU0FBUyxDQUEyQjtJQUN2RCw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3RELGtCQUFrQixDQUFnQztJQUNyRTs7Ozs7T0FLRztJQUNnQixnQkFBZ0IsQ0FBVTtJQUU3QyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUErQixFQUMvQixVQUFzQjtRQUV0QixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1Qyx5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBQSwyQkFBZSxFQUNyQyxVQUFVLEVBQ1YsS0FBSyxDQUFDLFFBQVEsRUFDZCxJQUFJLENBQUMsV0FBVyxD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QyxDQUFDO0lBQ0wsQ0FBQzs7QUEvVEgsa0RBZ1VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IElUYWJsZVYyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IExPR19QUkVGSVgsIE5leHRqc1R5cGUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0J1aWxkUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNCdWlsZFByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0NhY2hlUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNDYWNoZVByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wc1wiO1xuaW1wb3J0IHsgTmV4dGpzQXBpT3ZlcnJpZGVzIH0gZnJvbSBcIi4uL25leHRqcy1hcGlcIjtcbmltcG9ydCB7IE5leHRqc0J1aWxkIH0gZnJvbSBcIi4uL25leHRqcy1idWlsZC9uZXh0anMtYnVpbGRcIjtcbmltcG9ydCB7IE5leHRqc0NhY2hlLCBOZXh0anNDYWNoZU92ZXJyaWRlcyB9IGZyb20gXCIuLi9uZXh0anMtY2FjaGVcIjtcbmltcG9ydCB7IE5leHRqc0NvbXB1dGVCYXNlUHJvcHMgfSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWNvbXB1dGUtYmFzZS1wcm9wc1wiO1xuaW1wb3J0IHtcbiAgTmV4dGpzRnVuY3Rpb25Hcm91cCxcbiAgTmV4dGpzRnVuY3Rpb25zLFxuICBOZXh0anNGdW5jdGlvbnNPdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtZnVuY3Rpb25zXCI7XG5pbXBvcnQge1xuICBOZXh0anNQb3N0RGVwbG95LFxuICBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLXBvc3QtZGVwbG95XCI7XG5pbXBvcnQge1xuICBOZXh0anNTdGF0aWNBc3NldHMsXG4gIE5leHRqc1N0YXRpY0Fzc2V0c092ZXJyaWRlcyxcbiAgTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMsXG59IGZyb20gXCIuLi9uZXh0anMtc3RhdGljLWFzc2V0c1wiO1xuaW1wb3J0IHtcbiAgQXBpR2F0ZXdheVByZWZpeCxcbiAgaXNBc3NldFByZWZpeFVuc2VydmVkLFxuICBwcmVmaXhXaXRoQmFzZVBhdGgsXG4gIHJlc29sdmVCYXNlUGF0aCxcbn0gZnJvbSBcIi4uL3V0aWxzL2Jhc2UtcGF0aFwiO1xuXG4vKipcbiAqIEJhc2Ugb3ZlcnJpZGVzIGZvciB0aGUgcHJvcHMgcGFzc2VkIHRvIGNvbnN0cnVjdHMgd2l0aGluIHJvb3QvdG9wLWxldmVsIE5leHQuanMgY29uc3RydWN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNCdWlsZFByb3BzPzogT3B0aW9uYWxOZXh0anNCdWlsZFByb3BzO1xuICByZWFkb25seSBuZXh0anNDYWNoZVByb3BzPzogT3B0aW9uYWxOZXh0anNDYWNoZVByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzU3RhdGljQXNzZXRzUHJvcHM/OiBOZXh0anNTdGF0aWNBc3NldHNQcm9wcztcbn1cblxuLyoqXG4gKiBCYXNlIG92ZXJyaWRlcyBmb3IgY29uc3RydWN0cyBzaGFyZWQgYmV0d2VlbiBhbGwgcm9vdC90b3AtbGV2ZWwgTmV4dC5qcyBjb25zdHJ1Y3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNDYWNoZT86IE5leHRqc0NhY2hlT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95PzogTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzU3RhdGljQXNzZXRzPzogTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBQcmVmaXggdG8gdGhlIFVSSSBwYXRoIHRoZSBhcHAgd2lsbCBiZSBzZXJ2ZWQgYXQuIEFsc28gbmFtZXNwYWNlcyB0aGVcbiAgICogc3RhdGljIGFzc2V0cyBpbiBTMywgc28gaXQgZG91YmxlcyBhcyBhIHdheSB0byBob3N0IG11bHRpcGxlIGFwcHMgb3JcbiAgICogYnJhbmNoZXMgb3V0IG9mIG9uZSBidWNrZXQuXG4gICAqXG4gICAqIEhvdyB0aGlzIHJlbGF0ZXMgdG8gdGhlIGBiYXNlUGF0aGAgaW4geW91ciBhcHAncyBgbmV4dC5jb25maWcuanNgIGRlcGVuZHNcbiAgICogb24gdGhlIGNvbnN0cnVjdCwgYW5kIHN5bnRoIGZhaWxzIG9uIGEgY29tYmluYXRpb24gdGhhdCBjYW4ndCBzZXJ2ZSB0aGVcbiAgICogYXBwOlxuICAgKlxuICAgKiAtIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgL2BOZXh0anNHbG9iYWxDb250YWluZXJzYDogbGVhdmUgdGhpcyB1bnNldCBhbmQgaXRcbiAgICogICBmb2xsb3dzIHlvdXIgYXBwJ3MgYGJhc2VQYXRoYCwgd2hpY2ggaXMgd2hhdCB5b3Ugd2FudCDigJQgQ2xvdWRGcm9udCBzZXJ2ZXNcbiAgICogICBzdGF0aWMgYXNzZXRzIGZyb20gUzMgdXNpbmcgdGhlIHJlcXVlc3QgcGF0aCBhcyB0aGUgb2JqZWN0IGtleSwgc28gdGhlIHR3b1xuICAgKiAgIGhhdmUgdG8gYmUgaWRlbnRpY2FsIGFuZCBhIG1pc21hdGNoIDQwNHMgYWxsIG9mIHRoZW0uIFNldHRpbmcgYSBkaWZmZXJlbnRcbiAgICogICB2YWx1ZSB0aHJvd3MuXG4gICAqIC0gYE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zYDogbGVhdmUgdGhpcyB1bnNldCBhbmQgaXQgZm9sbG93cyB5b3VyIGFwcCdzXG4gICAqICAgYGJhc2VQYXRoYCBtaW51cyB0aGUgcHJlZml4IEFQSSBHYXRld2F5IHN0cmlwcyBiZWZvcmUgbWF0Y2hpbmcgcmVzb3VyY2VzIOKAlFxuICAgKiAgIHRoZSBzdGFnZSAoYGRlcGxveU9wdGlvbnMuc3RhZ2VOYW1lYCwgZGVmYXVsdCBgcHJvZGApLCBvciB0aGUgYmFzZSBwYXRoXG4gICAqICAgbWFwcGluZyBvZiBhIGN1c3RvbSBkb21haW4gc2V0IGluIGByZXN0QXBpUHJvcHMuZG9tYWluTmFtZWAuIFNvXG4gICAqICAgYGJhc2VQYXRoOiBcIi9wcm9kXCJgIG1vdW50cyBhdCB0aGUgcm9vdCwgYFwiL3Byb2QvYmFzZVwiYCB1bmRlciBgYmFzZWAsIGFuZFxuICAgKiAgIGBcIi9kb2NzXCJgIGJlaGluZCBhIGN1c3RvbSBkb21haW4gbWFwcGVkIGF0IHRoZSByb290IHVuZGVyIGBkb2NzYC4gT24gdGhlXG4gICAqICAgZXhlY3V0ZS1hcGkgZW5kcG9pbnQgYW4gYXBwIGBiYXNlUGF0aGAgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggdGhlIHN0YWdlXG4gICAqICAgd2FybnMsIHNpbmNlIGl0cyBsaW5rcyB3aWxsIG1pc3MgdGhlIHN0YWdlLiBJZiB5b3Ugc2V0IHRoaXMsIHRoZSBhcHAnc1xuICAgKiAgIGBiYXNlUGF0aGAgbXVzdCBlbmQgd2l0aCBpdC4gQSBkb21haW4gYXR0YWNoZWQgbGF0ZXIgd2l0aFxuICAgKiAgIGBhZGREb21haW5OYW1lKClgIGlzIG5vdCBzZWVuIGF0IHN5bnRoOyBzZXQgdGhpcyBleHBsaWNpdGx5IHRoZW4g4oCUIHRvXG4gICAqICAgYFwiL1wiYCB3aGVuIHRoYXQgZG9tYWluJ3MgYmFzZSBwYXRoIG1hcHBpbmcgc3RyaXBzIHlvdXIgYXBwJ3Mgd2hvbGVcbiAgICogICBgYmFzZVBhdGhgLCB3aGljaCBtb3VudHMgZXZlcnkgcmVzb3VyY2UgYXQgdGhlIHJvb3QuXG4gICAqIC0gYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2A6IG9ubHkgbmFtZXNwYWNlcyB0aGUgUzMgYnVja2V0LiBUaGUgQUxCIHNlbmRzXG4gICAqICAgZXZlcnkgcGF0aCB0byB0aGUgY29udGFpbmVyLCB3aGljaCBzZXJ2ZXMgaXRzIG93biBzdGF0aWMgYXNzZXRzLCBzbyB0aGlzXG4gICAqICAgaXMgdW5jb25zdHJhaW5lZC5cbiAgICogQGV4YW1wbGUgXCIvbXktYmFzZS1wYXRoXCJcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBnZW5lcmF0ZSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB5b3VyIE5leHQuanMgYXBwIGluIGNvbnRhaW5lcjtcbiAgICogQGRlZmF1bHQgXCJucG0gcnVuIGJ1aWxkXCJcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQ29tbWFuZD86IHN0cmluZztcbiAgLyoqXG4gICAqIERpcmVjdG9yeSB3aGVyZSB0aGUgTmV4dC5qcyBhcHBsaWNhdGlvbiBpcyBsb2NhdGVkIGZvciBsb2NhbCBidWlsZHMuXG4gICAqIFRoaXMgc2hvdWxkIGNvbnRhaW4gdGhlIHBhY2thZ2UuanNvbiBhbmQgTmV4dC5qcyBhcHBsaWNhdGlvbiBmaWxlcy5cbiAgICogVGhpcyBpcyB3aGVyZSB7QGxpbmsgTmV4dGpzQmFzZVByb3BzLmJ1aWxkQ29tbWFuZH0gaXMgcnVuLlxuICAgKiBAZXhhbXBsZSBqb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCJ3ZWJcIikgb3IgXCIvcGF0aC90by9uZXh0anMvYXBwXCJcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkRGlyZWN0b3J5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBTMyBidWNrZXQgZm9yIGNhY2hlIHN0b3JhZ2UuIFdoZW4gcHJvdmlkZWQsIGNkay1uZXh0anNcbiAgICogd2lsbCB1c2UgdGhpcyBidWNrZXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuXG4gICAqXG4gICAqIFRoZSBidWNrZXQgbXVzdCBiZSBkZWRpY2F0ZWQgdG8gdGhpcyBvbmUgZGVwbG95bWVudC4gRG9uJ3Qgc2hhcmUgaXQgd2l0aFxuICAgKiBhbm90aGVyIGRlcGxveW1lbnQgKGFub3RoZXIgYnJhbmNoLCBzdGFnZSwgb3IgYXBwKTogZXZlcnkgZGVwbG95J3NcbiAgICogcG9zdC1kZXBsb3kgc3RlcCBkZWxldGVzIGV2ZXJ5IG9iamVjdCB1bmRlciBhIHRvcC1sZXZlbCBwcmVmaXggb3RoZXIgdGhhblxuICAgKiB0aGUgY3VycmVudCBgYnVpbGRJZC9gLCB3aGljaCBpbmNsdWRlcyBldmVyeSBvdGhlciBkZXBsb3ltZW50J3MgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBjYWNoZUJ1Y2tldD86IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBEeW5hbW9EQiB0YWJsZSBmb3IgcmV2YWxpZGF0aW9uIG1ldGFkYXRhLiBXaGVuIHByb3ZpZGVkLFxuICAgKiBjZGstbmV4dGpzIHdpbGwgdXNlIHRoaXMgdGFibGUgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuIFRoZSB0YWJsZVxuICAgKiBtdXN0IGhhdmUgYHBrYCAoU3RyaW5nKSBhcyBwYXJ0aXRpb24ga2V5IGFuZCBgc2tgIChTdHJpbmcpIGFzIHNvcnQga2V5LlxuICAgKiBFbmFibGUgVFRMIG9uIGl0cyBgdHRsYCBhdHRyaWJ1dGUgdG9vOiBlYWNoIHRhZyByZXZhbGlkYXRpb24gd3JpdGVzIGFcbiAgICogcmV2YWxpZGF0aW9uIGxvZyByb3cgdGhhdCBleHBpcmVzIHRocm91Z2ggaXQsIGFuZCB3aXRob3V0IFRUTCB0aG9zZSByb3dzXG4gICAqIGFjY3VtdWxhdGUuXG4gICAqXG4gICAqIFRoZSB0YWJsZSBtdXN0IGJlIGRlZGljYXRlZCB0byB0aGlzIG9uZSBkZXBsb3ltZW50LiBEb24ndCBzaGFyZSBpdCB3aXRoXG4gICAqIGFub3RoZXIgZGVwbG95bWVudCAoYW5vdGhlciBicmFuY2gsIHN0YWdlLCBvciBhcHApOiBldmVyeSBkZXBsb3knc1xuICAgKiBwb3N0LWRlcGxveSBzdGVwIGRlbGV0ZXMgdGhlIGVudHJpZXMgb2YgdGhlIGJ1aWxkIGl0IGxhc3QgcmVjb3JkZWQgaW4gdGhlXG4gICAqIHRhYmxlLCB3aGljaCB3aXRoIGEgc2hhcmVkIHRhYmxlIGlzIGFub3RoZXIgZGVwbG95bWVudCdzIGxpdmUgYnVpbGQuXG4gICAqL1xuICByZWFkb25seSByZXZhbGlkYXRpb25UYWJsZT86IElUYWJsZVYyO1xuICAvKipcbiAgICogU2tpcHMgcnVubmluZyBgbmV4dCBidWlsZGAuIElmIGB0cnVlYCwgeW91IGFyZSByZXNwb25zaWJsZSBmb3IgcnVubmluZ1xuICAgKiBgbmV4dCBidWlsZGAgYmVmb3JlIHRoaXMgY29uc3RydWN0IGlzIHN5bnRoZXNpemVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcEJ1aWxkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIFMzIGJ1Y2tldCBmb3Igc3RhdGljIGFzc2V0cy4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqc1xuICAgKiB3aWxsIGRlcGxveSBzdGF0aWMgYXNzZXRzIHRvIHRoaXMgYnVja2V0IGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgKlxuICAgKiBVbmxpa2UgYGNhY2hlQnVja2V0YCwgdGhpcyBvbmUgY2FuIGJlIHNoYXJlZCwgYnV0IG9ubHkgYmV0d2VlbiBkZXBsb3ltZW50c1xuICAgKiB3aXRoIGRpZmZlcmVudCBgYmFzZVBhdGhgcyAoc28gZGlmZmVyZW50IFMzIGtleSBwcmVmaXhlcykuIFBydW5pbmcgb25seVxuICAgKiB0b3VjaGVzIGA8YmFzZVBhdGg+L19uZXh0L2AsIHNvIGl0IGxlYXZlcyB0aGUgb3RoZXJzJyBhc3NldHMgYWxvbmUuIFR3b1xuICAgKiBkZXBsb3ltZW50cyB1bmRlciB0aGUgc2FtZSBwcmVmaXggb3ZlcndyaXRlIGVhY2ggb3RoZXIncyBgcHVibGljL2AgZmlsZXNcbiAgICogYW5kIHBydW5lIGVhY2ggb3RoZXIncyBgX25leHQvYCBhc3NldHMgb25jZSB0aGV5IGFyZSBwYXN0IHRoZSBwcnVuZVxuICAgKiBUVEwgKDMwIGRheXMgYnkgZGVmYXVsdCkuXG4gICAqL1xuICByZWFkb25seSBzdGF0aWNBc3NldHNCdWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gVlBDLlxuICAgKiBJZiBwcm92aWRlZCwgd2lsbCBiZSBwYXNzZWQgdmlhIG92ZXJyaWRlcyB0byB0aGUgRUNTIENsdXN0ZXIgKGZvciBjb250YWluZXItYmFzZWQgY29uc3RydWN0cylcbiAgICogb3IgdG8gdGhlIExhbWJkYSBmdW5jdGlvbiAoZm9yIGZ1bmN0aW9uLWJhc2VkIGNvbnN0cnVjdHMpLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIEVDUyBDbHVzdGVyIHdpbGwgY3JlYXRlIGEgVlBDIGF1dG9tYXRpY2FsbHkgZm9yIGNvbnRhaW5lcnMsXG4gICAqIGFuZCBMYW1iZGEgZnVuY3Rpb25zIHdpbGwgcnVuIG91dHNpZGUgYSBWUEMuXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjO1xufVxuXG4vKipcbiAqIFJlcXVpcmVkIGJlY2F1c2UgaWYgd2UgYWRkIGBvdmVycmlkZXNgIG9udG8gYE5leHRqc0Jhc2VQcm9wc2Agd2UgZ2V0IGpzaWlcbiAqIGVycm9yOiBgSW50ZXJmYWNlIC4uLiByZS1kZWNsYXJlcyBtZW1iZXIgXCJvdmVycmlkZXNcImBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0anNCYXNlQ29uc3RydWN0UHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNCYXNlT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBOZXh0LmpzIHJvb3QgY29uc3RydWN0c1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmV4dGpzQmFzZUNvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIG5leHRqc0J1aWxkOiBOZXh0anNCdWlsZDtcbiAgbmV4dGpzU3RhdGljQXNzZXRzOiBOZXh0anNTdGF0aWNBc3NldHM7XG4gIG5leHRqc0NhY2hlOiBOZXh0anNDYWNoZTtcblxuICBhYnN0cmFjdCBnZXQgdXJsKCk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmV4dGpzVHlwZTogTmV4dGpzVHlwZTtcbiAgLy8gdXNlIGJhc2VQcm9wcyBpbnN0ZWFkIG9mIHByb3BzIHNvIHRoYXQgY2hpbGQgY2xhc3NlcyBjYW4gdXNlIHByb3BzXG4gIHByb3RlY3RlZCByZWFkb25seSBiYXNlUHJvcHM6IE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcztcbiAgLy8gV2lkZXN0IHNoYXBlIG9mIHRoZSBwZXItYE5leHRqc1R5cGVgIG92ZXJyaWRlcy4gVGhlIHB1YmxpYyBpbnRlcmZhY2UgZWFjaFxuICAvLyByb290IGNvbnN0cnVjdCBhY2NlcHRzIGlzIHdoYXQgYWN0dWFsbHkgZ2F0ZXMgd2hpY2gga2V5cyBhcmUgc2V0dGFibGUuXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25zdHJ1Y3RPdmVycmlkZXM/OiBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzO1xuICAvKipcbiAgICogVGhlIGBiYXNlUGF0aGAgZXZlcnl0aGluZyBkb3duc3RyZWFtIGlzIGJ1aWx0IGZyb206IHRoZSBgYmFzZVBhdGhgIHByb3Agd2hlblxuICAgKiBzZXQsIG90aGVyd2lzZSB0aGUgYXBwJ3Mgb3duIGBiYXNlUGF0aGAgZm9yIHRoZSBgTmV4dGpzVHlwZWBzIHdoZXJlIHRoZSB0d29cbiAgICogYXJlIG5lY2Vzc2FyaWx5IHRoZSBzYW1lLiBOb3JtYWxpemVkIHRvIGEgYmFyZSBwYXRoIHNlZ21lbnQsIGB1bmRlZmluZWRgIGZvclxuICAgKiBubyBgYmFzZVBhdGhgLiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGBiYXNlUHJvcHMuYmFzZVBhdGhgLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc29sdmVkQmFzZVBhdGg/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBOZXh0anNCYXNlQ29uc3RydWN0UHJvcHMsXG4gICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZSxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmJhc2VQcm9wcyA9IHByb3BzO1xuICAgIHRoaXMubmV4dGpzVHlwZSA9IG5leHRqc1R5cGU7XG4gICAgdGhpcy5jb25zdHJ1Y3RPdmVycmlkZXMgPSB0aGlzLmdldENvbnN0cnVjdE92ZXJyaWRlcyhuZXh0anNUeXBlKTtcblxuICAgIHRoaXMubmV4dGpzQnVpbGQgPSB0aGlzLmNyZWF0ZU5leHRqc0J1aWxkKCk7XG4gICAgLy8gQSBiYXNlUGF0aCB0aGF0IGRvZXNuJ3QgbGluZSB1cCB3aXRoIHRoZSBhcHAncyBvd24gZGVwbG95cyBjbGVhbmx5IGFuZFxuICAgIC8vIHRoZW4gNDA0cyBzdGF0aWMgYXNzZXRzLCBzbyByZWNvbmNpbGUgdGhlIHR3byB1cCBmcm9udCBhbmQgZmFpbCBhdCBzeW50aFxuICAgIC8vIG9uIGEgY29tYmluYXRpb24gdGhhdCBjYW4ndCB3b3JrLlxuICAgIHRoaXMucmVzb2x2ZWRCYXNlUGF0aCA9IHJlc29sdmVCYXNlUGF0aChcbiAgICAgIG5leHRqc1R5cGUsXG4gICAgICBwcm9wcy5iYXNlUGF0aCxcbiAgICAgIHRoaXMubmV4dGpzQnVpbGQubmV4dENvbmZpZ0Jhc2VQYXRoLFxuICAgICAgdGhpcy5hcGlHYXRld2F5UHJlZml4KCksXG4gICAgKTtcbiAgICB0aGlzLm5leHRqc0NhY2hlID0gdGhpcy5jcmVhdGVOZXh0anNDYWNoZSgpO1xuICAgIHRoaXMubmV4dGpzU3RhdGljQXNzZXRzID0gdGhpcy5jcmVhdGVOZXh0anNTdGF0aWNBc3NldHMoKTtcbiAgICB0aGlzLnZhbGlkYXRlU3RhdGljQXNzZXRzS2V5UHJlZml4KCk7XG4gICAgdGhpcy53YXJuVW5zZXJ2ZWRBc3NldFByZWZpeCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhcm5zIHdoZW4gYSBwYXRoLXN0eWxlIGBhc3NldFByZWZpeGAgd291bGQgNDA0IGV2ZXJ5IGJ1bmRsZSBvbiB0aGlzXG4gICAqIGBOZXh0anNUeXBlYCDigJQgc2VlIHtAbGluayBpc0Fzc2V0UHJlZml4VW5zZXJ2ZWR9IGZvciB3aGljaCBjb21iaW5hdGlvbnMgdGhvc2VcbiAgICogYXJlIGFuZCB3aHkgYSBwcmVmaXggZXF1YWwgdG8gdGhlIGFwcCdzIGBiYXNlUGF0aGAgaXMgbm90IG9uZSBvZiB0aGVtLlxuICAgKlxuICAgKiBXYXJuIHJhdGhlciB0aGFuIHRocm93OiBpdCBpcyB0aGUgYXBwJ3MgY29uZmlnLCB0aGUgZGVwbG95bWVudCBvdGhlcndpc2VcbiAgICogd29ya3MsIGFuZCBhbiBhYnNvbHV0ZSBgYXNzZXRQcmVmaXhgIChhbHJlYWR5IHJlZHVjZWQgdG8gYFwiXCJgIGJ5XG4gICAqIGByZWxhdGl2ZUFzc2V0UHJlZml4YCkgaXMgdGhlIHN1cHBvcnRlZCB3YXkgdG8gc2VydmUgYXNzZXRzIGZyb21cbiAgICogZWxzZXdoZXJlLlxuICAgKi9cbiAgcHJpdmF0ZSB3YXJuVW5zZXJ2ZWRBc3NldFByZWZpeCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhaXNBc3NldFByZWZpeFVuc2VydmVkKFxuICAgICAgICB0aGlzLm5leHRqc1R5cGUsXG4gICAgICAgIHRoaXMubmV4dGpzQnVpbGQubmV4dENvbmZpZ0Fzc2V0UHJlZml4LFxuICAgICAgICB0aGlzLm5leHRqc0J1aWxkLm5leHRDb25maWdCYXNlUGF0aCxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCR7TE9HX1BSRUZJWH0geW91ciBOZXh0LmpzIGFwcCBzZXRzIFxcYGFzc2V0UHJlZml4OiBcIiR7dGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQXNzZXRQcmVmaXh9XCJcXGAsIGAgK1xuICAgICAgICBgd2hpY2ggTmV4dGpzVHlwZS4ke3RoaXMubmV4dGpzVHlwZX0gY2Fubm90IHNlcnZlOiB5b3VyIGJ1bmRsZXMgd2lsbCBiZSByZXF1ZXN0ZWQgYXQgYCArXG4gICAgICAgIGBcIiR7dGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQXNzZXRQcmVmaXh9L19uZXh0L3N0YXRpYy8uLi5cIiBhbmQgbm90aGluZyBhbnN3ZXJzIHRoZXJlLCBzbyB0aGV5IHdpbGwgNDA0LiBgICtcbiAgICAgICAgXCJEcm9wIGBhc3NldFByZWZpeGAsIHVzZSBhbiBhYnNvbHV0ZSBvbmUgcG9pbnRpbmcgYXQgYSBDRE4geW91IGZyb250IHRoZSBhc3NldHMgYnVja2V0IHdpdGgsIFwiICtcbiAgICAgICAgXCJvciBkZXBsb3kgd2l0aCBOZXh0anNHbG9iYWxGdW5jdGlvbnMvTmV4dGpzR2xvYmFsQ29udGFpbmVycy5cIixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciB0aGUgR2xvYmFsIGBOZXh0anNUeXBlYHMgdGhlIGtleSBwcmVmaXggaXNuJ3QgYSBmcmVlIGNob2ljZTogaXQgaGFzIHRvIGJlXG4gICAqIGBiYXNlUGF0aGAgKHNlZSBgcmVzb2x2ZUJhc2VQYXRoYCkuIEEgYGRlc3RpbmF0aW9uS2V5UHJlZml4YCBvdmVycmlkZSB0aGF0XG4gICAqIG1vdmVzIHRoZSBvYmplY3RzIGVsc2V3aGVyZSBoYXMgbm8gd2F5IHRvIHRlbGwgdGhlIGRpc3RyaWJ1dGlvbiBhYm91dCBpdCDigJRcbiAgICogdW5saWtlIHRoZSBmdW5jdGlvbnMnIGltYWdlIG9wdGltaXplciBhbmQgYE5leHRqc0FwaWAsIHdoaWNoIHJlYWRcbiAgICogYE5leHRqc1N0YXRpY0Fzc2V0cy5rZXlQcmVmaXhgIOKAlCBzbyBmYWlsIGF0IHN5bnRoIHJhdGhlciB0aGFuIDQwNCBldmVyeVxuICAgKiBzdGF0aWMgcmVxdWVzdC5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTdGF0aWNBc3NldHNLZXlQcmVmaXgoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5uZXh0anNUeXBlICE9PSBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMgJiZcbiAgICAgIHRoaXMubmV4dGpzVHlwZSAhPT0gTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSU1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCA/PyBcIlwiO1xuICAgIGNvbnN0IGFjdHVhbCA9IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeDtcbiAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtMT0dfUFJFRklYfSBzdGF0aWMgYXNzZXRzIGtleSBwcmVmaXggbWlzbWF0Y2ggZm9yIE5leHRqc1R5cGUuJHt0aGlzLm5leHRqc1R5cGV9OiBgICtcbiAgICAgICAgICBgdGhlIGFzc2V0cyBhcmUgdXBsb2FkZWQgdW5kZXIgJHthY3R1YWwgPyBgXCIke2FjdHVhbH1cImAgOiBcInRoZSBidWNrZXQgcm9vdFwifSBgICtcbiAgICAgICAgICBgYnV0IENsb3VkRnJvbnQgd2lsbCByZXF1ZXN0IHRoZW0gdW5kZXIgJHtleHBlY3RlZCA/IGBcIiR7ZXhwZWN0ZWR9XCJgIDogXCJ0aGUgYnVja2V0IHJvb3RcIn0sIGAgK1xuICAgICAgICAgIFwidXNpbmcgdGhlIHJlcXVlc3QgcGF0aCBhcyB0aGUgUzMgb2JqZWN0IGtleSwgc28gZXZlcnkgYF9uZXh0L3N0YXRpY2AgYW5kIGBwdWJsaWMvYCByZXF1ZXN0IHdvdWxkIDQwNC4gXCIgK1xuICAgICAgICAgIFwiRHJvcCB0aGUgYGRlc3RpbmF0aW9uS2V5UHJlZml4YCBvdmVycmlkZSwgb3Igc2V0IGl0IHRvIHRoZSBzYW1lIHZhbHVlIGFzIGBiYXNlUGF0aGAuIFwiICtcbiAgICAgICAgICBcIlRvIG5hbWVzcGFjZSBhIHNoYXJlZCBidWNrZXQsIHVzZSBgYmFzZVBhdGhgIOKAlCBpdCBwcmVmaXhlcyB0aGUga2V5cyBhbmQgdGhlIFVSTHMgdG9nZXRoZXIuXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IEFQSSBHYXRld2F5IHdpbGwgc3RyaXAsIHJlYWQgZnJvbSB0aGUgc2FtZSBgcmVzdEFwaVByb3BzYFxuICAgKiBvdmVycmlkZSBgTmV4dGpzQXBpYCBidWlsZHMgaXRzIGBSZXN0QXBpYCBmcm9tLiBPbmx5IG1lYW5pbmdmdWwgZm9yXG4gICAqIGBSRUdJT05BTF9GVU5DVElPTlNgLCBhbmQgcmVhZCBiZWZvcmUgYE5leHRqc0FwaWAgZXhpc3RzIGJlY2F1c2UgdGhlXG4gICAqIHJlc29sdmVkIGBiYXNlUGF0aGAgYWxzbyBkZWNpZGVzIHRoZSBzdGF0aWMgYXNzZXRzJyBTMyBrZXkgcHJlZml4LlxuICAgKlxuICAgKiBBIGRvbWFpbiBhdHRhY2hlZCBsYXRlciB3aXRoIGBhcGkuYWRkRG9tYWluTmFtZSgpYCBpcyBpbnZpc2libGUgaGVyZSwgdGhlXG4gICAqIHNhbWUgbGltaXRhdGlvbiBgTmV4dGpzQXBpLnVybGAgZG9jdW1lbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBhcGlHYXRld2F5UHJlZml4KCk6IEFwaUdhdGV3YXlQcmVmaXgge1xuICAgIC8vIGBvdmVycmlkZXMubmV4dGpzQXBpYCBpcyB0aGUgb25seSB0eXBlZCB3YXkgdG8gcmVhY2ggdGhlIGBSZXN0QXBpYCdzXG4gICAgLy8gcHJvcHM6IGBuZXh0anNSZWdpb25hbEZ1bmN0aW9ucy5uZXh0anNBcGlQcm9wc2AgaXNcbiAgICAvLyBgT3B0aW9uYWxOZXh0anNBcGlQcm9wc2AsIHdoaWNoIGhhcyBubyBgb3ZlcnJpZGVzYC5cbiAgICBjb25zdCBhcGlPdmVycmlkZXMgPSAoXG4gICAgICB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXMgYXMgeyBuZXh0anNBcGk/OiBOZXh0anNBcGlPdmVycmlkZXMgfSB8IHVuZGVmaW5lZFxuICAgICk/Lm5leHRqc0FwaTtcbiAgICBjb25zdCByZXN0QXBpUHJvcHMgPSBhcGlPdmVycmlkZXM/LnJlc3RBcGlQcm9wcztcbiAgICBjb25zdCBkb21haW5OYW1lID0gcmVzdEFwaVByb3BzPy5kb21haW5OYW1lO1xuICAgIGNvbnN0IHN0cmlwcGVkUHJlZml4ID0gZG9tYWluTmFtZVxuICAgICAgPyAoZG9tYWluTmFtZS5iYXNlUGF0aCA/PyBcIlwiKVxuICAgICAgOiAocmVzdEFwaVByb3BzPy5kZXBsb3lPcHRpb25zPy5zdGFnZU5hbWUgPz8gXCJwcm9kXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBzdHJpcHBlZFByZWZpeDogVG9rZW4uaXNVbnJlc29sdmVkKHN0cmlwcGVkUHJlZml4KVxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHN0cmlwcGVkUHJlZml4LFxuICAgICAgY3VzdG9tRG9tYWluOiBkb21haW5OYW1lICE9PSB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBjb25zdHJ1Y3Qgb3ZlcnJpZGVzIChpZiBwcmVzZW50KSBvbiBwcm9wcyBmb3IgYW55IGBOZXh0anNUeXBlYFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb25zdHJ1Y3RPdmVycmlkZXMobmV4dGpzVHlwZTogTmV4dGpzVHlwZSkge1xuICAgIGNvbnN0IG5leHRqc1R5cGVUb0tleTogUmVjb3JkPE5leHRqc1R5cGUsIHN0cmluZz4gPSB7XG4gICAgICBbTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSU106IFwibmV4dGpzR2xvYmFsQ29udGFpbmVyc1wiLFxuICAgICAgW05leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OU106IFwibmV4dGpzR2xvYmFsRnVuY3Rpb25zXCIsXG4gICAgICBbTmV4dGpzVHlwZS5SRUdJT05BTF9DT05UQUlORVJTXTogXCJuZXh0anNSZWdpb25hbENvbnRhaW5lcnNcIixcbiAgICAgIFtOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OU106IFwibmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNcIixcbiAgICB9O1xuICAgIGNvbnN0IGtleSA9IG5leHRqc1R5cGVUb0tleVtuZXh0anNUeXBlXTtcbiAgICBjb25zdCBvdmVycmlkZXMgPSB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXMgYXNcbiAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChvdmVycmlkZXMgJiYga2V5IGluIG92ZXJyaWRlcykge1xuICAgICAgcmV0dXJuIG92ZXJyaWRlc1trZXldIGFzIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXM7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBgb3ZlcnJpZGVzLm5leHRqc0Z1bmN0aW9uc2AsIHdoaWNoIG9ubHkgdGhlIHR3byBGdW5jdGlvbnMgcm9vdCBjb25zdHJ1Y3RzXG4gICAqIGRlY2xhcmUuIENhc3QgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyB7QGxpbmsgZnVuY3Rpb25Hcm91cHN9LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgZnVuY3Rpb25zT3ZlcnJpZGVzKCk6IE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzIGFzXG4gICAgICB7IG5leHRqc0Z1bmN0aW9ucz86IE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyB9IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBvdmVycmlkZXM/Lm5leHRqc0Z1bmN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBgZnVuY3Rpb25Hcm91cHNgLCB3aGljaCBvbmx5IHRoZSB0d28gRnVuY3Rpb25zIHJvb3QgY29uc3RydWN0cyBhY2NlcHQg4oCUXG4gICAqIENvbnRhaW5lcnMgZGVwbG95IG9uZSB0YXNrIGRlZmluaXRpb24gYW5kIGhhdmUgbm8gMjUwIE1CIHBhY2thZ2UgbGltaXQgdG9cbiAgICogc3BsaXQgYXJvdW5kLlxuICAgKlxuICAgKiBSZWFkIG9mZiBgYmFzZVByb3BzYCB3aXRoIGEgY2FzdCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzXG4gICAqIHtAbGluayBnZXRDb25zdHJ1Y3RPdmVycmlkZXN9OiBgY3JlYXRlTmV4dGpzQnVpbGRgIGFuZFxuICAgKiBgY3JlYXRlTmV4dGpzRnVuY3Rpb25zYCBhcmUgc2hhcmVkIGhlcmUsIGJ1dCB0aGUgcHJvcCBpcyBkZWNsYXJlZCBvbiB0aGVcbiAgICogc3ViY2xhc3Nlcywgc28gbm90aGluZyB3ZWFrZXIgdGhhbiBhIGNhc3QgY2FuIHNlZSBpdC4gQWRkaW5nIGl0IHRvXG4gICAqIGBOZXh0anNCYXNlUHJvcHNgIHdvdWxkIG9mZmVyIGl0IHRvIENvbnRhaW5lcnMsIHdoZXJlIGl0IGRvZXMgbm90aGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZnVuY3Rpb25Hcm91cHMoKTogTmV4dGpzRnVuY3Rpb25Hcm91cFtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuYmFzZVByb3BzIGFzIHsgZnVuY3Rpb25Hcm91cHM/OiBOZXh0anNGdW5jdGlvbkdyb3VwW10gfTtcbiAgICByZXR1cm4gcHJvcHMuZnVuY3Rpb25Hcm91cHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGhlYWx0aCBjaGVjayBwYXRoIGFzIHRoZSBydW5uaW5nIGFwcCBhY3R1YWxseSBzZXJ2ZXMgaXQuXG4gICAqXG4gICAqIEJvdGggY29uc3VtZXJzIG9mIHRoaXMgaGl0IHRoZSBhcHAgZGlyZWN0bHkg4oCUIHRoZSBBTEIgdGFyZ2V0IGdyb3VwIGZvcndhcmRzXG4gICAqIHRoZSBwYXRoIHRvIHRoZSBjb250YWluZXIgdW5jaGFuZ2VkLCBhbmQgdGhlIGNvbnRhaW5lcidzIGB3Z2V0YCBwcm9iZSB0YXJnZXRzXG4gICAqIHRoZSBsb2NhbCBzZXJ2ZXIg4oCUIHNvIHRoZSBwcmVmaXggdGhhdCBtYXR0ZXJzIGlzIHRoZSBhcHAncyBvd24gYGJhc2VQYXRoYCxcbiAgICogbm90IGByZXNvbHZlZEJhc2VQYXRoYCAod2hpY2ggZm9yIGBSRUdJT05BTF9DT05UQUlORVJTYCBpcyBvbmx5IGFuIFMzXG4gICAqIG5hbWVzcGFjZSkuIExlZnQgdW5wcmVmaXhlZCwgYW4gYXBwIHdpdGggYSBgYmFzZVBhdGhgIDQwNHMgZXZlcnkgaGVhbHRoXG4gICAqIGNoZWNrLCBzbyB0aGUgdGFyZ2V0IG5ldmVyIHR1cm5zIGhlYWx0aHkgYW5kIHRoZSBkZXBsb3ltZW50IHJvbGxzIGJhY2suXG4gICAqIGBoZWFsdGhDaGVja1BhdGhgIGlzIHRoZXJlZm9yZSB0aGUgcGF0aCBhcyB0aGUgYXBwIHJvdXRlcyBpdCwgd2l0aG91dFxuICAgKiBgYmFzZVBhdGhgOyBvbmUgdGhhdCBjYXJyaWVzIHRoZSBwcmVmaXggYWxyZWFkeSBnZXRzIGl0IHR3aWNlLCB3aGljaCBpcyB0aGVcbiAgICogMC42LjIgYnJlYWtpbmcgY2hhbmdlIGZvciBhbnlvbmUgd2hvIHByZWZpeGVkIGJ5IGhhbmQgdG8gd29yayBhcm91bmQgdGhpcy5cbiAgICpcbiAgICogVGFrZXMgdGhlIHBhdGggYXMgYW4gYXJndW1lbnQgcmF0aGVyIHRoYW4gcmVhZGluZyBpdCBvZmYgYGJhc2VQcm9wc2A6IG9ubHlcbiAgICogdGhlIHR3byBDb250YWluZXJzIHJvb3QgY29uc3RydWN0cyBkZWNsYXJlIGBoZWFsdGhDaGVja1BhdGhgLCBzaW5jZSB0aGV5J3JlXG4gICAqIHRoZSBvbmx5IG9uZXMgd2l0aCBzb21ldGhpbmcgdG8gaGVhbHRoLWNoZWNrLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVkSGVhbHRoQ2hlY2tQYXRoKGhlYWx0aENoZWNrUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcHJlZml4V2l0aEJhc2VQYXRoKFxuICAgICAgdGhpcy5uZXh0anNCdWlsZC5uZXh0Q29uZmlnQmFzZVBhdGgsXG4gICAgICBoZWFsdGhDaGVja1BhdGgsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29tcHV0ZSBiYXNlIHByb3BzIGZvciBib3RoIExhbWJkYSBmdW5jdGlvbnMgYW5kIGNvbnRhaW5lcnNcbiAgICovXG4gIHByb3RlY3RlZCBjb21wdXRlQmFzZVByb3BzKCk6IE5leHRqc0NvbXB1dGVCYXNlUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBzdGF0aWNBc3NldHNLZXlQcmVmaXg6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYWZ0ZXIgdGhlIGluaXQgY2FjaGUgYW5kIHN0YXRpYyBhc3NldCB1cGxvYWRzOiBpbnZhbGlkYXRpbmcgdGhlIENETlxuICAgKiBiZWZvcmUgdGhlIG5ldyBmaWxlcyBhcmUgaW4gcGxhY2Ugd291bGQgb25seSByZS1jYWNoZSB0aGUgcmVzcG9uc2VzIHRoZVxuICAgKiBpbnZhbGlkYXRpb24gd2FzIG1lYW50IHRvIGRyb3AsIGFuZCBwcnVuaW5nIGJlZm9yZSB0aGVtIGNvdWxkIGRlbGV0ZSBhblxuICAgKiBvYmplY3QgdGhlIHVwbG9hZCBpcyBhYm91dCB0byByZS10YWcgd2l0aCB0aGlzIGJ1aWxkJ3MgSUQuIENsb3VkRm9ybWF0aW9uXG4gICAqIGluZmVycyBubyBvcmRlcmluZyBiZXR3ZWVuIHRoZXNlIGN1c3RvbSByZXNvdXJjZXMgb24gaXRzIG93bi5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVOZXh0anNQb3N0RGVwbG95KFxuICAgIGRpc3RyaWJ1dGlvbj86IElEaXN0cmlidXRpb24sXG4gICk6IE5leHRqc1Bvc3REZXBsb3kge1xuICAgIGNvbnN0IHBvc3REZXBsb3kgPSBuZXcgTmV4dGpzUG9zdERlcGxveSh0aGlzLCBcIk5leHRqc1Bvc3REZXBsb3lcIiwge1xuICAgICAgYmFzZVBhdGg6IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCxcbiAgICAgIGJ1aWxkSWQ6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJZCxcbiAgICAgIGRpc3RyaWJ1dGlvbixcbiAgICAgIGNhY2hlQnVja2V0OiB0aGlzLm5leHRqc0NhY2hlLmNhY2hlQnVja2V0LFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMubmV4dGpzQ2FjaGUucmV2YWxpZGF0aW9uVGFibGUsXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIHN0YXRpY0Fzc2V0c0tleVByZWZpeDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4LFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXM/Lm5leHRqc1Bvc3REZXBsb3ksXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzUG9zdERlcGxveVByb3BzLFxuICAgIH0pO1xuICAgIGNvbnN0IHsgc3RhdGljRGVwbG95bWVudCwgc2VydmljZVdvcmtlckRlcGxveW1lbnQsIHB1YmxpY0RlcGxveW1lbnQgfSA9XG4gICAgICB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cztcbiAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiBbXG4gICAgICB0aGlzLm5leHRqc0NhY2hlLmJ1Y2tldERlcGxveW1lbnQsXG4gICAgICBzdGF0aWNEZXBsb3ltZW50LFxuICAgICAgc2VydmljZVdvcmtlckRlcGxveW1lbnQsXG4gICAgICBwdWJsaWNEZXBsb3ltZW50LFxuICAgIF0pIHtcbiAgICAgIGlmICh1cGxvYWQpIHtcbiAgICAgICAgcG9zdERlcGxveS5ub2RlLmFkZERlcGVuZGVuY3kodXBsb2FkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBvc3REZXBsb3k7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0J1aWxkKCk6IE5leHRqc0J1aWxkIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0J1aWxkKHRoaXMsIFwiTmV4dGpzQnVpbGRcIiwge1xuICAgICAgYnVpbGRDb21tYW5kOiB0aGlzLmJhc2VQcm9wcy5idWlsZENvbW1hbmQsXG4gICAgICBidWlsZERpcmVjdG9yeTogdGhpcy5iYXNlUHJvcHMuYnVpbGREaXJlY3RvcnksXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICBza2lwQnVpbGQ6IHRoaXMuYmFzZVByb3BzLnNraXBCdWlsZCxcbiAgICAgIC8vIFRoZSBidWlsZCByZXNvbHZlcyB0aGUgc3BsaXQsIHNpbmNlIG9ubHkgaXQga25vd3MgdGhlIHJvdXRlIHRlbXBsYXRlcztcbiAgICAgIC8vIHRoZSBjb25zdHJ1Y3RzIHJlYWQgdGhlIHJlc3VsdCBiYWNrIG9mZiB0aGUgbWFuaWZlc3QuXG4gICAgICBmdW5jdGlvbkdyb3VwczogdGhpcy5mdW5jdGlvbkdyb3Vwcz8ubWFwKCh7IG5hbWUsIHJvdXRlcyB9KSA9PiAoe1xuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICB9KSksXG4gICAgICAvLyBXaGF0IHRoZSBMYW1iZGFzIHdpbGwgcnVuIGRlY2lkZXMgdGhlIGBzaGFycGAgYmluYXJpZXMgc3RhZ2VkIGZvciB0aGVtLlxuICAgICAgYXJjaGl0ZWN0dXJlOiB0aGlzLmZ1bmN0aW9uc092ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcz8uYXJjaGl0ZWN0dXJlLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc0J1aWxkUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0NhY2hlKCk6IE5leHRqc0NhY2hlIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0NhY2hlKHRoaXMsIFwiTmV4dGpzQ2FjaGVcIiwge1xuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgY2FjaGVCdWNrZXQ6IHRoaXMuYmFzZVByb3BzLmNhY2hlQnVja2V0LFxuICAgICAgaW5pdENhY2hlRGlyOiB0aGlzLm5leHRqc0J1aWxkLmluaXRDYWNoZURpcixcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNDYWNoZSxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLmJhc2VQcm9wcy5yZXZhbGlkYXRpb25UYWJsZSxcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0T3ZlcnJpZGVzPy5uZXh0anNDYWNoZVByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNTdGF0aWNBc3NldHMoKTogTmV4dGpzU3RhdGljQXNzZXRzIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1N0YXRpY0Fzc2V0cyh0aGlzLCBcIk5leHRqc1N0YXRpY0Fzc2V0c1wiLCB7XG4gICAgICBidWNrZXQ6IHRoaXMuYmFzZVByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldCxcbiAgICAgIGJ1aWxkRGlyZWN0b3J5OiB0aGlzLmJhc2VQcm9wcy5idWlsZERpcmVjdG9yeSxcbiAgICAgIGJ1aWxkSWQ6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJZCxcbiAgICAgIGJhc2VQYXRoOiB0aGlzLnJlc29sdmVkQmFzZVBhdGgsXG4gICAgICBvdmVycmlkZXM6IHRoaXMuYmFzZVByb3BzLm92ZXJyaWRlcz8ubmV4dGpzU3RhdGljQXNzZXRzLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoYXJlZCBieSBgTmV4dGpzR2xvYmFsRnVuY3Rpb25zYCBhbmQgYE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zYC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVOZXh0anNGdW5jdGlvbnMoKTogTmV4dGpzRnVuY3Rpb25zIHtcbiAgICAvLyBUaGUgZ2V0dGVyLCBub3QgYSBwYXJhbWV0ZXIsIHNvIHRoZSBidWlsZCBhbmQgdGhlIGZ1bmN0aW9ucyByZWFkIHRoZVxuICAgIC8vIHNhbWUgYGFyY2hpdGVjdHVyZWAuXG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gdGhpcy5mdW5jdGlvbnNPdmVycmlkZXM7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNGdW5jdGlvbnModGhpcywgXCJOZXh0anNGdW5jdGlvbnNcIiwge1xuICAgICAgLi4udGhpcy5jb21wdXRlQmFzZVByb3BzKCksXG4gICAgICBkZXBsb3ltZW50Um9vdHM6IHRoaXMubmV4dGpzQnVpbGQuZGVwbG95bWVudFJvb3RzLFxuICAgICAgYXJjaGl0ZWN0dXJlOiB0aGlzLm5leHRqc0J1aWxkLmFyY2hpdGVjdHVyZSxcbiAgICAgIGZ1bmN0aW9uR3JvdXBzOiB0aGlzLmZ1bmN0aW9uR3JvdXBzLFxuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgZnVuY3Rpb25Qcm9wczoge1xuICAgICAgICAgIC4uLm92ZXJyaWRlcz8uZnVuY3Rpb25Qcm9wcyxcbiAgICAgICAgICAvLyBTcHJlYWQgY29uZGl0aW9uYWxseSByYXRoZXIgdGhhbiBhc3NpZ25lZDogYW4gdW5jb25kaXRpb25hbFxuICAgICAgICAgIC8vIGB2cGM6IHRoaXMuYmFzZVByb3BzLnZwY2Agd3JpdGVzIGB1bmRlZmluZWRgIG92ZXIgYW5cbiAgICAgICAgICAvLyBgb3ZlcnJpZGVzLm5leHRqc0Z1bmN0aW9ucy5mdW5jdGlvblByb3BzLnZwY2AgdGhlIGNvbnN1bWVyIHN1cHBsaWVkLFxuICAgICAgICAgIC8vIHNvIHRoZSBMYW1iZGFzIGRlcGxveSBvdXRzaWRlIHRoZSBWUEMgYW5kIGNhbm5vdCByZWFjaCBhIHByaXZhdGVcbiAgICAgICAgICAvLyBSRFMsIEVsYXN0aUNhY2hlLCBvciBWUEMgZW5kcG9pbnQgLSB3aXRoIG5vdGhpbmcgc2FpZCBhdCBzeW50aC5cbiAgICAgICAgICAuLi4odGhpcy5iYXNlUHJvcHMudnBjID8geyB2cGM6IHRoaXMuYmFzZVByb3BzLnZwYyB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -14,7 +14,7 @@ const base_path_1 = require("../utils/base-path");
14
14
  * for containers.
15
15
  */
16
16
  class NextjsGlobalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
17
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.7.11" };
17
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.7.12" };
18
18
  nextjsContainers;
19
19
  nextjsDistribution;
20
20
  nextjsPostDeploy;
@@ -17,7 +17,7 @@ const base_path_1 = require("../utils/base-path");
17
17
  * for functions.
18
18
  */
19
19
  class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.7.11" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.7.12" };
21
21
  nextjsFunctions;
22
22
  nextjsDistribution;
23
23
  nextjsPostDeploy;
@@ -13,7 +13,7 @@ const base_path_1 = require("../utils/base-path");
13
13
  * for containers.
14
14
  */
15
15
  class NextjsRegionalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.7.11" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.7.12" };
17
17
  nextjsContainers;
18
18
  nextjsPostDeploy;
19
19
  /**
@@ -11,7 +11,7 @@ const nextjs_base_construct_1 = require("./nextjs-base-construct");
11
11
  * for routing requests and AWS Lambda Functions for server-side rendering.
12
12
  */
13
13
  class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.7.11" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.7.12" };
15
15
  nextjsFunctions;
16
16
  nextjsApi;
17
17
  nextjsPostDeploy;
@@ -49,6 +49,7 @@ export interface S3AssetLocation {
49
49
  export declare function fetchFromS3(s3: S3Client, bucket: string, url: string, location: S3AssetLocation, maximumBody: number): Promise<{
50
50
  buffer: Buffer;
51
51
  contentType: string | null;
52
+ cacheControl: string | null;
52
53
  etag: string;
53
54
  }>;
54
55
  /** A source over `images.maximumResponseBody`; see {@link fetchFromS3}. */
@@ -86,6 +86,7 @@ async function fetchFromS3(s3, bucket, url, location, maximumBody) {
86
86
  return {
87
87
  buffer: Buffer.concat(chunks),
88
88
  contentType: response.ContentType || null,
89
+ cacheControl: response.CacheControl || null,
89
90
  etag: response.ETag || "",
90
91
  };
91
92
  }
@@ -141,4 +142,4 @@ function resolveErrorResponse(error, ImageError) {
141
142
  }
142
143
  return { statusCode: 500, message: "Internal Server Error" };
143
144
  }
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4REEsa0NBMkRDO0FBOEJELGtDQVFDO0FBWUQsb0RBaUJDO0FBNUxELHNEQUFzRDtBQUN0RDs7Ozs7Ozs7R0FRRztBQUNILDZDQUF5QztBQUN6QyxrREFBZ0U7QUFDaEUsaUNBQXVEO0FBMEJ2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSSxLQUFLLFVBQVUsV0FBVyxDQUMvQixFQUFZLEVBQ1osTUFBYyxFQUNkLEdBQVcsRUFDWCxRQUF5QixFQUN6QixXQUFtQjtJQUVuQixNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUM1Qyx5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDckUsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBaUIsRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCw2RUFBNkU7SUFDN0UsK0JBQStCO0lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUEsaUJBQVUsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENB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QUEyQjtJQUszQixJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxLQUFLLFlBQVksa0JBQWtCLEVBQUUsQ0FBQztRQUN4QyxPQUFPO1lBQ0wsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsMkRBQTJEO1NBQ3JFLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyoqXG4gKiBTMyBmZXRjaGluZyBhbmQgZXJyb3IgbWFwcGluZyBmb3IgYC9fbmV4dC9pbWFnZWAsIHNwbGl0IG91dCBmcm9tXG4gKiB7QGxpbmsgLi9pbWFnZS50c30gc28gaXQgaXMgdW5pdC10ZXN0YWJsZSB3aXRob3V0IGBuZXh0YCBwcmVzZW50LlxuICpcbiAqIFRoZSBvbmUgdmFsdWUgZnJvbSBgbmV4dGAgdGhhdCB0aGlzIGZpbGUgbmVlZHMgaXMgcGFzc2VkIGluIHJhdGhlciB0aGFuXG4gKiBpbXBvcnRlZDogYG5leHRgIGlzIGV4dGVybmFsIHRvIHRoZSBzaGVsbCBidW5kbGVzLCBzbyBhIHN0YXRpYyBgaW1wb3J0YCBoZXJlXG4gKiB3b3VsZCBiZSBob2lzdGVkIGludG8gdGhlIGJ1bmRsZSB3aGVyZSBpdCBjYW5ub3QgcmVzb2x2ZS4gYGltYWdlLnRzYCByZXF1aXJlc1xuICogaXQgdGhyb3VnaCBgLi9uZXh0LW1vZHVsZXNgIGluc3RlYWQuXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IEdldE9iamVjdENvbW1hbmQsIFMzQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IHsgc2FmZURlY29kZSwgd2l0aG91dFBhdGhQcmVmaXggfSBmcm9tIFwiLi91dGlsXCI7XG5cbi8qKiBXaGVyZSB0aGUgYXBwIGlzIHNlcnZlZCB2ZXJzdXMgd2hlcmUgaXRzIGFzc2V0cyB3ZXJlIHVwbG9hZGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0Fzc2V0TG9jYXRpb24ge1xuICAvKipcbiAgICogVGhlIGFwcCdzIG93biBgYmFzZVBhdGhgIOKAlCB0aGUgcHJlZml4IG9mIHRoZSAqVVJMKiBpdCBpcyBzZXJ2ZWQgYXQuIE9ubHlcbiAgICogc3RyaXBwZWQgZnJvbSB0aGUgaHJlZiwgbmV2ZXIgdXNlZCB0byBidWlsZCBhIGtleTogb24gdGhlIEFQSSBHYXRld2F5XG4gICAqIGRlcGxveW1lbnQgdHlwZXMgdGhpcyBpcyB0aGUgc3RhZ2UgbmFtZSwgd2hpY2ggbmV2ZXIgYXBwZWFycyBpbiBTMy5cbiAgICovXG4gIHJlYWRvbmx5IHVybEJhc2VQYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGA6IHRoZSBTMyBrZXkgcHJlZml4IHRoZSBhc3NldHMgd2VyZSB1cGxvYWRlZFxuICAgKiB1bmRlciwgd2l0aG91dCBhIGxlYWRpbmcgc2xhc2guIEVtcHR5IGZvciBhIGJ1Y2tldC1yb290IGRlcGxveW1lbnQuXG4gICAqL1xuICByZWFkb25seSBrZXlQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBhcHAncyBgYXNzZXRQcmVmaXhgLCB3aGVuIGl0IGlzIGEgcGF0aCAoYC9jZG5gKS4gTmV4dC5qcyBwdXRzIGl0IGluXG4gICAqIGZyb250IG9mIGAvX25leHQvYCBpbiBwbGFjZSBvZiBgYmFzZVBhdGhgLCBzbyBhIHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2Unc1xuICAgKiBocmVmIGlzIGAvY2RuL19uZXh0L3N0YXRpYy9tZWRpYS/igKZgLCBhbmQgYG5leHQgc3RhcnRgIHN0cmlwcyBpdCBhZ2FpbiB3aGVuXG4gICAqIGl0IHNlcnZlcyB0aGUgZmlsZS4gQW4gYWJzb2x1dGUgYGFzc2V0UHJlZml4YCBtYWtlcyB0aGUgaHJlZiBhYnNvbHV0ZSwgd2hpY2hcbiAgICogbmV2ZXIgcmVhY2hlcyBoZXJlLlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0UHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYSBub24tYWJzb2x1dGUgKGxvY2FsKSBpbWFnZSByZWZlcmVuY2VkIGJ5IGFuIGA8SW1hZ2U+YCBmcm9tIFMzLlxuICpcbiAqIGB1cmxgIGlzIGluY29uc2lzdGVudCBhYm91dCB0aGUgYXBwJ3MgYGJhc2VQYXRoYDogbmV4dC1pbWFnZS1sb2FkZXIgYmFrZXMgaXRcbiAqIGludG8gdGhlIGhyZWYgZm9yIHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2VzLCB3aGlsZSBwbGFpbiBzdHJpbmcgcGF0aHMgYXJlXG4gKiBwYXNzZWQgdGhyb3VnaCBhcyBsaXRlcmFsbHkgd3JpdHRlbiBieSB0aGUgYXBwLiBTbyBpdCBpcyBzdHJpcHBlZCB3aGVuIHByZXNlbnQsXG4gKiBsZWF2aW5nIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgYXNzZXQgcm9vdCwgYW5kIHRoZSBidWNrZXQncyBvd24ga2V5IHByZWZpeCBpc1xuICogYXBwbGllZCB0byB0aGF0LiBEZXJpdmluZyB0aGUga2V5IGZyb20gYGJhc2VQYXRoYCBpbnN0ZWFkIGlzIHdyb25nIHdoZW5ldmVyIHRoZVxuICogdHdvIGRpZmZlciwgd2hpY2ggdGhleSBkbyBmb3IgZXZlcnkgQVBJIEdhdGV3YXkgZGVwbG95bWVudC5cbiAqXG4gKiBUaGUga2V5IGlzIHBlcmNlbnQtZGVjb2RlZCwgYmVjYXVzZSBhbiBTMyBrZXkgaXMgdGhlIGZpbGUncyByZWFsIG5hbWUgd2hpbGVcbiAqIGB1cmxgIGlzIGEgVVJMIHBhdGguIGBwdWJsaWMvaGVsbG8gd29ybGQuanBnYCBhcnJpdmVzIGhlcmUgYXNcbiAqIGAvaGVsbG8lMjB3b3JsZC5qcGdgIOKAlCB0aGUgYHVybGAgcXVlcnkgdmFsdWUgaXMgZG91YmxlLWVuY29kZWQsIHNvIGRlY29kaW5nIHRoZVxuICogcXVlcnkgc3RyaW5nIGxlYXZlcyBvbmUgbGF5ZXIg4oCUIGFuZCBpdHMgb2JqZWN0IGtleSBpcyBgaGVsbG8gd29ybGQuanBnYC5cbiAqIE5leHQuanMncyBvd24gYGZldGNoSW50ZXJuYWxJbWFnZWAgZ2V0cyB0aGUgZGVjb2RlIGZvciBmcmVlLCBzaW5jZSBpdCBtYWtlcyBhblxuICogSFRUUCBzdWJyZXF1ZXN0IGFuZCBpdHMgc3RhdGljIGZpbGUgc2VydmVyIHJlc29sdmVzIHRoZSBwYXRoIGFnYWluc3QgdGhlXG4gKiBmaWxlc3lzdGVtOyBza2lwcGluZyBpdCBoZXJlIDQwMCdkIHRoYXQgZmlsZVxuICogKGBuZXh0LWltYWdlLWxlZ2FjeS91bmljb2RlYCkuIFVuaWNvZGUgbmVlZHMgbm90aGluZzogYMOkw7bDvMWhxI3FmcOtLnBuZ2Agc3Vydml2ZXNcbiAqIHRoZSBxdWVyeSBkZWNvZGUgYXMgaXRzZWxmIGFuZCBpcyBhbHJlYWR5IHRoZSBvYmplY3QncyBuYW1lLlxuICpcbiAqIFRocm93cyB7QGxpbmsgSW1hZ2VUb29MYXJnZUVycm9yfSByYXRoZXIgdGhhbiByZWFkIHBhc3QgYG1heGltdW1Cb2R5YFxuICogKGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWApLCB3aGljaCBgbmV4dCBzdGFydGAgZW5mb3JjZXMgb24gbG9jYWwgc291cmNlc1xuICogdG9vOiBhIGxhcmdlIGBwdWJsaWMvYCBmaWxlIHdvdWxkIG90aGVyd2lzZSBiZSByZWFkIGludG8gbWVtb3J5IHdob2xlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hGcm9tUzMoXG4gIHMzOiBTM0NsaWVudCxcbiAgYnVja2V0OiBzdHJpbmcsXG4gIHVybDogc3RyaW5nLFxuICBsb2NhdGlvbjogUzNBc3NldExvY2F0aW9uLFxuICBtYXhpbXVtQm9keTogbnVtYmVyLFxuKTogUHJvbWlzZTx7IGJ1ZmZlcjogQnVmZmVyOyBjb250ZW50VHlwZTogc3RyaW5nIHwgbnVsbDsgZXRhZzogc3RyaW5nIH0+IHtcbiAgY29uc3QgeyB1cmxCYXNlUGF0aCwga2V5UHJlZml4IH0gPSBsb2NhdGlvbjtcbiAgLy8gVGhlIGtleSBpcyB0aGUgcGF0aCBhbG9uZS4gYC9sb2dvLnBuZz92PTJgIGlzIGEgY2FjaGUtYnVzdGVyIG9uIGEgZmlsZVxuICAvLyBuYW1lZCBgbG9nby5wbmdgLCBhbmQgYG5leHQgc3RhcnRgIHRyZWF0cyBpdCBhcyBvbmU6IGBmZXRjaEludGVybmFsSW1hZ2VgXG4gIC8vIHJvdXRlcyB0aGUgaHJlZiBhcyBhIHJlcXVlc3QsIHdob3NlIHF1ZXJ5IGFuZCBmcmFnbWVudCBuZXZlciByZWFjaCB0aGVcbiAgLy8gc3RhdGljIGZpbGUgbG9va3VwLiBMZWZ0IG9uLCB0aGV5IGJlY2FtZSBwYXJ0IG9mIHRoZSBrZXksIHdoaWNoIG1pc3NlZC5cbiAgLy8gQ3V0IGJlZm9yZSBkZWNvZGluZywgc28gYSBgP2AgdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lIChgJTNGYCkgc3Vydml2ZXMuXG4gIGNvbnN0IHBhdGggPSB3aXRob3V0QXNzZXRQcmVmaXgodXJsLnNwbGl0KC9bPyNdLywgMSlbMF0sIGxvY2F0aW9uKTtcbiAgLy8gTWF0Y2hpbmcgb24gYSBwYXRoIGJvdW5kYXJ5IGtlZXBzIGEgc2libGluZyBsaWtlIFwiL2Jhc2VtZW50L2xvZ28ucG5nXCIgZnJvbVxuICAvLyBiZWluZyB0cmVhdGVkIGFzIGJhc2VQYXRoIFwiL2Jhc2VcIiBwbHVzIFwibWVudC9sb2dvLnBuZ1wiLiBJdCdzIHN0aWxsXG4gIC8vIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGBwdWJsaWMvYmFzZS9gIGRpcmVjdG9yeSwgd2hpY2ggbG9zZXM7IHRoYXQnc1xuICAvLyB0aGUgcmlnaHQgdHJhZGUsIHNpbmNlIGV2ZXJ5IHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2UgY2FycmllcyB0aGUgcHJlZml4XG4gIC8vIGFuZCB0aGUgYWx0ZXJuYXRpdmUgY29zdHMgYW4gUzMgcm91bmQgdHJpcCBwZXIgcmVxdWVzdCB0byBkZXRlY3QgaXQuXG4gIGNvbnN0IGFzc2V0UGF0aCA9IHdpdGhvdXRQYXRoUHJlZml4KHBhdGgsIHVybEJhc2VQYXRoKS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICBjb25zdCBwcmVmaXggPSBrZXlQcmVmaXgucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIik7XG4gIC8vIEEgbWFsZm9ybWVkIGVuY29kaW5nIHRoYXQgaXNuJ3QgYSBsaXRlcmFsIGAlYCBqdXN0IG1pc3NlcyB0aGUga2V5IGFuZCBnZXRzXG4gIC8vIHRoZSA0MDAgYW4gYWJzZW50IGZpbGUgZ2V0cy5cbiAgY29uc3QgZGVjb2RlZCA9IHNhZmVEZWNvZGUoYXNzZXRQYXRoKTtcbiAgY29uc3Qga2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fS8ke2RlY29kZWR9YCA6IGRlY29kZWQ7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5zZW5kKFxuICAgIG5ldyBHZXRPYmplY3RDb21tYW5kKHtcbiAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgS2V5OiBrZXksXG4gICAgfSksXG4gICk7XG5cbiAgY29uc3QgYm9keSA9IHJlc3BvbnNlLkJvZHk7XG4gIGlmICghYm9keSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgcmVzcG9uc2UgZnJvbSBTMyBmb3Iga2V5OiAke2tleX1gKTtcbiAgfVxuXG4gIGlmICgocmVzcG9uc2UuQ29udGVudExlbmd0aCA/PyAwKSA+IG1heGltdW1Cb2R5KSB7XG4gICAgKGJvZHkgYXMgeyBkZXN0cm95PzogKCkgPT4gdm9pZCB9KS5kZXN0cm95Py4oKTtcbiAgICB0aHJvdyBuZXcgSW1hZ2VUb29MYXJnZUVycm9yKGtleSk7XG4gIH1cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBsZXQgc2l6ZSA9IDA7XG4gIC8vIENvdW50ZWQgYXMgd2VsbCwgZm9yIGFuIG9iamVjdCB3aXRob3V0IGEgYENvbnRlbnRMZW5ndGhgLiBUaHJvd2luZyBvdXQgb2ZcbiAgLy8gdGhlIGxvb3AgZGVzdHJveXMgdGhlIHN0cmVhbS5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5IGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pIHtcbiAgICBzaXplICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgaWYgKHNpemUgPiBtYXhpbXVtQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEltYWdlVG9vTGFyZ2VFcnJvcihrZXkpO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBidWZmZXI6IEJ1ZmZlci5jb25jYXQoY2h1bmtzKSxcbiAgICBjb250ZW50VHlwZTogcmVzcG9uc2UuQ29udGVudFR5cGUgfHwgbnVsbCxcbiAgICBldGFnOiByZXNwb25zZS5FVGFnIHx8IFwiXCIsXG4gIH07XG59XG5cbi8qKlxuICogYC9jZG4vX25leHQvc3RhdGljL21lZGlhL2xvZ28ucG5nYCDihpIgYC9fbmV4dC9zdGF0aWMvbWVkaWEvbG9nby5wbmdgLCBmb3IgYVxuICogcGF0aCBgYXNzZXRQcmVmaXhgIG9mIGAvY2RuYDogb25seSBpbiBmcm9udCBvZiBgL19uZXh0L2AsIHRoZSBvbmUgcGxhY2VcbiAqIE5leHQuanMgcHV0cyBpdC5cbiAqL1xuZnVuY3Rpb24gd2l0aG91dEFzc2V0UHJlZml4KHBhdGg6IHN0cmluZywgbG9jYXRpb246IFMzQXNzZXRMb2NhdGlvbik6IHN0cmluZyB7XG4gIGNvbnN0IGFzc2V0UHJlZml4ID0gbG9jYXRpb24uYXNzZXRQcmVmaXg/LnJlcGxhY2UoL1xcLyskLywgXCJcIikgPz8gXCJcIjtcbiAgaWYgKCFhc3NldFByZWZpeC5zdGFydHNXaXRoKFwiL1wiKSkgcmV0dXJuIHBhdGg7XG4gIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoYCR7YXNzZXRQcmVmaXh9L19uZXh0L2ApXG4gICAgPyBwYXRoLnNsaWNlKGFzc2V0UHJlZml4Lmxlbmd0aClcbiAgICA6IHBhdGg7XG59XG5cbi8qKiBBIHNvdXJjZSBvdmVyIGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWA7IHNlZSB7QGxpbmsgZmV0Y2hGcm9tUzN9LiAqL1xuZXhwb3J0IGNsYXNzIEltYWdlVG9vTGFyZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFMzIG9iamVjdCAke2tleX0gaXMgb3ZlciBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWApO1xuICAgIHRoaXMubmFtZSA9IFwiSW1hZ2VUb29MYXJnZUVycm9yXCI7XG4gIH1cbn1cblxuLyoqXG4gKiBgZXh0cmFjdEV0YWdgIGZyb20gbmV4dCdzIGltYWdlIG9wdGltaXplciwgcmVzdGF0ZWQ6IG5leHQgMTYuNCBtb3ZlZCBpdCBvdXRcbiAqIG9mIGBuZXh0L2Rpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc2AgKGludG8gYGltYWdlLW9wdGltaXplci9leHRyYWN0LWV0YWdgKSxcbiAqIHNvIHRoZSBvbGQgZXhwb3J0IGlzIGB1bmRlZmluZWRgIHRoZXJlIGFuZCB0aGUgbmV3IHBhdGggaXMgYWJzZW50IGJlZm9yZSBpdC5cbiAqIFRoZSB1cHN0cmVhbSBldGFnIGlzIGJhc2U2NHVybC1lbmNvZGVkLCBiZWNhdXNlIGl0IGlzIHdlYWstc2lnbmVkIGFuZCBlbmRzIHVwXG4gKiBpbiBhIGNhY2hlIGVudHJ5J3MgbmFtZTsgd2l0aG91dCBvbmUgdGhlIGV0YWcgaXMgdGhlIGltYWdlJ3Mgb3duIGhhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RXRhZyhcbiAgZXRhZzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaW1hZ2VCdWZmZXI6IEJ1ZmZlcixcbik6IHN0cmluZyB7XG4gIGlmIChldGFnKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGV0YWcpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICB9XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpbWFnZUJ1ZmZlcikuZGlnZXN0KFwiYmFzZTY0dXJsXCIpO1xufVxuXG4vKiogYEltYWdlRXJyb3JgIGZyb20gYG5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzYC4gKi9cbmV4cG9ydCB0eXBlIEltYWdlRXJyb3JDbGFzcyA9XG4gICh0eXBlb2YgaW1wb3J0KFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIikpW1wiSW1hZ2VFcnJvclwiXTtcblxuLyoqXG4gKiBNYXBzIGFuIGVycm9yIHRocm93biB3aGlsZSBwcm9jZXNzaW5nIGFuIGltYWdlIHJlcXVlc3QgdG8gdGhlIEhUVFBcbiAqIHN0YXR1cy9tZXNzYWdlIGl0IHNob3VsZCBwcm9kdWNlLCBwcmVzZXJ2aW5nIHRoZSBzdGF0dXMgTmV4dC5qcydzIG93blxuICogYEltYWdlRXJyb3JgL2BmZXRjaEV4dGVybmFsSW1hZ2VgIGF0dGFjaC4gQSBzb3VyY2Ugb3ZlclxuICogYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCBpcyB0aGUgNDEzIGBmZXRjaEludGVybmFsSW1hZ2VgIGFuc3dlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRXJyb3JSZXNwb25zZShcbiAgZXJyb3I6IHVua25vd24sXG4gIEltYWdlRXJyb3I6IEltYWdlRXJyb3JDbGFzcyxcbik6IHtcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59IHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgSW1hZ2VFcnJvcikge1xuICAgIHJldHVybiB7IHN0YXR1c0NvZGU6IGVycm9yLnN0YXR1c0NvZGUsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfTtcbiAgfVxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJbWFnZVRvb0xhcmdlRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzQ29kZTogNDEzLFxuICAgICAgbWVzc2FnZTogJ1widXJsXCIgcGFyYW1ldGVyIGlzIHZhbGlkIGJ1dCBpbnRlcm5hbCByZXNwb25zZSBpcyBpbnZhbGlkJyxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7IHN0YXR1c0NvZGU6IDUwMCwgbWVzc2FnZTogXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIiB9O1xufVxuIl19
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4REEsa0NBaUVDO0FBOEJELGtDQVFDO0FBWUQsb0RBaUJDO0FBbE1ELHNEQUFzRDtBQUN0RDs7Ozs7Ozs7R0FRRztBQUNILDZDQUF5QztBQUN6QyxrREFBZ0U7QUFDaEUsaUNBQXVEO0FBMEJ2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSSxLQUFLLFVBQVUsV0FBVyxDQUMvQixFQUFZLEVBQ1osTUFBYyxFQUNkLEdBQVcsRUFDWCxRQUF5QixFQUN6QixXQUFtQjtJQU9uQixNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUM1Qyx5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDckUsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBaUIsRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCw2RUFBNkU7SUFDN0UsK0JBQStCO0lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUEsaUJBQVUsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENB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O0dBS0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FDbEMsS0FBYyxFQUNkLFVBQTJCO0lBSzNCLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFDRCxJQUFJLEtBQUssWUFBWSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hDLE9BQU87WUFDTCxVQUFVLEVBQUUsR0FBRztZQUNmLE9BQU8sRUFBRSwyREFBMkQ7U0FDckUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKipcbiAqIFMzIGZldGNoaW5nIGFuZCBlcnJvciBtYXBwaW5nIGZvciBgL19uZXh0L2ltYWdlYCwgc3BsaXQgb3V0IGZyb21cbiAqIHtAbGluayAuL2ltYWdlLnRzfSBzbyBpdCBpcyB1bml0LXRlc3RhYmxlIHdpdGhvdXQgYG5leHRgIHByZXNlbnQuXG4gKlxuICogVGhlIG9uZSB2YWx1ZSBmcm9tIGBuZXh0YCB0aGF0IHRoaXMgZmlsZSBuZWVkcyBpcyBwYXNzZWQgaW4gcmF0aGVyIHRoYW5cbiAqIGltcG9ydGVkOiBgbmV4dGAgaXMgZXh0ZXJuYWwgdG8gdGhlIHNoZWxsIGJ1bmRsZXMsIHNvIGEgc3RhdGljIGBpbXBvcnRgIGhlcmVcbiAqIHdvdWxkIGJlIGhvaXN0ZWQgaW50byB0aGUgYnVuZGxlIHdoZXJlIGl0IGNhbm5vdCByZXNvbHZlLiBgaW1hZ2UudHNgIHJlcXVpcmVzXG4gKiBpdCB0aHJvdWdoIGAuL25leHQtbW9kdWxlc2AgaW5zdGVhZC5cbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgR2V0T2JqZWN0Q29tbWFuZCwgUzNDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBzYWZlRGVjb2RlLCB3aXRob3V0UGF0aFByZWZpeCB9IGZyb20gXCIuL3V0aWxcIjtcblxuLyoqIFdoZXJlIHRoZSBhcHAgaXMgc2VydmVkIHZlcnN1cyB3aGVyZSBpdHMgYXNzZXRzIHdlcmUgdXBsb2FkZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFMzQXNzZXRMb2NhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXBwJ3Mgb3duIGBiYXNlUGF0aGAg4oCUIHRoZSBwcmVmaXggb2YgdGhlICpVUkwqIGl0IGlzIHNlcnZlZCBhdC4gT25seVxuICAgKiBzdHJpcHBlZCBmcm9tIHRoZSBocmVmLCBuZXZlciB1c2VkIHRvIGJ1aWxkIGEga2V5OiBvbiB0aGUgQVBJIEdhdGV3YXlcbiAgICogZGVwbG95bWVudCB0eXBlcyB0aGlzIGlzIHRoZSBzdGFnZSBuYW1lLCB3aGljaCBuZXZlciBhcHBlYXJzIGluIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsQmFzZVBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIGBOZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4YDogdGhlIFMzIGtleSBwcmVmaXggdGhlIGFzc2V0cyB3ZXJlIHVwbG9hZGVkXG4gICAqIHVuZGVyLCB3aXRob3V0IGEgbGVhZGluZyBzbGFzaC4gRW1wdHkgZm9yIGEgYnVja2V0LXJvb3QgZGVwbG95bWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGtleVByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGFwcCdzIGBhc3NldFByZWZpeGAsIHdoZW4gaXQgaXMgYSBwYXRoIChgL2NkbmApLiBOZXh0LmpzIHB1dHMgaXQgaW5cbiAgICogZnJvbnQgb2YgYC9fbmV4dC9gIGluIHBsYWNlIG9mIGBiYXNlUGF0aGAsIHNvIGEgc3RhdGljYWxseSBpbXBvcnRlZCBpbWFnZSdzXG4gICAqIGhyZWYgaXMgYC9jZG4vX25leHQvc3RhdGljL21lZGlhL+KApmAsIGFuZCBgbmV4dCBzdGFydGAgc3RyaXBzIGl0IGFnYWluIHdoZW5cbiAgICogaXQgc2VydmVzIHRoZSBmaWxlLiBBbiBhYnNvbHV0ZSBgYXNzZXRQcmVmaXhgIG1ha2VzIHRoZSBocmVmIGFic29sdXRlLCB3aGljaFxuICAgKiBuZXZlciByZWFjaGVzIGhlcmUuXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRQcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIG5vbi1hYnNvbHV0ZSAobG9jYWwpIGltYWdlIHJlZmVyZW5jZWQgYnkgYW4gYDxJbWFnZT5gIGZyb20gUzMuXG4gKlxuICogYHVybGAgaXMgaW5jb25zaXN0ZW50IGFib3V0IHRoZSBhcHAncyBgYmFzZVBhdGhgOiBuZXh0LWltYWdlLWxvYWRlciBiYWtlcyBpdFxuICogaW50byB0aGUgaHJlZiBmb3Igc3RhdGljYWxseSBpbXBvcnRlZCBpbWFnZXMsIHdoaWxlIHBsYWluIHN0cmluZyBwYXRocyBhcmVcbiAqIHBhc3NlZCB0aHJvdWdoIGFzIGxpdGVyYWxseSB3cml0dGVuIGJ5IHRoZSBhcHAuIFNvIGl0IGlzIHN0cmlwcGVkIHdoZW4gcHJlc2VudCxcbiAqIGxlYXZpbmcgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBhc3NldCByb290LCBhbmQgdGhlIGJ1Y2tldCdzIG93biBrZXkgcHJlZml4IGlzXG4gKiBhcHBsaWVkIHRvIHRoYXQuIERlcml2aW5nIHRoZSBrZXkgZnJvbSBgYmFzZVBhdGhgIGluc3RlYWQgaXMgd3Jvbmcgd2hlbmV2ZXIgdGhlXG4gKiB0d28gZGlmZmVyLCB3aGljaCB0aGV5IGRvIGZvciBldmVyeSBBUEkgR2F0ZXdheSBkZXBsb3ltZW50LlxuICpcbiAqIFRoZSBrZXkgaXMgcGVyY2VudC1kZWNvZGVkLCBiZWNhdXNlIGFuIFMzIGtleSBpcyB0aGUgZmlsZSdzIHJlYWwgbmFtZSB3aGlsZVxuICogYHVybGAgaXMgYSBVUkwgcGF0aC4gYHB1YmxpYy9oZWxsbyB3b3JsZC5qcGdgIGFycml2ZXMgaGVyZSBhc1xuICogYC9oZWxsbyUyMHdvcmxkLmpwZ2Ag4oCUIHRoZSBgdXJsYCBxdWVyeSB2YWx1ZSBpcyBkb3VibGUtZW5jb2RlZCwgc28gZGVjb2RpbmcgdGhlXG4gKiBxdWVyeSBzdHJpbmcgbGVhdmVzIG9uZSBsYXllciDigJQgYW5kIGl0cyBvYmplY3Qga2V5IGlzIGBoZWxsbyB3b3JsZC5qcGdgLlxuICogTmV4dC5qcydzIG93biBgZmV0Y2hJbnRlcm5hbEltYWdlYCBnZXRzIHRoZSBkZWNvZGUgZm9yIGZyZWUsIHNpbmNlIGl0IG1ha2VzIGFuXG4gKiBIVFRQIHN1YnJlcXVlc3QgYW5kIGl0cyBzdGF0aWMgZmlsZSBzZXJ2ZXIgcmVzb2x2ZXMgdGhlIHBhdGggYWdhaW5zdCB0aGVcbiAqIGZpbGVzeXN0ZW07IHNraXBwaW5nIGl0IGhlcmUgNDAwJ2QgdGhhdCBmaWxlXG4gKiAoYG5leHQtaW1hZ2UtbGVnYWN5L3VuaWNvZGVgKS4gVW5pY29kZSBuZWVkcyBub3RoaW5nOiBgw6TDtsO8xaHEjcWZw60ucG5nYCBzdXJ2aXZlc1xuICogdGhlIHF1ZXJ5IGRlY29kZSBhcyBpdHNlbGYgYW5kIGlzIGFscmVhZHkgdGhlIG9iamVjdCdzIG5hbWUuXG4gKlxuICogVGhyb3dzIHtAbGluayBJbWFnZVRvb0xhcmdlRXJyb3J9IHJhdGhlciB0aGFuIHJlYWQgcGFzdCBgbWF4aW11bUJvZHlgXG4gKiAoYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCksIHdoaWNoIGBuZXh0IHN0YXJ0YCBlbmZvcmNlcyBvbiBsb2NhbCBzb3VyY2VzXG4gKiB0b286IGEgbGFyZ2UgYHB1YmxpYy9gIGZpbGUgd291bGQgb3RoZXJ3aXNlIGJlIHJlYWQgaW50byBtZW1vcnkgd2hvbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEZyb21TMyhcbiAgczM6IFMzQ2xpZW50LFxuICBidWNrZXQ6IHN0cmluZyxcbiAgdXJsOiBzdHJpbmcsXG4gIGxvY2F0aW9uOiBTM0Fzc2V0TG9jYXRpb24sXG4gIG1heGltdW1Cb2R5OiBudW1iZXIsXG4pOiBQcm9taXNlPHtcbiAgYnVmZmVyOiBCdWZmZXI7XG4gIGNvbnRlbnRUeXBlOiBzdHJpbmcgfCBudWxsO1xuICBjYWNoZUNvbnRyb2w6IHN0cmluZyB8IG51bGw7XG4gIGV0YWc6IHN0cmluZztcbn0+IHtcbiAgY29uc3QgeyB1cmxCYXNlUGF0aCwga2V5UHJlZml4IH0gPSBsb2NhdGlvbjtcbiAgLy8gVGhlIGtleSBpcyB0aGUgcGF0aCBhbG9uZS4gYC9sb2dvLnBuZz92PTJgIGlzIGEgY2FjaGUtYnVzdGVyIG9uIGEgZmlsZVxuICAvLyBuYW1lZCBgbG9nby5wbmdgLCBhbmQgYG5leHQgc3RhcnRgIHRyZWF0cyBpdCBhcyBvbmU6IGBmZXRjaEludGVybmFsSW1hZ2VgXG4gIC8vIHJvdXRlcyB0aGUgaHJlZiBhcyBhIHJlcXVlc3QsIHdob3NlIHF1ZXJ5IGFuZCBmcmFnbWVudCBuZXZlciByZWFjaCB0aGVcbiAgLy8gc3RhdGljIGZpbGUgbG9va3VwLiBMZWZ0IG9uLCB0aGV5IGJlY2FtZSBwYXJ0IG9mIHRoZSBrZXksIHdoaWNoIG1pc3NlZC5cbiAgLy8gQ3V0IGJlZm9yZSBkZWNvZGluZywgc28gYSBgP2AgdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lIChgJTNGYCkgc3Vydml2ZXMuXG4gIGNvbnN0IHBhdGggPSB3aXRob3V0QXNzZXRQcmVmaXgodXJsLnNwbGl0KC9bPyNdLywgMSlbMF0sIGxvY2F0aW9uKTtcbiAgLy8gTWF0Y2hpbmcgb24gYSBwYXRoIGJvdW5kYXJ5IGtlZXBzIGEgc2libGluZyBsaWtlIFwiL2Jhc2VtZW50L2xvZ28ucG5nXCIgZnJvbVxuICAvLyBiZWluZyB0cmVhdGVkIGFzIGJhc2VQYXRoIFwiL2Jhc2VcIiBwbHVzIFwibWVudC9sb2dvLnBuZ1wiLiBJdCdzIHN0aWxsXG4gIC8vIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGBwdWJsaWMvYmFzZS9gIGRpcmVjdG9yeSwgd2hpY2ggbG9zZXM7IHRoYXQnc1xuICAvLyB0aGUgcmlnaHQgdHJhZGUsIHNpbmNlIGV2ZXJ5IHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2UgY2FycmllcyB0aGUgcHJlZml4XG4gIC8vIGFuZCB0aGUgYWx0ZXJuYXRpdmUgY29zdHMgYW4gUzMgcm91bmQgdHJpcCBwZXIgcmVxdWVzdCB0byBkZXRlY3QgaXQuXG4gIGNvbnN0IGFzc2V0UGF0aCA9IHdpdGhvdXRQYXRoUHJlZml4KHBhdGgsIHVybEJhc2VQYXRoKS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICBjb25zdCBwcmVmaXggPSBrZXlQcmVmaXgucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIik7XG4gIC8vIEEgbWFsZm9ybWVkIGVuY29kaW5nIHRoYXQgaXNuJ3QgYSBsaXRlcmFsIGAlYCBqdXN0IG1pc3NlcyB0aGUga2V5IGFuZCBnZXRzXG4gIC8vIHRoZSA0MDAgYW4gYWJzZW50IGZpbGUgZ2V0cy5cbiAgY29uc3QgZGVjb2RlZCA9IHNhZmVEZWNvZGUoYXNzZXRQYXRoKTtcbiAgY29uc3Qga2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fS8ke2RlY29kZWR9YCA6IGRlY29kZWQ7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5zZW5kKFxuICAgIG5ldyBHZXRPYmplY3RDb21tYW5kKHtcbiAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgS2V5OiBrZXksXG4gICAgfSksXG4gICk7XG5cbiAgY29uc3QgYm9keSA9IHJlc3BvbnNlLkJvZHk7XG4gIGlmICghYm9keSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgcmVzcG9uc2UgZnJvbSBTMyBmb3Iga2V5OiAke2tleX1gKTtcbiAgfVxuXG4gIGlmICgocmVzcG9uc2UuQ29udGVudExlbmd0aCA/PyAwKSA+IG1heGltdW1Cb2R5KSB7XG4gICAgKGJvZHkgYXMgeyBkZXN0cm95PzogKCkgPT4gdm9pZCB9KS5kZXN0cm95Py4oKTtcbiAgICB0aHJvdyBuZXcgSW1hZ2VUb29MYXJnZUVycm9yKGtleSk7XG4gIH1cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBsZXQgc2l6ZSA9IDA7XG4gIC8vIENvdW50ZWQgYXMgd2VsbCwgZm9yIGFuIG9iamVjdCB3aXRob3V0IGEgYENvbnRlbnRMZW5ndGhgLiBUaHJvd2luZyBvdXQgb2ZcbiAgLy8gdGhlIGxvb3AgZGVzdHJveXMgdGhlIHN0cmVhbS5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5IGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pIHtcbiAgICBzaXplICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgaWYgKHNpemUgPiBtYXhpbXVtQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEltYWdlVG9vTGFyZ2VFcnJvcihrZXkpO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBidWZmZXI6IEJ1ZmZlci5jb25jYXQoY2h1bmtzKSxcbiAgICBjb250ZW50VHlwZTogcmVzcG9uc2UuQ29udGVudFR5cGUgfHwgbnVsbCxcbiAgICBjYWNoZUNvbnRyb2w6IHJlc3BvbnNlLkNhY2hlQ29udHJvbCB8fCBudWxsLFxuICAgIGV0YWc6IHJlc3BvbnNlLkVUYWcgfHwgXCJcIixcbiAgfTtcbn1cblxuLyoqXG4gKiBgL2Nkbi9fbmV4dC9zdGF0aWMvbWVkaWEvbG9nby5wbmdgIOKGkiBgL19uZXh0L3N0YXRpYy9tZWRpYS9sb2dvLnBuZ2AsIGZvciBhXG4gKiBwYXRoIGBhc3NldFByZWZpeGAgb2YgYC9jZG5gOiBvbmx5IGluIGZyb250IG9mIGAvX25leHQvYCwgdGhlIG9uZSBwbGFjZVxuICogTmV4dC5qcyBwdXRzIGl0LlxuICovXG5mdW5jdGlvbiB3aXRob3V0QXNzZXRQcmVmaXgocGF0aDogc3RyaW5nLCBsb2NhdGlvbjogUzNBc3NldExvY2F0aW9uKTogc3RyaW5nIHtcbiAgY29uc3QgYXNzZXRQcmVmaXggPSBsb2NhdGlvbi5hc3NldFByZWZpeD8ucmVwbGFjZSgvXFwvKyQvLCBcIlwiKSA/PyBcIlwiO1xuICBpZiAoIWFzc2V0UHJlZml4LnN0YXJ0c1dpdGgoXCIvXCIpKSByZXR1cm4gcGF0aDtcbiAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChgJHthc3NldFByZWZpeH0vX25leHQvYClcbiAgICA/IHBhdGguc2xpY2UoYXNzZXRQcmVmaXgubGVuZ3RoKVxuICAgIDogcGF0aDtcbn1cblxuLyoqIEEgc291cmNlIG92ZXIgYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YDsgc2VlIHtAbGluayBmZXRjaEZyb21TM30uICovXG5leHBvcnQgY2xhc3MgSW1hZ2VUb29MYXJnZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgY29uc3RydWN0b3Ioa2V5OiBzdHJpbmcpIHtcbiAgICBzdXBlcihgUzMgb2JqZWN0ICR7a2V5fSBpcyBvdmVyIGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCk7XG4gICAgdGhpcy5uYW1lID0gXCJJbWFnZVRvb0xhcmdlRXJyb3JcIjtcbiAgfVxufVxuXG4vKipcbiAqIGBleHRyYWN0RXRhZ2AgZnJvbSBuZXh0J3MgaW1hZ2Ugb3B0aW1pemVyLCByZXN0YXRlZDogbmV4dCAxNi40IG1vdmVkIGl0IG91dFxuICogb2YgYG5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzYCAoaW50byBgaW1hZ2Utb3B0aW1pemVyL2V4dHJhY3QtZXRhZ2ApLFxuICogc28gdGhlIG9sZCBleHBvcnQgaXMgYHVuZGVmaW5lZGAgdGhlcmUgYW5kIHRoZSBuZXcgcGF0aCBpcyBhYnNlbnQgYmVmb3JlIGl0LlxuICogVGhlIHVwc3RyZWFtIGV0YWcgaXMgYmFzZTY0dXJsLWVuY29kZWQsIGJlY2F1c2UgaXQgaXMgd2Vhay1zaWduZWQgYW5kIGVuZHMgdXBcbiAqIGluIGEgY2FjaGUgZW50cnkncyBuYW1lOyB3aXRob3V0IG9uZSB0aGUgZXRhZyBpcyB0aGUgaW1hZ2UncyBvd24gaGFzaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RFdGFnKFxuICBldGFnOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBpbWFnZUJ1ZmZlcjogQnVmZmVyLFxuKTogc3RyaW5nIHtcbiAgaWYgKGV0YWcpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZXRhZykudG9TdHJpbmcoXCJiYXNlNjR1cmxcIik7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGltYWdlQnVmZmVyKS5kaWdlc3QoXCJiYXNlNjR1cmxcIik7XG59XG5cbi8qKiBgSW1hZ2VFcnJvcmAgZnJvbSBgbmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNgLiAqL1xuZXhwb3J0IHR5cGUgSW1hZ2VFcnJvckNsYXNzID1cbiAgKHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc1wiKSlbXCJJbWFnZUVycm9yXCJdO1xuXG4vKipcbiAqIE1hcHMgYW4gZXJyb3IgdGhyb3duIHdoaWxlIHByb2Nlc3NpbmcgYW4gaW1hZ2UgcmVxdWVzdCB0byB0aGUgSFRUUFxuICogc3RhdHVzL21lc3NhZ2UgaXQgc2hvdWxkIHByb2R1Y2UsIHByZXNlcnZpbmcgdGhlIHN0YXR1cyBOZXh0LmpzJ3Mgb3duXG4gKiBgSW1hZ2VFcnJvcmAvYGZldGNoRXh0ZXJuYWxJbWFnZWAgYXR0YWNoLiBBIHNvdXJjZSBvdmVyXG4gKiBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgIGlzIHRoZSA0MTMgYGZldGNoSW50ZXJuYWxJbWFnZWAgYW5zd2Vycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFcnJvclJlc3BvbnNlKFxuICBlcnJvcjogdW5rbm93bixcbiAgSW1hZ2VFcnJvcjogSW1hZ2VFcnJvckNsYXNzLFxuKToge1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn0ge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJbWFnZUVycm9yKSB7XG4gICAgcmV0dXJuIHsgc3RhdHVzQ29kZTogZXJyb3Iuc3RhdHVzQ29kZSwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9O1xuICB9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEltYWdlVG9vTGFyZ2VFcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiA0MTMsXG4gICAgICBtZXNzYWdlOiAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgdmFsaWQgYnV0IGludGVybmFsIHJlc3BvbnNlIGlzIGludmFsaWQnLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHsgc3RhdHVzQ29kZTogNTAwLCBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiIH07XG59XG4iXX0=
@@ -32,6 +32,22 @@ describe("fetchFromS3", () => {
32
32
  ETag: '"abc123"',
33
33
  });
34
34
  const keyOf = () => client_s3_1.GetObjectCommand.mock.calls[0][0].Key;
35
+ // What `fetchInternalImage` passes on for a file `next start` serves.
36
+ it("returns the object's Cache-Control", async () => {
37
+ mockSend.mockResolvedValue({
38
+ Body: asyncIterableFrom([Buffer.from("data")]),
39
+ ContentType: "image/png",
40
+ CacheControl: "public, max-age=31536000, immutable",
41
+ ETag: '"abc123"',
42
+ });
43
+ const result = await (0, image_utils_1.fetchFromS3)(s3, "bucket", "/_next/static/media/logo.png", ROOT, 1024);
44
+ expect(result.cacheControl).toBe("public, max-age=31536000, immutable");
45
+ });
46
+ it("returns a null Cache-Control for an object without one", async () => {
47
+ ok();
48
+ const result = await (0, image_utils_1.fetchFromS3)(s3, "bucket", "/logo.png", ROOT, 1024);
49
+ expect(result.cacheControl).toBeNull();
50
+ });
35
51
  it("strips the leading slash when the assets sit at the bucket root", async () => {
36
52
  ok();
37
53
  await (0, image_utils_1.fetchFromS3)(s3, "my-bucket", "/static/foo.png", {
@@ -246,4 +262,4 @@ describe("resolveErrorResponse", () => {
246
262
  });
247
263
  });
248
264
  });
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2ltYWdlLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWhDLGtEQUFnRTtBQUNoRSw0RUFBaUU7QUFDakUsK0NBS3VCO0FBRXZCLFNBQVMsaUJBQWlCLENBQUMsTUFBb0I7SUFDN0MsT0FBTztRQUNMLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUNmLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtvQkFDZixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUVoRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBUSxDQUFDLEVBQUUsQ0FBd0IsQ0FBQztJQUVuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2IsRUFBMkMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzdELFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2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QUMvRCxVQUFVLEVBQUUsR0FBRztZQUNmLE9BQU8sRUFBRSx1QkFBdUI7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LXMzXCIpO1xuXG5pbXBvcnQgeyBHZXRPYmplY3RDb21tYW5kLCBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB7IEltYWdlRXJyb3IgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIjtcbmltcG9ydCB7XG4gIGV4dHJhY3RFdGFnLFxuICBmZXRjaEZyb21TMyxcbiAgSW1hZ2VUb29MYXJnZUVycm9yLFxuICByZXNvbHZlRXJyb3JSZXNwb25zZSxcbn0gZnJvbSBcIi4vaW1hZ2UtdXRpbHNcIjtcblxuZnVuY3Rpb24gYXN5bmNJdGVyYWJsZUZyb20oY2h1bmtzOiBVaW50OEFycmF5W10pOiBBc3luY0l0ZXJhYmxlPFVpbnQ4QXJyYXk+IHtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgbGV0IGkgPSAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogYXN5bmMgKCkgPT5cbiAgICAgICAgICBpIDwgY2h1bmtzLmxlbmd0aFxuICAgICAgICAgICAgPyB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogY2h1bmtzW2krK10gfVxuICAgICAgICAgICAgOiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIE5vIGFwcCBgYmFzZVBhdGhgLCBhc3NldHMgYXQgdGhlIHJvb3Qgb2YgdGhlIGJ1Y2tldDogdGhlIGRlZmF1bHQuICovXG5jb25zdCBST09UID0geyB1cmxCYXNlUGF0aDogXCJcIiwga2V5UHJlZml4OiBcIlwiIH07XG5cbmRlc2NyaWJlKFwiZmV0Y2hGcm9tUzNcIiwgKCkgPT4ge1xuICBjb25zdCBtb2NrU2VuZCA9IGplc3QuZm4oKTtcbiAgY29uc3QgczMgPSBuZXcgUzNDbGllbnQoe30pIGFzIHVua25vd24gYXMgUzNDbGllbnQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgKHMzIGFzIHVua25vd24gYXMgeyBzZW5kOiB0eXBlb2YgbW9ja1NlbmQgfSkuc2VuZCA9IG1vY2tTZW5kO1xuICAgIG1vY2tTZW5kLm1vY2tSZXNldCgpO1xuICB9KTtcblxuICBjb25zdCBvayA9ICgpID0+XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiZGF0YVwiKV0pLFxuICAgICAgQ29udGVudFR5cGU6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBFVGFnOiAnXCJhYmMxMjNcIicsXG4gICAgfSk7XG4gIGNvbnN0IGtleU9mID0gKCkgPT5cbiAgICAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXS5LZXk7XG5cbiAgaXQoXCJzdHJpcHMgdGhlIGxlYWRpbmcgc2xhc2ggd2hlbiB0aGUgYXNzZXRzIHNpdCBhdCB0aGUgYnVja2V0IHJvb3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdCgoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXSkudG9FcXVhbChcbiAgICAgIHsgQnVja2V0OiBcIm15LWJ1Y2tldFwiLCBLZXk6IFwic3RhdGljL2Zvby5wbmdcIiB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyB0aGUgYnVja2V0IGtleSBwcmVmaXhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28uanBnXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9zdGF0aWMvZm9vLmpwZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCByZXBlYXQgdGhlIHByZWZpeCB3aGVuIHRoZSB1cmwgYWxyZWFkeSBjYXJyaWVzIGJhc2VQYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgLy8gbmV4dC1pbWFnZS1sb2FkZXIgYmFrZXMgYGJhc2VQYXRoYCBpbnRvIHRoZSBocmVmIG9mIGEgc3RhdGljYWxseSBpbXBvcnRlZFxuICAgIC8vIGltYWdlLCB1bmxpa2UgYSBwbGFpbiBzdHJpbmcgcGF0aC5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL2Jhc2UvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9fbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIEdhdGV3YXkgZGVwbG95bWVudCB0eXBlcyBzZXJ2ZSB0aGUgYXBwIHVuZGVyIHRoZSBzdGFnZSBuYW1lLCBzbyB0aGVcbiAgICogYXBwJ3MgYGJhc2VQYXRoYCBpcyBgL3Byb2RgIHdoaWxlIHRoZSBhc3NldHMgd2VyZSB1cGxvYWRlZCB0byB0aGUgcm9vdCBvZiB0aGVcbiAgICogYnVja2V0LiBCdWlsZGluZyB0aGUga2V5IGZyb20gYGJhc2VQYXRoYCBhc2tzIFMzIGZvciBgcHJvZC8uLi5gLCB3aGljaCBkb2VzXG4gICAqIG5vdCBleGlzdCwgYW5kIGV2ZXJ5IGxvY2FsIGA8SW1hZ2U+YCA0MDBzLlxuICAgKi9cbiAgaXQoXCJzdHJpcHMgYSBiYXNlUGF0aCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3Byb2QvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9wcm9kXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJcIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJfbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgdXJsIHdpdGhvdXQgYmFzZVBhdGggYWxvbmUgd2hlbiB0aGVyZSBpcyBubyBrZXkgcHJlZml4XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9zdGF0aWMvZm9vLmpwZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvcHJvZFwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwic3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIFdpdGggYGFzc2V0UHJlZml4OiBcIi9jZG5cImAsIGEgc3RhdGljIGltcG9ydCdzIGhyZWYgaXNcbiAgLy8gYC9jZG4vX25leHQvc3RhdGljL21lZGlhL+KApmAsIHdpdGggYGJhc2VQYXRoYCBub3doZXJlIGluIGl0LlxuICBpdChcInN0cmlwcyBhIHBhdGggYXNzZXRQcmVmaXggaW4gZnJvbnQgb2YgL19uZXh0L1wiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL19uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG4vXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhIHB1YmxpYy8gZmlsZSB1bmRlciBhIGRpcmVjdG9yeSBuYW1lZCBsaWtlIHRoZSBhc3NldFByZWZpeCBhbG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL2xvZ28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJjZG4vbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwiaWdub3JlcyBhbiBhYnNvbHV0ZSBhc3NldFByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcImh0dHBzOi8vY2RuLmV4YW1wbGUudGVzdFwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcIl9uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJvbmx5IG1hdGNoZXMgYmFzZVBhdGggb24gYSBwYXRoIGJvdW5kYXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9iYXNlbWVudC9sb2dvLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiYmFzZVwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2UvYmFzZW1lbnQvbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIC8vIENhcnJpZWQgb3ZlciBmcm9tICMyNjcsIHdoaWNoIGZpeGVkIHRoZSBzYW1lIGJ1ZyBpbiB0aGUgcHJlLWFkYXB0ZXIgaW1hZ2VcbiAgLy8gaGFuZGxlcjogYSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlIGNhbiBhcnJpdmUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICBpdChcImRvZXNuJ3QgZG91YmxlIHRoZSBzZXBhcmF0b3Igd2hlbiB0aGUga2V5IHByZWZpeCBoYXMgYSB0cmFpbGluZyBzbGFzaFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvc3RhdGljL2Zvby5qcGdcIixcbiAgICAgIHtcbiAgICAgICAgdXJsQmFzZVBhdGg6IFwiXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlL1wiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2Uvc3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIGBuZXh0LWltYWdlLWxlZ2FjeS91bmljb2RlYCwgd2hvc2UgYHB1YmxpYy9gIGhvbGRzIGJvdGggb2YgdGhlc2UgbmFtZXMuIFRoZVxuICAvLyBzcGFjZSBpcyB3aGF0IGJyb2tlOiB0aGUga2V5IGlzIHRoZSBmaWxlJ3MgcmVhbCBuYW1lLCB0aGUgdXJsIGlzIGEgVVJMIHBhdGguXG4gIGl0LmVhY2goW1xuICAgIFtcIi9oZWxsbyUyMHdvcmxkLmpwZ1wiLCBcImhlbGxvIHdvcmxkLmpwZ1wiXSxcbiAgICBbXCIvw6TDtsO8xaHEjcWZw60ucG5nXCIsIFwiw6TDtsO8xaHEjcWZw60ucG5nXCJdLFxuICAgIFtcIi8lQzMlQTQlQzMlQjYucG5nXCIsIFwiw6TDti5wbmdcIl0sXG4gIF0pKFwiZGVjb2RlcyAlcyBpbnRvIHRoZSBvYmplY3QncyByZWFsIG5hbWVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCB1cmwsIFJPT1QsIEluZmluaXR5KTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIC8vIEEgY2FjaGUtYnVzdGVyIG9uIGEgbG9jYWwgc3JjOiBgbmV4dCBzdGFydGAgcm91dGVzIHRoZSBocmVmIGFzIGEgcmVxdWVzdCwgc29cbiAgLy8gdGhlIHF1ZXJ5IGFuZCBmcmFnbWVudCBuZXZlciByZWFjaCB0aGUgZmlsZSBsb29rdXAuXG4gIGl0LmVhY2goW1xuICAgIFtcIi9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvbG9nby5wbmcjdG9wXCIsIFwibG9nby5wbmdcIl0sXG4gICAgW1wiL2xvZ28ucG5nP3Y9MiN0b3BcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvYmFzZS9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICAvLyBBIGA/YCB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUgYXJyaXZlcyBlbmNvZGVkIGFuZCBpcyBub3QgYSBxdWVyeS5cbiAgICBbXCIvd2hhdCUzRi5wbmc/dj0yXCIsIFwid2hhdD8ucG5nXCJdLFxuICBdKShcImtleXMgJXMgYnkgaXRzIHBhdGggYWxvbmVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgdXJsLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgbmFtZSB0aGF0IGlzbid0IHZhbGlkIHBlcmNlbnQtZW5jb2RpbmcgYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvMTAwJS5wbmdcIiwgUk9PVCwgSW5maW5pdHkpO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCIxMDAlLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIHRoZSBjb25jYXRlbmF0ZWQgYnVmZmVyLCBjb250ZW50IHR5cGUsIGFuZCBldGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL2pwZWdcIixcbiAgICAgIEVUYWc6ICdcInRoZS1ldGFnXCInLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28uanBnXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuYnVmZmVyLnRvU3RyaW5nKCkpLnRvQmUoXCJoZWxsb1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlKFwiaW1hZ2UvanBlZ1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmV0YWcpLnRvQmUoJ1widGhlLWV0YWdcIicpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgYW4gZW1wdHkgZXRhZyB3aGVuIFMzIGRvZXNuJ3QgcHJvdmlkZSBvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBudWxsLFxuICAgICAgRVRhZzogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28ucG5nXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXRhZykudG9CZShcIlwiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICAvLyBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCB3aGljaCBgbmV4dCBzdGFydGAgZW5mb3JjZXMgb24gbG9jYWwgc291cmNlcy5cbiAgaXQoXCJyZWZ1c2VzIGFuIG9iamVjdCB3aG9zZSBDb250ZW50TGVuZ3RoIGlzIG92ZXIgdGhlIGxpbWl0LCB1bnJlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc3Ryb3kgPSBqZXN0LmZuKCk7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogeyAuLi5hc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJuZXZlciByZWFkXCIpXSksIGRlc3Ryb3kgfSxcbiAgICAgIENvbnRlbnRMZW5ndGg6IDExLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL2JpZy5wbmdcIiwgUk9PVCwgMTApLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIGV4cGVjdChkZXN0cm95KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwic3RvcHMgcmVhZGluZyBvbmNlIHRoZSBieXRlcyByZWFkIHBhc3MgdGhlIGxpbWl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9iaWcucG5nXCIsIFJPT1QsIDQpLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIC8vIEF0IHRoZSBsaW1pdCBleGFjdGx5IGlzIGZpbmUuXG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiaGVsXCIpLCBCdWZmZXIuZnJvbShcImxvXCIpXSksXG4gICAgICBDb250ZW50TGVuZ3RoOiA1LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9vay5wbmdcIiwgUk9PVCwgNSk7XG4gICAgZXhwZWN0KHJlc3VsdC5idWZmZXIudG9TdHJpbmcoKSkudG9CZShcImhlbGxvXCIpO1xuICB9KTtcblxuICBpdChcInRocm93cyB3aGVuIFMzIHJldHVybnMgbm8gYm9keVwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoeyBCb2R5OiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvbWlzc2luZy5wbmdcIiwgUk9PVCwgSW5maW5pdHkpLFxuICAgICkucmVqZWN0cy50b1Rocm93KC9FbXB0eSByZXNwb25zZSBmcm9tIFMzLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZXh0cmFjdEV0YWdcIiwgKCkgPT4ge1xuICBjb25zdCBpbWFnZSA9IEJ1ZmZlci5mcm9tKFwibm90IHJlYWxseSBhIHBuZ1wiKTtcblxuICAvLyBXaGF0IG5leHQncyBvd24gYGV4dHJhY3RFdGFnYCByZXR1cm5zIGZvciB0aGVzZSBpbnB1dHMsIHJlY29yZGVkIGZyb21cbiAgLy8gMTYuNCdzIGBpbWFnZS1vcHRpbWl6ZXIvZXh0cmFjdC1ldGFnLmpzYDogYSBsaXRlcmFsLCBzbyB0aGUgdGVzdCBydW5zIG9uXG4gIC8vIGV2ZXJ5IHN1cHBvcnRlZCBgbmV4dGAsIGluY2x1ZGluZyB0aG9zZSB3aXRob3V0IHRoYXQgbW9kdWxlLlxuICBpdChcIm1hdGNoZXMgbmV4dCdzIG93biwgd2l0aCBhbmQgd2l0aG91dCBhbiB1cHN0cmVhbSBldGFnXCIsICgpID0+IHtcbiAgICBleHBlY3QoZXh0cmFjdEV0YWcoJ1cvXCJhYmNcIicsIGltYWdlKSkudG9CZShcIlZ5OGlZV0pqSWdcIik7XG4gICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIFtcIlwiLCBudWxsLCB1bmRlZmluZWRdKSB7XG4gICAgICBleHBlY3QoZXh0cmFjdEV0YWcobWlzc2luZywgaW1hZ2UpKS50b0JlKFxuICAgICAgICBcIjZRRTMwNTNqQk83N3ZuaUx4VFhINkM4bnE3LUFhVkJmdTlpcDNOeFBJQ1FcIixcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlc29sdmVFcnJvclJlc3BvbnNlXCIsICgpID0+IHtcbiAgaXQoXCJwcmVzZXJ2ZXMgdGhlIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlIGZyb20gYW4gSW1hZ2VFcnJvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgSW1hZ2VFcnJvcig0MDAsICdcInVybFwiIHBhcmFtZXRlciBpcyBub3QgYWxsb3dlZCcpO1xuXG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKGVycm9yLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICBtZXNzYWdlOiAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgbm90IGFsbG93ZWQnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIm1hcHMgYSBzb3VyY2Ugb3ZlciBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keSB0byBuZXh0IHN0YXJ0J3MgNDEzXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICByZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgSW1hZ2VUb29MYXJnZUVycm9yKFwiYmlnLnBuZ1wiKSwgSW1hZ2VFcnJvciksXG4gICAgKS50b0VxdWFsKHtcbiAgICAgIHN0YXR1c0NvZGU6IDQxMyxcbiAgICAgIG1lc3NhZ2U6ICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byA1MDAgZm9yIHVucmVjb2duaXplZCBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgRXJyb3IoXCJib29tXCIpLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShcIm5vdCBhbiBlcnJvclwiLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2ltYWdlLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWhDLGtEQUFnRTtBQUNoRSw0RUFBaUU7QUFDakUsK0NBS3VCO0FBRXZCLFNBQVMsaUJBQWlCLENBQUMsTUFBb0I7SUFDN0MsT0FBTztRQUNMLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUNmLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtvQkFDZixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUVoRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBUSxDQUFDLEVBQUUsQ0FBd0IsQ0FBQztJQUVuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2IsRUFBMkMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzdELFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2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Q0FBQyxHQUFHLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUVwRSxNQUFNLENBQUMsSUFBQSxrQ0FBb0IsRUFBQyxLQUFLLEVBQUUsK0JBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3RELFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLGdDQUFnQztTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxHQUFHLEVBQUU7UUFDM0UsTUFBTSxDQUNKLElBQUEsa0NBQW9CLEVBQUMsSUFBSSxnQ0FBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSwrQkFBVSxDQUFDLENBQ3BFLENBQUMsT0FBTyxDQUFDO1lBQ1IsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsMkRBQTJEO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtRQUNuRCxNQUFNLENBQUMsSUFBQSxrQ0FBb0IsRUFBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSwrQkFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEUsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsdUJBQXVCO1NBQ2pDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFBLGtDQUFvQixFQUFDLGNBQWMsRUFBRSwrQkFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDL0QsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsdUJBQXVCO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1zM1wiKTtcblxuaW1wb3J0IHsgR2V0T2JqZWN0Q29tbWFuZCwgUzNDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBJbWFnZUVycm9yIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCI7XG5pbXBvcnQge1xuICBleHRyYWN0RXRhZyxcbiAgZmV0Y2hGcm9tUzMsXG4gIEltYWdlVG9vTGFyZ2VFcnJvcixcbiAgcmVzb2x2ZUVycm9yUmVzcG9uc2UsXG59IGZyb20gXCIuL2ltYWdlLXV0aWxzXCI7XG5cbmZ1bmN0aW9uIGFzeW5jSXRlcmFibGVGcm9tKGNodW5rczogVWludDhBcnJheVtdKTogQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PiB7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGFzeW5jICgpID0+XG4gICAgICAgICAgaSA8IGNodW5rcy5sZW5ndGhcbiAgICAgICAgICAgID8geyBkb25lOiBmYWxzZSwgdmFsdWU6IGNodW5rc1tpKytdIH1cbiAgICAgICAgICAgIDogeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0sXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBObyBhcHAgYGJhc2VQYXRoYCwgYXNzZXRzIGF0IHRoZSByb290IG9mIHRoZSBidWNrZXQ6IHRoZSBkZWZhdWx0LiAqL1xuY29uc3QgUk9PVCA9IHsgdXJsQmFzZVBhdGg6IFwiXCIsIGtleVByZWZpeDogXCJcIiB9O1xuXG5kZXNjcmliZShcImZldGNoRnJvbVMzXCIsICgpID0+IHtcbiAgY29uc3QgbW9ja1NlbmQgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHMzID0gbmV3IFMzQ2xpZW50KHt9KSBhcyB1bmtub3duIGFzIFMzQ2xpZW50O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIChzMyBhcyB1bmtub3duIGFzIHsgc2VuZDogdHlwZW9mIG1vY2tTZW5kIH0pLnNlbmQgPSBtb2NrU2VuZDtcbiAgICBtb2NrU2VuZC5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgY29uc3Qgb2sgPSAoKSA9PlxuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL3BuZ1wiLFxuICAgICAgRVRhZzogJ1wiYWJjMTIzXCInLFxuICAgIH0pO1xuICBjb25zdCBrZXlPZiA9ICgpID0+XG4gICAgKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF1bMF0uS2V5O1xuXG4gIC8vIFdoYXQgYGZldGNoSW50ZXJuYWxJbWFnZWAgcGFzc2VzIG9uIGZvciBhIGZpbGUgYG5leHQgc3RhcnRgIHNlcnZlcy5cbiAgaXQoXCJyZXR1cm5zIHRoZSBvYmplY3QncyBDYWNoZS1Db250cm9sXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJkYXRhXCIpXSksXG4gICAgICBDb250ZW50VHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgIENhY2hlQ29udHJvbDogXCJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAsIGltbXV0YWJsZVwiLFxuICAgICAgRVRhZzogJ1wiYWJjMTIzXCInLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcImJ1Y2tldFwiLFxuICAgICAgXCIvX25leHQvc3RhdGljL21lZGlhL2xvZ28ucG5nXCIsXG4gICAgICBST09ULFxuICAgICAgMTAyNCxcbiAgICApO1xuICAgIGV4cGVjdChyZXN1bHQuY2FjaGVDb250cm9sKS50b0JlKFwicHVibGljLCBtYXgtYWdlPTMxNTM2MDAwLCBpbW11dGFibGVcIik7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBhIG51bGwgQ2FjaGUtQ29udHJvbCBmb3IgYW4gb2JqZWN0IHdpdGhvdXQgb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcImJ1Y2tldFwiLCBcIi9sb2dvLnBuZ1wiLCBST09ULCAxMDI0KTtcbiAgICBleHBlY3QocmVzdWx0LmNhY2hlQ29udHJvbCkudG9CZU51bGwoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJpcHMgdGhlIGxlYWRpbmcgc2xhc2ggd2hlbiB0aGUgYXNzZXRzIHNpdCBhdCB0aGUgYnVja2V0IHJvb3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdCgoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXSkudG9FcXVhbChcbiAgICAgIHsgQnVja2V0OiBcIm15LWJ1Y2tldFwiLCBLZXk6IFwic3RhdGljL2Zvby5wbmdcIiB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyB0aGUgYnVja2V0IGtleSBwcmVmaXhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28uanBnXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9zdGF0aWMvZm9vLmpwZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCByZXBlYXQgdGhlIHByZWZpeCB3aGVuIHRoZSB1cmwgYWxyZWFkeSBjYXJyaWVzIGJhc2VQYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgLy8gbmV4dC1pbWFnZS1sb2FkZXIgYmFrZXMgYGJhc2VQYXRoYCBpbnRvIHRoZSBocmVmIG9mIGEgc3RhdGljYWxseSBpbXBvcnRlZFxuICAgIC8vIGltYWdlLCB1bmxpa2UgYSBwbGFpbiBzdHJpbmcgcGF0aC5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL2Jhc2UvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9fbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIEdhdGV3YXkgZGVwbG95bWVudCB0eXBlcyBzZXJ2ZSB0aGUgYXBwIHVuZGVyIHRoZSBzdGFnZSBuYW1lLCBzbyB0aGVcbiAgICogYXBwJ3MgYGJhc2VQYXRoYCBpcyBgL3Byb2RgIHdoaWxlIHRoZSBhc3NldHMgd2VyZSB1cGxvYWRlZCB0byB0aGUgcm9vdCBvZiB0aGVcbiAgICogYnVja2V0LiBCdWlsZGluZyB0aGUga2V5IGZyb20gYGJhc2VQYXRoYCBhc2tzIFMzIGZvciBgcHJvZC8uLi5gLCB3aGljaCBkb2VzXG4gICAqIG5vdCBleGlzdCwgYW5kIGV2ZXJ5IGxvY2FsIGA8SW1hZ2U+YCA0MDBzLlxuICAgKi9cbiAgaXQoXCJzdHJpcHMgYSBiYXNlUGF0aCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3Byb2QvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9wcm9kXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJcIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJfbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgdXJsIHdpdGhvdXQgYmFzZVBhdGggYWxvbmUgd2hlbiB0aGVyZSBpcyBubyBrZXkgcHJlZml4XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9zdGF0aWMvZm9vLmpwZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvcHJvZFwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwic3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIFdpdGggYGFzc2V0UHJlZml4OiBcIi9jZG5cImAsIGEgc3RhdGljIGltcG9ydCdzIGhyZWYgaXNcbiAgLy8gYC9jZG4vX25leHQvc3RhdGljL21lZGlhL+KApmAsIHdpdGggYGJhc2VQYXRoYCBub3doZXJlIGluIGl0LlxuICBpdChcInN0cmlwcyBhIHBhdGggYXNzZXRQcmVmaXggaW4gZnJvbnQgb2YgL19uZXh0L1wiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL19uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG4vXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhIHB1YmxpYy8gZmlsZSB1bmRlciBhIGRpcmVjdG9yeSBuYW1lZCBsaWtlIHRoZSBhc3NldFByZWZpeCBhbG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL2xvZ28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJjZG4vbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwiaWdub3JlcyBhbiBhYnNvbHV0ZSBhc3NldFByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcImh0dHBzOi8vY2RuLmV4YW1wbGUudGVzdFwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcIl9uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJvbmx5IG1hdGNoZXMgYmFzZVBhdGggb24gYSBwYXRoIGJvdW5kYXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9iYXNlbWVudC9sb2dvLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiYmFzZVwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2UvYmFzZW1lbnQvbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIC8vIENhcnJpZWQgb3ZlciBmcm9tICMyNjcsIHdoaWNoIGZpeGVkIHRoZSBzYW1lIGJ1ZyBpbiB0aGUgcHJlLWFkYXB0ZXIgaW1hZ2VcbiAgLy8gaGFuZGxlcjogYSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlIGNhbiBhcnJpdmUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICBpdChcImRvZXNuJ3QgZG91YmxlIHRoZSBzZXBhcmF0b3Igd2hlbiB0aGUga2V5IHByZWZpeCBoYXMgYSB0cmFpbGluZyBzbGFzaFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvc3RhdGljL2Zvby5qcGdcIixcbiAgICAgIHtcbiAgICAgICAgdXJsQmFzZVBhdGg6IFwiXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlL1wiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2Uvc3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIGBuZXh0LWltYWdlLWxlZ2FjeS91bmljb2RlYCwgd2hvc2UgYHB1YmxpYy9gIGhvbGRzIGJvdGggb2YgdGhlc2UgbmFtZXMuIFRoZVxuICAvLyBzcGFjZSBpcyB3aGF0IGJyb2tlOiB0aGUga2V5IGlzIHRoZSBmaWxlJ3MgcmVhbCBuYW1lLCB0aGUgdXJsIGlzIGEgVVJMIHBhdGguXG4gIGl0LmVhY2goW1xuICAgIFtcIi9oZWxsbyUyMHdvcmxkLmpwZ1wiLCBcImhlbGxvIHdvcmxkLmpwZ1wiXSxcbiAgICBbXCIvw6TDtsO8xaHEjcWZw60ucG5nXCIsIFwiw6TDtsO8xaHEjcWZw60ucG5nXCJdLFxuICAgIFtcIi8lQzMlQTQlQzMlQjYucG5nXCIsIFwiw6TDti5wbmdcIl0sXG4gIF0pKFwiZGVjb2RlcyAlcyBpbnRvIHRoZSBvYmplY3QncyByZWFsIG5hbWVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCB1cmwsIFJPT1QsIEluZmluaXR5KTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIC8vIEEgY2FjaGUtYnVzdGVyIG9uIGEgbG9jYWwgc3JjOiBgbmV4dCBzdGFydGAgcm91dGVzIHRoZSBocmVmIGFzIGEgcmVxdWVzdCwgc29cbiAgLy8gdGhlIHF1ZXJ5IGFuZCBmcmFnbWVudCBuZXZlciByZWFjaCB0aGUgZmlsZSBsb29rdXAuXG4gIGl0LmVhY2goW1xuICAgIFtcIi9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvbG9nby5wbmcjdG9wXCIsIFwibG9nby5wbmdcIl0sXG4gICAgW1wiL2xvZ28ucG5nP3Y9MiN0b3BcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvYmFzZS9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICAvLyBBIGA/YCB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUgYXJyaXZlcyBlbmNvZGVkIGFuZCBpcyBub3QgYSBxdWVyeS5cbiAgICBbXCIvd2hhdCUzRi5wbmc/dj0yXCIsIFwid2hhdD8ucG5nXCJdLFxuICBdKShcImtleXMgJXMgYnkgaXRzIHBhdGggYWxvbmVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgdXJsLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgbmFtZSB0aGF0IGlzbid0IHZhbGlkIHBlcmNlbnQtZW5jb2RpbmcgYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvMTAwJS5wbmdcIiwgUk9PVCwgSW5maW5pdHkpO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCIxMDAlLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIHRoZSBjb25jYXRlbmF0ZWQgYnVmZmVyLCBjb250ZW50IHR5cGUsIGFuZCBldGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL2pwZWdcIixcbiAgICAgIEVUYWc6ICdcInRoZS1ldGFnXCInLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28uanBnXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuYnVmZmVyLnRvU3RyaW5nKCkpLnRvQmUoXCJoZWxsb1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlKFwiaW1hZ2UvanBlZ1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmV0YWcpLnRvQmUoJ1widGhlLWV0YWdcIicpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgYW4gZW1wdHkgZXRhZyB3aGVuIFMzIGRvZXNuJ3QgcHJvdmlkZSBvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBudWxsLFxuICAgICAgRVRhZzogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28ucG5nXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXRhZykudG9CZShcIlwiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICAvLyBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCB3aGljaCBgbmV4dCBzdGFydGAgZW5mb3JjZXMgb24gbG9jYWwgc291cmNlcy5cbiAgaXQoXCJyZWZ1c2VzIGFuIG9iamVjdCB3aG9zZSBDb250ZW50TGVuZ3RoIGlzIG92ZXIgdGhlIGxpbWl0LCB1bnJlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc3Ryb3kgPSBqZXN0LmZuKCk7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogeyAuLi5hc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJuZXZlciByZWFkXCIpXSksIGRlc3Ryb3kgfSxcbiAgICAgIENvbnRlbnRMZW5ndGg6IDExLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL2JpZy5wbmdcIiwgUk9PVCwgMTApLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIGV4cGVjdChkZXN0cm95KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwic3RvcHMgcmVhZGluZyBvbmNlIHRoZSBieXRlcyByZWFkIHBhc3MgdGhlIGxpbWl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9iaWcucG5nXCIsIFJPT1QsIDQpLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIC8vIEF0IHRoZSBsaW1pdCBleGFjdGx5IGlzIGZpbmUuXG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiaGVsXCIpLCBCdWZmZXIuZnJvbShcImxvXCIpXSksXG4gICAgICBDb250ZW50TGVuZ3RoOiA1LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9vay5wbmdcIiwgUk9PVCwgNSk7XG4gICAgZXhwZWN0KHJlc3VsdC5idWZmZXIudG9TdHJpbmcoKSkudG9CZShcImhlbGxvXCIpO1xuICB9KTtcblxuICBpdChcInRocm93cyB3aGVuIFMzIHJldHVybnMgbm8gYm9keVwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoeyBCb2R5OiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvbWlzc2luZy5wbmdcIiwgUk9PVCwgSW5maW5pdHkpLFxuICAgICkucmVqZWN0cy50b1Rocm93KC9FbXB0eSByZXNwb25zZSBmcm9tIFMzLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZXh0cmFjdEV0YWdcIiwgKCkgPT4ge1xuICBjb25zdCBpbWFnZSA9IEJ1ZmZlci5mcm9tKFwibm90IHJlYWxseSBhIHBuZ1wiKTtcblxuICAvLyBXaGF0IG5leHQncyBvd24gYGV4dHJhY3RFdGFnYCByZXR1cm5zIGZvciB0aGVzZSBpbnB1dHMsIHJlY29yZGVkIGZyb21cbiAgLy8gMTYuNCdzIGBpbWFnZS1vcHRpbWl6ZXIvZXh0cmFjdC1ldGFnLmpzYDogYSBsaXRlcmFsLCBzbyB0aGUgdGVzdCBydW5zIG9uXG4gIC8vIGV2ZXJ5IHN1cHBvcnRlZCBgbmV4dGAsIGluY2x1ZGluZyB0aG9zZSB3aXRob3V0IHRoYXQgbW9kdWxlLlxuICBpdChcIm1hdGNoZXMgbmV4dCdzIG93biwgd2l0aCBhbmQgd2l0aG91dCBhbiB1cHN0cmVhbSBldGFnXCIsICgpID0+IHtcbiAgICBleHBlY3QoZXh0cmFjdEV0YWcoJ1cvXCJhYmNcIicsIGltYWdlKSkudG9CZShcIlZ5OGlZV0pqSWdcIik7XG4gICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIFtcIlwiLCBudWxsLCB1bmRlZmluZWRdKSB7XG4gICAgICBleHBlY3QoZXh0cmFjdEV0YWcobWlzc2luZywgaW1hZ2UpKS50b0JlKFxuICAgICAgICBcIjZRRTMwNTNqQk83N3ZuaUx4VFhINkM4bnE3LUFhVkJmdTlpcDNOeFBJQ1FcIixcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlc29sdmVFcnJvclJlc3BvbnNlXCIsICgpID0+IHtcbiAgaXQoXCJwcmVzZXJ2ZXMgdGhlIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlIGZyb20gYW4gSW1hZ2VFcnJvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgSW1hZ2VFcnJvcig0MDAsICdcInVybFwiIHBhcmFtZXRlciBpcyBub3QgYWxsb3dlZCcpO1xuXG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKGVycm9yLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICBtZXNzYWdlOiAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgbm90IGFsbG93ZWQnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIm1hcHMgYSBzb3VyY2Ugb3ZlciBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keSB0byBuZXh0IHN0YXJ0J3MgNDEzXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICByZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgSW1hZ2VUb29MYXJnZUVycm9yKFwiYmlnLnBuZ1wiKSwgSW1hZ2VFcnJvciksXG4gICAgKS50b0VxdWFsKHtcbiAgICAgIHN0YXR1c0NvZGU6IDQxMyxcbiAgICAgIG1lc3NhZ2U6ICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byA1MDAgZm9yIHVucmVjb2duaXplZCBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgRXJyb3IoXCJib29tXCIpLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShcIm5vdCBhbiBlcnJvclwiLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19