@aws-cdk/aws-bedrock-agentcore-alpha 2.231.0-alpha.0 → 2.232.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +73 -15
- package/.jsii.tabl.json.gz +0 -0
- package/README.md +35 -0
- package/eslint-suppressions.json +2 -0
- package/lib/gateway/gateway-base.d.ts +0 -5
- package/lib/gateway/gateway-base.js +1 -1
- package/lib/gateway/gateway.d.ts +0 -40
- package/lib/gateway/gateway.js +1 -1
- package/lib/gateway/inbound-auth/authorizer.d.ts +0 -13
- package/lib/gateway/inbound-auth/authorizer.js +3 -3
- package/lib/gateway/outbound-auth/api-key.d.ts +0 -39
- package/lib/gateway/outbound-auth/api-key.js +1 -1
- package/lib/gateway/outbound-auth/credential-provider.d.ts +1 -8
- package/lib/gateway/outbound-auth/credential-provider.js +2 -2
- package/lib/gateway/outbound-auth/iam-role.d.ts +1 -25
- package/lib/gateway/outbound-auth/oauth.d.ts +0 -35
- package/lib/gateway/protocol.d.ts +0 -23
- package/lib/gateway/protocol.js +2 -2
- package/lib/gateway/targets/schema/api-schema.d.ts +0 -23
- package/lib/gateway/targets/schema/api-schema.js +4 -4
- package/lib/gateway/targets/schema/base-schema.d.ts +1 -24
- package/lib/gateway/targets/schema/tool-schema.d.ts +0 -35
- package/lib/gateway/targets/schema/tool-schema.js +4 -4
- package/lib/gateway/targets/target-base.js +1 -1
- package/lib/gateway/targets/target-configuration.d.ts +0 -20
- package/lib/gateway/targets/target-configuration.js +7 -7
- package/lib/gateway/targets/target.d.ts +0 -33
- package/lib/gateway/targets/target.js +1 -1
- package/lib/gateway/validation-helpers.d.ts +0 -64
- package/lib/memory/memory-strategy.d.ts +0 -13
- package/lib/memory/memory-strategy.js +1 -1
- package/lib/memory/memory.d.ts +1 -15
- package/lib/memory/memory.js +3 -3
- package/lib/memory/strategies/managed-strategy.js +2 -2
- package/lib/memory/strategies/self-managed-strategy.d.ts +3 -3
- package/lib/memory/strategies/self-managed-strategy.js +14 -2
- package/lib/network/network-configuration.d.ts +0 -19
- package/lib/network/network-configuration.js +5 -6
- package/lib/runtime/runtime-artifact.d.ts +13 -8
- package/lib/runtime/runtime-artifact.js +49 -7
- package/lib/runtime/runtime-authorizer-configuration.d.ts +0 -6
- package/lib/runtime/runtime-authorizer-configuration.js +15 -3
- package/lib/runtime/runtime-base.d.ts +0 -6
- package/lib/runtime/runtime-base.js +1 -1
- package/lib/runtime/runtime-endpoint-base.js +1 -1
- package/lib/runtime/runtime-endpoint.d.ts +0 -15
- package/lib/runtime/runtime-endpoint.js +1 -1
- package/lib/runtime/runtime.d.ts +1 -21
- package/lib/runtime/runtime.js +3 -3
- package/lib/tools/browser.d.ts +1 -29
- package/lib/tools/browser.js +5 -5
- package/lib/tools/code-interpreter.d.ts +1 -27
- package/lib/tools/code-interpreter.js +5 -5
- package/package.json +9 -9
- package/.eslintrc.js +0 -4
package/lib/tools/browser.js
CHANGED
|
@@ -38,11 +38,11 @@ exports.BrowserCustom = exports.BrowserCustomBase = exports.BrowserSigning = voi
|
|
|
38
38
|
const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
|
|
39
39
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
40
40
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
41
|
+
const agent_core = require("aws-cdk-lib/aws-bedrockagentcore");
|
|
41
42
|
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
43
|
+
const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
42
44
|
const iam = require("aws-cdk-lib/aws-iam");
|
|
43
45
|
const s3 = require("aws-cdk-lib/aws-s3");
|
|
44
|
-
const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
45
|
-
const agent_core = require("aws-cdk-lib/aws-bedrockagentcore");
|
|
46
46
|
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
47
47
|
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
|
|
48
48
|
// Internal Libs
|
|
@@ -99,7 +99,7 @@ var BrowserSigning;
|
|
|
99
99
|
* Contains methods and attributes valid for Browsers either created with CDK or imported.
|
|
100
100
|
*/
|
|
101
101
|
class BrowserCustomBase extends aws_cdk_lib_1.Resource {
|
|
102
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustomBase", version: "2.
|
|
102
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustomBase", version: "2.232.0-alpha.0" };
|
|
103
103
|
/**
|
|
104
104
|
* An accessor for the Connections object that will fail if this Browser does not have a VPC
|
|
105
105
|
* configured.
|
|
@@ -357,7 +357,7 @@ let BrowserCustom = (() => {
|
|
|
357
357
|
BrowserCustom = _classThis = _classDescriptor.value;
|
|
358
358
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
359
359
|
}
|
|
360
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustom", version: "2.
|
|
360
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustom", version: "2.232.0-alpha.0" };
|
|
361
361
|
/** Uniquely identifies this class. */
|
|
362
362
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.BrowserCustom';
|
|
363
363
|
/**
|
|
@@ -677,4 +677,4 @@ let BrowserCustom = (() => {
|
|
|
677
677
|
return BrowserCustom = _classThis;
|
|
678
678
|
})();
|
|
679
679
|
exports.BrowserCustom = BrowserCustom;
|
|
680
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBU3FCO0FBQ3JCLCtEQU1vQztBQUNwQywyQ0FBMkM7QUFDM0MseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQywrREFBK0Q7QUFHL0QsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUMxRSxnQkFBZ0I7QUFDaEIsaUNBQWlDO0FBQ2pDLDZEQUF1RztBQUN2Ryw0RUFBK0U7QUFFL0U7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUVuQzs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUVqQzs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUVuQzs7K0VBRStFO0FBQy9FOzs7O0dBSUc7QUFDSCxJQUFZLGNBU1g7QUFURCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCxxQ0FBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILHVDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFUVyxjQUFjLDhCQUFkLGNBQWMsUUFTekI7QUEwSEQ7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFzQixpQkFBa0IsU0FBUSxzQkFBUTs7SUFXdEQ7OztPQUdHO0lBQ0gsSUFBVyxXQUFXO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLDZCQUFlLENBQUMsd0RBQXdELEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUMxQjtJQUNEOzs7O09BSUc7SUFDTyxZQUFZLENBQThCO0lBRXBE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QztnQkFDN0csQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7O1lBM1VTLHVEQUFhOzs7OztBQUFiLHNDQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXJuLFxuICBBcm5Gb3JtYXQsXG4gIElSZXNvdXJjZSxcbiAgTGF6eSxcbiAgUmVzb3VyY2UsXG4gIFRva2VuLFxuICBTdGFjayxcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBEaW1lbnNpb25zTWFwLFxuICBNZXRyaWMsXG4gIE1ldHJpY09wdGlvbnMsXG4gIE1ldHJpY1Byb3BzLFxuICBTdGF0cyxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGFnZW50X2NvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG4vLyBJbnRlcm5hbCBMaWJzXG5pbXBvcnQgKiBhcyBwZXJtcyBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB7IHZhbGlkYXRlRmllbGRQYXR0ZXJuLCB2YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoLCB0aHJvd0lmSW52YWxpZCB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcbmltcG9ydCB7IEJyb3dzZXJOZXR3b3JrQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL25ldHdvcmsvbmV0d29yay1jb25maWd1cmF0aW9uJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGJyb3dzZXIgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IEJST1dTRVJfTkFNRV9NSU5fTEVOR1RIID0gMTtcblxuLyoqXG4gKiBNYXhpbXVtIGxlbmd0aCBmb3IgYnJvd3NlciBuYW1lXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgQlJPV1NFUl9OQU1FX01BWF9MRU5HVEggPSA0ODtcblxuLyoqXG4gKiBNaW5pbXVtIGxlbmd0aCBmb3IgYnJvd3NlciB0YWdzXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgQlJPV1NFUl9UQUdfTUlOX0xFTkdUSCA9IDE7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGJyb3dzZXIgdGFnc1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IEJST1dTRVJfVEFHX01BWF9MRU5HVEggPSAyNTY7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBCcm93c2VyIHNpZ25pbmcuIFNwZWNpZmllcyB3aGV0aGVyIGJyb3dzZXIgc2lnbmluZyBpcyBlbmFibGVkLlxuICogV2hlbiBlbmFibGVkLCB0aGUgYnJvd3NlciB3aWxsIGNyeXB0b2dyYXBoaWNhbGx5IHNpZ24gSFRUUCByZXF1ZXN0cyB0byBpZGVudGlmeVxuICogaXRzZWxmIGFzIGFuIEFJIGFnZW50IHRvIGJvdCBjb250cm9sIHZlbmRvcnMuXG4gKi9cbmV4cG9ydCBlbnVtIEJyb3dzZXJTaWduaW5nIHtcbiAgLyoqXG4gICAqIEJyb3dzZXIgc2lnbmluZyBpcyBlbmFibGVkLlxuICAgKi9cbiAgRU5BQkxFRCA9ICdFTkFCTEVEJyxcbiAgLyoqXG4gICAqIEJyb3dzZXIgc2lnbmluZyBpcyBkaXNhYmxlZC5cbiAgICovXG4gIERJU0FCTEVEID0gJ0RJU0FCTEVEJyxcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgQnJvd3NlciByZXNvdXJjZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQnJvd3NlckN1c3RvbSBleHRlbmRzIElSZXNvdXJjZSwgaWFtLklHcmFudGFibGUsIGVjMi5JQ29ubmVjdGFibGUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgYnJvd3NlciByZXNvdXJjZVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBicm93c2VyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYnJvd3NlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBicm93c2VySWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBicm93c2VyIHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGJyb3dzZXIgd2FzIGxhc3QgdXBkYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsYXN0VXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBicm93c2VyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGJyb3dzZXIgd2FzIGNyZWF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudHMgSUFNIGFjdGlvbnMgdG8gdGhlIElBTSBQcmluY2lwYWxcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50cyBgR2V0YCBhbmQgYExpc3RgIGFjdGlvbnMgb24gdGhlIEJyb3dzZXJcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50cyBgSW52b2tlYCwgYFN0YXJ0YCwgYW5kIGBVcGRhdGVgIGFjdGlvbnMgb24gdGhlIEJyb3dzZXJcbiAgICovXG4gIGdyYW50VXNlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBNZXRyaWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgcmVsYXRlZCB0byB0aGUgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBicm93c2VyLlxuICAgKi9cbiAgbWV0cmljRm9yQXBpT3BlcmF0aW9uKG1ldHJpY05hbWU6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgbGF0ZW5jeSBvZiBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpY0xhdGVuY3lGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIHRvdGFsIG51bWJlciBvZiBBUEkgcmVxdWVzdHMgbWFkZSBmb3IgYSBzcGVjaWZpYyBicm93c2VyIG9wZXJhdGlvbi5cbiAgICovXG4gIG1ldHJpY0ludm9jYXRpb25zRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpY0Vycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHRocm90dGxlZCByZXF1ZXN0cyBmb3IgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIGJyb3dzZXIuXG4gICAqL1xuICBtZXRyaWNUaHJvdHRsZXNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzeXN0ZW0gZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpY1N5c3RlbUVycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHVzZXIgZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpY1VzZXJFcnJvcnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgZHVyYXRpb24gb2YgYnJvd3NlciBzZXNzaW9ucy5cbiAgICovXG4gIG1ldHJpY1Nlc3Npb25EdXJhdGlvbihwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdXNlciB0YWtlb3ZlcnMuXG4gICAqL1xuICBtZXRyaWNUYWtlT3ZlckNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB1c2VyIHRha2VvdmVycyByZWxlYXNlZC5cbiAgICovXG4gIG1ldHJpY1Rha2VPdmVyUmVsZWFzZUNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgZHVyYXRpb24gb2YgdXNlciB0YWtlb3ZlcnMuXG4gICAqL1xuICBtZXRyaWNUYWtlT3ZlckR1cmF0aW9uKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICBBQlNUUkFDVCBCQVNFIENMQVNTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGEgQnJvd3Nlci5cbiAqIENvbnRhaW5zIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgdmFsaWQgZm9yIEJyb3dzZXJzIGVpdGhlciBjcmVhdGVkIHdpdGggQ0RLIG9yIGltcG9ydGVkLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJvd3NlckN1c3RvbUJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElCcm93c2VyQ3VzdG9tIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGJyb3dzZXJBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGJyb3dzZXJJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU6IGlhbS5JUm9sZTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIC8qKlxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIENvbm5lY3Rpb25zIG9iamVjdCB0aGF0IHdpbGwgZmFpbCBpZiB0aGlzIEJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIFZQQ1xuICAgKiBjb25maWd1cmVkLlxuICAgKi9cbiAgcHVibGljIGdldCBjb25uZWN0aW9ucygpOiBlYzIuQ29ubmVjdGlvbnMge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0Nhbm5vdCBtYW5hZ2UgbmV0d29yayBhY2Nlc3Mgd2l0aG91dCBjb25maWd1cmluZyBhIFZQQycsIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbnM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBhY3R1YWwgQ29ubmVjdGlvbnMgb2JqZWN0IGZvciB0aGlzIEJyb3dzZXIuIFRoaXMgbWF5IGJlIHVuc2V0IGluIHRoZSBldmVudCB0aGF0IGEgVlBDIGhhcyBub3RcbiAgICogYmVlbiBjb25maWd1cmVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgSUFNIGFjdGlvbnMgdG8gdGhlIElBTSBQcmluY2lwYWxcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcGFyYW0gYWN0aW9ucyAtIFRoZSBhY3Rpb25zIHRvIGdyYW50XG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmJyb3dzZXJBcm5dLFxuICAgICAgYWN0aW9uczogYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIG9uIHRoaXMgYnJvd3NlciB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBUaGlzIGluY2x1ZGVzIGJvdGggcmVhZCBwZXJtaXNzaW9ucyBvbiB0aGUgc3BlY2lmaWMgYnJvd3NlciBhbmQgbGlzdCBwZXJtaXNzaW9ucyBvbiBhbGwgYnJvd3NlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkdldEJyb3dzZXInLCAnYmVkcm9jay1hZ2VudGNvcmU6R2V0QnJvd3NlclNlc3Npb24nXSBvbiB0aGlzLmJyb3dzZXJBcm5cbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RCcm93c2VycycsICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0QnJvd3NlclNlc3Npb25zJ10gb24gYWxsIHJlc291cmNlcyAoKilcbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGNvbnN0IHJlc291cmNlU3BlY2lmaWNHcmFudCA9IHRoaXMuZ3JhbnQoXG4gICAgICBncmFudGVlLFxuICAgICAgLi4ucGVybXMuQlJPV1NFUl9SRUFEX1BFUk1TLFxuICAgICk7XG5cbiAgICBjb25zdCBhbGxSZXNvdXJjZUdyYW50ID0gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFsnKiddLFxuICAgICAgYWN0aW9uczogcGVybXMuQlJPV1NFUl9MSVNUX1BFUk1TLFxuICAgIH0pO1xuICAgIC8vIFJldHVybiBjb21iaW5lZCBncmFudFxuICAgIHJldHVybiByZXNvdXJjZVNwZWNpZmljR3JhbnQuY29tYmluZShhbGxSZXNvdXJjZUdyYW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBpbnZva2UgcGVybWlzc2lvbnMgb24gdGhpcyBicm93c2VyIHRvIGFuIElBTSBwcmluY2lwYWwuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgaW52b2tlIHBlcm1pc3Npb25zIHRvXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBncmFudCBjb25maWd1cmF0aW9uOlxuICAgKiAtIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6U3RhcnRCcm93c2VyU2Vzc2lvbicsICdiZWRyb2NrLWFnZW50Y29yZTpVcGRhdGVCcm93c2VyU3RyZWFtJywgJ2JlZHJvY2stYWdlbnRjb3JlOlN0b3BCcm93c2VyU2Vzc2lvbiddXG4gICAqIC0gcmVzb3VyY2VBcm5zOiBbdGhpcy5icm93c2VyQXJuXVxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50VXNlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChcbiAgICAgIGdyYW50ZWUsXG4gICAgICAuLi5wZXJtcy5CUk9XU0VSX1VTRV9QRVJNUyxcbiAgICApO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE1ldHJpY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBicm93c2VyLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgbWV0cmljIHdpbGwgYmUgY2FsY3VsYXRlZCBhcyBhIHN1bSBvdmVyIGEgcGVyaW9kIG9mIDUgbWludXRlcy5cbiAgICogWW91IGNhbiBjdXN0b21pemUgdGhpcyBieSB1c2luZyB0aGUgYHN0YXRpc3RpY2AgYW5kIGBwZXJpb2RgIHByb3BlcnRpZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgZGltZW5zaW9uczogRGltZW5zaW9uc01hcCwgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICBjb25zdCBtZXRyaWNQcm9wczogTWV0cmljUHJvcHMgPSB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHsgLi4uZGltZW5zaW9ucywgUmVzb3VyY2U6IHRoaXMuYnJvd3NlckFybiB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmVNZXRyaWMobWV0cmljUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciBhcGkgb3BlcmF0aW9ucy4uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IG1ldHJpY05hbWVcbiAgICogLSBkaW1lbnNpb25zTWFwOiB7IEJyb3dzZXJJZDogdGhpcy5icm93c2VySWQgfVxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgYXBpIG9wZXJhdGlvbnNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNGb3JBcGlPcGVyYXRpb24oXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIHByb3BzPzogTWV0cmljT3B0aW9ucyxcbiAgKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMobWV0cmljTmFtZSwgeyBPcGVyYXRpb246IG9wZXJhdGlvbiB9LCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBicm93c2VyIGxhdGVuY2llcy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogTGF0ZW5jeVxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgbGF0ZW5jaWVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTGF0ZW5jeUZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ0xhdGVuY3knLCBvcGVyYXRpb24sIHsgc3RhdGlzdGljOiBTdGF0cy5BVkVSQUdFLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGJyb3dzZXIgaW52b2NhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IEludm9jYXRpb25zXG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgYnJvd3NlciBsYXRlbmNpZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNJbnZvY2F0aW9uc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ0ludm9jYXRpb25zJywgb3BlcmF0aW9uLCB7XG4gICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciBlcnJvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IEVycm9yc1xuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgZXJyb3JzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignRXJyb3JzJywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGJyb3dzZXIgdGhyb3R0bGVzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1ldHJpYyBjb25maWd1cmF0aW9uOlxuICAgKiAtIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZSdcbiAgICogLSBtZXRyaWNOYW1lOiBUaHJvdHRsZXNcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBicm93c2VyIHRocm90dGxlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1Rocm90dGxlc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ1Rocm90dGxlcycsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBicm93c2VyIHN5c3RlbSBlcnJvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IFN5c3RlbUVycm9yc1xuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgc3lzdGVtIGVycm9yc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1N5c3RlbUVycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ1N5c3RlbUVycm9ycycsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBicm93c2VyIHVzZXIgZXJyb3JzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1ldHJpYyBjb25maWd1cmF0aW9uOlxuICAgKiAtIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZSdcbiAgICogLSBtZXRyaWNOYW1lOiBVc2VyRXJyb3JzXG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgYnJvd3NlciB1c2VyIGVycm9yc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1VzZXJFcnJvcnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdVc2VyRXJyb3JzJywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGJyb3dzZXIgc2Vzc2lvbiBkdXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogRHVyYXRpb25cbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBicm93c2VyIHNlc3Npb24gZHVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNTZXNzaW9uRHVyYXRpb24ocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0R1cmF0aW9uJywgeyBPcGVyYXRpb246ICdCcm93c2VyU2Vzc2lvbicgfSwgeyBzdGF0aXN0aWM6IFN0YXRzLkFWRVJBR0UsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciB1c2VyIHRha2VvdmVycy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogVGFrZU92ZXJDb3VudFxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgdXNlciB0YWtlb3ZlcnNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUYWtlT3ZlckNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdUYWtlT3ZlckNvdW50Jywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciB1c2VyIHRha2VvdmVycyByZWxlYXNlZC5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogVGFrZU92ZXJSZWxlYXNlQ291bnRcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBicm93c2VyIHVzZXIgdGFrZW92ZXJzIHJlbGVhc2VkXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVGFrZU92ZXJSZWxlYXNlQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1Rha2VPdmVyUmVsZWFzZUNvdW50Jywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciB1c2VyIHRha2VvdmVycyBkdXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogVGFrZU92ZXJEdXJhdGlvblxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgdXNlciB0YWtlb3ZlcnMgZHVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUYWtlT3ZlckR1cmF0aW9uKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdUYWtlT3ZlckR1cmF0aW9uJywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5BVkVSQUdFLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gY3JlYXRlIGEgbWV0cmljLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBicm93c2VyIGFwaSBvcGVyYXRpb25zXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZU1ldHJpYyhwcm9wczogTWV0cmljUHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlZ2lvbjogcHJvcHM/LnJlZ2lvbiA/PyB0aGlzLnN0YWNrLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IHByb3BzPy5hY2NvdW50ID8/IHRoaXMuc3RhY2suYWNjb3VudCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjb3JkaW5nIENvbmZpZ3VyYXRpb25cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBSZWNvcmRpbmcgY29uZmlndXJhdGlvbiBmb3IgYnJvd3NlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ0NvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHJlY29yZGluZyBpcyBlbmFibGVkXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTMyBMb2NhdGlvbiBDb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBzM0xvY2F0aW9uPzogTG9jYXRpb247XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgUFJPUFMgRk9SIE5FVyBDT05TVFJVQ1RcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBCcm93c2VyIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3NlckN1c3RvbVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBicm93c2VyXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpXG4gICAqIFRoZSBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiBQYXR0ZXJuOiBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fVxuICAgKiBAcmVxdWlyZWQgLSBZZXNcbiAgICovXG4gIHJlYWRvbmx5IGJyb3dzZXJDdXN0b21OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJvd3NlclxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSwgLSAoaHlwaGVuKSBhbmQgc3BhY2VzXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBjYW4gaGF2ZSB1cCB0byAyMDAgY2hhcmFjdGVyc1xuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqIEByZXF1aXJlZCAtIE5vXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTmV0d29yayBjb25maWd1cmF0aW9uIGZvciBicm93c2VyXG4gICAqIEByZXF1aXJlZCAtIE5vXG4gICAqIEBkZWZhdWx0IC0gUFVCTElDIG5ldHdvcmsgbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb24/OiBCcm93c2VyTmV0d29ya0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFJlY29yZGluZyBjb25maWd1cmF0aW9uIGZvciBicm93c2VyXG4gICAqIEByZXF1aXJlZCAtIE5vXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVjb3JkaW5nIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZz86IFJlY29yZGluZ0NvbmZpZztcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBicm93c2VyIHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICogQGRlZmF1bHQgLSBBIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZFxuICAgKiBAcmVxdWlyZWQgLSBOb1xuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGFncyAob3B0aW9uYWwpXG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIEJyb3dzZXIgcmVzb3VyY2VcbiAgICpcbiAgICogQGRlZmF1bHQge30gLSBubyB0YWdzXG4gICAqIEByZXF1aXJlZCAtIE5vXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgYnJvd3NlciBzaWduaW5nIGlzIGVuYWJsZWQuXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGJyb3dzZXIgd2lsbCBjcnlwdG9ncmFwaGljYWxseSBzaWduXG4gICAqIEhUVFAgcmVxdWVzdHMgdG8gaWRlbnRpZnkgaXRzZWxmIGFzIGFuIEFJIGFnZW50IHRvIGJvdCBjb250cm9sIHZlbmRvcnMuXG4gICAqIEBkZWZhdWx0IC0gQnJvd3NlclNpZ25pbmcuRElTQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IGJyb3dzZXJTaWduaW5nPzogQnJvd3NlclNpZ25pbmc7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgIEFUVFJTIEZPUiBJTVBPUlRFRCBDT05TVFJVQ1RcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQXR0cmlidXRlcyBmb3Igc3BlY2lmeWluZyBhbiBpbXBvcnRlZCBCcm93c2VyIEN1c3RvbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcm93c2VyQ3VzdG9tQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBhZ2VudC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJvd3NlckFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgYXNzb2NpYXRlZCB0byB0aGUgYnJvd3Nlci5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybjogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0aGlzIGJyb3dzZXIgd2FzIGxhc3QgdXBkYXRlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gTm8gbGFzdCB1cGRhdGVkIHRpbWVzdGFtcCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGJyb3dzZXIuXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIHN0YXR1cyBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNyZWF0ZWQgdGltZXN0YW1wIG9mIHRoZSBicm93c2VyLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBjcmVhdGVkIHRpbWVzdGFtcCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHNlY3VyaXR5IGdyb3VwcyBmb3IgdGhpcyBicm93c2VyLCBpZiBpbiBhIFZQQy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBCeSBkZWZhdWx0LCB0aGUgYnJvd3NlciBpcyBub3QgaW4gYSBWUEMuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQnJvd3NlciByZXNvdXJjZSBmb3IgQVdTIEJlZHJvY2sgQWdlbnQgQ29yZS5cbiAqIFByb3ZpZGVzIGEgYnJvd3NlciBlbnZpcm9ubWVudCBmb3Igd2ViIGF1dG9tYXRpb24gYW5kIGludGVyYWN0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9icm93c2VyLmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkJyb3dzZXJDdXN0b21cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEJyb3dzZXJDdXN0b20gZXh0ZW5kcyBCcm93c2VyQ3VzdG9tQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLkJyb3dzZXJDdXN0b20nO1xuXG4gIC8qKlxuICAgKiBTdGF0aWMgTWV0aG9kIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgQmVkcm9jayBBZ2VudENvcmUgQnJvd3NlciBDdXN0b20uXG4gICAqL1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBCcm93c2VyIEN1c3RvbSByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBicm93c2VyJ3MgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgLSBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIC0gQXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgYnJvd3NlciBjdXN0b21cbiAgICogQHJldHVybnMgQW4gSUJyb3dzZXJDdXN0b20gcmVmZXJlbmNlIHRvIHRoZSBleGlzdGluZyBicm93c2VyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Ccm93c2VyQ3VzdG9tQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQnJvd3NlckN1c3RvbUF0dHJpYnV0ZXMpOiBJQnJvd3NlckN1c3RvbSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQnJvd3NlckN1c3RvbUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGJyb3dzZXJBcm4gPSBhdHRycy5icm93c2VyQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGJyb3dzZXJJZCA9IEFybi5zcGxpdChhdHRycy5icm93c2VyQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lITtcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25Sb2xlID0gaWFtLlJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsIGAke2lkfVJvbGVgLCBhdHRycy5yb2xlQXJuKTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0ID0gYXR0cnMubGFzdFVwZGF0ZWRBdDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSBhdHRycy5zdGF0dXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gYXR0cnMuY3JlYXRlZEF0O1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcblxuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlIHx8IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgICBpZiAoYXR0cnMuc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IG5ldyBlYzIuQ29ubmVjdGlvbnMoe1xuICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IGF0dHJzLnNlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIG5ldyBCcm93c2VyIEN1c3RvbVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEF0dHJpYnV0ZXNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBicm93c2VyIHJlc291cmNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnJvd3NlckFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBicm93c2VyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBicm93c2VySWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBicm93c2VyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBicm93c2VyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCB1cGRhdGVkIHRpbWVzdGFtcCBvZiB0aGUgYnJvd3NlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGJyb3dzZXJcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjcmVhdGVkIHRpbWVzdGFtcCBvZiB0aGUgYnJvd3NlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZhaWx1cmUgcmVhc29uIG9mIHRoZSBicm93c2VyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYWlsdXJlUmVhc29uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElBTSByb2xlIGFzc29jaWF0ZWQgdG8gdGhlIGJyb3dzZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZTogaWFtLklSb2xlO1xuICAvKipcbiAgICogVGFncyBhcHBsaWVkIHRvIHRoaXMgYnJvd3NlciByZXNvdXJjZVxuICAgKiBBIG1hcCBvZiBrZXktdmFsdWUgcGFpcnMgZm9yIHJlc291cmNlIHRhZ2dpbmdcbiAgICogQGRlZmF1bHQgLSBObyB0YWdzIGFwcGxpZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIC8qKlxuICAgKiBUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIG9mIHRoZSBicm93c2VyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb246IEJyb3dzZXJOZXR3b3JrQ29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSByZWNvcmRpbmcgY29uZmlndXJhdGlvbiBvZiB0aGUgYnJvd3NlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZz86IFJlY29yZGluZ0NvbmZpZztcbiAgLyoqXG4gICAqIFRoZSBicm93c2VyIHNpZ25pbmcgY29uZmlndXJhdGlvbiBvZiB0aGUgYnJvd3NlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJyb3dzZXJTaWduaW5nPzogQnJvd3NlclNpZ25pbmc7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBJbnRlcm5hbCBPbmx5XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBwcml2YXRlIHJlYWRvbmx5IF9fcmVzb3VyY2U6IGFnZW50X2NvcmUuQ2ZuQnJvd3NlckN1c3RvbTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQ09OU1RSVUNUT1JcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCcm93c2VyQ3VzdG9tUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2V0IHByb3BlcnRpZXMgYW5kIGRlZmF1bHRzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5uYW1lID0gcHJvcHMuYnJvd3NlckN1c3RvbU5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24gPSBwcm9wcy5uZXR3b3JrQ29uZmlndXJhdGlvbiA/PyBCcm93c2VyTmV0d29ya0NvbmZpZ3VyYXRpb24udXNpbmdQdWJsaWNOZXR3b3JrKCk7XG4gICAgdGhpcy5yZWNvcmRpbmdDb25maWcgPSBwcm9wcy5yZWNvcmRpbmdDb25maWcgPz8geyBlbmFibGVkOiBmYWxzZSB9O1xuICAgIHRoaXMuZXhlY3V0aW9uUm9sZSA9IHByb3BzLmV4ZWN1dGlvblJvbGUgPz8gdGhpcy5fY3JlYXRlQnJvd3NlclJvbGUoKTtcbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlO1xuICAgIHRoaXMudGFncyA9IHByb3BzLnRhZ3M7XG4gICAgdGhpcy5icm93c2VyU2lnbmluZyA9IHByb3BzLmJyb3dzZXJTaWduaW5nID8/IEJyb3dzZXJTaWduaW5nLkRJU0FCTEVEO1xuXG4gICAgLy8gVmFsaWRhdGUgYnJvd3NlciBuYW1lXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVCcm93c2VyTmFtZSwgdGhpcy5uYW1lKTtcblxuICAgIC8vIFZhbGlkYXRlIGJyb3dzZXIgdGFnc1xuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlQnJvd3NlclRhZ3MsIHRoaXMudGFncyk7XG5cbiAgICAvLyBWYWxpZGF0ZSByZWNvcmRpbmcgY29uZmlndXJhdGlvblxuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlUmVjb3JkaW5nQ29uZmlnLCB0aGlzLnJlY29yZGluZ0NvbmZpZyk7XG5cbiAgICAvLyBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIHZhbGlkYXRpb24gaXMgZG9uZSBpbiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGNsYXNzXG4gICAgLy8gU28gd2UgZG9uJ3QgbmVlZCB0byB2YWxpZGF0ZSBpdCBoZXJlXG5cbiAgICAvLyBTZXQgY29ubmVjdGlvbnMgLSBjcmVhdGUgYSBzaGFyZWQgY29ubmVjdGlvbnMgb2JqZWN0XG4gICAgaWYgKHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvbnMpIHtcbiAgICAgIC8vIFVzZSB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uJ3MgY29ubmVjdGlvbnMgYXMgdGhlIHNoYXJlZCBvYmplY3RcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5jb25uZWN0aW9ucztcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDRk4gUHJvcHMgLSBXaXRoIExhenkgc3VwcG9ydFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGNmblByb3BzOiBhZ2VudF9jb3JlLkNmbkJyb3dzZXJDdXN0b21Qcm9wcyA9IHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IExhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5fcmVuZGVyKHRoaXMuX2Nvbm5lY3Rpb25zKSB9KSxcbiAgICAgIHJlY29yZGluZ0NvbmZpZzogdGhpcy5fcmVuZGVyUmVjb3JkaW5nQ29uZmlnKCksXG4gICAgICBleGVjdXRpb25Sb2xlQXJuOiB0aGlzLmV4ZWN1dGlvblJvbGU/LnJvbGVBcm4sXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgICBicm93c2VyU2lnbmluZzogdGhpcy5fcmVuZGVyQnJvd3NlclNpZ25pbmcoKSxcbiAgICB9O1xuXG4gICAgLy8gTDEgaW5zdGFudGlhdGlvblxuICAgIHRoaXMuX19yZXNvdXJjZSA9IG5ldyBhZ2VudF9jb3JlLkNmbkJyb3dzZXJDdXN0b20odGhpcywgJ1Jlc291cmNlJywgY2ZuUHJvcHMpO1xuXG4gICAgLy8gR2V0IGF0dHJpYnV0ZXMgZGlyZWN0bHkgZnJvbSB0aGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2VcbiAgICB0aGlzLmJyb3dzZXJJZCA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQnJvd3NlcklkO1xuICAgIHRoaXMuYnJvd3NlckFybiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQnJvd3NlckFybjtcbiAgICB0aGlzLnN0YXR1cyA9IHRoaXMuX19yZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gdGhpcy5fX3Jlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy5sYXN0VXBkYXRlZEF0ID0gdGhpcy5fX3Jlc291cmNlLmF0dHJMYXN0VXBkYXRlZEF0O1xuICAgIHRoaXMuZmFpbHVyZVJlYXNvbiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyRmFpbHVyZVJlYXNvbjtcblxuICAgIC8vIGlmIHJlY29yZGluZyBpcyBjb25maWd1cmVkLCBhZGQgcGVybWlzc2lvbnMgdG8gdGhlIGV4ZWN1dGlvbiByb2xlXG4gICAgaWYgKHRoaXMucmVjb3JkaW5nQ29uZmlnICYmIHRoaXMucmVjb3JkaW5nQ29uZmlnLnMzTG9jYXRpb24pIHtcbiAgICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucmVjb3JkaW5nQ29uZmlnLnMzTG9jYXRpb24uYnVja2V0TmFtZSkpIHtcbiAgICAgICAgU3RhY2sub2YodGhpcykucmVzb2x2ZSh0aGlzLnJlY29yZGluZ0NvbmZpZy5zM0xvY2F0aW9uLmJ1Y2tldE5hbWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgYnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHt0aGlzLm5hbWV9UmVjb3JkaW5nQnVja2V0YCxcbiAgICAgICAgdGhpcy5yZWNvcmRpbmdDb25maWcuczNMb2NhdGlvbi5idWNrZXROYW1lLFxuICAgICAgKTtcbiAgICAgIC8vIEVuc3VyZSB0aGUgcG9saWN5IGlzIGFwcGxpZWQgYmVmb3JlIHRoZSBicm93c2VyIHJlc291cmNlIGlzIGNyZWF0ZWRcbiAgICAgIGNvbnN0IGdyYW50ID0gYnVja2V0LmdyYW50UmVhZFdyaXRlKHRoaXMuZXhlY3V0aW9uUm9sZSk7XG4gICAgICBncmFudC5hcHBseUJlZm9yZSh0aGlzLl9fcmVzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHJlY29yZGluZyBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBSZWNvcmRpbmdDb25maWdQcm9wZXJ0eSBvYmplY3QgaW4gQ2xvdWRGb3JtYXRpb24gZm9ybWF0LCBvciB1bmRlZmluZWQgaWYgbm8gcmVjb3JkaW5nIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5lZFxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBpZiBubyByZWNvcmRpbmcgY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZFxuICAgKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cbiAgICovXG4gIHByaXZhdGUgX3JlbmRlclJlY29yZGluZ0NvbmZpZygpOiBhZ2VudF9jb3JlLkNmbkJyb3dzZXJDdXN0b20uUmVjb3JkaW5nQ29uZmlnUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlY29yZGluZ0NvbmZpZyA/IHtcbiAgICAgIGVuYWJsZWQ6IHRoaXMucmVjb3JkaW5nQ29uZmlnLmVuYWJsZWQsXG4gICAgICBzM0xvY2F0aW9uOiB0aGlzLnJlY29yZGluZ0NvbmZpZy5zM0xvY2F0aW9uID8ge1xuICAgICAgICBidWNrZXQ6IHRoaXMucmVjb3JkaW5nQ29uZmlnLnMzTG9jYXRpb24uYnVja2V0TmFtZSxcbiAgICAgICAgcHJlZml4OiB0aGlzLnJlY29yZGluZ0NvbmZpZy5zM0xvY2F0aW9uLm9iamVjdEtleSxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGJyb3dzZXIgc2lnbmluZyBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBCcm93c2VyU2lnbmluZ1Byb3BlcnR5IG9iamVjdCBpbiBDbG91ZEZvcm1hdGlvbiBmb3JtYXQsIG9yIHVuZGVmaW5lZCBpZiBubyBicm93c2VyIHNpZ25pbmcgY29uZmlndXJhdGlvbiBpcyBkZWZpbmVkXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIGlmIG5vIGJyb3dzZXIgc2lnbmluZyBjb25maWd1cmF0aW9uIGlzIHByb3ZpZGVkXG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyQnJvd3NlclNpZ25pbmcoKTogYWdlbnRfY29yZS5DZm5Ccm93c2VyQ3VzdG9tLkJyb3dzZXJTaWduaW5nUHJvcGVydHkge1xuICAgIHJldHVybiB0aGlzLmJyb3dzZXJTaWduaW5nID09PSBCcm93c2VyU2lnbmluZy5FTkFCTEVEID8ge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICB9IDoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGV4ZWN1dGlvbiByb2xlIG5lZWRlZCBmb3IgdGhlIGJyb3dzZXIgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlc1xuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCByb2xlXG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlQnJvd3NlclJvbGUoKTogaWFtLklSb2xlIHtcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm9sZTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBWYWxpZGF0b3JzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBicm93c2VyIG5hbWUgZm9ybWF0XG4gICAqIEBwYXJhbSBuYW1lIFRoZSBicm93c2VyIG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlQnJvd3Nlck5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgZmllbGROYW1lOiAnQnJvd3NlciBuYW1lJyxcbiAgICAgIG1pbkxlbmd0aDogQlJPV1NFUl9OQU1FX01JTl9MRU5HVEgsXG4gICAgICBtYXhMZW5ndGg6IEJST1dTRVJfTkFNRV9NQVhfTEVOR1RILFxuICAgIH0pKTtcblxuICAgIC8vIENoZWNrIGlmIG5hbWUgbWF0Y2hlcyB0aGUgQVdTIEFQSSBwYXR0ZXJuOiBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fVxuICAgIC8vIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgZm9sbG93ZWQgYnkgdXAgdG8gNDcgbGV0dGVycywgbnVtYmVycywgb3IgdW5kZXJzY29yZXNcbiAgICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKG5hbWUsICdCcm93c2VyIG5hbWUnLCB2YWxpZE5hbWVQYXR0ZXJuKSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGJyb3dzZXIgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZUJyb3dzZXJUYWdzID0gKHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKCF0YWdzKSB7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBUYWdzIGFyZSBvcHRpb25hbFxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVhY2ggdGFnIGtleSBhbmQgdmFsdWVcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YWdzKSkge1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgIGZpZWxkTmFtZTogJ1RhZyBrZXknLFxuICAgICAgICBtaW5MZW5ndGg6IEJST1dTRVJfVEFHX01JTl9MRU5HVEgsXG4gICAgICAgIG1heExlbmd0aDogQlJPV1NFUl9UQUdfTUFYX0xFTkdUSCxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBwYXR0ZXJuOiBeW2EtekEtWjAtOVxccy5fOi89K0AtXSokXG4gICAgICBjb25zdCB2YWxpZEtleVBhdHRlcm4gPSAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC87XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihrZXksICdUYWcga2V5JywgdmFsaWRLZXlQYXR0ZXJuKSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZVxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiAnVGFnIHZhbHVlJyxcbiAgICAgICAgbWluTGVuZ3RoOiBCUk9XU0VSX1RBR19NSU5fTEVOR1RILFxuICAgICAgICBtYXhMZW5ndGg6IEJST1dTRVJfVEFHX01BWF9MRU5HVEgsXG4gICAgICB9KSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBwYXR0ZXJuOiBeW2EtekEtWjAtOVxccy5fOi89K0AtXSokXG4gICAgICBjb25zdCB2YWxpZFZhbHVlUGF0dGVybiA9IC9eW2EtekEtWjAtOVxccy5fOi89K0AtXSokLztcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKHZhbHVlLCAnVGFnIHZhbHVlJywgdmFsaWRWYWx1ZVBhdHRlcm4pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHJlY29yZGluZyBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSByZWNvcmRpbmdDb25maWcgVGhlIHJlY29yZGluZyBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZVJlY29yZGluZ0NvbmZpZyA9IChyZWNvcmRpbmdDb25maWc/OiBSZWNvcmRpbmdDb25maWcpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoIXJlY29yZGluZ0NvbmZpZykge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gTm8gdmFsaWRhdGlvbiBuZWVkZWQgaWYgbm8gcmVjb3JkaW5nIGNvbmZpZyBpcyBwcm92aWRlZFxuICAgIH1cblxuICAgIGNvbnN0IHMzTG9jYXRpb24gPSByZWNvcmRpbmdDb25maWcuczNMb2NhdGlvbjtcblxuICAgIC8vIE9ubHkgdmFsaWRhdGUgUzMgbG9jYXRpb24gaWYgaXQncyBhY3R1YWxseSBwcm92aWRlZFxuICAgIGlmIChzM0xvY2F0aW9uKSB7XG4gICAgICAvLyBCb3RoIGJ1Y2tldCBuYW1lIGFuZCBvYmplY3Qga2V5IGFyZSByZXF1aXJlZCB3aGVuIFMzIGxvY2F0aW9uIGlzIHByb3ZpZGVkXG4gICAgICBpZiAoIXMzTG9jYXRpb24uYnVja2V0TmFtZSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnUzMgYnVja2V0IG5hbWUgaXMgcmVxdWlyZWQgd2hlbiBTMyBsb2NhdGlvbiBpcyBwcm92aWRlZCBmb3IgcmVjb3JkaW5nIGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIGJ1Y2tldCBuYW1lIHBhdHRlcm46IF5bYS16MC05XVthLXowLTkuLV17MSw2MX1bYS16MC05XSRcbiAgICAgICAgY29uc3QgYnVja2V0TmFtZVBhdHRlcm4gPSAvXlthLXowLTldW2EtejAtOS4tXXsxLDYxfVthLXowLTldJC87XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKHMzTG9jYXRpb24uYnVja2V0TmFtZSwgJ1MzIGJ1Y2tldCBuYW1lJywgYnVja2V0TmFtZVBhdHRlcm4pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzM0xvY2F0aW9uLm9iamVjdEtleSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnUzMgb2JqZWN0IGtleSAocHJlZml4KSBpcyByZXF1aXJlZCB3aGVuIFMzIGxvY2F0aW9uIGlzIHByb3ZpZGVkIGZvciByZWNvcmRpbmcgY29uZmlndXJhdGlvbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH07XG59XG4iXX0=
|
|
680
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBU3FCO0FBQ3JCLCtEQUErRDtBQUMvRCwrREFNb0M7QUFDcEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFFekMsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUUxRSxnQkFBZ0I7QUFDaEIsaUNBQWlDO0FBQ2pDLDZEQUF1RztBQUN2Ryw0RUFBK0U7QUFFL0U7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUVsQzs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUVuQzs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUVqQzs7O0dBR0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUVuQzs7K0VBRStFO0FBQy9FOzs7O0dBSUc7QUFDSCxJQUFZLGNBU1g7QUFURCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCxxQ0FBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILHVDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFUVyxjQUFjLDhCQUFkLGNBQWMsUUFTekI7QUEwSEQ7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFzQixpQkFBa0IsU0FBUSxzQkFBUTs7SUFXdEQ7OztPQUdHO0lBQ0gsSUFBVyxXQUFXO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLDZCQUFlLENBQUMsd0RBQXdELEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUMxQjtJQUNEOzs7O09BSUc7SUFDTyxZQUFZLENBQThCO0lBRXBE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QztnQkFDN0csQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7O1lBM1VTLHVEQUFhOzs7OztBQUFiLHNDQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXJuLFxuICBBcm5Gb3JtYXQsXG4gIElSZXNvdXJjZSxcbiAgTGF6eSxcbiAgUmVzb3VyY2UsXG4gIFRva2VuLFxuICBTdGFjayxcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBhZ2VudF9jb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCB7XG4gIERpbWVuc2lvbnNNYXAsXG4gIE1ldHJpYyxcbiAgTWV0cmljT3B0aW9ucyxcbiAgTWV0cmljUHJvcHMsXG4gIFN0YXRzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG4vLyBJbnRlcm5hbCBMaWJzXG5pbXBvcnQgKiBhcyBwZXJtcyBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB7IHZhbGlkYXRlRmllbGRQYXR0ZXJuLCB2YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoLCB0aHJvd0lmSW52YWxpZCB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcbmltcG9ydCB7IEJyb3dzZXJOZXR3b3JrQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL25ldHdvcmsvbmV0d29yay1jb25maWd1cmF0aW9uJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTWluaW11bSBsZW5ndGggZm9yIGJyb3dzZXIgbmFtZVxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IEJST1dTRVJfTkFNRV9NSU5fTEVOR1RIID0gMTtcblxuLyoqXG4gKiBNYXhpbXVtIGxlbmd0aCBmb3IgYnJvd3NlciBuYW1lXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgQlJPV1NFUl9OQU1FX01BWF9MRU5HVEggPSA0ODtcblxuLyoqXG4gKiBNaW5pbXVtIGxlbmd0aCBmb3IgYnJvd3NlciB0YWdzXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgQlJPV1NFUl9UQUdfTUlOX0xFTkdUSCA9IDE7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGJyb3dzZXIgdGFnc1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IEJST1dTRVJfVEFHX01BWF9MRU5HVEggPSAyNTY7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBCcm93c2VyIHNpZ25pbmcuIFNwZWNpZmllcyB3aGV0aGVyIGJyb3dzZXIgc2lnbmluZyBpcyBlbmFibGVkLlxuICogV2hlbiBlbmFibGVkLCB0aGUgYnJvd3NlciB3aWxsIGNyeXB0b2dyYXBoaWNhbGx5IHNpZ24gSFRUUCByZXF1ZXN0cyB0byBpZGVudGlmeVxuICogaXRzZWxmIGFzIGFuIEFJIGFnZW50IHRvIGJvdCBjb250cm9sIHZlbmRvcnMuXG4gKi9cbmV4cG9ydCBlbnVtIEJyb3dzZXJTaWduaW5nIHtcbiAgLyoqXG4gICAqIEJyb3dzZXIgc2lnbmluZyBpcyBlbmFibGVkLlxuICAgKi9cbiAgRU5BQkxFRCA9ICdFTkFCTEVEJyxcbiAgLyoqXG4gICAqIEJyb3dzZXIgc2lnbmluZyBpcyBkaXNhYmxlZC5cbiAgICovXG4gIERJU0FCTEVEID0gJ0RJU0FCTEVEJyxcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgQnJvd3NlciByZXNvdXJjZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQnJvd3NlckN1c3RvbSBleHRlbmRzIElSZXNvdXJjZSwgaWFtLklHcmFudGFibGUsIGVjMi5JQ29ubmVjdGFibGUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgYnJvd3NlciByZXNvdXJjZVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBicm93c2VyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYnJvd3NlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBicm93c2VySWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBicm93c2VyIHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGJyb3dzZXIgd2FzIGxhc3QgdXBkYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsYXN0VXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBicm93c2VyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGJyb3dzZXIgd2FzIGNyZWF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudHMgSUFNIGFjdGlvbnMgdG8gdGhlIElBTSBQcmluY2lwYWxcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50cyBgR2V0YCBhbmQgYExpc3RgIGFjdGlvbnMgb24gdGhlIEJyb3dzZXJcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgLyoqXG4gICAqIEdyYW50cyBgSW52b2tlYCwgYFN0YXJ0YCwgYW5kIGBVcGRhdGVgIGFjdGlvbnMgb24gdGhlIEJyb3dzZXJcbiAgICovXG4gIGdyYW50VXNlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBNZXRyaWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNNYXAsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgcmVsYXRlZCB0byB0aGUgQVBJIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhpcyBicm93c2VyLlxuICAgKi9cbiAgbWV0cmljRm9yQXBpT3BlcmF0aW9uKG1ldHJpY05hbWU6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgbGF0ZW5jeSBvZiBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpY0xhdGVuY3lGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIHRvdGFsIG51bWJlciBvZiBBUEkgcmVxdWVzdHMgbWFkZSBmb3IgYSBzcGVjaWZpYyBicm93c2VyIG9wZXJhdGlvbi5cbiAgICovXG4gIG1ldHJpY0ludm9jYXRpb25zRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpY0Vycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHRocm90dGxlZCByZXF1ZXN0cyBmb3IgYSBzcGVjaWZpYyBBUEkgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGlzIGJyb3dzZXIuXG4gICAqL1xuICBtZXRyaWNUaHJvdHRsZXNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzeXN0ZW0gZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpY1N5c3RlbUVycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtZXRyaWMgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHVzZXIgZXJyb3JzIGZvciBhIHNwZWNpZmljIEFQSSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoaXMgYnJvd3Nlci5cbiAgICovXG4gIG1ldHJpY1VzZXJFcnJvcnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgZHVyYXRpb24gb2YgYnJvd3NlciBzZXNzaW9ucy5cbiAgICovXG4gIG1ldHJpY1Nlc3Npb25EdXJhdGlvbihwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1ldHJpYyBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgdXNlciB0YWtlb3ZlcnMuXG4gICAqL1xuICBtZXRyaWNUYWtlT3ZlckNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiB1c2VyIHRha2VvdmVycyByZWxlYXNlZC5cbiAgICovXG4gIG1ldHJpY1Rha2VPdmVyUmVsZWFzZUNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJuIGEgbWV0cmljIG1lYXN1cmluZyB0aGUgZHVyYXRpb24gb2YgdXNlciB0YWtlb3ZlcnMuXG4gICAqL1xuICBtZXRyaWNUYWtlT3ZlckR1cmF0aW9uKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICBBQlNUUkFDVCBCQVNFIENMQVNTXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGEgQnJvd3Nlci5cbiAqIENvbnRhaW5zIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgdmFsaWQgZm9yIEJyb3dzZXJzIGVpdGhlciBjcmVhdGVkIHdpdGggQ0RLIG9yIGltcG9ydGVkLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJvd3NlckN1c3RvbUJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElCcm93c2VyQ3VzdG9tIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGJyb3dzZXJBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGJyb3dzZXJJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU6IGlhbS5JUm9sZTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIC8qKlxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIENvbm5lY3Rpb25zIG9iamVjdCB0aGF0IHdpbGwgZmFpbCBpZiB0aGlzIEJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIFZQQ1xuICAgKiBjb25maWd1cmVkLlxuICAgKi9cbiAgcHVibGljIGdldCBjb25uZWN0aW9ucygpOiBlYzIuQ29ubmVjdGlvbnMge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0Nhbm5vdCBtYW5hZ2UgbmV0d29yayBhY2Nlc3Mgd2l0aG91dCBjb25maWd1cmluZyBhIFZQQycsIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbnM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBhY3R1YWwgQ29ubmVjdGlvbnMgb2JqZWN0IGZvciB0aGlzIEJyb3dzZXIuIFRoaXMgbWF5IGJlIHVuc2V0IGluIHRoZSBldmVudCB0aGF0IGEgVlBDIGhhcyBub3RcbiAgICogYmVlbiBjb25maWd1cmVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgSUFNIGFjdGlvbnMgdG8gdGhlIElBTSBQcmluY2lwYWxcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgSUFNIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcGFyYW0gYWN0aW9ucyAtIFRoZSBhY3Rpb25zIHRvIGdyYW50XG4gICAqIEByZXR1cm5zIEFuIElBTSBHcmFudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmJyb3dzZXJBcm5dLFxuICAgICAgYWN0aW9uczogYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIG9uIHRoaXMgYnJvd3NlciB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBUaGlzIGluY2x1ZGVzIGJvdGggcmVhZCBwZXJtaXNzaW9ucyBvbiB0aGUgc3BlY2lmaWMgYnJvd3NlciBhbmQgbGlzdCBwZXJtaXNzaW9ucyBvbiBhbGwgYnJvd3NlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgZ3JhbnQgY29uZmlndXJhdGlvbjpcbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkdldEJyb3dzZXInLCAnYmVkcm9jay1hZ2VudGNvcmU6R2V0QnJvd3NlclNlc3Npb24nXSBvbiB0aGlzLmJyb3dzZXJBcm5cbiAgICogLSBhY3Rpb25zOiBbJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RCcm93c2VycycsICdiZWRyb2NrLWFnZW50Y29yZTpMaXN0QnJvd3NlclNlc3Npb25zJ10gb24gYWxsIHJlc291cmNlcyAoKilcbiAgICogQHJldHVybnMgQW4gSUFNIEdyYW50IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGNvbnN0IHJlc291cmNlU3BlY2lmaWNHcmFudCA9IHRoaXMuZ3JhbnQoXG4gICAgICBncmFudGVlLFxuICAgICAgLi4ucGVybXMuQlJPV1NFUl9SRUFEX1BFUk1TLFxuICAgICk7XG5cbiAgICBjb25zdCBhbGxSZXNvdXJjZUdyYW50ID0gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFsnKiddLFxuICAgICAgYWN0aW9uczogcGVybXMuQlJPV1NFUl9MSVNUX1BFUk1TLFxuICAgIH0pO1xuICAgIC8vIFJldHVybiBjb21iaW5lZCBncmFudFxuICAgIHJldHVybiByZXNvdXJjZVNwZWNpZmljR3JhbnQuY29tYmluZShhbGxSZXNvdXJjZUdyYW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBpbnZva2UgcGVybWlzc2lvbnMgb24gdGhpcyBicm93c2VyIHRvIGFuIElBTSBwcmluY2lwYWwuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIC0gVGhlIElBTSBwcmluY2lwYWwgdG8gZ3JhbnQgaW52b2tlIHBlcm1pc3Npb25zIHRvXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBncmFudCBjb25maWd1cmF0aW9uOlxuICAgKiAtIGFjdGlvbnM6IFsnYmVkcm9jay1hZ2VudGNvcmU6U3RhcnRCcm93c2VyU2Vzc2lvbicsICdiZWRyb2NrLWFnZW50Y29yZTpVcGRhdGVCcm93c2VyU3RyZWFtJywgJ2JlZHJvY2stYWdlbnRjb3JlOlN0b3BCcm93c2VyU2Vzc2lvbiddXG4gICAqIC0gcmVzb3VyY2VBcm5zOiBbdGhpcy5icm93c2VyQXJuXVxuICAgKiBAcmV0dXJucyBBbiBJQU0gR3JhbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50VXNlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChcbiAgICAgIGdyYW50ZWUsXG4gICAgICAuLi5wZXJtcy5CUk9XU0VSX1VTRV9QRVJNUyxcbiAgICApO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE1ldHJpY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBicm93c2VyLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgbWV0cmljIHdpbGwgYmUgY2FsY3VsYXRlZCBhcyBhIHN1bSBvdmVyIGEgcGVyaW9kIG9mIDUgbWludXRlcy5cbiAgICogWW91IGNhbiBjdXN0b21pemUgdGhpcyBieSB1c2luZyB0aGUgYHN0YXRpc3RpY2AgYW5kIGBwZXJpb2RgIHByb3BlcnRpZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgZGltZW5zaW9uczogRGltZW5zaW9uc01hcCwgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICBjb25zdCBtZXRyaWNQcm9wczogTWV0cmljUHJvcHMgPSB7XG4gICAgICBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHsgLi4uZGltZW5zaW9ucywgUmVzb3VyY2U6IHRoaXMuYnJvd3NlckFybiB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmVNZXRyaWMobWV0cmljUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciBhcGkgb3BlcmF0aW9ucy4uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IG1ldHJpY05hbWVcbiAgICogLSBkaW1lbnNpb25zTWFwOiB7IEJyb3dzZXJJZDogdGhpcy5icm93c2VySWQgfVxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgYXBpIG9wZXJhdGlvbnNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNGb3JBcGlPcGVyYXRpb24oXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIHByb3BzPzogTWV0cmljT3B0aW9ucyxcbiAgKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMobWV0cmljTmFtZSwgeyBPcGVyYXRpb246IG9wZXJhdGlvbiB9LCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBicm93c2VyIGxhdGVuY2llcy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogTGF0ZW5jeVxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgbGF0ZW5jaWVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTGF0ZW5jeUZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ0xhdGVuY3knLCBvcGVyYXRpb24sIHsgc3RhdGlzdGljOiBTdGF0cy5BVkVSQUdFLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGJyb3dzZXIgaW52b2NhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IEludm9jYXRpb25zXG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgYnJvd3NlciBsYXRlbmNpZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNJbnZvY2F0aW9uc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ0ludm9jYXRpb25zJywgb3BlcmF0aW9uLCB7XG4gICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciBlcnJvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IEVycm9yc1xuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgZXJyb3JzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRXJyb3JzRm9yQXBpT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZvckFwaU9wZXJhdGlvbignRXJyb3JzJywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGJyb3dzZXIgdGhyb3R0bGVzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1ldHJpYyBjb25maWd1cmF0aW9uOlxuICAgKiAtIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZSdcbiAgICogLSBtZXRyaWNOYW1lOiBUaHJvdHRsZXNcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBicm93c2VyIHRocm90dGxlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1Rocm90dGxlc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ1Rocm90dGxlcycsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBicm93c2VyIHN5c3RlbSBlcnJvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1ldHJpY1xuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbWV0cmljIGNvbmZpZ3VyYXRpb246XG4gICAqIC0gbmFtZXNwYWNlOiAnQVdTL0JlZHJvY2stQWdlbnRDb3JlJ1xuICAgKiAtIG1ldHJpY05hbWU6IFN5c3RlbUVycm9yc1xuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgc3lzdGVtIGVycm9yc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1N5c3RlbUVycm9yc0ZvckFwaU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGb3JBcGlPcGVyYXRpb24oJ1N5c3RlbUVycm9ycycsIG9wZXJhdGlvbiwgeyBzdGF0aXN0aWM6IFN0YXRzLlNVTSwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggbWV0cmljIGZvciB0cmFja2luZyBicm93c2VyIHVzZXIgZXJyb3JzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IG1ldHJpYyBjb25maWd1cmF0aW9uOlxuICAgKiAtIG5hbWVzcGFjZTogJ0FXUy9CZWRyb2NrLUFnZW50Q29yZSdcbiAgICogLSBtZXRyaWNOYW1lOiBVc2VyRXJyb3JzXG4gICAqIEByZXR1cm5zIEEgQ2xvdWRXYXRjaCBNZXRyaWMgY29uZmlndXJlZCBmb3IgYnJvd3NlciB1c2VyIGVycm9yc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1VzZXJFcnJvcnNGb3JBcGlPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRm9yQXBpT3BlcmF0aW9uKCdVc2VyRXJyb3JzJywgb3BlcmF0aW9uLCB7IHN0YXRpc3RpYzogU3RhdHMuU1VNLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xvdWRXYXRjaCBtZXRyaWMgZm9yIHRyYWNraW5nIGJyb3dzZXIgc2Vzc2lvbiBkdXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogRHVyYXRpb25cbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBicm93c2VyIHNlc3Npb24gZHVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNTZXNzaW9uRHVyYXRpb24ocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0R1cmF0aW9uJywgeyBPcGVyYXRpb246ICdCcm93c2VyU2Vzc2lvbicgfSwgeyBzdGF0aXN0aWM6IFN0YXRzLkFWRVJBR0UsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciB1c2VyIHRha2VvdmVycy5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogVGFrZU92ZXJDb3VudFxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgdXNlciB0YWtlb3ZlcnNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUYWtlT3ZlckNvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdUYWtlT3ZlckNvdW50Jywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciB1c2VyIHRha2VvdmVycyByZWxlYXNlZC5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogVGFrZU92ZXJSZWxlYXNlQ291bnRcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBicm93c2VyIHVzZXIgdGFrZW92ZXJzIHJlbGVhc2VkXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVGFrZU92ZXJSZWxlYXNlQ291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1Rha2VPdmVyUmVsZWFzZUNvdW50Jywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5TVU0sIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIG1ldHJpYyBmb3IgdHJhY2tpbmcgYnJvd3NlciB1c2VyIHRha2VvdmVycyBkdXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbWV0cmljXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBtZXRyaWMgY29uZmlndXJhdGlvbjpcbiAgICogLSBuYW1lc3BhY2U6ICdBV1MvQmVkcm9jay1BZ2VudENvcmUnXG4gICAqIC0gbWV0cmljTmFtZTogVGFrZU92ZXJEdXJhdGlvblxuICAgKiBAcmV0dXJucyBBIENsb3VkV2F0Y2ggTWV0cmljIGNvbmZpZ3VyZWQgZm9yIGJyb3dzZXIgdXNlciB0YWtlb3ZlcnMgZHVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNUYWtlT3ZlckR1cmF0aW9uKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdUYWtlT3ZlckR1cmF0aW9uJywge30sIHsgc3RhdGlzdGljOiBTdGF0cy5BVkVSQUdFLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gY3JlYXRlIGEgbWV0cmljLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtZXRyaWNcbiAgICogQHJldHVybnMgQSBDbG91ZFdhdGNoIE1ldHJpYyBjb25maWd1cmVkIGZvciBicm93c2VyIGFwaSBvcGVyYXRpb25zXG4gICAqL1xuICBwcml2YXRlIGNvbmZpZ3VyZU1ldHJpYyhwcm9wczogTWV0cmljUHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlZ2lvbjogcHJvcHM/LnJlZ2lvbiA/PyB0aGlzLnN0YWNrLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IHByb3BzPy5hY2NvdW50ID8/IHRoaXMuc3RhY2suYWNjb3VudCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjb3JkaW5nIENvbmZpZ3VyYXRpb25cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBSZWNvcmRpbmcgY29uZmlndXJhdGlvbiBmb3IgYnJvd3NlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ0NvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHJlY29yZGluZyBpcyBlbmFibGVkXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTMyBMb2NhdGlvbiBDb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBzM0xvY2F0aW9uPzogTG9jYXRpb247XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgUFJPUFMgRk9SIE5FVyBDT05TVFJVQ1RcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBCcm93c2VyIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3NlckN1c3RvbVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBicm93c2VyXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpXG4gICAqIFRoZSBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiBQYXR0ZXJuOiBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fVxuICAgKiBAcmVxdWlyZWQgLSBZZXNcbiAgICovXG4gIHJlYWRvbmx5IGJyb3dzZXJDdXN0b21OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJvd3NlclxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSwgLSAoaHlwaGVuKSBhbmQgc3BhY2VzXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBjYW4gaGF2ZSB1cCB0byAyMDAgY2hhcmFjdGVyc1xuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqIEByZXF1aXJlZCAtIE5vXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTmV0d29yayBjb25maWd1cmF0aW9uIGZvciBicm93c2VyXG4gICAqIEByZXF1aXJlZCAtIE5vXG4gICAqIEBkZWZhdWx0IC0gUFVCTElDIG5ldHdvcmsgbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb24/OiBCcm93c2VyTmV0d29ya0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFJlY29yZGluZyBjb25maWd1cmF0aW9uIGZvciBicm93c2VyXG4gICAqIEByZXF1aXJlZCAtIE5vXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVjb3JkaW5nIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZz86IFJlY29yZGluZ0NvbmZpZztcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBicm93c2VyIHRvIGFjY2VzcyBBV1Mgc2VydmljZXNcbiAgICogQGRlZmF1bHQgLSBBIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZFxuICAgKiBAcmVxdWlyZWQgLSBOb1xuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGFncyAob3B0aW9uYWwpXG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIEJyb3dzZXIgcmVzb3VyY2VcbiAgICpcbiAgICogQGRlZmF1bHQge30gLSBubyB0YWdzXG4gICAqIEByZXF1aXJlZCAtIE5vXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgYnJvd3NlciBzaWduaW5nIGlzIGVuYWJsZWQuXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGJyb3dzZXIgd2lsbCBjcnlwdG9ncmFwaGljYWxseSBzaWduXG4gICAqIEhUVFAgcmVxdWVzdHMgdG8gaWRlbnRpZnkgaXRzZWxmIGFzIGFuIEFJIGFnZW50IHRvIGJvdCBjb250cm9sIHZlbmRvcnMuXG4gICAqIEBkZWZhdWx0IC0gQnJvd3NlclNpZ25pbmcuRElTQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IGJyb3dzZXJTaWduaW5nPzogQnJvd3NlclNpZ25pbmc7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgIEFUVFJTIEZPUiBJTVBPUlRFRCBDT05TVFJVQ1RcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQXR0cmlidXRlcyBmb3Igc3BlY2lmeWluZyBhbiBpbXBvcnRlZCBCcm93c2VyIEN1c3RvbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcm93c2VyQ3VzdG9tQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBhZ2VudC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJvd3NlckFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgYXNzb2NpYXRlZCB0byB0aGUgYnJvd3Nlci5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybjogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0aGlzIGJyb3dzZXIgd2FzIGxhc3QgdXBkYXRlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gTm8gbGFzdCB1cGRhdGVkIHRpbWVzdGFtcCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGJyb3dzZXIuXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIHN0YXR1cyBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNyZWF0ZWQgdGltZXN0YW1wIG9mIHRoZSBicm93c2VyLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBjcmVhdGVkIHRpbWVzdGFtcCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHNlY3VyaXR5IGdyb3VwcyBmb3IgdGhpcyBicm93c2VyLCBpZiBpbiBhIFZQQy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBCeSBkZWZhdWx0LCB0aGUgYnJvd3NlciBpcyBub3QgaW4gYSBWUEMuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQnJvd3NlciByZXNvdXJjZSBmb3IgQVdTIEJlZHJvY2sgQWdlbnQgQ29yZS5cbiAqIFByb3ZpZGVzIGEgYnJvd3NlciBlbnZpcm9ubWVudCBmb3Igd2ViIGF1dG9tYXRpb24gYW5kIGludGVyYWN0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9icm93c2VyLmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkJyb3dzZXJDdXN0b21cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEJyb3dzZXJDdXN0b20gZXh0ZW5kcyBCcm93c2VyQ3VzdG9tQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLkJyb3dzZXJDdXN0b20nO1xuXG4gIC8qKlxuICAgKiBTdGF0aWMgTWV0aG9kIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgQmVkcm9jayBBZ2VudENvcmUgQnJvd3NlciBDdXN0b20uXG4gICAqL1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBCcm93c2VyIEN1c3RvbSByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBicm93c2VyJ3MgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgLSBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIC0gQXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgYnJvd3NlciBjdXN0b21cbiAgICogQHJldHVybnMgQW4gSUJyb3dzZXJDdXN0b20gcmVmZXJlbmNlIHRvIHRoZSBleGlzdGluZyBicm93c2VyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Ccm93c2VyQ3VzdG9tQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQnJvd3NlckN1c3RvbUF0dHJpYnV0ZXMpOiBJQnJvd3NlckN1c3RvbSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQnJvd3NlckN1c3RvbUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGJyb3dzZXJBcm4gPSBhdHRycy5icm93c2VyQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGJyb3dzZXJJZCA9IEFybi5zcGxpdChhdHRycy5icm93c2VyQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lITtcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25Sb2xlID0gaWFtLlJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsIGAke2lkfVJvbGVgLCBhdHRycy5yb2xlQXJuKTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0ID0gYXR0cnMubGFzdFVwZGF0ZWRBdDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSBhdHRycy5zdGF0dXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gYXR0cnMuY3JlYXRlZEF0O1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcblxuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlIHx8IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgICBpZiAoYXR0cnMuc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IG5ldyBlYzIuQ29ubmVjdGlvbnMoe1xuICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IGF0dHJzLnNlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIG5ldyBCcm93c2VyIEN1c3RvbVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEF0dHJpYnV0ZXNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBicm93c2VyIHJlc291cmNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnJvd3NlckFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBicm93c2VyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBicm93c2VySWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBicm93c2VyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBicm93c2VyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCB1cGRhdGVkIHRpbWVzdGFtcCBvZiB0aGUgYnJvd3NlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGJyb3dzZXJcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjcmVhdGVkIHRpbWVzdGFtcCBvZiB0aGUgYnJvd3NlclxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZhaWx1cmUgcmVhc29uIG9mIHRoZSBicm93c2VyXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYWlsdXJlUmVhc29uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElBTSByb2xlIGFzc29jaWF0ZWQgdG8gdGhlIGJyb3dzZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZTogaWFtLklSb2xlO1xuICAvKipcbiAgICogVGFncyBhcHBsaWVkIHRvIHRoaXMgYnJvd3NlciByZXNvdXJjZVxuICAgKiBBIG1hcCBvZiBrZXktdmFsdWUgcGFpcnMgZm9yIHJlc291cmNlIHRhZ2dpbmdcbiAgICogQGRlZmF1bHQgLSBObyB0YWdzIGFwcGxpZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIC8qKlxuICAgKiBUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIG9mIHRoZSBicm93c2VyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb246IEJyb3dzZXJOZXR3b3JrQ29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSByZWNvcmRpbmcgY29uZmlndXJhdGlvbiBvZiB0aGUgYnJvd3NlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZz86IFJlY29yZGluZ0NvbmZpZztcbiAgLyoqXG4gICAqIFRoZSBicm93c2VyIHNpZ25pbmcgY29uZmlndXJhdGlvbiBvZiB0aGUgYnJvd3NlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJyb3dzZXJTaWduaW5nPzogQnJvd3NlclNpZ25pbmc7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBJbnRlcm5hbCBPbmx5XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBwcml2YXRlIHJlYWRvbmx5IF9fcmVzb3VyY2U6IGFnZW50X2NvcmUuQ2ZuQnJvd3NlckN1c3RvbTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQ09OU1RSVUNUT1JcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCcm93c2VyQ3VzdG9tUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2V0IHByb3BlcnRpZXMgYW5kIGRlZmF1bHRzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdGhpcy5uYW1lID0gcHJvcHMuYnJvd3NlckN1c3RvbU5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24gPSBwcm9wcy5uZXR3b3JrQ29uZmlndXJhdGlvbiA/PyBCcm93c2VyTmV0d29ya0NvbmZpZ3VyYXRpb24udXNpbmdQdWJsaWNOZXR3b3JrKCk7XG4gICAgdGhpcy5yZWNvcmRpbmdDb25maWcgPSBwcm9wcy5yZWNvcmRpbmdDb25maWcgPz8geyBlbmFibGVkOiBmYWxzZSB9O1xuICAgIHRoaXMuZXhlY3V0aW9uUm9sZSA9IHByb3BzLmV4ZWN1dGlvblJvbGUgPz8gdGhpcy5fY3JlYXRlQnJvd3NlclJvbGUoKTtcbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlO1xuICAgIHRoaXMudGFncyA9IHByb3BzLnRhZ3M7XG4gICAgdGhpcy5icm93c2VyU2lnbmluZyA9IHByb3BzLmJyb3dzZXJTaWduaW5nID8/IEJyb3dzZXJTaWduaW5nLkRJU0FCTEVEO1xuXG4gICAgLy8gVmFsaWRhdGUgYnJvd3NlciBuYW1lXG4gICAgdGhyb3dJZkludmFsaWQodGhpcy5fdmFsaWRhdGVCcm93c2VyTmFtZSwgdGhpcy5uYW1lKTtcblxuICAgIC8vIFZhbGlkYXRlIGJyb3dzZXIgdGFnc1xuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlQnJvd3NlclRhZ3MsIHRoaXMudGFncyk7XG5cbiAgICAvLyBWYWxpZGF0ZSByZWNvcmRpbmcgY29uZmlndXJhdGlvblxuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlUmVjb3JkaW5nQ29uZmlnLCB0aGlzLnJlY29yZGluZ0NvbmZpZyk7XG5cbiAgICAvLyBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIHZhbGlkYXRpb24gaXMgZG9uZSBpbiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGNsYXNzXG4gICAgLy8gU28gd2UgZG9uJ3QgbmVlZCB0byB2YWxpZGF0ZSBpdCBoZXJlXG5cbiAgICAvLyBTZXQgY29ubmVjdGlvbnMgLSBjcmVhdGUgYSBzaGFyZWQgY29ubmVjdGlvbnMgb2JqZWN0XG4gICAgaWYgKHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvbnMpIHtcbiAgICAgIC8vIFVzZSB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uJ3MgY29ubmVjdGlvbnMgYXMgdGhlIHNoYXJlZCBvYmplY3RcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5jb25uZWN0aW9ucztcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDRk4gUHJvcHMgLSBXaXRoIExhenkgc3VwcG9ydFxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGNmblByb3BzOiBhZ2VudF9jb3JlLkNmbkJyb3dzZXJDdXN0b21Qcm9wcyA9IHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IExhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5fcmVuZGVyKHRoaXMuX2Nvbm5lY3Rpb25zKSB9KSxcbiAgICAgIHJlY29yZGluZ0NvbmZpZzogdGhpcy5fcmVuZGVyUmVjb3JkaW5nQ29uZmlnKCksXG4gICAgICBleGVjdXRpb25Sb2xlQXJuOiB0aGlzLmV4ZWN1dGlvblJvbGU/LnJvbGVBcm4sXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgICBicm93c2VyU2lnbmluZzogdGhpcy5fcmVuZGVyQnJvd3NlclNpZ25pbmcoKSxcbiAgICB9O1xuXG4gICAgLy8gTDEgaW5zdGFudGlhdGlvblxuICAgIHRoaXMuX19yZXNvdXJjZSA9IG5ldyBhZ2VudF9jb3JlLkNmbkJyb3dzZXJDdXN0b20odGhpcywgJ1Jlc291cmNlJywgY2ZuUHJvcHMpO1xuXG4gICAgLy8gR2V0IGF0dHJpYnV0ZXMgZGlyZWN0bHkgZnJvbSB0aGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2VcbiAgICB0aGlzLmJyb3dzZXJJZCA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQnJvd3NlcklkO1xuICAgIHRoaXMuYnJvd3NlckFybiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQnJvd3NlckFybjtcbiAgICB0aGlzLnN0YXR1cyA9IHRoaXMuX19yZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gdGhpcy5fX3Jlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy5sYXN0VXBkYXRlZEF0ID0gdGhpcy5fX3Jlc291cmNlLmF0dHJMYXN0VXBkYXRlZEF0O1xuICAgIHRoaXMuZmFpbHVyZVJlYXNvbiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyRmFpbHVyZVJlYXNvbjtcblxuICAgIC8vIGlmIHJlY29yZGluZyBpcyBjb25maWd1cmVkLCBhZGQgcGVybWlzc2lvbnMgdG8gdGhlIGV4ZWN1dGlvbiByb2xlXG4gICAgaWYgKHRoaXMucmVjb3JkaW5nQ29uZmlnICYmIHRoaXMucmVjb3JkaW5nQ29uZmlnLnMzTG9jYXRpb24pIHtcbiAgICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucmVjb3JkaW5nQ29uZmlnLnMzTG9jYXRpb24uYnVja2V0TmFtZSkpIHtcbiAgICAgICAgU3RhY2sub2YodGhpcykucmVzb2x2ZSh0aGlzLnJlY29yZGluZ0NvbmZpZy5zM0xvY2F0aW9uLmJ1Y2tldE5hbWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgYnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHt0aGlzLm5hbWV9UmVjb3JkaW5nQnVja2V0YCxcbiAgICAgICAgdGhpcy5yZWNvcmRpbmdDb25maWcuczNMb2NhdGlvbi5idWNrZXROYW1lLFxuICAgICAgKTtcbiAgICAgIC8vIEVuc3VyZSB0aGUgcG9saWN5IGlzIGFwcGxpZWQgYmVmb3JlIHRoZSBicm93c2VyIHJlc291cmNlIGlzIGNyZWF0ZWRcbiAgICAgIGNvbnN0IGdyYW50ID0gYnVja2V0LmdyYW50UmVhZFdyaXRlKHRoaXMuZXhlY3V0aW9uUm9sZSk7XG4gICAgICBncmFudC5hcHBseUJlZm9yZSh0aGlzLl9fcmVzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHJlY29yZGluZyBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBSZWNvcmRpbmdDb25maWdQcm9wZXJ0eSBvYmplY3QgaW4gQ2xvdWRGb3JtYXRpb24gZm9ybWF0LCBvciB1bmRlZmluZWQgaWYgbm8gcmVjb3JkaW5nIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5lZFxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBpZiBubyByZWNvcmRpbmcgY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZFxuICAgKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cbiAgICovXG4gIHByaXZhdGUgX3JlbmRlclJlY29yZGluZ0NvbmZpZygpOiBhZ2VudF9jb3JlLkNmbkJyb3dzZXJDdXN0b20uUmVjb3JkaW5nQ29uZmlnUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlY29yZGluZ0NvbmZpZyA/IHtcbiAgICAgIGVuYWJsZWQ6IHRoaXMucmVjb3JkaW5nQ29uZmlnLmVuYWJsZWQsXG4gICAgICBzM0xvY2F0aW9uOiB0aGlzLnJlY29yZGluZ0NvbmZpZy5zM0xvY2F0aW9uID8ge1xuICAgICAgICBidWNrZXQ6IHRoaXMucmVjb3JkaW5nQ29uZmlnLnMzTG9jYXRpb24uYnVja2V0TmFtZSxcbiAgICAgICAgcHJlZml4OiB0aGlzLnJlY29yZGluZ0NvbmZpZy5zM0xvY2F0aW9uLm9iamVjdEtleSxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGJyb3dzZXIgc2lnbmluZyBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBCcm93c2VyU2lnbmluZ1Byb3BlcnR5IG9iamVjdCBpbiBDbG91ZEZvcm1hdGlvbiBmb3JtYXQsIG9yIHVuZGVmaW5lZCBpZiBubyBicm93c2VyIHNpZ25pbmcgY29uZmlndXJhdGlvbiBpcyBkZWZpbmVkXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIGlmIG5vIGJyb3dzZXIgc2lnbmluZyBjb25maWd1cmF0aW9uIGlzIHByb3ZpZGVkXG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyQnJvd3NlclNpZ25pbmcoKTogYWdlbnRfY29yZS5DZm5Ccm93c2VyQ3VzdG9tLkJyb3dzZXJTaWduaW5nUHJvcGVydHkge1xuICAgIHJldHVybiB0aGlzLmJyb3dzZXJTaWduaW5nID09PSBCcm93c2VyU2lnbmluZy5FTkFCTEVEID8ge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICB9IDoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGV4ZWN1dGlvbiByb2xlIG5lZWRlZCBmb3IgdGhlIGJyb3dzZXIgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlc1xuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCByb2xlXG4gICAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlQnJvd3NlclJvbGUoKTogaWFtLklSb2xlIHtcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm9sZTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBWYWxpZGF0b3JzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBicm93c2VyIG5hbWUgZm9ybWF0XG4gICAqIEBwYXJhbSBuYW1lIFRoZSBicm93c2VyIG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlQnJvd3Nlck5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgZmllbGROYW1lOiAnQnJvd3NlciBuYW1lJyxcbiAgICAgIG1pbkxlbmd0aDogQlJPV1NFUl9OQU1FX01JTl9MRU5HVEgsXG4gICAgICBtYXhMZW5ndGg6IEJST1dTRVJfTkFNRV9NQVhfTEVOR1RILFxuICAgIH0pKTtcblxuICAgIC8vIENoZWNrIGlmIG5hbWUgbWF0Y2hlcyB0aGUgQVdTIEFQSSBwYXR0ZXJuOiBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fVxuICAgIC8vIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgZm9sbG93ZWQgYnkgdXAgdG8gNDcgbGV0dGVycywgbnVtYmVycywgb3IgdW5kZXJzY29yZXNcbiAgICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKG5hbWUsICdCcm93c2VyIG5hbWUnLCB2YWxpZE5hbWVQYXR0ZXJuKSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGJyb3dzZXIgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZUJyb3dzZXJUYWdzID0gKHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKCF0YWdzKSB7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBUYWdzIGFyZSBvcHRpb25hbFxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVhY2ggdGFnIGtleSBhbmQgdmFsdWVcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YWdzKSkge1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgIGZpZWxkTmFtZTogJ1RhZyBrZXknLFxuICAgICAgICBtaW5MZW5ndGg6IEJST1dTRVJfVEFHX01JTl9MRU5HVEgsXG4gICAgICAgIG1heExlbmd0aDogQlJPV1NFUl9UQUdfTUFYX0xFTkdUSCxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBwYXR0ZXJuOiBeW2EtekEtWjAtOVxccy5fOi89K0AtXSokXG4gICAgICBjb25zdCB2YWxpZEtleVBhdHRlcm4gPSAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC87XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihrZXksICdUYWcga2V5JywgdmFsaWRLZXlQYXR0ZXJuKSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZVxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiAnVGFnIHZhbHVlJyxcbiAgICAgICAgbWluTGVuZ3RoOiBCUk9XU0VSX1RBR19NSU5fTEVOR1RILFxuICAgICAgICBtYXhMZW5ndGg6IEJST1dTRVJfVEFHX01BWF9MRU5HVEgsXG4gICAgICB9KSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBwYXR0ZXJuOiBeW2EtekEtWjAtOVxccy5fOi89K0AtXSokXG4gICAgICBjb25zdCB2YWxpZFZhbHVlUGF0dGVybiA9IC9eW2EtekEtWjAtOVxccy5fOi89K0AtXSokLztcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKHZhbHVlLCAnVGFnIHZhbHVlJywgdmFsaWRWYWx1ZVBhdHRlcm4pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHJlY29yZGluZyBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSByZWNvcmRpbmdDb25maWcgVGhlIHJlY29yZGluZyBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZVJlY29yZGluZ0NvbmZpZyA9IChyZWNvcmRpbmdDb25maWc/OiBSZWNvcmRpbmdDb25maWcpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoIXJlY29yZGluZ0NvbmZpZykge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gTm8gdmFsaWRhdGlvbiBuZWVkZWQgaWYgbm8gcmVjb3JkaW5nIGNvbmZpZyBpcyBwcm92aWRlZFxuICAgIH1cblxuICAgIGNvbnN0IHMzTG9jYXRpb24gPSByZWNvcmRpbmdDb25maWcuczNMb2NhdGlvbjtcblxuICAgIC8vIE9ubHkgdmFsaWRhdGUgUzMgbG9jYXRpb24gaWYgaXQncyBhY3R1YWxseSBwcm92aWRlZFxuICAgIGlmIChzM0xvY2F0aW9uKSB7XG4gICAgICAvLyBCb3RoIGJ1Y2tldCBuYW1lIGFuZCBvYmplY3Qga2V5IGFyZSByZXF1aXJlZCB3aGVuIFMzIGxvY2F0aW9uIGlzIHByb3ZpZGVkXG4gICAgICBpZiAoIXMzTG9jYXRpb24uYnVja2V0TmFtZSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnUzMgYnVja2V0IG5hbWUgaXMgcmVxdWlyZWQgd2hlbiBTMyBsb2NhdGlvbiBpcyBwcm92aWRlZCBmb3IgcmVjb3JkaW5nIGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIGJ1Y2tldCBuYW1lIHBhdHRlcm46IF5bYS16MC05XVthLXowLTkuLV17MSw2MX1bYS16MC05XSRcbiAgICAgICAgY29uc3QgYnVja2V0TmFtZVBhdHRlcm4gPSAvXlthLXowLTldW2EtejAtOS4tXXsxLDYxfVthLXowLTldJC87XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRmllbGRQYXR0ZXJuKHMzTG9jYXRpb24uYnVja2V0TmFtZSwgJ1MzIGJ1Y2tldCBuYW1lJywgYnVja2V0TmFtZVBhdHRlcm4pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzM0xvY2F0aW9uLm9iamVjdEtleSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnUzMgb2JqZWN0IGtleSAocHJlZml4KSBpcyByZXF1aXJlZCB3aGVuIFMzIGxvY2F0aW9uIGlzIHByb3ZpZGVkIGZvciByZWNvcmRpbmcgY29uZmlndXJhdGlvbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH07XG59XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IResource, Resource } from 'aws-cdk-lib';
|
|
2
2
|
import { DimensionsMap, Metric, MetricOptions } from 'aws-cdk-lib/aws-cloudwatch';
|
|
3
|
-
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
4
3
|
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
4
|
+
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
5
5
|
import { Construct } from 'constructs';
|
|
6
6
|
import { CodeInterpreterNetworkConfiguration } from '../network/network-configuration';
|
|
7
7
|
/******************************************************************************
|
|
@@ -112,12 +112,6 @@ export declare abstract class CodeInterpreterCustomBase extends Resource impleme
|
|
|
112
112
|
* configured.
|
|
113
113
|
*/
|
|
114
114
|
get connections(): ec2.Connections;
|
|
115
|
-
/**
|
|
116
|
-
* The actual Connections object for this Browser. This may be unset in the event that a VPC has not
|
|
117
|
-
* been configured.
|
|
118
|
-
* @internal
|
|
119
|
-
*/
|
|
120
|
-
protected _connections: ec2.Connections | undefined;
|
|
121
115
|
constructor(scope: Construct, id: string);
|
|
122
116
|
/**
|
|
123
117
|
* Grants IAM actions to the IAM Principal
|
|
@@ -424,24 +418,4 @@ export declare class CodeInterpreterCustom extends CodeInterpreterCustomBase {
|
|
|
424
418
|
};
|
|
425
419
|
private readonly __resource;
|
|
426
420
|
constructor(scope: Construct, id: string, props: CodeInterpreterCustomProps);
|
|
427
|
-
/**
|
|
428
|
-
* Validates the code interpreter name format
|
|
429
|
-
* @param name The code interpreter name to validate
|
|
430
|
-
* @returns Array of validation error messages, empty if valid
|
|
431
|
-
* @internal This is an internal core function and should not be called directly.
|
|
432
|
-
*/
|
|
433
|
-
private _validateCodeInterpreterName;
|
|
434
|
-
/**
|
|
435
|
-
* Validates the code interpreter tags format
|
|
436
|
-
* @param tags The tags object to validate
|
|
437
|
-
* @returns Array of validation error messages, empty if valid
|
|
438
|
-
* @internal This is an internal core function and should not be called directly.
|
|
439
|
-
*/
|
|
440
|
-
private _validateCodeInterpreterTags;
|
|
441
|
-
/**
|
|
442
|
-
* Creates execution role needed for the code interpreter to access AWS services
|
|
443
|
-
* @returns The created role
|
|
444
|
-
* @internal This is an internal core function and should not be called directly.
|
|
445
|
-
*/
|
|
446
|
-
private _createCodeInterpreterRole;
|
|
447
421
|
}
|