projen 0.99.70 → 0.99.71
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 +47 -27
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +6 -6
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +1 -1
- package/lib/awscdk/awscdk-construct.js +2 -2
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps-py.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.js +4 -4
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/awscdk/private/feature-flags-v2.const.d.ts +1 -1
- package/lib/awscdk/private/feature-flags-v2.const.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-build.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/cdk8s-deps-py.js +1 -1
- package/lib/cdk8s/cdk8s-deps.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/component.js +1 -1
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose/docker-compose-service.js +1 -1
- package/lib/docker-compose/docker-compose.js +1 -1
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/actions-provider.js +1 -1
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/auto-queue.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/dependency-review.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/merge-queue.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +1 -1
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +1 -1
- package/lib/github/workflows.js +1 -1
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +2 -2
- package/lib/java/projenrc.js +1 -1
- package/lib/javascript/biome/biome-config.d.ts +6 -0
- package/lib/javascript/biome/biome-config.js +2 -1
- package/lib/javascript/biome/biome.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/jest.js +4 -4
- package/lib/javascript/license-checker.js +1 -1
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.js +1 -1
- package/lib/javascript/typescript-config.js +2 -2
- package/lib/javascript/upgrade-dependencies.js +2 -2
- package/lib/javascript/yarnrc.js +1 -1
- package/lib/json-patch.js +1 -1
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/project-build.js +1 -1
- package/lib/project-tree.js +1 -1
- package/lib/project.js +1 -1
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.js +2 -2
- package/lib/projenrc.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.js +1 -1
- package/lib/python/pyproject-toml-file.js +1 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/uv.js +1 -1
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/renovatebot.js +1 -1
- package/lib/sample-file.js +2 -2
- package/lib/semver.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/task-runtime.js +1 -1
- package/lib/task.js +1 -1
- package/lib/tasks.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc-ts.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +6 -6
- package/lib/version.js +2 -2
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/extensions.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/settings.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +4 -4
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/node_modules/semver/classes/semver.js +19 -2
- package/node_modules/semver/package.json +1 -1
- package/package.json +7 -7
|
@@ -870,6 +870,7 @@ function toJson_OverrideFormatterConfiguration(obj) {
|
|
|
870
870
|
'indentWidth': obj.indentWidth,
|
|
871
871
|
'lineEnding': obj.lineEnding,
|
|
872
872
|
'lineWidth': obj.lineWidth,
|
|
873
|
+
'trailingCommas': obj.trailingCommas,
|
|
873
874
|
'trailingNewline': obj.trailingNewline,
|
|
874
875
|
};
|
|
875
876
|
// filter undefined values
|
|
@@ -1060,4 +1061,4 @@ var JsonTrailingCommas;
|
|
|
1060
1061
|
/** all */
|
|
1061
1062
|
JsonTrailingCommas["ALL"] = "all";
|
|
1062
1063
|
})(JsonTrailingCommas || (exports.JsonTrailingCommas = JsonTrailingCommas = {}));
|
|
1063
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlvbWUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmFzY3JpcHQvYmlvbWUvYmlvbWUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThIQSw4REFzQkM7QUFtQ0QsZ0VBU0M7QUFrREQsMERBV0M7QUFrREQsOERBVUM7QUFnSUQsc0VBbUJDO0FBa0NELGtFQVNDO0FBb0NELDREQVNDO0FBZ0RELDREQVdDO0FBa0VELHdEQWFDO0FBMkNELDREQVVDO0FBMENELGdFQVVDO0FBa0dELHdEQWtCQztBQXdERCwwREFXQztBQXlCRCx3Q0FRQztBQXNCRCxzRUFPQztBQTZFRCw0RUFhQztBQXNCRCxzRUFPQztBQXFDRCxzRUFTQztBQXFFRCw4RUFPQztBQXFGRCxvRkFjQztBQXNCRCw4RUFPQztBQW9CRCx3RUFPQztBQW1FRCw4RUFZQztBQW9CRCx3RUFPQztBQXNCRCx3RUFPQztBQTZHRCw4RUFpQkM7QUFzQkQsd0VBT0M7QUFzQkQsd0VBT0M7QUFzQkQsb0VBT0M7QUFpS0QsMEVBdUJDO0FBMkNELG9FQU9DO0FBMkNELG9FQVNDO0FBc0JELHdFQU9DO0FBZ0dELDhFQWVDO0FBc0JELHdFQU9DO0FBNkJELHdFQVFDO0FBd0VELG9DQWVDO0FBMkJELGdGQVFDO0FBb0JELDhFQU9DO0FBa0hELHNGQWtCQztBQWtDRCxnRkFTQztBQWdGRCxzQ0FhQztBQXhnRkQ7OztHQUdHO0FBQ0gscUZBQXFGO0FBQ3JGLFNBQWdCLHlCQUF5QixDQUFDLEdBQW1DO0lBQzNFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNO1FBQ3JCLFFBQVEsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2hELEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxH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Q0FBaEIsZ0JBQWdCLFFBSzNCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0IsMERBQTBEO0lBQzFELG9DQUFlLENBQUE7SUFDZiw0REFBNEQ7SUFDNUQsc0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUxXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBSzVCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGVBS1g7QUFMRCxXQUFZLGVBQWU7SUFDekIsZUFBZTtJQUNmLHlDQUFzQixDQUFBO0lBQ3RCLGVBQWU7SUFDZix3Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTFcsZUFBZSwrQkFBZixlQUFlLFFBSzFCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsYUFBYTtJQUNiLCtCQUFpQixDQUFBO0lBQ2pCLGVBQWU7SUFDZixvQ0FBc0IsQ0FBQTtBQUN4QixDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUMxQixVQUFVO0lBQ1YsK0JBQVcsQ0FBQTtJQUNYLFVBQVU7SUFDViwrQkFBVyxDQUFBO0lBQ1gsV0FBVztJQUNYLGlDQUFhLENBQUE7QUFDZixDQUFDLEVBUFcsZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUFPM0I7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzVCLFdBQVc7SUFDWCxtQ0FBYSxDQUFBO0lBQ2IsVUFBVTtJQUNWLGlDQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsa0JBQWtCLGtDQUFsQixrQkFBa0IsUUFLN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJub2RlIC4vcHJvamVuLmpzXCIuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIHRoYXQgaXMgY29udGFpbmVkIGluc2lkZSB0aGUgZmlsZSBgYmlvbWUuanNvbmBcbiAqXG4gKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpb21lQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBIGZpZWxkIGZvciB0aGUgW0pTT04gc2NoZW1hXShodHRwczovL2pzb24tc2NoZW1hLm9yZy8pIHNwZWNpZmljYXRpb25cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jJHNjaGVtYVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhc3Npc3RzXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIENzcyBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNjc3NcbiAgICovXG4gIHJlYWRvbmx5IGNzcz86IENzc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXRocyB0byBvdGhlciBKU09OIGZpbGVzLCB1c2VkIHRvIGV4dGVuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBmaWxlc3lzdGVtXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2ZpbGVzXG4gICAqL1xuICByZWFkb25seSBmaWxlcz86IEZpbGVzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGZvcm1hdHRlclxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcmFwaFFMIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2dyYXBocWxcbiAgICovXG4gIHJlYWRvbmx5IGdyYXBocWw/OiBHcmFwaHFsQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEdyYXBoUUwgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZ3JpdFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JpdD86IEdyaXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgSFRNTCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNodG1sXG4gICAqL1xuICByZWFkb25seSBodG1sPzogSHRtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2phdmFzY3JpcHRcbiAgICovXG4gIHJlYWRvbmx5IGphdmFzY3JpcHQ/OiBKc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBKc29uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBsaW50ZXJcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBMaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ3JhbnVsYXIgcGF0dGVybnMgdGhhdCBzaG91bGQgYmUgYXBwbGllZCBvbmx5IHRvIGEgc3ViIHNldCBvZiBmaWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNvdmVycmlkZXNcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE92ZXJyaWRlUGF0dGVybltdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHBsdWdpbnMgdG8gbG9hZC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jcGx1Z2luc1xuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2lucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhdCB0aGUgcm9vdCBvZiBhIEJpb21lXG4gICAqIHByb2plY3QuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYHRydWVgLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNyb290XG4gICAqL1xuICByZWFkb25seSByb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFZDUyBpbnRlZ3JhdGlvblxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiN2Y3NcbiAgICovXG4gIHJlYWRvbmx5IHZjcz86IFZjc0NvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Jpb21lQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Jpb21lQ29uZmlndXJhdGlvbihvYmo6IEJpb21lQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJyRzY2hlbWEnOiBvYmouc2NoZW1hLFxuICAgICdhc3Npc3QnOiB0b0pzb25fQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnY3NzJzogdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqLmNzcyksXG4gICAgJ2V4dGVuZHMnOiBvYmouZXh0ZW5kcz8ubWFwKHkgPT4geSksXG4gICAgJ2ZpbGVzJzogdG9Kc29uX0ZpbGVzQ29uZmlndXJhdGlvbihvYmouZmlsZXMpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnZ3JhcGhxbCc6IHRvSnNvbl9HcmFwaHFsQ29uZmlndXJhdGlvbihvYmouZ3JhcGhxbCksXG4gICAgJ2dyaXQnOiB0b0pzb25fR3JpdENvbmZpZ3VyYXRpb24ob2JqLmdyaXQpLFxuICAgICdodG1sJzogdG9Kc29uX0h0bWxDb25maWd1cmF0aW9uKG9iai5odG1sKSxcbiAgICAnamF2YXNjcmlwdCc6IHRvSnNvbl9Kc0NvbmZpZ3VyYXRpb24ob2JqLmphdmFzY3JpcHQpLFxuICAgICdqc29uJzogdG9Kc29uX0pzb25Db25maWd1cmF0aW9uKG9iai5qc29uKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ292ZXJyaWRlcyc6IG9iai5vdmVycmlkZXM/Lm1hcCh5ID0+IHRvSnNvbl9PdmVycmlkZVBhdHRlcm4oeSkpLFxuICAgICdwbHVnaW5zJzogb2JqLnBsdWdpbnM/Lm1hcCh5ID0+IHkpLFxuICAgICdyb290Jzogb2JqLnJvb3QsXG4gICAgJ3Zjcyc6IHRvSnNvbl9WY3NDb25maWd1cmF0aW9uKG9iai52Y3MpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEJpb21lIHNob3VsZCBmYWlsIGluIENMSSBpZiB0aGUgYXNzaXN0IHdlcmUgbm90IGFwcGxpZWQgdG8gdGhlIGNvZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQXNzaXN0Q29uZmlndXJhdGlvbiNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25zPzogQWN0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciBCaW9tZSBzaG91bGQgZW5hYmxlIGFzc2lzdCB2aWEgTFNQIGFuZCBDTEkuXG4gICAqXG4gICAqIEBzY2hlbWEgQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIEJpb21lIHdpbGwgaW5jbHVkZSBmaWxlcy9mb2xkZXJzIHRoYXQgd2lsbFxuICAgKiBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uI2luY2x1ZGVzXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY3Rpb25zJzogdG9Kc29uX0FjdGlvbnMob2JqLmFjdGlvbnMpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBDU1MgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENTUyBhc3Npc3Qgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBDc3NBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDU1MgZm9ybWF0dGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ1NTIGdsb2JhbHNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2dsb2JhbHNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ1NTIGxpbnRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IENzc0xpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENTUyBwYXJzaW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI3BhcnNlclxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyPzogQ3NzUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqOiBDc3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0Nzc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Dc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdnbG9iYWxzJzogb2JqLmdsb2JhbHM/Lm1hcCh5ID0+IHkpLFxuICAgICdsaW50ZXInOiB0b0pzb25fQ3NzTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0Nzc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZmlsZXN5c3RlbVxuICpcbiAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZXNDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqICoqRGVwcmVjYXRlZDoqKiBQbGVhc2UgdXNlIF9mb3JjZS1pZ25vcmUgc3ludGF4XyBpbiBgZmlsZXMuaW5jbHVkZXNgXG4gICAqIGluc3RlYWQ6IDxodHRwczovL2Jpb21lanMuZGV2L3JlZmVyZW5jZS9jb25maWd1cmF0aW9uLyNmaWxlc2luY2x1ZGVzPlxuICAgKlxuICAgKiBTZXQgb2YgZmlsZSBhbmQgZm9sZGVyIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHVuY29uZGl0aW9uYWxseSBpZ25vcmVkIGJ5XG4gICAqIEJpb21lJ3Mgc2Nhbm5lci5cbiAgICpcbiAgICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb24jZXhwZXJpbWVudGFsU2Nhbm5lcklnbm9yZXNcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRlbGxzIEJpb21lIHRvIG5vdCBlbWl0IGRpYWdub3N0aWNzIHdoZW4gaGFuZGxpbmcgZmlsZXMgdGhhdCBpdCBkb2Vzbid0IGtub3dcbiAgICpcbiAgICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb24jaWdub3JlVW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlVW5rbm93bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLiBCaW9tZSB3aWxsIGhhbmRsZSBvbmx5IHRob3NlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsXG4gICAqIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYWxsb3dlZCBzaXplIGZvciBzb3VyY2UgY29kZSBmaWxlcyBpbiBieXRlcy4gRmlsZXMgYWJvdmVcbiAgICogdGhpcyBsaW1pdCB3aWxsIGJlIGlnbm9yZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIERlZmF1bHRzIHRvIDEgTWlCXG4gICAqXG4gICAqIEBkZWZhdWx0IDEgTWlCXG4gICAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uI21heFNpemVcbiAgICovXG4gIHJlYWRvbmx5IG1heFNpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpbGVzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpbGVzQ29uZmlndXJhdGlvbihvYmo6IEZpbGVzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzJzogb2JqLmV4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzPy5tYXAoeSA9PiB5KSxcbiAgICAnaWdub3JlVW5rbm93bic6IG9iai5pZ25vcmVVbmtub3duLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gICAgJ21heFNpemUnOiBvYmoubWF4U2l6ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEdlbmVyaWMgb3B0aW9ucyBhcHBsaWVkIHRvIGFsbCBmaWxlc1xuICpcbiAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBwb3NpdGlvbiBzdHlsZSBpbiBIVE1MLWlzaCBsYW5ndWFnZXMuIERlZmF1bHRzIHRvIGF1dG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG8uXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogUHV0IHRoZSBgPmAgb2YgYSBtdWx0aS1saW5lIEhUTUwgb3IgSlNYIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2YgYmVpbmcgYWxvbmUgb24gdGhlIG5leHQgbGluZSAoZG9lcyBub3QgYXBwbHkgdG8gc2VsZiBjbG9zaW5nIGVsZW1lbnRzKS5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTYW1lTGluZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNhbWVMaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGFyb3VuZCBicmFja2V0cyBpbiBvYmplY3QgbGl0ZXJhbHMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U3BhY2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhwYW5kIGFycmF5cyBhbmQgb2JqZWN0cyBvbiBtdWx0aXBsZSBsaW5lcy5cbiAgICogV2hlbiBzZXQgdG8gYGF1dG9gLCBvYmplY3QgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcyBpZiB0aGUgZmlyc3QgcHJvcGVydHkgaGFzIGEgbmV3bGluZSxcbiAgICogYW5kIGFycmF5IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIHNldCB0byBgYWx3YXlzYCwgdGhlc2UgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcywgcmVnYXJkbGVzcyBvZiBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAqIFdoZW4gc2V0IHRvIGBuZXZlcmAsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIGZvcm1hdHRpbmcgYHBhY2thZ2UuanNvbmAsIEJpb21lIHdpbGwgdXNlIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS4gRGVmYXVsdHMgdG8gXCJhdXRvXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9cIi5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2V4cGFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwYW5kPzogRXhwYW5kO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGZvcm1hdHRpbmcgc2hvdWxkIGJlIGFsbG93ZWQgdG8gcHJvY2VlZCBpZiBhIGdpdmVuIGZpbGVcbiAgICogaGFzIHN5bnRheCBlcnJvcnNcbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2Zvcm1hdFdpdGhFcnJvcnNcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdFdpdGhFcnJvcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gVGhlIGZvcm1hdHRlciB3aWxsIGluY2x1ZGUgZmlsZXMvZm9sZGVycyB0aGF0IHdpbGxcbiAgICogbWF0Y2ggdGhlc2UgcGF0dGVybnMuXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24sIDIgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIHRyYWlsaW5nIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIG9wdGlvbiB0byBgZmFsc2VgIGlzICoqaGlnaGx5IGRpc2NvdXJhZ2VkKiogYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSBtYW55IHByb2JsZW1zIHdpdGggb3RoZXIgdG9vbHM6XG4gICAqIC0gaHR0cHM6Ly90aG91Z2h0Ym90LmNvbS9ibG9nL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGVcbiAgICogLSBodHRwczovL2NhbGxtZXJ5YW4ubWVkaXVtLmNvbS9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlLW5hdmlnYXRpbmctZ2l0cy13YXJuaW5nLWZvci1hbmRyb2lkLWRldmVsb3BlcnMtYWYxNGU3M2RkODA0XG4gICAqIC0gaHR0cHM6Ly91bml4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8zNDU1NDgvaG93LXRvLWNhdC1maWxlcy10b2dldGhlci1hZGRpbmctbWlzc2luZy1uZXdsaW5lcy1hdC1lbmQtb2Ytc29tZS1maWxlc1xuICAgKlxuICAgKiBEaXNhYmxlIHRoZSBvcHRpb24gYXQgeW91ciBvd24gcmlzay5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIGFueSBgLmVkaXRvcmNvbmZpZ2AgZmlsZXMgdG8gY29uZmlndXJlIHRoZSBmb3JtYXR0ZXIuIENvbmZpZ3VyYXRpb25cbiAgICogaW4gYGJpb21lLmpzb25gIHdpbGwgb3ZlcnJpZGUgYC5lZGl0b3Jjb25maWdgIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIERlZmF1bHQ6IGBmYWxzZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN1c2VFZGl0b3Jjb25maWdcbiAgICovXG4gIHJlYWRvbmx5IHVzZUVkaXRvcmNvbmZpZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Gb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZVBvc2l0aW9uJzogb2JqLmF0dHJpYnV0ZVBvc2l0aW9uLFxuICAgICdicmFja2V0U2FtZUxpbmUnOiBvYmouYnJhY2tldFNhbWVMaW5lLFxuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdmb3JtYXRXaXRoRXJyb3JzJzogb2JqLmZvcm1hdFdpdGhFcnJvcnMsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gICAgJ3VzZUVkaXRvcmNvbmZpZyc6IG9iai51c2VFZGl0b3Jjb25maWcsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gR3JhcGhRTCBmaWxlc1xuICpcbiAqIEBzY2hlbWEgR3JhcGhxbENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaHFsQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBc3Npc3Qgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEdyYXBoUUwgZm9ybWF0dGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEdyYXBocWxDb25maWd1cmF0aW9uI2xpbnRlclxuICAgKi9cbiAgcmVhZG9ubHkgbGludGVyPzogR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyYXBocWxDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JhcGhxbENvbmZpZ3VyYXRpb24ob2JqOiBHcmFwaHFsQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9HcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZm9ybWF0dGVyJzogdG9Kc29uX0dyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdsaW50ZXInOiB0b0pzb25fR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gR3JpdFFMIGZpbGVzXG4gKlxuICogQHNjaGVtYSBHcml0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFzc2lzdCBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdENvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBHcml0QXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRm9ybWF0dGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRm9ybWF0dGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdENvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBHcml0TGludGVyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JpdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Hcml0Q29uZmlndXJhdGlvbihvYmo6IEdyaXRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0dyaXRBc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9Hcml0TGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBIVE1MIGZpbGVzXG4gKlxuICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBmdWxsIHN1cHBvcnQgZm9yIEhUTUwsIFZ1ZSwgU3ZlbHRlIGFuZCBBc3RybyBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNleHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhUTUwgZm9ybWF0dGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIVE1MIGxpbnRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBIdG1sTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogSFRNTCBwYXJzaW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEh0bWxQYXJzZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxDb25maWd1cmF0aW9uKG9iajogSHRtbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2V4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZCc6IG9iai5leHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWQsXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9IdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0h0bWxMaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICAgICdwYXJzZXInOiB0b0pzb25fSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIHNldCBvZiBvcHRpb25zIGFwcGxpZWQgdG8gdGhlIEphdmFTY3JpcHQgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBc3Npc3Qgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEpzQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBzdXBwb3J0IGZvciBlbWJlZGRpbmcgc25pcHBldHMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2V4cGVyaW1lbnRhbEVtYmVkZGVkU25pcHBldHNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBleHBlcmltZW50YWxFbWJlZGRlZFNuaXBwZXRzRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2JhbCBiaW5kaW5ncyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBhbmFseXplcnNcbiAgICpcbiAgICogSWYgZGVmaW5lZCBoZXJlLCB0aGV5IHNob3VsZCBub3QgZW1pdCBkaWFnbm9zdGljcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jZ2xvYmFsc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgcnVudGltZSBvciB0cmFuc2Zvcm1hdGlvbiB1c2VkIGZvciBpbnRlcnByZXRpbmcgSlNYLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNqc3hSdW50aW1lXG4gICAqL1xuICByZWFkb25seSBqc3hSdW50aW1lPzogSnN4UnVudGltZTtcblxuICAvKipcbiAgICogTGludGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBKc0xpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFBhcnNpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEpzUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNDb25maWd1cmF0aW9uKG9iajogSnNDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0pzQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZXhwZXJpbWVudGFsRW1iZWRkZWRTbmlwcGV0c0VuYWJsZWQnOiBvYmouZXhwZXJpbWVudGFsRW1iZWRkZWRTbmlwcGV0c0VuYWJsZWQsXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Kc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dsb2JhbHMnOiBvYmouZ2xvYmFscz8ubWFwKHkgPT4geSksXG4gICAgJ2pzeFJ1bnRpbWUnOiBvYmouanN4UnVudGltZSxcbiAgICAnbGludGVyJzogdG9Kc29uX0pzTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0pzUGFyc2VyQ29uZmlndXJhdGlvbihvYmoucGFyc2VyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBKU09OIGZpbGVzXG4gKlxuICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFzc2lzdCBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBKc29uQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRm9ybWF0dGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogTGludGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBKc29uTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogUGFyc2luZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jcGFyc2VyXG4gICAqL1xuICByZWFkb25seSBwYXJzZXI/OiBKc29uUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uQ29uZmlndXJhdGlvbihvYmo6IEpzb25Db25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0pzb25Bc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9Kc29uTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0pzb25QYXJzZXJDb25maWd1cmF0aW9uKG9iai5wYXJzZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZG9tYWlucywgYW5kIHRoZSB2YWx1ZXMgYXJlIGBhbGxgLCBgcmVjb21tZW5kZWRgLCBvciBgbm9uZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgTGludGVyQ29uZmlndXJhdGlvbiNkb21haW5zXG4gICAqL1xuICByZWFkb25seSBkb21haW5zPzogeyBba2V5OiBzdHJpbmddOiBSdWxlRG9tYWluVmFsdWUgfTtcblxuICAvKipcbiAgICogaWYgYGZhbHNlYCwgaXQgZGlzYWJsZXMgdGhlIGZlYXR1cmUgYW5kIHRoZSBsaW50ZXIgd29uJ3QgYmUgZXhlY3V0ZWQuIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEBzY2hlbWEgTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIFRoZSBhbmFseXplciB3aWxsIGhhbmRsZSBvbmx5IHRob3NlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsXG4gICAqIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIExpbnRlckNvbmZpZ3VyYXRpb24jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcnVsZXNcbiAgICpcbiAgICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fTGludGVyQ29uZmlndXJhdGlvbihvYmo6IExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkb21haW5zJzogKChvYmouZG9tYWlucykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRvbWFpbnMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAncnVsZXMnOiB0b0pzb25fUnVsZXMob2JqLnJ1bGVzKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnJpZGVQYXR0ZXJuIHtcbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgQ1NTIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Nzc1xuICAgKi9cbiAgcmVhZG9ubHkgY3NzPzogQ3NzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGZpbGVzeXN0ZW1cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzPzogT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgR3JhcGhxbCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNncmFwaHFsXG4gICAqL1xuICByZWFkb25seSBncmFwaHFsPzogR3JhcGhxbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcml0UUwgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZ3JpdFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JpdD86IEdyaXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgR3JpdFFMIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2h0bWxcbiAgICovXG4gIHJlYWRvbmx5IGh0bWw/OiBIdG1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIEJpb21lIHdpbGwgaW5jbHVkZSBmaWxlcy9mb2xkZXJzIHRoYXQgd2lsbFxuICAgKiBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2phdmFzY3JpcHRcbiAgICovXG4gIHJlYWRvbmx5IGphdmFzY3JpcHQ/OiBKc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBKc29uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEpzb24gbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGFkZGl0aW9uYWwgcGx1Z2luc1xuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNwbHVnaW5zXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlUGF0dGVybicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlUGF0dGVybihvYmo6IE92ZXJyaWRlUGF0dGVybiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9PdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Nzcyc6IHRvSnNvbl9Dc3NDb25maWd1cmF0aW9uKG9iai5jc3MpLFxuICAgICdmaWxlcyc6IHRvSnNvbl9PdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbihvYmouZmlsZXMpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdncmFwaHFsJzogdG9Kc29uX0dyYXBocWxDb25maWd1cmF0aW9uKG9iai5ncmFwaHFsKSxcbiAgICAnZ3JpdCc6IHRvSnNvbl9Hcml0Q29uZmlndXJhdGlvbihvYmouZ3JpdCksXG4gICAgJ2h0bWwnOiB0b0pzb25fSHRtbENvbmZpZ3VyYXRpb24ob2JqLmh0bWwpLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gICAgJ2phdmFzY3JpcHQnOiB0b0pzb25fSnNDb25maWd1cmF0aW9uKG9iai5qYXZhc2NyaXB0KSxcbiAgICAnanNvbic6IHRvSnNvbl9Kc29uQ29uZmlndXJhdGlvbihvYmouanNvbiksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9PdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ3BsdWdpbnMnOiBvYmoucGx1Z2lucz8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTZXQgb2YgcHJvcGVydGllcyB0byBpbnRlZ3JhdGUgQmlvbWUgd2l0aCBhIFZDUyBzb2Z0d2FyZS5cbiAqXG4gKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWY3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBraW5kIG9mIGNsaWVudC5cbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI2NsaWVudEtpbmRcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudEtpbmQ/OiBWY3NDbGllbnRLaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFpbiBicmFuY2ggb2YgdGhlIHByb2plY3RcbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI2RlZmF1bHRCcmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRCcmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgQmlvbWUgc2hvdWxkIGludGVncmF0ZSBpdHNlbGYgd2l0aCB0aGUgVkNTIGNsaWVudFxuICAgKlxuICAgKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2hlcmUgQmlvbWUgc2hvdWxkIGNoZWNrIGZvciBWQ1MgZmlsZXMuIEJ5IGRlZmF1bHQsIEJpb21lIHdpbGwgdXNlIHRoZSBzYW1lXG4gICAqIGZvbGRlciB3aGVyZSBgYmlvbWUuanNvbmAgd2FzIGZvdW5kLlxuICAgKlxuICAgKiBJZiBCaW9tZSBjYW4ndCBmaW5kIHRoZSBjb25maWd1cmF0aW9uLCBpdCB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKiBJZiBubyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGNhbid0IGJlIGZvdW5kLCBCaW9tZSB3b24ndCB1c2UgdGhlIFZDUyBpbnRlZ3JhdGlvbiwgYW5kIGEgZGlhZ25vc3RpY1xuICAgKiB3aWxsIGJlIGVtaXR0ZWRcbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI3Jvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgQmlvbWUgc2hvdWxkIHVzZSB0aGUgVkNTIGlnbm9yZSBmaWxlLiBXaGVuIFt0cnVlXSwgQmlvbWUgd2lsbCBpZ25vcmUgdGhlIGZpbGVzXG4gICAqIHNwZWNpZmllZCBpbiB0aGUgaWdub3JlIGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvbiN1c2VJZ25vcmVGaWxlXG4gICAqL1xuICByZWFkb25seSB1c2VJZ25vcmVGaWxlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVmNzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1Zjc0NvbmZpZ3VyYXRpb24ob2JqOiBWY3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY2xpZW50S2luZCc6IG9iai5jbGllbnRLaW5kLFxuICAgICdkZWZhdWx0QnJhbmNoJzogb2JqLmRlZmF1bHRCcmFuY2gsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAncm9vdCc6IG9iai5yb290LFxuICAgICd1c2VJZ25vcmVGaWxlJzogb2JqLnVzZUlnbm9yZUZpbGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEFjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25zIHtcbiAgLyoqXG4gICAqIEl0IGVuYWJsZXMgdGhlIGFzc2lzdCBhY3Rpb25zIHJlY29tbWVuZGVkIGJ5IEJpb21lLiBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogQHNjaGVtYSBBY3Rpb25zI3JlY29tbWVuZGVkXG4gICAqL1xuICByZWFkb25seSByZWNvbW1lbmRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQWN0aW9ucyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IFNvdXJjZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQWN0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0FjdGlvbnMob2JqOiBBY3Rpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3NvdXJjZSc6IHRvSnNvbl9Tb3VyY2Uob2JqLnNvdXJjZSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIENTUyBhc3Npc3QgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgQ3NzQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzc0Fzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgYXNzaXN0IGZvciBDU1MgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBDc3NBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBDU1MgZm9ybWF0dGVyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgQ1NTIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIENTUyAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVkIHRvIENTUyAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0IHRvIDIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gQ1NTIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIGBhdXRvYCB1c2VzIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIENTUyAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcXVvdGVzIHVzZWQgaW4gQ1NTIGNvZGUuIERlZmF1bHRzIHRvIGRvdWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZG91YmxlLlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jcXVvdGVTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVvdGVTdHlsZT86IFF1b3RlU3R5bGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgaXMgKipoaWdobHkgZGlzY291cmFnZWQqKiBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIG1hbnkgcHJvYmxlbXMgd2l0aCBvdGhlciB0b29sczpcbiAgICogLSBodHRwczovL3Rob3VnaHRib3QuY29tL2Jsb2cvbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZVxuICAgKiAtIGh0dHBzOi8vY2FsbG1lcnlhbi5tZWRpdW0uY29tL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGUtbmF2aWdhdGluZy1naXRzLXdhcm5pbmctZm9yLWFuZHJvaWQtZGV2ZWxvcGVycy1hZjE0ZTczZGQ4MDRcbiAgICogLSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzM0NTU0OC9ob3ctdG8tY2F0LWZpbGVzLXRvZ2V0aGVyLWFkZGluZy1taXNzaW5nLW5ld2xpbmVzLWF0LWVuZC1vZi1zb21lLWZpbGVzXG4gICAqXG4gICAqIERpc2FibGUgdGhlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdxdW90ZVN0eWxlJzogb2JqLnF1b3RlU3R5bGUsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIENTUyBsaW50ZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgQ3NzTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzc0xpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBDU1MgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBDU1MgcGFyc2VyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIENzc1BhcnNlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NQYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFsbG93IGNvbW1lbnRzIHRvIGFwcGVhciBvbiBpbmNvcnJlY3QgbGluZXMgaW4gYC5jc3NgIGZpbGVzXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzUGFyc2VyQ29uZmlndXJhdGlvbiNhbGxvd1dyb25nTGluZUNvbW1lbnRzXG4gICAqL1xuICByZWFkb25seSBhbGxvd1dyb25nTGluZUNvbW1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBwYXJzaW5nIG9mIENTUyBNb2R1bGVzIHNwZWNpZmljIGZlYXR1cmVzLiBFbmFibGUgdGhpcyBmZWF0dXJlIG9ubHlcbiAgICogd2hlbiB5b3VyIGZpbGVzIGRvbid0IGVuZCBpbiBgLm1vZHVsZS5jc3NgLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc1BhcnNlckNvbmZpZ3VyYXRpb24jY3NzTW9kdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgY3NzTW9kdWxlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcGFyc2luZyBvZiBUYWlsd2luZCBDU1MgNC4wIGRpcmVjdGl2ZXMgYW5kIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uI3RhaWx3aW5kRGlyZWN0aXZlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFpbHdpbmREaXJlY3RpdmVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NQYXJzZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWxsb3dXcm9uZ0xpbmVDb21tZW50cyc6IG9iai5hbGxvd1dyb25nTGluZUNvbW1lbnRzLFxuICAgICdjc3NNb2R1bGVzJzogb2JqLmNzc01vZHVsZXMsXG4gICAgJ3RhaWx3aW5kRGlyZWN0aXZlcyc6IG9iai50YWlsd2luZERpcmVjdGl2ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEF0dHJpYnV0ZVBvc2l0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIEF0dHJpYnV0ZVBvc2l0aW9uIHtcbiAgLyoqIGF1dG8gKi9cbiAgQVVUTyA9IFwiYXV0b1wiLFxuICAvKiogbXVsdGlsaW5lICovXG4gIE1VTFRJTElORSA9IFwibXVsdGlsaW5lXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBFeHBhbmRcbiAqL1xuZXhwb3J0IGVudW0gRXhwYW5kIHtcbiAgLyoqIE9iamVjdHMgYXJlIGV4cGFuZGVkIHdoZW4gdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIGxlYWRpbmcgbmV3bGluZS4gQXJyYXlzIGFyZSBhbHdheXNcbmV4cGFuZGVkIGlmIHRoZXkgYXJlIHNob3J0ZXIgdGhhbiB0aGUgbGluZSB3aWR0aC4gKGF1dG8pICovXG4gIEFVVE8gPSBcImF1dG9cIixcbiAgLyoqIE9iamVjdHMgYW5kIGFycmF5cyBhcmUgYWx3YXlzIGV4cGFuZGVkLiAoYWx3YXlzKSAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxuICAvKiogT2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBuZXZlciBleHBhbmRlZCwgaWYgdGhleSBhcmUgc2hvcnRlciB0aGFuIHRoZSBsaW5lIHdpZHRoLiAobmV2ZXIpICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgSW5kZW50U3R5bGVcbiAqL1xuZXhwb3J0IGVudW0gSW5kZW50U3R5bGUge1xuICAvKiogSW5kZW50IHdpdGggVGFiICh0YWIpICovXG4gIFRBQiA9IFwidGFiXCIsXG4gIC8qKiBJbmRlbnQgd2l0aCBTcGFjZSAoc3BhY2UpICovXG4gIFNQQUNFID0gXCJzcGFjZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgTGluZUVuZGluZ1xuICovXG5leHBvcnQgZW51bSBMaW5lRW5kaW5nIHtcbiAgLyoqIExpbmUgRmVlZCBvbmx5IChcXG4pLCBjb21tb24gb24gTGludXggYW5kIG1hY09TIGFzIHdlbGwgYXMgaW5zaWRlIGdpdCByZXBvcyAobGYpICovXG4gIExGID0gXCJsZlwiLFxuICAvKiogQ2FycmlhZ2UgUmV0dXJuICsgTGluZSBGZWVkIGNoYXJhY3RlcnMgKFxcclxcbiksIGNvbW1vbiBvbiBXaW5kb3dzIChjcmxmKSAqL1xuICBDUkxGID0gXCJjcmxmXCIsXG4gIC8qKiBDYXJyaWFnZSBSZXR1cm4gY2hhcmFjdGVyIG9ubHkgKFxcciksIHVzZWQgdmVyeSByYXJlbHkgKGNyKSAqL1xuICBDUiA9IFwiY3JcIixcbiAgLyoqIEF1dG9tYXRpY2FsbHkgdXNlIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zIChhdXRvKSAqL1xuICBBVVRPID0gXCJhdXRvXCIsXG59XG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBHcmFwaFFMIGxpbnRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9HcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBHcmFwaFFMIGZvcm1hdHRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBhcm91bmQgYnJhY2tldHMgaW4gb2JqZWN0IGxpdGVyYWxzLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuIERlZmF1bHQgdG8gMi5cbiAgICpcbiAgICogQGRlZmF1bHQgMi5cbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gR3JhcGhRTCBmaWxlcy4gYGF1dG9gIHVzZXMgQ1JMRiBvbiBXaW5kb3dzIGFuZCBMRiBvbiBvdGhlciBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcXVvdGVzIHVzZWQgaW4gR3JhcGhRTCBjb2RlLiBEZWZhdWx0cyB0byBkb3VibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZS5cbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBxdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gYGZhbHNlYCBpcyAqKmhpZ2hseSBkaXNjb3VyYWdlZCoqIGJlY2F1c2UgaXQgY291bGQgY2F1c2UgbWFueSBwcm9ibGVtcyB3aXRoIG90aGVyIHRvb2xzOlxuICAgKiAtIGh0dHBzOi8vdGhvdWdodGJvdC5jb20vYmxvZy9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlXG4gICAqIC0gaHR0cHM6Ly9jYWxsbWVyeWFuLm1lZGl1bS5jb20vbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZS1uYXZpZ2F0aW5nLWdpdHMtd2FybmluZy1mb3ItYW5kcm9pZC1kZXZlbG9wZXJzLWFmMTRlNzNkZDgwNFxuICAgKiAtIGh0dHBzOi8vdW5peC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMzQ1NTQ4L2hvdy10by1jYXQtZmlsZXMtdG9nZXRoZXItYWRkaW5nLW1pc3NpbmctbmV3bGluZXMtYXQtZW5kLW9mLXNvbWUtZmlsZXNcbiAgICpcbiAgICogRGlzYWJsZSB0aGUgb3B0aW9uIGF0IHlvdXIgb3duIHJpc2suXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAncXVvdGVTdHlsZSc6IG9iai5xdW90ZVN0eWxlLFxuICAgICd0cmFpbGluZ05ld2xpbmUnOiBvYmoudHJhaWxpbmdOZXdsaW5lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEdyYXBoUUwgbGludGVyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9HcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBHcml0QXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGFzc2lzdCBmdW5jdGlvbmFsaXR5IGZvciBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcml0QXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyaXRBc3Npc3RDb25maWd1cmF0aW9uKG9iajogR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gR3JpdCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gR3JpdCBmaWxlcy4gRGVmYXVsdCB0byAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyLlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcgYXBwbGllZCB0byBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUgYXBwbGllZCB0byBHcml0IGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgaXMgKipoaWdobHkgZGlzY291cmFnZWQqKiBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIG1hbnkgcHJvYmxlbXMgd2l0aCBvdGhlciB0b29sczpcbiAgICogLSBodHRwczovL3Rob3VnaHRib3QuY29tL2Jsb2cvbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZVxuICAgKiAtIGh0dHBzOi8vY2FsbG1lcnlhbi5tZWRpdW0uY29tL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGUtbmF2aWdhdGluZy1naXRzLXdhcm5pbmctZm9yLWFuZHJvaWQtZGV2ZWxvcGVycy1hZjE0ZTczZGQ4MDRcbiAgICogLSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzM0NTU0OC9ob3ctdG8tY2F0LWZpbGVzLXRvZ2V0aGVyLWFkZGluZy1taXNzaW5nLW5ld2xpbmVzLWF0LWVuZC1vZi1zb21lLWZpbGVzXG4gICAqXG4gICAqIERpc2FibGUgdGhlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Hcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAndHJhaWxpbmdOZXdsaW5lJzogb2JqLnRyYWlsaW5nTmV3bGluZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgR3JpdExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcml0TGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBsaW50ZXIgZm9yIEdyaXQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdExpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdExpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBHcml0TGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSFRNTCBhc3Npc3QgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSHRtbEFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBhc3Npc3QgZm9yIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEh0bWxBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBIVE1MIGZvcm1hdHRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGUgcG9zaXRpb24gc3R5bGUgaW4gSFRNTCBlbGVtZW50cy4gRGVmYXVsdHMgdG8gYXV0by5cbiAgICpcbiAgICogQGRlZmF1bHQgYXV0by5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBodWcgdGhlIGNsb3NpbmcgYnJhY2tldCBvZiBtdWx0aWxpbmUgSFRNTCB0YWdzIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSwgcmF0aGVyIHRoYW4gYmVpbmcgYWxvbmUgb24gdGhlIGZvbGxvd2luZyBsaW5lLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBmb3JtYXR0ZXIgZm9yIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmRlbnQgdGhlIGA8c2NyaXB0PmAgYW5kIGA8c3R5bGU+YCB0YWdzIGZvciBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTY3JpcHRBbmRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U2NyaXB0QW5kU3R5bGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHQgdG8gMi5cbiAgICpcbiAgICogQGRlZmF1bHQgMi5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBgYXV0b2AgdXNlcyBDUkxGIG9uIFdpbmRvd3MgYW5kIExGIG9uIG90aGVyIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdm9pZCBlbGVtZW50cyBzaG91bGQgYmUgc2VsZi1jbG9zZWQuIERlZmF1bHRzIHRvIG5ldmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBuZXZlci5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNzZWxmQ2xvc2VWb2lkRWxlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHNlbGZDbG9zZVZvaWRFbGVtZW50cz86IFNlbGZDbG9zZVZvaWRFbGVtZW50cztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gYGZhbHNlYCBpcyAqKmhpZ2hseSBkaXNjb3VyYWdlZCoqIGJlY2F1c2UgaXQgY291bGQgY2F1c2UgbWFueSBwcm9ibGVtcyB3aXRoIG90aGVyIHRvb2xzOlxuICAgKiAtIGh0dHBzOi8vdGhvdWdodGJvdC5jb20vYmxvZy9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlXG4gICAqIC0gaHR0cHM6Ly9jYWxsbWVyeWFuLm1lZGl1bS5jb20vbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZS1uYXZpZ2F0aW5nLWdpdHMtd2FybmluZy1mb3ItYW5kcm9pZC1kZXZlbG9wZXJzLWFmMTRlNzNkZDgwNFxuICAgKiAtIGh0dHBzOi8vdW5peC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMzQ1NTQ4L2hvdy10by1jYXQtZmlsZXMtdG9nZXRoZXItYWRkaW5nLW1pc3NpbmctbmV3bGluZXMtYXQtZW5kLW9mLXNvbWUtZmlsZXNcbiAgICpcbiAgICogRGlzYWJsZSB0aGUgb3B0aW9uIGF0IHlvdXIgb3duIHJpc2suXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFjY291bnQgZm9yIHdoaXRlc3BhY2Ugc2Vuc2l0aXZpdHkgd2hlbiBmb3JtYXR0aW5nIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKS4gRGVmYXVsdHMgdG8gXCJjc3NcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgY3NzXCIuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jd2hpdGVzcGFjZVNlbnNpdGl2aXR5XG4gICAqL1xuICByZWFkb25seSB3aGl0ZXNwYWNlU2Vuc2l0aXZpdHk/OiBXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0h0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZVBvc2l0aW9uJzogb2JqLmF0dHJpYnV0ZVBvc2l0aW9uLFxuICAgICdicmFja2V0U2FtZUxpbmUnOiBvYmouYnJhY2tldFNhbWVMaW5lLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFNjcmlwdEFuZFN0eWxlJzogb2JqLmluZGVudFNjcmlwdEFuZFN0eWxlLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAnc2VsZkNsb3NlVm9pZEVsZW1lbnRzJzogb2JqLnNlbGZDbG9zZVZvaWRFbGVtZW50cyxcbiAgICAndHJhaWxpbmdOZXdsaW5lJzogb2JqLnRyYWlsaW5nTmV3bGluZSxcbiAgICAnd2hpdGVzcGFjZVNlbnNpdGl2aXR5Jzogb2JqLndoaXRlc3BhY2VTZW5zaXRpdml0eSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSFRNTCBsaW50ZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSHRtbExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBsaW50ZXIgZm9yIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbExpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEh0bWxMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBIVE1MIHBhcnNlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBIdG1sUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxQYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBhcnNpbmcgb2YgZG91YmxlIHRleHQgZXhwcmVzc2lvbnMgc3VjaCBhcyBge3sgZXhwcmVzc2lvbiB9fWAgaW5zaWRlIGAuaHRtbGAgZmlsZXNcbiAgICpcbiAgICogQHNjaGVtYSBIdG1sUGFyc2VyQ29uZmlndXJhdGlvbiNpbnRlcnBvbGF0aW9uXG4gICAqL1xuICByZWFkb25seSBpbnRlcnBvbGF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sUGFyc2VyQ29uZmlndXJhdGlvbihvYmo6IEh0bWxQYXJzZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaW50ZXJwb2xhdGlvbic6IG9iai5pbnRlcnBvbGF0aW9uLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQXNzaXN0IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEphdmFTY3JpcHQgYXNzaXN0XG4gKlxuICogQHNjaGVtYSBKc0Fzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc0Fzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgYXNzaXN0IGZvciBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc0Fzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBKc0Fzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBGb3JtYXR0aW5nIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEphdmFTY3JpcHQgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBub24tbmVjZXNzYXJ5IHBhcmVudGhlc2VzIHRvIGFycm93IGZ1bmN0aW9ucy4gRGVmYXVsdHMgdG8gXCJhbHdheXNcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYWx3YXlzXCIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2Fycm93UGFyZW50aGVzZXNcbiAgICovXG4gIHJlYWRvbmx5IGFycm93UGFyZW50aGVzZXM/OiBBcnJvd1BhcmVudGhlc2VzO1xuXG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlIGluIEpTWCBlbGVtZW50cy4gRGVmYXVsdHMgdG8gYXV0by5cbiAgICpcbiAgICogQGRlZmF1bHQgYXV0by5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jYXR0cmlidXRlUG9zaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZVBvc2l0aW9uPzogQXR0cmlidXRlUG9zaXRpb247XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaHVnIHRoZSBjbG9zaW5nIGJyYWNrZXQgb2YgbXVsdGlsaW5lIEhUTUwvSlNYIHRhZ3MgdG8gdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lLCByYXRoZXIgdGhhbiBiZWluZyBhbG9uZSBvbiB0aGUgZm9sbG93aW5nIGxpbmUuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCBzcGFjZXMgYXJvdW5kIGJyYWNrZXRzIGluIG9iamVjdCBsaXRlcmFscy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4cGFuZCBhcnJheXMgYW5kIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMuXG4gICAqIFdoZW4gc2V0IHRvIGBhdXRvYCwgb2JqZWN0IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsXG4gICAqIGFuZCBhcnJheSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBzZXQgdG8gYGFsd2F5c2AsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMsIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIG9mIHRoZSBsaXN0LlxuICAgKiBXaGVuIHNldCB0byBgbmV2ZXJgLCB0aGVzZSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBmb3JtYXR0aW5nIGBwYWNrYWdlLmpzb25gLCBCaW9tZSB3aWxsIHVzZSBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuIERlZmF1bHRzIHRvIFwiYXV0b1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvXCIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2V4cGFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwYW5kPzogRXhwYW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0IHRvIDIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcXVvdGVzIHVzZWQgaW4gSlNYLiBEZWZhdWx0cyB0byBkb3VibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZS5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24janN4UXVvdGVTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkganN4UXVvdGVTdHlsZT86IFF1b3RlU3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBgYXV0b2AgdXNlcyBDUkxGIG9uIFdpbmRvd3MgYW5kIExGIG9uIG90aGVyIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIEphdmFTY3JpcHQgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gRGVmYXVsdHMgdG8gODAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDgwLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hlbiBicmVha2luZyBiaW5hcnkgZXhwcmVzc2lvbnMgaW50byBtdWx0aXBsZSBsaW5lcywgd2hldGhlciB0byBicmVhayB0aGVtIGJlZm9yZSBvciBhZnRlciB0aGUgYmluYXJ5IG9wZXJhdG9yLiBEZWZhdWx0cyB0byBcImFmdGVyXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFmdGVyXCIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI29wZXJhdG9yTGluZWJyZWFrXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRvckxpbmVicmVhaz86IE9wZXJhdG9yTGluZWJyZWFrO1xuXG4gIC8qKlxuICAgKiBXaGVuIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBhcmUgcXVvdGVkLiBEZWZhdWx0cyB0byBhc05lZWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYXNOZWVkZWQuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3F1b3RlUHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcXVvdGVQcm9wZXJ0aWVzPzogUXVvdGVQcm9wZXJ0aWVzO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBxdW90ZXMgdXNlZCBpbiBKYXZhU2NyaXB0IGNvZGUuIERlZmF1bHRzIHRvIGRvdWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZG91YmxlLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBxdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZm9ybWF0dGVyIHByaW50cyBzZW1pY29sb25zIGZvciBhbGwgc3RhdGVtZW50cyBvciBvbmx5IGluIGZvciBzdGF0ZW1lbnRzIHdoZXJlIGl0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIEFTSS5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jc2VtaWNvbG9uc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VtaWNvbG9ucz86IFNlbWljb2xvbnM7XG5cbiAgLyoqXG4gICAqIFByaW50IHRyYWlsaW5nIGNvbW1hcyB3aGVyZXZlciBwb3NzaWJsZSBpbiBtdWx0aS1saW5lIGNvbW1hLXNlcGFyYXRlZCBzeW50YWN0aWMgc3RydWN0dXJlcy4gRGVmYXVsdHMgdG8gXCJhbGxcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYWxsXCIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IEpzVHJhaWxpbmdDb21tYXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgaXMgKipoaWdobHkgZGlzY291cmFnZWQqKiBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIG1hbnkgcHJvYmxlbXMgd2l0aCBvdGhlciB0b29sczpcbiAgICogLSBodHRwczovL3Rob3VnaHRib3QuY29tL2Jsb2cvbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZVxuICAgKiAtIGh0dHBzOi8vY2FsbG1lcnlhbi5tZWRpdW0uY29tL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGUtbmF2aWdhdGluZy1naXRzLXdhcm5pbmctZm9yLWFuZHJvaWQtZGV2ZWxvcGVycy1hZjE0ZTczZGQ4MDRcbiAgICogLSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzM0NTU0OC9ob3ctdG8tY2F0LWZpbGVzLXRvZ2V0aGVyLWFkZGluZy1taXNzaW5nLW5ld2xpbmVzLWF0LWVuZC1vZi1zb21lLWZpbGVzXG4gICAqXG4gICAqIERpc2FibGUgdGhlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fycm93UGFyZW50aGVzZXMnOiBvYmouYXJyb3dQYXJlbnRoZXNlcyxcbiAgICAnYXR0cmlidXRlUG9zaXRpb24nOiBvYmouYXR0cmlidXRlUG9zaXRpb24sXG4gICAgJ2JyYWNrZXRTYW1lTGluZSc6IG9iai5icmFja2V0U2FtZUxpbmUsXG4gICAgJ2JyYWNrZXRTcGFjaW5nJzogb2JqLmJyYWNrZXRTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2V4cGFuZCc6IG9iai5leHBhbmQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnanN4UXVvdGVTdHlsZSc6IG9iai5qc3hRdW90ZVN0eWxlLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ29wZXJhdG9yTGluZWJyZWFrJzogb2JqLm9wZXJhdG9yTGluZWJyZWFrLFxuICAgICdxdW90ZVByb3BlcnRpZXMnOiBvYmoucXVvdGVQcm9wZXJ0aWVzLFxuICAgICdxdW90ZVN0eWxlJzogb2JqLnF1b3RlU3R5bGUsXG4gICAgJ3NlbWljb2xvbnMnOiBvYmouc2VtaWNvbG9ucyxcbiAgICAndHJhaWxpbmdDb21tYXMnOiBvYmoudHJhaWxpbmdDb21tYXMsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgcnVudGltZSBvciB0cmFuc2Zvcm1hdGlvbiB1c2VkIGZvciBpbnRlcnByZXRpbmcgSlNYLlxuICpcbiAqIEBzY2hlbWEgSnN4UnVudGltZVxuICovXG5leHBvcnQgZW51bSBKc3hSdW50aW1lIHtcbiAgLyoqIEluZGljYXRlcyBhIG1vZGVybiBvciBuYXRpdmUgSlNYIGVudmlyb25tZW50LCB0aGF0IGRvZXNuJ3QgcmVxdWlyZVxuc3BlY2lhbCBoYW5kbGluZyBieSBCaW9tZS4gKHRyYW5zcGFyZW50KSAqL1xuICBUUkFOU1BBUkVOVCA9IFwidHJhbnNwYXJlbnRcIixcbiAgLyoqIEluZGljYXRlcyBhIGNsYXNzaWMgUmVhY3QgZW52aXJvbm1lbnQgdGhhdCByZXF1aXJlcyB0aGUgYFJlYWN0YCBpbXBvcnQuXG5cbkNvcnJlc3BvbmRzIHRvIHRoZSBgcmVhY3RgIHZhbHVlIGZvciB0aGUgYGpzeGAgb3B0aW9uIGluIFR5cGVTY3JpcHQnc1xuYHRzY29uZmlnLmpzb25gLlxuXG5UaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaWYgeW91IGNhbm5vdCB1cGdyYWRlIHRvIGEgUmVhY3RcbnZlcnNpb24gdGhhdCBzdXBwb3J0cyB0aGUgbmV3IEpTWCBydW50aW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dFxudGhlIG9sZCB2cy4gbmV3IEpTWCBydW50aW1lLCBwbGVhc2Ugc2VlOlxuPGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAyMC8wOS8yMi9pbnRyb2R1Y2luZy10aGUtbmV3LWpzeC10cmFuc2Zvcm0uaHRtbD4gKHJlYWN0Q2xhc3NpYykgKi9cbiAgUkVBQ1RfQ0xBU1NJQyA9IFwicmVhY3RDbGFzc2ljXCIsXG59XG5cbi8qKlxuICogTGludGVyIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEphdmFTY3JpcHQgbGludGVyXG4gKlxuICogQHNjaGVtYSBKc0xpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc0xpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc0xpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBKc0xpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIEphdmFTY3JpcHQgcGFyc2VyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIEpzUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnNpbmcgb2YgR3JpdCBtZXRhdmFyaWFibGVzLlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZWAuXG4gICAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uI2dyaXRNZXRhdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBncml0TWV0YXZhcmlhYmxlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgZmlsZXMgbGlrZSBgLmpzYC9gLm1qc2AvYC5janNgIG1heSBjb250YWluIEpTWCBzeW50YXguXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZWAuXG4gICAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uI2pzeEV2ZXJ5d2hlcmVcbiAgICovXG4gIHJlYWRvbmx5IGpzeEV2ZXJ5d2hlcmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJdCBlbmFibGVzIHRoZSBleHBlcmltZW50YWwgYW5kIHVuc2FmZSBwYXJzaW5nIG9mIHBhcmFtZXRlciBkZWNvcmF0b3JzXG4gICAqXG4gICAqIFRoZXNlIGRlY29yYXRvcnMgYmVsb25nIHRvIGFuIG9sZCBwcm9wb3NhbCwgYW5kIHRoZXkgYXJlIHN1YmplY3QgdG8gY2hhbmdlLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzUGFyc2VyQ29uZmlndXJhdGlvbiN1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgdW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc1BhcnNlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBKc1BhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdncml0TWV0YXZhcmlhYmxlcyc6IG9iai5ncml0TWV0YXZhcmlhYmxlcyxcbiAgICAnanN4RXZlcnl3aGVyZSc6IG9iai5qc3hFdmVyeXdoZXJlLFxuICAgICd1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCc6IG9iai51bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEFzc2lzdCBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBKU09OIGxpbnRlclxuICpcbiAqIEBzY2hlbWEgSnNvbkFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBhc3Npc3QgZm9yIEpTT04gKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEpzb25Bc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBhcm91bmQgYnJhY2tldHMgaW4gb2JqZWN0IGxpdGVyYWxzLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgSlNPTiAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4cGFuZCBhcnJheXMgYW5kIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMuXG4gICAqIFdoZW4gc2V0IHRvIGBhdXRvYCwgb2JqZWN0IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsXG4gICAqIGFuZCBhcnJheSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBzZXQgdG8gYGFsd2F5c2AsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMsIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIG9mIHRoZSBsaXN0LlxuICAgKiBXaGVuIHNldCB0byBgbmV2ZXJgLCB0aGVzZSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBmb3JtYXR0aW5nIGBwYWNrYWdlLmpzb25gLCBCaW9tZSB3aWxsIHVzZSBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuIERlZmF1bHRzIHRvIFwiYXV0b1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvXCIuXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVkIHRvIEpTT04gKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gRGVmYXVsdCB0byAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcgYXBwbGllZCB0byBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIGBhdXRvYCB1c2VzIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUgYXBwbGllZCB0byBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpLWxpbmUgY29tbWEtc2VwYXJhdGVkIHN5bnRhY3RpYyBzdHJ1Y3R1cmVzLiBEZWZhdWx0cyB0byBcIm5vbmVcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZVwiLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IEpzb25UcmFpbGluZ0NvbW1hcztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gYGZhbHNlYCBpcyAqKmhpZ2hseSBkaXNjb3VyYWdlZCoqIGJlY2F1c2UgaXQgY291bGQgY2F1c2UgbWFueSBwcm9ibGVtcyB3aXRoIG90aGVyIHRvb2xzOlxuICAgKiAtIGh0dHBzOi8vdGhvdWdodGJvdC5jb20vYmxvZy9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlXG4gICAqIC0gaHR0cHM6Ly9jYWxsbWVyeWFuLm1lZGl1bS5jb20vbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZS1uYXZpZ2F0aW5nLWdpdHMtd2FybmluZy1mb3ItYW5kcm9pZC1kZXZlbG9wZXJzLWFmMTRlNzNkZDgwNFxuICAgKiAtIGh0dHBzOi8vdW5peC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMzQ1NTQ4L2hvdy10by1jYXQtZmlsZXMtdG9nZXRoZXItYWRkaW5nLW1pc3NpbmctbmV3bGluZXMtYXQtZW5kLW9mLXNvbWUtZmlsZXNcbiAgICpcbiAgICogRGlzYWJsZSB0aGUgb3B0aW9uIGF0IHlvdXIgb3duIHJpc2suXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAndHJhaWxpbmdDb21tYXMnOiBvYmoudHJhaWxpbmdDb21tYXMsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBMaW50ZXIgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgSlNPTiBsaW50ZXJcbiAqXG4gKiBAc2NoZW1hIEpzb25MaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzb25MaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBKc29uTGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSlNPTiBwYXJzZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSnNvblBhcnNlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbGxvdyBwYXJzaW5nIGNvbW1lbnRzIGluIGAuanNvbmAgZmlsZXNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiNhbGxvd0NvbW1lbnRzXG4gICAqL1xuICByZWFkb25seSBhbGxvd0NvbW1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgcGFyc2luZyB0cmFpbGluZyBjb21tYXMgaW4gYC5qc29uYCBmaWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzb25QYXJzZXJDb25maWd1cmF0aW9uI2FsbG93VHJhaWxpbmdDb21tYXNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93VHJhaWxpbmdDb21tYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25QYXJzZXJDb25maWd1cmF0aW9uKG9iajogSnNvblBhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhbGxvd0NvbW1lbnRzJzogb2JqLmFsbG93Q29tbWVudHMsXG4gICAgJ2FsbG93VHJhaWxpbmdDb21tYXMnOiBvYmouYWxsb3dUcmFpbGluZ0NvbW1hcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUnVsZURvbWFpblZhbHVlXG4gKi9cbmV4cG9ydCBlbnVtIFJ1bGVEb21haW5WYWx1ZSB7XG4gIC8qKiBFbmFibGVzIGFsbCB0aGUgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBkb21haW4gKGFsbCkgKi9cbiAgQUxMID0gXCJhbGxcIixcbiAgLyoqIERpc2FibGVzIGFsbCB0aGUgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBkb21haW4gKG5vbmUpICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIEVuYWJsZXMgb25seSB0aGUgcmVjb21tZW5kZWQgcnVsZXMgZm9yIHRoaXMgZG9tYWluIChyZWNvbW1lbmRlZCkgKi9cbiAgUkVDT01NRU5ERUQgPSBcInJlY29tbWVuZGVkXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBSdWxlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjYTExeVxuICAgKi9cbiAgcmVhZG9ubHkgYTExWT86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNjb21wbGV4aXR5XG4gICAqL1xuICByZWFkb25seSBjb21wbGV4aXR5PzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI2NvcnJlY3RuZXNzXG4gICAqL1xuICByZWFkb25seSBjb3JyZWN0bmVzcz86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNudXJzZXJ5XG4gICAqL1xuICByZWFkb25seSBudXJzZXJ5PzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3BlcmZvcm1hbmNlXG4gICAqL1xuICByZWFkb25seSBwZXJmb3JtYW5jZT86IGFueTtcblxuICAvKipcbiAgICogSXQgZW5hYmxlcyB0aGUgbGludCBydWxlcyByZWNvbW1lbmRlZCBieSBCaW9tZS4gYHRydWVgIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEBzY2hlbWEgUnVsZXMjcmVjb21tZW5kZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29tbWVuZGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNzZWN1cml0eVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjc3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHN0eWxlPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3N1c3BpY2lvdXNcbiAgICovXG4gIHJlYWRvbmx5IHN1c3BpY2lvdXM/OiBhbnk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1J1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUnVsZXMob2JqOiBSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ExMXknOiBvYmouYTExWSxcbiAgICAnY29tcGxleGl0eSc6IG9iai5jb21wbGV4aXR5LFxuICAgICdjb3JyZWN0bmVzcyc6IG9iai5jb3JyZWN0bmVzcyxcbiAgICAnbnVyc2VyeSc6IG9iai5udXJzZXJ5LFxuICAgICdwZXJmb3JtYW5jZSc6IG9iai5wZXJmb3JtYW5jZSxcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3NlY3VyaXR5Jzogb2JqLnNlY3VyaXR5LFxuICAgICdzdHlsZSc6IG9iai5zdHlsZSxcbiAgICAnc3VzcGljaW91cyc6IG9iai5zdXNwaWNpb3VzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdCBvZiBhY3Rpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uI2FjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBBY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBpZiBgZmFsc2VgLCBpdCBkaXNhYmxlcyB0aGUgZmVhdHVyZSBhbmQgdGhlIGFzc2lzdCB3b24ndCBiZSBleGVjdXRlZC4gYHRydWVgIGJ5IGRlZmF1bHRcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IE92ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjdGlvbnMnOiB0b0pzb25fQWN0aW9ucyhvYmouYWN0aW9ucyksXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgbGltaXQgaW4gYnl0ZXNcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbiNtYXhTaXplXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uKG9iajogT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtYXhTaXplJzogb2JqLm1heFNpemUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogUHV0IHRoZSBgPmAgb2YgYSBtdWx0aS1saW5lIEhUTUwgb3IgSlNYIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2YgYmVpbmcgYWxvbmUgb24gdGhlIG5leHQgbGluZSAoZG9lcyBub3QgYXBwbHkgdG8gc2VsZiBjbG9zaW5nIGVsZW1lbnRzKS5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCBzcGFjZXMgYXJvdW5kIGJyYWNrZXRzIGluIG9iamVjdCBsaXRlcmFscy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhwYW5kIGFycmF5cyBhbmQgb2JqZWN0cyBvbiBtdWx0aXBsZSBsaW5lcy5cbiAgICogV2hlbiBzZXQgdG8gYGF1dG9gLCBvYmplY3QgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcyBpZiB0aGUgZmlyc3QgcHJvcGVydHkgaGFzIGEgbmV3bGluZSxcbiAgICogYW5kIGFycmF5IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIHNldCB0byBgYWx3YXlzYCwgdGhlc2UgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcywgcmVnYXJkbGVzcyBvZiBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAqIFdoZW4gc2V0IHRvIGBuZXZlcmAsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIGZvcm1hdHRpbmcgYHBhY2thZ2UuanNvbmAsIEJpb21lIHdpbGwgdXNlIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS4gRGVmYXVsdHMgdG8gXCJhdXRvXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9cIi5cbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyB3aGV0aGVyIGZvcm1hdHRpbmcgc2hvdWxkIGJlIGFsbG93ZWQgdG8gcHJvY2VlZCBpZiBhIGdpdmVuIGZpbGVcbiAgICogaGFzIHN5bnRheCBlcnJvcnNcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZm9ybWF0V2l0aEVycm9yc1xuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0V2l0aEVycm9ycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiwgMiBieSBkZWZhdWx0IChkZXByZWNhdGVkLCB1c2UgYGluZGVudC13aWR0aGApXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFNpemVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24sIDIgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIHRyYWlsaW5nIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIG9wdGlvbiB0byBgZmFsc2VgIGlzICoqaGlnaGx5IGRpc2NvdXJhZ2VkKiogYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSBtYW55IHByb2JsZW1zIHdpdGggb3RoZXIgdG9vbHM6XG4gICAqIC0gaHR0cHM6Ly90aG91Z2h0Ym90LmNvbS9ibG9nL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGVcbiAgICogLSBodHRwczovL2NhbGxtZXJ5YW4ubWVkaXVtLmNvbS9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlLW5hdmlnYXRpbmctZ2l0cy13YXJuaW5nLWZvci1hbmRyb2lkLWRldmVsb3BlcnMtYWYxNGU3M2RkODA0XG4gICAqIC0gaHR0cHM6Ly91bml4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8zNDU1NDgvaG93LXRvLWNhdC1maWxlcy10b2dldGhlci1hZGRpbmctbWlzc2luZy1uZXdsaW5lcy1hdC1lbmQtb2Ytc29tZS1maWxlc1xuICAgKlxuICAgKiBEaXNhYmxlIHRoZSBvcHRpb24gYXQgeW91ciBvd24gcmlzay5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhdHRyaWJ1dGVQb3NpdGlvbic6IG9iai5hdHRyaWJ1dGVQb3NpdGlvbixcbiAgICAnYnJhY2tldFNhbWVMaW5lJzogb2JqLmJyYWNrZXRTYW1lTGluZSxcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnZXhwYW5kJzogb2JqLmV4cGFuZCxcbiAgICAnZm9ybWF0V2l0aEVycm9ycyc6IG9iai5mb3JtYXRXaXRoRXJyb3JzLFxuICAgICdpbmRlbnRTaXplJzogb2JqLmluZGVudFNpemUsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICd0cmFpbGluZ05ld2xpbmUnOiBvYmoudHJhaWxpbmdOZXdsaW5lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdCBvZiBydWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbiNkb21haW5zXG4gICAqL1xuICByZWFkb25seSBkb21haW5zPzogeyBba2V5OiBzdHJpbmddOiBSdWxlRG9tYWluVmFsdWUgfTtcblxuICAvKipcbiAgICogaWYgYGZhbHNlYCwgaXQgZGlzYWJsZXMgdGhlIGZlYXR1cmUgYW5kIHRoZSBsaW50ZXIgd29uJ3QgYmUgZXhlY3V0ZWQuIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJ1bGVzXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkb21haW5zJzogKChvYmouZG9tYWlucykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRvbWFpbnMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ3J1bGVzJzogdG9Kc29uX1J1bGVzKG9iai5ydWxlcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB3aXRoIHRoZSBnaXQgY2xpZW50IGFzIFZDU1xuICpcbiAqIEBzY2hlbWEgVmNzQ2xpZW50S2luZFxuICovXG5leHBvcnQgZW51bSBWY3NDbGllbnRLaW5kIHtcbiAgLyoqIGdpdCAqL1xuICBHSVQgPSBcImdpdFwiLFxufVxuXG4vKipcbiAqIEEgbGlzdCBvZiBydWxlcyB0aGF0IGJlbG9uZyB0byB0aGlzIGdyb3VwXG4gKlxuICogQHNjaGVtYSBTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2Uge1xuICAvKipcbiAgICogUmVtb3ZlIGR1cGxpY2F0ZSBDU1MgY2xhc3Nlcy5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvbm8tZHVwbGljYXRlLWNsYXNzZXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2Ujbm9EdXBsaWNhdGVDbGFzc2VzXG4gICAqL1xuICByZWFkb25seSBub0R1cGxpY2F0ZUNsYXNzZXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnRzIGltcG9ydHMgYW5kIGV4cG9ydHMgaW4geW91ciBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IGZpbGVzLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy9vcmdhbml6ZS1pbXBvcnRzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI29yZ2FuaXplSW1wb3J0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemVJbXBvcnRzPzogYW55O1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSByZWNvbW1lbmRlZCBydWxlcyBmb3IgdGhpcyBncm91cFxuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSNyZWNvbW1lbmRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb21tZW5kZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmZvcmNlIGF0dHJpYnV0ZSBzb3J0aW5nIGluIEpTWCBlbGVtZW50cy5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvdXNlLXNvcnRlZC1hdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZEF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNvcnRlZEF0dHJpYnV0ZXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgaW50ZXJmYWNlIG1lbWJlcnMgYnkga2V5LlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWludGVyZmFjZS1tZW1iZXJzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZEludGVyZmFjZU1lbWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNvcnRlZEludGVyZmFjZU1lbWJlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIGtleXMgb2YgYSBKU09OIG9iamVjdCBpbiBuYXR1cmFsIG9yZGVyLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWtleXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkS2V5c1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkS2V5cz86IGFueTtcblxuICAvKipcbiAgICogRW5mb3JjZSBvcmRlcmluZyBvZiBDU1MgcHJvcGVydGllcyBhbmQgbmVzdGVkIHJ1bGVzLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLXByb3BlcnRpZXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkUHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkUHJvcGVydGllcz86IGFueTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnU291cmNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU291cmNlKG9iajogU291cmNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbm9EdXBsaWNhdGVDbGFzc2VzJzogb2JqLm5vRHVwbGljYXRlQ2xhc3NlcyxcbiAgICAnb3JnYW5pemVJbXBvcnRzJzogb2JqLm9yZ2FuaXplSW1wb3J0cyxcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3VzZVNvcnRlZEF0dHJpYnV0ZXMnOiBvYmoudXNlU29ydGVkQXR0cmlidXRlcyxcbiAgICAndXNlU29ydGVkSW50ZXJmYWNlTWVtYmVycyc6IG9iai51c2VTb3J0ZWRJbnRlcmZhY2VNZW1iZXJzLFxuICAgICd1c2VTb3J0ZWRLZXlzJzogb2JqLnVzZVNvcnRlZEtleXMsXG4gICAgJ3VzZVNvcnRlZFByb3BlcnRpZXMnOiBvYmoudXNlU29ydGVkUHJvcGVydGllcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUXVvdGVTdHlsZVxuICovXG5leHBvcnQgZW51bSBRdW90ZVN0eWxlIHtcbiAgLyoqIGRvdWJsZSAqL1xuICBET1VCTEUgPSBcImRvdWJsZVwiLFxuICAvKiogc2luZ2xlICovXG4gIFNJTkdMRSA9IFwic2luZ2xlXCIsXG59XG5cbi8qKlxuICogQ29udHJvbHMgd2hldGhlciB2b2lkLWVsZW1lbnRzIHNob3VsZCBiZSBzZWxmIGNsb3NlZFxuICpcbiAqIEBzY2hlbWEgU2VsZkNsb3NlVm9pZEVsZW1lbnRzXG4gKi9cbmV4cG9ydCBlbnVtIFNlbGZDbG9zZVZvaWRFbGVtZW50cyB7XG4gIC8qKiBUaGUgYC9gIGluc2lkZSB2b2lkIGVsZW1lbnRzIGlzIHJlbW92ZWQgYnkgdGhlIGZvcm1hdHRlciAobmV2ZXIpICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxuICAvKiogVGhlIGAvYCBpbnNpZGUgdm9pZCBlbGVtZW50cyBpcyBhbHdheXMgYWRkZWQgKGFsd2F5cykgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbn1cblxuLyoqXG4gKiBXaGl0ZXNwYWNlIHNlbnNpdGl2aXR5IGZvciBIVE1MIGZvcm1hdHRpbmcuXG4gKlxuICogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgd29uJ3QgcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQ6XG4gKlxuICogfCAgICAgICAgICAgICAgICB8ICAgICAgaHRtbCAgICAgIHwgICAgb3V0cHV0ICAgIHxcbiAqIHwgLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tOiB8IDotLS0tLS0tLS0tOiB8XG4gKiB8IHdpdGggc3BhY2VzICAgIHwgYDE8Yj4gMiA8L2I+M2AgfCAxPGI+IDIgPC9iPjMgfFxuICogfCB3aXRob3V0IHNwYWNlcyB8ICBgMTxiPjI8L2I+M2AgIHwgIDE8Yj4yPC9iPjMgIHxcbiAqXG4gKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB3aGl0ZXNwYWNlIGlzIHNpZ25pZmljYW50IGluIGlubGluZSBlbGVtZW50cy5cbiAqXG4gKiBBcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMsIHRoZSBmb3JtYXR0ZXIgbXVzdCBmb3JtYXQgYmxvY2tzIHRoYXQgbG9vayBsaWtlIHRoaXMgKGFzc3VtZSBhIHNtYWxsIGxpbmUgd2lkdGgsIDwyMCk6XG4gKiBgYGBodG1sXG4gKiA8c3Bhbj5yZWFsbHkgbG9uZyBjb250ZW50PC9zcGFuPlxuICogYGBgXG4gKiBhcyB0aGlzLCB3aGVyZSB0aGUgY29udGVudCBodWdzIHRoZSB0YWdzOlxuICogYGBgaHRtbFxuICogPHNwYW5cbiAqID5yZWFsbHkgbG9uZyBjb250ZW50PC9zcGFuXG4gKiA+XG4gKiBgYGBcbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgaW5saW5lIGVsZW1lbnRzLiBCbG9jayBlbGVtZW50cyBkbyBub3QgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLlxuICpcbiAqIEBzY2hlbWEgV2hpdGVzcGFjZVNlbnNpdGl2aXR5XG4gKi9cbmV4cG9ydCBlbnVtIFdoaXRlc3BhY2VTZW5zaXRpdml0eSB7XG4gIC8qKiBUaGUgZm9ybWF0dGVyIGNvbnNpZGVycyB3aGl0ZXNwYWNlIHNpZ25pZmljYW50IGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYW4gXCJpbmxpbmVcIiBkaXNwbGF5IHN0eWxlIGJ5IGRlZmF1bHQgaW5cbmJyb3dzZXIncyB1c2VyIGFnZW50IHN0eWxlIHNoZWV0cy4gKGNzcykgKi9cbiAgQ1NTID0gXCJjc3NcIixcbiAgLyoqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gY29udGVudCBpcyBjb25zaWRlcmVkIHNpZ25pZmljYW50IGZvciBhbGwgZWxlbWVudHMuXG5cblRoZSBmb3JtYXR0ZXIgc2hvdWxkIGxlYXZlIGF0IGxlYXN0IG9uZSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpZiB3aGl0ZXNwYWNlIGlzIHByZXNlbnQuXG5PdGhlcndpc2UsIGlmIHRoZXJlIGlzIG5vIHdoaXRlc3BhY2UsIGl0IHNob3VsZCBub3QgYWRkIGFueSBhZnRlciBgPmAgb3IgYmVmb3JlIGA8YC4gSW4gb3RoZXIgd29yZHMsIGlmIHRoZXJlJ3Mgbm8gd2hpdGVzcGFjZSwgdGhlIHRleHQgY29udGVudCBzaG91bGQgaHVnIHRoZSB0YWdzLlxuXG5FeGFtcGxlIG9mIHRleHQgaHVnZ2luZyB0aGUgdGFnczpcbmBgYGh0bWxcbjxiXG4gICAgPmNvbnRlbnQ8L2Jcbj5cbmBgYCAoc3RyaWN0KSAqL1xuICBTVFJJQ1QgPSBcInN0cmljdFwiLFxuICAvKiogV2hpdGVzcGFjZSBpcyBjb25zaWRlcmVkIGluc2lnbmlmaWNhbnQuIFRoZSBmb3JtYXR0ZXIgaXMgZnJlZSB0byByZW1vdmUgb3IgYWRkIHdoaXRlc3BhY2UgYXMgaXQgc2VlcyBmaXQuIChpZ25vcmUpICovXG4gIElHTk9SRSA9IFwiaWdub3JlXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBBcnJvd1BhcmVudGhlc2VzXG4gKi9cbmV4cG9ydCBlbnVtIEFycm93UGFyZW50aGVzZXMge1xuICAvKiogYWx3YXlzICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBhc05lZWRlZCAqL1xuICBBU19ORUVERUQgPSBcImFzTmVlZGVkXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBPcGVyYXRvckxpbmVicmVha1xuICovXG5leHBvcnQgZW51bSBPcGVyYXRvckxpbmVicmVhayB7XG4gIC8qKiBUaGUgb3BlcmF0b3IgaXMgcGxhY2VkIGFmdGVyIHRoZSBleHByZXNzaW9uIChhZnRlcikgKi9cbiAgQUZURVIgPSBcImFmdGVyXCIsXG4gIC8qKiBUaGUgb3BlcmF0b3IgaXMgcGxhY2VkIGJlZm9yZSB0aGUgZXhwcmVzc2lvbiAoYmVmb3JlKSAqL1xuICBCRUZPUkUgPSBcImJlZm9yZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUXVvdGVQcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBlbnVtIFF1b3RlUHJvcGVydGllcyB7XG4gIC8qKiBhc05lZWRlZCAqL1xuICBBU19ORUVERUQgPSBcImFzTmVlZGVkXCIsXG4gIC8qKiBwcmVzZXJ2ZSAqL1xuICBQUkVTRVJWRSA9IFwicHJlc2VydmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIFNlbWljb2xvbnNcbiAqL1xuZXhwb3J0IGVudW0gU2VtaWNvbG9ucyB7XG4gIC8qKiBhbHdheXMgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbiAgLyoqIGFzTmVlZGVkICovXG4gIEFTX05FRURFRCA9IFwiYXNOZWVkZWRcIixcbn1cblxuLyoqXG4gKiBQcmludCB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgaW4gbXVsdGktbGluZSBjb21tYS1zZXBhcmF0ZWQgc3ludGFjdGljIHN0cnVjdHVyZXMgZm9yIEphdmFTY3JpcHQvVHlwZVNjcmlwdCBmaWxlcy5cbiAqXG4gKiBAc2NoZW1hIEpzVHJhaWxpbmdDb21tYXNcbiAqL1xuZXhwb3J0IGVudW0gSnNUcmFpbGluZ0NvbW1hcyB7XG4gIC8qKiBhbGwgKi9cbiAgQUxMID0gXCJhbGxcIixcbiAgLyoqIGVzNSAqL1xuICBFUzUgPSBcImVzNVwiLFxuICAvKiogbm9uZSAqL1xuICBOT05FID0gXCJub25lXCIsXG59XG5cbi8qKlxuICogUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpLWxpbmUgY29tbWEtc2VwYXJhdGVkIHN5bnRhY3RpYyBzdHJ1Y3R1cmVzIGZvciBKU09OIGZpbGVzLlxuICpcbiAqIEBzY2hlbWEgSnNvblRyYWlsaW5nQ29tbWFzXG4gKi9cbmV4cG9ydCBlbnVtIEpzb25UcmFpbGluZ0NvbW1hcyB7XG4gIC8qKiBub25lICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIGFsbCAqL1xuICBBTEwgPSBcImFsbFwiLFxufVxuIl19
|
|
1064
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlvbWUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmFzY3JpcHQvYmlvbWUvYmlvbWUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThIQSw4REFzQkM7QUFtQ0QsZ0VBU0M7QUFrREQsMERBV0M7QUFrREQsOERBVUM7QUFnSUQsc0VBbUJDO0FBa0NELGtFQVNDO0FBb0NELDREQVNDO0FBZ0RELDREQVdDO0FBa0VELHdEQWFDO0FBMkNELDREQVVDO0FBMENELGdFQVVDO0FBa0dELHdEQWtCQztBQXdERCwwREFXQztBQXlCRCx3Q0FRQztBQXNCRCxzRUFPQztBQTZFRCw0RUFhQztBQXNCRCxzRUFPQztBQXFDRCxzRUFTQztBQXFFRCw4RUFPQztBQXFGRCxvRkFjQztBQXNCRCw4RUFPQztBQW9CRCx3RUFPQztBQW1FRCw4RUFZQztBQW9CRCx3RUFPQztBQXNCRCx3RUFPQztBQTZHRCw4RUFpQkM7QUFzQkQsd0VBT0M7QUFzQkQsd0VBT0M7QUFzQkQsb0VBT0M7QUFpS0QsMEVBdUJDO0FBMkNELG9FQU9DO0FBMkNELG9FQVNDO0FBc0JELHdFQU9DO0FBZ0dELDhFQWVDO0FBc0JELHdFQU9DO0FBNkJELHdFQVFDO0FBd0VELG9DQWVDO0FBMkJELGdGQVFDO0FBb0JELDhFQU9DO0FBeUhELHNGQW1CQztBQWtDRCxnRkFTQztBQWdGRCxzQ0FhQztBQWhoRkQ7OztHQUdHO0FBQ0gscUZBQXFGO0FBQ3JGLFNBQWdCLHlCQUF5QixDQUFDLEdBQW1DO0lBQzNFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNO1FBQ3JCLFFBQVEsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2hELEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxH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QXNCLENBQUE7QUFDeEIsQ0FBQyxFQUxXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBSzNCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0IsMERBQTBEO0lBQzFELG9DQUFlLENBQUE7SUFDZiw0REFBNEQ7SUFDNUQsc0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUxXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBSzVCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGVBS1g7QUFMRCxXQUFZLGVBQWU7SUFDekIsZUFBZTtJQUNmLHlDQUFzQixDQUFBO0lBQ3RCLGVBQWU7SUFDZix3Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTFcsZUFBZSwrQkFBZixlQUFlLFFBSzFCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsYUFBYTtJQUNiLCtCQUFpQixDQUFBO0lBQ2pCLGVBQWU7SUFDZixvQ0FBc0IsQ0FBQTtBQUN4QixDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUMxQixVQUFVO0lBQ1YsK0JBQVcsQ0FBQTtJQUNYLFVBQVU7SUFDViwrQkFBVyxDQUFBO0lBQ1gsV0FBVztJQUNYLGlDQUFhLENBQUE7QUFDZixDQUFDLEVBUFcsZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUFPM0I7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzVCLFdBQVc7SUFDWCxtQ0FBYSxDQUFBO0lBQ2IsVUFBVTtJQUNWLGlDQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsa0JBQWtCLGtDQUFsQixrQkFBa0IsUUFLN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJub2RlIC4vcHJvamVuLmpzXCIuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIHRoYXQgaXMgY29udGFpbmVkIGluc2lkZSB0aGUgZmlsZSBgYmlvbWUuanNvbmBcbiAqXG4gKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpb21lQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBIGZpZWxkIGZvciB0aGUgW0pTT04gc2NoZW1hXShodHRwczovL2pzb24tc2NoZW1hLm9yZy8pIHNwZWNpZmljYXRpb25cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jJHNjaGVtYVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhc3Npc3RzXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIENzcyBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNjc3NcbiAgICovXG4gIHJlYWRvbmx5IGNzcz86IENzc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXRocyB0byBvdGhlciBKU09OIGZpbGVzLCB1c2VkIHRvIGV4dGVuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBmaWxlc3lzdGVtXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2ZpbGVzXG4gICAqL1xuICByZWFkb25seSBmaWxlcz86IEZpbGVzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGZvcm1hdHRlclxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcmFwaFFMIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2dyYXBocWxcbiAgICovXG4gIHJlYWRvbmx5IGdyYXBocWw/OiBHcmFwaHFsQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEdyYXBoUUwgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZ3JpdFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JpdD86IEdyaXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgSFRNTCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNodG1sXG4gICAqL1xuICByZWFkb25seSBodG1sPzogSHRtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2phdmFzY3JpcHRcbiAgICovXG4gIHJlYWRvbmx5IGphdmFzY3JpcHQ/OiBKc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBKc29uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBsaW50ZXJcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBMaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ3JhbnVsYXIgcGF0dGVybnMgdGhhdCBzaG91bGQgYmUgYXBwbGllZCBvbmx5IHRvIGEgc3ViIHNldCBvZiBmaWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNvdmVycmlkZXNcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE92ZXJyaWRlUGF0dGVybltdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHBsdWdpbnMgdG8gbG9hZC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jcGx1Z2luc1xuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2lucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhdCB0aGUgcm9vdCBvZiBhIEJpb21lXG4gICAqIHByb2plY3QuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYHRydWVgLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNyb290XG4gICAqL1xuICByZWFkb25seSByb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFZDUyBpbnRlZ3JhdGlvblxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiN2Y3NcbiAgICovXG4gIHJlYWRvbmx5IHZjcz86IFZjc0NvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Jpb21lQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Jpb21lQ29uZmlndXJhdGlvbihvYmo6IEJpb21lQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJyRzY2hlbWEnOiBvYmouc2NoZW1hLFxuICAgICdhc3Npc3QnOiB0b0pzb25fQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnY3NzJzogdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqLmNzcyksXG4gICAgJ2V4dGVuZHMnOiBvYmouZXh0ZW5kcz8ubWFwKHkgPT4geSksXG4gICAgJ2ZpbGVzJzogdG9Kc29uX0ZpbGVzQ29uZmlndXJhdGlvbihvYmouZmlsZXMpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnZ3JhcGhxbCc6IHRvSnNvbl9HcmFwaHFsQ29uZmlndXJhdGlvbihvYmouZ3JhcGhxbCksXG4gICAgJ2dyaXQnOiB0b0pzb25fR3JpdENvbmZpZ3VyYXRpb24ob2JqLmdyaXQpLFxuICAgICdodG1sJzogdG9Kc29uX0h0bWxDb25maWd1cmF0aW9uKG9iai5odG1sKSxcbiAgICAnamF2YXNjcmlwdCc6IHRvSnNvbl9Kc0NvbmZpZ3VyYXRpb24ob2JqLmphdmFzY3JpcHQpLFxuICAgICdqc29uJzogdG9Kc29uX0pzb25Db25maWd1cmF0aW9uKG9iai5qc29uKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ292ZXJyaWRlcyc6IG9iai5vdmVycmlkZXM/Lm1hcCh5ID0+IHRvSnNvbl9PdmVycmlkZVBhdHRlcm4oeSkpLFxuICAgICdwbHVnaW5zJzogb2JqLnBsdWdpbnM/Lm1hcCh5ID0+IHkpLFxuICAgICdyb290Jzogb2JqLnJvb3QsXG4gICAgJ3Zjcyc6IHRvSnNvbl9WY3NDb25maWd1cmF0aW9uKG9iai52Y3MpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEJpb21lIHNob3VsZCBmYWlsIGluIENMSSBpZiB0aGUgYXNzaXN0IHdlcmUgbm90IGFwcGxpZWQgdG8gdGhlIGNvZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQXNzaXN0Q29uZmlndXJhdGlvbiNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25zPzogQWN0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciBCaW9tZSBzaG91bGQgZW5hYmxlIGFzc2lzdCB2aWEgTFNQIGFuZCBDTEkuXG4gICAqXG4gICAqIEBzY2hlbWEgQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIEJpb21lIHdpbGwgaW5jbHVkZSBmaWxlcy9mb2xkZXJzIHRoYXQgd2lsbFxuICAgKiBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uI2luY2x1ZGVzXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY3Rpb25zJzogdG9Kc29uX0FjdGlvbnMob2JqLmFjdGlvbnMpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBDU1MgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENTUyBhc3Npc3Qgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBDc3NBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDU1MgZm9ybWF0dGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ1NTIGdsb2JhbHNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2dsb2JhbHNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ1NTIGxpbnRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IENzc0xpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENTUyBwYXJzaW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI3BhcnNlclxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyPzogQ3NzUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqOiBDc3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0Nzc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Dc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdnbG9iYWxzJzogb2JqLmdsb2JhbHM/Lm1hcCh5ID0+IHkpLFxuICAgICdsaW50ZXInOiB0b0pzb25fQ3NzTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0Nzc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZmlsZXN5c3RlbVxuICpcbiAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZXNDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqICoqRGVwcmVjYXRlZDoqKiBQbGVhc2UgdXNlIF9mb3JjZS1pZ25vcmUgc3ludGF4XyBpbiBgZmlsZXMuaW5jbHVkZXNgXG4gICAqIGluc3RlYWQ6IDxodHRwczovL2Jpb21lanMuZGV2L3JlZmVyZW5jZS9jb25maWd1cmF0aW9uLyNmaWxlc2luY2x1ZGVzPlxuICAgKlxuICAgKiBTZXQgb2YgZmlsZSBhbmQgZm9sZGVyIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHVuY29uZGl0aW9uYWxseSBpZ25vcmVkIGJ5XG4gICAqIEJpb21lJ3Mgc2Nhbm5lci5cbiAgICpcbiAgICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb24jZXhwZXJpbWVudGFsU2Nhbm5lcklnbm9yZXNcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRlbGxzIEJpb21lIHRvIG5vdCBlbWl0IGRpYWdub3N0aWNzIHdoZW4gaGFuZGxpbmcgZmlsZXMgdGhhdCBpdCBkb2Vzbid0IGtub3dcbiAgICpcbiAgICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb24jaWdub3JlVW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlVW5rbm93bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLiBCaW9tZSB3aWxsIGhhbmRsZSBvbmx5IHRob3NlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsXG4gICAqIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYWxsb3dlZCBzaXplIGZvciBzb3VyY2UgY29kZSBmaWxlcyBpbiBieXRlcy4gRmlsZXMgYWJvdmVcbiAgICogdGhpcyBsaW1pdCB3aWxsIGJlIGlnbm9yZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIERlZmF1bHRzIHRvIDEgTWlCXG4gICAqXG4gICAqIEBkZWZhdWx0IDEgTWlCXG4gICAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uI21heFNpemVcbiAgICovXG4gIHJlYWRvbmx5IG1heFNpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpbGVzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpbGVzQ29uZmlndXJhdGlvbihvYmo6IEZpbGVzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzJzogb2JqLmV4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzPy5tYXAoeSA9PiB5KSxcbiAgICAnaWdub3JlVW5rbm93bic6IG9iai5pZ25vcmVVbmtub3duLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gICAgJ21heFNpemUnOiBvYmoubWF4U2l6ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEdlbmVyaWMgb3B0aW9ucyBhcHBsaWVkIHRvIGFsbCBmaWxlc1xuICpcbiAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBwb3NpdGlvbiBzdHlsZSBpbiBIVE1MLWlzaCBsYW5ndWFnZXMuIERlZmF1bHRzIHRvIGF1dG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG8uXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogUHV0IHRoZSBgPmAgb2YgYSBtdWx0aS1saW5lIEhUTUwgb3IgSlNYIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2YgYmVpbmcgYWxvbmUgb24gdGhlIG5leHQgbGluZSAoZG9lcyBub3QgYXBwbHkgdG8gc2VsZiBjbG9zaW5nIGVsZW1lbnRzKS5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTYW1lTGluZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNhbWVMaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGFyb3VuZCBicmFja2V0cyBpbiBvYmplY3QgbGl0ZXJhbHMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U3BhY2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhwYW5kIGFycmF5cyBhbmQgb2JqZWN0cyBvbiBtdWx0aXBsZSBsaW5lcy5cbiAgICogV2hlbiBzZXQgdG8gYGF1dG9gLCBvYmplY3QgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcyBpZiB0aGUgZmlyc3QgcHJvcGVydHkgaGFzIGEgbmV3bGluZSxcbiAgICogYW5kIGFycmF5IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIHNldCB0byBgYWx3YXlzYCwgdGhlc2UgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcywgcmVnYXJkbGVzcyBvZiBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAqIFdoZW4gc2V0IHRvIGBuZXZlcmAsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIGZvcm1hdHRpbmcgYHBhY2thZ2UuanNvbmAsIEJpb21lIHdpbGwgdXNlIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS4gRGVmYXVsdHMgdG8gXCJhdXRvXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9cIi5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2V4cGFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwYW5kPzogRXhwYW5kO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGZvcm1hdHRpbmcgc2hvdWxkIGJlIGFsbG93ZWQgdG8gcHJvY2VlZCBpZiBhIGdpdmVuIGZpbGVcbiAgICogaGFzIHN5bnRheCBlcnJvcnNcbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2Zvcm1hdFdpdGhFcnJvcnNcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdFdpdGhFcnJvcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gVGhlIGZvcm1hdHRlciB3aWxsIGluY2x1ZGUgZmlsZXMvZm9sZGVycyB0aGF0IHdpbGxcbiAgICogbWF0Y2ggdGhlc2UgcGF0dGVybnMuXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24sIDIgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIHRyYWlsaW5nIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIG9wdGlvbiB0byBgZmFsc2VgIGlzICoqaGlnaGx5IGRpc2NvdXJhZ2VkKiogYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSBtYW55IHByb2JsZW1zIHdpdGggb3RoZXIgdG9vbHM6XG4gICAqIC0gaHR0cHM6Ly90aG91Z2h0Ym90LmNvbS9ibG9nL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGVcbiAgICogLSBodHRwczovL2NhbGxtZXJ5YW4ubWVkaXVtLmNvbS9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlLW5hdmlnYXRpbmctZ2l0cy13YXJuaW5nLWZvci1hbmRyb2lkLWRldmVsb3BlcnMtYWYxNGU3M2RkODA0XG4gICAqIC0gaHR0cHM6Ly91bml4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8zNDU1NDgvaG93LXRvLWNhdC1maWxlcy10b2dldGhlci1hZGRpbmctbWlzc2luZy1uZXdsaW5lcy1hdC1lbmQtb2Ytc29tZS1maWxlc1xuICAgKlxuICAgKiBEaXNhYmxlIHRoZSBvcHRpb24gYXQgeW91ciBvd24gcmlzay5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIGFueSBgLmVkaXRvcmNvbmZpZ2AgZmlsZXMgdG8gY29uZmlndXJlIHRoZSBmb3JtYXR0ZXIuIENvbmZpZ3VyYXRpb25cbiAgICogaW4gYGJpb21lLmpzb25gIHdpbGwgb3ZlcnJpZGUgYC5lZGl0b3Jjb25maWdgIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIERlZmF1bHQ6IGBmYWxzZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN1c2VFZGl0b3Jjb25maWdcbiAgICovXG4gIHJlYWRvbmx5IHVzZUVkaXRvcmNvbmZpZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Gb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZVBvc2l0aW9uJzogb2JqLmF0dHJpYnV0ZVBvc2l0aW9uLFxuICAgICdicmFja2V0U2FtZUxpbmUnOiBvYmouYnJhY2tldFNhbWVMaW5lLFxuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdmb3JtYXRXaXRoRXJyb3JzJzogb2JqLmZvcm1hdFdpdGhFcnJvcnMsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gICAgJ3VzZUVkaXRvcmNvbmZpZyc6IG9iai51c2VFZGl0b3Jjb25maWcsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gR3JhcGhRTCBmaWxlc1xuICpcbiAqIEBzY2hlbWEgR3JhcGhxbENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaHFsQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBc3Npc3Qgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEdyYXBoUUwgZm9ybWF0dGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEdyYXBocWxDb25maWd1cmF0aW9uI2xpbnRlclxuICAgKi9cbiAgcmVhZG9ubHkgbGludGVyPzogR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyYXBocWxDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JhcGhxbENvbmZpZ3VyYXRpb24ob2JqOiBHcmFwaHFsQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9HcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZm9ybWF0dGVyJzogdG9Kc29uX0dyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdsaW50ZXInOiB0b0pzb25fR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gR3JpdFFMIGZpbGVzXG4gKlxuICogQHNjaGVtYSBHcml0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFzc2lzdCBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdENvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBHcml0QXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRm9ybWF0dGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRm9ybWF0dGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdENvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBHcml0TGludGVyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JpdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Hcml0Q29uZmlndXJhdGlvbihvYmo6IEdyaXRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0dyaXRBc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9Hcml0TGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBIVE1MIGZpbGVzXG4gKlxuICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBmdWxsIHN1cHBvcnQgZm9yIEhUTUwsIFZ1ZSwgU3ZlbHRlIGFuZCBBc3RybyBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNleHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhUTUwgZm9ybWF0dGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIVE1MIGxpbnRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBIdG1sTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogSFRNTCBwYXJzaW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEh0bWxQYXJzZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxDb25maWd1cmF0aW9uKG9iajogSHRtbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2V4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZCc6IG9iai5leHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWQsXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9IdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0h0bWxMaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICAgICdwYXJzZXInOiB0b0pzb25fSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIHNldCBvZiBvcHRpb25zIGFwcGxpZWQgdG8gdGhlIEphdmFTY3JpcHQgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBc3Npc3Qgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEpzQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBzdXBwb3J0IGZvciBlbWJlZGRpbmcgc25pcHBldHMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2V4cGVyaW1lbnRhbEVtYmVkZGVkU25pcHBldHNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBleHBlcmltZW50YWxFbWJlZGRlZFNuaXBwZXRzRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2JhbCBiaW5kaW5ncyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBhbmFseXplcnNcbiAgICpcbiAgICogSWYgZGVmaW5lZCBoZXJlLCB0aGV5IHNob3VsZCBub3QgZW1pdCBkaWFnbm9zdGljcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jZ2xvYmFsc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgcnVudGltZSBvciB0cmFuc2Zvcm1hdGlvbiB1c2VkIGZvciBpbnRlcnByZXRpbmcgSlNYLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNqc3hSdW50aW1lXG4gICAqL1xuICByZWFkb25seSBqc3hSdW50aW1lPzogSnN4UnVudGltZTtcblxuICAvKipcbiAgICogTGludGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBKc0xpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFBhcnNpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEpzUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNDb25maWd1cmF0aW9uKG9iajogSnNDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0pzQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZXhwZXJpbWVudGFsRW1iZWRkZWRTbmlwcGV0c0VuYWJsZWQnOiBvYmouZXhwZXJpbWVudGFsRW1iZWRkZWRTbmlwcGV0c0VuYWJsZWQsXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Kc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dsb2JhbHMnOiBvYmouZ2xvYmFscz8ubWFwKHkgPT4geSksXG4gICAgJ2pzeFJ1bnRpbWUnOiBvYmouanN4UnVudGltZSxcbiAgICAnbGludGVyJzogdG9Kc29uX0pzTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0pzUGFyc2VyQ29uZmlndXJhdGlvbihvYmoucGFyc2VyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBKU09OIGZpbGVzXG4gKlxuICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFzc2lzdCBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBKc29uQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRm9ybWF0dGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogTGludGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBKc29uTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogUGFyc2luZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jcGFyc2VyXG4gICAqL1xuICByZWFkb25seSBwYXJzZXI/OiBKc29uUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uQ29uZmlndXJhdGlvbihvYmo6IEpzb25Db25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0pzb25Bc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9Kc29uTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0pzb25QYXJzZXJDb25maWd1cmF0aW9uKG9iai5wYXJzZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZG9tYWlucywgYW5kIHRoZSB2YWx1ZXMgYXJlIGBhbGxgLCBgcmVjb21tZW5kZWRgLCBvciBgbm9uZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgTGludGVyQ29uZmlndXJhdGlvbiNkb21haW5zXG4gICAqL1xuICByZWFkb25seSBkb21haW5zPzogeyBba2V5OiBzdHJpbmddOiBSdWxlRG9tYWluVmFsdWUgfTtcblxuICAvKipcbiAgICogaWYgYGZhbHNlYCwgaXQgZGlzYWJsZXMgdGhlIGZlYXR1cmUgYW5kIHRoZSBsaW50ZXIgd29uJ3QgYmUgZXhlY3V0ZWQuIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEBzY2hlbWEgTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIFRoZSBhbmFseXplciB3aWxsIGhhbmRsZSBvbmx5IHRob3NlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsXG4gICAqIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIExpbnRlckNvbmZpZ3VyYXRpb24jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcnVsZXNcbiAgICpcbiAgICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fTGludGVyQ29uZmlndXJhdGlvbihvYmo6IExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkb21haW5zJzogKChvYmouZG9tYWlucykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRvbWFpbnMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAncnVsZXMnOiB0b0pzb25fUnVsZXMob2JqLnJ1bGVzKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnJpZGVQYXR0ZXJuIHtcbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgQ1NTIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Nzc1xuICAgKi9cbiAgcmVhZG9ubHkgY3NzPzogQ3NzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGZpbGVzeXN0ZW1cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzPzogT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgR3JhcGhxbCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNncmFwaHFsXG4gICAqL1xuICByZWFkb25seSBncmFwaHFsPzogR3JhcGhxbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcml0UUwgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZ3JpdFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JpdD86IEdyaXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgR3JpdFFMIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2h0bWxcbiAgICovXG4gIHJlYWRvbmx5IGh0bWw/OiBIdG1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIEJpb21lIHdpbGwgaW5jbHVkZSBmaWxlcy9mb2xkZXJzIHRoYXQgd2lsbFxuICAgKiBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2phdmFzY3JpcHRcbiAgICovXG4gIHJlYWRvbmx5IGphdmFzY3JpcHQ/OiBKc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBKc29uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEpzb24gbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGFkZGl0aW9uYWwgcGx1Z2luc1xuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNwbHVnaW5zXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlUGF0dGVybicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlUGF0dGVybihvYmo6IE92ZXJyaWRlUGF0dGVybiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9PdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Nzcyc6IHRvSnNvbl9Dc3NDb25maWd1cmF0aW9uKG9iai5jc3MpLFxuICAgICdmaWxlcyc6IHRvSnNvbl9PdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbihvYmouZmlsZXMpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdncmFwaHFsJzogdG9Kc29uX0dyYXBocWxDb25maWd1cmF0aW9uKG9iai5ncmFwaHFsKSxcbiAgICAnZ3JpdCc6IHRvSnNvbl9Hcml0Q29uZmlndXJhdGlvbihvYmouZ3JpdCksXG4gICAgJ2h0bWwnOiB0b0pzb25fSHRtbENvbmZpZ3VyYXRpb24ob2JqLmh0bWwpLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gICAgJ2phdmFzY3JpcHQnOiB0b0pzb25fSnNDb25maWd1cmF0aW9uKG9iai5qYXZhc2NyaXB0KSxcbiAgICAnanNvbic6IHRvSnNvbl9Kc29uQ29uZmlndXJhdGlvbihvYmouanNvbiksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9PdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ3BsdWdpbnMnOiBvYmoucGx1Z2lucz8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTZXQgb2YgcHJvcGVydGllcyB0byBpbnRlZ3JhdGUgQmlvbWUgd2l0aCBhIFZDUyBzb2Z0d2FyZS5cbiAqXG4gKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWY3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBraW5kIG9mIGNsaWVudC5cbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI2NsaWVudEtpbmRcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudEtpbmQ/OiBWY3NDbGllbnRLaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFpbiBicmFuY2ggb2YgdGhlIHByb2plY3RcbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI2RlZmF1bHRCcmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRCcmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgQmlvbWUgc2hvdWxkIGludGVncmF0ZSBpdHNlbGYgd2l0aCB0aGUgVkNTIGNsaWVudFxuICAgKlxuICAgKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2hlcmUgQmlvbWUgc2hvdWxkIGNoZWNrIGZvciBWQ1MgZmlsZXMuIEJ5IGRlZmF1bHQsIEJpb21lIHdpbGwgdXNlIHRoZSBzYW1lXG4gICAqIGZvbGRlciB3aGVyZSBgYmlvbWUuanNvbmAgd2FzIGZvdW5kLlxuICAgKlxuICAgKiBJZiBCaW9tZSBjYW4ndCBmaW5kIHRoZSBjb25maWd1cmF0aW9uLCBpdCB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKiBJZiBubyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGNhbid0IGJlIGZvdW5kLCBCaW9tZSB3b24ndCB1c2UgdGhlIFZDUyBpbnRlZ3JhdGlvbiwgYW5kIGEgZGlhZ25vc3RpY1xuICAgKiB3aWxsIGJlIGVtaXR0ZWRcbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI3Jvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgQmlvbWUgc2hvdWxkIHVzZSB0aGUgVkNTIGlnbm9yZSBmaWxlLiBXaGVuIFt0cnVlXSwgQmlvbWUgd2lsbCBpZ25vcmUgdGhlIGZpbGVzXG4gICAqIHNwZWNpZmllZCBpbiB0aGUgaWdub3JlIGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvbiN1c2VJZ25vcmVGaWxlXG4gICAqL1xuICByZWFkb25seSB1c2VJZ25vcmVGaWxlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVmNzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1Zjc0NvbmZpZ3VyYXRpb24ob2JqOiBWY3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY2xpZW50S2luZCc6IG9iai5jbGllbnRLaW5kLFxuICAgICdkZWZhdWx0QnJhbmNoJzogb2JqLmRlZmF1bHRCcmFuY2gsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAncm9vdCc6IG9iai5yb290LFxuICAgICd1c2VJZ25vcmVGaWxlJzogb2JqLnVzZUlnbm9yZUZpbGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEFjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25zIHtcbiAgLyoqXG4gICAqIEl0IGVuYWJsZXMgdGhlIGFzc2lzdCBhY3Rpb25zIHJlY29tbWVuZGVkIGJ5IEJpb21lLiBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogQHNjaGVtYSBBY3Rpb25zI3JlY29tbWVuZGVkXG4gICAqL1xuICByZWFkb25seSByZWNvbW1lbmRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQWN0aW9ucyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IFNvdXJjZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQWN0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0FjdGlvbnMob2JqOiBBY3Rpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3NvdXJjZSc6IHRvSnNvbl9Tb3VyY2Uob2JqLnNvdXJjZSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIENTUyBhc3Npc3QgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgQ3NzQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzc0Fzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgYXNzaXN0IGZvciBDU1MgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBDc3NBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBDU1MgZm9ybWF0dGVyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgQ1NTIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIENTUyAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVkIHRvIENTUyAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0IHRvIDIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gQ1NTIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIGBhdXRvYCB1c2VzIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIENTUyAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcXVvdGVzIHVzZWQgaW4gQ1NTIGNvZGUuIERlZmF1bHRzIHRvIGRvdWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZG91YmxlLlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jcXVvdGVTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVvdGVTdHlsZT86IFF1b3RlU3R5bGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgaXMgKipoaWdobHkgZGlzY291cmFnZWQqKiBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIG1hbnkgcHJvYmxlbXMgd2l0aCBvdGhlciB0b29sczpcbiAgICogLSBodHRwczovL3Rob3VnaHRib3QuY29tL2Jsb2cvbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZVxuICAgKiAtIGh0dHBzOi8vY2FsbG1lcnlhbi5tZWRpdW0uY29tL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGUtbmF2aWdhdGluZy1naXRzLXdhcm5pbmctZm9yLWFuZHJvaWQtZGV2ZWxvcGVycy1hZjE0ZTczZGQ4MDRcbiAgICogLSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzM0NTU0OC9ob3ctdG8tY2F0LWZpbGVzLXRvZ2V0aGVyLWFkZGluZy1taXNzaW5nLW5ld2xpbmVzLWF0LWVuZC1vZi1zb21lLWZpbGVzXG4gICAqXG4gICAqIERpc2FibGUgdGhlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdxdW90ZVN0eWxlJzogb2JqLnF1b3RlU3R5bGUsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIENTUyBsaW50ZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgQ3NzTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzc0xpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBDU1MgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBDU1MgcGFyc2VyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIENzc1BhcnNlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NQYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFsbG93IGNvbW1lbnRzIHRvIGFwcGVhciBvbiBpbmNvcnJlY3QgbGluZXMgaW4gYC5jc3NgIGZpbGVzXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzUGFyc2VyQ29uZmlndXJhdGlvbiNhbGxvd1dyb25nTGluZUNvbW1lbnRzXG4gICAqL1xuICByZWFkb25seSBhbGxvd1dyb25nTGluZUNvbW1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBwYXJzaW5nIG9mIENTUyBNb2R1bGVzIHNwZWNpZmljIGZlYXR1cmVzLiBFbmFibGUgdGhpcyBmZWF0dXJlIG9ubHlcbiAgICogd2hlbiB5b3VyIGZpbGVzIGRvbid0IGVuZCBpbiBgLm1vZHVsZS5jc3NgLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc1BhcnNlckNvbmZpZ3VyYXRpb24jY3NzTW9kdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgY3NzTW9kdWxlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcGFyc2luZyBvZiBUYWlsd2luZCBDU1MgNC4wIGRpcmVjdGl2ZXMgYW5kIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uI3RhaWx3aW5kRGlyZWN0aXZlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFpbHdpbmREaXJlY3RpdmVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NQYXJzZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWxsb3dXcm9uZ0xpbmVDb21tZW50cyc6IG9iai5hbGxvd1dyb25nTGluZUNvbW1lbnRzLFxuICAgICdjc3NNb2R1bGVzJzogb2JqLmNzc01vZHVsZXMsXG4gICAgJ3RhaWx3aW5kRGlyZWN0aXZlcyc6IG9iai50YWlsd2luZERpcmVjdGl2ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEF0dHJpYnV0ZVBvc2l0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIEF0dHJpYnV0ZVBvc2l0aW9uIHtcbiAgLyoqIGF1dG8gKi9cbiAgQVVUTyA9IFwiYXV0b1wiLFxuICAvKiogbXVsdGlsaW5lICovXG4gIE1VTFRJTElORSA9IFwibXVsdGlsaW5lXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBFeHBhbmRcbiAqL1xuZXhwb3J0IGVudW0gRXhwYW5kIHtcbiAgLyoqIE9iamVjdHMgYXJlIGV4cGFuZGVkIHdoZW4gdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIGxlYWRpbmcgbmV3bGluZS4gQXJyYXlzIGFyZSBhbHdheXNcbmV4cGFuZGVkIGlmIHRoZXkgYXJlIHNob3J0ZXIgdGhhbiB0aGUgbGluZSB3aWR0aC4gKGF1dG8pICovXG4gIEFVVE8gPSBcImF1dG9cIixcbiAgLyoqIE9iamVjdHMgYW5kIGFycmF5cyBhcmUgYWx3YXlzIGV4cGFuZGVkLiAoYWx3YXlzKSAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxuICAvKiogT2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBuZXZlciBleHBhbmRlZCwgaWYgdGhleSBhcmUgc2hvcnRlciB0aGFuIHRoZSBsaW5lIHdpZHRoLiAobmV2ZXIpICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgSW5kZW50U3R5bGVcbiAqL1xuZXhwb3J0IGVudW0gSW5kZW50U3R5bGUge1xuICAvKiogSW5kZW50IHdpdGggVGFiICh0YWIpICovXG4gIFRBQiA9IFwidGFiXCIsXG4gIC8qKiBJbmRlbnQgd2l0aCBTcGFjZSAoc3BhY2UpICovXG4gIFNQQUNFID0gXCJzcGFjZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgTGluZUVuZGluZ1xuICovXG5leHBvcnQgZW51bSBMaW5lRW5kaW5nIHtcbiAgLyoqIExpbmUgRmVlZCBvbmx5IChcXG4pLCBjb21tb24gb24gTGludXggYW5kIG1hY09TIGFzIHdlbGwgYXMgaW5zaWRlIGdpdCByZXBvcyAobGYpICovXG4gIExGID0gXCJsZlwiLFxuICAvKiogQ2FycmlhZ2UgUmV0dXJuICsgTGluZSBGZWVkIGNoYXJhY3RlcnMgKFxcclxcbiksIGNvbW1vbiBvbiBXaW5kb3dzIChjcmxmKSAqL1xuICBDUkxGID0gXCJjcmxmXCIsXG4gIC8qKiBDYXJyaWFnZSBSZXR1cm4gY2hhcmFjdGVyIG9ubHkgKFxcciksIHVzZWQgdmVyeSByYXJlbHkgKGNyKSAqL1xuICBDUiA9IFwiY3JcIixcbiAgLyoqIEF1dG9tYXRpY2FsbHkgdXNlIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zIChhdXRvKSAqL1xuICBBVVRPID0gXCJhdXRvXCIsXG59XG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBHcmFwaFFMIGxpbnRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9HcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBHcmFwaFFMIGZvcm1hdHRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBhcm91bmQgYnJhY2tldHMgaW4gb2JqZWN0IGxpdGVyYWxzLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuIERlZmF1bHQgdG8gMi5cbiAgICpcbiAgICogQGRlZmF1bHQgMi5cbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gR3JhcGhRTCBmaWxlcy4gYGF1dG9gIHVzZXMgQ1JMRiBvbiBXaW5kb3dzIGFuZCBMRiBvbiBvdGhlciBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcXVvdGVzIHVzZWQgaW4gR3JhcGhRTCBjb2RlLiBEZWZhdWx0cyB0byBkb3VibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZS5cbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBxdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gYGZhbHNlYCBpcyAqKmhpZ2hseSBkaXNjb3VyYWdlZCoqIGJlY2F1c2UgaXQgY291bGQgY2F1c2UgbWFueSBwcm9ibGVtcyB3aXRoIG90aGVyIHRvb2xzOlxuICAgKiAtIGh0dHBzOi8vdGhvdWdodGJvdC5jb20vYmxvZy9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlXG4gICAqIC0gaHR0cHM6Ly9jYWxsbWVyeWFuLm1lZGl1bS5jb20vbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZS1uYXZpZ2F0aW5nLWdpdHMtd2FybmluZy1mb3ItYW5kcm9pZC1kZXZlbG9wZXJzLWFmMTRlNzNkZDgwNFxuICAgKiAtIGh0dHBzOi8vdW5peC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMzQ1NTQ4L2hvdy10by1jYXQtZmlsZXMtdG9nZXRoZXItYWRkaW5nLW1pc3NpbmctbmV3bGluZXMtYXQtZW5kLW9mLXNvbWUtZmlsZXNcbiAgICpcbiAgICogRGlzYWJsZSB0aGUgb3B0aW9uIGF0IHlvdXIgb3duIHJpc2suXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAncXVvdGVTdHlsZSc6IG9iai5xdW90ZVN0eWxlLFxuICAgICd0cmFpbGluZ05ld2xpbmUnOiBvYmoudHJhaWxpbmdOZXdsaW5lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEdyYXBoUUwgbGludGVyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9HcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBHcml0QXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGFzc2lzdCBmdW5jdGlvbmFsaXR5IGZvciBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcml0QXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyaXRBc3Npc3RDb25maWd1cmF0aW9uKG9iajogR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gR3JpdCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gR3JpdCBmaWxlcy4gRGVmYXVsdCB0byAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyLlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcgYXBwbGllZCB0byBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUgYXBwbGllZCB0byBHcml0IGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgaXMgKipoaWdobHkgZGlzY291cmFnZWQqKiBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIG1hbnkgcHJvYmxlbXMgd2l0aCBvdGhlciB0b29sczpcbiAgICogLSBodHRwczovL3Rob3VnaHRib3QuY29tL2Jsb2cvbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZVxuICAgKiAtIGh0dHBzOi8vY2FsbG1lcnlhbi5tZWRpdW0uY29tL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGUtbmF2aWdhdGluZy1naXRzLXdhcm5pbmctZm9yLWFuZHJvaWQtZGV2ZWxvcGVycy1hZjE0ZTczZGQ4MDRcbiAgICogLSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzM0NTU0OC9ob3ctdG8tY2F0LWZpbGVzLXRvZ2V0aGVyLWFkZGluZy1taXNzaW5nLW5ld2xpbmVzLWF0LWVuZC1vZi1zb21lLWZpbGVzXG4gICAqXG4gICAqIERpc2FibGUgdGhlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Hcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAndHJhaWxpbmdOZXdsaW5lJzogb2JqLnRyYWlsaW5nTmV3bGluZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgR3JpdExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcml0TGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBsaW50ZXIgZm9yIEdyaXQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdExpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdExpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBHcml0TGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSFRNTCBhc3Npc3QgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSHRtbEFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBhc3Npc3QgZm9yIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEh0bWxBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBIVE1MIGZvcm1hdHRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGUgcG9zaXRpb24gc3R5bGUgaW4gSFRNTCBlbGVtZW50cy4gRGVmYXVsdHMgdG8gYXV0by5cbiAgICpcbiAgICogQGRlZmF1bHQgYXV0by5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBodWcgdGhlIGNsb3NpbmcgYnJhY2tldCBvZiBtdWx0aWxpbmUgSFRNTCB0YWdzIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSwgcmF0aGVyIHRoYW4gYmVpbmcgYWxvbmUgb24gdGhlIGZvbGxvd2luZyBsaW5lLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBmb3JtYXR0ZXIgZm9yIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmRlbnQgdGhlIGA8c2NyaXB0PmAgYW5kIGA8c3R5bGU+YCB0YWdzIGZvciBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTY3JpcHRBbmRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U2NyaXB0QW5kU3R5bGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHQgdG8gMi5cbiAgICpcbiAgICogQGRlZmF1bHQgMi5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBgYXV0b2AgdXNlcyBDUkxGIG9uIFdpbmRvd3MgYW5kIExGIG9uIG90aGVyIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdm9pZCBlbGVtZW50cyBzaG91bGQgYmUgc2VsZi1jbG9zZWQuIERlZmF1bHRzIHRvIG5ldmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBuZXZlci5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNzZWxmQ2xvc2VWb2lkRWxlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHNlbGZDbG9zZVZvaWRFbGVtZW50cz86IFNlbGZDbG9zZVZvaWRFbGVtZW50cztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gYGZhbHNlYCBpcyAqKmhpZ2hseSBkaXNjb3VyYWdlZCoqIGJlY2F1c2UgaXQgY291bGQgY2F1c2UgbWFueSBwcm9ibGVtcyB3aXRoIG90aGVyIHRvb2xzOlxuICAgKiAtIGh0dHBzOi8vdGhvdWdodGJvdC5jb20vYmxvZy9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlXG4gICAqIC0gaHR0cHM6Ly9jYWxsbWVyeWFuLm1lZGl1bS5jb20vbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZS1uYXZpZ2F0aW5nLWdpdHMtd2FybmluZy1mb3ItYW5kcm9pZC1kZXZlbG9wZXJzLWFmMTRlNzNkZDgwNFxuICAgKiAtIGh0dHBzOi8vdW5peC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMzQ1NTQ4L2hvdy10by1jYXQtZmlsZXMtdG9nZXRoZXItYWRkaW5nLW1pc3NpbmctbmV3bGluZXMtYXQtZW5kLW9mLXNvbWUtZmlsZXNcbiAgICpcbiAgICogRGlzYWJsZSB0aGUgb3B0aW9uIGF0IHlvdXIgb3duIHJpc2suXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFjY291bnQgZm9yIHdoaXRlc3BhY2Ugc2Vuc2l0aXZpdHkgd2hlbiBmb3JtYXR0aW5nIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKS4gRGVmYXVsdHMgdG8gXCJjc3NcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgY3NzXCIuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jd2hpdGVzcGFjZVNlbnNpdGl2aXR5XG4gICAqL1xuICByZWFkb25seSB3aGl0ZXNwYWNlU2Vuc2l0aXZpdHk/OiBXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0h0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZVBvc2l0aW9uJzogb2JqLmF0dHJpYnV0ZVBvc2l0aW9uLFxuICAgICdicmFja2V0U2FtZUxpbmUnOiBvYmouYnJhY2tldFNhbWVMaW5lLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFNjcmlwdEFuZFN0eWxlJzogb2JqLmluZGVudFNjcmlwdEFuZFN0eWxlLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAnc2VsZkNsb3NlVm9pZEVsZW1lbnRzJzogb2JqLnNlbGZDbG9zZVZvaWRFbGVtZW50cyxcbiAgICAndHJhaWxpbmdOZXdsaW5lJzogb2JqLnRyYWlsaW5nTmV3bGluZSxcbiAgICAnd2hpdGVzcGFjZVNlbnNpdGl2aXR5Jzogb2JqLndoaXRlc3BhY2VTZW5zaXRpdml0eSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSFRNTCBsaW50ZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSHRtbExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBsaW50ZXIgZm9yIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbExpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEh0bWxMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBIVE1MIHBhcnNlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBIdG1sUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxQYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBhcnNpbmcgb2YgZG91YmxlIHRleHQgZXhwcmVzc2lvbnMgc3VjaCBhcyBge3sgZXhwcmVzc2lvbiB9fWAgaW5zaWRlIGAuaHRtbGAgZmlsZXNcbiAgICpcbiAgICogQHNjaGVtYSBIdG1sUGFyc2VyQ29uZmlndXJhdGlvbiNpbnRlcnBvbGF0aW9uXG4gICAqL1xuICByZWFkb25seSBpbnRlcnBvbGF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sUGFyc2VyQ29uZmlndXJhdGlvbihvYmo6IEh0bWxQYXJzZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaW50ZXJwb2xhdGlvbic6IG9iai5pbnRlcnBvbGF0aW9uLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQXNzaXN0IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEphdmFTY3JpcHQgYXNzaXN0XG4gKlxuICogQHNjaGVtYSBKc0Fzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc0Fzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgYXNzaXN0IGZvciBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc0Fzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBKc0Fzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBGb3JtYXR0aW5nIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEphdmFTY3JpcHQgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBub24tbmVjZXNzYXJ5IHBhcmVudGhlc2VzIHRvIGFycm93IGZ1bmN0aW9ucy4gRGVmYXVsdHMgdG8gXCJhbHdheXNcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYWx3YXlzXCIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2Fycm93UGFyZW50aGVzZXNcbiAgICovXG4gIHJlYWRvbmx5IGFycm93UGFyZW50aGVzZXM/OiBBcnJvd1BhcmVudGhlc2VzO1xuXG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlIGluIEpTWCBlbGVtZW50cy4gRGVmYXVsdHMgdG8gYXV0by5cbiAgICpcbiAgICogQGRlZmF1bHQgYXV0by5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jYXR0cmlidXRlUG9zaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZVBvc2l0aW9uPzogQXR0cmlidXRlUG9zaXRpb247XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaHVnIHRoZSBjbG9zaW5nIGJyYWNrZXQgb2YgbXVsdGlsaW5lIEhUTUwvSlNYIHRhZ3MgdG8gdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lLCByYXRoZXIgdGhhbiBiZWluZyBhbG9uZSBvbiB0aGUgZm9sbG93aW5nIGxpbmUuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCBzcGFjZXMgYXJvdW5kIGJyYWNrZXRzIGluIG9iamVjdCBsaXRlcmFscy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4cGFuZCBhcnJheXMgYW5kIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMuXG4gICAqIFdoZW4gc2V0IHRvIGBhdXRvYCwgb2JqZWN0IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsXG4gICAqIGFuZCBhcnJheSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBzZXQgdG8gYGFsd2F5c2AsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMsIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIG9mIHRoZSBsaXN0LlxuICAgKiBXaGVuIHNldCB0byBgbmV2ZXJgLCB0aGVzZSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBmb3JtYXR0aW5nIGBwYWNrYWdlLmpzb25gLCBCaW9tZSB3aWxsIHVzZSBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuIERlZmF1bHRzIHRvIFwiYXV0b1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvXCIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2V4cGFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwYW5kPzogRXhwYW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0IHRvIDIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcXVvdGVzIHVzZWQgaW4gSlNYLiBEZWZhdWx0cyB0byBkb3VibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZS5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24janN4UXVvdGVTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkganN4UXVvdGVTdHlsZT86IFF1b3RlU3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBgYXV0b2AgdXNlcyBDUkxGIG9uIFdpbmRvd3MgYW5kIExGIG9uIG90aGVyIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIEphdmFTY3JpcHQgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gRGVmYXVsdHMgdG8gODAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDgwLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hlbiBicmVha2luZyBiaW5hcnkgZXhwcmVzc2lvbnMgaW50byBtdWx0aXBsZSBsaW5lcywgd2hldGhlciB0byBicmVhayB0aGVtIGJlZm9yZSBvciBhZnRlciB0aGUgYmluYXJ5IG9wZXJhdG9yLiBEZWZhdWx0cyB0byBcImFmdGVyXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFmdGVyXCIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI29wZXJhdG9yTGluZWJyZWFrXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRvckxpbmVicmVhaz86IE9wZXJhdG9yTGluZWJyZWFrO1xuXG4gIC8qKlxuICAgKiBXaGVuIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBhcmUgcXVvdGVkLiBEZWZhdWx0cyB0byBhc05lZWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYXNOZWVkZWQuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3F1b3RlUHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcXVvdGVQcm9wZXJ0aWVzPzogUXVvdGVQcm9wZXJ0aWVzO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBxdW90ZXMgdXNlZCBpbiBKYXZhU2NyaXB0IGNvZGUuIERlZmF1bHRzIHRvIGRvdWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZG91YmxlLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBxdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZm9ybWF0dGVyIHByaW50cyBzZW1pY29sb25zIGZvciBhbGwgc3RhdGVtZW50cyBvciBvbmx5IGluIGZvciBzdGF0ZW1lbnRzIHdoZXJlIGl0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIEFTSS5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jc2VtaWNvbG9uc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VtaWNvbG9ucz86IFNlbWljb2xvbnM7XG5cbiAgLyoqXG4gICAqIFByaW50IHRyYWlsaW5nIGNvbW1hcyB3aGVyZXZlciBwb3NzaWJsZSBpbiBtdWx0aS1saW5lIGNvbW1hLXNlcGFyYXRlZCBzeW50YWN0aWMgc3RydWN0dXJlcy4gRGVmYXVsdHMgdG8gXCJhbGxcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYWxsXCIuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IEpzVHJhaWxpbmdDb21tYXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgaXMgKipoaWdobHkgZGlzY291cmFnZWQqKiBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIG1hbnkgcHJvYmxlbXMgd2l0aCBvdGhlciB0b29sczpcbiAgICogLSBodHRwczovL3Rob3VnaHRib3QuY29tL2Jsb2cvbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZVxuICAgKiAtIGh0dHBzOi8vY2FsbG1lcnlhbi5tZWRpdW0uY29tL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGUtbmF2aWdhdGluZy1naXRzLXdhcm5pbmctZm9yLWFuZHJvaWQtZGV2ZWxvcGVycy1hZjE0ZTczZGQ4MDRcbiAgICogLSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzM0NTU0OC9ob3ctdG8tY2F0LWZpbGVzLXRvZ2V0aGVyLWFkZGluZy1taXNzaW5nLW5ld2xpbmVzLWF0LWVuZC1vZi1zb21lLWZpbGVzXG4gICAqXG4gICAqIERpc2FibGUgdGhlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fycm93UGFyZW50aGVzZXMnOiBvYmouYXJyb3dQYXJlbnRoZXNlcyxcbiAgICAnYXR0cmlidXRlUG9zaXRpb24nOiBvYmouYXR0cmlidXRlUG9zaXRpb24sXG4gICAgJ2JyYWNrZXRTYW1lTGluZSc6IG9iai5icmFja2V0U2FtZUxpbmUsXG4gICAgJ2JyYWNrZXRTcGFjaW5nJzogb2JqLmJyYWNrZXRTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2V4cGFuZCc6IG9iai5leHBhbmQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnanN4UXVvdGVTdHlsZSc6IG9iai5qc3hRdW90ZVN0eWxlLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ29wZXJhdG9yTGluZWJyZWFrJzogb2JqLm9wZXJhdG9yTGluZWJyZWFrLFxuICAgICdxdW90ZVByb3BlcnRpZXMnOiBvYmoucXVvdGVQcm9wZXJ0aWVzLFxuICAgICdxdW90ZVN0eWxlJzogb2JqLnF1b3RlU3R5bGUsXG4gICAgJ3NlbWljb2xvbnMnOiBvYmouc2VtaWNvbG9ucyxcbiAgICAndHJhaWxpbmdDb21tYXMnOiBvYmoudHJhaWxpbmdDb21tYXMsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgcnVudGltZSBvciB0cmFuc2Zvcm1hdGlvbiB1c2VkIGZvciBpbnRlcnByZXRpbmcgSlNYLlxuICpcbiAqIEBzY2hlbWEgSnN4UnVudGltZVxuICovXG5leHBvcnQgZW51bSBKc3hSdW50aW1lIHtcbiAgLyoqIEluZGljYXRlcyBhIG1vZGVybiBvciBuYXRpdmUgSlNYIGVudmlyb25tZW50LCB0aGF0IGRvZXNuJ3QgcmVxdWlyZVxuc3BlY2lhbCBoYW5kbGluZyBieSBCaW9tZS4gKHRyYW5zcGFyZW50KSAqL1xuICBUUkFOU1BBUkVOVCA9IFwidHJhbnNwYXJlbnRcIixcbiAgLyoqIEluZGljYXRlcyBhIGNsYXNzaWMgUmVhY3QgZW52aXJvbm1lbnQgdGhhdCByZXF1aXJlcyB0aGUgYFJlYWN0YCBpbXBvcnQuXG5cbkNvcnJlc3BvbmRzIHRvIHRoZSBgcmVhY3RgIHZhbHVlIGZvciB0aGUgYGpzeGAgb3B0aW9uIGluIFR5cGVTY3JpcHQnc1xuYHRzY29uZmlnLmpzb25gLlxuXG5UaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaWYgeW91IGNhbm5vdCB1cGdyYWRlIHRvIGEgUmVhY3RcbnZlcnNpb24gdGhhdCBzdXBwb3J0cyB0aGUgbmV3IEpTWCBydW50aW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dFxudGhlIG9sZCB2cy4gbmV3IEpTWCBydW50aW1lLCBwbGVhc2Ugc2VlOlxuPGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAyMC8wOS8yMi9pbnRyb2R1Y2luZy10aGUtbmV3LWpzeC10cmFuc2Zvcm0uaHRtbD4gKHJlYWN0Q2xhc3NpYykgKi9cbiAgUkVBQ1RfQ0xBU1NJQyA9IFwicmVhY3RDbGFzc2ljXCIsXG59XG5cbi8qKlxuICogTGludGVyIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEphdmFTY3JpcHQgbGludGVyXG4gKlxuICogQHNjaGVtYSBKc0xpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc0xpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc0xpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBKc0xpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIEphdmFTY3JpcHQgcGFyc2VyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIEpzUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnNpbmcgb2YgR3JpdCBtZXRhdmFyaWFibGVzLlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZWAuXG4gICAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uI2dyaXRNZXRhdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBncml0TWV0YXZhcmlhYmxlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgZmlsZXMgbGlrZSBgLmpzYC9gLm1qc2AvYC5janNgIG1heSBjb250YWluIEpTWCBzeW50YXguXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZWAuXG4gICAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uI2pzeEV2ZXJ5d2hlcmVcbiAgICovXG4gIHJlYWRvbmx5IGpzeEV2ZXJ5d2hlcmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJdCBlbmFibGVzIHRoZSBleHBlcmltZW50YWwgYW5kIHVuc2FmZSBwYXJzaW5nIG9mIHBhcmFtZXRlciBkZWNvcmF0b3JzXG4gICAqXG4gICAqIFRoZXNlIGRlY29yYXRvcnMgYmVsb25nIHRvIGFuIG9sZCBwcm9wb3NhbCwgYW5kIHRoZXkgYXJlIHN1YmplY3QgdG8gY2hhbmdlLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzUGFyc2VyQ29uZmlndXJhdGlvbiN1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgdW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc1BhcnNlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBKc1BhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdncml0TWV0YXZhcmlhYmxlcyc6IG9iai5ncml0TWV0YXZhcmlhYmxlcyxcbiAgICAnanN4RXZlcnl3aGVyZSc6IG9iai5qc3hFdmVyeXdoZXJlLFxuICAgICd1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCc6IG9iai51bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEFzc2lzdCBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBKU09OIGxpbnRlclxuICpcbiAqIEBzY2hlbWEgSnNvbkFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBhc3Npc3QgZm9yIEpTT04gKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEpzb25Bc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBhcm91bmQgYnJhY2tldHMgaW4gb2JqZWN0IGxpdGVyYWxzLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgSlNPTiAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4cGFuZCBhcnJheXMgYW5kIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMuXG4gICAqIFdoZW4gc2V0IHRvIGBhdXRvYCwgb2JqZWN0IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsXG4gICAqIGFuZCBhcnJheSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBzZXQgdG8gYGFsd2F5c2AsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMsIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIG9mIHRoZSBsaXN0LlxuICAgKiBXaGVuIHNldCB0byBgbmV2ZXJgLCB0aGVzZSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBmb3JtYXR0aW5nIGBwYWNrYWdlLmpzb25gLCBCaW9tZSB3aWxsIHVzZSBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuIERlZmF1bHRzIHRvIFwiYXV0b1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvXCIuXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVkIHRvIEpTT04gKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gRGVmYXVsdCB0byAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcgYXBwbGllZCB0byBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIGBhdXRvYCB1c2VzIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUgYXBwbGllZCB0byBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpLWxpbmUgY29tbWEtc2VwYXJhdGVkIHN5bnRhY3RpYyBzdHJ1Y3R1cmVzLiBEZWZhdWx0cyB0byBcIm5vbmVcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZVwiLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IEpzb25UcmFpbGluZ0NvbW1hcztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gYGZhbHNlYCBpcyAqKmhpZ2hseSBkaXNjb3VyYWdlZCoqIGJlY2F1c2UgaXQgY291bGQgY2F1c2UgbWFueSBwcm9ibGVtcyB3aXRoIG90aGVyIHRvb2xzOlxuICAgKiAtIGh0dHBzOi8vdGhvdWdodGJvdC5jb20vYmxvZy9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlXG4gICAqIC0gaHR0cHM6Ly9jYWxsbWVyeWFuLm1lZGl1bS5jb20vbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZS1uYXZpZ2F0aW5nLWdpdHMtd2FybmluZy1mb3ItYW5kcm9pZC1kZXZlbG9wZXJzLWFmMTRlNzNkZDgwNFxuICAgKiAtIGh0dHBzOi8vdW5peC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMzQ1NTQ4L2hvdy10by1jYXQtZmlsZXMtdG9nZXRoZXItYWRkaW5nLW1pc3NpbmctbmV3bGluZXMtYXQtZW5kLW9mLXNvbWUtZmlsZXNcbiAgICpcbiAgICogRGlzYWJsZSB0aGUgb3B0aW9uIGF0IHlvdXIgb3duIHJpc2suXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAndHJhaWxpbmdDb21tYXMnOiBvYmoudHJhaWxpbmdDb21tYXMsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBMaW50ZXIgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgSlNPTiBsaW50ZXJcbiAqXG4gKiBAc2NoZW1hIEpzb25MaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzb25MaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBKc29uTGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSlNPTiBwYXJzZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSnNvblBhcnNlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbGxvdyBwYXJzaW5nIGNvbW1lbnRzIGluIGAuanNvbmAgZmlsZXNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiNhbGxvd0NvbW1lbnRzXG4gICAqL1xuICByZWFkb25seSBhbGxvd0NvbW1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgcGFyc2luZyB0cmFpbGluZyBjb21tYXMgaW4gYC5qc29uYCBmaWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzb25QYXJzZXJDb25maWd1cmF0aW9uI2FsbG93VHJhaWxpbmdDb21tYXNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93VHJhaWxpbmdDb21tYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25QYXJzZXJDb25maWd1cmF0aW9uKG9iajogSnNvblBhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhbGxvd0NvbW1lbnRzJzogb2JqLmFsbG93Q29tbWVudHMsXG4gICAgJ2FsbG93VHJhaWxpbmdDb21tYXMnOiBvYmouYWxsb3dUcmFpbGluZ0NvbW1hcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUnVsZURvbWFpblZhbHVlXG4gKi9cbmV4cG9ydCBlbnVtIFJ1bGVEb21haW5WYWx1ZSB7XG4gIC8qKiBFbmFibGVzIGFsbCB0aGUgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBkb21haW4gKGFsbCkgKi9cbiAgQUxMID0gXCJhbGxcIixcbiAgLyoqIERpc2FibGVzIGFsbCB0aGUgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBkb21haW4gKG5vbmUpICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIEVuYWJsZXMgb25seSB0aGUgcmVjb21tZW5kZWQgcnVsZXMgZm9yIHRoaXMgZG9tYWluIChyZWNvbW1lbmRlZCkgKi9cbiAgUkVDT01NRU5ERUQgPSBcInJlY29tbWVuZGVkXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBSdWxlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjYTExeVxuICAgKi9cbiAgcmVhZG9ubHkgYTExWT86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNjb21wbGV4aXR5XG4gICAqL1xuICByZWFkb25seSBjb21wbGV4aXR5PzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI2NvcnJlY3RuZXNzXG4gICAqL1xuICByZWFkb25seSBjb3JyZWN0bmVzcz86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNudXJzZXJ5XG4gICAqL1xuICByZWFkb25seSBudXJzZXJ5PzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3BlcmZvcm1hbmNlXG4gICAqL1xuICByZWFkb25seSBwZXJmb3JtYW5jZT86IGFueTtcblxuICAvKipcbiAgICogSXQgZW5hYmxlcyB0aGUgbGludCBydWxlcyByZWNvbW1lbmRlZCBieSBCaW9tZS4gYHRydWVgIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEBzY2hlbWEgUnVsZXMjcmVjb21tZW5kZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29tbWVuZGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNzZWN1cml0eVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjc3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHN0eWxlPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3N1c3BpY2lvdXNcbiAgICovXG4gIHJlYWRvbmx5IHN1c3BpY2lvdXM/OiBhbnk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1J1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUnVsZXMob2JqOiBSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ExMXknOiBvYmouYTExWSxcbiAgICAnY29tcGxleGl0eSc6IG9iai5jb21wbGV4aXR5LFxuICAgICdjb3JyZWN0bmVzcyc6IG9iai5jb3JyZWN0bmVzcyxcbiAgICAnbnVyc2VyeSc6IG9iai5udXJzZXJ5LFxuICAgICdwZXJmb3JtYW5jZSc6IG9iai5wZXJmb3JtYW5jZSxcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3NlY3VyaXR5Jzogb2JqLnNlY3VyaXR5LFxuICAgICdzdHlsZSc6IG9iai5zdHlsZSxcbiAgICAnc3VzcGljaW91cyc6IG9iai5zdXNwaWNpb3VzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdCBvZiBhY3Rpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uI2FjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBBY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBpZiBgZmFsc2VgLCBpdCBkaXNhYmxlcyB0aGUgZmVhdHVyZSBhbmQgdGhlIGFzc2lzdCB3b24ndCBiZSBleGVjdXRlZC4gYHRydWVgIGJ5IGRlZmF1bHRcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IE92ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjdGlvbnMnOiB0b0pzb25fQWN0aW9ucyhvYmouYWN0aW9ucyksXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgbGltaXQgaW4gYnl0ZXNcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbiNtYXhTaXplXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uKG9iajogT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtYXhTaXplJzogb2JqLm1heFNpemUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogUHV0IHRoZSBgPmAgb2YgYSBtdWx0aS1saW5lIEhUTUwgb3IgSlNYIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2YgYmVpbmcgYWxvbmUgb24gdGhlIG5leHQgbGluZSAoZG9lcyBub3QgYXBwbHkgdG8gc2VsZiBjbG9zaW5nIGVsZW1lbnRzKS5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCBzcGFjZXMgYXJvdW5kIGJyYWNrZXRzIGluIG9iamVjdCBsaXRlcmFscy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhwYW5kIGFycmF5cyBhbmQgb2JqZWN0cyBvbiBtdWx0aXBsZSBsaW5lcy5cbiAgICogV2hlbiBzZXQgdG8gYGF1dG9gLCBvYmplY3QgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcyBpZiB0aGUgZmlyc3QgcHJvcGVydHkgaGFzIGEgbmV3bGluZSxcbiAgICogYW5kIGFycmF5IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIHNldCB0byBgYWx3YXlzYCwgdGhlc2UgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcywgcmVnYXJkbGVzcyBvZiBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAqIFdoZW4gc2V0IHRvIGBuZXZlcmAsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIGZvcm1hdHRpbmcgYHBhY2thZ2UuanNvbmAsIEJpb21lIHdpbGwgdXNlIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS4gRGVmYXVsdHMgdG8gXCJhdXRvXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9cIi5cbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyB3aGV0aGVyIGZvcm1hdHRpbmcgc2hvdWxkIGJlIGFsbG93ZWQgdG8gcHJvY2VlZCBpZiBhIGdpdmVuIGZpbGVcbiAgICogaGFzIHN5bnRheCBlcnJvcnNcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZm9ybWF0V2l0aEVycm9yc1xuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0V2l0aEVycm9ycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiwgMiBieSBkZWZhdWx0IChkZXByZWNhdGVkLCB1c2UgYGluZGVudC13aWR0aGApXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFNpemVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24sIDIgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQcmludCB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgaW4gbXVsdGktbGluZSBjb21tYS1zZXBhcmF0ZWQgc3ludGFjdGljIHN0cnVjdHVyZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IEpzVHJhaWxpbmdDb21tYXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgaXMgKipoaWdobHkgZGlzY291cmFnZWQqKiBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIG1hbnkgcHJvYmxlbXMgd2l0aCBvdGhlciB0b29sczpcbiAgICogLSBodHRwczovL3Rob3VnaHRib3QuY29tL2Jsb2cvbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZVxuICAgKiAtIGh0dHBzOi8vY2FsbG1lcnlhbi5tZWRpdW0uY29tL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGUtbmF2aWdhdGluZy1naXRzLXdhcm5pbmctZm9yLWFuZHJvaWQtZGV2ZWxvcGVycy1hZjE0ZTczZGQ4MDRcbiAgICogLSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzM0NTU0OC9ob3ctdG8tY2F0LWZpbGVzLXRvZ2V0aGVyLWFkZGluZy1taXNzaW5nLW5ld2xpbmVzLWF0LWVuZC1vZi1zb21lLWZpbGVzXG4gICAqXG4gICAqIERpc2FibGUgdGhlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZVBvc2l0aW9uJzogb2JqLmF0dHJpYnV0ZVBvc2l0aW9uLFxuICAgICdicmFja2V0U2FtZUxpbmUnOiBvYmouYnJhY2tldFNhbWVMaW5lLFxuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdmb3JtYXRXaXRoRXJyb3JzJzogb2JqLmZvcm1hdFdpdGhFcnJvcnMsXG4gICAgJ2luZGVudFNpemUnOiBvYmouaW5kZW50U2l6ZSxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3RyYWlsaW5nQ29tbWFzJzogb2JqLnRyYWlsaW5nQ29tbWFzLFxuICAgICd0cmFpbGluZ05ld2xpbmUnOiBvYmoudHJhaWxpbmdOZXdsaW5lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdCBvZiBydWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbiNkb21haW5zXG4gICAqL1xuICByZWFkb25seSBkb21haW5zPzogeyBba2V5OiBzdHJpbmddOiBSdWxlRG9tYWluVmFsdWUgfTtcblxuICAvKipcbiAgICogaWYgYGZhbHNlYCwgaXQgZGlzYWJsZXMgdGhlIGZlYXR1cmUgYW5kIHRoZSBsaW50ZXIgd29uJ3QgYmUgZXhlY3V0ZWQuIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJ1bGVzXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkb21haW5zJzogKChvYmouZG9tYWlucykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRvbWFpbnMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ3J1bGVzJzogdG9Kc29uX1J1bGVzKG9iai5ydWxlcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB3aXRoIHRoZSBnaXQgY2xpZW50IGFzIFZDU1xuICpcbiAqIEBzY2hlbWEgVmNzQ2xpZW50S2luZFxuICovXG5leHBvcnQgZW51bSBWY3NDbGllbnRLaW5kIHtcbiAgLyoqIGdpdCAqL1xuICBHSVQgPSBcImdpdFwiLFxufVxuXG4vKipcbiAqIEEgbGlzdCBvZiBydWxlcyB0aGF0IGJlbG9uZyB0byB0aGlzIGdyb3VwXG4gKlxuICogQHNjaGVtYSBTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2Uge1xuICAvKipcbiAgICogUmVtb3ZlIGR1cGxpY2F0ZSBDU1MgY2xhc3Nlcy5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvbm8tZHVwbGljYXRlLWNsYXNzZXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2Ujbm9EdXBsaWNhdGVDbGFzc2VzXG4gICAqL1xuICByZWFkb25seSBub0R1cGxpY2F0ZUNsYXNzZXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnRzIGltcG9ydHMgYW5kIGV4cG9ydHMgaW4geW91ciBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IGZpbGVzLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy9vcmdhbml6ZS1pbXBvcnRzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI29yZ2FuaXplSW1wb3J0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemVJbXBvcnRzPzogYW55O1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSByZWNvbW1lbmRlZCBydWxlcyBmb3IgdGhpcyBncm91cFxuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSNyZWNvbW1lbmRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb21tZW5kZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmZvcmNlIGF0dHJpYnV0ZSBzb3J0aW5nIGluIEpTWCBlbGVtZW50cy5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvdXNlLXNvcnRlZC1hdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZEF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNvcnRlZEF0dHJpYnV0ZXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgaW50ZXJmYWNlIG1lbWJlcnMgYnkga2V5LlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWludGVyZmFjZS1tZW1iZXJzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZEludGVyZmFjZU1lbWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNvcnRlZEludGVyZmFjZU1lbWJlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIGtleXMgb2YgYSBKU09OIG9iamVjdCBpbiBuYXR1cmFsIG9yZGVyLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWtleXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkS2V5c1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkS2V5cz86IGFueTtcblxuICAvKipcbiAgICogRW5mb3JjZSBvcmRlcmluZyBvZiBDU1MgcHJvcGVydGllcyBhbmQgbmVzdGVkIHJ1bGVzLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLXByb3BlcnRpZXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkUHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkUHJvcGVydGllcz86IGFueTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnU291cmNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU291cmNlKG9iajogU291cmNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbm9EdXBsaWNhdGVDbGFzc2VzJzogb2JqLm5vRHVwbGljYXRlQ2xhc3NlcyxcbiAgICAnb3JnYW5pemVJbXBvcnRzJzogb2JqLm9yZ2FuaXplSW1wb3J0cyxcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3VzZVNvcnRlZEF0dHJpYnV0ZXMnOiBvYmoudXNlU29ydGVkQXR0cmlidXRlcyxcbiAgICAndXNlU29ydGVkSW50ZXJmYWNlTWVtYmVycyc6IG9iai51c2VTb3J0ZWRJbnRlcmZhY2VNZW1iZXJzLFxuICAgICd1c2VTb3J0ZWRLZXlzJzogb2JqLnVzZVNvcnRlZEtleXMsXG4gICAgJ3VzZVNvcnRlZFByb3BlcnRpZXMnOiBvYmoudXNlU29ydGVkUHJvcGVydGllcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUXVvdGVTdHlsZVxuICovXG5leHBvcnQgZW51bSBRdW90ZVN0eWxlIHtcbiAgLyoqIGRvdWJsZSAqL1xuICBET1VCTEUgPSBcImRvdWJsZVwiLFxuICAvKiogc2luZ2xlICovXG4gIFNJTkdMRSA9IFwic2luZ2xlXCIsXG59XG5cbi8qKlxuICogQ29udHJvbHMgd2hldGhlciB2b2lkLWVsZW1lbnRzIHNob3VsZCBiZSBzZWxmIGNsb3NlZFxuICpcbiAqIEBzY2hlbWEgU2VsZkNsb3NlVm9pZEVsZW1lbnRzXG4gKi9cbmV4cG9ydCBlbnVtIFNlbGZDbG9zZVZvaWRFbGVtZW50cyB7XG4gIC8qKiBUaGUgYC9gIGluc2lkZSB2b2lkIGVsZW1lbnRzIGlzIHJlbW92ZWQgYnkgdGhlIGZvcm1hdHRlciAobmV2ZXIpICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxuICAvKiogVGhlIGAvYCBpbnNpZGUgdm9pZCBlbGVtZW50cyBpcyBhbHdheXMgYWRkZWQgKGFsd2F5cykgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbn1cblxuLyoqXG4gKiBXaGl0ZXNwYWNlIHNlbnNpdGl2aXR5IGZvciBIVE1MIGZvcm1hdHRpbmcuXG4gKlxuICogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgd29uJ3QgcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQ6XG4gKlxuICogfCAgICAgICAgICAgICAgICB8ICAgICAgaHRtbCAgICAgIHwgICAgb3V0cHV0ICAgIHxcbiAqIHwgLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tOiB8IDotLS0tLS0tLS0tOiB8XG4gKiB8IHdpdGggc3BhY2VzICAgIHwgYDE8Yj4gMiA8L2I+M2AgfCAxPGI+IDIgPC9iPjMgfFxuICogfCB3aXRob3V0IHNwYWNlcyB8ICBgMTxiPjI8L2I+M2AgIHwgIDE8Yj4yPC9iPjMgIHxcbiAqXG4gKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB3aGl0ZXNwYWNlIGlzIHNpZ25pZmljYW50IGluIGlubGluZSBlbGVtZW50cy5cbiAqXG4gKiBBcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMsIHRoZSBmb3JtYXR0ZXIgbXVzdCBmb3JtYXQgYmxvY2tzIHRoYXQgbG9vayBsaWtlIHRoaXMgKGFzc3VtZSBhIHNtYWxsIGxpbmUgd2lkdGgsIDwyMCk6XG4gKiBgYGBodG1sXG4gKiA8c3Bhbj5yZWFsbHkgbG9uZyBjb250ZW50PC9zcGFuPlxuICogYGBgXG4gKiBhcyB0aGlzLCB3aGVyZSB0aGUgY29udGVudCBodWdzIHRoZSB0YWdzOlxuICogYGBgaHRtbFxuICogPHNwYW5cbiAqID5yZWFsbHkgbG9uZyBjb250ZW50PC9zcGFuXG4gKiA+XG4gKiBgYGBcbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgaW5saW5lIGVsZW1lbnRzLiBCbG9jayBlbGVtZW50cyBkbyBub3QgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLlxuICpcbiAqIEBzY2hlbWEgV2hpdGVzcGFjZVNlbnNpdGl2aXR5XG4gKi9cbmV4cG9ydCBlbnVtIFdoaXRlc3BhY2VTZW5zaXRpdml0eSB7XG4gIC8qKiBUaGUgZm9ybWF0dGVyIGNvbnNpZGVycyB3aGl0ZXNwYWNlIHNpZ25pZmljYW50IGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYW4gXCJpbmxpbmVcIiBkaXNwbGF5IHN0eWxlIGJ5IGRlZmF1bHQgaW5cbmJyb3dzZXIncyB1c2VyIGFnZW50IHN0eWxlIHNoZWV0cy4gKGNzcykgKi9cbiAgQ1NTID0gXCJjc3NcIixcbiAgLyoqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gY29udGVudCBpcyBjb25zaWRlcmVkIHNpZ25pZmljYW50IGZvciBhbGwgZWxlbWVudHMuXG5cblRoZSBmb3JtYXR0ZXIgc2hvdWxkIGxlYXZlIGF0IGxlYXN0IG9uZSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpZiB3aGl0ZXNwYWNlIGlzIHByZXNlbnQuXG5PdGhlcndpc2UsIGlmIHRoZXJlIGlzIG5vIHdoaXRlc3BhY2UsIGl0IHNob3VsZCBub3QgYWRkIGFueSBhZnRlciBgPmAgb3IgYmVmb3JlIGA8YC4gSW4gb3RoZXIgd29yZHMsIGlmIHRoZXJlJ3Mgbm8gd2hpdGVzcGFjZSwgdGhlIHRleHQgY29udGVudCBzaG91bGQgaHVnIHRoZSB0YWdzLlxuXG5FeGFtcGxlIG9mIHRleHQgaHVnZ2luZyB0aGUgdGFnczpcbmBgYGh0bWxcbjxiXG4gICAgPmNvbnRlbnQ8L2Jcbj5cbmBgYCAoc3RyaWN0KSAqL1xuICBTVFJJQ1QgPSBcInN0cmljdFwiLFxuICAvKiogV2hpdGVzcGFjZSBpcyBjb25zaWRlcmVkIGluc2lnbmlmaWNhbnQuIFRoZSBmb3JtYXR0ZXIgaXMgZnJlZSB0byByZW1vdmUgb3IgYWRkIHdoaXRlc3BhY2UgYXMgaXQgc2VlcyBmaXQuIChpZ25vcmUpICovXG4gIElHTk9SRSA9IFwiaWdub3JlXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBBcnJvd1BhcmVudGhlc2VzXG4gKi9cbmV4cG9ydCBlbnVtIEFycm93UGFyZW50aGVzZXMge1xuICAvKiogYWx3YXlzICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBhc05lZWRlZCAqL1xuICBBU19ORUVERUQgPSBcImFzTmVlZGVkXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBPcGVyYXRvckxpbmVicmVha1xuICovXG5leHBvcnQgZW51bSBPcGVyYXRvckxpbmVicmVhayB7XG4gIC8qKiBUaGUgb3BlcmF0b3IgaXMgcGxhY2VkIGFmdGVyIHRoZSBleHByZXNzaW9uIChhZnRlcikgKi9cbiAgQUZURVIgPSBcImFmdGVyXCIsXG4gIC8qKiBUaGUgb3BlcmF0b3IgaXMgcGxhY2VkIGJlZm9yZSB0aGUgZXhwcmVzc2lvbiAoYmVmb3JlKSAqL1xuICBCRUZPUkUgPSBcImJlZm9yZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUXVvdGVQcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBlbnVtIFF1b3RlUHJvcGVydGllcyB7XG4gIC8qKiBhc05lZWRlZCAqL1xuICBBU19ORUVERUQgPSBcImFzTmVlZGVkXCIsXG4gIC8qKiBwcmVzZXJ2ZSAqL1xuICBQUkVTRVJWRSA9IFwicHJlc2VydmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIFNlbWljb2xvbnNcbiAqL1xuZXhwb3J0IGVudW0gU2VtaWNvbG9ucyB7XG4gIC8qKiBhbHdheXMgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbiAgLyoqIGFzTmVlZGVkICovXG4gIEFTX05FRURFRCA9IFwiYXNOZWVkZWRcIixcbn1cblxuLyoqXG4gKiBQcmludCB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgaW4gbXVsdGktbGluZSBjb21tYS1zZXBhcmF0ZWQgc3ludGFjdGljIHN0cnVjdHVyZXMgZm9yIEphdmFTY3JpcHQvVHlwZVNjcmlwdCBmaWxlcy5cbiAqXG4gKiBAc2NoZW1hIEpzVHJhaWxpbmdDb21tYXNcbiAqL1xuZXhwb3J0IGVudW0gSnNUcmFpbGluZ0NvbW1hcyB7XG4gIC8qKiBhbGwgKi9cbiAgQUxMID0gXCJhbGxcIixcbiAgLyoqIGVzNSAqL1xuICBFUzUgPSBcImVzNVwiLFxuICAvKiogbm9uZSAqL1xuICBOT05FID0gXCJub25lXCIsXG59XG5cbi8qKlxuICogUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpLWxpbmUgY29tbWEtc2VwYXJhdGVkIHN5bnRhY3RpYyBzdHJ1Y3R1cmVzIGZvciBKU09OIGZpbGVzLlxuICpcbiAqIEBzY2hlbWEgSnNvblRyYWlsaW5nQ29tbWFzXG4gKi9cbmV4cG9ydCBlbnVtIEpzb25UcmFpbGluZ0NvbW1hcyB7XG4gIC8qKiBub25lICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIGFsbCAqL1xuICBBTEwgPSBcImFsbFwiLFxufVxuIl19
|