@liflig/cdk 3.5.3 → 3.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -432,7 +432,6 @@ class CognitoUserPoolAuthorizer extends constructs.Construct {
|
|
|
432
432
|
super(scope, id);
|
|
433
433
|
this.lambda = new lambdaNodejs.NodejsFunction(this, "AuthorizerFunction", {
|
|
434
434
|
entry: path.join(__dirname, `authorizers/cognito-user-pool-authorizer.${authorizerFileExtension}`),
|
|
435
|
-
depsLockFilePath: path.join(__dirname, "authorizers/package-lock.json"),
|
|
436
435
|
runtime: lambda.Runtime.NODEJS_22_X,
|
|
437
436
|
timeout: cdk.Duration.seconds(5),
|
|
438
437
|
environment: {
|
|
@@ -462,7 +461,6 @@ class BasicAuthAuthorizer extends constructs.Construct {
|
|
|
462
461
|
super(scope, id);
|
|
463
462
|
this.lambda = new lambdaNodejs.NodejsFunction(this, "BasicAuthLambda", {
|
|
464
463
|
entry: path.join(__dirname, `authorizers/basic-auth-authorizer.${authorizerFileExtension}`),
|
|
465
|
-
depsLockFilePath: path.join(__dirname, "authorizers/package-lock.json"),
|
|
466
464
|
description: "An authorizer for API-Gateway that checks Basic Auth credentials on requests",
|
|
467
465
|
runtime: lambda.Runtime.NODEJS_22_X,
|
|
468
466
|
environment: {
|
|
@@ -496,7 +494,6 @@ class CognitoUserPoolOrBasicAuthAuthorizer extends constructs.Construct {
|
|
|
496
494
|
super(scope, id);
|
|
497
495
|
this.lambda = new lambdaNodejs.NodejsFunction(this, "AuthorizerFunction", {
|
|
498
496
|
entry: path.join(__dirname, `authorizers/cognito-user-pool-or-basic-auth-authorizer.${authorizerFileExtension}`),
|
|
499
|
-
depsLockFilePath: path.join(__dirname, "authorizers/package-lock.json"),
|
|
500
497
|
runtime: lambda.Runtime.NODEJS_22_X,
|
|
501
498
|
timeout: cdk.Duration.seconds(5),
|
|
502
499
|
environment: {
|
|
@@ -596,4 +593,4 @@ function shortHash(str) {
|
|
|
596
593
|
// which is fine
|
|
597
594
|
return createHash("sha1").update(str).digest("hex").substring(0, 10);
|
|
598
595
|
}
|
|
599
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1hcGktZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGktZ2F0ZXdheS9odHRwLWFwaS1nYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBR2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUE7QUFFaEQsT0FBTyxLQUFLLEtBQUssTUFBTSw4QkFBOEIsQ0FBQTtBQUNyRCxPQUFPLEtBQUssSUFBSSxNQUFNLHNCQUFzQixDQUFBO0FBQzVDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFDMUMsT0FBTyxLQUFLLGNBQWMsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNoRSxPQUFPLEtBQUssWUFBWSxNQUFNLDJDQUEyQyxDQUFBO0FBQ3pFLE9BQU8sS0FBSyxXQUFXLE1BQU0sMENBQTBDLENBQUE7QUFFdkUsT0FBTyxLQUFLLFlBQVksTUFBTSwrQkFBK0IsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ25DLE9BQU8sS0FBSyxPQUFPLE1BQU0seUJBQXlCLENBQUE7QUFDbEQsT0FBTyxLQUFLLGNBQWMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUNqRSxPQUFPLEtBQUssR0FBRyxNQUFNLG9DQUFvQyxDQUFBO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUVuQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FB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QUFDO1NBQ3pFLENBQUE7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQ2hDLElBQUksRUFDSixvQ0FBb0MsRUFDcEM7WUFDRSxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUM7WUFDL0QsZUFBZSxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLG1EQUFtRCxDQUNwRDthQUNGO1NBQ0YsQ0FDRixDQUFBO1FBRUQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0NBQ0Y7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxTQUFTLENBQUMsR0FBVztJQUM1QixpR0FBaUc7SUFDakcsZ0JBQWdCO0lBQ2hCLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB0eXBlICogYXMgZWxiIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiXG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0IHR5cGUgKiBhcyBzcXMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zcXNcIlxuaW1wb3J0ICogYXMgYXBpZ3cgZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIlxuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIlxuaW1wb3J0ICogYXMgaW50ZWdyYXRpb25zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uc1wiXG5pbXBvcnQgKiBhcyBhdXRob3JpemVycyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mi1hdXRob3JpemVyc1wiXG5pbXBvcnQgdHlwZSB7IElVc2VyUG9vbCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29nbml0b1wiXG5pbXBvcnQgKiBhcyBsYW1iZGFOb2RlanMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCJcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCJcbmltcG9ydCAqIGFzIHJvdXRlNTNUYXJnZXRzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCJcbmltcG9ydCAqIGFzIGFjbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiXG5pbXBvcnQgeyB0YWdSZXNvdXJjZXMgfSBmcm9tIFwiLi4vdGFnc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCJcblxuY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpXG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSB7QGxpbmsgQXBpR2F0ZXdheX0gY29uc3RydWN0LlxuICpcbiAqIEBhdXRob3IgS3Jpc3RpYW4gUmVrc3RhZCA8a3JlQGNhcHJhY29uc3VsdGluZy5ubz5cbiAqIEBhdXRob3IgSGVybWFubiBNw7hya3JpZCA8aGVtQGxpZmxpZy5ubz5cbiAqL1xuZXhwb3J0IHR5cGUgQXBpR2F0ZXdheVByb3BzPEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IHtcbiAgLyoqIFNldHRpbmdzIGZvciB0aGUgZXh0ZXJuYWwtZmFjaW5nIHBhcnQgb2YgdGhlIEFQSS1HVy4gKi9cbiAgZG5zOiBBcGlHYXRld2F5RG5zUHJvcHNcblxuICAvKipcbiAgICogSWYgbm8gaW50ZWdyYXRpb24gaXMgc3BlY2lmaWVkIGZvciBhIHJvdXRlLCB0aGlzIGludGVncmF0aW9uIGlzIHVzZWQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgSW50ZWdyYXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICovXG4gIGRlZmF1bHRJbnRlZ3JhdGlvbj86IEludGVncmF0aW9uUHJvcHNcblxuICAvKipcbiAgICogSWYgbm8gYXV0aG9yaXphdGlvbiBpcyBzcGVjaWZpZWQgZm9yIGEgcm91dGUsIHRoaXMgYXV0aG9yaXphdGlvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIEF1dGhvcml6YXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICovXG4gIGRlZmF1bHRBdXRob3JpemF0aW9uPzogQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUPlxuXG4gIHJvdXRlczogQXBpR2F0ZXdheVJvdXRlPEF1dGhTY29wZXNUPltdXG5cbiAgLyoqXG4gICAqIFRoZSBBUEktR1cgYWNjZXNzIGxvZ3MgZm9yIHRoZSBgJGRlZmF1bHRgIHN0YWdlIGFyZSBrZXB0LlxuICAgKiBUaGlzIGhhcyBvcHRpb25zIGZvciB0aGUgbG9ncy5cbiAgICovXG4gIGFjY2Vzc0xvZ3M/OiBBcGlHYXRld2F5QWNjZXNzTG9nc1Byb3BzXG5cbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHJvdXRlLWxldmVsIG1ldHJpY3MuXG4gICAqIFRoaXMgY2FuIGluY3JlYXNlIENsb3VkV2F0Y2ggY29zdHMgd2hlbiBub3QgZGlzYWJsZWQuXG4gICAqXG4gICAqIFNlZSBbQVdTOiBXb3JraW5nIHdpdGggbWV0cmljcyBmb3IgSFRUUCBBUElzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbWV0cmljcy5odG1sP2ljbXBpZD1hcGlnYXRld2F5X2NvbnNvbGVfaGVscCM6fjp0ZXh0PWFuZCUyMHN0YWdlJTIwSUQuLSxBcGlJZCUyQyUyMFN0YWdlJTJDJTIwUm91dGUsLUZpbHRlcnMlMjBBUEklMjBHYXRld2F5KVxuICAgKiBmb3IgbW9yZSBpbmZvLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBkZXRhaWxlZE1ldHJpY3M/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFRocm90dGxpbmcgb2YgcmVxdWVzdHMuXG4gICAqIElmIG5vdCBzZXQsIHRoZSBBV1MgZGVmYXVsdCBvZiA1MDAwIGJ1cnN0IGFuZCAxMDAwMCByYXRlIGlzIHVzZWQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHRocm90dGxpbmcgaXMgcGVyLWFjY291bnQsIGFuZCBjb3VudHMgYWxsIEFQSXMgaW4gdGhlIGFjY291bnQgYW5kIHJlZ2lvbi5cbiAgICogSWYgeW91IGhhdmUgYW5vdGhlciBBUEkgaW4gdGhpcyByZWdpb24gZ2V0dGluZyAxMF8wMDAgcmVxdWVzdCByYXRlLCBpdCBtYXkgaW1wYWN0IHRoaXMgQVBJIGFzIHdlbGwuXG4gICAqL1xuICB0aHJvdHRsaW5nPzoge1xuICAgIC8qKlxuICAgICAqIEdvaW5nIG92ZXIgYDVfMDAwYCBtYXkgcmVxdWlyZSB5b3UgdG8gY29udGFjdCBBV1MgU3VwcG9ydCAtIHRoZXkgYXJlIGFjY291bnQgYm91bmQuXG4gICAgICovXG4gICAgYnVyc3Q/OiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBHb2luZyBvdmVyIGAxMF8wMDBgIG1heSByZXF1aXJlIHlvdSB0byBjb250YWN0IEFXUyBTdXBwb3J0IC0gdGhleSBhcmUgYWNjb3VudCBib3VuZC5cbiAgICAgKi9cbiAgICByYXRlPzogbnVtYmVyXG4gIH1cblxuICAvKipcbiAgICogU2V0cyBDT1JTIGhlYWRlcnMgb24gcmVzcG9uc2VzIGZyb20gdGhlIEFQSSBHYXRld2F5IHRvIGFsbG93IGFsbCBvcmlnaW5zLCBoZWFkZXJzIGFuZCBtZXRob2RzLlxuICAgKiBVc2VmdWwgaWYgeW91ciBBUEkgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IGFueSBicm93c2VyLlxuICAgKi9cbiAgY29yc0FsbG93QWxsPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBJZiBzb21lIHNldHRpbmdzIGluIHRoaXMgY29uc3RydWN0IGRvIG5vdCB3b3JrIGZvciB5b3UsIHRoaXMgaXMgYW4gZXNjYXBlIGhhdGNoIG1lY2hhbmlzbSB0b1xuICAgKiBvdmVycmlkZSBhbnl0aGluZy5cbiAgICovXG4gIHByb3BzT3ZlcnJpZGU/OiB7XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgc2V0dGluZ3MgZm9yIHRoZSB7QGxpbmsgYXBpZ3cuSHR0cEFwaX0gKGFjY2Vzc2libGUgaW4ge0BsaW5rIEFwaUdhdGV3YXkuaHR0cEFwaX0pLlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgZnJvbnRlbmQgYWNjZXNzaW5nIHRoaXMgQVBJLCB5b3UgbWlnaHQgd2FudCB0byBzZXRcbiAgICAgKiBbQ09SUyBwcmVmbGlnaHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YxL2RvY3MvYXdzLWFwaWdhdGV3YXl2Mi1yZWFkbWUuaHRtbCNjcm9zcy1vcmlnaW4tcmVzb3VyY2Utc2hhcmluZy1jb3JzKVxuICAgICAqIHNldHRpbmdzLlxuICAgICAqL1xuICAgIGh0dHBBcGk/OiBQYXJ0aWFsPGFwaWd3Lkh0dHBBcGlQcm9wcz5cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBBcGlHYXRld2F5RG5zUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBPbmx5IHRoZSBzdWJkb21haW4gcHJlZml4LCB3aGljaCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UuXG4gICAqIEV4YW1wbGU6IFN1YmRvbWFpbiBgcHJvZHVjdGAgd291bGQgZ2l2ZSB0aGUgZW5kIHJlc3VsdCBvZiBhbiBBUEktR1cgd2l0aFxuICAgKiBgcHJvZHVjdC5wbGF0Zm9ybS5leGFtcGxlLm5vYC5cbiAgICovXG4gIHN1YmRvbWFpbjogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEhvc3RlZCBab25lIGZvciB0aGUgZXh0ZXJuYWwgZmFjaW5nIGRvbWFpbi5cbiAgICogVGhpcyBpcyB3aGVyZSByb3V0ZXMgd2lsbCBiZSBjcmVhdGVkLCB0byByZWRpcmVjdCBjb25zdW1lcnMgdG8gdGhlIEFQSS1HVy5cbiAgICogRm9yIGV4YW1wbGUgYSBIWiBmb3IgYHBsYXRmb3JtLmV4YW1wbGUubm9gLlxuICAgKi9cbiAgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZVxuXG4gIC8qKlxuICAgKiBUaGUgVGltZSBUbyBMaXZlIChUVEwpIGZvciB0aGUgcHVibGljIEROUyBBIHJlY29yZCB0aGF0IHdpbGwgZXhwb3NlIHRoZSBBUEktR1cuXG4gICAqIFRoaXMgaXMgaG93IGxvbmcgRE5TIHNlcnZlcnMgd2lsbCBjYWNoZSB0aGUgcmVjb3JkLlxuICAgKlxuICAgKiBBIGxvbmcgVFRMIChob3VycykgaXMgYmVuZWZpY2lhbCB0byBETlMgc2VydmVycywgYnV0IG1ha2VzIGRldmVsb3BlcnMgKHlvdSkgd2FpdCBsb25nZXIgd2hlblxuICAgKiBkb2luZyBjaGFuZ2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCA1IG1pbnV0ZXNcbiAgICovXG4gIHR0bD86IGNkay5EdXJhdGlvblxufVxuXG5leHBvcnQgdHlwZSBBcGlHYXRld2F5Um91dGU8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0ge1xuICAvKiogVGhlIHBhdGggb2YgdGhlIHJvdXRlIHRvIGV4cG9zZSB0aHJvdWdoIHRoZSBBUEkgR2F0ZXdheS4gVXNlIFwiL1wiIGZvciB0aGUgcm9vdCByb3V0ZS4gKi9cbiAgcGF0aDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHdlIG9ubHkgZm9yd2FyZCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSByb3V0ZSdzIHBhdGggZXhhY3RseS4gU28gZm9yIGEgcm91dGUgd2l0aFxuICAgKiBwYXRoIGAvYXBpL3VzZXJzYCwgYSByZXF1ZXN0IHRvIGAvYXBpL3VzZXJzYCB3aWxsIGJlIGZvcndhcmRlZCwgYnV0IGEgcmVxdWVzdCB0b1xuICAgKiBgL2FwaS91c2Vycy9hZG1pbmAgd2lsbCBub3QuIElmIHlvdSB3YW50IHRvIGZvcndhcmQgcmVxdWVzdHMgdG8gYWxsIHN1Yi1wYXRocyB1bmRlciB0aGUgcm91dGUnc1xuICAgKiBwYXRoLCB5b3UgY2FuIHNldCB0aGlzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmNsdWRlU3VicGF0aHM/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQIG1ldGhvZCB0byBleHBvc2UuIGBBTllgIGV4cG9zZXMgYWxsIEhUVFAgbWV0aG9kcyBvbiB0aGUgcGF0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJBTllcIlxuICAgKi9cbiAgbWV0aG9kPzogSHR0cE1ldGhvZFxuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGhhdCB0aGUgcm91dGUgd2lsbCBmb3J3YXJkIHRvLiBTZWUge0BsaW5rIEludGVncmF0aW9uUHJvcHN9IGZvciB0aGUgYXZhaWxhYmxlXG4gICAqIG9wdGlvbnMuXG4gICAqXG4gICAqIElmIHVuZGVmaW5lZCwgdXNlcyB0aGUge0BsaW5rIEFwaUdhdGV3YXlQcm9wcy5kZWZhdWx0SW50ZWdyYXRpb259LlxuICAgKi9cbiAgaW50ZWdyYXRpb24/OiBJbnRlZ3JhdGlvblByb3BzXG5cbiAgLyoqXG4gICAqIEhvdyByZXF1ZXN0cyBvbiB0aGUgcm91dGUgYXJlIGF1dGhlbnRpY2F0ZWQuIFNlZSB7QGxpbmsgQXV0aG9yaXphdGlvblByb3BzfSBmb3IgdGhlIGF2YWlsYWJsZVxuICAgKiBvcHRpb25zLlxuICAgKlxuICAgKiBJZiB1bmRlZmluZWQsIHVzZXMgdGhlIHtAbGluayBBcGlHYXRld2F5UHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb259LlxuICAgKi9cbiAgYXV0aG9yaXphdGlvbj86IEF1dGhvcml6YXRpb25Qcm9wczxBdXRoU2NvcGVzVD5cbn1cblxuZXhwb3J0IHR5cGUgSHR0cE1ldGhvZCA9XG4gIHwgXCJBTllcIlxuICB8IFwiR0VUXCJcbiAgfCBcIlBPU1RcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkRFTEVURVwiXG4gIHwgXCJPUFRJT05TXCJcbiAgfCBcIkhFQURcIlxuXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvblByb3BzID1cbiAgLyoqIFVzZSB0aGlzIHdoZW4gY29ubmVjdGluZyB0aGUgcm91dGUgdG8gYW4gQUxCIChBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKS4gKi9cbiAgfCAoeyB0eXBlOiBcIkFMQlwiIH0gJiBBbGJJbnRlZ3JhdGlvblByb3BzKVxuICAvKiogVXNlIHRoaXMgd2hlbiBjb25uZWN0aW5nIHJvdXRlIHRvIGEgTGFtYmRhLiAqL1xuICB8ICh7IHR5cGU6IFwiTGFtYmRhXCIgfSAmIExhbWJkYUludGVncmF0aW9uUHJvcHMpXG4gIC8qKiBVc2UgdGhpcyB3aGVuIGNvbm5lY3RpbmcgYSByb3V0ZSB0byBzZW5kIHRvIGFuIFNRUyBxdWV1ZS4gKi9cbiAgfCAoeyB0eXBlOiBcIlNRU1wiIH0gJiBTcXNJbnRlZ3JhdGlvblByb3BzKVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgQVBJLUdXIC0+IEFMQiAoQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcikgaW50ZWdyYXRpb24uXG4gKlxuICogU2VlIHRoZSBub3RlIG9uIHtAbGluayBBcGlHYXRld2F5fSBhYm91dCB0aGUgbG9hZCBiYWxhbmNlciBzZWN1cml0eSBncm91cC5cbiAqL1xuZXhwb3J0IHR5cGUgQWxiSW50ZWdyYXRpb25Qcm9wcyA9IHtcbiAgLyoqXG4gICAqIEEgbGlzdGVuZXIgb24gZS5nLiBwb3J0IDQ0MyAoSFRUUFMpLlxuICAgKlxuICAgKiBTZWUgdGhlIG5vdGUgb24ge0BsaW5rIEFwaUdhdGV3YXl9IGFib3V0IHRoZSBsb2FkIGJhbGFuY2VyIHNlY3VyaXR5IGdyb3VwLlxuICAgKi9cbiAgbG9hZEJhbGFuY2VyTGlzdGVuZXI6IGVsYi5JQXBwbGljYXRpb25MaXN0ZW5lclxuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBuYW1lIChkb21haW4gbmFtZSkgb2YgdGhlIGJhY2tlbmQgc2VydmljZSB0aGF0IHdlIHdhbnQgdG8gcmVhY2ggdGhyb3VnaCB0aGUgQUxCLlxuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgdG86XG4gICAqIC0gVmVyaWZ5IHRoZSBIVFRQUyBjZXJ0aWZpY2F0ZSBvZiB0aGUgYmFja2VuZCBzZXJ2aWNlLCBzbyB0aGF0IHRoZSByZXF1ZXN0IGZvcndhcmRlZCBmcm9tXG4gICAqICAgQVBJLUdXIGNhbiB1c2UgVExTXG4gICAqIC0gU2V0IHRoZSBgSG9zdGAgaGVhZGVyIG9uIHRoZSByZXF1ZXN0IHdoZW4gZm9yd2FyZGluZyB0byB0aGUgQUxCLCBzbyB0aGF0IHJlcXVlc3RzIGNhbiBiZVxuICAgKiAgIHJvdXRlZCB0byB0aGUgY29ycmVjdCBUYXJnZXQgR3JvdXBcbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYDxzZXJ2aWNlPi5zdGFnaW5nLm15LXByb2plY3QubGlmbGlnLmlvYCAobm90IHByZWZpeGVkIGJ5IGBodHRwczovL2ApLlxuICAgKi9cbiAgaG9zdE5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIHVzZWQgYnkgdGhlIEFMQi4gVGhlIEFQSS1HVyBpbnRlZ3JhdGlvbiB3aWxsIGNvbm5lY3QgdG8gdGhlIEFMQiB1c2luZyBhIFZQQyBMaW5rIGZvclxuICAgKiB0aGlzIFZQQy5cbiAgICpcbiAgICogU2VlIHRoZSBub3RlIG9uIHtAbGluayBBcGlHYXRld2F5fSBhYm91dCB0aGUgbG9hZCBiYWxhbmNlciBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIHZwYzogZWMyLklWcGNcblxuICAvKipcbiAgICogQSBzZWN1cml0eSBncm91cCAoU0cpIHRoYXQgYWxsb3dzIGluY29taW5nIHRyYWZmaWMgdG8gdGhlIEFMQi4gV2lsbCBiZSB1c2VkIGJ5IHRoZSBWUEMgbGluaywgc29cbiAgICogdGhlIEFQSS1HVyBpbnRlZ3JhdGlvbiBjYW4gY29ubmVjdC5cbiAgICpcbiAgICogVGhpcyBpcyB1c3VhbGx5IHRoZSBzYW1lIFNHIGFzIHRoZSBBTEIgdXNlcywgYmVjYXVzZSB0aGV5IGhhdmUgYSBydWxlIHRoYXQgYWxsb3dzIHRyYWZmaWMgZnJvbVxuICAgKiBvdGhlcnMgaW4gdGhlIHNhbWUgU0cuXG4gICAqXG4gICAqIFNlZSB0aGUgbm90ZSBvbiB7QGxpbmsgQXBpR2F0ZXdheX0gYWJvdXQgdGhlIGxvYWQgYmFsYW5jZXIgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICBzZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXBcblxuICAvKipcbiAgICogTWFwIHJlcXVlc3QgcGFyYW1ldGVycyAoYWRkL292ZXJ3cml0ZSBwYXRoL2hlYWRlcnMvcXVlcnkgcGFyYW1zKSBiZWZvcmUgZm9yd2FyZGluZyB0byB0aGVcbiAgICogYmFja2VuZC5cbiAgICpcbiAgICogU2VlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktcGFyYW1ldGVyLW1hcHBpbmcuaHRtbH1cbiAgICogZm9yIG1vcmUgb24gdGhpcy4gUmVhZCB0aGUgJ1Jlc2VydmVkIGhlYWRlcnMnIHNlY3Rpb24gZm9yIHdoaWNoIGhlYWRlcnMgY2Fubm90IGJlIG92ZXJyaWRkZW4uXG4gICAqIEluIGFkZGl0aW9uIHRvIHRoZSBBV1MtcmVzZXJ2ZWQgaGVhZGVycywgeW91IHNob3VsZCBub3Qgb3ZlcnJpZGUgdGhlICdIb3N0JyBoZWFkZXIgZWl0aGVyLCBhc1xuICAgKiB0aGF0J3MgdXNlZCBmb3Igcm91dGluZyB0aGUgcmVxdWVzdCB0byB0aGUgY29ycmVjdCBzZXJ2aWNlIGJlaGluZCB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICpcbiAgICogIyMjIEV4YW1wbGU6XG4gICAqXG4gICAqIEFkZGluZyBhIGhlYWRlcjpcbiAgICogYGBgXG4gICAqIG1hcFBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzKSA9PiBwYXJhbWV0ZXJzLm92ZXJ3cml0ZUhlYWRlcihcbiAgICogICAgXCJYLU15LUN1c3RvbS1IZWFkZXJcIixcbiAgICogICAgYXBpZ3cuTWFwcGluZ1ZhbHVlLmN1c3RvbShcIm15LWN1c3RvbS12YWx1ZVwiKSxcbiAgICogKVxuICAgKiBgYGBcbiAgICpcbiAgICogT3ZlcndyaXRpbmcgdGhlIHBhdGggKGlmLCBmb3IgZXhhbXBsZSwgeW91IGNvbmZpZ3VyZSBhIGAvdXNlcnNgIHJvdXRlIG9uIHRoZSBBUEkgR2F0ZXdheSB0aGF0XG4gICAqIHlvdSB3YW50IHRvIGZvcndhcmQgdG8gYC9hcGkvdXNlcnNgIG9uIHRoZSBiYWNrZW5kKTpcbiAgICogYGBgXG4gICAqIG1hcFBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzKSA9PiBwYXJhbWV0ZXJzLm92ZXJ3cml0ZVBhdGgoXCIvYXBpL3VzZXJzXCIpXG4gICAqIGBgYFxuICAgKi9cbiAgbWFwUGFyYW1ldGVycz86IChwYXJhbWV0ZXJzOiBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKSA9PiB2b2lkXG59XG5cbmV4cG9ydCB0eXBlIExhbWJkYUludGVncmF0aW9uUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGludGVncmF0aW9uIHVzZXMgdGhlIFYyIHBheWxvYWQgZm9ybWF0OlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWRldmVsb3AtaW50ZWdyYXRpb25zLWxhbWJkYS5odG1sfVxuICAgKlxuICAgKiBJZiB3cml0aW5nIHRoZSBMYW1iZGEgaW4gVHlwZVNjcmlwdCwgdGhpcyBtZWFucyB5b3Ugc2hvdWxkIHVzZSBgQVBJR2F0ZXdheVByb3h5RXZlbnRWMmAgYXMgdGhlXG4gICAqIHJlcXVlc3QgdHlwZSwgYW5kIGBBUElHYXRld2F5UHJveHlSZXN1bHRWMmAgYXMgdGhlIHJlc3BvbnNlIHR5cGUuXG4gICAqL1xuICBsYW1iZGE6IGxhbWJkYS5JRnVuY3Rpb25cbn1cblxuZXhwb3J0IHR5cGUgU3FzSW50ZWdyYXRpb25Qcm9wcyA9IHtcbiAgcXVldWU6IHNxcy5JUXVldWVcblxuICAvKipcbiAgICogTWVzc2FnZSBhdHRyaWJ1dGVzIHRvIHBhc3Mgb24gdG8gU1FTLiBUaGUga2V5cyBpbiB0aGlzIG9iamVjdCBhcmUgdGhlIG5hbWVzIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICAgKiBFYWNoIGF0dHJpYnV0ZSBoYXMgYSBEYXRhVHlwZSBmaWVsZCwgYW5kIGVpdGhlciBhIFN0cmluZ1ZhbHVlIG9yIEJpbmFyeVZhbHVlIGZpZWxkIGRlcGVuZGluZyBvblxuICAgKiBpdHMgdHlwZS4gU2VlIEFXUyBkb2NzOlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX01lc3NhZ2VBdHRyaWJ1dGVWYWx1ZS5odG1sXG4gICAqXG4gICAqIEluIHRoZSBTdHJpbmdWYWx1ZSBmaWVsZCwgeW91IGNhbiBkbyBBUEkgR2F0ZXdheSBwYXJhbWV0ZXIgbWFwcGluZzpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLXBhcmFtZXRlci1tYXBwaW5nLmh0bWxcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgXG4gICAqIG1lc3NhZ2VBdHRyaWJ1dGVzOiB7XG4gICAqICAgY2xpZW50SWQ6IHtcbiAgICogICAgIERhdGFUeXBlOiBcIlN0cmluZ1wiLFxuICAgKiAgICAgU3RyaW5nVmFsdWU6IFwiJHtjb250ZXh0LmF1dGhvcml6ZXIuY2xpZW50SWR9XCIsXG4gICAqICAgfSxcbiAgICogfSxcbiAgICogYGBgXG4gICAqL1xuICBtZXNzYWdlQXR0cmlidXRlcz86IHtcbiAgICBbYXR0cmlidXRlTmFtZTogc3RyaW5nXTpcbiAgICAgIHwgeyBEYXRhVHlwZTogXCJTdHJpbmdcIiB8IFwiTnVtYmVyXCI7IFN0cmluZ1ZhbHVlOiBzdHJpbmcgfVxuICAgICAgfCB7XG4gICAgICAgICAgRGF0YVR5cGU6IFwiQmluYXJ5XCJcbiAgICAgICAgICAvKiogQmFzZTY0LWVuY29kZWQgYmluYXJ5IGRhdGEgb2JqZWN0LiAqL1xuICAgICAgICAgIEJpbmFyeVZhbHVlOiBzdHJpbmdcbiAgICAgICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIEF1dGhvcml6YXRpb25Qcm9wczxBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPVxuICAvKipcbiAgICogTm8gYXV0aGVudGljYXRpb24sIGZvciB3aGVuIHlvdSB3YW50IGEgZnVsbHkgcHVibGljIHJvdXRlIChvciBoYW5kbGUgYXV0aGVudGljYXRpb24gaW4gdGhlXG4gICAqIGJhY2tlbmQgaW50ZWdyYXRpb24pLlxuICAgKi9cbiAgfCB7IHR5cGU6IFwiTk9ORVwiIH1cbiAgLyoqXG4gICAqIEFXUyBJQU0gYXV0aG9yaXphdGlvbi5cbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWFjY2Vzcy1jb250cm9sLWlhbS5odG1sXG4gICAqL1xuICB8IHsgdHlwZTogXCJJQU1cIiB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIHJlYWRzIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFjY2VzcyB0b2tlbj5gIGhlYWRlclxuICAgKiBhbmQgdmVyaWZpZXMgdGhlIHRva2VuIGFnYWluc3QgYSBDb2duaXRvIHVzZXIgcG9vbC5cbiAgICovXG4gIHwgKHtcbiAgICAgIHR5cGU6IFwiQ09HTklUT19VU0VSX1BPT0xcIlxuICAgIH0gJiBDb2duaXRvVXNlclBvb2xBdXRob3JpemVyUHJvcHM8QXV0aFNjb3Blc1Q+KVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCByZWFkcyBgQXV0aG9yaXphdGlvbjogQmFzaWMgPGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzPmBcbiAgICogaGVhZGVyIGFuZCB2ZXJpZmllcyB0aGUgY3JlZGVudGlhbHMgYWdhaW5zdCBhIGdpdmVuIHNlY3JldC5cbiAgICovXG4gIHwgKHsgdHlwZTogXCJCQVNJQ19BVVRIXCIgfSAmIEJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wcylcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggYWxsb3dzIGJvdGg6XG4gICAqIC0gYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgaGVhZGVyLCBmb3Igd2hpY2ggdGhlIHRva2VuIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGVcbiAgICogICBnaXZlbiBDb2duaXRvIHVzZXIgcG9vbFxuICAgKiAtIGBBdXRob3JpemF0aW9uOiBCYXNpYyA8YmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbHM+YCBoZWFkZXIsIGZvciB3aGljaCB0aGUgY3JlZGVudGlhbHMgYXJlXG4gICAqICAgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjcmVkZW50aWFscyBmcm9tIHRoZSBnaXZlbiBiYXNpYyBhdXRoIHNlY3JldCBuYW1lXG4gICAqXG4gICAqIElmIGVpdGhlciBvZiB0aGVzZSBhcmUgZ2l2ZW4gYW5kIHZhbGlkLCB0aGUgcmVxdWVzdCBpcyBhdXRoZW50aWNhdGVkLlxuICAgKi9cbiAgfCAoe1xuICAgICAgdHlwZTogXCJDT0dOSVRPX1VTRVJfUE9PTF9PUl9CQVNJQ19BVVRIXCJcbiAgICB9ICYgQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyUHJvcHM8QXV0aFNjb3Blc1Q+KVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBhdXRob3JpemVyIHdpdGggdGhlIGdpdmVuIExhbWJkYSBmdW5jdGlvbi4gVXNlIHRoaXMgaWYgeW91IGhhdmUgY3VzdG9tXG4gICAqIGF1dGhvcml6YXRpb24gbG9naWMsIGFuZCB0aGUgb3RoZXIgYXV0aG9yaXplcnMgZnJvbSB0aGlzIGNvbnN0cnVjdCBkb24ndCBtZWV0IHlvdXIgbmVlZHMuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1sYW1iZGEtYXV0aG9yaXplci5odG1sXG4gICAqL1xuICB8ICh7IHR5cGU6IFwiQ1VTVE9NX0xBTUJEQV9BVVRIT1JJWkVSXCIgfSAmIEN1c3RvbUxhbWJkYUF1dGhvcml6ZXJQcm9wcylcblxuZXhwb3J0IHR5cGUgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplclByb3BzPFxuICBBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gPSB7XG4gIHVzZXJQb29sOiBJVXNlclBvb2xcblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhhdCBhY2Nlc3MgdG9rZW4gY2xhaW1zIGNvbnRhaW4gdGhlIGdpdmVuIHNjb3BlLlxuICAgKlxuICAgKiBXaGVuIGRlZmluZWQgYXMgcGFydCBvZiBhIHJlc291cmNlIHNlcnZlciwgc2NvcGVzIGFyZSBvbiB0aGUgZm9ybWF0OlxuICAgKiBge3Jlc291cmNlIHNlcnZlciBpZGVudGlmaWVyfS97c2NvcGUgbmFtZX1gLCBlLmcuIGBleHRlcm5hbC92aWV3X3VzZXJzYC5cbiAgICpcbiAgICogVG8gZ2V0IG1vcmUgdHlwZSBzYWZldHkgb24gdGhpcyBwYXJhbWV0ZXIsIHNlZSB0aGUgZG9jcyBmb3IgdGhlIGBBdXRoU2NvcGVzVGAgdHlwZSBwYXJhbWV0ZXIgb25cbiAgICoge0BsaW5rIEFwaUdhdGV3YXl9LlxuICAgKi9cbiAgcmVxdWlyZWRTY29wZT86IEF1dGhTY29wZXNUXG5cbiAgLyoqXG4gICAqIE5hbWUgb2Ygc2VjcmV0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgdGhhdCBzdG9yZXMgYmFzaWMgYXV0aCBjcmVkZW50aWFscyBmb3IgdGhlIGJhY2tlbmRcbiAgICogc2VydmljZSwgdG8gYmUgZm9yd2FyZGVkIHRvIHRoZSBiYWNrZW5kIGlmIENvZ25pdG8gdXNlciBwb29sIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZC5cbiAgICpcbiAgICogVGhlIHNlY3JldCB2YWx1ZSBtdXN0IGZvbGxvdyB0aGlzIGZvcm1hdDpcbiAgICogYGBganNvblxuICAgKiB7IFwidXNlcm5hbWVcIjogXCI8dXNlcm5hbWU+XCIsIFwicGFzc3dvcmRcIjogXCI8cGFzc3dvcmQ+XCIgfVxuICAgKiBgYGBcbiAgICpcbiAgICogVGhpcyBwcm9wIHNvbHZlcyB0aGUgZm9sbG93aW5nIHVzZS1jYXNlOlxuICAgKiAtIFlvdSB3YW50IHRvIGRvIENvZ25pdG8gdXNlciBwb29sIGF1dGhlbnRpY2F0aW9uIGluIHRoZSBBUEkgR2F0ZXdheVxuICAgKiAtIFlvdSB3YW50IGFuIGFkZGl0aW9uYWwgYXV0aCBjaGVjayBpbiB0aGUgYmFja2VuZCwgYnV0IHlvdSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aCBDb2duaXRvXG4gICAqICAgdGhlcmVcbiAgICogLSBUaGUgYmFja2VuZCB1c2VzIGJhc2ljIGF1dGhcbiAgICpcbiAgICogVGhpcyBwcm9wIHNvbHZlcyB0aGlzIGJ5IGxldHRpbmcgeW91IHNwZWNpZnkgY3JlZGVudGlhbHMgdG8gcGFzcyB0byB0aGUgYmFja2VuZCBhZnRlciBBUEktR1dcbiAgICogYXV0aGVudGljYXRpb24gc3VjY2VlZHMuIFlvdSBjYW4gcGFzcyB0aGUgZW5jb2RlZCBjcmVkZW50aWFscyB0aHJvdWdoXG4gICAqIHtAbGluayBBbGJJbnRlZ3JhdGlvblByb3BzLm1hcFBhcmFtZXRlcnN9LCB1c2luZyB0aGUgYGF1dGhvcml6ZXIuaW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyYFxuICAgKiBjb250ZXh0IHZhcmlhYmxlLCBsaWtlIHNvOlxuICAgKiBgYGBcbiAgICogbWFwUGFyYW1ldGVyczogKHBhcmFtZXRlcnMpID0+IHBhcmFtZXRlcnMub3ZlcndyaXRlSGVhZGVyKFxuICAgKiAgIC8vICdBdXRob3JpemF0aW9uJyBoZWFkZXIgY2Fubm90IGJlIG92ZXJyaWRkZW4sIHNvIHdlIHVzZSBhIGN1c3RvbSBoZWFkZXJcbiAgICogICBcIlgtSW50ZXJuYWwtQXV0aG9yaXphdGlvblwiLFxuICAgKiAgIGFwaWd3Lk1hcHBpbmdWYWx1ZS5jb250ZXh0VmFyaWFibGUoXCJhdXRob3JpemVyLmludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlclwiKSxcbiAgICogKVxuICAgKiBgYGBcbiAgICogVGhlIGJhY2tlbmQgY2FuIHRoZW4gY2hlY2sgdGhlIGBYLUludGVybmFsLUF1dGhvcml6YXRpb25gIGhlYWRlci5cbiAgICovXG4gIGNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wcyA9IHtcbiAgLyoqXG4gICAqIE5hbWUgb2Ygc2VjcmV0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgdGhhdCBzdG9yZXMgYmFzaWMgYXV0aCBjcmVkZW50aWFscy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgZm9yIHRoZSBzZWNyZXQgdmFsdWU6XG4gICAqIC0gU2luZ2xlIHVzZXJuYW1lIGFuZCBwYXNzd29yZDpcbiAgICogICBgYGBqc29uXG4gICAqICAgeyBcInVzZXJuYW1lXCI6IFwiPHVzZXJuYW1lPlwiLCBcInBhc3N3b3JkXCI6IFwiPHBhc3N3b3JkPlwiIH1cbiAgICogICBgYGBcbiAgICogLSBBcnJheSBvZiB1c2VybmFtZSArIHBhc3N3b3JkIG9iamVjdHM6XG4gICAqICAgYGBganNvblxuICAgKiAgIHsgXCJjcmVkZW50aWFsc1wiOiBcIlt7XFxcInVzZXJuYW1lXFxcIjpcXFwiPHVzZXItMT5cXFwiLFxcXCJwYXNzd29yZFxcXCI6XFxcInBhc3N3b3JkLTFcXFwifSx7XFxcInVzZXJuYW1lXFxcIjpcXFwiPHVzZXItMj5cXFwiLFxcXCJwYXNzd29yZFxcXCI6XFxcIjxwYXNzd29yZC0yPlxcXCJ9XVwiIH1cbiAgICogICBgYGBcbiAgICogICAtIFRoZSB2YWx1ZSBvZiB0aGUgYGNyZWRlbnRpYWxzYCBmaWVsZCBpcyBhIHN0cmluZywgd2l0aCBhIHN0cmluZ2lmaWVkLCBlc2NhcGVkIEpTT04gYXJyYXkgb2ZcbiAgICogICAgIG9iamVjdHMgd2l0aCBgdXNlcm5hbWVgIGFuZCBgcGFzc3dvcmRgIGZpZWxkcy5cbiAgICogICAtIFRoZSByZWFzb24gdGhhdCB0aGlzIHNlY29uZCBmb3JtYXQgc3RvcmVzIHN0cmluZ2lmaWVkIEpTT04gX2luc2lkZV8gSlNPTiwgaXMgZHVlIHRvIGFcbiAgICogICAgIGxpbWl0YXRpb24gaW4gTGlmbGlnJ3MgYGxvYWQtc2VjcmV0c2AgbGlicmFyeSwgd2hpY2ggb25seSBhbGxvd3Mgc3RvcmluZyBzdHJpbmcgdmFsdWVzLlxuICAgKiAtIEFycmF5IG9mIGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzOlxuICAgKiAgIGBgYGpzb25cbiAgICogICB7IFwiY3JlZGVudGlhbHNcIjogXCJbXFxcIjxlbmNvZGVkLWNyZWRlbnRpYWwtMT5cXFwiLFxcXCI8ZW5jb2RlZC1jcmVkZW50aWFsLTI+XFxcIl1cIiB9XG4gICAqICAgYGBgXG4gICAqICAgLSBFYWNoIGVsZW1lbnQgaXMgZW5jb2RlZCBmcm9tIGA8dXNlcm5hbWU+OjxwYXNzd29yZD5gLlxuICAgKiAgIC0gVGhlIGFycmF5IGlzIHN0cmluZ2lmaWVkIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYWJvdmUuXG4gICAqXG4gICAqIElmIHRoZSBzZWNyZXQgdXNlcyBvbmUgb2YgdGhlIGFycmF5IGZvcm1hdHMsIHRoZSBhdXRob3JpemVyIHdpbGwgbWF0Y2ggdGhlIHJlcXVlc3Qnc1xuICAgKiBBdXRob3JpemF0aW9uIGhlYWRlciBhZ2FpbnN0IGFueSBvbmUgb2YgdGhlIGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgY3JlZGVudGlhbHNTZWNyZXROYW1lOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyUHJvcHM8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPiA9IHtcbiAgdXNlclBvb2w6IElVc2VyUG9vbFxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHNlY3JldCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIHRoYXQgc3RvcmVzIGJhc2ljIGF1dGggY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgQmFzaWNBdXRoQXV0aG9yaXplclByb3BzLmNyZWRlbnRpYWxzU2VjcmV0TmFtZX0gZm9yIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cy5cbiAgICovXG4gIGJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGF0IGFjY2VzcyB0b2tlbiBjbGFpbXMgY29udGFpbiB0aGUgZ2l2ZW4gc2NvcGUuIE9ubHkgYXBwbGljYWJsZSBmb3IgcmVxdWVzdHMgdGhhdFxuICAgKiB1c2UgYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgKG5vdCBhcHBsaWNhYmxlIGZvciBiYXNpYyBhdXRoKS5cbiAgICpcbiAgICogV2hlbiBkZWZpbmVkIGFzIHBhcnQgb2YgYSByZXNvdXJjZSBzZXJ2ZXIsIHNjb3BlcyBhcmUgb24gdGhlIGZvcm1hdDpcbiAgICogYHtyZXNvdXJjZSBzZXJ2ZXIgaWRlbnRpZmllcn0ve3Njb3BlIG5hbWV9YCwgZS5nLiBgZXh0ZXJuYWwvdmlld191c2Vyc2AuXG4gICAqXG4gICAqIFRvIGdldCBtb3JlIHR5cGUgc2FmZXR5IG9uIHRoaXMgcGFyYW1ldGVyLCBzZWUgdGhlIGRvY3MgZm9yIHRoZSBgQXV0aFNjb3Blc1RgIHR5cGUgcGFyYW1ldGVyIG9uXG4gICAqIHtAbGluayBBcGlHYXRld2F5fS5cbiAgICovXG4gIHJlcXVpcmVkU2NvcGU/OiBBdXRoU2NvcGVzVFxufVxuXG50eXBlIEN1c3RvbUxhbWJkYUF1dGhvcml6ZXJQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJ1biB3aGVuZXZlciB0aGUgQVBJIEdhdGV3YXkgcm91dGUgaXMgaW52b2tlZCwgdG8gYXV0aGVudGljYXRlXG4gICAqIHRoZSByZXF1ZXN0LiBTZWUgQVdTIGRvY3MgZm9yIG1vcmUgb24gaG93IHRvIHdyaXRlIHRoZSBMYW1iZGE6XG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1sYW1iZGEtYXV0aG9yaXplci5odG1sXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHJlc3BvbnNlIGZvcm1hdCB1c2VkIGlzIGBIdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRWAgKGZvcm1hdCAyLjApLiBJZiB5b3Ugd3JpdGVcbiAgICogeW91ciBMYW1iZGEgaW4gVHlwZVNjcmlwdCwgdGhpcyBtZWFucyB0aGF0IHlvdXIgaGFuZGxlciBtdXN0IHJldHVyblxuICAgKiBgQVBJR2F0ZXdheVNpbXBsZUF1dGhvcml6ZXJSZXN1bHRgIChmcm9tIHRoZSBgYXdzLWxhbWJkYWAgcGFja2FnZSkuIFRoZSByZXF1ZXN0IGV2ZW50IHdpbGwgYWxzb1xuICAgKiB1c2UgZm9ybWF0IDIuMCAoYEFQSUdhdGV3YXlSZXF1ZXN0QXV0aG9yaXplckV2ZW50VjJgIGluIFR5cGVTY3JpcHQpLiBTZWUgdGhlIEFXUyBkb2NzIGxpbmtlZFxuICAgKiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZXNlIGZvcm1hdHMuXG4gICAqXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIHJlc3BvbnNlIGZvcm1hdCB0eXBlIGluXG4gICAqIHtAbGluayBDdXN0b21MYW1iZGFBdXRob3JpemVyUHJvcHMuYXV0aG9yaXplclByb3BzfS5cbiAgICpcbiAgICogU2VlIHRoZSBMYW1iZGFzIHVuZGVyIHRoZSBgYXV0aG9yaXplcnNgIGZvbGRlciBuZXh0IHRvIHRoZSBgQXBpR2F0ZXdheWAgY29uc3RydWN0IGluXG4gICAqIGBsaWZsaWctY2RrYCBmb3IgZXhhbXBsZXMuXG4gICAqL1xuICBsYW1iZGFBdXRob3JpemVyOiBsYW1iZGEuSUZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFByb3BzIGZvciB0aGUgYEh0dHBMYW1iZGFBdXRob3JpemVyYCBjb25zdHJ1Y3QuIFdlIHByb3ZpZGUgc29tZSBkaWZmZXJlbnQgZGVmYXVsdHM6XG4gICAqIC0gYHJlc3BvbnNlVHlwZXNgIGRlZmF1bHRzIHRvIGBbSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEVdYFxuICAgKiAtIGByZXN1bHRzQ2FjaGVUdGxgIGRlZmF1bHRzIHRvIGBEdXJhdGlvbi5ob3VycygxKWBcbiAgICovXG4gIGF1dGhvcml6ZXJQcm9wcz86IFBhcnRpYWw8YXV0aG9yaXplcnMuSHR0cExhbWJkYUF1dGhvcml6ZXJQcm9wcz5cbn1cblxuZXhwb3J0IHR5cGUgQXBpR2F0ZXdheUFjY2Vzc0xvZ3NQcm9wcyA9IHtcbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgYWNjZXNzIGxvZ3MgaWYgdGhpcyBjb25zdHJ1Y3QgaXMgZGVsZXRlZD9cbiAgICpcbiAgICogTWF5YmUgeW91IHdhbnQgdG8gREVTVFJPWSBpbnN0ZWFkLiBPciBmb3IgbGVnYWwgcmVhc29ucywgcmV0YWluIGZvciBhdWRpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5SRVRBSU5cbiAgICovXG4gIHJlbW92YWxQb2xpY3k/OiBjZGsuUmVtb3ZhbFBvbGljeVxuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byBrZWVwIHRoZSBsb2dzLiBJZiB1bmRlZmluZWQsIHVzZXMgdGhlIHNhbWUgZGVmYXVsdCBhcyBuZXcgQVdTIGxvZyBncm91cHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJldGVudGlvbkRheXMuVFdPX1lFQVJTXG4gICAqL1xuICByZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXNcblxuICAvKipcbiAgICogQSBjdXN0b20gSlNPTiBsb2cgZm9ybWF0LCB3aGljaCB1c2VzIHZhcmlhYmxlcyBmcm9tIGBcIiRjb250ZXh0XCJgLlxuICAgKlxuICAgKiBTZWUgW0FXUzogQ2xvdWRXYXRjaCBsb2cgZm9ybWF0cyBmb3IgQVBJIEdhdGV3YXldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXQtdXAtbG9nZ2luZy5odG1sI2FwaWdhdGV3YXktY2xvdWR3YXRjaC1sb2ctZm9ybWF0cylcbiAgICogZm9yIGZvcm1hdHMgYW5kIHJ1bGVzLiBJdCBpcyBwb3NzaWJsZSB0byB1c2Ugb3RoZXIgZm9ybWF0cyBsaWtlIENMRiBhbmQgWE1MLCBidXQgdGhpcyBjb25zdHJ1Y3RcbiAgICogb25seSBzdXBwb3J0cyBKU09OIGZvciBub3cuXG4gICAqXG4gICAqIEZvciBhIGxpc3Qgb2YgYWxsIHBvc3NpYmxlIHZhcmlhYmxlcyB0byBsb2csIHNlZVxuICAgKiBbQVdTOiAkY29udGV4dCBWYXJpYWJsZXMgZm9yIGRhdGEgbW9kZWxzLCBhdXRob3JpemVycywgbWFwcGluZyB0ZW1wbGF0ZXMsIGFuZCBDbG91ZFdhdGNoIGFjY2VzcyBsb2dnaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXktbWFwcGluZy10ZW1wbGF0ZS1yZWZlcmVuY2UuaHRtbCNjb250ZXh0LXZhcmlhYmxlLXJlZmVyZW5jZSlcbiAgICogYW5kXG4gICAqIFtBV1M6ICRjb250ZXh0IFZhcmlhYmxlcyBmb3IgYWNjZXNzIGxvZ2dpbmcgb25seV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LW1hcHBpbmctdGVtcGxhdGUtcmVmZXJlbmNlLmh0bWwjY29udGV4dC12YXJpYWJsZS1yZWZlcmVuY2UtYWNjZXNzLWxvZ2dpbmctb25seSkgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgZGVmYXVsdEFjY2Vzc0xvZ0Zvcm1hdH1cbiAgICovXG4gIGFjY2Vzc0xvZ0Zvcm1hdD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbn1cblxuLyoqXG4gKiBUaGlzIGNvbnN0cnVjdCB0cmllcyB0byBzaW1wbGlmeSB0aGUgY3JlYXRpb24gb2YgYW4gQVBJIEdhdGV3YXkgZm9yIGEgc2VydmljZSwgYnkgY29sbGVjdGluZyBtb3N0XG4gKiBvZiB0aGUgY29tbW9uIHNldHVwIGhlcmUuXG4gKlxuICogVGhlIGFwcHJvYWNoIGZvbGxvd2VkIGluIHRoaXMgY29uc3RydWN0IGlzOlxuICogMS4gT25lIEFQSS1HVyBwZXIgc2VydmljZVxuICogMi4gT25lIHN1YmRvbWFpbiBwZXIgQVBJLUdXIC8gc2VydmljZVxuICogMy4gVXNlIEhUVFAgQVBJLCBub3QgUkVTVFxuICogNC4gVXNlIGEgJGRlZmF1bHQgc3RhZ2Ugd2l0aCBhdXRvZGVwbG95XG4gKiA1LiBTdXBwb3J0IG11bHRpcGxlIHJvdXRlcyAod2l0aCBwb3NzaWJsZSBgL3twcm94eSt9YCB0byBsZXQgYWxsIHN1Yi1wYXRocyB0aHJvdWdoKVxuICogNi4gQWxsb3cgY3VzdG9tIGludGVncmF0aW9uL2F1dGhvcml6ZXIgZm9yIGVhY2ggcm91dGUsIG9yIGRlZmF1bHRzIGZvciB0aGUgd2hvbGUgZ2F0ZXdheVxuICpcbiAqIFRoZSByb3V0ZSBpbnRlZ3JhdGlvbiBpcyBvbmUgb2YgdGhlc2U6XG4gKiAtIEFMQiBwcml2YXRlIGludGVncmF0aW9uIHdpdGggVlBDIExpbmsgdXNpbmcgSFRUUFMgdG8gdGhlIEFMQlxuICogLSBMYW1iZGEgaW50ZWdyYXRpb25cbiAqIC0gU1FTIGludGVncmF0aW9uXG4gKlxuICogIyMjIExvYWQgQmFsYW5jZXIgU2VjdXJpdHkgR3JvdXBcbiAqXG4gKiBOb3RlIHRoYXQgdGhlIGxvYWQgYmFsYW5jZXIgdXNlZCBpbiBhbiB7QGxpbmsgQWxiSW50ZWdyYXRpb25Qcm9wc30gbXVzdCBhbGxvdyBvdXRib3VuZCBIVFRQU1xuICogdHJhZmZpYyB0byBpdHMgU2VjdXJpdHlHcm91cC4gT3RoZXJ3aXNlLCB0aGUgVlBDIExpbmsgdXNlZCBieSB0aGUgQVBJLUdXIGNhbid0IGdldCB0cmFmZmljIGZyb21cbiAqIHRoZSBBTEIuXG4gKlxuICogYGBgXG4gKiBjb25zdCBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKC4uLiwge1xuICogICBhbGxvd0FsbE91dGJvdW5kOiBmYWxzZSxcbiAqIH0pXG4gKlxuICogbG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cC5hZGRFZ3Jlc3NSdWxlKFxuICogICBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwLFxuICogICBlYzIuUG9ydC50Y3AoNDQzKSxcbiAqICAgXCJPdXRib3VuZCB0byBzZWxmIGZvciBBTEIgdG8gQVBJLUdXIFZQQy1MaW5rXCIsXG4gKiApXG4gKlxuICogY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3IGxpZmxpZ0xvYWRCYWxhbmNlci5Mb2FkQmFsYW5jZXIoLi4uLFxuICogICB7XG4gKiAgICAgb3ZlcnJpZGVMb2FkQmFsYW5jZXJQcm9wczoge1xuICogICAgICAgc2VjdXJpdHlHcm91cDogbG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cCxcbiAqICAgICB9LFxuICogICB9LFxuICogKVxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIEF1dGhTY29wZXNUIFRoaXMgdHlwZSBwYXJhbWV0ZXIgYWxsb3dzIHlvdSB0byBpbXByb3ZlIHR5cGUgc2FmZXR5IG9uIHRoZVxuICogYHJlcXVpcmVkU2NvcGVgIGZpZWxkIG9uIHtAbGluayBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wc30sIGJ5IG5hcnJvd2luZyB0aGUgdHlwZVxuICogdG8gc3BlY2lmaWMgc3RyaW5ncy4gWW91IGNhbiB0aGVuIGV4dGVuZCB0aGUgYEFwaUdhdGV3YXlgIHdpdGggdGhpcyB0eXBlIHRvIGVuZm9yY2UgdGhvc2Ugc2NvcGVzXG4gKiBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uLiBSZW1lbWJlciB0aGF0IGF1dGggc2NvcGVzIG11c3QgYmUgb24gdGhlIGZvcm1hdFxuICogYHtyZXNvdXJjZSBzZXJ2ZXIgaWRlbnRpZmllcn0ve3Njb3BlIG5hbWV9YC5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgXG4gKiB0eXBlIEF1dGhTY29wZXMgPSBcImV4dGVybmFsL3JlYWRfdXNlcnNcIiB8IFwiaW50ZXJuYWwvY3JlYXRlX3VzZXJzXCJcbiAqXG4gKiBleHBvcnQgY2xhc3MgTXlQcm9qZWN0QXBpR2F0ZXdheSBleHRlbmRzIEFwaUdhdGV3YXk8QXV0aFNjb3Blcz4ge31cbiAqIGBgYFxuICogVHlwZVNjcmlwdCB3aWxsIHRoZW4gZW5mb3JjZSB0aGF0IGByZXF1aXJlZFNjb3BlYCBpcyBvbmUgb2YgYEF1dGhTY29wZXNgLCBhbmQgcHJvdmlkZVxuICogYXV0by1jb21wbGV0ZS5cbiAqXG4gKiBAYXV0aG9yIEtyaXN0aWFuIFJla3N0YWQgPGtyZUBjYXByYWNvbnN1bHRpbmcubm8+XG4gKiBAYXV0aG9yIEhlcm1hbm4gTcO4cmtyaWQgPGhlbUBsaWZsaWcubm8+XG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlHYXRld2F5PFxuICBBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIC8qKiBUaGUgQVBJIEdhdGV3YXkgSFRUUCBBUEkuIFRoaXMgaXMgdGhlIG1haW4gY29uc3RydWN0IGZvciBBUEktR1cuICovXG4gIHB1YmxpYyByZWFkb25seSBodHRwQXBpOiBhcGlndy5IdHRwQXBpXG5cbiAgLyoqIFRoZSByb3V0ZXMgd2hpY2ggY29ubmVjdCB0aGUge0BsaW5rIGh0dHBBcGl9IHRvIHRoZSBiYWNrZW5kIGludGVncmF0aW9uKHMpLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVzOiBhcGlndy5IdHRwUm91dGVbXSA9IFtdXG5cbiAgLyoqIFRoZSBkb21haW4gd2hpY2ggY29uc3VtZXJzIG11c3QgdXNlLiovXG4gIHB1YmxpYyByZWFkb25seSBkb21haW46IHN0cmluZ1xuXG4gIC8qKiBBY2Nlc3MgbG9nIGdyb3VwLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBBcGlHYXRld2F5UHJvcHM8QXV0aFNjb3Blc1Q+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFwaUdhdGV3YXlQcm9wczxBdXRoU2NvcGVzVD4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcblxuICAgIEFwaUdhdGV3YXkudmFsaWRhdGVQcm9wcyhwcm9wcywgaWQsIGNkay5TdGFjay5vZih0aGlzKSlcblxuICAgIGNvbnN0IGN1c3RvbURvbWFpbiA9IG5ldyBDdXN0b21Eb21haW4odGhpcywgXCJDdXN0b21Eb21haW5cIiwgcHJvcHMuZG5zKVxuICAgIHRoaXMuZG9tYWluID0gY3VzdG9tRG9tYWluLmN1c3RvbURvbWFpbk5hbWVcblxuICAgIGxldCBjb3JzT3B0aW9uczogYXBpZ3cuQ29yc1ByZWZsaWdodE9wdGlvbnMgfCB1bmRlZmluZWRcbiAgICBpZiAocHJvcHMuY29yc0FsbG93QWxsKSB7XG4gICAgICBjb3JzT3B0aW9ucyA9IHtcbiAgICAgICAgYWxsb3dPcmlnaW5zOiBbXCIqXCJdLFxuICAgICAgICAvLyBcIlRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBjYW4ndCBiZSB3aWxkY2FyZGVkIGFuZCBhbHdheXMgbmVlZHMgdG8gYmUgbGlzdGVkIGV4cGxpY2l0bHlcIlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1xuICAgICAgICAvLyBDb250ZW50LVR5cGUgbWF5IGFsc28gcmVxdWlyZSBleHBsaWNpdCB3aGl0ZWxpc3Rpbmc6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82MzU2NzY0N1xuICAgICAgICBhbGxvd0hlYWRlcnM6IFtcIkF1dGhvcml6YXRpb25cIiwgXCJDb250ZW50LVR5cGVcIiwgXCIqXCJdLFxuICAgICAgICAvLyBOb3QgdXNpbmcgJyonIGhlcmUsIGJlY2F1c2UgXCJJbiByZXF1ZXN0cyB3aXRoIGNyZWRlbnRpYWxzLCBpdCBpcyB0cmVhdGVkIGFzIHRoZSBsaXRlcmFsXG4gICAgICAgIC8vIG1ldGhvZCBuYW1lICcqJyB3aXRob3V0IHNwZWNpYWwgc2VtYW50aWNzXCJcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcbiAgICAgICAgYWxsb3dNZXRob2RzOiBbXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuR0VULFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLlBPU1QsXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuUFVULFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLlBBVENILFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLkRFTEVURSxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5PUFRJT05TLFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLkhFQUQsXG4gICAgICAgIF0sXG4gICAgICAgIG1heEFnZTogY2RrLkR1cmF0aW9uLmRheXMoMSksXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIGFjdHVhbCBBUEkuIFRoaXMgaG9sZHMgdGhlIHJvdXRlcywgYXV0aG9yaXplcnMgYW5kIGludGVncmF0aW9ucy5cbiAgICBjb25zdCBhcGkgPSBuZXcgYXBpZ3cuSHR0cEFwaSh0aGlzLCBcIkh0dHBBcGktXCIgKyBwcm9wcy5kbnMuc3ViZG9tYWluLCB7XG4gICAgICAvLyBkZWZhdWx0SW50ZWdyYXRpb246IGRlZmF1bHRJbnRlZ3JhdGlvbiwgLy8gVGhpcyBpcyBmb3IgYSBjYXRjaC1hbGwgJGRlZmF1bHQgcm91dGVcbiAgICAgIGRlc2NyaXB0aW9uOiBgQW4gSFRUUCBBUEkgZm9yICR7cHJvcHMuZG5zLnN1YmRvbWFpbn0uJHtwcm9wcy5kbnMuaG9zdGVkWm9uZS56b25lTmFtZX0uYCxcbiAgICAgIGRpc2FibGVFeGVjdXRlQXBpRW5kcG9pbnQ6IHRydWUsIC8vIEZvcmNlIGV4dGVybmFscyB0byBnbyB0aHJvdWdoIGN1c3RvbSBkb21haW4uIE1VU1QgYmUgdHJ1ZSB3aGVuIHVzaW5nIE11dHVhbCBUTFMsIGZvciBzZWN1cml0eSByZWFzb25zXG4gICAgICBjcmVhdGVEZWZhdWx0U3RhZ2U6IHRydWUsXG4gICAgICBkZWZhdWx0RG9tYWluTWFwcGluZzogeyBkb21haW5OYW1lOiBjdXN0b21Eb21haW4uYXBpR3dDdXN0b21Eb21haW4gfSxcbiAgICAgIGNvcnNQcmVmbGlnaHQ6IGNvcnNPcHRpb25zLFxuICAgICAgLi4ucHJvcHM/LnByb3BzT3ZlcnJpZGU/Lmh0dHBBcGksXG4gICAgfSlcbiAgICB0aGlzLmh0dHBBcGkgPSBhcGlcblxuICAgIGNvbnN0IHN0YWdlID0gYXBpLmRlZmF1bHRTdGFnZT8ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgYXBpZ3cuQ2ZuU3RhZ2VcblxuICAgIGNvbnN0IGxvZ3MgPSBuZXcgQXBpR2F0ZXdheUFjY2Vzc0xvZ3MoXG4gICAgICB0aGlzLFxuICAgICAgXCJBY2Nlc3NMb2dzXCIsXG4gICAgICBzdGFnZSxcbiAgICAgIHByb3BzLmFjY2Vzc0xvZ3MsXG4gICAgICBkZWZhdWx0QWNjZXNzTG9nRm9ybWF0LFxuICAgIClcbiAgICB0aGlzLmxvZ0dyb3VwID0gbG9ncy5sb2dHcm91cFxuXG4gICAgc3RhZ2UuZGVmYXVsdFJvdXRlU2V0dGluZ3MgPSB7XG4gICAgICAuLi5zdGFnZS5kZWZhdWx0Um91dGVTZXR0aW5ncyxcbiAgICAgIGRldGFpbGVkTWV0cmljc0VuYWJsZWQ6IHByb3BzLmRldGFpbGVkTWV0cmljcyA/PyB0cnVlLFxuICAgICAgdGhyb3R0bGluZ0J1cnN0TGltaXQ6IHByb3BzLnRocm90dGxpbmc/LmJ1cnN0LCAvLyBEZWZhdWx0IGZvciBhY2NvdW50IGlzIDVfMDAwXG4gICAgICB0aHJvdHRsaW5nUmF0ZUxpbWl0OiBwcm9wcy50aHJvdHRsaW5nPy5yYXRlLCAvLyBEZWZhdWx0IGZvciBhY2NvdW50IGlzIDEwXzAwMFxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRJbnRlZ3JhdGlvbiA9IHByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvblxuICAgICAgPyB0aGlzLmNyZWF0ZUludGVncmF0aW9uKHByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvbiwgcHJvcHMuZG5zKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGRlZmF1bHRBdXRob3JpemVyID0gcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb25cbiAgICAgID8gdGhpcy5jcmVhdGVBdXRob3JpemVyKFwiRGVmYXVsdEF1dGhvcml6ZXJcIiwgcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24pXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBwcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGxldCBpbnRlZ3JhdGlvbjogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25cbiAgICAgIGlmIChyb3V0ZS5pbnRlZ3JhdGlvbikge1xuICAgICAgICBpbnRlZ3JhdGlvbiA9IHRoaXMuY3JlYXRlSW50ZWdyYXRpb24ocm91dGUuaW50ZWdyYXRpb24sIHByb3BzLmRucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVncmF0aW9uID0gZGVmYXVsdEludGVncmF0aW9uISAvLyBWZXJpZmllZCBpbiB2YWxpZGF0ZVByb3BzXG4gICAgICB9XG5cbiAgICAgIGxldCBhdXRob3JpemVyOiBhcGlndy5JSHR0cFJvdXRlQXV0aG9yaXplciB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHJvdXRlLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgYXV0aG9yaXplciA9IHRoaXMuY3JlYXRlQXV0aG9yaXplcihcbiAgICAgICAgICAvLyBVc2luZyB0aGUgcm91dGUgcGF0aCBoZXJlIGNhdXNlZCBDbG91ZEZvcm1hdGlvbiB0byBmYWlsIGR1ZSB0byByZXNvdXJjZSBuYW1lcyBiZWluZyB0b29cbiAgICAgICAgICAvLyBsb25nLiBUaGVyZWZvcmUsIHdlIG5vdyBoYXNoIHRoZSByb3V0ZSBwYXRoIHRvIGdldCBhIHNob3J0ZXIgbmFtZS5cbiAgICAgICAgICBgUm91dGVBdXRob3JpemVyJHtzaG9ydEhhc2goYCR7cm91dGUubWV0aG9kID8/IFwiXCJ9JHtyb3V0ZS5wYXRofWApfWAsXG4gICAgICAgICAgcm91dGUuYXV0aG9yaXphdGlvbixcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXV0aG9yaXplciA9IGRlZmF1bHRBdXRob3JpemVyXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvdXRlUGF0aHMgPSBbcm91dGUucGF0aF1cbiAgICAgIGlmIChyb3V0ZS5pbmNsdWRlU3VicGF0aHMgPT09IHRydWUpIHtcbiAgICAgICAgLy8gSWYgd2UgaW5jbHVkZSBzdWItcGF0aHMsIHdlIGFkZCBhbiBhZGRpdGlvbmFsIHJvdXRlIHdpdGggL3twcm94eSt9ICh0aGUgKyBtZWFucyBpdCB3aWxsXG4gICAgICAgIC8vIG1hdGNoIGFsbCBzdWJyb3V0ZXMpLiBXZSB3YW50IGJvdGggdGhpcyByb3V0ZSBhbmQgdGhlIG5vcm1hbCByb3V0ZSB3aXRob3V0IC97cHJveHkrfSxcbiAgICAgICAgLy8gc2luY2UgL3twcm94eSt9IHdpbGwgb25seSBtYXRjaCB0aGUgYmFzZSBwYXRoIHdpdGggdHJhaWxpbmcgc2xhc2guXG4gICAgICAgIHJvdXRlUGF0aHMucHVzaChcbiAgICAgICAgICByb3V0ZS5wYXRoICsgKHJvdXRlLnBhdGggPT09IFwiL1wiID8gXCJcIiA6IFwiL1wiKSArIFwie3Byb3h5K31cIixcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlUGF0aCBvZiByb3V0ZVBhdGhzKSB7XG4gICAgICAgIC8vIFRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBBUEkgR2F0ZXdheSBjb25zdHJ1Y3QgaGFkIGEgc2luZ2xlIHJvdXRlIHdpdGggdGhlIElEXG4gICAgICAgIC8vICdEZWZhdWx0UHJveHlSb3V0ZScsIGFuZCBhbGwgZ2F0ZXdheXMgd2UgdXNlZCBleHBvc2VkIHRoZSByb3V0ZSAve3Byb3h5K30uIFdoZW4gdHJ5aW5nIHRvXG4gICAgICAgIC8vIGNoYW5nZSB0byB0aGlzIG5ldyB2ZXJzaW9uIG9mIHRoZSBjb25zdHJ1Y3QsIGRlcGxveW1lbnQgZmFpbGVkIGZvciBnYXRld2F5cyBleHBvc2luZ1xuICAgICAgICAvLyAve3Byb3h5K30sIGJlY2F1c2UgXCJhIHJvdXRlIHdpdGggdGhhdCBrZXkgW2kuZS4gcGF0aCArIG1ldGhvZF0gYWxyZWFkeSBleGlzdHNcIi4gV2UgdGhpbmtcbiAgICAgICAgLy8gdGhpcyBtYXkgYmUgYmVjYXVzZSB3ZSB1c2VkIHRoZSBzYW1lIHJvdXRlIHBhdGgsIGJ1dCB3aXRoIGEgbmV3IHJvdXRlIElELCBjYXVzaW5nXG4gICAgICAgIC8vIGNvbmZ1c2lvbiBmb3IgQ2xvdWRGb3JtYXRpb24uIFNvIHdlIGtlZXAgdGhlIG9sZCByb3V0ZSBJRCBoZXJlIGZvciAve3Byb3h5K30uXG4gICAgICAgIGNvbnN0IHJvdXRlSWQgPVxuICAgICAgICAgIHJvdXRlUGF0aCA9PT0gXCIve3Byb3h5K31cIiA/IFwiRGVmYXVsdFByb3h5Um91dGVcIiA6IGBSb3V0ZS0ke3JvdXRlUGF0aH1gXG5cbiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChcbiAgICAgICAgICBuZXcgYXBpZ3cuSHR0cFJvdXRlKHRoaXMsIHJvdXRlSWQsIHtcbiAgICAgICAgICAgIGh0dHBBcGk6IGFwaSxcbiAgICAgICAgICAgIGludGVncmF0aW9uOiBpbnRlZ3JhdGlvbixcbiAgICAgICAgICAgIGF1dGhvcml6ZXI6IGF1dGhvcml6ZXIsXG4gICAgICAgICAgICByb3V0ZUtleTogYXBpZ3cuSHR0cFJvdXRlS2V5LndpdGgoXG4gICAgICAgICAgICAgIHJvdXRlUGF0aCxcbiAgICAgICAgICAgICAgcm91dGUubWV0aG9kXG4gICAgICAgICAgICAgICAgPyBhcGlndy5IdHRwTWV0aG9kW3JvdXRlLm1ldGhvZF1cbiAgICAgICAgICAgICAgICA6IGFwaWd3Lkh0dHBNZXRob2QuQU5ZLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRhZ1Jlc291cmNlcyh0aGlzLCAoKSA9PiAoeyBzZXJ2aWNlOiBwcm9wcy5kbnMuc3ViZG9tYWluIH0pKVxuICB9XG5cbiAgLyoqIEB0aHJvd3MgRXJyb3IgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQcm9wcyhcbiAgICBwcm9wczogQXBpR2F0ZXdheVByb3BzLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgc3RhY2s6IGNkay5TdGFjayxcbiAgKSB7XG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBwcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGlmICghcm91dGUuaW50ZWdyYXRpb24gJiYgIXByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE5vIGludGVncmF0aW9uIGRlZmluZWQgZm9yIHJvdXRlICcke3JvdXRlLnBhdGh9JywgYW5kIG5vIGRlZmF1bHQgaW50ZWdyYXRpb24gc3BlY2lmaWVkIGZvciB0aGUgZ2F0ZXdheWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmICghcm91dGUuYXV0aG9yaXphdGlvbiAmJiAhcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBObyBhdXRob3JpemF0aW9uIGRlZmluZWQgZm9yIHJvdXRlICcke3JvdXRlLnBhdGh9JywgYW5kIG5vIGRlZmF1bHQgYXV0aG9yaXphdGlvbiBzcGVjaWZpZWQgZm9yIHRoZSBnYXRld2F5YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKCFyb3V0ZS5wYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBwYXRoICcke3JvdXRlLnBhdGh9JzogcGF0aHMgbXVzdCBiZWdpbiB3aXRoICcvJyAodXNlICcvJyBmb3Igcm9vdCBwYXRoKWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChyb3V0ZS5wYXRoICE9PSBcIi9cIiAmJiByb3V0ZS5wYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgcGF0aCAnJHtyb3V0ZS5wYXRofSc6IHBhdGhzIGNhbm5vdCBlbmQgd2l0aCAnLycgKGV4Y2VwdCByb290IHBhdGgpYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByb3V0ZS5pbnRlZ3JhdGlvbj8udHlwZSA9PT0gXCJBTEJcIiAmJlxuICAgICAgICByb3V0ZS5pbnRlZ3JhdGlvbi5ob3N0TmFtZS5zdGFydHNXaXRoKFwiaHR0cHM6XCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgYWxiSW50ZWdyYXRpb24uaG9zdEh0dHBzTmFtZSBzaG91bGQgbm90IGluY2x1ZGUgYSBwcm90b2NvbDogJHtyb3V0ZS5pbnRlZ3JhdGlvbi5ob3N0TmFtZX1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5kbnMuc3ViZG9tYWluID09PSBcIlwiIHx8IHByb3BzLmRucy5zdWJkb21haW4uaW5jbHVkZXMoXCIgXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTdWJkb21haW4gbXVzdCBiZSBzZXQsIGFuZCBub3QgY29udGFpbiBzcGFjZXM6ICR7cHJvcHMuZG5zLnN1YmRvbWFpbn1gLFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAocHJvcHMudGhyb3R0bGluZz8uYnVyc3QgJiYgcHJvcHMudGhyb3R0bGluZy5idXJzdCA+IDVfMDAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDimqDvuI8gWW91ciB0aHJvdHRsaW5nIGJ1cnN0IGxpbWl0ICcke3Byb3BzLnRocm90dGxpbmcuYnVyc3R9JyBpcyBoaWdoZXIgdGhhbiB0aGUgQVdTIEFjY291bnQgbGltaXQuIE1ha2Ugc3VyZSB5b3VyIGFjY291bnQgaGFzIHVwZ3JhZGVkIHRoaXMgcXVvdGEhIGAsXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBpZCxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHByb3BzLnRocm90dGxpbmc/LnJhdGUgJiYgcHJvcHMudGhyb3R0bGluZy5yYXRlID4gMTBfMDAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDimqDvuI8gWW91ciB0aHJvdHRsaW5nIHJhdGUgbGltaXQgJyR7cHJvcHMudGhyb3R0bGluZy5yYXRlfScgaXMgaGlnaGVyIHRoYW4gdGhlIEFXUyBBY2NvdW50IGxpbWl0LiBNYWtlIHN1cmUgeW91ciBhY2NvdW50IGhhcyB1cGdyYWRlZCB0aGlzIHF1b3RhISBgLFxuICAgICAgICBzdGFjayxcbiAgICAgICAgaWQsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIG9ubHkgYWNjZXB0cyByZXF1ZXN0cyBmcm9tIGV4dGVybmFsIHVzZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQuXG4gICAqIFVuYXV0aG9yaXplZCB1c2VycyBhcmUgc3RvcHBlZCBpbiB0aGUgQVBJLUdXLCBhbmQgbm90IGZvcndhcmRlZCB0byB0aGUgaW50ZWdyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUF1dGhvcml6ZXI8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXV0aG9yaXphdGlvbjogQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUPixcbiAgKTogYXBpZ3cuSUh0dHBSb3V0ZUF1dGhvcml6ZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoYXV0aG9yaXphdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFwiTk9ORVwiOiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJJQU1cIjoge1xuICAgICAgICAvLyBBUEkgR2F0ZXdheSBpbnZva2VzIHlvdXIgQVBJIHJvdXRlIG9ubHkgaWYgdGhlIGNsaWVudCBoYXMgZXhlY3V0ZS1hcGkgcGVybWlzc2lvbiBmb3IgdGhlIHJvdXRlLlxuICAgICAgICAvLyBUaGUgY2xpZW50IGhhcyB0byB1c2UgQVdTIFNpZ1Y0IHRvIGlkZW50aWZ5IHRoZW1zZWx2ZXMgaW4gdGhlIHJlcXVlc3QuXG4gICAgICAgIC8vIFJlYWQgdGhpcyBwYWdlIGZvciBoZWxwIHdpdGggSUFNIGFuZCBBUEktR1cgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlY3VyaXR5X2lhbV9zZXJ2aWNlLXdpdGgtaWFtLmh0bWxcbiAgICAgICAgLy8gTm90ZSB0aGF0IFtyZXNvdXJjZSBwb2xpY2llcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQgZm9yIEhUVFBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1hY2Nlc3MtY29udHJvbC1pYW0uaHRtbClcbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwSWFtQXV0aG9yaXplcigpXG4gICAgICB9XG4gICAgICBjYXNlIFwiQ09HTklUT19VU0VSX1BPT0xcIjoge1xuICAgICAgICAvLyBXZSB1c2UgYSBjdXN0b20gbGFtYmRhIGF1dGhvcml6ZXIgaGVyZSBpbnN0ZWFkIG9mIHRoZSBgSHR0cFVzZXJQb29sQXV0aG9yaXplcmAgcHJvdmlkZWRcbiAgICAgICAgLy8gYnkgQ0RLLCBpbiBvcmRlciB0byBzdXBwb3J0IGByZXF1aXJlZFNjb3BlYCBhbmQgc2V0dGluZyBvZiBjdXN0b20gY29udGV4dCB2YXJpYWJsZXMuXG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZXIgPSBuZXcgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGlkICsgXCJMYW1iZGFcIixcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJCQVNJQ19BVVRIXCI6IHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplciA9IG5ldyBCYXNpY0F1dGhBdXRob3JpemVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaWQgKyBcIkxhbWJkYVwiLFxuICAgICAgICAgIGF1dGhvcml6YXRpb24sXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4gbmV3IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFBdXRob3JpemVyKGlkLCBhdXRob3JpemVyLmxhbWJkYSwge1xuICAgICAgICAgIHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6ZXIucmVzcG9uc2VUeXBlcyxcbiAgICAgICAgICAvLyBNYXggMWgsIG9yIGRpc2FibGVkICgwcykuIFRoZSB2YWx1ZSBvbmx5IG1hdHRlcnMgd2hlbiBpbnZhbGlkYXRpbmcvZHluYW1pYyBjcmVkZW50aWFsc1xuICAgICAgICAgIHJlc3VsdHNDYWNoZVR0bDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMzApLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY2FzZSBcIkNPR05JVE9fVVNFUl9QT09MX09SX0JBU0lDX0FVVEhcIjoge1xuICAgICAgICBjb25zdCBhdXRob3JpemVyID0gbmV3IENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGlkICsgXCJMYW1iZGFcIixcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJDVVNUT01fTEFNQkRBX0FVVEhPUklaRVJcIjoge1xuICAgICAgICByZXR1cm4gbmV3IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFBdXRob3JpemVyKFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGF1dGhvcml6YXRpb24ubGFtYmRhQXV0aG9yaXplcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5hdXRob3JpemF0aW9uLmF1dGhvcml6ZXJQcm9wcyxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6YXRpb24uYXV0aG9yaXplclByb3BzPy5yZXNwb25zZVR5cGVzID8/IFtcbiAgICAgICAgICAgICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzdWx0c0NhY2hlVHRsOlxuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uLmF1dGhvcml6ZXJQcm9wcz8ucmVzdWx0c0NhY2hlVHRsID8/XG4gICAgICAgICAgICAgIGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnRlZ3JhdGlvbihcbiAgICBpbnRlZ3JhdGlvbjogSW50ZWdyYXRpb25Qcm9wcyxcbiAgICBkbnM6IEFwaUdhdGV3YXlQcm9wc1tcImRuc1wiXSxcbiAgKTogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24ge1xuICAgIHN3aXRjaCAoaW50ZWdyYXRpb24udHlwZSkge1xuICAgICAgY2FzZSBcIkFMQlwiOiB7XG4gICAgICAgIC8vIFRoZSBWUENMaW5rIGNvbm5lY3RzIHRoZSBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBBTEIncyBWUEMuIE11c3QgYmUgbWFudWFsbHkgY3JlYXRlZCB3aGVuXG4gICAgICAgIC8vIHRoZSBWUEMgaXMgaW1wb3J0ZWQsIHdoaWNoIGlzIHRoZSBjYXNlIHdoZW4gdXNpbmcgQ29yZVBsYXRmb3JtQ29uc3VtZXIuXG4gICAgICAgIGNvbnN0IHZwY0xpbmsgPSBuZXcgYXBpZ3cuVnBjTGluayh0aGlzLCBcIkFsYlZwY0xpbmtcIiwge1xuICAgICAgICAgIHZwYzogaW50ZWdyYXRpb24udnBjLFxuICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbaW50ZWdyYXRpb24uc2VjdXJpdHlHcm91cF0sXG4gICAgICAgICAgc3VibmV0czogaW50ZWdyYXRpb24udnBjLnNlbGVjdFN1Ym5ldHMoKSwgLy8gVGhpcyBjb3JyZWN0bHkgc2VsZWN0cyB0aGUgcHJpdmF0ZSBzdWJuZXRzXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTWFwcGluZyA9IG5ldyBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKClcbiAgICAgICAgICAvKiogU2VlIHtAbGluayBBbGJJbnRlZ3JhdGlvblByb3BzLmhvc3ROYW1lfSAqL1xuICAgICAgICAgIC5vdmVyd3JpdGVIZWFkZXIoXG4gICAgICAgICAgICBcIkhvc3RcIixcbiAgICAgICAgICAgIC8vIFRoZSBIb3N0IGhlYWRlciBjYW4gTk9UIHVzZSBkeW5hbWljIG1hcHBpbmcsIGxpa2UgJGNvbnRleHQuZG9tYWluTmFtZSBldGMuXG4gICAgICAgICAgICBhcGlndy5NYXBwaW5nVmFsdWUuY3VzdG9tKGludGVncmF0aW9uLmhvc3ROYW1lKSxcbiAgICAgICAgICApXG4gICAgICAgIGlmIChpbnRlZ3JhdGlvbi5tYXBQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbnRlZ3JhdGlvbi5tYXBQYXJhbWV0ZXJzKHBhcmFtZXRlck1hcHBpbmcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGludGVncmF0aW9ucy5IdHRwQWxiSW50ZWdyYXRpb24oXG4gICAgICAgICAgXCJBbGJJbnRlZ3JhdGlvbi1cIiArIGRucy5zdWJkb21haW4sXG4gICAgICAgICAgaW50ZWdyYXRpb24ubG9hZEJhbGFuY2VyTGlzdGVuZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VjdXJlU2VydmVyTmFtZTogaW50ZWdyYXRpb24uaG9zdE5hbWUsXG4gICAgICAgICAgICB2cGNMaW5rOiB2cGNMaW5rLFxuICAgICAgICAgICAgbWV0aG9kOiBhcGlndy5IdHRwTWV0aG9kLkFOWSxcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY2FzZSBcIkxhbWJkYVwiOiB7XG4gICAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb25zLkh0dHBMYW1iZGFJbnRlZ3JhdGlvbihcbiAgICAgICAgICBcIkxhbWJkYUludGVncmF0aW9uXCIsXG4gICAgICAgICAgaW50ZWdyYXRpb24ubGFtYmRhLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiBhcGlndy5QYXlsb2FkRm9ybWF0VmVyc2lvbi5WRVJTSU9OXzJfMCxcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjYXNlIFwiU1FTXCI6IHtcbiAgICAgICAgLy8gQVBJLUdXIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIFNRUyBieSBkZWZhdWx0XG4gICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgQXBpR3dUbyR7aW50ZWdyYXRpb24ucXVldWUubm9kZS5pZH1TZXJ2aWNlUm9sZWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgIFwiQWxsb3dzIEFQSS1HVyB0byBhZGQgbWVzc2FnZXMgdG8gXCIgKyBpbnRlZ3JhdGlvbi5xdWV1ZS5xdWV1ZUFybixcbiAgICAgICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgaW50ZWdyYXRpb24ucXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMocm9sZSlcblxuICAgICAgICBsZXQgcGFyYW1ldGVyTWFwcGluZyA9IG5ldyBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKClcbiAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1pbnRlZ3JhdGlvbnMtYXdzLXNlcnZpY2VzLXJlZmVyZW5jZS5odG1sI1NRUy1TZW5kTWVzc2FnZVxuICAgICAgICAgIC5jdXN0b20oXCJRdWV1ZVVybFwiLCBpbnRlZ3JhdGlvbi5xdWV1ZS5xdWV1ZVVybClcbiAgICAgICAgICAuY3VzdG9tKFwiTWVzc2FnZUJvZHlcIiwgXCIkcmVxdWVzdC5ib2R5XCIpXG4gICAgICAgICAgLmN1c3RvbShcIlJlZ2lvblwiLCBcImV1LXdlc3QtMVwiKSAvLyBDaGFuZ2UgdGhpcyBpZiB0aGUgU1FTIHF1ZXVlIGlzIGluIGFub3RoZXIgcmVnaW9uIVxuXG4gICAgICAgIGlmIChpbnRlZ3JhdGlvbi5tZXNzYWdlQXR0cmlidXRlcykge1xuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmcgPSBwYXJhbWV0ZXJNYXBwaW5nLmN1c3RvbShcbiAgICAgICAgICAgIFwiTWVzc2FnZUF0dHJpYnV0ZXNcIixcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGludGVncmF0aW9uLm1lc3NhZ2VBdHRyaWJ1dGVzKSxcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFNxc1JvdXRlSW50ZWdyYXRpb24oXCJTcXNJbnRlZ3JhdGlvblwiLCB7XG4gICAgICAgICAgdHlwZTogYXBpZ3cuSHR0cEludGVncmF0aW9uVHlwZS5BV1NfUFJPWFksXG4gICAgICAgICAgc3VidHlwZTogYXBpZ3cuSHR0cEludGVncmF0aW9uU3VidHlwZS5TUVNfU0VORF9NRVNTQUdFLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiBhcGlndy5JbnRlZ3JhdGlvbkNyZWRlbnRpYWxzLmZyb21Sb2xlKHJvbGUpLFxuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmc6IHBhcmFtZXRlck1hcHBpbmcsXG4gICAgICAgICAgcGF5bG9hZEZvcm1hdFZlcnNpb246IGFwaWd3LlBheWxvYWRGb3JtYXRWZXJzaW9uLlZFUlNJT05fMV8wLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgYSBncmFudGFibGUgdGFyZ2V0IChyb2xlLCB1c2VyIGV0Yy4pIHBlcm1pc3Npb24gdG8gaW52b2tlIHRoZSBBUEkuXG4gICAqIE9ubHkgd29ya3Mgd2hlbiB1c2luZyBgSUFNYCBhcyB7QGxpbmsgQXBpR2F0ZXdheVJvdXRlLmF1dGhvcml6YXRpb259LlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IEEgZ3JhbnRhYmxlLCBsaWtlIHtAbGluayBpYW0uUm9sZX1cbiAgICovXG4gIHB1YmxpYyBncmFudEludm9rZSh0YXJnZXQ6IGlhbS5JR3JhbnRhYmxlKSB7XG4gICAgZm9yIChjb25zdCByb3V0ZVByb3BzIG9mIHRoaXMucHJvcHMucm91dGVzKSB7XG4gICAgICBjb25zdCBhdXRoVHlwZSA9XG4gICAgICAgIHJvdXRlUHJvcHMuYXV0aG9yaXphdGlvbj8udHlwZSA/PyB0aGlzLnByb3BzLmRlZmF1bHRBdXRob3JpemF0aW9uPy50eXBlXG5cbiAgICAgIGlmIChhdXRoVHlwZSAhPT0gXCJJQU1cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBncmFudCBpbnZva2UgZm9yIGFuIEFQSSBHYXRld2F5IHdoZW4gbm90IHVzaW5nIElBTSBhdXRoIChmb3VuZCBhdXRoICcke2F1dGhUeXBlfScgb24gcm91dGUgJyR7cm91dGVQcm9wcy5wYXRofScpIFske2Nkay5TdGFjay5vZih0aGlzKS5zdGFja05hbWV9XWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKSB7XG4gICAgICByb3V0ZS5ncmFudEludm9rZSh0YXJnZXQpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBkb21haW4gZm9yIHRoZSBBUEktR2F0ZXdheSwgYSBSb3V0ZTUzIHJlY29yZCBhbmQgYW4gSFRUUFMgY2VydC5cbiAqIEBhdXRob3IgS3Jpc3RpYW4gUmVrc3RhZCA8a3JlQGNhcHJhY29uc3VsdGluZy5ubz5cbiAqL1xuY2xhc3MgQ3VzdG9tRG9tYWluIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpR3dDdXN0b21Eb21haW46IGFwaWd3LkRvbWFpbk5hbWVcblxuICAvKiogVGhlIEZ1bGx5IFF1YWxpZmllZCBEb21haW4gTmFtZSAoRlFETikgbGlrZSBgcHJvZHVjdC5wbGF0Zm9ybS5leGFtcGxlLm5vYC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGN1c3RvbURvbWFpbk5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBcGlHYXRld2F5RG5zUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLmN1c3RvbURvbWFpbk5hbWUgPSBgJHtwcm9wcy5zdWJkb21haW59LiR7cHJvcHMuaG9zdGVkWm9uZS56b25lTmFtZX1gXG5cbiAgICAvLyBDYW4gYWxzbyB1c2Ugd2lsZGNhcmQgY2VydHMgaW5zdGVhZCEgQ2hlYXBlclxuICAgIC8qKiBBbGxvd3MgZXh0ZXJuYWwgdXNlcnMgdG8gY29ubmVjdCB3aXRoIEhUVFBTLiAqL1xuICAgIGNvbnN0IGN1c3RvbURvbWFpbkNlcnQgPSBuZXcgYWNtLkNlcnRpZmljYXRlKHRoaXMsIFwiSHR0cHNDZXJ0aWZpY2F0ZVwiLCB7XG4gICAgICBkb21haW5OYW1lOiB0aGlzLmN1c3RvbURvbWFpbk5hbWUsXG4gICAgICB2YWxpZGF0aW9uOiBhY20uQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMocHJvcHMuaG9zdGVkWm9uZSksXG4gICAgfSlcblxuICAgIC8vIE5vdGUgdGhhdCBBUEktR1cgY2FuIGFsc28gc3VwcG9ydCB3aWxkY2FyZCBkb21haW5zISBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktY3VzdG9tLWRvbWFpbi1uYW1lcy5odG1sI2h0dHAtd2lsZGNhcmQtY3VzdG9tLWRvbWFpbi1uYW1lc1xuICAgIC8vIEJ1dCB0aGlzIHdpbGwgbm90IHdvcmsgd2hlbiBBV1MgYWNjb3VudCBYIGhhcyBDdXN0b21Eb21haW4gYHN0YWdpbmcucGxhdGZvcm0uZXhhbXBsZS5ub2AgYW5kIGFjY291bnQgWSBoYXMgQ3VzdG9tRG9tYWluIGAqLnBsYXRmb3JtLmV4YW1wbGUubm9gLlxuICAgIC8vIE5vdCBzdXJlIGhvdyBzdWItc3ViZG9tYWlucyBhcmUgYWZmZWN0ZWQ6IGBteXNlcnZpY2Uuc3RhZ2luZy5wbGF0Zm9ybS5leGFtcGxlLm5vYCBhbmQgYCoucGxhdGZvcm0uZXhhbXBsZS5ub2AuXG4gICAgdGhpcy5hcGlHd0N1c3RvbURvbWFpbiA9IG5ldyBhcGlndy5Eb21haW5OYW1lKFxuICAgICAgdGhpcyxcbiAgICAgIFwiRG9tYWluTmFtZS1cIiArIHByb3BzLnN1YmRvbWFpbixcbiAgICAgIHtcbiAgICAgICAgZG9tYWluTmFtZTogdGhpcy5jdXN0b21Eb21haW5OYW1lLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogY3VzdG9tRG9tYWluQ2VydCxcbiAgICAgICAgZW5kcG9pbnRUeXBlOiBhcGlndy5FbmRwb2ludFR5cGUuUkVHSU9OQUwsXG4gICAgICAgIHNlY3VyaXR5UG9saWN5OiBhcGlndy5TZWN1cml0eVBvbGljeS5UTFNfMV8yLFxuICAgICAgfSxcbiAgICApXG5cbiAgICAvLyBUaGlzIG1ha2VzIHRoZSBBUEktR1cgcHVibGljbHkgYXZhaWxhYmxlIG9uIHRoZSBjdXN0b20gZG9tYWluIG5hbWUuXG4gICAgbmV3IHJvdXRlNTMuQVJlY29yZCh0aGlzLCBcIlJvdXRlNTNBUmVjb3JkQXBpZ3dBbGlhc1wiLCB7XG4gICAgICByZWNvcmROYW1lOiBwcm9wcy5zdWJkb21haW4sXG4gICAgICB6b25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyByb3V0ZTUzVGFyZ2V0cy5BcGlHYXRld2F5djJEb21haW5Qcm9wZXJ0aWVzKFxuICAgICAgICAgIHRoaXMuYXBpR3dDdXN0b21Eb21haW4ucmVnaW9uYWxEb21haW5OYW1lLFxuICAgICAgICAgIHRoaXMuYXBpR3dDdXN0b21Eb21haW4ucmVnaW9uYWxIb3N0ZWRab25lSWQsXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgdHRsOiBwcm9wcy50dGwgPz8gY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksIC8vIExvdyBUVEwgbWFrZXMgaXQgZWFzaWVyIHRvIGRvIGNoYW5nZXNcbiAgICB9KVxuICB9XG59XG5cbi8qKiBBY3RzIGFzIGdsdWUgKGJldHdlZW4gdGhlIGludGVncmF0aW9uIHByb3BzIGFuZCB0aGUgSHR0cEFwaSkgd2hlbiBjcmVhdGluZyBhbiBTcXNJbnRlZ3JhdGlvbi4gKi9cbmNsYXNzIFNxc1JvdXRlSW50ZWdyYXRpb24gZXh0ZW5kcyBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gaWQgVGhlIGlkIHVzZWQgaW4gdGhlIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IGNvbnN0cnVjdFxuICAgKiAgICBjcmVhdGVkIGludGVybmFsbHkgYnkge0BsaW5rIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uLl9iaW5kVG9Sb3V0ZX0uXG4gICAqICAgIFtTb3VyY2UgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvYjVhZTM3NzgyYmMzY2I2MzdlZWVmOWZiYjFmYmUyYzVlZmRmYzA2OC9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1hcGlnYXRld2F5djIvbGliL2h0dHAvaW50ZWdyYXRpb24udHMjTDMyMSlcbiAgICogQHBhcmFtIGludGVncmF0aW9uUHJvcHMgVGhlIHByb3BzIHRvIHBhc3MgdG8gdGhlIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBpbnRlZ3JhdGlvblByb3BzOiBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgKSB7XG4gICAgc3VwZXIoaWQpXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzZW5kcyB0aGUgcHJvcGVydGllcyBuZWVkZWQgZm9yIGNyZWF0aW5nIGEge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gdG8gdGhlXG4gICAqIHtAbGluayBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbn0uXG4gICAqL1xuICBiaW5kKCk6IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uQ29uZmlnIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnk6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvYjVhZTM3NzgyYmMzY2I2MzdlZWVmOWZiYjFmYmUyYzVlZmRmYzA2OC9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1hcGlnYXRld2F5djIvbGliL2h0dHAvaW50ZWdyYXRpb24udHMjTDMxOVxuICAgIHJldHVybiB0aGlzLmludGVncmF0aW9uUHJvcHNcbiAgfVxufVxuXG4vKipcbiAqIFdoZW4gdXNpbmcgYE5vZGVqc0Z1bmN0aW9uYCB3aXRoIGBlbnRyeWAsIHdlIHBvaW50IENESyB0byBhIGZpbGUgd2l0aCBvdXIgbGFtYmRhIGNvZGUuIFRoaXMgY2FuXG4gKiBlaXRoZXIgYmUgYSBUeXBlU2NyaXB0IG9yIEphdmFTY3JpcHQgZmlsZS4gV2hlbiBjcmVhdGluZyBjb25zdHJ1Y3RzIGluIHRlc3RzIGluc2lkZSB0aGlzIGxpYnJhcnksXG4gKiB0aGUgZW50cnkgd2lsbCBwb2ludCB0byB0aGUgVHlwZVNjcmlwdCBmaWxlIGluIHRoZSBzb3VyY2UgY29kZS4gQnV0IHdoZW4gYSBsaWJyYXJ5IGNvbnN1bWVyIHVzZXNcbiAqIHRoaXMsIGl0IHdpbGwgaW5zdGVhZCBwb2ludCB0byB0aGUgdHJhbnNwaWxlZCBKYXZhU2NyaXB0IGZpbGUuIFNvIHRvIHNldCB0aGUgY29ycmVjdCBmaWxlXG4gKiBleHRlbnNpb24sIHdlIG11c3QgY2hlY2sgaWYgd2UncmUgYmVpbmcgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBUeXBlU2NyaXB0IHNvdXJjZSBjb2RlXG4gKiAoc3JjL2FwaS1nYXRld2F5KSwgb3RoZXJ3aXNlIHdlJ3JlIGJlaW5nIHJ1biBieSBhIGNvbnN1bWVyIGFzIHRyYW5zcGlsZWQgSmF2YVNjcmlwdC5cbiAqL1xuY29uc3QgYXV0aG9yaXplckZpbGVFeHRlbnNpb24gPSBfX2Rpcm5hbWUuZW5kc1dpdGgoXCJzcmMvYXBpLWdhdGV3YXlcIilcbiAgPyBcInRzXCJcbiAgOiBcImpzXCJcblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIHJlYWRzIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFjY2VzcyB0b2tlbj5gIGhlYWRlciBhbmRcbiAqIHZlcmlmaWVzIHRoZSB0b2tlbiBhZ2FpbnN0IGEgQ29nbml0byB1c2VyIHBvb2wuXG4gKi9cbmNsYXNzIENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXI8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nLFxuPiBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYTogbGFtYmRhLklGdW5jdGlvblxuXG4gIC8qKlxuICAgKiBVc2Ugc2ltcGxlIHJlc3BvbnNlIHR5cGUgKGB7IGlzQXV0aG9yaXplZDogdHJ1ZS9mYWxzZSB9YCksIGFzIG9wcG9zZWQgdG8gcmV0dXJuaW5nIGFuIElBTVxuICAgKiBQb2xpY3kgZG9jdW1lbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2VUeXBlczogYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZVtdID0gW1xuICAgIGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGUuU0lNUExFLFxuICBdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXJQcm9wczxBdXRoU2NvcGVzVD4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubGFtYmRhID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCBcIkF1dGhvcml6ZXJGdW5jdGlvblwiLCB7XG4gICAgICBlbnRyeTogcGF0aC5qb2luKFxuICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgIGBhdXRob3JpemVycy9jb2duaXRvLXVzZXItcG9vbC1hdXRob3JpemVyLiR7YXV0aG9yaXplckZpbGVFeHRlbnNpb259YCxcbiAgICAgICksXG4gICAgICBkZXBzTG9ja0ZpbGVQYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImF1dGhvcml6ZXJzL3BhY2thZ2UtbG9jay5qc29uXCIpLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFtcIlVTRVJfUE9PTF9JRFwiXTogcHJvcHMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgICAgW1wiUkVRVUlSRURfU0NPUEVcIl06IHByb3BzLnJlcXVpcmVkU2NvcGUgPz8gXCJcIixcbiAgICAgICAgW1wiQ1JFREVOVElBTFNfRk9SX0lOVEVSTkFMX0FVVEhPUklaQVRJT05cIl06XG4gICAgICAgICAgcHJvcHMuY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb25cbiAgICAgICAgICAgID8gcHJvcHMuY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb25cbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGlmIChwcm9wcy5jcmVkZW50aWFsc0ZvckludGVybmFsQXV0aG9yaXphdGlvbikge1xuICAgICAgc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBpZCArIFwiQmFzaWNBdXRoU2VjcmV0XCIsXG4gICAgICAgIHByb3BzLmNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uLFxuICAgICAgKS5ncmFudFJlYWQodGhpcy5sYW1iZGEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCByZWFkcyBgQXV0aG9yaXphdGlvbjogQmFzaWMgPGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzPmBcbiAqIGhlYWRlciBhbmQgdmVyaWZpZXMgdGhlIGNyZWRlbnRpYWxzIGFnYWluc3QgYSBnaXZlbiBzZWNyZXQuXG4gKi9cbmNsYXNzIEJhc2ljQXV0aEF1dGhvcml6ZXIgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IGxhbWJkYS5JRnVuY3Rpb25cblxuICAvLyBTaW1wbGUgaXMgYHsgaXNBdXRob3JpemVkOiB0cnVlL2ZhbHNlIH1gLCBhcyBvcHBvc2VkIHRvIHJldHVybmluZyBhbiBJQU0gUG9saWN5IGRvY3VtZW50XG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZVR5cGVzOiBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlW10gPSBbXG4gICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQmFzaWNBdXRoQXV0aG9yaXplclByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmxhbWJkYSA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgXCJCYXNpY0F1dGhMYW1iZGFcIiwge1xuICAgICAgZW50cnk6IHBhdGguam9pbihcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBgYXV0aG9yaXplcnMvYmFzaWMtYXV0aC1hdXRob3JpemVyLiR7YXV0aG9yaXplckZpbGVFeHRlbnNpb259YCxcbiAgICAgICksXG4gICAgICBkZXBzTG9ja0ZpbGVQYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImF1dGhvcml6ZXJzL3BhY2thZ2UtbG9jay5qc29uXCIpLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQW4gYXV0aG9yaXplciBmb3IgQVBJLUdhdGV3YXkgdGhhdCBjaGVja3MgQmFzaWMgQXV0aCBjcmVkZW50aWFscyBvbiByZXF1ZXN0c1wiLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBbXCJDUkVERU5USUFMU19TRUNSRVRfTkFNRVwiXTogcHJvcHMuY3JlZGVudGlhbHNTZWNyZXROYW1lXG4gICAgICAgICAgPyBwcm9wcy5jcmVkZW50aWFsc1NlY3JldE5hbWVcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBzZWNyZXRzbWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQgKyBcIkJhc2ljQXV0aFNlY3JldFwiLFxuICAgICAgcHJvcHMuY3JlZGVudGlhbHNTZWNyZXROYW1lLFxuICAgICkuZ3JhbnRSZWFkKHRoaXMubGFtYmRhKVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCBhbGxvd3MgYm90aDpcbiAqIC0gYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgaGVhZGVyLCBmb3Igd2hpY2ggdGhlIHRva2VuIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgZ2l2ZW5cbiAqICAgQ29nbml0byB1c2VyIHBvb2xcbiAqIC0gYEF1dGhvcml6YXRpb246IEJhc2ljIDxiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFscz5gIGhlYWRlciwgZm9yIHdoaWNoIHRoZSBjcmVkZW50aWFscyBhcmVcbiAqICAgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjcmVkZW50aWFscyBmcm9tIHRoZSBnaXZlbiBiYXNpYyBhdXRoIHNlY3JldCBuYW1lXG4gKlxuICogSWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBnaXZlbiBhbmQgdmFsaWQsIHRoZSByZXF1ZXN0IGlzIGF1dGhlbnRpY2F0ZWQuXG4gKi9cbmNsYXNzIENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplcjxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcsXG4+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhOiBsYW1iZGEuSUZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFVzZSBzaW1wbGUgcmVzcG9uc2UgdHlwZSAoYHsgaXNBdXRob3JpemVkOiB0cnVlL2ZhbHNlIH1gKSwgYXMgb3Bwb3NlZCB0byByZXR1cm5pbmcgYW4gSUFNXG4gICAqIFBvbGljeSBkb2N1bWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZVR5cGVzOiBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlW10gPSBbXG4gICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyUHJvcHM8QXV0aFNjb3Blc1Q+LFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmxhbWJkYSA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgXCJBdXRob3JpemVyRnVuY3Rpb25cIiwge1xuICAgICAgZW50cnk6IHBhdGguam9pbihcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBgYXV0aG9yaXplcnMvY29nbml0by11c2VyLXBvb2wtb3ItYmFzaWMtYXV0aC1hdXRob3JpemVyLiR7YXV0aG9yaXplckZpbGVFeHRlbnNpb259YCxcbiAgICAgICksXG4gICAgICBkZXBzTG9ja0ZpbGVQYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcImF1dGhvcml6ZXJzL3BhY2thZ2UtbG9jay5qc29uXCIpLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFtcIlVTRVJfUE9PTF9JRFwiXTogcHJvcHMudXNlclBvb2wgPyBwcm9wcy51c2VyUG9vbC51c2VyUG9vbElkIDogXCJcIixcbiAgICAgICAgW1wiUkVRVUlSRURfU0NPUEVcIl06IHByb3BzLnJlcXVpcmVkU2NvcGUgPz8gXCJcIixcbiAgICAgICAgW1wiQkFTSUNfQVVUSF9DUkVERU5USUFMU19TRUNSRVRfTkFNRVwiXTpcbiAgICAgICAgICBwcm9wcy5iYXNpY0F1dGhDcmVkZW50aWFsc1NlY3JldE5hbWVcbiAgICAgICAgICAgID8gcHJvcHMuYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBpZiAocHJvcHMuYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lKSB7XG4gICAgICBzZWNyZXRzbWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGlkICsgXCJCYXNpY0F1dGhTZWNyZXRcIixcbiAgICAgICAgcHJvcHMuYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lLFxuICAgICAgKS5ncmFudFJlYWQodGhpcy5sYW1iZGEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBzbGlnaHRseSBleHRlbmRlZCB2ZXJzaW9uIG9mIHRoZSBbZGVmYXVsdCBKU09OIGZvcm1hdCBzdWdnZXN0ZWQgYnkgQVdTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbG9nZ2luZy5odG1sI2h0dHAtYXBpLWVuYWJsZS1sb2dnaW5nLmV4YW1wbGVzKS5cbiAqL1xuY29uc3QgZGVmYXVsdEFjY2Vzc0xvZ0Zvcm1hdCA9IHtcbiAgcmVxdWVzdElkOiBcIiRjb250ZXh0LnJlcXVlc3RJZFwiLFxuICB1c2VyQWdlbnQ6IFwiJGNvbnRleHQuaWRlbnRpdHkudXNlckFnZW50XCIsXG4gIGlwOiBcIiRjb250ZXh0LmlkZW50aXR5LnNvdXJjZUlwXCIsXG4gIC8qKiBDTEYgZm9ybWF0OiBgZGQvTU1NL3l5eXk6SEg6bW06c3MgKy1oaG1tYCAqL1xuICByZXF1ZXN0VGltZTogXCIkY29udGV4dC5yZXF1ZXN0VGltZVwiLFxuICByZXF1ZXN0VGltZUVwb2NoOiBcIiRjb250ZXh0LnJlcXVlc3RUaW1lRXBvY2hcIixcbiAgZGF0YVByb2Nlc3NlZDogXCIkY29udGV4dC5kYXRhUHJvY2Vzc2VkXCIsXG4gIGh0dHBNZXRob2Q6IFwiJGNvbnRleHQuaHR0cE1ldGhvZFwiLFxuICBwYXRoOiBcIiRjb250ZXh0LnBhdGhcIixcbiAgcm91dGVLZXk6IFwiJGNvbnRleHQucm91dGVLZXlcIixcbiAgc3RhdHVzOiBcIiRjb250ZXh0LnN0YXR1c1wiLFxuICBwcm90b2NvbDogXCIkY29udGV4dC5wcm90b2NvbFwiLFxuICByZXNwb25zZUxlbmd0aDogXCIkY29udGV4dC5yZXNwb25zZUxlbmd0aFwiLFxuICByZXNwb25zZUxhdGVuY3k6IFwiJGNvbnRleHQucmVzcG9uc2VMYXRlbmN5XCIsXG4gIGRvbWFpbk5hbWU6IFwiJGNvbnRleHQuZG9tYWluTmFtZVwiLFxuICBlcnJvcjoge1xuICAgIHR5cGU6IFwiJGNvbnRleHQuZXJyb3IucmVzcG9uc2VUeXBlXCIsXG4gICAgZ2F0ZXdheUVycm9yOiBcIiRjb250ZXh0LmVycm9yLm1lc3NhZ2VcIixcbiAgICBpbnRlZ3JhdGlvbkVycm9yOiBcIiRjb250ZXh0LmludGVncmF0aW9uLmVycm9yXCIsXG4gICAgYXV0aG9yaXplckVycm9yOiBcIiRjb250ZXh0LmF1dGhvcml6ZXIuZXJyb3JcIixcbiAgfSxcbiAgaW50ZWdyYXRpb246IHtcbiAgICBsYXRlbmN5OiBcIiRjb250ZXh0LmludGVncmF0aW9uLmxhdGVuY3lcIixcbiAgICByZXF1ZXN0SWQ6IFwiJGNvbnRleHQuaW50ZWdyYXRpb24ucmVxdWVzdElkXCIsXG4gICAgcmVzcG9uc2VTdGF0dXM6IFwiJGNvbnRleHQuaW50ZWdyYXRpb24uc3RhdHVzXCIsXG4gIH0sXG4gIGF1dGg6IHtcbiAgICBpYW06IHtcbiAgICAgIHVzZXJBcm46IFwiJGNvbnRleHQuaWRlbnRpdHkudXNlckFyblwiLFxuICAgICAgYXdzQWNjb3VudDogXCIkY29udGV4dC5pZGVudGl0eS5hY2NvdW50SWRcIixcbiAgICAgIGF3c1ByaW5jaXBhbDogXCIkY29udGV4dC5pZGVudGl0eS5jYWxsZXJcIixcbiAgICAgIGF3c1ByaW5jaXBhbE9yZzogXCIkY29udGV4dC5pZGVudGl0eS5wcmluY2lwYWxPcmdJZFwiLFxuICAgIH0sXG4gICAgYmFzaWM6IHsgdXNlcm5hbWU6IFwiJGNvbnRleHQuYXV0aG9yaXplci51c2VybmFtZVwiIH0sXG4gICAgY29nbml0bzogeyBjbGllbnRJZDogXCIkY29udGV4dC5hdXRob3JpemVyLmNsaWVudElkXCIgfSxcbiAgfSxcbiAgYXdzRW5kcG9pbnRSZXF1ZXN0OiB7XG4gICAgaWQ6IFwiJGNvbnRleHQuYXdzRW5kcG9pbnRSZXF1ZXN0SWRcIixcbiAgICBpZDI6IFwiJGNvbnRleHQuYXdzRW5kcG9pbnRSZXF1ZXN0SWQyXCIsXG4gIH0sXG4gIG1lc3NhZ2U6XG4gICAgXCIkY29udGV4dC5pZGVudGl0eS5zb3VyY2VJcCAtICRjb250ZXh0Lmh0dHBNZXRob2QgJGNvbnRleHQuZG9tYWluTmFtZSAkY29udGV4dC5wYXRoICgkY29udGV4dC5yb3V0ZUtleSkgLSAkY29udGV4dC5zdGF0dXMgWyRjb250ZXh0LnJlc3BvbnNlTGF0ZW5jeSBtc11cIixcbn1cblxuLyoqXG4gKiBFbmFibGVzIGFjY2VzcyBsb2dzIG9uIHRoZSBBUEktR2F0ZXdheS5cbiAqXG4gKiBAYXV0aG9yIEtyaXN0aWFuIFJla3N0YWQgPGtyZUBjYXByYWNvbnN1bHRpbmcubm8+XG4gKi9cbmNsYXNzIEFwaUdhdGV3YXlBY2Nlc3NMb2dzIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzdGFnZTogYXBpZ3cuQ2ZuU3RhZ2UsXG4gICAgcHJvcHM6IEFwaUdhdGV3YXlBY2Nlc3NMb2dzUHJvcHMgfCB1bmRlZmluZWQsXG4gICAgZGVmYXVsdEFjY2Vzc0xvZ0Zvcm1hdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIC8vIGxvZ0dyb3VwIGlzIHNldCB1cCB3aXRoIGhlbHAgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xMTEwMCNpc3N1ZWNvbW1lbnQtOTA0NjI3MDgxXG4gICAgLy8gTm90IHN1cmUgaWYgSFRUUCBBUEkgYWN0dWFsbHkgbmVlZHMgdGhlIHNlcnZpY2Ugcm9sZSB3aXRoIG1hbmFnZWQgcG9saWN5OiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbG9nZ2luZy5odG1sXG4gICAgY29uc3QgYWNjZXNzTG9ncyA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsIFwiQWNjZXNzTG9nR3JvdXBcIiwge1xuICAgICAgcmV0ZW50aW9uOiBwcm9wcz8ucmV0ZW50aW9uLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHM/LnJlbW92YWxQb2xpY3kgPz8gY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgLy8gQWx3YXlzIHVzZSB0aGUgZGVmYXVsdCBlbmNyeXB0aW9uIGtleS4gT3RoZXJ3aXNlLCB0aGUga2V5IG5lZWRzIHNwZWNpYWwgcG9saWNpZXM6XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9lbmNyeXB0LWxvZy1kYXRhLWttcy5odG1sI2Ntay1wZXJtaXNzaW9uc1xuICAgICAgZW5jcnlwdGlvbktleTogdW5kZWZpbmVkLFxuICAgIH0pXG4gICAgdGhpcy5sb2dHcm91cCA9IGFjY2Vzc0xvZ3NcblxuICAgIHN0YWdlLmFjY2Vzc0xvZ1NldHRpbmdzID0ge1xuICAgICAgZGVzdGluYXRpb25Bcm46IGFjY2Vzc0xvZ3MubG9nR3JvdXBBcm4sXG4gICAgICBmb3JtYXQ6IEpTT04uc3RyaW5naWZ5KHByb3BzPy5hY2Nlc3NMb2dGb3JtYXQgPz8gZGVmYXVsdEFjY2Vzc0xvZ0Zvcm1hdCksXG4gICAgfVxuXG4gICAgY29uc3QgYXBpR3dMb2dzUm9sZSA9IG5ldyBpYW0uUm9sZShcbiAgICAgIHRoaXMsXG4gICAgICBcIkFwaUdhdGV3YXlQdXNoVG9DbG91ZHdhdGNoTG9nc1JvbGVcIixcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJhcGlnYXRld2F5LmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICAgIFwic2VydmljZS1yb2xlL0FtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9nc1wiLFxuICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIClcblxuICAgIGFjY2Vzc0xvZ3MuZ3JhbnRXcml0ZShhcGlHd0xvZ3NSb2xlKVxuICB9XG59XG5cbi8qKiBSZXR1cm5zIGEgc2hvcnQgc2VtaS11bmlxdWUgaGFzaCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLiAqL1xuZnVuY3Rpb24gc2hvcnRIYXNoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gU0hBLTEgaXMgbm8tbm8gd2hlbiB3ZSBuZWVkIGNyeXB0b2dyYXBoaWMgc2VjdXJpdHksIGJ1dCBoZXJlIHdlIGp1c3QgaXQgZm9yIHNob3J0ZW5pbmcgYSBuYW1lLFxuICAvLyB3aGljaCBpcyBmaW5lXG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMVwiKS51cGRhdGUoc3RyKS5kaWdlc3QoXCJoZXhcIikuc3Vic3RyaW5nKDAsIDEwKVxufVxuIl19
|
|
596
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1hcGktZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGktZ2F0ZXdheS9odHRwLWFwaS1nYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBR2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUE7QUFFaEQsT0FBTyxLQUFLLEtBQUssTUFBTSw4QkFBOEIsQ0FBQTtBQUNyRCxPQUFPLEtBQUssSUFBSSxNQUFNLHNCQUFzQixDQUFBO0FBQzVDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFDMUMsT0FBTyxLQUFLLGNBQWMsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNoRSxPQUFPLEtBQUssWUFBWSxNQUFNLDJDQUEyQyxDQUFBO0FBQ3pFLE9BQU8sS0FBSyxXQUFXLE1BQU0sMENBQTBDLENBQUE7QUFFdkUsT0FBTyxLQUFLLFlBQVksTUFBTSwrQkFBK0IsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ25DLE9BQU8sS0FBSyxPQUFPLE1BQU0seUJBQXlCLENBQUE7QUFDbEQsT0FBTyxLQUFLLGNBQWMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUNqRSxPQUFPLEtBQUssR0FBRyxNQUFNLG9DQUFvQyxDQUFBO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUVuQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FB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d0JBQXdCLENBQ3hDLG1EQUFtRCxDQUNwRDthQUNGO1NBQ0YsQ0FDRixDQUFBO1FBRUQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0NBQ0Y7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxTQUFTLENBQUMsR0FBVztJQUM1QixpR0FBaUc7SUFDakcsZ0JBQWdCO0lBQ2hCLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB0eXBlICogYXMgZWxiIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiXG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0IHR5cGUgKiBhcyBzcXMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zcXNcIlxuaW1wb3J0ICogYXMgYXBpZ3cgZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIlxuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIlxuaW1wb3J0ICogYXMgaW50ZWdyYXRpb25zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uc1wiXG5pbXBvcnQgKiBhcyBhdXRob3JpemVycyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mi1hdXRob3JpemVyc1wiXG5pbXBvcnQgdHlwZSB7IElVc2VyUG9vbCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29nbml0b1wiXG5pbXBvcnQgKiBhcyBsYW1iZGFOb2RlanMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCJcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCAqIGFzIHJvdXRlNTMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCJcbmltcG9ydCAqIGFzIHJvdXRlNTNUYXJnZXRzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCJcbmltcG9ydCAqIGFzIGFjbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiXG5pbXBvcnQgeyB0YWdSZXNvdXJjZXMgfSBmcm9tIFwiLi4vdGFnc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCJcblxuY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpXG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSB7QGxpbmsgQXBpR2F0ZXdheX0gY29uc3RydWN0LlxuICpcbiAqIEBhdXRob3IgS3Jpc3RpYW4gUmVrc3RhZCA8a3JlQGNhcHJhY29uc3VsdGluZy5ubz5cbiAqIEBhdXRob3IgSGVybWFubiBNw7hya3JpZCA8aGVtQGxpZmxpZy5ubz5cbiAqL1xuZXhwb3J0IHR5cGUgQXBpR2F0ZXdheVByb3BzPEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IHtcbiAgLyoqIFNldHRpbmdzIGZvciB0aGUgZXh0ZXJuYWwtZmFjaW5nIHBhcnQgb2YgdGhlIEFQSS1HVy4gKi9cbiAgZG5zOiBBcGlHYXRld2F5RG5zUHJvcHNcblxuICAvKipcbiAgICogSWYgbm8gaW50ZWdyYXRpb24gaXMgc3BlY2lmaWVkIGZvciBhIHJvdXRlLCB0aGlzIGludGVncmF0aW9uIGlzIHVzZWQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgSW50ZWdyYXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICovXG4gIGRlZmF1bHRJbnRlZ3JhdGlvbj86IEludGVncmF0aW9uUHJvcHNcblxuICAvKipcbiAgICogSWYgbm8gYXV0aG9yaXphdGlvbiBpcyBzcGVjaWZpZWQgZm9yIGEgcm91dGUsIHRoaXMgYXV0aG9yaXphdGlvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIEF1dGhvcml6YXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICovXG4gIGRlZmF1bHRBdXRob3JpemF0aW9uPzogQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUPlxuXG4gIHJvdXRlczogQXBpR2F0ZXdheVJvdXRlPEF1dGhTY29wZXNUPltdXG5cbiAgLyoqXG4gICAqIFRoZSBBUEktR1cgYWNjZXNzIGxvZ3MgZm9yIHRoZSBgJGRlZmF1bHRgIHN0YWdlIGFyZSBrZXB0LlxuICAgKiBUaGlzIGhhcyBvcHRpb25zIGZvciB0aGUgbG9ncy5cbiAgICovXG4gIGFjY2Vzc0xvZ3M/OiBBcGlHYXRld2F5QWNjZXNzTG9nc1Byb3BzXG5cbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHJvdXRlLWxldmVsIG1ldHJpY3MuXG4gICAqIFRoaXMgY2FuIGluY3JlYXNlIENsb3VkV2F0Y2ggY29zdHMgd2hlbiBub3QgZGlzYWJsZWQuXG4gICAqXG4gICAqIFNlZSBbQVdTOiBXb3JraW5nIHdpdGggbWV0cmljcyBmb3IgSFRUUCBBUElzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbWV0cmljcy5odG1sP2ljbXBpZD1hcGlnYXRld2F5X2NvbnNvbGVfaGVscCM6fjp0ZXh0PWFuZCUyMHN0YWdlJTIwSUQuLSxBcGlJZCUyQyUyMFN0YWdlJTJDJTIwUm91dGUsLUZpbHRlcnMlMjBBUEklMjBHYXRld2F5KVxuICAgKiBmb3IgbW9yZSBpbmZvLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBkZXRhaWxlZE1ldHJpY3M/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFRocm90dGxpbmcgb2YgcmVxdWVzdHMuXG4gICAqIElmIG5vdCBzZXQsIHRoZSBBV1MgZGVmYXVsdCBvZiA1MDAwIGJ1cnN0IGFuZCAxMDAwMCByYXRlIGlzIHVzZWQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHRocm90dGxpbmcgaXMgcGVyLWFjY291bnQsIGFuZCBjb3VudHMgYWxsIEFQSXMgaW4gdGhlIGFjY291bnQgYW5kIHJlZ2lvbi5cbiAgICogSWYgeW91IGhhdmUgYW5vdGhlciBBUEkgaW4gdGhpcyByZWdpb24gZ2V0dGluZyAxMF8wMDAgcmVxdWVzdCByYXRlLCBpdCBtYXkgaW1wYWN0IHRoaXMgQVBJIGFzIHdlbGwuXG4gICAqL1xuICB0aHJvdHRsaW5nPzoge1xuICAgIC8qKlxuICAgICAqIEdvaW5nIG92ZXIgYDVfMDAwYCBtYXkgcmVxdWlyZSB5b3UgdG8gY29udGFjdCBBV1MgU3VwcG9ydCAtIHRoZXkgYXJlIGFjY291bnQgYm91bmQuXG4gICAgICovXG4gICAgYnVyc3Q/OiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBHb2luZyBvdmVyIGAxMF8wMDBgIG1heSByZXF1aXJlIHlvdSB0byBjb250YWN0IEFXUyBTdXBwb3J0IC0gdGhleSBhcmUgYWNjb3VudCBib3VuZC5cbiAgICAgKi9cbiAgICByYXRlPzogbnVtYmVyXG4gIH1cblxuICAvKipcbiAgICogU2V0cyBDT1JTIGhlYWRlcnMgb24gcmVzcG9uc2VzIGZyb20gdGhlIEFQSSBHYXRld2F5IHRvIGFsbG93IGFsbCBvcmlnaW5zLCBoZWFkZXJzIGFuZCBtZXRob2RzLlxuICAgKiBVc2VmdWwgaWYgeW91ciBBUEkgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IGFueSBicm93c2VyLlxuICAgKi9cbiAgY29yc0FsbG93QWxsPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBJZiBzb21lIHNldHRpbmdzIGluIHRoaXMgY29uc3RydWN0IGRvIG5vdCB3b3JrIGZvciB5b3UsIHRoaXMgaXMgYW4gZXNjYXBlIGhhdGNoIG1lY2hhbmlzbSB0b1xuICAgKiBvdmVycmlkZSBhbnl0aGluZy5cbiAgICovXG4gIHByb3BzT3ZlcnJpZGU/OiB7XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgc2V0dGluZ3MgZm9yIHRoZSB7QGxpbmsgYXBpZ3cuSHR0cEFwaX0gKGFjY2Vzc2libGUgaW4ge0BsaW5rIEFwaUdhdGV3YXkuaHR0cEFwaX0pLlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgZnJvbnRlbmQgYWNjZXNzaW5nIHRoaXMgQVBJLCB5b3UgbWlnaHQgd2FudCB0byBzZXRcbiAgICAgKiBbQ09SUyBwcmVmbGlnaHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YxL2RvY3MvYXdzLWFwaWdhdGV3YXl2Mi1yZWFkbWUuaHRtbCNjcm9zcy1vcmlnaW4tcmVzb3VyY2Utc2hhcmluZy1jb3JzKVxuICAgICAqIHNldHRpbmdzLlxuICAgICAqL1xuICAgIGh0dHBBcGk/OiBQYXJ0aWFsPGFwaWd3Lkh0dHBBcGlQcm9wcz5cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBBcGlHYXRld2F5RG5zUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBPbmx5IHRoZSBzdWJkb21haW4gcHJlZml4LCB3aGljaCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UuXG4gICAqIEV4YW1wbGU6IFN1YmRvbWFpbiBgcHJvZHVjdGAgd291bGQgZ2l2ZSB0aGUgZW5kIHJlc3VsdCBvZiBhbiBBUEktR1cgd2l0aFxuICAgKiBgcHJvZHVjdC5wbGF0Zm9ybS5leGFtcGxlLm5vYC5cbiAgICovXG4gIHN1YmRvbWFpbjogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEhvc3RlZCBab25lIGZvciB0aGUgZXh0ZXJuYWwgZmFjaW5nIGRvbWFpbi5cbiAgICogVGhpcyBpcyB3aGVyZSByb3V0ZXMgd2lsbCBiZSBjcmVhdGVkLCB0byByZWRpcmVjdCBjb25zdW1lcnMgdG8gdGhlIEFQSS1HVy5cbiAgICogRm9yIGV4YW1wbGUgYSBIWiBmb3IgYHBsYXRmb3JtLmV4YW1wbGUubm9gLlxuICAgKi9cbiAgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZVxuXG4gIC8qKlxuICAgKiBUaGUgVGltZSBUbyBMaXZlIChUVEwpIGZvciB0aGUgcHVibGljIEROUyBBIHJlY29yZCB0aGF0IHdpbGwgZXhwb3NlIHRoZSBBUEktR1cuXG4gICAqIFRoaXMgaXMgaG93IGxvbmcgRE5TIHNlcnZlcnMgd2lsbCBjYWNoZSB0aGUgcmVjb3JkLlxuICAgKlxuICAgKiBBIGxvbmcgVFRMIChob3VycykgaXMgYmVuZWZpY2lhbCB0byBETlMgc2VydmVycywgYnV0IG1ha2VzIGRldmVsb3BlcnMgKHlvdSkgd2FpdCBsb25nZXIgd2hlblxuICAgKiBkb2luZyBjaGFuZ2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCA1IG1pbnV0ZXNcbiAgICovXG4gIHR0bD86IGNkay5EdXJhdGlvblxufVxuXG5leHBvcnQgdHlwZSBBcGlHYXRld2F5Um91dGU8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0ge1xuICAvKiogVGhlIHBhdGggb2YgdGhlIHJvdXRlIHRvIGV4cG9zZSB0aHJvdWdoIHRoZSBBUEkgR2F0ZXdheS4gVXNlIFwiL1wiIGZvciB0aGUgcm9vdCByb3V0ZS4gKi9cbiAgcGF0aDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHdlIG9ubHkgZm9yd2FyZCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSByb3V0ZSdzIHBhdGggZXhhY3RseS4gU28gZm9yIGEgcm91dGUgd2l0aFxuICAgKiBwYXRoIGAvYXBpL3VzZXJzYCwgYSByZXF1ZXN0IHRvIGAvYXBpL3VzZXJzYCB3aWxsIGJlIGZvcndhcmRlZCwgYnV0IGEgcmVxdWVzdCB0b1xuICAgKiBgL2FwaS91c2Vycy9hZG1pbmAgd2lsbCBub3QuIElmIHlvdSB3YW50IHRvIGZvcndhcmQgcmVxdWVzdHMgdG8gYWxsIHN1Yi1wYXRocyB1bmRlciB0aGUgcm91dGUnc1xuICAgKiBwYXRoLCB5b3UgY2FuIHNldCB0aGlzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmNsdWRlU3VicGF0aHM/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQIG1ldGhvZCB0byBleHBvc2UuIGBBTllgIGV4cG9zZXMgYWxsIEhUVFAgbWV0aG9kcyBvbiB0aGUgcGF0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJBTllcIlxuICAgKi9cbiAgbWV0aG9kPzogSHR0cE1ldGhvZFxuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGhhdCB0aGUgcm91dGUgd2lsbCBmb3J3YXJkIHRvLiBTZWUge0BsaW5rIEludGVncmF0aW9uUHJvcHN9IGZvciB0aGUgYXZhaWxhYmxlXG4gICAqIG9wdGlvbnMuXG4gICAqXG4gICAqIElmIHVuZGVmaW5lZCwgdXNlcyB0aGUge0BsaW5rIEFwaUdhdGV3YXlQcm9wcy5kZWZhdWx0SW50ZWdyYXRpb259LlxuICAgKi9cbiAgaW50ZWdyYXRpb24/OiBJbnRlZ3JhdGlvblByb3BzXG5cbiAgLyoqXG4gICAqIEhvdyByZXF1ZXN0cyBvbiB0aGUgcm91dGUgYXJlIGF1dGhlbnRpY2F0ZWQuIFNlZSB7QGxpbmsgQXV0aG9yaXphdGlvblByb3BzfSBmb3IgdGhlIGF2YWlsYWJsZVxuICAgKiBvcHRpb25zLlxuICAgKlxuICAgKiBJZiB1bmRlZmluZWQsIHVzZXMgdGhlIHtAbGluayBBcGlHYXRld2F5UHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb259LlxuICAgKi9cbiAgYXV0aG9yaXphdGlvbj86IEF1dGhvcml6YXRpb25Qcm9wczxBdXRoU2NvcGVzVD5cbn1cblxuZXhwb3J0IHR5cGUgSHR0cE1ldGhvZCA9XG4gIHwgXCJBTllcIlxuICB8IFwiR0VUXCJcbiAgfCBcIlBPU1RcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkRFTEVURVwiXG4gIHwgXCJPUFRJT05TXCJcbiAgfCBcIkhFQURcIlxuXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvblByb3BzID1cbiAgLyoqIFVzZSB0aGlzIHdoZW4gY29ubmVjdGluZyB0aGUgcm91dGUgdG8gYW4gQUxCIChBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKS4gKi9cbiAgfCAoeyB0eXBlOiBcIkFMQlwiIH0gJiBBbGJJbnRlZ3JhdGlvblByb3BzKVxuICAvKiogVXNlIHRoaXMgd2hlbiBjb25uZWN0aW5nIHJvdXRlIHRvIGEgTGFtYmRhLiAqL1xuICB8ICh7IHR5cGU6IFwiTGFtYmRhXCIgfSAmIExhbWJkYUludGVncmF0aW9uUHJvcHMpXG4gIC8qKiBVc2UgdGhpcyB3aGVuIGNvbm5lY3RpbmcgYSByb3V0ZSB0byBzZW5kIHRvIGFuIFNRUyBxdWV1ZS4gKi9cbiAgfCAoeyB0eXBlOiBcIlNRU1wiIH0gJiBTcXNJbnRlZ3JhdGlvblByb3BzKVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgQVBJLUdXIC0+IEFMQiAoQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcikgaW50ZWdyYXRpb24uXG4gKlxuICogU2VlIHRoZSBub3RlIG9uIHtAbGluayBBcGlHYXRld2F5fSBhYm91dCB0aGUgbG9hZCBiYWxhbmNlciBzZWN1cml0eSBncm91cC5cbiAqL1xuZXhwb3J0IHR5cGUgQWxiSW50ZWdyYXRpb25Qcm9wcyA9IHtcbiAgLyoqXG4gICAqIEEgbGlzdGVuZXIgb24gZS5nLiBwb3J0IDQ0MyAoSFRUUFMpLlxuICAgKlxuICAgKiBTZWUgdGhlIG5vdGUgb24ge0BsaW5rIEFwaUdhdGV3YXl9IGFib3V0IHRoZSBsb2FkIGJhbGFuY2VyIHNlY3VyaXR5IGdyb3VwLlxuICAgKi9cbiAgbG9hZEJhbGFuY2VyTGlzdGVuZXI6IGVsYi5JQXBwbGljYXRpb25MaXN0ZW5lclxuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBuYW1lIChkb21haW4gbmFtZSkgb2YgdGhlIGJhY2tlbmQgc2VydmljZSB0aGF0IHdlIHdhbnQgdG8gcmVhY2ggdGhyb3VnaCB0aGUgQUxCLlxuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgdG86XG4gICAqIC0gVmVyaWZ5IHRoZSBIVFRQUyBjZXJ0aWZpY2F0ZSBvZiB0aGUgYmFja2VuZCBzZXJ2aWNlLCBzbyB0aGF0IHRoZSByZXF1ZXN0IGZvcndhcmRlZCBmcm9tXG4gICAqICAgQVBJLUdXIGNhbiB1c2UgVExTXG4gICAqIC0gU2V0IHRoZSBgSG9zdGAgaGVhZGVyIG9uIHRoZSByZXF1ZXN0IHdoZW4gZm9yd2FyZGluZyB0byB0aGUgQUxCLCBzbyB0aGF0IHJlcXVlc3RzIGNhbiBiZVxuICAgKiAgIHJvdXRlZCB0byB0aGUgY29ycmVjdCBUYXJnZXQgR3JvdXBcbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYDxzZXJ2aWNlPi5zdGFnaW5nLm15LXByb2plY3QubGlmbGlnLmlvYCAobm90IHByZWZpeGVkIGJ5IGBodHRwczovL2ApLlxuICAgKi9cbiAgaG9zdE5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIHVzZWQgYnkgdGhlIEFMQi4gVGhlIEFQSS1HVyBpbnRlZ3JhdGlvbiB3aWxsIGNvbm5lY3QgdG8gdGhlIEFMQiB1c2luZyBhIFZQQyBMaW5rIGZvclxuICAgKiB0aGlzIFZQQy5cbiAgICpcbiAgICogU2VlIHRoZSBub3RlIG9uIHtAbGluayBBcGlHYXRld2F5fSBhYm91dCB0aGUgbG9hZCBiYWxhbmNlciBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIHZwYzogZWMyLklWcGNcblxuICAvKipcbiAgICogQSBzZWN1cml0eSBncm91cCAoU0cpIHRoYXQgYWxsb3dzIGluY29taW5nIHRyYWZmaWMgdG8gdGhlIEFMQi4gV2lsbCBiZSB1c2VkIGJ5IHRoZSBWUEMgbGluaywgc29cbiAgICogdGhlIEFQSS1HVyBpbnRlZ3JhdGlvbiBjYW4gY29ubmVjdC5cbiAgICpcbiAgICogVGhpcyBpcyB1c3VhbGx5IHRoZSBzYW1lIFNHIGFzIHRoZSBBTEIgdXNlcywgYmVjYXVzZSB0aGV5IGhhdmUgYSBydWxlIHRoYXQgYWxsb3dzIHRyYWZmaWMgZnJvbVxuICAgKiBvdGhlcnMgaW4gdGhlIHNhbWUgU0cuXG4gICAqXG4gICAqIFNlZSB0aGUgbm90ZSBvbiB7QGxpbmsgQXBpR2F0ZXdheX0gYWJvdXQgdGhlIGxvYWQgYmFsYW5jZXIgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICBzZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXBcblxuICAvKipcbiAgICogTWFwIHJlcXVlc3QgcGFyYW1ldGVycyAoYWRkL292ZXJ3cml0ZSBwYXRoL2hlYWRlcnMvcXVlcnkgcGFyYW1zKSBiZWZvcmUgZm9yd2FyZGluZyB0byB0aGVcbiAgICogYmFja2VuZC5cbiAgICpcbiAgICogU2VlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktcGFyYW1ldGVyLW1hcHBpbmcuaHRtbH1cbiAgICogZm9yIG1vcmUgb24gdGhpcy4gUmVhZCB0aGUgJ1Jlc2VydmVkIGhlYWRlcnMnIHNlY3Rpb24gZm9yIHdoaWNoIGhlYWRlcnMgY2Fubm90IGJlIG92ZXJyaWRkZW4uXG4gICAqIEluIGFkZGl0aW9uIHRvIHRoZSBBV1MtcmVzZXJ2ZWQgaGVhZGVycywgeW91IHNob3VsZCBub3Qgb3ZlcnJpZGUgdGhlICdIb3N0JyBoZWFkZXIgZWl0aGVyLCBhc1xuICAgKiB0aGF0J3MgdXNlZCBmb3Igcm91dGluZyB0aGUgcmVxdWVzdCB0byB0aGUgY29ycmVjdCBzZXJ2aWNlIGJlaGluZCB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICpcbiAgICogIyMjIEV4YW1wbGU6XG4gICAqXG4gICAqIEFkZGluZyBhIGhlYWRlcjpcbiAgICogYGBgXG4gICAqIG1hcFBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzKSA9PiBwYXJhbWV0ZXJzLm92ZXJ3cml0ZUhlYWRlcihcbiAgICogICAgXCJYLU15LUN1c3RvbS1IZWFkZXJcIixcbiAgICogICAgYXBpZ3cuTWFwcGluZ1ZhbHVlLmN1c3RvbShcIm15LWN1c3RvbS12YWx1ZVwiKSxcbiAgICogKVxuICAgKiBgYGBcbiAgICpcbiAgICogT3ZlcndyaXRpbmcgdGhlIHBhdGggKGlmLCBmb3IgZXhhbXBsZSwgeW91IGNvbmZpZ3VyZSBhIGAvdXNlcnNgIHJvdXRlIG9uIHRoZSBBUEkgR2F0ZXdheSB0aGF0XG4gICAqIHlvdSB3YW50IHRvIGZvcndhcmQgdG8gYC9hcGkvdXNlcnNgIG9uIHRoZSBiYWNrZW5kKTpcbiAgICogYGBgXG4gICAqIG1hcFBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzKSA9PiBwYXJhbWV0ZXJzLm92ZXJ3cml0ZVBhdGgoXCIvYXBpL3VzZXJzXCIpXG4gICAqIGBgYFxuICAgKi9cbiAgbWFwUGFyYW1ldGVycz86IChwYXJhbWV0ZXJzOiBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKSA9PiB2b2lkXG59XG5cbmV4cG9ydCB0eXBlIExhbWJkYUludGVncmF0aW9uUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGludGVncmF0aW9uIHVzZXMgdGhlIFYyIHBheWxvYWQgZm9ybWF0OlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWRldmVsb3AtaW50ZWdyYXRpb25zLWxhbWJkYS5odG1sfVxuICAgKlxuICAgKiBJZiB3cml0aW5nIHRoZSBMYW1iZGEgaW4gVHlwZVNjcmlwdCwgdGhpcyBtZWFucyB5b3Ugc2hvdWxkIHVzZSBgQVBJR2F0ZXdheVByb3h5RXZlbnRWMmAgYXMgdGhlXG4gICAqIHJlcXVlc3QgdHlwZSwgYW5kIGBBUElHYXRld2F5UHJveHlSZXN1bHRWMmAgYXMgdGhlIHJlc3BvbnNlIHR5cGUuXG4gICAqL1xuICBsYW1iZGE6IGxhbWJkYS5JRnVuY3Rpb25cbn1cblxuZXhwb3J0IHR5cGUgU3FzSW50ZWdyYXRpb25Qcm9wcyA9IHtcbiAgcXVldWU6IHNxcy5JUXVldWVcblxuICAvKipcbiAgICogTWVzc2FnZSBhdHRyaWJ1dGVzIHRvIHBhc3Mgb24gdG8gU1FTLiBUaGUga2V5cyBpbiB0aGlzIG9iamVjdCBhcmUgdGhlIG5hbWVzIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICAgKiBFYWNoIGF0dHJpYnV0ZSBoYXMgYSBEYXRhVHlwZSBmaWVsZCwgYW5kIGVpdGhlciBhIFN0cmluZ1ZhbHVlIG9yIEJpbmFyeVZhbHVlIGZpZWxkIGRlcGVuZGluZyBvblxuICAgKiBpdHMgdHlwZS4gU2VlIEFXUyBkb2NzOlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX01lc3NhZ2VBdHRyaWJ1dGVWYWx1ZS5odG1sXG4gICAqXG4gICAqIEluIHRoZSBTdHJpbmdWYWx1ZSBmaWVsZCwgeW91IGNhbiBkbyBBUEkgR2F0ZXdheSBwYXJhbWV0ZXIgbWFwcGluZzpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLXBhcmFtZXRlci1tYXBwaW5nLmh0bWxcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgXG4gICAqIG1lc3NhZ2VBdHRyaWJ1dGVzOiB7XG4gICAqICAgY2xpZW50SWQ6IHtcbiAgICogICAgIERhdGFUeXBlOiBcIlN0cmluZ1wiLFxuICAgKiAgICAgU3RyaW5nVmFsdWU6IFwiJHtjb250ZXh0LmF1dGhvcml6ZXIuY2xpZW50SWR9XCIsXG4gICAqICAgfSxcbiAgICogfSxcbiAgICogYGBgXG4gICAqL1xuICBtZXNzYWdlQXR0cmlidXRlcz86IHtcbiAgICBbYXR0cmlidXRlTmFtZTogc3RyaW5nXTpcbiAgICAgIHwgeyBEYXRhVHlwZTogXCJTdHJpbmdcIiB8IFwiTnVtYmVyXCI7IFN0cmluZ1ZhbHVlOiBzdHJpbmcgfVxuICAgICAgfCB7XG4gICAgICAgICAgRGF0YVR5cGU6IFwiQmluYXJ5XCJcbiAgICAgICAgICAvKiogQmFzZTY0LWVuY29kZWQgYmluYXJ5IGRhdGEgb2JqZWN0LiAqL1xuICAgICAgICAgIEJpbmFyeVZhbHVlOiBzdHJpbmdcbiAgICAgICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIEF1dGhvcml6YXRpb25Qcm9wczxBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPVxuICAvKipcbiAgICogTm8gYXV0aGVudGljYXRpb24sIGZvciB3aGVuIHlvdSB3YW50IGEgZnVsbHkgcHVibGljIHJvdXRlIChvciBoYW5kbGUgYXV0aGVudGljYXRpb24gaW4gdGhlXG4gICAqIGJhY2tlbmQgaW50ZWdyYXRpb24pLlxuICAgKi9cbiAgfCB7IHR5cGU6IFwiTk9ORVwiIH1cbiAgLyoqXG4gICAqIEFXUyBJQU0gYXV0aG9yaXphdGlvbi5cbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWFjY2Vzcy1jb250cm9sLWlhbS5odG1sXG4gICAqL1xuICB8IHsgdHlwZTogXCJJQU1cIiB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIHJlYWRzIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFjY2VzcyB0b2tlbj5gIGhlYWRlclxuICAgKiBhbmQgdmVyaWZpZXMgdGhlIHRva2VuIGFnYWluc3QgYSBDb2duaXRvIHVzZXIgcG9vbC5cbiAgICovXG4gIHwgKHtcbiAgICAgIHR5cGU6IFwiQ09HTklUT19VU0VSX1BPT0xcIlxuICAgIH0gJiBDb2duaXRvVXNlclBvb2xBdXRob3JpemVyUHJvcHM8QXV0aFNjb3Blc1Q+KVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCByZWFkcyBgQXV0aG9yaXphdGlvbjogQmFzaWMgPGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzPmBcbiAgICogaGVhZGVyIGFuZCB2ZXJpZmllcyB0aGUgY3JlZGVudGlhbHMgYWdhaW5zdCBhIGdpdmVuIHNlY3JldC5cbiAgICovXG4gIHwgKHsgdHlwZTogXCJCQVNJQ19BVVRIXCIgfSAmIEJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wcylcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggYWxsb3dzIGJvdGg6XG4gICAqIC0gYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgaGVhZGVyLCBmb3Igd2hpY2ggdGhlIHRva2VuIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGVcbiAgICogICBnaXZlbiBDb2duaXRvIHVzZXIgcG9vbFxuICAgKiAtIGBBdXRob3JpemF0aW9uOiBCYXNpYyA8YmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbHM+YCBoZWFkZXIsIGZvciB3aGljaCB0aGUgY3JlZGVudGlhbHMgYXJlXG4gICAqICAgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjcmVkZW50aWFscyBmcm9tIHRoZSBnaXZlbiBiYXNpYyBhdXRoIHNlY3JldCBuYW1lXG4gICAqXG4gICAqIElmIGVpdGhlciBvZiB0aGVzZSBhcmUgZ2l2ZW4gYW5kIHZhbGlkLCB0aGUgcmVxdWVzdCBpcyBhdXRoZW50aWNhdGVkLlxuICAgKi9cbiAgfCAoe1xuICAgICAgdHlwZTogXCJDT0dOSVRPX1VTRVJfUE9PTF9PUl9CQVNJQ19BVVRIXCJcbiAgICB9ICYgQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyUHJvcHM8QXV0aFNjb3Blc1Q+KVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBhdXRob3JpemVyIHdpdGggdGhlIGdpdmVuIExhbWJkYSBmdW5jdGlvbi4gVXNlIHRoaXMgaWYgeW91IGhhdmUgY3VzdG9tXG4gICAqIGF1dGhvcml6YXRpb24gbG9naWMsIGFuZCB0aGUgb3RoZXIgYXV0aG9yaXplcnMgZnJvbSB0aGlzIGNvbnN0cnVjdCBkb24ndCBtZWV0IHlvdXIgbmVlZHMuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1sYW1iZGEtYXV0aG9yaXplci5odG1sXG4gICAqL1xuICB8ICh7IHR5cGU6IFwiQ1VTVE9NX0xBTUJEQV9BVVRIT1JJWkVSXCIgfSAmIEN1c3RvbUxhbWJkYUF1dGhvcml6ZXJQcm9wcylcblxuZXhwb3J0IHR5cGUgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplclByb3BzPFxuICBBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gPSB7XG4gIHVzZXJQb29sOiBJVXNlclBvb2xcblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhhdCBhY2Nlc3MgdG9rZW4gY2xhaW1zIGNvbnRhaW4gdGhlIGdpdmVuIHNjb3BlLlxuICAgKlxuICAgKiBXaGVuIGRlZmluZWQgYXMgcGFydCBvZiBhIHJlc291cmNlIHNlcnZlciwgc2NvcGVzIGFyZSBvbiB0aGUgZm9ybWF0OlxuICAgKiBge3Jlc291cmNlIHNlcnZlciBpZGVudGlmaWVyfS97c2NvcGUgbmFtZX1gLCBlLmcuIGBleHRlcm5hbC92aWV3X3VzZXJzYC5cbiAgICpcbiAgICogVG8gZ2V0IG1vcmUgdHlwZSBzYWZldHkgb24gdGhpcyBwYXJhbWV0ZXIsIHNlZSB0aGUgZG9jcyBmb3IgdGhlIGBBdXRoU2NvcGVzVGAgdHlwZSBwYXJhbWV0ZXIgb25cbiAgICoge0BsaW5rIEFwaUdhdGV3YXl9LlxuICAgKi9cbiAgcmVxdWlyZWRTY29wZT86IEF1dGhTY29wZXNUXG5cbiAgLyoqXG4gICAqIE5hbWUgb2Ygc2VjcmV0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgdGhhdCBzdG9yZXMgYmFzaWMgYXV0aCBjcmVkZW50aWFscyBmb3IgdGhlIGJhY2tlbmRcbiAgICogc2VydmljZSwgdG8gYmUgZm9yd2FyZGVkIHRvIHRoZSBiYWNrZW5kIGlmIENvZ25pdG8gdXNlciBwb29sIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZC5cbiAgICpcbiAgICogVGhlIHNlY3JldCB2YWx1ZSBtdXN0IGZvbGxvdyB0aGlzIGZvcm1hdDpcbiAgICogYGBganNvblxuICAgKiB7IFwidXNlcm5hbWVcIjogXCI8dXNlcm5hbWU+XCIsIFwicGFzc3dvcmRcIjogXCI8cGFzc3dvcmQ+XCIgfVxuICAgKiBgYGBcbiAgICpcbiAgICogVGhpcyBwcm9wIHNvbHZlcyB0aGUgZm9sbG93aW5nIHVzZS1jYXNlOlxuICAgKiAtIFlvdSB3YW50IHRvIGRvIENvZ25pdG8gdXNlciBwb29sIGF1dGhlbnRpY2F0aW9uIGluIHRoZSBBUEkgR2F0ZXdheVxuICAgKiAtIFlvdSB3YW50IGFuIGFkZGl0aW9uYWwgYXV0aCBjaGVjayBpbiB0aGUgYmFja2VuZCwgYnV0IHlvdSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aCBDb2duaXRvXG4gICAqICAgdGhlcmVcbiAgICogLSBUaGUgYmFja2VuZCB1c2VzIGJhc2ljIGF1dGhcbiAgICpcbiAgICogVGhpcyBwcm9wIHNvbHZlcyB0aGlzIGJ5IGxldHRpbmcgeW91IHNwZWNpZnkgY3JlZGVudGlhbHMgdG8gcGFzcyB0byB0aGUgYmFja2VuZCBhZnRlciBBUEktR1dcbiAgICogYXV0aGVudGljYXRpb24gc3VjY2VlZHMuIFlvdSBjYW4gcGFzcyB0aGUgZW5jb2RlZCBjcmVkZW50aWFscyB0aHJvdWdoXG4gICAqIHtAbGluayBBbGJJbnRlZ3JhdGlvblByb3BzLm1hcFBhcmFtZXRlcnN9LCB1c2luZyB0aGUgYGF1dGhvcml6ZXIuaW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyYFxuICAgKiBjb250ZXh0IHZhcmlhYmxlLCBsaWtlIHNvOlxuICAgKiBgYGBcbiAgICogbWFwUGFyYW1ldGVyczogKHBhcmFtZXRlcnMpID0+IHBhcmFtZXRlcnMub3ZlcndyaXRlSGVhZGVyKFxuICAgKiAgIC8vICdBdXRob3JpemF0aW9uJyBoZWFkZXIgY2Fubm90IGJlIG92ZXJyaWRkZW4sIHNvIHdlIHVzZSBhIGN1c3RvbSBoZWFkZXJcbiAgICogICBcIlgtSW50ZXJuYWwtQXV0aG9yaXphdGlvblwiLFxuICAgKiAgIGFwaWd3Lk1hcHBpbmdWYWx1ZS5jb250ZXh0VmFyaWFibGUoXCJhdXRob3JpemVyLmludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlclwiKSxcbiAgICogKVxuICAgKiBgYGBcbiAgICogVGhlIGJhY2tlbmQgY2FuIHRoZW4gY2hlY2sgdGhlIGBYLUludGVybmFsLUF1dGhvcml6YXRpb25gIGhlYWRlci5cbiAgICovXG4gIGNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIEJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wcyA9IHtcbiAgLyoqXG4gICAqIE5hbWUgb2Ygc2VjcmV0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgdGhhdCBzdG9yZXMgYmFzaWMgYXV0aCBjcmVkZW50aWFscy5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgZm9yIHRoZSBzZWNyZXQgdmFsdWU6XG4gICAqIC0gU2luZ2xlIHVzZXJuYW1lIGFuZCBwYXNzd29yZDpcbiAgICogICBgYGBqc29uXG4gICAqICAgeyBcInVzZXJuYW1lXCI6IFwiPHVzZXJuYW1lPlwiLCBcInBhc3N3b3JkXCI6IFwiPHBhc3N3b3JkPlwiIH1cbiAgICogICBgYGBcbiAgICogLSBBcnJheSBvZiB1c2VybmFtZSArIHBhc3N3b3JkIG9iamVjdHM6XG4gICAqICAgYGBganNvblxuICAgKiAgIHsgXCJjcmVkZW50aWFsc1wiOiBcIlt7XFxcInVzZXJuYW1lXFxcIjpcXFwiPHVzZXItMT5cXFwiLFxcXCJwYXNzd29yZFxcXCI6XFxcInBhc3N3b3JkLTFcXFwifSx7XFxcInVzZXJuYW1lXFxcIjpcXFwiPHVzZXItMj5cXFwiLFxcXCJwYXNzd29yZFxcXCI6XFxcIjxwYXNzd29yZC0yPlxcXCJ9XVwiIH1cbiAgICogICBgYGBcbiAgICogICAtIFRoZSB2YWx1ZSBvZiB0aGUgYGNyZWRlbnRpYWxzYCBmaWVsZCBpcyBhIHN0cmluZywgd2l0aCBhIHN0cmluZ2lmaWVkLCBlc2NhcGVkIEpTT04gYXJyYXkgb2ZcbiAgICogICAgIG9iamVjdHMgd2l0aCBgdXNlcm5hbWVgIGFuZCBgcGFzc3dvcmRgIGZpZWxkcy5cbiAgICogICAtIFRoZSByZWFzb24gdGhhdCB0aGlzIHNlY29uZCBmb3JtYXQgc3RvcmVzIHN0cmluZ2lmaWVkIEpTT04gX2luc2lkZV8gSlNPTiwgaXMgZHVlIHRvIGFcbiAgICogICAgIGxpbWl0YXRpb24gaW4gTGlmbGlnJ3MgYGxvYWQtc2VjcmV0c2AgbGlicmFyeSwgd2hpY2ggb25seSBhbGxvd3Mgc3RvcmluZyBzdHJpbmcgdmFsdWVzLlxuICAgKiAtIEFycmF5IG9mIGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzOlxuICAgKiAgIGBgYGpzb25cbiAgICogICB7IFwiY3JlZGVudGlhbHNcIjogXCJbXFxcIjxlbmNvZGVkLWNyZWRlbnRpYWwtMT5cXFwiLFxcXCI8ZW5jb2RlZC1jcmVkZW50aWFsLTI+XFxcIl1cIiB9XG4gICAqICAgYGBgXG4gICAqICAgLSBFYWNoIGVsZW1lbnQgaXMgZW5jb2RlZCBmcm9tIGA8dXNlcm5hbWU+OjxwYXNzd29yZD5gLlxuICAgKiAgIC0gVGhlIGFycmF5IGlzIHN0cmluZ2lmaWVkIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYWJvdmUuXG4gICAqXG4gICAqIElmIHRoZSBzZWNyZXQgdXNlcyBvbmUgb2YgdGhlIGFycmF5IGZvcm1hdHMsIHRoZSBhdXRob3JpemVyIHdpbGwgbWF0Y2ggdGhlIHJlcXVlc3Qnc1xuICAgKiBBdXRob3JpemF0aW9uIGhlYWRlciBhZ2FpbnN0IGFueSBvbmUgb2YgdGhlIGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgY3JlZGVudGlhbHNTZWNyZXROYW1lOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyUHJvcHM8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPiA9IHtcbiAgdXNlclBvb2w6IElVc2VyUG9vbFxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHNlY3JldCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIHRoYXQgc3RvcmVzIGJhc2ljIGF1dGggY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgQmFzaWNBdXRoQXV0aG9yaXplclByb3BzLmNyZWRlbnRpYWxzU2VjcmV0TmFtZX0gZm9yIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cy5cbiAgICovXG4gIGJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGF0IGFjY2VzcyB0b2tlbiBjbGFpbXMgY29udGFpbiB0aGUgZ2l2ZW4gc2NvcGUuIE9ubHkgYXBwbGljYWJsZSBmb3IgcmVxdWVzdHMgdGhhdFxuICAgKiB1c2UgYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgKG5vdCBhcHBsaWNhYmxlIGZvciBiYXNpYyBhdXRoKS5cbiAgICpcbiAgICogV2hlbiBkZWZpbmVkIGFzIHBhcnQgb2YgYSByZXNvdXJjZSBzZXJ2ZXIsIHNjb3BlcyBhcmUgb24gdGhlIGZvcm1hdDpcbiAgICogYHtyZXNvdXJjZSBzZXJ2ZXIgaWRlbnRpZmllcn0ve3Njb3BlIG5hbWV9YCwgZS5nLiBgZXh0ZXJuYWwvdmlld191c2Vyc2AuXG4gICAqXG4gICAqIFRvIGdldCBtb3JlIHR5cGUgc2FmZXR5IG9uIHRoaXMgcGFyYW1ldGVyLCBzZWUgdGhlIGRvY3MgZm9yIHRoZSBgQXV0aFNjb3Blc1RgIHR5cGUgcGFyYW1ldGVyIG9uXG4gICAqIHtAbGluayBBcGlHYXRld2F5fS5cbiAgICovXG4gIHJlcXVpcmVkU2NvcGU/OiBBdXRoU2NvcGVzVFxufVxuXG50eXBlIEN1c3RvbUxhbWJkYUF1dGhvcml6ZXJQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJ1biB3aGVuZXZlciB0aGUgQVBJIEdhdGV3YXkgcm91dGUgaXMgaW52b2tlZCwgdG8gYXV0aGVudGljYXRlXG4gICAqIHRoZSByZXF1ZXN0LiBTZWUgQVdTIGRvY3MgZm9yIG1vcmUgb24gaG93IHRvIHdyaXRlIHRoZSBMYW1iZGE6XG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1sYW1iZGEtYXV0aG9yaXplci5odG1sXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHJlc3BvbnNlIGZvcm1hdCB1c2VkIGlzIGBIdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRWAgKGZvcm1hdCAyLjApLiBJZiB5b3Ugd3JpdGVcbiAgICogeW91ciBMYW1iZGEgaW4gVHlwZVNjcmlwdCwgdGhpcyBtZWFucyB0aGF0IHlvdXIgaGFuZGxlciBtdXN0IHJldHVyblxuICAgKiBgQVBJR2F0ZXdheVNpbXBsZUF1dGhvcml6ZXJSZXN1bHRgIChmcm9tIHRoZSBgYXdzLWxhbWJkYWAgcGFja2FnZSkuIFRoZSByZXF1ZXN0IGV2ZW50IHdpbGwgYWxzb1xuICAgKiB1c2UgZm9ybWF0IDIuMCAoYEFQSUdhdGV3YXlSZXF1ZXN0QXV0aG9yaXplckV2ZW50VjJgIGluIFR5cGVTY3JpcHQpLiBTZWUgdGhlIEFXUyBkb2NzIGxpbmtlZFxuICAgKiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZXNlIGZvcm1hdHMuXG4gICAqXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIHJlc3BvbnNlIGZvcm1hdCB0eXBlIGluXG4gICAqIHtAbGluayBDdXN0b21MYW1iZGFBdXRob3JpemVyUHJvcHMuYXV0aG9yaXplclByb3BzfS5cbiAgICpcbiAgICogU2VlIHRoZSBMYW1iZGFzIHVuZGVyIHRoZSBgYXV0aG9yaXplcnNgIGZvbGRlciBuZXh0IHRvIHRoZSBgQXBpR2F0ZXdheWAgY29uc3RydWN0IGluXG4gICAqIGBsaWZsaWctY2RrYCBmb3IgZXhhbXBsZXMuXG4gICAqL1xuICBsYW1iZGFBdXRob3JpemVyOiBsYW1iZGEuSUZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFByb3BzIGZvciB0aGUgYEh0dHBMYW1iZGFBdXRob3JpemVyYCBjb25zdHJ1Y3QuIFdlIHByb3ZpZGUgc29tZSBkaWZmZXJlbnQgZGVmYXVsdHM6XG4gICAqIC0gYHJlc3BvbnNlVHlwZXNgIGRlZmF1bHRzIHRvIGBbSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEVdYFxuICAgKiAtIGByZXN1bHRzQ2FjaGVUdGxgIGRlZmF1bHRzIHRvIGBEdXJhdGlvbi5ob3VycygxKWBcbiAgICovXG4gIGF1dGhvcml6ZXJQcm9wcz86IFBhcnRpYWw8YXV0aG9yaXplcnMuSHR0cExhbWJkYUF1dGhvcml6ZXJQcm9wcz5cbn1cblxuZXhwb3J0IHR5cGUgQXBpR2F0ZXdheUFjY2Vzc0xvZ3NQcm9wcyA9IHtcbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgYWNjZXNzIGxvZ3MgaWYgdGhpcyBjb25zdHJ1Y3QgaXMgZGVsZXRlZD9cbiAgICpcbiAgICogTWF5YmUgeW91IHdhbnQgdG8gREVTVFJPWSBpbnN0ZWFkLiBPciBmb3IgbGVnYWwgcmVhc29ucywgcmV0YWluIGZvciBhdWRpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5SRVRBSU5cbiAgICovXG4gIHJlbW92YWxQb2xpY3k/OiBjZGsuUmVtb3ZhbFBvbGljeVxuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byBrZWVwIHRoZSBsb2dzLiBJZiB1bmRlZmluZWQsIHVzZXMgdGhlIHNhbWUgZGVmYXVsdCBhcyBuZXcgQVdTIGxvZyBncm91cHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJldGVudGlvbkRheXMuVFdPX1lFQVJTXG4gICAqL1xuICByZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXNcblxuICAvKipcbiAgICogQSBjdXN0b20gSlNPTiBsb2cgZm9ybWF0LCB3aGljaCB1c2VzIHZhcmlhYmxlcyBmcm9tIGBcIiRjb250ZXh0XCJgLlxuICAgKlxuICAgKiBTZWUgW0FXUzogQ2xvdWRXYXRjaCBsb2cgZm9ybWF0cyBmb3IgQVBJIEdhdGV3YXldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXQtdXAtbG9nZ2luZy5odG1sI2FwaWdhdGV3YXktY2xvdWR3YXRjaC1sb2ctZm9ybWF0cylcbiAgICogZm9yIGZvcm1hdHMgYW5kIHJ1bGVzLiBJdCBpcyBwb3NzaWJsZSB0byB1c2Ugb3RoZXIgZm9ybWF0cyBsaWtlIENMRiBhbmQgWE1MLCBidXQgdGhpcyBjb25zdHJ1Y3RcbiAgICogb25seSBzdXBwb3J0cyBKU09OIGZvciBub3cuXG4gICAqXG4gICAqIEZvciBhIGxpc3Qgb2YgYWxsIHBvc3NpYmxlIHZhcmlhYmxlcyB0byBsb2csIHNlZVxuICAgKiBbQVdTOiAkY29udGV4dCBWYXJpYWJsZXMgZm9yIGRhdGEgbW9kZWxzLCBhdXRob3JpemVycywgbWFwcGluZyB0ZW1wbGF0ZXMsIGFuZCBDbG91ZFdhdGNoIGFjY2VzcyBsb2dnaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXktbWFwcGluZy10ZW1wbGF0ZS1yZWZlcmVuY2UuaHRtbCNjb250ZXh0LXZhcmlhYmxlLXJlZmVyZW5jZSlcbiAgICogYW5kXG4gICAqIFtBV1M6ICRjb250ZXh0IFZhcmlhYmxlcyBmb3IgYWNjZXNzIGxvZ2dpbmcgb25seV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LW1hcHBpbmctdGVtcGxhdGUtcmVmZXJlbmNlLmh0bWwjY29udGV4dC12YXJpYWJsZS1yZWZlcmVuY2UtYWNjZXNzLWxvZ2dpbmctb25seSkgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgZGVmYXVsdEFjY2Vzc0xvZ0Zvcm1hdH1cbiAgICovXG4gIGFjY2Vzc0xvZ0Zvcm1hdD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbn1cblxuLyoqXG4gKiBUaGlzIGNvbnN0cnVjdCB0cmllcyB0byBzaW1wbGlmeSB0aGUgY3JlYXRpb24gb2YgYW4gQVBJIEdhdGV3YXkgZm9yIGEgc2VydmljZSwgYnkgY29sbGVjdGluZyBtb3N0XG4gKiBvZiB0aGUgY29tbW9uIHNldHVwIGhlcmUuXG4gKlxuICogVGhlIGFwcHJvYWNoIGZvbGxvd2VkIGluIHRoaXMgY29uc3RydWN0IGlzOlxuICogMS4gT25lIEFQSS1HVyBwZXIgc2VydmljZVxuICogMi4gT25lIHN1YmRvbWFpbiBwZXIgQVBJLUdXIC8gc2VydmljZVxuICogMy4gVXNlIEhUVFAgQVBJLCBub3QgUkVTVFxuICogNC4gVXNlIGEgJGRlZmF1bHQgc3RhZ2Ugd2l0aCBhdXRvZGVwbG95XG4gKiA1LiBTdXBwb3J0IG11bHRpcGxlIHJvdXRlcyAod2l0aCBwb3NzaWJsZSBgL3twcm94eSt9YCB0byBsZXQgYWxsIHN1Yi1wYXRocyB0aHJvdWdoKVxuICogNi4gQWxsb3cgY3VzdG9tIGludGVncmF0aW9uL2F1dGhvcml6ZXIgZm9yIGVhY2ggcm91dGUsIG9yIGRlZmF1bHRzIGZvciB0aGUgd2hvbGUgZ2F0ZXdheVxuICpcbiAqIFRoZSByb3V0ZSBpbnRlZ3JhdGlvbiBpcyBvbmUgb2YgdGhlc2U6XG4gKiAtIEFMQiBwcml2YXRlIGludGVncmF0aW9uIHdpdGggVlBDIExpbmsgdXNpbmcgSFRUUFMgdG8gdGhlIEFMQlxuICogLSBMYW1iZGEgaW50ZWdyYXRpb25cbiAqIC0gU1FTIGludGVncmF0aW9uXG4gKlxuICogIyMjIExvYWQgQmFsYW5jZXIgU2VjdXJpdHkgR3JvdXBcbiAqXG4gKiBOb3RlIHRoYXQgdGhlIGxvYWQgYmFsYW5jZXIgdXNlZCBpbiBhbiB7QGxpbmsgQWxiSW50ZWdyYXRpb25Qcm9wc30gbXVzdCBhbGxvdyBvdXRib3VuZCBIVFRQU1xuICogdHJhZmZpYyB0byBpdHMgU2VjdXJpdHlHcm91cC4gT3RoZXJ3aXNlLCB0aGUgVlBDIExpbmsgdXNlZCBieSB0aGUgQVBJLUdXIGNhbid0IGdldCB0cmFmZmljIGZyb21cbiAqIHRoZSBBTEIuXG4gKlxuICogYGBgXG4gKiBjb25zdCBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKC4uLiwge1xuICogICBhbGxvd0FsbE91dGJvdW5kOiBmYWxzZSxcbiAqIH0pXG4gKlxuICogbG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cC5hZGRFZ3Jlc3NSdWxlKFxuICogICBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwLFxuICogICBlYzIuUG9ydC50Y3AoNDQzKSxcbiAqICAgXCJPdXRib3VuZCB0byBzZWxmIGZvciBBTEIgdG8gQVBJLUdXIFZQQy1MaW5rXCIsXG4gKiApXG4gKlxuICogY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3IGxpZmxpZ0xvYWRCYWxhbmNlci5Mb2FkQmFsYW5jZXIoLi4uLFxuICogICB7XG4gKiAgICAgb3ZlcnJpZGVMb2FkQmFsYW5jZXJQcm9wczoge1xuICogICAgICAgc2VjdXJpdHlHcm91cDogbG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cCxcbiAqICAgICB9LFxuICogICB9LFxuICogKVxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIEF1dGhTY29wZXNUIFRoaXMgdHlwZSBwYXJhbWV0ZXIgYWxsb3dzIHlvdSB0byBpbXByb3ZlIHR5cGUgc2FmZXR5IG9uIHRoZVxuICogYHJlcXVpcmVkU2NvcGVgIGZpZWxkIG9uIHtAbGluayBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wc30sIGJ5IG5hcnJvd2luZyB0aGUgdHlwZVxuICogdG8gc3BlY2lmaWMgc3RyaW5ncy4gWW91IGNhbiB0aGVuIGV4dGVuZCB0aGUgYEFwaUdhdGV3YXlgIHdpdGggdGhpcyB0eXBlIHRvIGVuZm9yY2UgdGhvc2Ugc2NvcGVzXG4gKiBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uLiBSZW1lbWJlciB0aGF0IGF1dGggc2NvcGVzIG11c3QgYmUgb24gdGhlIGZvcm1hdFxuICogYHtyZXNvdXJjZSBzZXJ2ZXIgaWRlbnRpZmllcn0ve3Njb3BlIG5hbWV9YC5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgXG4gKiB0eXBlIEF1dGhTY29wZXMgPSBcImV4dGVybmFsL3JlYWRfdXNlcnNcIiB8IFwiaW50ZXJuYWwvY3JlYXRlX3VzZXJzXCJcbiAqXG4gKiBleHBvcnQgY2xhc3MgTXlQcm9qZWN0QXBpR2F0ZXdheSBleHRlbmRzIEFwaUdhdGV3YXk8QXV0aFNjb3Blcz4ge31cbiAqIGBgYFxuICogVHlwZVNjcmlwdCB3aWxsIHRoZW4gZW5mb3JjZSB0aGF0IGByZXF1aXJlZFNjb3BlYCBpcyBvbmUgb2YgYEF1dGhTY29wZXNgLCBhbmQgcHJvdmlkZVxuICogYXV0by1jb21wbGV0ZS5cbiAqXG4gKiBAYXV0aG9yIEtyaXN0aWFuIFJla3N0YWQgPGtyZUBjYXByYWNvbnN1bHRpbmcubm8+XG4gKiBAYXV0aG9yIEhlcm1hbm4gTcO4cmtyaWQgPGhlbUBsaWZsaWcubm8+XG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlHYXRld2F5PFxuICBBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIC8qKiBUaGUgQVBJIEdhdGV3YXkgSFRUUCBBUEkuIFRoaXMgaXMgdGhlIG1haW4gY29uc3RydWN0IGZvciBBUEktR1cuICovXG4gIHB1YmxpYyByZWFkb25seSBodHRwQXBpOiBhcGlndy5IdHRwQXBpXG5cbiAgLyoqIFRoZSByb3V0ZXMgd2hpY2ggY29ubmVjdCB0aGUge0BsaW5rIGh0dHBBcGl9IHRvIHRoZSBiYWNrZW5kIGludGVncmF0aW9uKHMpLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVzOiBhcGlndy5IdHRwUm91dGVbXSA9IFtdXG5cbiAgLyoqIFRoZSBkb21haW4gd2hpY2ggY29uc3VtZXJzIG11c3QgdXNlLiovXG4gIHB1YmxpYyByZWFkb25seSBkb21haW46IHN0cmluZ1xuXG4gIC8qKiBBY2Nlc3MgbG9nIGdyb3VwLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBBcGlHYXRld2F5UHJvcHM8QXV0aFNjb3Blc1Q+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFwaUdhdGV3YXlQcm9wczxBdXRoU2NvcGVzVD4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcblxuICAgIEFwaUdhdGV3YXkudmFsaWRhdGVQcm9wcyhwcm9wcywgaWQsIGNkay5TdGFjay5vZih0aGlzKSlcblxuICAgIGNvbnN0IGN1c3RvbURvbWFpbiA9IG5ldyBDdXN0b21Eb21haW4odGhpcywgXCJDdXN0b21Eb21haW5cIiwgcHJvcHMuZG5zKVxuICAgIHRoaXMuZG9tYWluID0gY3VzdG9tRG9tYWluLmN1c3RvbURvbWFpbk5hbWVcblxuICAgIGxldCBjb3JzT3B0aW9uczogYXBpZ3cuQ29yc1ByZWZsaWdodE9wdGlvbnMgfCB1bmRlZmluZWRcbiAgICBpZiAocHJvcHMuY29yc0FsbG93QWxsKSB7XG4gICAgICBjb3JzT3B0aW9ucyA9IHtcbiAgICAgICAgYWxsb3dPcmlnaW5zOiBbXCIqXCJdLFxuICAgICAgICAvLyBcIlRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBjYW4ndCBiZSB3aWxkY2FyZGVkIGFuZCBhbHdheXMgbmVlZHMgdG8gYmUgbGlzdGVkIGV4cGxpY2l0bHlcIlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1xuICAgICAgICAvLyBDb250ZW50LVR5cGUgbWF5IGFsc28gcmVxdWlyZSBleHBsaWNpdCB3aGl0ZWxpc3Rpbmc6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82MzU2NzY0N1xuICAgICAgICBhbGxvd0hlYWRlcnM6IFtcIkF1dGhvcml6YXRpb25cIiwgXCJDb250ZW50LVR5cGVcIiwgXCIqXCJdLFxuICAgICAgICAvLyBOb3QgdXNpbmcgJyonIGhlcmUsIGJlY2F1c2UgXCJJbiByZXF1ZXN0cyB3aXRoIGNyZWRlbnRpYWxzLCBpdCBpcyB0cmVhdGVkIGFzIHRoZSBsaXRlcmFsXG4gICAgICAgIC8vIG1ldGhvZCBuYW1lICcqJyB3aXRob3V0IHNwZWNpYWwgc2VtYW50aWNzXCJcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcbiAgICAgICAgYWxsb3dNZXRob2RzOiBbXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuR0VULFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLlBPU1QsXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuUFVULFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLlBBVENILFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLkRFTEVURSxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5PUFRJT05TLFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLkhFQUQsXG4gICAgICAgIF0sXG4gICAgICAgIG1heEFnZTogY2RrLkR1cmF0aW9uLmRheXMoMSksXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIGFjdHVhbCBBUEkuIFRoaXMgaG9sZHMgdGhlIHJvdXRlcywgYXV0aG9yaXplcnMgYW5kIGludGVncmF0aW9ucy5cbiAgICBjb25zdCBhcGkgPSBuZXcgYXBpZ3cuSHR0cEFwaSh0aGlzLCBcIkh0dHBBcGktXCIgKyBwcm9wcy5kbnMuc3ViZG9tYWluLCB7XG4gICAgICAvLyBkZWZhdWx0SW50ZWdyYXRpb246IGRlZmF1bHRJbnRlZ3JhdGlvbiwgLy8gVGhpcyBpcyBmb3IgYSBjYXRjaC1hbGwgJGRlZmF1bHQgcm91dGVcbiAgICAgIGRlc2NyaXB0aW9uOiBgQW4gSFRUUCBBUEkgZm9yICR7cHJvcHMuZG5zLnN1YmRvbWFpbn0uJHtwcm9wcy5kbnMuaG9zdGVkWm9uZS56b25lTmFtZX0uYCxcbiAgICAgIGRpc2FibGVFeGVjdXRlQXBpRW5kcG9pbnQ6IHRydWUsIC8vIEZvcmNlIGV4dGVybmFscyB0byBnbyB0aHJvdWdoIGN1c3RvbSBkb21haW4uIE1VU1QgYmUgdHJ1ZSB3aGVuIHVzaW5nIE11dHVhbCBUTFMsIGZvciBzZWN1cml0eSByZWFzb25zXG4gICAgICBjcmVhdGVEZWZhdWx0U3RhZ2U6IHRydWUsXG4gICAgICBkZWZhdWx0RG9tYWluTWFwcGluZzogeyBkb21haW5OYW1lOiBjdXN0b21Eb21haW4uYXBpR3dDdXN0b21Eb21haW4gfSxcbiAgICAgIGNvcnNQcmVmbGlnaHQ6IGNvcnNPcHRpb25zLFxuICAgICAgLi4ucHJvcHM/LnByb3BzT3ZlcnJpZGU/Lmh0dHBBcGksXG4gICAgfSlcbiAgICB0aGlzLmh0dHBBcGkgPSBhcGlcblxuICAgIGNvbnN0IHN0YWdlID0gYXBpLmRlZmF1bHRTdGFnZT8ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgYXBpZ3cuQ2ZuU3RhZ2VcblxuICAgIGNvbnN0IGxvZ3MgPSBuZXcgQXBpR2F0ZXdheUFjY2Vzc0xvZ3MoXG4gICAgICB0aGlzLFxuICAgICAgXCJBY2Nlc3NMb2dzXCIsXG4gICAgICBzdGFnZSxcbiAgICAgIHByb3BzLmFjY2Vzc0xvZ3MsXG4gICAgICBkZWZhdWx0QWNjZXNzTG9nRm9ybWF0LFxuICAgIClcbiAgICB0aGlzLmxvZ0dyb3VwID0gbG9ncy5sb2dHcm91cFxuXG4gICAgc3RhZ2UuZGVmYXVsdFJvdXRlU2V0dGluZ3MgPSB7XG4gICAgICAuLi5zdGFnZS5kZWZhdWx0Um91dGVTZXR0aW5ncyxcbiAgICAgIGRldGFpbGVkTWV0cmljc0VuYWJsZWQ6IHByb3BzLmRldGFpbGVkTWV0cmljcyA/PyB0cnVlLFxuICAgICAgdGhyb3R0bGluZ0J1cnN0TGltaXQ6IHByb3BzLnRocm90dGxpbmc/LmJ1cnN0LCAvLyBEZWZhdWx0IGZvciBhY2NvdW50IGlzIDVfMDAwXG4gICAgICB0aHJvdHRsaW5nUmF0ZUxpbWl0OiBwcm9wcy50aHJvdHRsaW5nPy5yYXRlLCAvLyBEZWZhdWx0IGZvciBhY2NvdW50IGlzIDEwXzAwMFxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRJbnRlZ3JhdGlvbiA9IHByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvblxuICAgICAgPyB0aGlzLmNyZWF0ZUludGVncmF0aW9uKHByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvbiwgcHJvcHMuZG5zKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGRlZmF1bHRBdXRob3JpemVyID0gcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb25cbiAgICAgID8gdGhpcy5jcmVhdGVBdXRob3JpemVyKFwiRGVmYXVsdEF1dGhvcml6ZXJcIiwgcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24pXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBwcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGxldCBpbnRlZ3JhdGlvbjogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25cbiAgICAgIGlmIChyb3V0ZS5pbnRlZ3JhdGlvbikge1xuICAgICAgICBpbnRlZ3JhdGlvbiA9IHRoaXMuY3JlYXRlSW50ZWdyYXRpb24ocm91dGUuaW50ZWdyYXRpb24sIHByb3BzLmRucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVncmF0aW9uID0gZGVmYXVsdEludGVncmF0aW9uISAvLyBWZXJpZmllZCBpbiB2YWxpZGF0ZVByb3BzXG4gICAgICB9XG5cbiAgICAgIGxldCBhdXRob3JpemVyOiBhcGlndy5JSHR0cFJvdXRlQXV0aG9yaXplciB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHJvdXRlLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgYXV0aG9yaXplciA9IHRoaXMuY3JlYXRlQXV0aG9yaXplcihcbiAgICAgICAgICAvLyBVc2luZyB0aGUgcm91dGUgcGF0aCBoZXJlIGNhdXNlZCBDbG91ZEZvcm1hdGlvbiB0byBmYWlsIGR1ZSB0byByZXNvdXJjZSBuYW1lcyBiZWluZyB0b29cbiAgICAgICAgICAvLyBsb25nLiBUaGVyZWZvcmUsIHdlIG5vdyBoYXNoIHRoZSByb3V0ZSBwYXRoIHRvIGdldCBhIHNob3J0ZXIgbmFtZS5cbiAgICAgICAgICBgUm91dGVBdXRob3JpemVyJHtzaG9ydEhhc2goYCR7cm91dGUubWV0aG9kID8/IFwiXCJ9JHtyb3V0ZS5wYXRofWApfWAsXG4gICAgICAgICAgcm91dGUuYXV0aG9yaXphdGlvbixcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXV0aG9yaXplciA9IGRlZmF1bHRBdXRob3JpemVyXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvdXRlUGF0aHMgPSBbcm91dGUucGF0aF1cbiAgICAgIGlmIChyb3V0ZS5pbmNsdWRlU3VicGF0aHMgPT09IHRydWUpIHtcbiAgICAgICAgLy8gSWYgd2UgaW5jbHVkZSBzdWItcGF0aHMsIHdlIGFkZCBhbiBhZGRpdGlvbmFsIHJvdXRlIHdpdGggL3twcm94eSt9ICh0aGUgKyBtZWFucyBpdCB3aWxsXG4gICAgICAgIC8vIG1hdGNoIGFsbCBzdWJyb3V0ZXMpLiBXZSB3YW50IGJvdGggdGhpcyByb3V0ZSBhbmQgdGhlIG5vcm1hbCByb3V0ZSB3aXRob3V0IC97cHJveHkrfSxcbiAgICAgICAgLy8gc2luY2UgL3twcm94eSt9IHdpbGwgb25seSBtYXRjaCB0aGUgYmFzZSBwYXRoIHdpdGggdHJhaWxpbmcgc2xhc2guXG4gICAgICAgIHJvdXRlUGF0aHMucHVzaChcbiAgICAgICAgICByb3V0ZS5wYXRoICsgKHJvdXRlLnBhdGggPT09IFwiL1wiID8gXCJcIiA6IFwiL1wiKSArIFwie3Byb3h5K31cIixcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlUGF0aCBvZiByb3V0ZVBhdGhzKSB7XG4gICAgICAgIC8vIFRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBBUEkgR2F0ZXdheSBjb25zdHJ1Y3QgaGFkIGEgc2luZ2xlIHJvdXRlIHdpdGggdGhlIElEXG4gICAgICAgIC8vICdEZWZhdWx0UHJveHlSb3V0ZScsIGFuZCBhbGwgZ2F0ZXdheXMgd2UgdXNlZCBleHBvc2VkIHRoZSByb3V0ZSAve3Byb3h5K30uIFdoZW4gdHJ5aW5nIHRvXG4gICAgICAgIC8vIGNoYW5nZSB0byB0aGlzIG5ldyB2ZXJzaW9uIG9mIHRoZSBjb25zdHJ1Y3QsIGRlcGxveW1lbnQgZmFpbGVkIGZvciBnYXRld2F5cyBleHBvc2luZ1xuICAgICAgICAvLyAve3Byb3h5K30sIGJlY2F1c2UgXCJhIHJvdXRlIHdpdGggdGhhdCBrZXkgW2kuZS4gcGF0aCArIG1ldGhvZF0gYWxyZWFkeSBleGlzdHNcIi4gV2UgdGhpbmtcbiAgICAgICAgLy8gdGhpcyBtYXkgYmUgYmVjYXVzZSB3ZSB1c2VkIHRoZSBzYW1lIHJvdXRlIHBhdGgsIGJ1dCB3aXRoIGEgbmV3IHJvdXRlIElELCBjYXVzaW5nXG4gICAgICAgIC8vIGNvbmZ1c2lvbiBmb3IgQ2xvdWRGb3JtYXRpb24uIFNvIHdlIGtlZXAgdGhlIG9sZCByb3V0ZSBJRCBoZXJlIGZvciAve3Byb3h5K30uXG4gICAgICAgIGNvbnN0IHJvdXRlSWQgPVxuICAgICAgICAgIHJvdXRlUGF0aCA9PT0gXCIve3Byb3h5K31cIiA/IFwiRGVmYXVsdFByb3h5Um91dGVcIiA6IGBSb3V0ZS0ke3JvdXRlUGF0aH1gXG5cbiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChcbiAgICAgICAgICBuZXcgYXBpZ3cuSHR0cFJvdXRlKHRoaXMsIHJvdXRlSWQsIHtcbiAgICAgICAgICAgIGh0dHBBcGk6IGFwaSxcbiAgICAgICAgICAgIGludGVncmF0aW9uOiBpbnRlZ3JhdGlvbixcbiAgICAgICAgICAgIGF1dGhvcml6ZXI6IGF1dGhvcml6ZXIsXG4gICAgICAgICAgICByb3V0ZUtleTogYXBpZ3cuSHR0cFJvdXRlS2V5LndpdGgoXG4gICAgICAgICAgICAgIHJvdXRlUGF0aCxcbiAgICAgICAgICAgICAgcm91dGUubWV0aG9kXG4gICAgICAgICAgICAgICAgPyBhcGlndy5IdHRwTWV0aG9kW3JvdXRlLm1ldGhvZF1cbiAgICAgICAgICAgICAgICA6IGFwaWd3Lkh0dHBNZXRob2QuQU5ZLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRhZ1Jlc291cmNlcyh0aGlzLCAoKSA9PiAoeyBzZXJ2aWNlOiBwcm9wcy5kbnMuc3ViZG9tYWluIH0pKVxuICB9XG5cbiAgLyoqIEB0aHJvd3MgRXJyb3IgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQcm9wcyhcbiAgICBwcm9wczogQXBpR2F0ZXdheVByb3BzLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgc3RhY2s6IGNkay5TdGFjayxcbiAgKSB7XG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBwcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGlmICghcm91dGUuaW50ZWdyYXRpb24gJiYgIXByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE5vIGludGVncmF0aW9uIGRlZmluZWQgZm9yIHJvdXRlICcke3JvdXRlLnBhdGh9JywgYW5kIG5vIGRlZmF1bHQgaW50ZWdyYXRpb24gc3BlY2lmaWVkIGZvciB0aGUgZ2F0ZXdheWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmICghcm91dGUuYXV0aG9yaXphdGlvbiAmJiAhcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBObyBhdXRob3JpemF0aW9uIGRlZmluZWQgZm9yIHJvdXRlICcke3JvdXRlLnBhdGh9JywgYW5kIG5vIGRlZmF1bHQgYXV0aG9yaXphdGlvbiBzcGVjaWZpZWQgZm9yIHRoZSBnYXRld2F5YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKCFyb3V0ZS5wYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBwYXRoICcke3JvdXRlLnBhdGh9JzogcGF0aHMgbXVzdCBiZWdpbiB3aXRoICcvJyAodXNlICcvJyBmb3Igcm9vdCBwYXRoKWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChyb3V0ZS5wYXRoICE9PSBcIi9cIiAmJiByb3V0ZS5wYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgcGF0aCAnJHtyb3V0ZS5wYXRofSc6IHBhdGhzIGNhbm5vdCBlbmQgd2l0aCAnLycgKGV4Y2VwdCByb290IHBhdGgpYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByb3V0ZS5pbnRlZ3JhdGlvbj8udHlwZSA9PT0gXCJBTEJcIiAmJlxuICAgICAgICByb3V0ZS5pbnRlZ3JhdGlvbi5ob3N0TmFtZS5zdGFydHNXaXRoKFwiaHR0cHM6XCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgYWxiSW50ZWdyYXRpb24uaG9zdEh0dHBzTmFtZSBzaG91bGQgbm90IGluY2x1ZGUgYSBwcm90b2NvbDogJHtyb3V0ZS5pbnRlZ3JhdGlvbi5ob3N0TmFtZX1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5kbnMuc3ViZG9tYWluID09PSBcIlwiIHx8IHByb3BzLmRucy5zdWJkb21haW4uaW5jbHVkZXMoXCIgXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTdWJkb21haW4gbXVzdCBiZSBzZXQsIGFuZCBub3QgY29udGFpbiBzcGFjZXM6ICR7cHJvcHMuZG5zLnN1YmRvbWFpbn1gLFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAocHJvcHMudGhyb3R0bGluZz8uYnVyc3QgJiYgcHJvcHMudGhyb3R0bGluZy5idXJzdCA+IDVfMDAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDimqDvuI8gWW91ciB0aHJvdHRsaW5nIGJ1cnN0IGxpbWl0ICcke3Byb3BzLnRocm90dGxpbmcuYnVyc3R9JyBpcyBoaWdoZXIgdGhhbiB0aGUgQVdTIEFjY291bnQgbGltaXQuIE1ha2Ugc3VyZSB5b3VyIGFjY291bnQgaGFzIHVwZ3JhZGVkIHRoaXMgcXVvdGEhIGAsXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBpZCxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHByb3BzLnRocm90dGxpbmc/LnJhdGUgJiYgcHJvcHMudGhyb3R0bGluZy5yYXRlID4gMTBfMDAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDimqDvuI8gWW91ciB0aHJvdHRsaW5nIHJhdGUgbGltaXQgJyR7cHJvcHMudGhyb3R0bGluZy5yYXRlfScgaXMgaGlnaGVyIHRoYW4gdGhlIEFXUyBBY2NvdW50IGxpbWl0LiBNYWtlIHN1cmUgeW91ciBhY2NvdW50IGhhcyB1cGdyYWRlZCB0aGlzIHF1b3RhISBgLFxuICAgICAgICBzdGFjayxcbiAgICAgICAgaWQsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIG9ubHkgYWNjZXB0cyByZXF1ZXN0cyBmcm9tIGV4dGVybmFsIHVzZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQuXG4gICAqIFVuYXV0aG9yaXplZCB1c2VycyBhcmUgc3RvcHBlZCBpbiB0aGUgQVBJLUdXLCBhbmQgbm90IGZvcndhcmRlZCB0byB0aGUgaW50ZWdyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUF1dGhvcml6ZXI8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXV0aG9yaXphdGlvbjogQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUPixcbiAgKTogYXBpZ3cuSUh0dHBSb3V0ZUF1dGhvcml6ZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoYXV0aG9yaXphdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFwiTk9ORVwiOiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJJQU1cIjoge1xuICAgICAgICAvLyBBUEkgR2F0ZXdheSBpbnZva2VzIHlvdXIgQVBJIHJvdXRlIG9ubHkgaWYgdGhlIGNsaWVudCBoYXMgZXhlY3V0ZS1hcGkgcGVybWlzc2lvbiBmb3IgdGhlIHJvdXRlLlxuICAgICAgICAvLyBUaGUgY2xpZW50IGhhcyB0byB1c2UgQVdTIFNpZ1Y0IHRvIGlkZW50aWZ5IHRoZW1zZWx2ZXMgaW4gdGhlIHJlcXVlc3QuXG4gICAgICAgIC8vIFJlYWQgdGhpcyBwYWdlIGZvciBoZWxwIHdpdGggSUFNIGFuZCBBUEktR1cgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlY3VyaXR5X2lhbV9zZXJ2aWNlLXdpdGgtaWFtLmh0bWxcbiAgICAgICAgLy8gTm90ZSB0aGF0IFtyZXNvdXJjZSBwb2xpY2llcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQgZm9yIEhUVFBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1hY2Nlc3MtY29udHJvbC1pYW0uaHRtbClcbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwSWFtQXV0aG9yaXplcigpXG4gICAgICB9XG4gICAgICBjYXNlIFwiQ09HTklUT19VU0VSX1BPT0xcIjoge1xuICAgICAgICAvLyBXZSB1c2UgYSBjdXN0b20gbGFtYmRhIGF1dGhvcml6ZXIgaGVyZSBpbnN0ZWFkIG9mIHRoZSBgSHR0cFVzZXJQb29sQXV0aG9yaXplcmAgcHJvdmlkZWRcbiAgICAgICAgLy8gYnkgQ0RLLCBpbiBvcmRlciB0byBzdXBwb3J0IGByZXF1aXJlZFNjb3BlYCBhbmQgc2V0dGluZyBvZiBjdXN0b20gY29udGV4dCB2YXJpYWJsZXMuXG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZXIgPSBuZXcgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGlkICsgXCJMYW1iZGFcIixcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJCQVNJQ19BVVRIXCI6IHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplciA9IG5ldyBCYXNpY0F1dGhBdXRob3JpemVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaWQgKyBcIkxhbWJkYVwiLFxuICAgICAgICAgIGF1dGhvcml6YXRpb24sXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4gbmV3IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFBdXRob3JpemVyKGlkLCBhdXRob3JpemVyLmxhbWJkYSwge1xuICAgICAgICAgIHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6ZXIucmVzcG9uc2VUeXBlcyxcbiAgICAgICAgICAvLyBNYXggMWgsIG9yIGRpc2FibGVkICgwcykuIFRoZSB2YWx1ZSBvbmx5IG1hdHRlcnMgd2hlbiBpbnZhbGlkYXRpbmcvZHluYW1pYyBjcmVkZW50aWFsc1xuICAgICAgICAgIHJlc3VsdHNDYWNoZVR0bDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMzApLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY2FzZSBcIkNPR05JVE9fVVNFUl9QT09MX09SX0JBU0lDX0FVVEhcIjoge1xuICAgICAgICBjb25zdCBhdXRob3JpemVyID0gbmV3IENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGlkICsgXCJMYW1iZGFcIixcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJDVVNUT01fTEFNQkRBX0FVVEhPUklaRVJcIjoge1xuICAgICAgICByZXR1cm4gbmV3IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFBdXRob3JpemVyKFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGF1dGhvcml6YXRpb24ubGFtYmRhQXV0aG9yaXplcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5hdXRob3JpemF0aW9uLmF1dGhvcml6ZXJQcm9wcyxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6YXRpb24uYXV0aG9yaXplclByb3BzPy5yZXNwb25zZVR5cGVzID8/IFtcbiAgICAgICAgICAgICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzdWx0c0NhY2hlVHRsOlxuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uLmF1dGhvcml6ZXJQcm9wcz8ucmVzdWx0c0NhY2hlVHRsID8/XG4gICAgICAgICAgICAgIGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnRlZ3JhdGlvbihcbiAgICBpbnRlZ3JhdGlvbjogSW50ZWdyYXRpb25Qcm9wcyxcbiAgICBkbnM6IEFwaUdhdGV3YXlQcm9wc1tcImRuc1wiXSxcbiAgKTogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24ge1xuICAgIHN3aXRjaCAoaW50ZWdyYXRpb24udHlwZSkge1xuICAgICAgY2FzZSBcIkFMQlwiOiB7XG4gICAgICAgIC8vIFRoZSBWUENMaW5rIGNvbm5lY3RzIHRoZSBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBBTEIncyBWUEMuIE11c3QgYmUgbWFudWFsbHkgY3JlYXRlZCB3aGVuXG4gICAgICAgIC8vIHRoZSBWUEMgaXMgaW1wb3J0ZWQsIHdoaWNoIGlzIHRoZSBjYXNlIHdoZW4gdXNpbmcgQ29yZVBsYXRmb3JtQ29uc3VtZXIuXG4gICAgICAgIGNvbnN0IHZwY0xpbmsgPSBuZXcgYXBpZ3cuVnBjTGluayh0aGlzLCBcIkFsYlZwY0xpbmtcIiwge1xuICAgICAgICAgIHZwYzogaW50ZWdyYXRpb24udnBjLFxuICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbaW50ZWdyYXRpb24uc2VjdXJpdHlHcm91cF0sXG4gICAgICAgICAgc3VibmV0czogaW50ZWdyYXRpb24udnBjLnNlbGVjdFN1Ym5ldHMoKSwgLy8gVGhpcyBjb3JyZWN0bHkgc2VsZWN0cyB0aGUgcHJpdmF0ZSBzdWJuZXRzXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTWFwcGluZyA9IG5ldyBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKClcbiAgICAgICAgICAvKiogU2VlIHtAbGluayBBbGJJbnRlZ3JhdGlvblByb3BzLmhvc3ROYW1lfSAqL1xuICAgICAgICAgIC5vdmVyd3JpdGVIZWFkZXIoXG4gICAgICAgICAgICBcIkhvc3RcIixcbiAgICAgICAgICAgIC8vIFRoZSBIb3N0IGhlYWRlciBjYW4gTk9UIHVzZSBkeW5hbWljIG1hcHBpbmcsIGxpa2UgJGNvbnRleHQuZG9tYWluTmFtZSBldGMuXG4gICAgICAgICAgICBhcGlndy5NYXBwaW5nVmFsdWUuY3VzdG9tKGludGVncmF0aW9uLmhvc3ROYW1lKSxcbiAgICAgICAgICApXG4gICAgICAgIGlmIChpbnRlZ3JhdGlvbi5tYXBQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbnRlZ3JhdGlvbi5tYXBQYXJhbWV0ZXJzKHBhcmFtZXRlck1hcHBpbmcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGludGVncmF0aW9ucy5IdHRwQWxiSW50ZWdyYXRpb24oXG4gICAgICAgICAgXCJBbGJJbnRlZ3JhdGlvbi1cIiArIGRucy5zdWJkb21haW4sXG4gICAgICAgICAgaW50ZWdyYXRpb24ubG9hZEJhbGFuY2VyTGlzdGVuZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VjdXJlU2VydmVyTmFtZTogaW50ZWdyYXRpb24uaG9zdE5hbWUsXG4gICAgICAgICAgICB2cGNMaW5rOiB2cGNMaW5rLFxuICAgICAgICAgICAgbWV0aG9kOiBhcGlndy5IdHRwTWV0aG9kLkFOWSxcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY2FzZSBcIkxhbWJkYVwiOiB7XG4gICAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb25zLkh0dHBMYW1iZGFJbnRlZ3JhdGlvbihcbiAgICAgICAgICBcIkxhbWJkYUludGVncmF0aW9uXCIsXG4gICAgICAgICAgaW50ZWdyYXRpb24ubGFtYmRhLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiBhcGlndy5QYXlsb2FkRm9ybWF0VmVyc2lvbi5WRVJTSU9OXzJfMCxcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjYXNlIFwiU1FTXCI6IHtcbiAgICAgICAgLy8gQVBJLUdXIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIFNRUyBieSBkZWZhdWx0XG4gICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgQXBpR3dUbyR7aW50ZWdyYXRpb24ucXVldWUubm9kZS5pZH1TZXJ2aWNlUm9sZWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgIFwiQWxsb3dzIEFQSS1HVyB0byBhZGQgbWVzc2FnZXMgdG8gXCIgKyBpbnRlZ3JhdGlvbi5xdWV1ZS5xdWV1ZUFybixcbiAgICAgICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgaW50ZWdyYXRpb24ucXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMocm9sZSlcblxuICAgICAgICBsZXQgcGFyYW1ldGVyTWFwcGluZyA9IG5ldyBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKClcbiAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1pbnRlZ3JhdGlvbnMtYXdzLXNlcnZpY2VzLXJlZmVyZW5jZS5odG1sI1NRUy1TZW5kTWVzc2FnZVxuICAgICAgICAgIC5jdXN0b20oXCJRdWV1ZVVybFwiLCBpbnRlZ3JhdGlvbi5xdWV1ZS5xdWV1ZVVybClcbiAgICAgICAgICAuY3VzdG9tKFwiTWVzc2FnZUJvZHlcIiwgXCIkcmVxdWVzdC5ib2R5XCIpXG4gICAgICAgICAgLmN1c3RvbShcIlJlZ2lvblwiLCBcImV1LXdlc3QtMVwiKSAvLyBDaGFuZ2UgdGhpcyBpZiB0aGUgU1FTIHF1ZXVlIGlzIGluIGFub3RoZXIgcmVnaW9uIVxuXG4gICAgICAgIGlmIChpbnRlZ3JhdGlvbi5tZXNzYWdlQXR0cmlidXRlcykge1xuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmcgPSBwYXJhbWV0ZXJNYXBwaW5nLmN1c3RvbShcbiAgICAgICAgICAgIFwiTWVzc2FnZUF0dHJpYnV0ZXNcIixcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGludGVncmF0aW9uLm1lc3NhZ2VBdHRyaWJ1dGVzKSxcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFNxc1JvdXRlSW50ZWdyYXRpb24oXCJTcXNJbnRlZ3JhdGlvblwiLCB7XG4gICAgICAgICAgdHlwZTogYXBpZ3cuSHR0cEludGVncmF0aW9uVHlwZS5BV1NfUFJPWFksXG4gICAgICAgICAgc3VidHlwZTogYXBpZ3cuSHR0cEludGVncmF0aW9uU3VidHlwZS5TUVNfU0VORF9NRVNTQUdFLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiBhcGlndy5JbnRlZ3JhdGlvbkNyZWRlbnRpYWxzLmZyb21Sb2xlKHJvbGUpLFxuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmc6IHBhcmFtZXRlck1hcHBpbmcsXG4gICAgICAgICAgcGF5bG9hZEZvcm1hdFZlcnNpb246IGFwaWd3LlBheWxvYWRGb3JtYXRWZXJzaW9uLlZFUlNJT05fMV8wLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgYSBncmFudGFibGUgdGFyZ2V0IChyb2xlLCB1c2VyIGV0Yy4pIHBlcm1pc3Npb24gdG8gaW52b2tlIHRoZSBBUEkuXG4gICAqIE9ubHkgd29ya3Mgd2hlbiB1c2luZyBgSUFNYCBhcyB7QGxpbmsgQXBpR2F0ZXdheVJvdXRlLmF1dGhvcml6YXRpb259LlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IEEgZ3JhbnRhYmxlLCBsaWtlIHtAbGluayBpYW0uUm9sZX1cbiAgICovXG4gIHB1YmxpYyBncmFudEludm9rZSh0YXJnZXQ6IGlhbS5JR3JhbnRhYmxlKSB7XG4gICAgZm9yIChjb25zdCByb3V0ZVByb3BzIG9mIHRoaXMucHJvcHMucm91dGVzKSB7XG4gICAgICBjb25zdCBhdXRoVHlwZSA9XG4gICAgICAgIHJvdXRlUHJvcHMuYXV0aG9yaXphdGlvbj8udHlwZSA/PyB0aGlzLnByb3BzLmRlZmF1bHRBdXRob3JpemF0aW9uPy50eXBlXG5cbiAgICAgIGlmIChhdXRoVHlwZSAhPT0gXCJJQU1cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBncmFudCBpbnZva2UgZm9yIGFuIEFQSSBHYXRld2F5IHdoZW4gbm90IHVzaW5nIElBTSBhdXRoIChmb3VuZCBhdXRoICcke2F1dGhUeXBlfScgb24gcm91dGUgJyR7cm91dGVQcm9wcy5wYXRofScpIFske2Nkay5TdGFjay5vZih0aGlzKS5zdGFja05hbWV9XWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKSB7XG4gICAgICByb3V0ZS5ncmFudEludm9rZSh0YXJnZXQpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBkb21haW4gZm9yIHRoZSBBUEktR2F0ZXdheSwgYSBSb3V0ZTUzIHJlY29yZCBhbmQgYW4gSFRUUFMgY2VydC5cbiAqIEBhdXRob3IgS3Jpc3RpYW4gUmVrc3RhZCA8a3JlQGNhcHJhY29uc3VsdGluZy5ubz5cbiAqL1xuY2xhc3MgQ3VzdG9tRG9tYWluIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpR3dDdXN0b21Eb21haW46IGFwaWd3LkRvbWFpbk5hbWVcblxuICAvKiogVGhlIEZ1bGx5IFF1YWxpZmllZCBEb21haW4gTmFtZSAoRlFETikgbGlrZSBgcHJvZHVjdC5wbGF0Zm9ybS5leGFtcGxlLm5vYC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGN1c3RvbURvbWFpbk5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBcGlHYXRld2F5RG5zUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLmN1c3RvbURvbWFpbk5hbWUgPSBgJHtwcm9wcy5zdWJkb21haW59LiR7cHJvcHMuaG9zdGVkWm9uZS56b25lTmFtZX1gXG5cbiAgICAvLyBDYW4gYWxzbyB1c2Ugd2lsZGNhcmQgY2VydHMgaW5zdGVhZCEgQ2hlYXBlclxuICAgIC8qKiBBbGxvd3MgZXh0ZXJuYWwgdXNlcnMgdG8gY29ubmVjdCB3aXRoIEhUVFBTLiAqL1xuICAgIGNvbnN0IGN1c3RvbURvbWFpbkNlcnQgPSBuZXcgYWNtLkNlcnRpZmljYXRlKHRoaXMsIFwiSHR0cHNDZXJ0aWZpY2F0ZVwiLCB7XG4gICAgICBkb21haW5OYW1lOiB0aGlzLmN1c3RvbURvbWFpbk5hbWUsXG4gICAgICB2YWxpZGF0aW9uOiBhY20uQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMocHJvcHMuaG9zdGVkWm9uZSksXG4gICAgfSlcblxuICAgIC8vIE5vdGUgdGhhdCBBUEktR1cgY2FuIGFsc28gc3VwcG9ydCB3aWxkY2FyZCBkb21haW5zISBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktY3VzdG9tLWRvbWFpbi1uYW1lcy5odG1sI2h0dHAtd2lsZGNhcmQtY3VzdG9tLWRvbWFpbi1uYW1lc1xuICAgIC8vIEJ1dCB0aGlzIHdpbGwgbm90IHdvcmsgd2hlbiBBV1MgYWNjb3VudCBYIGhhcyBDdXN0b21Eb21haW4gYHN0YWdpbmcucGxhdGZvcm0uZXhhbXBsZS5ub2AgYW5kIGFjY291bnQgWSBoYXMgQ3VzdG9tRG9tYWluIGAqLnBsYXRmb3JtLmV4YW1wbGUubm9gLlxuICAgIC8vIE5vdCBzdXJlIGhvdyBzdWItc3ViZG9tYWlucyBhcmUgYWZmZWN0ZWQ6IGBteXNlcnZpY2Uuc3RhZ2luZy5wbGF0Zm9ybS5leGFtcGxlLm5vYCBhbmQgYCoucGxhdGZvcm0uZXhhbXBsZS5ub2AuXG4gICAgdGhpcy5hcGlHd0N1c3RvbURvbWFpbiA9IG5ldyBhcGlndy5Eb21haW5OYW1lKFxuICAgICAgdGhpcyxcbiAgICAgIFwiRG9tYWluTmFtZS1cIiArIHByb3BzLnN1YmRvbWFpbixcbiAgICAgIHtcbiAgICAgICAgZG9tYWluTmFtZTogdGhpcy5jdXN0b21Eb21haW5OYW1lLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogY3VzdG9tRG9tYWluQ2VydCxcbiAgICAgICAgZW5kcG9pbnRUeXBlOiBhcGlndy5FbmRwb2ludFR5cGUuUkVHSU9OQUwsXG4gICAgICAgIHNlY3VyaXR5UG9saWN5OiBhcGlndy5TZWN1cml0eVBvbGljeS5UTFNfMV8yLFxuICAgICAgfSxcbiAgICApXG5cbiAgICAvLyBUaGlzIG1ha2VzIHRoZSBBUEktR1cgcHVibGljbHkgYXZhaWxhYmxlIG9uIHRoZSBjdXN0b20gZG9tYWluIG5hbWUuXG4gICAgbmV3IHJvdXRlNTMuQVJlY29yZCh0aGlzLCBcIlJvdXRlNTNBUmVjb3JkQXBpZ3dBbGlhc1wiLCB7XG4gICAgICByZWNvcmROYW1lOiBwcm9wcy5zdWJkb21haW4sXG4gICAgICB6b25lOiBwcm9wcy5ob3N0ZWRab25lLFxuICAgICAgdGFyZ2V0OiByb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyByb3V0ZTUzVGFyZ2V0cy5BcGlHYXRld2F5djJEb21haW5Qcm9wZXJ0aWVzKFxuICAgICAgICAgIHRoaXMuYXBpR3dDdXN0b21Eb21haW4ucmVnaW9uYWxEb21haW5OYW1lLFxuICAgICAgICAgIHRoaXMuYXBpR3dDdXN0b21Eb21haW4ucmVnaW9uYWxIb3N0ZWRab25lSWQsXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgdHRsOiBwcm9wcy50dGwgPz8gY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksIC8vIExvdyBUVEwgbWFrZXMgaXQgZWFzaWVyIHRvIGRvIGNoYW5nZXNcbiAgICB9KVxuICB9XG59XG5cbi8qKiBBY3RzIGFzIGdsdWUgKGJldHdlZW4gdGhlIGludGVncmF0aW9uIHByb3BzIGFuZCB0aGUgSHR0cEFwaSkgd2hlbiBjcmVhdGluZyBhbiBTcXNJbnRlZ3JhdGlvbi4gKi9cbmNsYXNzIFNxc1JvdXRlSW50ZWdyYXRpb24gZXh0ZW5kcyBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gaWQgVGhlIGlkIHVzZWQgaW4gdGhlIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IGNvbnN0cnVjdFxuICAgKiAgICBjcmVhdGVkIGludGVybmFsbHkgYnkge0BsaW5rIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uLl9iaW5kVG9Sb3V0ZX0uXG4gICAqICAgIFtTb3VyY2UgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvYjVhZTM3NzgyYmMzY2I2MzdlZWVmOWZiYjFmYmUyYzVlZmRmYzA2OC9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1hcGlnYXRld2F5djIvbGliL2h0dHAvaW50ZWdyYXRpb24udHMjTDMyMSlcbiAgICogQHBhcmFtIGludGVncmF0aW9uUHJvcHMgVGhlIHByb3BzIHRvIHBhc3MgdG8gdGhlIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBpbnRlZ3JhdGlvblByb3BzOiBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgKSB7XG4gICAgc3VwZXIoaWQpXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzZW5kcyB0aGUgcHJvcGVydGllcyBuZWVkZWQgZm9yIGNyZWF0aW5nIGEge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gdG8gdGhlXG4gICAqIHtAbGluayBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbn0uXG4gICAqL1xuICBiaW5kKCk6IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uQ29uZmlnIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnk6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvYjVhZTM3NzgyYmMzY2I2MzdlZWVmOWZiYjFmYmUyYzVlZmRmYzA2OC9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1hcGlnYXRld2F5djIvbGliL2h0dHAvaW50ZWdyYXRpb24udHMjTDMxOVxuICAgIHJldHVybiB0aGlzLmludGVncmF0aW9uUHJvcHNcbiAgfVxufVxuXG4vKipcbiAqIFdoZW4gdXNpbmcgYE5vZGVqc0Z1bmN0aW9uYCB3aXRoIGBlbnRyeWAsIHdlIHBvaW50IENESyB0byBhIGZpbGUgd2l0aCBvdXIgbGFtYmRhIGNvZGUuIFRoaXMgY2FuXG4gKiBlaXRoZXIgYmUgYSBUeXBlU2NyaXB0IG9yIEphdmFTY3JpcHQgZmlsZS4gV2hlbiBjcmVhdGluZyBjb25zdHJ1Y3RzIGluIHRlc3RzIGluc2lkZSB0aGlzIGxpYnJhcnksXG4gKiB0aGUgZW50cnkgd2lsbCBwb2ludCB0byB0aGUgVHlwZVNjcmlwdCBmaWxlIGluIHRoZSBzb3VyY2UgY29kZS4gQnV0IHdoZW4gYSBsaWJyYXJ5IGNvbnN1bWVyIHVzZXNcbiAqIHRoaXMsIGl0IHdpbGwgaW5zdGVhZCBwb2ludCB0byB0aGUgdHJhbnNwaWxlZCBKYXZhU2NyaXB0IGZpbGUuIFNvIHRvIHNldCB0aGUgY29ycmVjdCBmaWxlXG4gKiBleHRlbnNpb24sIHdlIG11c3QgY2hlY2sgaWYgd2UncmUgYmVpbmcgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBUeXBlU2NyaXB0IHNvdXJjZSBjb2RlXG4gKiAoc3JjL2FwaS1nYXRld2F5KSwgb3RoZXJ3aXNlIHdlJ3JlIGJlaW5nIHJ1biBieSBhIGNvbnN1bWVyIGFzIHRyYW5zcGlsZWQgSmF2YVNjcmlwdC5cbiAqL1xuY29uc3QgYXV0aG9yaXplckZpbGVFeHRlbnNpb24gPSBfX2Rpcm5hbWUuZW5kc1dpdGgoXCJzcmMvYXBpLWdhdGV3YXlcIilcbiAgPyBcInRzXCJcbiAgOiBcImpzXCJcblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIHJlYWRzIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFjY2VzcyB0b2tlbj5gIGhlYWRlciBhbmRcbiAqIHZlcmlmaWVzIHRoZSB0b2tlbiBhZ2FpbnN0IGEgQ29nbml0byB1c2VyIHBvb2wuXG4gKi9cbmNsYXNzIENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXI8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nLFxuPiBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYTogbGFtYmRhLklGdW5jdGlvblxuXG4gIC8qKlxuICAgKiBVc2Ugc2ltcGxlIHJlc3BvbnNlIHR5cGUgKGB7IGlzQXV0aG9yaXplZDogdHJ1ZS9mYWxzZSB9YCksIGFzIG9wcG9zZWQgdG8gcmV0dXJuaW5nIGFuIElBTVxuICAgKiBQb2xpY3kgZG9jdW1lbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2VUeXBlczogYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZVtdID0gW1xuICAgIGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGUuU0lNUExFLFxuICBdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXJQcm9wczxBdXRoU2NvcGVzVD4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubGFtYmRhID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCBcIkF1dGhvcml6ZXJGdW5jdGlvblwiLCB7XG4gICAgICBlbnRyeTogcGF0aC5qb2luKFxuICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgIGBhdXRob3JpemVycy9jb2duaXRvLXVzZXItcG9vbC1hdXRob3JpemVyLiR7YXV0aG9yaXplckZpbGVFeHRlbnNpb259YCxcbiAgICAgICksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgW1wiVVNFUl9QT09MX0lEXCJdOiBwcm9wcy51c2VyUG9vbC51c2VyUG9vbElkLFxuICAgICAgICBbXCJSRVFVSVJFRF9TQ09QRVwiXTogcHJvcHMucmVxdWlyZWRTY29wZSA/PyBcIlwiLFxuICAgICAgICBbXCJDUkVERU5USUFMU19GT1JfSU5URVJOQUxfQVVUSE9SSVpBVElPTlwiXTpcbiAgICAgICAgICBwcm9wcy5jcmVkZW50aWFsc0ZvckludGVybmFsQXV0aG9yaXphdGlvblxuICAgICAgICAgICAgPyBwcm9wcy5jcmVkZW50aWFsc0ZvckludGVybmFsQXV0aG9yaXphdGlvblxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgaWYgKHByb3BzLmNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uKSB7XG4gICAgICBzZWNyZXRzbWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGlkICsgXCJCYXNpY0F1dGhTZWNyZXRcIixcbiAgICAgICAgcHJvcHMuY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb24sXG4gICAgICApLmdyYW50UmVhZCh0aGlzLmxhbWJkYSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIHJlYWRzIGBBdXRob3JpemF0aW9uOiBCYXNpYyA8YmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbHM+YFxuICogaGVhZGVyIGFuZCB2ZXJpZmllcyB0aGUgY3JlZGVudGlhbHMgYWdhaW5zdCBhIGdpdmVuIHNlY3JldC5cbiAqL1xuY2xhc3MgQmFzaWNBdXRoQXV0aG9yaXplciBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYTogbGFtYmRhLklGdW5jdGlvblxuXG4gIC8vIFNpbXBsZSBpcyBgeyBpc0F1dGhvcml6ZWQ6IHRydWUvZmFsc2UgfWAsIGFzIG9wcG9zZWQgdG8gcmV0dXJuaW5nIGFuIElBTSBQb2xpY3kgZG9jdW1lbnRcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGVbXSA9IFtcbiAgICBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRSxcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBCYXNpY0F1dGhBdXRob3JpemVyUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubGFtYmRhID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCBcIkJhc2ljQXV0aExhbWJkYVwiLCB7XG4gICAgICBlbnRyeTogcGF0aC5qb2luKFxuICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgIGBhdXRob3JpemVycy9iYXNpYy1hdXRoLWF1dGhvcml6ZXIuJHthdXRob3JpemVyRmlsZUV4dGVuc2lvbn1gLFxuICAgICAgKSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFuIGF1dGhvcml6ZXIgZm9yIEFQSS1HYXRld2F5IHRoYXQgY2hlY2tzIEJhc2ljIEF1dGggY3JlZGVudGlhbHMgb24gcmVxdWVzdHNcIixcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgW1wiQ1JFREVOVElBTFNfU0VDUkVUX05BTUVcIl06IHByb3BzLmNyZWRlbnRpYWxzU2VjcmV0TmFtZVxuICAgICAgICAgID8gcHJvcHMuY3JlZGVudGlhbHNTZWNyZXROYW1lXG4gICAgICAgICAgOiBcIlwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICBzY29wZSxcbiAgICAgIGlkICsgXCJCYXNpY0F1dGhTZWNyZXRcIixcbiAgICAgIHByb3BzLmNyZWRlbnRpYWxzU2VjcmV0TmFtZSxcbiAgICApLmdyYW50UmVhZCh0aGlzLmxhbWJkYSlcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggYWxsb3dzIGJvdGg6XG4gKiAtIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFjY2VzcyB0b2tlbj5gIGhlYWRlciwgZm9yIHdoaWNoIHRoZSB0b2tlbiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGdpdmVuXG4gKiAgIENvZ25pdG8gdXNlciBwb29sXG4gKiAtIGBBdXRob3JpemF0aW9uOiBCYXNpYyA8YmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbHM+YCBoZWFkZXIsIGZvciB3aGljaCB0aGUgY3JlZGVudGlhbHMgYXJlXG4gKiAgIGNoZWNrZWQgYWdhaW5zdCB0aGUgY3JlZGVudGlhbHMgZnJvbSB0aGUgZ2l2ZW4gYmFzaWMgYXV0aCBzZWNyZXQgbmFtZVxuICpcbiAqIElmIGVpdGhlciBvZiB0aGVzZSBhcmUgZ2l2ZW4gYW5kIHZhbGlkLCB0aGUgcmVxdWVzdCBpcyBhdXRoZW50aWNhdGVkLlxuICovXG5jbGFzcyBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXI8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nLFxuPiBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYTogbGFtYmRhLklGdW5jdGlvblxuXG4gIC8qKlxuICAgKiBVc2Ugc2ltcGxlIHJlc3BvbnNlIHR5cGUgKGB7IGlzQXV0aG9yaXplZDogdHJ1ZS9mYWxzZSB9YCksIGFzIG9wcG9zZWQgdG8gcmV0dXJuaW5nIGFuIElBTVxuICAgKiBQb2xpY3kgZG9jdW1lbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2VUeXBlczogYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZVtdID0gW1xuICAgIGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGUuU0lNUExFLFxuICBdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplclByb3BzPEF1dGhTY29wZXNUPixcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5sYW1iZGEgPSBuZXcgbGFtYmRhTm9kZWpzLk5vZGVqc0Z1bmN0aW9uKHRoaXMsIFwiQXV0aG9yaXplckZ1bmN0aW9uXCIsIHtcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oXG4gICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgYGF1dGhvcml6ZXJzL2NvZ25pdG8tdXNlci1wb29sLW9yLWJhc2ljLWF1dGgtYXV0aG9yaXplci4ke2F1dGhvcml6ZXJGaWxlRXh0ZW5zaW9ufWAsXG4gICAgICApLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFtcIlVTRVJfUE9PTF9JRFwiXTogcHJvcHMudXNlclBvb2wgPyBwcm9wcy51c2VyUG9vbC51c2VyUG9vbElkIDogXCJcIixcbiAgICAgICAgW1wiUkVRVUlSRURfU0NPUEVcIl06IHByb3BzLnJlcXVpcmVkU2NvcGUgPz8gXCJcIixcbiAgICAgICAgW1wiQkFTSUNfQVVUSF9DUkVERU5USUFMU19TRUNSRVRfTkFNRVwiXTpcbiAgICAgICAgICBwcm9wcy5iYXNpY0F1dGhDcmVkZW50aWFsc1NlY3JldE5hbWVcbiAgICAgICAgICAgID8gcHJvcHMuYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBpZiAocHJvcHMuYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lKSB7XG4gICAgICBzZWNyZXRzbWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGlkICsgXCJCYXNpY0F1dGhTZWNyZXRcIixcbiAgICAgICAgcHJvcHMuYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lLFxuICAgICAgKS5ncmFudFJlYWQodGhpcy5sYW1iZGEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBzbGlnaHRseSBleHRlbmRlZCB2ZXJzaW9uIG9mIHRoZSBbZGVmYXVsdCBKU09OIGZvcm1hdCBzdWdnZXN0ZWQgYnkgQVdTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbG9nZ2luZy5odG1sI2h0dHAtYXBpLWVuYWJsZS1sb2dnaW5nLmV4YW1wbGVzKS5cbiAqL1xuY29uc3QgZGVmYXVsdEFjY2Vzc0xvZ0Zvcm1hdCA9IHtcbiAgcmVxdWVzdElkOiBcIiRjb250ZXh0LnJlcXVlc3RJZFwiLFxuICB1c2VyQWdlbnQ6IFwiJGNvbnRleHQuaWRlbnRpdHkudXNlckFnZW50XCIsXG4gIGlwOiBcIiRjb250ZXh0LmlkZW50aXR5LnNvdXJjZUlwXCIsXG4gIC8qKiBDTEYgZm9ybWF0OiBgZGQvTU1NL3l5eXk6SEg6bW06c3MgKy1oaG1tYCAqL1xuICByZXF1ZXN0VGltZTogXCIkY29udGV4dC5yZXF1ZXN0VGltZVwiLFxuICByZXF1ZXN0VGltZUVwb2NoOiBcIiRjb250ZXh0LnJlcXVlc3RUaW1lRXBvY2hcIixcbiAgZGF0YVByb2Nlc3NlZDogXCIkY29udGV4dC5kYXRhUHJvY2Vzc2VkXCIsXG4gIGh0dHBNZXRob2Q6IFwiJGNvbnRleHQuaHR0cE1ldGhvZFwiLFxuICBwYXRoOiBcIiRjb250ZXh0LnBhdGhcIixcbiAgcm91dGVLZXk6IFwiJGNvbnRleHQucm91dGVLZXlcIixcbiAgc3RhdHVzOiBcIiRjb250ZXh0LnN0YXR1c1wiLFxuICBwcm90b2NvbDogXCIkY29udGV4dC5wcm90b2NvbFwiLFxuICByZXNwb25zZUxlbmd0aDogXCIkY29udGV4dC5yZXNwb25zZUxlbmd0aFwiLFxuICByZXNwb25zZUxhdGVuY3k6IFwiJGNvbnRleHQucmVzcG9uc2VMYXRlbmN5XCIsXG4gIGRvbWFpbk5hbWU6IFwiJGNvbnRleHQuZG9tYWluTmFtZVwiLFxuICBlcnJvcjoge1xuICAgIHR5cGU6IFwiJGNvbnRleHQuZXJyb3IucmVzcG9uc2VUeXBlXCIsXG4gICAgZ2F0ZXdheUVycm9yOiBcIiRjb250ZXh0LmVycm9yLm1lc3NhZ2VcIixcbiAgICBpbnRlZ3JhdGlvbkVycm9yOiBcIiRjb250ZXh0LmludGVncmF0aW9uLmVycm9yXCIsXG4gICAgYXV0aG9yaXplckVycm9yOiBcIiRjb250ZXh0LmF1dGhvcml6ZXIuZXJyb3JcIixcbiAgfSxcbiAgaW50ZWdyYXRpb246IHtcbiAgICBsYXRlbmN5OiBcIiRjb250ZXh0LmludGVncmF0aW9uLmxhdGVuY3lcIixcbiAgICByZXF1ZXN0SWQ6IFwiJGNvbnRleHQuaW50ZWdyYXRpb24ucmVxdWVzdElkXCIsXG4gICAgcmVzcG9uc2VTdGF0dXM6IFwiJGNvbnRleHQuaW50ZWdyYXRpb24uc3RhdHVzXCIsXG4gIH0sXG4gIGF1dGg6IHtcbiAgICBpYW06IHtcbiAgICAgIHVzZXJBcm46IFwiJGNvbnRleHQuaWRlbnRpdHkudXNlckFyblwiLFxuICAgICAgYXdzQWNjb3VudDogXCIkY29udGV4dC5pZGVudGl0eS5hY2NvdW50SWRcIixcbiAgICAgIGF3c1ByaW5jaXBhbDogXCIkY29udGV4dC5pZGVudGl0eS5jYWxsZXJcIixcbiAgICAgIGF3c1ByaW5jaXBhbE9yZzogXCIkY29udGV4dC5pZGVudGl0eS5wcmluY2lwYWxPcmdJZFwiLFxuICAgIH0sXG4gICAgYmFzaWM6IHsgdXNlcm5hbWU6IFwiJGNvbnRleHQuYXV0aG9yaXplci51c2VybmFtZVwiIH0sXG4gICAgY29nbml0bzogeyBjbGllbnRJZDogXCIkY29udGV4dC5hdXRob3JpemVyLmNsaWVudElkXCIgfSxcbiAgfSxcbiAgYXdzRW5kcG9pbnRSZXF1ZXN0OiB7XG4gICAgaWQ6IFwiJGNvbnRleHQuYXdzRW5kcG9pbnRSZXF1ZXN0SWRcIixcbiAgICBpZDI6IFwiJGNvbnRleHQuYXdzRW5kcG9pbnRSZXF1ZXN0SWQyXCIsXG4gIH0sXG4gIG1lc3NhZ2U6XG4gICAgXCIkY29udGV4dC5pZGVudGl0eS5zb3VyY2VJcCAtICRjb250ZXh0Lmh0dHBNZXRob2QgJGNvbnRleHQuZG9tYWluTmFtZSAkY29udGV4dC5wYXRoICgkY29udGV4dC5yb3V0ZUtleSkgLSAkY29udGV4dC5zdGF0dXMgWyRjb250ZXh0LnJlc3BvbnNlTGF0ZW5jeSBtc11cIixcbn1cblxuLyoqXG4gKiBFbmFibGVzIGFjY2VzcyBsb2dzIG9uIHRoZSBBUEktR2F0ZXdheS5cbiAqXG4gKiBAYXV0aG9yIEtyaXN0aWFuIFJla3N0YWQgPGtyZUBjYXByYWNvbnN1bHRpbmcubm8+XG4gKi9cbmNsYXNzIEFwaUdhdGV3YXlBY2Nlc3NMb2dzIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzdGFnZTogYXBpZ3cuQ2ZuU3RhZ2UsXG4gICAgcHJvcHM6IEFwaUdhdGV3YXlBY2Nlc3NMb2dzUHJvcHMgfCB1bmRlZmluZWQsXG4gICAgZGVmYXVsdEFjY2Vzc0xvZ0Zvcm1hdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIC8vIGxvZ0dyb3VwIGlzIHNldCB1cCB3aXRoIGhlbHAgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xMTEwMCNpc3N1ZWNvbW1lbnQtOTA0NjI3MDgxXG4gICAgLy8gTm90IHN1cmUgaWYgSFRUUCBBUEkgYWN0dWFsbHkgbmVlZHMgdGhlIHNlcnZpY2Ugcm9sZSB3aXRoIG1hbmFnZWQgcG9saWN5OiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbG9nZ2luZy5odG1sXG4gICAgY29uc3QgYWNjZXNzTG9ncyA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsIFwiQWNjZXNzTG9nR3JvdXBcIiwge1xuICAgICAgcmV0ZW50aW9uOiBwcm9wcz8ucmV0ZW50aW9uLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHM/LnJlbW92YWxQb2xpY3kgPz8gY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgLy8gQWx3YXlzIHVzZSB0aGUgZGVmYXVsdCBlbmNyeXB0aW9uIGtleS4gT3RoZXJ3aXNlLCB0aGUga2V5IG5lZWRzIHNwZWNpYWwgcG9saWNpZXM6XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9lbmNyeXB0LWxvZy1kYXRhLWttcy5odG1sI2Ntay1wZXJtaXNzaW9uc1xuICAgICAgZW5jcnlwdGlvbktleTogdW5kZWZpbmVkLFxuICAgIH0pXG4gICAgdGhpcy5sb2dHcm91cCA9IGFjY2Vzc0xvZ3NcblxuICAgIHN0YWdlLmFjY2Vzc0xvZ1NldHRpbmdzID0ge1xuICAgICAgZGVzdGluYXRpb25Bcm46IGFjY2Vzc0xvZ3MubG9nR3JvdXBBcm4sXG4gICAgICBmb3JtYXQ6IEpTT04uc3RyaW5naWZ5KHByb3BzPy5hY2Nlc3NMb2dGb3JtYXQgPz8gZGVmYXVsdEFjY2Vzc0xvZ0Zvcm1hdCksXG4gICAgfVxuXG4gICAgY29uc3QgYXBpR3dMb2dzUm9sZSA9IG5ldyBpYW0uUm9sZShcbiAgICAgIHRoaXMsXG4gICAgICBcIkFwaUdhdGV3YXlQdXNoVG9DbG91ZHdhdGNoTG9nc1JvbGVcIixcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJhcGlnYXRld2F5LmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICAgIFwic2VydmljZS1yb2xlL0FtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9nc1wiLFxuICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIClcblxuICAgIGFjY2Vzc0xvZ3MuZ3JhbnRXcml0ZShhcGlHd0xvZ3NSb2xlKVxuICB9XG59XG5cbi8qKiBSZXR1cm5zIGEgc2hvcnQgc2VtaS11bmlxdWUgaGFzaCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLiAqL1xuZnVuY3Rpb24gc2hvcnRIYXNoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gU0hBLTEgaXMgbm8tbm8gd2hlbiB3ZSBuZWVkIGNyeXB0b2dyYXBoaWMgc2VjdXJpdHksIGJ1dCBoZXJlIHdlIGp1c3QgaXQgZm9yIHNob3J0ZW5pbmcgYSBuYW1lLFxuICAvLyB3aGljaCBpcyBmaW5lXG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMVwiKS51cGRhdGUoc3RyKS5kaWdlc3QoXCJoZXhcIikuc3Vic3RyaW5nKDAsIDEwKVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liflig/cdk",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.4",
|
|
4
4
|
"description": "CDK library for Liflig",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
"prepare": "npm run build && husky",
|
|
17
17
|
"semantic-release": "semantic-release",
|
|
18
18
|
"snapshots": "./scripts/create-snapshots.sh",
|
|
19
|
-
"docs": "typedoc src --out docs"
|
|
20
|
-
"install-deps": "npm ci && npm --prefix ./src/api-gateway/authorizers ci"
|
|
19
|
+
"docs": "typedoc src --out docs"
|
|
21
20
|
},
|
|
22
21
|
"bin": {
|
|
23
22
|
"cdk-create-snapshots": "lib/bin/cdk-create-snapshots.js",
|
|
@@ -64,7 +63,6 @@
|
|
|
64
63
|
"@typescript-eslint/parser": "8.24.0",
|
|
65
64
|
"aws-cdk": "2.178.2",
|
|
66
65
|
"aws-cdk-lib": "2.178.2",
|
|
67
|
-
"aws-jwt-verify": "5.0.0",
|
|
68
66
|
"constructs": "10.4.2",
|
|
69
67
|
"esbuild": "0.25.0",
|
|
70
68
|
"eslint": "9.20.1",
|
|
@@ -83,6 +81,7 @@
|
|
|
83
81
|
"dependencies": {
|
|
84
82
|
"@aws-sdk/client-ssm": "3.744.0",
|
|
85
83
|
"@capraconsulting/webapp-deploy-lambda": "2.4.1",
|
|
84
|
+
"aws-jwt-verify": "5.0.0",
|
|
86
85
|
"del": "8.0.0",
|
|
87
86
|
"glob": "11.0.1",
|
|
88
87
|
"source-map-support": "0.5.21"
|