projen 0.101.2 → 0.101.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +878 -110
- 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 +1 -1
- 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 +3 -3
- 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/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/cli/task-runtime.js +34 -7
- package/lib/component.d.ts +70 -0
- package/lib/component.js +183 -3
- 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/index.d.ts +1 -0
- package/lib/index.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.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 +1 -1
- 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.d.ts +1 -1
- package/lib/python/python-project.js +2 -2
- 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/run-task.cjs +20 -3
- package/lib/sample-file.js +2 -2
- package/lib/script-runner.d.ts +35 -0
- package/lib/script-runner.js +22 -0
- package/lib/source-code.js +1 -1
- package/lib/task-shell.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/index.d.ts +1 -0
- package/lib/typescript/index.js +2 -1
- package/lib/typescript/projenrc-ts.d.ts +11 -3
- package/lib/typescript/projenrc-ts.js +38 -6
- package/lib/typescript/projenrc.d.ts +14 -3
- package/lib/typescript/projenrc.js +36 -18
- package/lib/typescript/typescript-runner.d.ts +146 -0
- package/lib/typescript/typescript-runner.js +134 -0
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.d.ts +14 -0
- package/lib/typescript/typescript.js +12 -6
- package/lib/util/recreate.d.ts +30 -0
- package/lib/util/recreate.js +38 -0
- 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 +3 -3
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +2 -2
package/lib/json.js
CHANGED
|
@@ -7,7 +7,7 @@ const object_file_1 = require("./object-file");
|
|
|
7
7
|
* Represents a JSON file.
|
|
8
8
|
*/
|
|
9
9
|
class JsonFile extends object_file_1.ObjectFile {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.JsonFile", version: "0.101.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.JsonFile", version: "0.101.4" };
|
|
11
11
|
newline;
|
|
12
12
|
allowComments = true;
|
|
13
13
|
/**
|
package/lib/license.js
CHANGED
|
@@ -38,7 +38,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const file_1 = require("./file");
|
|
40
40
|
class License extends file_1.FileBase {
|
|
41
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.License", version: "0.101.
|
|
41
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.License", version: "0.101.4" };
|
|
42
42
|
text;
|
|
43
43
|
constructor(project, options) {
|
|
44
44
|
super(project, "LICENSE", {
|
package/lib/logger.js
CHANGED
|
@@ -15,7 +15,7 @@ const constructs_1 = require("./util/constructs");
|
|
|
15
15
|
* Project-level logging utilities.
|
|
16
16
|
*/
|
|
17
17
|
class Logger extends component_1.Component {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Logger", version: "0.101.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Logger", version: "0.101.4" };
|
|
19
19
|
level;
|
|
20
20
|
usePrefix;
|
|
21
21
|
constructor(scope, options = {}) {
|
package/lib/makefile.js
CHANGED
|
@@ -7,7 +7,7 @@ const file_1 = require("./file");
|
|
|
7
7
|
* Minimal Makefile.
|
|
8
8
|
*/
|
|
9
9
|
class Makefile extends file_1.FileBase {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Makefile", version: "0.101.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Makefile", version: "0.101.4" };
|
|
11
11
|
/**
|
|
12
12
|
* List of rule definitions.
|
|
13
13
|
*/
|
package/lib/object-file.js
CHANGED
|
@@ -9,7 +9,7 @@ const util_1 = require("./util");
|
|
|
9
9
|
* Represents an Object file.
|
|
10
10
|
*/
|
|
11
11
|
class ObjectFile extends file_1.FileBase {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ObjectFile", version: "0.101.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ObjectFile", version: "0.101.4" };
|
|
13
13
|
/**
|
|
14
14
|
* The output object. This object can be mutated until the project is
|
|
15
15
|
* synthesized.
|
package/lib/project-build.js
CHANGED
|
@@ -15,7 +15,7 @@ const component_1 = require("./component");
|
|
|
15
15
|
* 6. package
|
|
16
16
|
*/
|
|
17
17
|
class ProjectBuild extends component_1.Component {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ProjectBuild", version: "0.101.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ProjectBuild", version: "0.101.4" };
|
|
19
19
|
/**
|
|
20
20
|
* The task responsible for a full release build.
|
|
21
21
|
*/
|
package/lib/project-tree.js
CHANGED
|
@@ -17,7 +17,7 @@ const json_1 = require("./json");
|
|
|
17
17
|
* @stability experimental
|
|
18
18
|
*/
|
|
19
19
|
class ProjectTree extends component_1.Component {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ProjectTree", version: "0.101.
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ProjectTree", version: "0.101.4" };
|
|
21
21
|
file;
|
|
22
22
|
constructor(project) {
|
|
23
23
|
super(project, new.target.name);
|
package/lib/project.js
CHANGED
|
@@ -65,7 +65,7 @@ const DEFAULT_OUTDIR = ".";
|
|
|
65
65
|
* Base project
|
|
66
66
|
*/
|
|
67
67
|
class Project extends constructs_1.Construct {
|
|
68
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Project", version: "0.101.
|
|
68
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Project", version: "0.101.4" };
|
|
69
69
|
/**
|
|
70
70
|
* The name of the default task (the task executed when `projen` is run without arguments). Normally
|
|
71
71
|
* this task should synthesize the project files.
|
package/lib/projects.js
CHANGED
|
@@ -44,7 +44,7 @@ const option_hints_1 = require("./option-hints");
|
|
|
44
44
|
* Programmatic API for projen.
|
|
45
45
|
*/
|
|
46
46
|
class Projects {
|
|
47
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Projects", version: "0.101.
|
|
47
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Projects", version: "0.101.4" };
|
|
48
48
|
/**
|
|
49
49
|
* Creates a new project with defaults.
|
|
50
50
|
*
|
package/lib/projenrc-json.js
CHANGED
|
@@ -9,7 +9,7 @@ const projenrc_1 = require("./projenrc");
|
|
|
9
9
|
* Sets up a project to use JSON for projenrc.
|
|
10
10
|
*/
|
|
11
11
|
class ProjenrcJson extends projenrc_1.ProjenrcFile {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ProjenrcJson", version: "0.101.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ProjenrcJson", version: "0.101.4" };
|
|
13
13
|
filePath;
|
|
14
14
|
constructor(project, options = {}) {
|
|
15
15
|
super(project);
|
package/lib/projenrc.js
CHANGED
|
@@ -7,7 +7,7 @@ const component_1 = require("./component");
|
|
|
7
7
|
* A component representing the projen runtime configuration
|
|
8
8
|
*/
|
|
9
9
|
class ProjenrcFile extends component_1.Component {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ProjenrcFile", version: "0.101.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ProjenrcFile", version: "0.101.4" };
|
|
11
11
|
/**
|
|
12
12
|
* Returns the `Projenrc` instance associated with a project or `undefined` if
|
|
13
13
|
* there is no Projenrc.
|
package/lib/python/pip.js
CHANGED
|
@@ -9,7 +9,7 @@ const dependencies_1 = require("../dependencies");
|
|
|
9
9
|
* Manages dependencies using a requirements.txt file and the pip CLI tool.
|
|
10
10
|
*/
|
|
11
11
|
class Pip extends component_1.Component {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Pip", version: "0.101.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Pip", version: "0.101.4" };
|
|
13
13
|
installCiTask;
|
|
14
14
|
constructor(project, _options = {}) {
|
|
15
15
|
super(project);
|
package/lib/python/poetry.js
CHANGED
|
@@ -47,7 +47,7 @@ const exec_1 = require("../util/exec");
|
|
|
47
47
|
* poetry CLI tool.
|
|
48
48
|
*/
|
|
49
49
|
class Poetry extends component_1.Component {
|
|
50
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Poetry", version: "0.101.
|
|
50
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Poetry", version: "0.101.4" };
|
|
51
51
|
/**
|
|
52
52
|
* Task for updating the lockfile and installing project dependencies.
|
|
53
53
|
*/
|
|
@@ -250,7 +250,7 @@ exports.Poetry = Poetry;
|
|
|
250
250
|
* @see https://python-poetry.org/docs/pyproject/
|
|
251
251
|
*/
|
|
252
252
|
class PoetryPyproject extends component_1.Component {
|
|
253
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PoetryPyproject", version: "0.101.
|
|
253
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PoetryPyproject", version: "0.101.4" };
|
|
254
254
|
file;
|
|
255
255
|
constructor(scope, options) {
|
|
256
256
|
super(scope);
|
package/lib/python/projenrc.js
CHANGED
|
@@ -17,7 +17,7 @@ const projenrc_1 = require("../projenrc");
|
|
|
17
17
|
* `synth` task which will run `.projenrc.py`.
|
|
18
18
|
*/
|
|
19
19
|
class Projenrc extends projenrc_1.ProjenrcFile {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Projenrc", version: "0.101.
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Projenrc", version: "0.101.4" };
|
|
21
21
|
/**
|
|
22
22
|
* The name of the projenrc file.
|
|
23
23
|
*/
|
|
@@ -10,7 +10,7 @@ const pyproject_toml_1 = require("./pyproject-toml");
|
|
|
10
10
|
* @see https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
|
|
11
11
|
*/
|
|
12
12
|
class PyprojectTomlFile extends toml_1.TomlFile {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PyprojectTomlFile", version: "0.101.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PyprojectTomlFile", version: "0.101.4" };
|
|
14
14
|
constructor(scope, config) {
|
|
15
15
|
super(scope, "pyproject.toml", {
|
|
16
16
|
omitEmpty: false,
|
|
@@ -7,7 +7,7 @@ const __1 = require("..");
|
|
|
7
7
|
* Python test code sample.
|
|
8
8
|
*/
|
|
9
9
|
class PytestSample extends __1.Component {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PytestSample", version: "0.101.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PytestSample", version: "0.101.4" };
|
|
11
11
|
constructor(project, options) {
|
|
12
12
|
super(project);
|
|
13
13
|
new __1.SampleDir(project, options.testdir, {
|
package/lib/python/pytest.js
CHANGED
|
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const component_1 = require("../component");
|
|
6
6
|
const dependencies_1 = require("../dependencies");
|
|
7
7
|
class Pytest extends component_1.Component {
|
|
8
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Pytest", version: "0.101.
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Pytest", version: "0.101.4" };
|
|
9
9
|
testMatch;
|
|
10
10
|
constructor(project, options = {}) {
|
|
11
11
|
super(project);
|
|
@@ -149,7 +149,7 @@ export interface PythonProjectOptions extends GitHubProjectOptions, PythonPackag
|
|
|
149
149
|
* Use projenrc in TypeScript.
|
|
150
150
|
*
|
|
151
151
|
* This will create a tsconfig file (default: `tsconfig.projen.json`)
|
|
152
|
-
* and use
|
|
152
|
+
* and use a typescript runner in the default task to parse the project source files.
|
|
153
153
|
*
|
|
154
154
|
* @default false
|
|
155
155
|
*/
|
|
@@ -23,7 +23,7 @@ const PYTHON_PROJECT_NAME_REGEX = /^[A-Za-z0-9-_\.]+$/;
|
|
|
23
23
|
* @pjid python
|
|
24
24
|
*/
|
|
25
25
|
class PythonProject extends github_1.GitHubProject {
|
|
26
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonProject", version: "0.101.
|
|
26
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonProject", version: "0.101.4" };
|
|
27
27
|
/**
|
|
28
28
|
* Python module name (the project name, with any hyphens or periods replaced
|
|
29
29
|
* with underscores).
|
|
@@ -254,4 +254,4 @@ class PythonProject extends github_1.GitHubProject {
|
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
256
|
exports.PythonProject = PythonProject;
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0aG9uLXByb2plY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHl0aG9uL3B5dGhvbi1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwrQkFBNEI7QUFDNUIscUNBQWtDO0FBRWxDLHlDQUF3RDtBQUV4RCxxQ0FBa0M7QUFDbEMsbURBQStDO0FBTy9DLG1EQUErQztBQUMvQyw2Q0FBMEM7QUFDMUMsNkJBQTBCO0FBRTFCLGlDQUE4QjtBQUU5QixzQ0FBMEM7QUFFMUMscURBQWdFO0FBRWhFLDhDQUEyQztBQUMzQyxrQ0FBd0Q7QUFFeEQsaURBQWlEO0FBQ2pELE1BQU0seUJBQXlCLEdBQUcsb0JBQW9CLENBQUM7QUF5THZEOzs7O0dBSUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxzQkFBYTs7SUFDOUM7OztPQUdHO0lBQ2EsVUFBVSxDQUFTO0lBRW5DOztPQUVHO0lBQ2EsT0FBTyxDQUFTO0lBRWhDOztPQUVHO0lBQ2EsV0FBVyxDQUFlO0lBRTFDOztPQUVHO0lBQ2EsVUFBVSxDQUFjO0lBRXhDOztPQUVHO0lBQ2EsZ0JBQWdCLENBQW9CO0lBRXBEOztPQUVHO0lBQ0ksTUFBTSxDQUFVO0lBRXZCOzs7T0FHRztJQUNhLGFBQWEsQ0FBUztJQUV0QyxZQUFZLE9BQTZCO1FBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FDYix5RkFBeUYsQ0FDMUYsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUM7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QUFnQixFQUNoQixNQUFNLEVBQ04sT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsTUFBTSxFQUNOLFVBQVUsRUFDVixXQUFXLEVBQ1gsRUFBRSxFQUNGLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLEVBQUUsRUFDRix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLEVBQUUsRUFDRix3QkFBd0IsRUFDeEIsT0FBTyxFQUNQLEVBQUUsRUFDRixRQUFRLEVBQ1IsY0FBYyxFQUNkLGFBQWEsRUFDYixZQUFZLEVBQ1osRUFBRSxFQUNGLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsRUFBRSxFQUNGLCtCQUErQixFQUMvQixVQUFVLEVBQ1YsRUFBRSxFQUNGLHdCQUF3QixFQUN4QixlQUFlLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGFBQWEsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sY0FBYztRQUNuQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUN6QyxDQUFDOztBQXBhSCxzQ0FxYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXAgfSBmcm9tIFwiLi9waXBcIjtcbmltcG9ydCB7IFBvZXRyeSB9IGZyb20gXCIuL3BvZXRyeVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZW5yY09wdGlvbnMgYXMgUHJvamVucmNQeXRob25PcHRpb25zIH0gZnJvbSBcIi4vcHJvamVucmNcIjtcbmltcG9ydCB7IFByb2plbnJjIGFzIFByb2plbnJjUHl0aG9uIH0gZnJvbSBcIi4vcHJvamVucmNcIjtcbmltcG9ydCB0eXBlIHsgUHl0ZXN0T3B0aW9ucyB9IGZyb20gXCIuL3B5dGVzdFwiO1xuaW1wb3J0IHsgUHl0ZXN0IH0gZnJvbSBcIi4vcHl0ZXN0XCI7XG5pbXBvcnQgeyBQeXRlc3RTYW1wbGUgfSBmcm9tIFwiLi9weXRlc3Qtc2FtcGxlXCI7XG5pbXBvcnQgdHlwZSB7IElQeXRob25EZXBzIH0gZnJvbSBcIi4vcHl0aG9uLWRlcHNcIjtcbmltcG9ydCB0eXBlIHsgSVB5dGhvbkVudiB9IGZyb20gXCIuL3B5dGhvbi1lbnZcIjtcbmltcG9ydCB0eXBlIHtcbiAgSVB5dGhvblBhY2thZ2luZyxcbiAgUHl0aG9uUGFja2FnaW5nT3B0aW9ucyxcbn0gZnJvbSBcIi4vcHl0aG9uLXBhY2thZ2luZ1wiO1xuaW1wb3J0IHsgUHl0aG9uU2FtcGxlIH0gZnJvbSBcIi4vcHl0aG9uLXNhbXBsZVwiO1xuaW1wb3J0IHsgU2V0dXB0b29scyB9IGZyb20gXCIuL3NldHVwdG9vbHNcIjtcbmltcG9ydCB7IFV2IH0gZnJvbSBcIi4vdXZcIjtcbmltcG9ydCB0eXBlIHsgVmVudk9wdGlvbnMgfSBmcm9tIFwiLi92ZW52XCI7XG5pbXBvcnQgeyBWZW52IH0gZnJvbSBcIi4vdmVudlwiO1xuaW1wb3J0IHR5cGUgeyBHaXRIdWJQcm9qZWN0T3B0aW9ucyB9IGZyb20gXCIuLi9naXRodWJcIjtcbmltcG9ydCB7IEdpdEh1YlByb2plY3QgfSBmcm9tIFwiLi4vZ2l0aHViXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plbnJjT3B0aW9ucyBhcyBQcm9qZW5yY0pzT3B0aW9ucyB9IGZyb20gXCIuLi9qYXZhc2NyaXB0L3Byb2plbnJjXCI7XG5pbXBvcnQgeyBQcm9qZW5yYyBhcyBQcm9qZW5yY0pzIH0gZnJvbSBcIi4uL2phdmFzY3JpcHQvcHJvamVucmNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVucmNUc09wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgUHJvamVucmNUcyB9IGZyb20gXCIuLi90eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBhbnlTZWxlY3RlZCwgbXVsdGlwbGVTZWxlY3RlZCB9IGZyb20gXCIuLi91dGlsXCI7XG5cbi8qKiBBbGxvd2VkIGNoYXJhY3RlcnMgaW4gcHl0aG9uIHByb2plY3QgbmFtZXMgKi9cbmNvbnN0IFBZVEhPTl9QUk9KRUNUX05BTUVfUkVHRVggPSAvXltBLVphLXowLTktX1xcLl0rJC87XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHl0aG9uRXhlY3V0YWJsZU9wdGlvbnMge1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCBcInB5dGhvblwiXG4gICAqL1xuICByZWFkb25seSBweXRob25FeGVjPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBQeXRob25Qcm9qZWN0YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQeXRob25Qcm9qZWN0T3B0aW9uc1xuICBleHRlbmRzXG4gICAgR2l0SHViUHJvamVjdE9wdGlvbnMsXG4gICAgUHl0aG9uUGFja2FnaW5nT3B0aW9ucyxcbiAgICBQeXRob25FeGVjdXRhYmxlT3B0aW9ucyB7XG4gIC8vIC0tIHJlcXVpcmVkIG9wdGlvbnMgLS1cblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcHl0aG9uIHBhY2thZ2UgYXMgdXNlZCBpbiBpbXBvcnRzIGFuZCBmaWxlbmFtZXMuXG4gICAqXG4gICAqIE11c3Qgb25seSBjb25zaXN0IG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgJFBZVEhPTl9NT0RVTEVfTkFNRVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlTmFtZTogc3RyaW5nO1xuXG4gIC8vIC0tIGRlcGVuZGVuY2llcyAtLVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHByb2plY3QuXG4gICAqXG4gICAqIERlcGVuZGVuY2llcyB1c2UgdGhlIGZvcm1hdDogYDxtb2R1bGU+QDxzZW12ZXI+YFxuICAgKlxuICAgKiBBZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBjYW4gYmUgYWRkZWQgdmlhIGBwcm9qZWN0LmFkZERlcGVuZGVuY3koKWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBmZWF0dXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVwcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGRldiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcHJvamVjdC5cbiAgICpcbiAgICogRGVwZW5kZW5jaWVzIHVzZSB0aGUgZm9ybWF0OiBgPG1vZHVsZT5APHNlbXZlcj5gXG4gICAqXG4gICAqIEFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGNhbiBiZSBhZGRlZCB2aWEgYHByb2plY3QuYWRkRGV2RGVwZW5kZW5jeSgpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBkZXZEZXBzPzogc3RyaW5nW107XG5cbiAgLy8gLS0gY29yZSBjb21wb25lbnRzIC0tXG5cbiAgLyoqXG4gICAqIFVzZSBwaXAgd2l0aCBhIHJlcXVpcmVtZW50cy50eHQgZmlsZSB0byB0cmFjayBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlLCB1bmxlc3MgcG9ldHJ5IGlzIHRydWUsIHRoZW4gZmFsc2VcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBwaXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2UgdmVudiB0byBtYW5hZ2UgYSB2aXJ0dWFsIGVudmlyb25tZW50IGZvciBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcyBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSwgdW5sZXNzIHBvZXRyeSBpcyB0cnVlLCB0aGVuIGZhbHNlXG4gICAqIEBmZWF0dXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgdmVudj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlbnYgb3B0aW9uc1xuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHRzXG4gICAqL1xuICByZWFkb25seSB2ZW52T3B0aW9ucz86IFZlbnZPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2Ugc2V0dXB0b29scyB3aXRoIGEgc2V0dXAucHkgc2NyaXB0IGZvciBwYWNrYWdpbmcgYW5kIHB1Ymxpc2hpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSwgdW5sZXNzIHBvZXRyeSBpcyB0cnVlLCB0aGVuIGZhbHNlXG4gICAqIEBmZWF0dXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dXB0b29scz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSBwb2V0cnkgdG8gbWFuYWdlIHlvdXIgcHJvamVjdCBkZXBlbmRlbmNpZXMsIHZpcnR1YWwgZW52aXJvbm1lbnQsIGFuZFxuICAgKiAob3B0aW9uYWwpIHBhY2thZ2luZy9wdWJsaXNoaW5nLlxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGlwLCBzZXR1cHRvb2xzLCBvciB2ZW52LlxuICAgKiBJZiB5b3Ugc2V0IHRoaXMgb3B0aW9uIHRvIGB0cnVlYCwgdGhlbiBwaXAsIHNldHVwdG9vbHMsIGFuZCB2ZW52IG11c3QgYmUgc2V0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBmZWF0dXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgcG9ldHJ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIHV2IHRvIG1hbmFnZSB5b3VyIHByb2plY3QgZGVwZW5kZW5jaWVzLCB2aXJ0dWFsIGVudmlyb25tZW50LCBhbmRcbiAgICogKG9wdGlvbmFsKSBwYWNrYWdpbmcvcHVibGlzaGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSB1dj86IGJvb2xlYW47XG5cbiAgLy8gLS0gb3B0aW9uYWwgY29tcG9uZW50cyAtLVxuXG4gIC8qKlxuICAgKiBJbmNsdWRlIHB5dGVzdCB0ZXN0cy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IHB5dGVzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHB5dGVzdCBvcHRpb25zXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IHB5dGVzdE9wdGlvbnM/OiBQeXRlc3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIHNhbXBsZSBjb2RlIGFuZCB0ZXN0IGlmIHRoZSByZWxldmFudCBkaXJlY3RvcmllcyBkb24ndCBleGlzdC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2FtcGxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9jYXRpb24gb2Ygc2FtcGxlIHRlc3RzLlxuICAgKiBUeXBpY2FsbHkgdGhlIHNhbWUgZGlyZWN0b3J5IHdoZXJlIHByb2plY3QgdGVzdHMgd2lsbCBiZSBsb2NhdGVkLlxuICAgKiBAZGVmYXVsdCBcInRlc3RzXCJcbiAgICovXG4gIHJlYWRvbmx5IHNhbXBsZVRlc3RkaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSBwcm9qZW5yYyBpbiBQeXRob24uXG4gICAqXG4gICAqIFRoaXMgd2lsbCBpbnN0YWxsIGBwcm9qZW5gIGFzIGEgUHl0aG9uIGRlcGVuZGVuY3kgYW5kIGFkZCBhIGBzeW50aGBcbiAgICogdGFzayB3aGljaCB3aWxsIHJ1biBgLnByb2plbnJjLnB5YC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNQeXRob24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHJlbGF0ZWQgdG8gcHJvamVucmMgaW4gcHl0aG9uLlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNQeXRob25PcHRpb25zPzogUHJvamVucmNQeXRob25PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2UgcHJvamVucmMgaW4gamF2YXNjcmlwdC5cbiAgICpcbiAgICogVGhpcyB3aWxsIGluc3RhbGwgYHByb2plbmAgYXMgYSBKYXZhU2NyaXB0IGRlcGVuZGVuY3kgYW5kIGFkZCBhIGBzeW50aGBcbiAgICogdGFzayB3aGljaCB3aWxsIHJ1biBgLnByb2plbnJjLmpzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHJlbGF0ZWQgdG8gcHJvamVucmMgaW4gSmF2YVNjcmlwdC5cbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnNPcHRpb25zPzogUHJvamVucmNKc09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFVzZSBwcm9qZW5yYyBpbiBUeXBlU2NyaXB0LlxuICAgKlxuICAgKiBUaGlzIHdpbGwgY3JlYXRlIGEgdHNjb25maWcgZmlsZSAoZGVmYXVsdDogYHRzY29uZmlnLnByb2plbi5qc29uYClcbiAgICogYW5kIHVzZSBgdHMtbm9kZWAgaW4gdGhlIGRlZmF1bHQgdGFzayB0byBwYXJzZSB0aGUgcHJvamVjdCBzb3VyY2UgZmlsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5yY1RzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyByZWxhdGVkIHRvIHByb2plbnJjIGluIFR5cGVTY3JpcHQuXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5yY1RzT3B0aW9ucz86IFByb2plbnJjVHNPcHRpb25zO1xufVxuXG4vKipcbiAqIFB5dGhvbiBwcm9qZWN0LlxuICpcbiAqIEBwamlkIHB5dGhvblxuICovXG5leHBvcnQgY2xhc3MgUHl0aG9uUHJvamVjdCBleHRlbmRzIEdpdEh1YlByb2plY3Qge1xuICAvKipcbiAgICogUHl0aG9uIG1vZHVsZSBuYW1lICh0aGUgcHJvamVjdCBuYW1lLCB3aXRoIGFueSBoeXBoZW5zIG9yIHBlcmlvZHMgcmVwbGFjZWRcbiAgICogd2l0aCB1bmRlcnNjb3JlcykuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kdWxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHRoZSBwYWNrYWdlIGZvciBkaXN0cmlidXRpb24gKHNob3VsZCBmb2xsb3cgc2VtdmVyKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFQSSBmb3IgbWFuYWdpbmcgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlcHNNYW5hZ2VyITogSVB5dGhvbkRlcHM7XG5cbiAgLyoqXG4gICAqIEFQSSBmb3IgbWFuYWdpbmcgdGhlIFB5dGhvbiBydW50aW1lIGVudmlyb25tZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVudk1hbmFnZXIhOiBJUHl0aG9uRW52O1xuXG4gIC8qKlxuICAgKiBBUEkgZm9yIG1hbmFnaW5nIHBhY2thZ2luZyB0aGUgcHJvamVjdCBhcyBhIGxpYnJhcnkuIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBgcHJvamVjdFR5cGVgIGlzIExJQi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYWNrYWdpbmdNYW5hZ2VyPzogSVB5dGhvblBhY2thZ2luZztcblxuICAvKipcbiAgICogUHl0ZXN0IGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBweXRlc3Q/OiBQeXRlc3Q7XG5cbiAgLyoqXG4gICAqIERpcmVjdG9yeSB3aGVyZSBzYW1wbGUgdGVzdHMgYXJlIGxvY2F0ZWQuXG4gICAqIEBkZWZhdWx0IFwidGVzdHNcIlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNhbXBsZVRlc3RkaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQeXRob25Qcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgaWYgKCFQWVRIT05fUFJPSkVDVF9OQU1FX1JFR0VYLnRlc3Qob3B0aW9ucy5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlB5dGhvbiBwcm9qZWN0cyBtdXN0IG9ubHkgY29uc2lzdCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm1vZHVsZU5hbWUgPSBvcHRpb25zLm1vZHVsZU5hbWU7XG4gICAgdGhpcy52ZXJzaW9uID0gb3B0aW9ucy52ZXJzaW9uO1xuICAgIHRoaXMuc2FtcGxlVGVzdGRpciA9IG9wdGlvbnMuc2FtcGxlVGVzdGRpciA/PyBcInRlc3RzXCI7XG5cbiAgICBjb25zdCByY0ZpbGVUeXBlT3B0aW9ucyA9IFtcbiAgICAgIG9wdGlvbnMucHJvamVucmNQeXRob24sXG4gICAgICBvcHRpb25zLnByb2plbnJjSnMsXG4gICAgICBvcHRpb25zLnByb2plbnJjSnNvbixcbiAgICAgIG9wdGlvbnMucHJvamVucmNUcyxcbiAgICBdO1xuXG4gICAgaWYgKG11bHRpcGxlU2VsZWN0ZWQocmNGaWxlVHlwZU9wdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT25seSBvbmUgb2YgcHJvamVucmNQeXRob24sIHByb2plbnJjSnMsIHByb2plbnJjVHMsIGFuZCBwcm9qZW5yY0pzb24gY2FuIGJlIHNlbGVjdGVkLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb2V0cnkgPSBvcHRpb25zLnBvZXRyeSA/PyBmYWxzZTtcbiAgICBjb25zdCB1diA9IG9wdGlvbnMudXYgPz8gZmFsc2U7XG4gICAgY29uc3Qgbm90X3BvZXRyeV9vcl91diA9ICFwb2V0cnkgJiYgIXV2O1xuXG4gICAgLy8gQXNzdW1lIHBpcCBpZiBub3QgdXNpbmcgcG9ldHJ5IG9yIHV2XG4gICAgY29uc3QgcGlwID0gb3B0aW9ucy5waXAgPz8gbm90X3BvZXRyeV9vcl91djtcblxuICAgIC8vIEFzc3VtZSB2ZW52IGlmIG5vdCB1c2luZyBwb2V0cnkgb3IgdXZcbiAgICBjb25zdCB2ZW52ID0gb3B0aW9ucy52ZW52ID8/IG5vdF9wb2V0cnlfb3JfdXY7XG5cbiAgICBjb25zdCBzZXR1cHRvb2xzID0gb3B0aW9ucy5zZXR1cHRvb2xzID8/IGZhbHNlO1xuXG4gICAgY29uc3QgdG9vbHMgPSB7XG4gICAgICBwb2V0cnk6IHBvZXRyeSxcbiAgICAgIHBpcDogcGlwLFxuICAgICAgdmVudjogdmVudixcbiAgICAgIHNldHVwdG9vbHM6IHNldHVwdG9vbHMsXG4gICAgICB1djogdXYsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgIC8vIGRlZmF1bHQgdG8gcHJvamVucmMucHkgaWYgbm8gb3RoZXIgcHJvamVucmMgdHlwZSB3YXMgZWxlY3RlZFxuICAgICAgaWYgKG9wdGlvbnMucHJvamVucmNQeXRob24gPz8gIWFueVNlbGVjdGVkKHJjRmlsZVR5cGVPcHRpb25zKSkge1xuICAgICAgICBuZXcgUHJvamVucmNQeXRob24odGhpcywge1xuICAgICAgICAgIHB5dGhvbkV4ZWM6IG9wdGlvbnMucHl0aG9uRXhlYyxcbiAgICAgICAgICAuLi5vcHRpb25zLnByb2plbnJjUHl0aG9uT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnByb2plbnJjSnMgPz8gZmFsc2UpIHtcbiAgICAgICAgbmV3IFByb2plbnJjSnModGhpcywgb3B0aW9ucy5wcm9qZW5yY0pzT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnByb2plbnJjVHMgPz8gZmFsc2UpIHtcbiAgICAgICAgbmV3IFByb2plbnJjVHModGhpcywgb3B0aW9ucy5wcm9qZW5yY1RzT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZlbnYpIHtcbiAgICAgIHRoaXMuZW52TWFuYWdlciA9IG5ldyBWZW52KHRoaXMsIHtcbiAgICAgICAgcHl0aG9uRXhlYzogb3B0aW9ucy5weXRob25FeGVjLFxuICAgICAgICAuLi5vcHRpb25zLnZlbnZPcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBpcCkge1xuICAgICAgdGhpcy5kZXBzTWFuYWdlciA9IG5ldyBQaXAodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHNldHVwdG9vbHMpIHtcbiAgICAgIHRoaXMucGFja2FnaW5nTWFuYWdlciA9IG5ldyBTZXR1cHRvb2xzKHRoaXMsIHtcbiAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbixcbiAgICAgICAgYXV0aG9yTmFtZTogb3B0aW9ucy5hdXRob3JOYW1lLFxuICAgICAgICBhdXRob3JFbWFpbDogb3B0aW9ucy5hdXRob3JFbWFpbCxcbiAgICAgICAgbGljZW5zZTogb3B0aW9ucy5saWNlbnNlLFxuICAgICAgICBob21lcGFnZTogb3B0aW9ucy5ob21lcGFnZSxcbiAgICAgICAgY2xhc3NpZmllcnM6IG9wdGlvbnMuY2xhc3NpZmllcnMsXG4gICAgICAgIHNldHVwQ29uZmlnOiBvcHRpb25zLnNldHVwQ29uZmlnLFxuICAgICAgICBweXRob25FeGVjOiBvcHRpb25zLnB5dGhvbkV4ZWMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodXYpIHtcbiAgICAgIC8vIHV2IGNhbm5vdCBiZSB1c2VkIHdpdGggb3RoZXIgdG9vbHMuXG4gICAgICB0aGlzLmNoZWNrVG9vbENvbmZsaWN0cyhcInV2XCIsIHRvb2xzKTtcblxuICAgICAgY29uc3QgdXZQcm9qZWN0ID0gbmV3IFV2KHRoaXMsIHtcbiAgICAgICAgcHl0aG9uRXhlYzogb3B0aW9ucy51dk9wdGlvbnM/LnB5dGhvbkV4ZWMsXG5cbiAgICAgICAgcHJvamVjdDoge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24sXG4gICAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgcmVhZG1lOiBvcHRpb25zLnJlYWRtZT8uZmlsZW5hbWUgPz8gXCJSRUFETUUubWRcIixcbiAgICAgICAgICBsaWNlbnNlOiBvcHRpb25zLmxpY2Vuc2UsXG4gICAgICAgICAgYXV0aG9yczogb3B0aW9ucy5hdXRob3JOYW1lXG4gICAgICAgICAgICA/IFt7IG5hbWU6IG9wdGlvbnMuYXV0aG9yTmFtZSwgZW1haWw6IG9wdGlvbnMuYXV0aG9yRW1haWwgfV1cbiAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgY2xhc3NpZmllcnM6IG9wdGlvbnMuY2xhc3NpZmllcnMsXG4gICAgICAgICAgdXJsczogb3B0aW9ucy5ob21lcGFnZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgaG9tZXBhZ2U6IG9wdGlvbnMuaG9tZXBhZ2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIC4uLm9wdGlvbnMudXZPcHRpb25zPy5wcm9qZWN0LCAvLyB0YWtlcyBwcmlvcml0eVxuICAgICAgICB9LFxuXG4gICAgICAgIGJ1aWxkU3lzdGVtOiBvcHRpb25zLnV2T3B0aW9ucz8uYnVpbGRTeXN0ZW0sXG4gICAgICAgIHV2OiBvcHRpb25zLnV2T3B0aW9ucz8udXYsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGVwc01hbmFnZXIgPSB1dlByb2plY3Q7XG4gICAgICB0aGlzLmVudk1hbmFnZXIgPSB1dlByb2plY3Q7XG4gICAgICB0aGlzLnBhY2thZ2luZ01hbmFnZXIgPSB1dlByb2plY3Q7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnV2T3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXZPcHRpb25zIG9ubHkgYXBwbGllcyB3aGVuIHVzaW5nIHV2LlwiKTtcbiAgICB9XG5cbiAgICBpZiAocG9ldHJ5KSB7XG4gICAgICAvLyBwb2V0cnkgY2Fubm90IGJlIHVzZWQgd2l0aCBvdGhlciB0b29scy5cbiAgICAgIHRoaXMuY2hlY2tUb29sQ29uZmxpY3RzKFwicG9ldHJ5XCIsIHRvb2xzKTtcblxuICAgICAgY29uc3QgcG9ldHJ5UHJvamVjdCA9IG5ldyBQb2V0cnkodGhpcywge1xuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICBhdXRob3JOYW1lOiBvcHRpb25zLmF1dGhvck5hbWUsXG4gICAgICAgIGF1dGhvckVtYWlsOiBvcHRpb25zLmF1dGhvckVtYWlsLFxuICAgICAgICBsaWNlbnNlOiBvcHRpb25zLmxpY2Vuc2UsXG4gICAgICAgIGhvbWVwYWdlOiBvcHRpb25zLmhvbWVwYWdlLFxuICAgICAgICBjbGFzc2lmaWVyczogb3B0aW9ucy5jbGFzc2lmaWVycyxcbiAgICAgICAgcHl0aG9uRXhlYzogb3B0aW9ucy5weXRob25FeGVjLFxuICAgICAgICBwb2V0cnlPcHRpb25zOiB7XG4gICAgICAgICAgcmVhZG1lOiBvcHRpb25zLnJlYWRtZT8uZmlsZW5hbWUgPz8gXCJSRUFETUUubWRcIixcbiAgICAgICAgICAuLi5vcHRpb25zLnBvZXRyeU9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGVwc01hbmFnZXIgPSBwb2V0cnlQcm9qZWN0O1xuICAgICAgdGhpcy5lbnZNYW5hZ2VyID0gcG9ldHJ5UHJvamVjdDtcbiAgICAgIHRoaXMucGFja2FnaW5nTWFuYWdlciA9IHBvZXRyeVByb2plY3Q7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmVudk1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBdCBsZWFzdCBvbmUgdG9vbCBtdXN0IGJlIGNob3NlbiBmb3IgbWFuYWdpbmcgdGhlIGVudmlyb25tZW50ICh2ZW52LCBjb25kYSwgcGlwZW52LCBvciBwb2V0cnkpLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGVwc01hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBdCBsZWFzdCBvbmUgdG9vbCBtdXN0IGJlIGNob3NlbiBmb3IgbWFuYWdpbmcgZGVwZW5kZW5jaWVzIChwaXAsIGNvbmRhLCBwaXBlbnYsIG9yIHBvZXRyeSkuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChOdW1iZXIodmVudikgKyBOdW1iZXIocG9ldHJ5KSA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJNb3JlIHRoYW4gb25lIGNvbXBvbmVudCBoYXMgYmVlbiBjaG9zZW4gZm9yIG1hbmFnaW5nIHRoZSBlbnZpcm9ubWVudCAodmVudiwgY29uZGEsIHBpcGVudiwgb3IgcG9ldHJ5KVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyKHBpcCkgKyBOdW1iZXIocG9ldHJ5KSA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJNb3JlIHRoYW4gb25lIGNvbXBvbmVudCBoYXMgYmVlbiBjaG9zZW4gZm9yIG1hbmFnaW5nIGRlcGVuZGVuY2llcyAocGlwLCBjb25kYSwgcGlwZW52LCBvciBwb2V0cnkpXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChOdW1iZXIoc2V0dXB0b29scykgKyBOdW1iZXIocG9ldHJ5KSA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJNb3JlIHRoYW4gb25lIGNvbXBvbmVudCBoYXMgYmVlbiBjaG9zZW4gZm9yIG1hbmFnaW5nIHBhY2thZ2luZyAoc2V0dXB0b29scyBvciBwb2V0cnkpXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnB5dGVzdCA/PyB0cnVlKSB7XG4gICAgICB0aGlzLnB5dGVzdCA9IG5ldyBQeXRlc3QodGhpcywgb3B0aW9ucy5weXRlc3RPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLnNhbXBsZSA/PyB0cnVlKSB7XG4gICAgICAgIG5ldyBQeXRlc3RTYW1wbGUodGhpcywge1xuICAgICAgICAgIG1vZHVsZU5hbWU6IHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICB0ZXN0ZGlyOiB0aGlzLnNhbXBsZVRlc3RkaXIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNhbXBsZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgUHl0aG9uU2FtcGxlKHRoaXMsIHtcbiAgICAgICAgZGlyOiB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBvcHRpb25zLmRlcHMgPz8gW10pIHtcbiAgICAgIHRoaXMuYWRkRGVwZW5kZW5jeShkZXApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVwIG9mIG9wdGlvbnMuZGV2RGVwcyA/PyBbXSkge1xuICAgICAgdGhpcy5hZGREZXZEZXBlbmRlbmN5KGRlcCk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0R2l0SWdub3JlKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrVG9vbENvbmZsaWN0cyhcbiAgICBhY3RpdmVUb29sTmFtZTogc3RyaW5nLFxuICAgIHRvb2xzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcbiAgKSB7XG4gICAgaWYgKHRvb2xzW2FjdGl2ZVRvb2xOYW1lXSkge1xuICAgICAgLy8gQ29sbGVjdCBuYW1lcyBvZiBvdGhlciBlbmFibGVkIHRvb2xzIGV4Y2x1ZGluZyB0aGUgYWN0aXZlIHRvb2wgaXRzZWxmXG4gICAgICBjb25zdCBjb25mbGljdHMgPSBPYmplY3QuZW50cmllcyh0b29scylcbiAgICAgICAgLmZpbHRlcigoW25hbWUsIGVuYWJsZWRdKSA9PiBuYW1lICE9PSBhY3RpdmVUb29sTmFtZSAmJiBlbmFibGVkKVxuICAgICAgICAubWFwKChbbmFtZV0pID0+IG5hbWUpO1xuXG4gICAgICBpZiAoY29uZmxpY3RzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7YWN0aXZlVG9vbE5hbWV9IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggb3RoZXIgdG9vbHMsIGZvdW5kIHRoZSBmb2xsb3dpbmcgaW5jb21wYXRpYmxlIHRvb2xzIGVuYWJsZWQ6ICR7Y29uZmxpY3RzLmpvaW4oXG4gICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGRlZmF1bHQgZ2l0aWdub3JlIG9wdGlvbnMgZm9yIGEgUHl0aG9uIHByb2plY3QgYmFzZWQgb25cbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9naXRpZ25vcmUvYmxvYi9tYXN0ZXIvUHl0aG9uLmdpdGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBhZGREZWZhdWx0R2l0SWdub3JlKCkge1xuICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoXG4gICAgICBcIiMgQnl0ZS1jb21waWxlZCAvIG9wdGltaXplZCAvIERMTCBmaWxlc1wiLFxuICAgICAgXCJfX3B5Y2FjaGVfXy9cIixcbiAgICAgIFwiKi5weVtjb2RdXCIsXG4gICAgICBcIiokcHkuY2xhc3NcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgQyBleHRlbnNpb25zXCIsXG4gICAgICBcIiouc29cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgRGlzdHJpYnV0aW9uIC8gcGFja2FnaW5nXCIsXG4gICAgICBcIi5QeXRob25cIixcbiAgICAgIFwiYnVpbGQvXCIsXG4gICAgICBcImRldmVsb3AtZWdncy9cIixcbiAgICAgIFwiZGlzdC9cIixcbiAgICAgIFwiZG93bmxvYWRzL1wiLFxuICAgICAgXCJlZ2dzL1wiLFxuICAgICAgXCIuZWdncy9cIixcbiAgICAgIFwibGliL1wiLFxuICAgICAgXCJsaWI2NC9cIixcbiAgICAgIFwicGFydHMvXCIsXG4gICAgICBcInNkaXN0L1wiLFxuICAgICAgXCJ2YXIvXCIsXG4gICAgICBcIndoZWVscy9cIixcbiAgICAgIFwic2hhcmUvcHl0aG9uLXdoZWVscy9cIixcbiAgICAgIFwiKi5lZ2ctaW5mby9cIixcbiAgICAgIFwiLmluc3RhbGxlZC5jZmdcIixcbiAgICAgIFwiKi5lZ2dcIixcbiAgICAgIFwiTUFOSUZFU1RcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgUHlJbnN0YWxsZXJcIixcbiAgICAgIFwiIyAgVXN1YWxseSB0aGVzZSBmaWxlcyBhcmUgd3JpdHRlbiBieSBhIHB5dGhvbiBzY3JpcHQgZnJvbSBhIHRlbXBsYXRlXCIsXG4gICAgICBcIiMgIGJlZm9yZSBQeUluc3RhbGxlciBidWlsZHMgdGhlIGV4ZSwgc28gYXMgdG8gaW5qZWN0IGRhdGUvb3RoZXIgaW5mb3MgaW50byBpdC5cIixcbiAgICAgIFwiKi5tYW5pZmVzdFwiLFxuICAgICAgXCIqLnNwZWNcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgSW5zdGFsbGVyIGxvZ3NcIixcbiAgICAgIFwicGlwLWxvZy50eHRcIixcbiAgICAgIFwicGlwLWRlbGV0ZS10aGlzLWRpcmVjdG9yeS50eHRcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgVW5pdCB0ZXN0IC8gY292ZXJhZ2UgcmVwb3J0c1wiLFxuICAgICAgXCJodG1sY292L1wiLFxuICAgICAgXCIudG94L1wiLFxuICAgICAgXCIubm94L1wiLFxuICAgICAgXCIuY292ZXJhZ2VcIixcbiAgICAgIFwiLmNvdmVyYWdlLipcIixcbiAgICAgIFwiLmNhY2hlXCIsXG4gICAgICBcIm5vc2V0ZXN0cy54bWxcIixcbiAgICAgIFwiY292ZXJhZ2UueG1sXCIsXG4gICAgICBcIiouY292ZXJcIixcbiAgICAgIFwiKi5weSxjb3ZlclwiLFxuICAgICAgXCIuaHlwb3RoZXNpcy9cIixcbiAgICAgIFwiLnB5dGVzdF9jYWNoZS9cIixcbiAgICAgIFwiY292ZXIvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFRyYW5zbGF0aW9uc1wiLFxuICAgICAgXCIqLm1vXCIsXG4gICAgICBcIioucG90XCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIERqYW5nbyBzdHVmZjpcIixcbiAgICAgIFwiKi5sb2dcIixcbiAgICAgIFwibG9jYWxfc2V0dGluZ3MucHlcIixcbiAgICAgIFwiZGIuc3FsaXRlM1wiLFxuICAgICAgXCJkYi5zcWxpdGUzLWpvdXJuYWxcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgRmxhc2sgc3R1ZmY6XCIsXG4gICAgICBcImluc3RhbmNlL1wiLFxuICAgICAgXCIud2ViYXNzZXRzLWNhY2hlXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFNjcmFweSBzdHVmZjpcIixcbiAgICAgIFwiLnNjcmFweVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBTcGhpbnggZG9jdW1lbnRhdGlvblwiLFxuICAgICAgXCJkb2NzL19idWlsZC9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgUHlCdWlsZGVyXCIsXG4gICAgICBcIi5weWJ1aWxkZXIvXCIsXG4gICAgICBcInRhcmdldC9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgSnVweXRlciBOb3RlYm9va1wiLFxuICAgICAgXCIuaXB5bmJfY2hlY2twb2ludHNcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgSVB5dGhvblwiLFxuICAgICAgXCJwcm9maWxlX2RlZmF1bHQvXCIsXG4gICAgICBcImlweXRob25fY29uZmlnLnB5XCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFBFUCA1ODI7IHVzZWQgYnkgZS5nLiBnaXRodWIuY29tL0RhdmlkLU9Db25ub3IvcHlmbG93XCIsXG4gICAgICBcIl9fcHlwYWNrYWdlc19fL1wiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBDZWxlcnkgc3R1ZmZcIixcbiAgICAgIFwiY2VsZXJ5YmVhdC1zY2hlZHVsZVwiLFxuICAgICAgXCJjZWxlcnliZWF0LnBpZFwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBTYWdlTWF0aCBwYXJzZWQgZmlsZXNcIixcbiAgICAgIFwiKi5zYWdlLnB5XCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEVudmlyb25tZW50c1wiLFxuICAgICAgXCIuZW52XCIsXG4gICAgICBcIi52ZW52XCIsXG4gICAgICBcImVudi9cIixcbiAgICAgIFwidmVudi9cIixcbiAgICAgIFwiRU5WL1wiLFxuICAgICAgXCJlbnYuYmFrL1wiLFxuICAgICAgXCJ2ZW52LmJhay9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgU3B5ZGVyIHByb2plY3Qgc2V0dGluZ3NcIixcbiAgICAgIFwiLnNweWRlcnByb2plY3RcIixcbiAgICAgIFwiLnNweXByb2plY3RcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgUm9wZSBwcm9qZWN0IHNldHRpbmdzXCIsXG4gICAgICBcIi5yb3BlcHJvamVjdFwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBta2RvY3MgZG9jdW1lbnRhdGlvblwiLFxuICAgICAgXCIvc2l0ZVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBteXB5XCIsXG4gICAgICBcIi5teXB5X2NhY2hlL1wiLFxuICAgICAgXCIuZG15cHkuanNvblwiLFxuICAgICAgXCJkbXlweS5qc29uXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFB5cmUgdHlwZSBjaGVja2VyXCIsXG4gICAgICBcIi5weXJlL1wiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBweXR5cGUgc3RhdGljIHR5cGUgYW5hbHl6ZXJcIixcbiAgICAgIFwiLnB5dHlwZS9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgQ3l0aG9uIGRlYnVnIHN5bWJvbHNcIixcbiAgICAgIFwiY3l0aG9uX2RlYnVnL1wiLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJ1bnRpbWUgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgRm9ybWF0IGA8bW9kdWxlPkA8c2VtdmVyPmBcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KHNwZWM6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRlcHNNYW5hZ2VyLmFkZERlcGVuZGVuY3koc3BlYyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRldiBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBGb3JtYXQgYDxtb2R1bGU+QDxzZW12ZXI+YFxuICAgKi9cbiAgcHVibGljIGFkZERldkRlcGVuZGVuY3koc3BlYzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVwc01hbmFnZXIuYWRkRGV2RGVwZW5kZW5jeShzcGVjKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0U3ludGhlc2l6ZSgpIHtcbiAgICBzdXBlci5wb3N0U3ludGhlc2l6ZSgpO1xuXG4gICAgdGhpcy5lbnZNYW5hZ2VyLnNldHVwRW52aXJvbm1lbnQoKTtcbiAgICB0aGlzLmRlcHNNYW5hZ2VyLmluc3RhbGxEZXBlbmRlbmNpZXMoKTtcbiAgfVxufVxuIl19
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0aG9uLXByb2plY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHl0aG9uL3B5dGhvbi1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwrQkFBNEI7QUFDNUIscUNBQWtDO0FBRWxDLHlDQUF3RDtBQUV4RCxxQ0FBa0M7QUFDbEMsbURBQStDO0FBTy9DLG1EQUErQztBQUMvQyw2Q0FBMEM7QUFDMUMsNkJBQTBCO0FBRTFCLGlDQUE4QjtBQUU5QixzQ0FBMEM7QUFFMUMscURBQWdFO0FBRWhFLDhDQUEyQztBQUMzQyxrQ0FBd0Q7QUFFeEQsaURBQWlEO0FBQ2pELE1BQU0seUJBQXlCLEdBQUcsb0JBQW9CLENBQUM7QUF5THZEOzs7O0dBSUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxzQkFBYTs7SUFDOUM7OztPQUdHO0lBQ2EsVUFBVSxDQUFTO0lBRW5DOztPQUVHO0lBQ2EsT0FBTyxDQUFTO0lBRWhDOztPQUVHO0lBQ2EsV0FBVyxDQUFlO0lBRTFDOztPQUVHO0lBQ2EsVUFBVSxDQUFjO0lBRXhDOztPQUVHO0lBQ2EsZ0JBQWdCLENBQW9CO0lBRXBEOztPQUVHO0lBQ0ksTUFBTSxDQUFVO0lBRXZCOzs7T0FHRztJQUNhLGFBQWEsQ0FBUztJQUV0QyxZQUFZLE9BQTZCO1FBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FDYix5RkFBeUYsQ0FDMUYsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUM7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QUFnQixFQUNoQixNQUFNLEVBQ04sT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsTUFBTSxFQUNOLFVBQVUsRUFDVixXQUFXLEVBQ1gsRUFBRSxFQUNGLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLEVBQUUsRUFDRix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLEVBQUUsRUFDRix3QkFBd0IsRUFDeEIsT0FBTyxFQUNQLEVBQUUsRUFDRixRQUFRLEVBQ1IsY0FBYyxFQUNkLGFBQWEsRUFDYixZQUFZLEVBQ1osRUFBRSxFQUNGLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsRUFBRSxFQUNGLCtCQUErQixFQUMvQixVQUFVLEVBQ1YsRUFBRSxFQUNGLHdCQUF3QixFQUN4QixlQUFlLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGFBQWEsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sY0FBYztRQUNuQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUN6QyxDQUFDOztBQXBhSCxzQ0FxYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXAgfSBmcm9tIFwiLi9waXBcIjtcbmltcG9ydCB7IFBvZXRyeSB9IGZyb20gXCIuL3BvZXRyeVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZW5yY09wdGlvbnMgYXMgUHJvamVucmNQeXRob25PcHRpb25zIH0gZnJvbSBcIi4vcHJvamVucmNcIjtcbmltcG9ydCB7IFByb2plbnJjIGFzIFByb2plbnJjUHl0aG9uIH0gZnJvbSBcIi4vcHJvamVucmNcIjtcbmltcG9ydCB0eXBlIHsgUHl0ZXN0T3B0aW9ucyB9IGZyb20gXCIuL3B5dGVzdFwiO1xuaW1wb3J0IHsgUHl0ZXN0IH0gZnJvbSBcIi4vcHl0ZXN0XCI7XG5pbXBvcnQgeyBQeXRlc3RTYW1wbGUgfSBmcm9tIFwiLi9weXRlc3Qtc2FtcGxlXCI7XG5pbXBvcnQgdHlwZSB7IElQeXRob25EZXBzIH0gZnJvbSBcIi4vcHl0aG9uLWRlcHNcIjtcbmltcG9ydCB0eXBlIHsgSVB5dGhvbkVudiB9IGZyb20gXCIuL3B5dGhvbi1lbnZcIjtcbmltcG9ydCB0eXBlIHtcbiAgSVB5dGhvblBhY2thZ2luZyxcbiAgUHl0aG9uUGFja2FnaW5nT3B0aW9ucyxcbn0gZnJvbSBcIi4vcHl0aG9uLXBhY2thZ2luZ1wiO1xuaW1wb3J0IHsgUHl0aG9uU2FtcGxlIH0gZnJvbSBcIi4vcHl0aG9uLXNhbXBsZVwiO1xuaW1wb3J0IHsgU2V0dXB0b29scyB9IGZyb20gXCIuL3NldHVwdG9vbHNcIjtcbmltcG9ydCB7IFV2IH0gZnJvbSBcIi4vdXZcIjtcbmltcG9ydCB0eXBlIHsgVmVudk9wdGlvbnMgfSBmcm9tIFwiLi92ZW52XCI7XG5pbXBvcnQgeyBWZW52IH0gZnJvbSBcIi4vdmVudlwiO1xuaW1wb3J0IHR5cGUgeyBHaXRIdWJQcm9qZWN0T3B0aW9ucyB9IGZyb20gXCIuLi9naXRodWJcIjtcbmltcG9ydCB7IEdpdEh1YlByb2plY3QgfSBmcm9tIFwiLi4vZ2l0aHViXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plbnJjT3B0aW9ucyBhcyBQcm9qZW5yY0pzT3B0aW9ucyB9IGZyb20gXCIuLi9qYXZhc2NyaXB0L3Byb2plbnJjXCI7XG5pbXBvcnQgeyBQcm9qZW5yYyBhcyBQcm9qZW5yY0pzIH0gZnJvbSBcIi4uL2phdmFzY3JpcHQvcHJvamVucmNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVucmNUc09wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgUHJvamVucmNUcyB9IGZyb20gXCIuLi90eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBhbnlTZWxlY3RlZCwgbXVsdGlwbGVTZWxlY3RlZCB9IGZyb20gXCIuLi91dGlsXCI7XG5cbi8qKiBBbGxvd2VkIGNoYXJhY3RlcnMgaW4gcHl0aG9uIHByb2plY3QgbmFtZXMgKi9cbmNvbnN0IFBZVEhPTl9QUk9KRUNUX05BTUVfUkVHRVggPSAvXltBLVphLXowLTktX1xcLl0rJC87XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHl0aG9uRXhlY3V0YWJsZU9wdGlvbnMge1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCBcInB5dGhvblwiXG4gICAqL1xuICByZWFkb25seSBweXRob25FeGVjPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBQeXRob25Qcm9qZWN0YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQeXRob25Qcm9qZWN0T3B0aW9uc1xuICBleHRlbmRzXG4gICAgR2l0SHViUHJvamVjdE9wdGlvbnMsXG4gICAgUHl0aG9uUGFja2FnaW5nT3B0aW9ucyxcbiAgICBQeXRob25FeGVjdXRhYmxlT3B0aW9ucyB7XG4gIC8vIC0tIHJlcXVpcmVkIG9wdGlvbnMgLS1cblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcHl0aG9uIHBhY2thZ2UgYXMgdXNlZCBpbiBpbXBvcnRzIGFuZCBmaWxlbmFtZXMuXG4gICAqXG4gICAqIE11c3Qgb25seSBjb25zaXN0IG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgJFBZVEhPTl9NT0RVTEVfTkFNRVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlTmFtZTogc3RyaW5nO1xuXG4gIC8vIC0tIGRlcGVuZGVuY2llcyAtLVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHByb2plY3QuXG4gICAqXG4gICAqIERlcGVuZGVuY2llcyB1c2UgdGhlIGZvcm1hdDogYDxtb2R1bGU+QDxzZW12ZXI+YFxuICAgKlxuICAgKiBBZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBjYW4gYmUgYWRkZWQgdmlhIGBwcm9qZWN0LmFkZERlcGVuZGVuY3koKWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBmZWF0dXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVwcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGRldiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcHJvamVjdC5cbiAgICpcbiAgICogRGVwZW5kZW5jaWVzIHVzZSB0aGUgZm9ybWF0OiBgPG1vZHVsZT5APHNlbXZlcj5gXG4gICAqXG4gICAqIEFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGNhbiBiZSBhZGRlZCB2aWEgYHByb2plY3QuYWRkRGV2RGVwZW5kZW5jeSgpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBkZXZEZXBzPzogc3RyaW5nW107XG5cbiAgLy8gLS0gY29yZSBjb21wb25lbnRzIC0tXG5cbiAgLyoqXG4gICAqIFVzZSBwaXAgd2l0aCBhIHJlcXVpcmVtZW50cy50eHQgZmlsZSB0byB0cmFjayBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlLCB1bmxlc3MgcG9ldHJ5IGlzIHRydWUsIHRoZW4gZmFsc2VcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBwaXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2UgdmVudiB0byBtYW5hZ2UgYSB2aXJ0dWFsIGVudmlyb25tZW50IGZvciBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcyBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSwgdW5sZXNzIHBvZXRyeSBpcyB0cnVlLCB0aGVuIGZhbHNlXG4gICAqIEBmZWF0dXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgdmVudj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlbnYgb3B0aW9uc1xuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHRzXG4gICAqL1xuICByZWFkb25seSB2ZW52T3B0aW9ucz86IFZlbnZPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2Ugc2V0dXB0b29scyB3aXRoIGEgc2V0dXAucHkgc2NyaXB0IGZvciBwYWNrYWdpbmcgYW5kIHB1Ymxpc2hpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSwgdW5sZXNzIHBvZXRyeSBpcyB0cnVlLCB0aGVuIGZhbHNlXG4gICAqIEBmZWF0dXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dXB0b29scz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSBwb2V0cnkgdG8gbWFuYWdlIHlvdXIgcHJvamVjdCBkZXBlbmRlbmNpZXMsIHZpcnR1YWwgZW52aXJvbm1lbnQsIGFuZFxuICAgKiAob3B0aW9uYWwpIHBhY2thZ2luZy9wdWJsaXNoaW5nLlxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgaW5jb21wYXRpYmxlIHdpdGggcGlwLCBzZXR1cHRvb2xzLCBvciB2ZW52LlxuICAgKiBJZiB5b3Ugc2V0IHRoaXMgb3B0aW9uIHRvIGB0cnVlYCwgdGhlbiBwaXAsIHNldHVwdG9vbHMsIGFuZCB2ZW52IG11c3QgYmUgc2V0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBmZWF0dXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgcG9ldHJ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIHV2IHRvIG1hbmFnZSB5b3VyIHByb2plY3QgZGVwZW5kZW5jaWVzLCB2aXJ0dWFsIGVudmlyb25tZW50LCBhbmRcbiAgICogKG9wdGlvbmFsKSBwYWNrYWdpbmcvcHVibGlzaGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSB1dj86IGJvb2xlYW47XG5cbiAgLy8gLS0gb3B0aW9uYWwgY29tcG9uZW50cyAtLVxuXG4gIC8qKlxuICAgKiBJbmNsdWRlIHB5dGVzdCB0ZXN0cy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IHB5dGVzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHB5dGVzdCBvcHRpb25zXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IHB5dGVzdE9wdGlvbnM/OiBQeXRlc3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIHNhbXBsZSBjb2RlIGFuZCB0ZXN0IGlmIHRoZSByZWxldmFudCBkaXJlY3RvcmllcyBkb24ndCBleGlzdC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2FtcGxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9jYXRpb24gb2Ygc2FtcGxlIHRlc3RzLlxuICAgKiBUeXBpY2FsbHkgdGhlIHNhbWUgZGlyZWN0b3J5IHdoZXJlIHByb2plY3QgdGVzdHMgd2lsbCBiZSBsb2NhdGVkLlxuICAgKiBAZGVmYXVsdCBcInRlc3RzXCJcbiAgICovXG4gIHJlYWRvbmx5IHNhbXBsZVRlc3RkaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSBwcm9qZW5yYyBpbiBQeXRob24uXG4gICAqXG4gICAqIFRoaXMgd2lsbCBpbnN0YWxsIGBwcm9qZW5gIGFzIGEgUHl0aG9uIGRlcGVuZGVuY3kgYW5kIGFkZCBhIGBzeW50aGBcbiAgICogdGFzayB3aGljaCB3aWxsIHJ1biBgLnByb2plbnJjLnB5YC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNQeXRob24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHJlbGF0ZWQgdG8gcHJvamVucmMgaW4gcHl0aG9uLlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNQeXRob25PcHRpb25zPzogUHJvamVucmNQeXRob25PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2UgcHJvamVucmMgaW4gamF2YXNjcmlwdC5cbiAgICpcbiAgICogVGhpcyB3aWxsIGluc3RhbGwgYHByb2plbmAgYXMgYSBKYXZhU2NyaXB0IGRlcGVuZGVuY3kgYW5kIGFkZCBhIGBzeW50aGBcbiAgICogdGFzayB3aGljaCB3aWxsIHJ1biBgLnByb2plbnJjLmpzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHJlbGF0ZWQgdG8gcHJvamVucmMgaW4gSmF2YVNjcmlwdC5cbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnNPcHRpb25zPzogUHJvamVucmNKc09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFVzZSBwcm9qZW5yYyBpbiBUeXBlU2NyaXB0LlxuICAgKlxuICAgKiBUaGlzIHdpbGwgY3JlYXRlIGEgdHNjb25maWcgZmlsZSAoZGVmYXVsdDogYHRzY29uZmlnLnByb2plbi5qc29uYClcbiAgICogYW5kIHVzZSBhIHR5cGVzY3JpcHQgcnVubmVyIGluIHRoZSBkZWZhdWx0IHRhc2sgdG8gcGFyc2UgdGhlIHByb2plY3Qgc291cmNlIGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNUcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgcmVsYXRlZCB0byBwcm9qZW5yYyBpbiBUeXBlU2NyaXB0LlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNUc09wdGlvbnM/OiBQcm9qZW5yY1RzT3B0aW9ucztcbn1cblxuLyoqXG4gKiBQeXRob24gcHJvamVjdC5cbiAqXG4gKiBAcGppZCBweXRob25cbiAqL1xuZXhwb3J0IGNsYXNzIFB5dGhvblByb2plY3QgZXh0ZW5kcyBHaXRIdWJQcm9qZWN0IHtcbiAgLyoqXG4gICAqIFB5dGhvbiBtb2R1bGUgbmFtZSAodGhlIHByb2plY3QgbmFtZSwgd2l0aCBhbnkgaHlwaGVucyBvciBwZXJpb2RzIHJlcGxhY2VkXG4gICAqIHdpdGggdW5kZXJzY29yZXMpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1vZHVsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUgcGFja2FnZSBmb3IgZGlzdHJpYnV0aW9uIChzaG91bGQgZm9sbG93IHNlbXZlcikuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUEkgZm9yIG1hbmFnaW5nIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXBzTWFuYWdlciE6IElQeXRob25EZXBzO1xuXG4gIC8qKlxuICAgKiBBUEkgZm9yIG1hbmFnaW5nIHRoZSBQeXRob24gcnVudGltZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbnZNYW5hZ2VyITogSVB5dGhvbkVudjtcblxuICAvKipcbiAgICogQVBJIGZvciBtYW5hZ2luZyBwYWNrYWdpbmcgdGhlIHByb2plY3QgYXMgYSBsaWJyYXJ5LiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgYHByb2plY3RUeXBlYCBpcyBMSUIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFja2FnaW5nTWFuYWdlcj86IElQeXRob25QYWNrYWdpbmc7XG5cbiAgLyoqXG4gICAqIFB5dGVzdCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgcHl0ZXN0PzogUHl0ZXN0O1xuXG4gIC8qKlxuICAgKiBEaXJlY3Rvcnkgd2hlcmUgc2FtcGxlIHRlc3RzIGFyZSBsb2NhdGVkLlxuICAgKiBAZGVmYXVsdCBcInRlc3RzXCJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzYW1wbGVUZXN0ZGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUHl0aG9uUHJvamVjdE9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIGlmICghUFlUSE9OX1BST0pFQ1RfTkFNRV9SRUdFWC50ZXN0KG9wdGlvbnMubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJQeXRob24gcHJvamVjdHMgbXVzdCBvbmx5IGNvbnNpc3Qgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3Jlcy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5tb2R1bGVOYW1lID0gb3B0aW9ucy5tb2R1bGVOYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbjtcbiAgICB0aGlzLnNhbXBsZVRlc3RkaXIgPSBvcHRpb25zLnNhbXBsZVRlc3RkaXIgPz8gXCJ0ZXN0c1wiO1xuXG4gICAgY29uc3QgcmNGaWxlVHlwZU9wdGlvbnMgPSBbXG4gICAgICBvcHRpb25zLnByb2plbnJjUHl0aG9uLFxuICAgICAgb3B0aW9ucy5wcm9qZW5yY0pzLFxuICAgICAgb3B0aW9ucy5wcm9qZW5yY0pzb24sXG4gICAgICBvcHRpb25zLnByb2plbnJjVHMsXG4gICAgXTtcblxuICAgIGlmIChtdWx0aXBsZVNlbGVjdGVkKHJjRmlsZVR5cGVPcHRpb25zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk9ubHkgb25lIG9mIHByb2plbnJjUHl0aG9uLCBwcm9qZW5yY0pzLCBwcm9qZW5yY1RzLCBhbmQgcHJvamVucmNKc29uIGNhbiBiZSBzZWxlY3RlZC5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9ldHJ5ID0gb3B0aW9ucy5wb2V0cnkgPz8gZmFsc2U7XG4gICAgY29uc3QgdXYgPSBvcHRpb25zLnV2ID8/IGZhbHNlO1xuICAgIGNvbnN0IG5vdF9wb2V0cnlfb3JfdXYgPSAhcG9ldHJ5ICYmICF1djtcblxuICAgIC8vIEFzc3VtZSBwaXAgaWYgbm90IHVzaW5nIHBvZXRyeSBvciB1dlxuICAgIGNvbnN0IHBpcCA9IG9wdGlvbnMucGlwID8/IG5vdF9wb2V0cnlfb3JfdXY7XG5cbiAgICAvLyBBc3N1bWUgdmVudiBpZiBub3QgdXNpbmcgcG9ldHJ5IG9yIHV2XG4gICAgY29uc3QgdmVudiA9IG9wdGlvbnMudmVudiA/PyBub3RfcG9ldHJ5X29yX3V2O1xuXG4gICAgY29uc3Qgc2V0dXB0b29scyA9IG9wdGlvbnMuc2V0dXB0b29scyA/PyBmYWxzZTtcblxuICAgIGNvbnN0IHRvb2xzID0ge1xuICAgICAgcG9ldHJ5OiBwb2V0cnksXG4gICAgICBwaXA6IHBpcCxcbiAgICAgIHZlbnY6IHZlbnYsXG4gICAgICBzZXR1cHRvb2xzOiBzZXR1cHRvb2xzLFxuICAgICAgdXY6IHV2LFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIHByb2plbnJjLnB5IGlmIG5vIG90aGVyIHByb2plbnJjIHR5cGUgd2FzIGVsZWN0ZWRcbiAgICAgIGlmIChvcHRpb25zLnByb2plbnJjUHl0aG9uID8/ICFhbnlTZWxlY3RlZChyY0ZpbGVUeXBlT3B0aW9ucykpIHtcbiAgICAgICAgbmV3IFByb2plbnJjUHl0aG9uKHRoaXMsIHtcbiAgICAgICAgICBweXRob25FeGVjOiBvcHRpb25zLnB5dGhvbkV4ZWMsXG4gICAgICAgICAgLi4ub3B0aW9ucy5wcm9qZW5yY1B5dGhvbk9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wcm9qZW5yY0pzID8/IGZhbHNlKSB7XG4gICAgICAgIG5ldyBQcm9qZW5yY0pzKHRoaXMsIG9wdGlvbnMucHJvamVucmNKc09wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wcm9qZW5yY1RzID8/IGZhbHNlKSB7XG4gICAgICAgIG5ldyBQcm9qZW5yY1RzKHRoaXMsIG9wdGlvbnMucHJvamVucmNUc09wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZW52KSB7XG4gICAgICB0aGlzLmVudk1hbmFnZXIgPSBuZXcgVmVudih0aGlzLCB7XG4gICAgICAgIHB5dGhvbkV4ZWM6IG9wdGlvbnMucHl0aG9uRXhlYyxcbiAgICAgICAgLi4ub3B0aW9ucy52ZW52T3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwaXApIHtcbiAgICAgIHRoaXMuZGVwc01hbmFnZXIgPSBuZXcgUGlwKHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChzZXR1cHRvb2xzKSB7XG4gICAgICB0aGlzLnBhY2thZ2luZ01hbmFnZXIgPSBuZXcgU2V0dXB0b29scyh0aGlzLCB7XG4gICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG4gICAgICAgIGF1dGhvck5hbWU6IG9wdGlvbnMuYXV0aG9yTmFtZSxcbiAgICAgICAgYXV0aG9yRW1haWw6IG9wdGlvbnMuYXV0aG9yRW1haWwsXG4gICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgICAgaG9tZXBhZ2U6IG9wdGlvbnMuaG9tZXBhZ2UsXG4gICAgICAgIGNsYXNzaWZpZXJzOiBvcHRpb25zLmNsYXNzaWZpZXJzLFxuICAgICAgICBzZXR1cENvbmZpZzogb3B0aW9ucy5zZXR1cENvbmZpZyxcbiAgICAgICAgcHl0aG9uRXhlYzogb3B0aW9ucy5weXRob25FeGVjLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHV2KSB7XG4gICAgICAvLyB1diBjYW5ub3QgYmUgdXNlZCB3aXRoIG90aGVyIHRvb2xzLlxuICAgICAgdGhpcy5jaGVja1Rvb2xDb25mbGljdHMoXCJ1dlwiLCB0b29scyk7XG5cbiAgICAgIGNvbnN0IHV2UHJvamVjdCA9IG5ldyBVdih0aGlzLCB7XG4gICAgICAgIHB5dGhvbkV4ZWM6IG9wdGlvbnMudXZPcHRpb25zPy5weXRob25FeGVjLFxuXG4gICAgICAgIHByb2plY3Q6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHJlYWRtZTogb3B0aW9ucy5yZWFkbWU/LmZpbGVuYW1lID8/IFwiUkVBRE1FLm1kXCIsXG4gICAgICAgICAgbGljZW5zZTogb3B0aW9ucy5saWNlbnNlLFxuICAgICAgICAgIGF1dGhvcnM6IG9wdGlvbnMuYXV0aG9yTmFtZVxuICAgICAgICAgICAgPyBbeyBuYW1lOiBvcHRpb25zLmF1dGhvck5hbWUsIGVtYWlsOiBvcHRpb25zLmF1dGhvckVtYWlsIH1dXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICAgIGNsYXNzaWZpZXJzOiBvcHRpb25zLmNsYXNzaWZpZXJzLFxuICAgICAgICAgIHVybHM6IG9wdGlvbnMuaG9tZXBhZ2VcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGhvbWVwYWdlOiBvcHRpb25zLmhvbWVwYWdlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAuLi5vcHRpb25zLnV2T3B0aW9ucz8ucHJvamVjdCwgLy8gdGFrZXMgcHJpb3JpdHlcbiAgICAgICAgfSxcblxuICAgICAgICBidWlsZFN5c3RlbTogb3B0aW9ucy51dk9wdGlvbnM/LmJ1aWxkU3lzdGVtLFxuICAgICAgICB1djogb3B0aW9ucy51dk9wdGlvbnM/LnV2LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmRlcHNNYW5hZ2VyID0gdXZQcm9qZWN0O1xuICAgICAgdGhpcy5lbnZNYW5hZ2VyID0gdXZQcm9qZWN0O1xuICAgICAgdGhpcy5wYWNrYWdpbmdNYW5hZ2VyID0gdXZQcm9qZWN0O1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy51dk9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInV2T3B0aW9ucyBvbmx5IGFwcGxpZXMgd2hlbiB1c2luZyB1di5cIik7XG4gICAgfVxuXG4gICAgaWYgKHBvZXRyeSkge1xuICAgICAgLy8gcG9ldHJ5IGNhbm5vdCBiZSB1c2VkIHdpdGggb3RoZXIgdG9vbHMuXG4gICAgICB0aGlzLmNoZWNrVG9vbENvbmZsaWN0cyhcInBvZXRyeVwiLCB0b29scyk7XG5cbiAgICAgIGNvbnN0IHBvZXRyeVByb2plY3QgPSBuZXcgUG9ldHJ5KHRoaXMsIHtcbiAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbixcbiAgICAgICAgYXV0aG9yTmFtZTogb3B0aW9ucy5hdXRob3JOYW1lLFxuICAgICAgICBhdXRob3JFbWFpbDogb3B0aW9ucy5hdXRob3JFbWFpbCxcbiAgICAgICAgbGljZW5zZTogb3B0aW9ucy5saWNlbnNlLFxuICAgICAgICBob21lcGFnZTogb3B0aW9ucy5ob21lcGFnZSxcbiAgICAgICAgY2xhc3NpZmllcnM6IG9wdGlvbnMuY2xhc3NpZmllcnMsXG4gICAgICAgIHB5dGhvbkV4ZWM6IG9wdGlvbnMucHl0aG9uRXhlYyxcbiAgICAgICAgcG9ldHJ5T3B0aW9uczoge1xuICAgICAgICAgIHJlYWRtZTogb3B0aW9ucy5yZWFkbWU/LmZpbGVuYW1lID8/IFwiUkVBRE1FLm1kXCIsXG4gICAgICAgICAgLi4ub3B0aW9ucy5wb2V0cnlPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmRlcHNNYW5hZ2VyID0gcG9ldHJ5UHJvamVjdDtcbiAgICAgIHRoaXMuZW52TWFuYWdlciA9IHBvZXRyeVByb2plY3Q7XG4gICAgICB0aGlzLnBhY2thZ2luZ01hbmFnZXIgPSBwb2V0cnlQcm9qZWN0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5lbnZNYW5hZ2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQXQgbGVhc3Qgb25lIHRvb2wgbXVzdCBiZSBjaG9zZW4gZm9yIG1hbmFnaW5nIHRoZSBlbnZpcm9ubWVudCAodmVudiwgY29uZGEsIHBpcGVudiwgb3IgcG9ldHJ5KS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRlcHNNYW5hZ2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQXQgbGVhc3Qgb25lIHRvb2wgbXVzdCBiZSBjaG9zZW4gZm9yIG1hbmFnaW5nIGRlcGVuZGVuY2llcyAocGlwLCBjb25kYSwgcGlwZW52LCBvciBwb2V0cnkpLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyKHZlbnYpICsgTnVtYmVyKHBvZXRyeSkgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTW9yZSB0aGFuIG9uZSBjb21wb25lbnQgaGFzIGJlZW4gY2hvc2VuIGZvciBtYW5hZ2luZyB0aGUgZW52aXJvbm1lbnQgKHZlbnYsIGNvbmRhLCBwaXBlbnYsIG9yIHBvZXRyeSlcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKE51bWJlcihwaXApICsgTnVtYmVyKHBvZXRyeSkgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTW9yZSB0aGFuIG9uZSBjb21wb25lbnQgaGFzIGJlZW4gY2hvc2VuIGZvciBtYW5hZ2luZyBkZXBlbmRlbmNpZXMgKHBpcCwgY29uZGEsIHBpcGVudiwgb3IgcG9ldHJ5KVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyKHNldHVwdG9vbHMpICsgTnVtYmVyKHBvZXRyeSkgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTW9yZSB0aGFuIG9uZSBjb21wb25lbnQgaGFzIGJlZW4gY2hvc2VuIGZvciBtYW5hZ2luZyBwYWNrYWdpbmcgKHNldHVwdG9vbHMgb3IgcG9ldHJ5KVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5weXRlc3QgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5weXRlc3QgPSBuZXcgUHl0ZXN0KHRoaXMsIG9wdGlvbnMucHl0ZXN0T3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy5zYW1wbGUgPz8gdHJ1ZSkge1xuICAgICAgICBuZXcgUHl0ZXN0U2FtcGxlKHRoaXMsIHtcbiAgICAgICAgICBtb2R1bGVOYW1lOiB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgdGVzdGRpcjogdGhpcy5zYW1wbGVUZXN0ZGlyLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zYW1wbGUgPz8gdHJ1ZSkge1xuICAgICAgbmV3IFB5dGhvblNhbXBsZSh0aGlzLCB7XG4gICAgICAgIGRpcjogdGhpcy5tb2R1bGVOYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkZXAgb2Ygb3B0aW9ucy5kZXBzID8/IFtdKSB7XG4gICAgICB0aGlzLmFkZERlcGVuZGVuY3koZGVwKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBvcHRpb25zLmRldkRlcHMgPz8gW10pIHtcbiAgICAgIHRoaXMuYWRkRGV2RGVwZW5kZW5jeShkZXApO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEdpdElnbm9yZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1Rvb2xDb25mbGljdHMoXG4gICAgYWN0aXZlVG9vbE5hbWU6IHN0cmluZyxcbiAgICB0b29sczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICkge1xuICAgIGlmICh0b29sc1thY3RpdmVUb29sTmFtZV0pIHtcbiAgICAgIC8vIENvbGxlY3QgbmFtZXMgb2Ygb3RoZXIgZW5hYmxlZCB0b29scyBleGNsdWRpbmcgdGhlIGFjdGl2ZSB0b29sIGl0c2VsZlxuICAgICAgY29uc3QgY29uZmxpY3RzID0gT2JqZWN0LmVudHJpZXModG9vbHMpXG4gICAgICAgIC5maWx0ZXIoKFtuYW1lLCBlbmFibGVkXSkgPT4gbmFtZSAhPT0gYWN0aXZlVG9vbE5hbWUgJiYgZW5hYmxlZClcbiAgICAgICAgLm1hcCgoW25hbWVdKSA9PiBuYW1lKTtcblxuICAgICAgaWYgKGNvbmZsaWN0cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAke2FjdGl2ZVRvb2xOYW1lfSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIG90aGVyIHRvb2xzLCBmb3VuZCB0aGUgZm9sbG93aW5nIGluY29tcGF0aWJsZSB0b29scyBlbmFibGVkOiAke2NvbmZsaWN0cy5qb2luKFxuICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBkZWZhdWx0IGdpdGlnbm9yZSBvcHRpb25zIGZvciBhIFB5dGhvbiBwcm9qZWN0IGJhc2VkIG9uXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZ2l0aWdub3JlL2Jsb2IvbWFzdGVyL1B5dGhvbi5naXRpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgYWRkRGVmYXVsdEdpdElnbm9yZSgpIHtcbiAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKFxuICAgICAgXCIjIEJ5dGUtY29tcGlsZWQgLyBvcHRpbWl6ZWQgLyBETEwgZmlsZXNcIixcbiAgICAgIFwiX19weWNhY2hlX18vXCIsXG4gICAgICBcIioucHlbY29kXVwiLFxuICAgICAgXCIqJHB5LmNsYXNzXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEMgZXh0ZW5zaW9uc1wiLFxuICAgICAgXCIqLnNvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIERpc3RyaWJ1dGlvbiAvIHBhY2thZ2luZ1wiLFxuICAgICAgXCIuUHl0aG9uXCIsXG4gICAgICBcImJ1aWxkL1wiLFxuICAgICAgXCJkZXZlbG9wLWVnZ3MvXCIsXG4gICAgICBcImRpc3QvXCIsXG4gICAgICBcImRvd25sb2Fkcy9cIixcbiAgICAgIFwiZWdncy9cIixcbiAgICAgIFwiLmVnZ3MvXCIsXG4gICAgICBcImxpYi9cIixcbiAgICAgIFwibGliNjQvXCIsXG4gICAgICBcInBhcnRzL1wiLFxuICAgICAgXCJzZGlzdC9cIixcbiAgICAgIFwidmFyL1wiLFxuICAgICAgXCJ3aGVlbHMvXCIsXG4gICAgICBcInNoYXJlL3B5dGhvbi13aGVlbHMvXCIsXG4gICAgICBcIiouZWdnLWluZm8vXCIsXG4gICAgICBcIi5pbnN0YWxsZWQuY2ZnXCIsXG4gICAgICBcIiouZWdnXCIsXG4gICAgICBcIk1BTklGRVNUXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFB5SW5zdGFsbGVyXCIsXG4gICAgICBcIiMgIFVzdWFsbHkgdGhlc2UgZmlsZXMgYXJlIHdyaXR0ZW4gYnkgYSBweXRob24gc2NyaXB0IGZyb20gYSB0ZW1wbGF0ZVwiLFxuICAgICAgXCIjICBiZWZvcmUgUHlJbnN0YWxsZXIgYnVpbGRzIHRoZSBleGUsIHNvIGFzIHRvIGluamVjdCBkYXRlL290aGVyIGluZm9zIGludG8gaXQuXCIsXG4gICAgICBcIioubWFuaWZlc3RcIixcbiAgICAgIFwiKi5zcGVjXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEluc3RhbGxlciBsb2dzXCIsXG4gICAgICBcInBpcC1sb2cudHh0XCIsXG4gICAgICBcInBpcC1kZWxldGUtdGhpcy1kaXJlY3RvcnkudHh0XCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFVuaXQgdGVzdCAvIGNvdmVyYWdlIHJlcG9ydHNcIixcbiAgICAgIFwiaHRtbGNvdi9cIixcbiAgICAgIFwiLnRveC9cIixcbiAgICAgIFwiLm5veC9cIixcbiAgICAgIFwiLmNvdmVyYWdlXCIsXG4gICAgICBcIi5jb3ZlcmFnZS4qXCIsXG4gICAgICBcIi5jYWNoZVwiLFxuICAgICAgXCJub3NldGVzdHMueG1sXCIsXG4gICAgICBcImNvdmVyYWdlLnhtbFwiLFxuICAgICAgXCIqLmNvdmVyXCIsXG4gICAgICBcIioucHksY292ZXJcIixcbiAgICAgIFwiLmh5cG90aGVzaXMvXCIsXG4gICAgICBcIi5weXRlc3RfY2FjaGUvXCIsXG4gICAgICBcImNvdmVyL1wiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBUcmFuc2xhdGlvbnNcIixcbiAgICAgIFwiKi5tb1wiLFxuICAgICAgXCIqLnBvdFwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBEamFuZ28gc3R1ZmY6XCIsXG4gICAgICBcIioubG9nXCIsXG4gICAgICBcImxvY2FsX3NldHRpbmdzLnB5XCIsXG4gICAgICBcImRiLnNxbGl0ZTNcIixcbiAgICAgIFwiZGIuc3FsaXRlMy1qb3VybmFsXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEZsYXNrIHN0dWZmOlwiLFxuICAgICAgXCJpbnN0YW5jZS9cIixcbiAgICAgIFwiLndlYmFzc2V0cy1jYWNoZVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBTY3JhcHkgc3R1ZmY6XCIsXG4gICAgICBcIi5zY3JhcHlcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgU3BoaW54IGRvY3VtZW50YXRpb25cIixcbiAgICAgIFwiZG9jcy9fYnVpbGQvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFB5QnVpbGRlclwiLFxuICAgICAgXCIucHlidWlsZGVyL1wiLFxuICAgICAgXCJ0YXJnZXQvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEp1cHl0ZXIgTm90ZWJvb2tcIixcbiAgICAgIFwiLmlweW5iX2NoZWNrcG9pbnRzXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIElQeXRob25cIixcbiAgICAgIFwicHJvZmlsZV9kZWZhdWx0L1wiLFxuICAgICAgXCJpcHl0aG9uX2NvbmZpZy5weVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBQRVAgNTgyOyB1c2VkIGJ5IGUuZy4gZ2l0aHViLmNvbS9EYXZpZC1PQ29ubm9yL3B5Zmxvd1wiLFxuICAgICAgXCJfX3B5cGFja2FnZXNfXy9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgQ2VsZXJ5IHN0dWZmXCIsXG4gICAgICBcImNlbGVyeWJlYXQtc2NoZWR1bGVcIixcbiAgICAgIFwiY2VsZXJ5YmVhdC5waWRcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgU2FnZU1hdGggcGFyc2VkIGZpbGVzXCIsXG4gICAgICBcIiouc2FnZS5weVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBFbnZpcm9ubWVudHNcIixcbiAgICAgIFwiLmVudlwiLFxuICAgICAgXCIudmVudlwiLFxuICAgICAgXCJlbnYvXCIsXG4gICAgICBcInZlbnYvXCIsXG4gICAgICBcIkVOVi9cIixcbiAgICAgIFwiZW52LmJhay9cIixcbiAgICAgIFwidmVudi5iYWsvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFNweWRlciBwcm9qZWN0IHNldHRpbmdzXCIsXG4gICAgICBcIi5zcHlkZXJwcm9qZWN0XCIsXG4gICAgICBcIi5zcHlwcm9qZWN0XCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFJvcGUgcHJvamVjdCBzZXR0aW5nc1wiLFxuICAgICAgXCIucm9wZXByb2plY3RcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgbWtkb2NzIGRvY3VtZW50YXRpb25cIixcbiAgICAgIFwiL3NpdGVcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgbXlweVwiLFxuICAgICAgXCIubXlweV9jYWNoZS9cIixcbiAgICAgIFwiLmRteXB5Lmpzb25cIixcbiAgICAgIFwiZG15cHkuanNvblwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBQeXJlIHR5cGUgY2hlY2tlclwiLFxuICAgICAgXCIucHlyZS9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgcHl0eXBlIHN0YXRpYyB0eXBlIGFuYWx5emVyXCIsXG4gICAgICBcIi5weXR5cGUvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEN5dGhvbiBkZWJ1ZyBzeW1ib2xzXCIsXG4gICAgICBcImN5dGhvbl9kZWJ1Zy9cIixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBydW50aW1lIGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIEZvcm1hdCBgPG1vZHVsZT5APHNlbXZlcj5gXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kZXBzTWFuYWdlci5hZGREZXBlbmRlbmN5KHNwZWMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBkZXYgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgRm9ybWF0IGA8bW9kdWxlPkA8c2VtdmVyPmBcbiAgICovXG4gIHB1YmxpYyBhZGREZXZEZXBlbmRlbmN5KHNwZWM6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRlcHNNYW5hZ2VyLmFkZERldkRlcGVuZGVuY3koc3BlYyk7XG4gIH1cblxuICBwdWJsaWMgcG9zdFN5bnRoZXNpemUoKSB7XG4gICAgc3VwZXIucG9zdFN5bnRoZXNpemUoKTtcblxuICAgIHRoaXMuZW52TWFuYWdlci5zZXR1cEVudmlyb25tZW50KCk7XG4gICAgdGhpcy5kZXBzTWFuYWdlci5pbnN0YWxsRGVwZW5kZW5jaWVzKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -8,7 +8,7 @@ const sample_file_1 = require("../sample-file");
|
|
|
8
8
|
* Python code sample.
|
|
9
9
|
*/
|
|
10
10
|
class PythonSample extends component_1.Component {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonSample", version: "0.101.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonSample", version: "0.101.4" };
|
|
12
12
|
constructor(project, options) {
|
|
13
13
|
super(project);
|
|
14
14
|
new sample_file_1.SampleDir(project, options.dir, {
|
|
@@ -11,7 +11,7 @@ const semver_1 = require("../util/semver");
|
|
|
11
11
|
* @see https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format
|
|
12
12
|
*/
|
|
13
13
|
class RequirementsFile extends file_1.FileBase {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.RequirementsFile", version: "0.101.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.RequirementsFile", version: "0.101.4" };
|
|
15
15
|
packages = new Array();
|
|
16
16
|
packageProvider;
|
|
17
17
|
constructor(project, filePath, options) {
|
package/lib/python/setuppy.js
CHANGED
|
@@ -7,7 +7,7 @@ const file_1 = require("../file");
|
|
|
7
7
|
* Python packaging script where package metadata can be placed.
|
|
8
8
|
*/
|
|
9
9
|
class SetupPy extends file_1.FileBase {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.SetupPy", version: "0.101.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.SetupPy", version: "0.101.4" };
|
|
11
11
|
setupConfig;
|
|
12
12
|
constructor(project, options) {
|
|
13
13
|
super(project, "setup.py");
|
package/lib/python/setuptools.js
CHANGED
|
@@ -9,7 +9,7 @@ const dependencies_1 = require("../dependencies");
|
|
|
9
9
|
* Manages packaging through setuptools with a setup.py script.
|
|
10
10
|
*/
|
|
11
11
|
class Setuptools extends component_1.Component {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Setuptools", version: "0.101.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Setuptools", version: "0.101.4" };
|
|
13
13
|
publishTask;
|
|
14
14
|
/**
|
|
15
15
|
* A task that uploads the package to the Test PyPI repository.
|
package/lib/python/uv.js
CHANGED
|
@@ -11,7 +11,7 @@ const exec_1 = require("../util/exec");
|
|
|
11
11
|
* Manage project dependencies, virtual environments, and packaging through uv.
|
|
12
12
|
*/
|
|
13
13
|
class Uv extends component_1.Component {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Uv", version: "0.101.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Uv", version: "0.101.4" };
|
|
15
15
|
/**
|
|
16
16
|
* The `pyproject.toml` file
|
|
17
17
|
*/
|
package/lib/python/venv.js
CHANGED
|
@@ -43,7 +43,7 @@ const exec_1 = require("../util/exec");
|
|
|
43
43
|
* Manages a virtual environment through the Python venv module.
|
|
44
44
|
*/
|
|
45
45
|
class Venv extends component_1.Component {
|
|
46
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Venv", version: "0.101.
|
|
46
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Venv", version: "0.101.4" };
|
|
47
47
|
/**
|
|
48
48
|
* Name of directory to store the environment in
|
|
49
49
|
*/
|
package/lib/readme.js
CHANGED
|
@@ -10,7 +10,7 @@ const sample_file_1 = require("./sample-file");
|
|
|
10
10
|
* @param text - The initial contents of the README.md file. Defaults to '# replace this'
|
|
11
11
|
*/
|
|
12
12
|
class SampleReadme extends sample_file_1.SampleFile {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleReadme", version: "0.101.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleReadme", version: "0.101.4" };
|
|
14
14
|
constructor(project, props) {
|
|
15
15
|
super(project, props?.filename ?? "README.md", {
|
|
16
16
|
contents: props?.contents ?? "# replace this",
|
package/lib/release/publisher.js
CHANGED
|
@@ -48,7 +48,7 @@ const PUBLISH_JOB_PREFIX = "release_";
|
|
|
48
48
|
* Under the hood, it uses https://github.com/cdklabs/publib
|
|
49
49
|
*/
|
|
50
50
|
class Publisher extends component_1.Component {
|
|
51
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.Publisher", version: "0.101.
|
|
51
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.Publisher", version: "0.101.4" };
|
|
52
52
|
static PUBLISH_GIT_TASK_NAME = "publish:git";
|
|
53
53
|
buildJobId;
|
|
54
54
|
artifactName;
|
|
@@ -7,7 +7,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
7
7
|
* and release artifact automation
|
|
8
8
|
*/
|
|
9
9
|
class ReleaseTrigger {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.ReleaseTrigger", version: "0.101.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.ReleaseTrigger", version: "0.101.4" };
|
|
11
11
|
/**
|
|
12
12
|
* Creates a manual release trigger.
|
|
13
13
|
*
|
package/lib/release/release.js
CHANGED
|
@@ -64,7 +64,7 @@ const DEPENDENT_JOB_CONDITIONAL = `needs.${BUILD_JOBID}.outputs.${TAG_EXISTS_OUT
|
|
|
64
64
|
* By default, no branches are released. To add branches, call `addBranch()`.
|
|
65
65
|
*/
|
|
66
66
|
class Release extends component_1.Component {
|
|
67
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.Release", version: "0.101.
|
|
67
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.Release", version: "0.101.4" };
|
|
68
68
|
static ANTI_TAMPER_CMD = "git diff --ignore-space-at-eol --exit-code";
|
|
69
69
|
/**
|
|
70
70
|
* Returns the `Release` component of a project or `undefined` if the project
|
package/lib/renovatebot.js
CHANGED
|
@@ -68,7 +68,7 @@ var RenovatebotMinimumReleaseAgeBehaviour;
|
|
|
68
68
|
* Ignores the versions controlled by Projen.
|
|
69
69
|
*/
|
|
70
70
|
class Renovatebot extends component_1.Component {
|
|
71
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Renovatebot", version: "0.101.
|
|
71
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Renovatebot", version: "0.101.4" };
|
|
72
72
|
/**
|
|
73
73
|
* The file holding the renovatebot configuration
|
|
74
74
|
*/
|
package/lib/run-task.cjs
CHANGED
|
@@ -1671,7 +1671,7 @@ var require_package = __commonJS({
|
|
|
1671
1671
|
markmac: "^0.1.659",
|
|
1672
1672
|
prettier: "^3",
|
|
1673
1673
|
"ts-jest": "^29",
|
|
1674
|
-
|
|
1674
|
+
tsx: "^4.22.4",
|
|
1675
1675
|
typescript: "6.0.x"
|
|
1676
1676
|
},
|
|
1677
1677
|
peerDependencies: {
|
|
@@ -1733,7 +1733,7 @@ var require_package = __commonJS({
|
|
|
1733
1733
|
publishConfig: {
|
|
1734
1734
|
access: "public"
|
|
1735
1735
|
},
|
|
1736
|
-
version: "0.101.
|
|
1736
|
+
version: "0.101.4",
|
|
1737
1737
|
jest: {
|
|
1738
1738
|
coverageProvider: "v8",
|
|
1739
1739
|
coverageReporters: [
|
|
@@ -14435,6 +14435,18 @@ var QUOTED_ARGS_MARKER = `"${ARGS_MARKER}"`;
|
|
|
14435
14435
|
function quoteArg(arg) {
|
|
14436
14436
|
return '"' + arg.replace(/(["$`\\])/g, "\\$1") + '"';
|
|
14437
14437
|
}
|
|
14438
|
+
function enrichBuiltinShellError(error, command) {
|
|
14439
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
14440
|
+
if (!/Not implemented:/.test(message)) {
|
|
14441
|
+
return error;
|
|
14442
|
+
}
|
|
14443
|
+
const commandLine = Array.isArray(command) ? command.join(" ") : command;
|
|
14444
|
+
return new Error(
|
|
14445
|
+
`projen's built-in shell can't run this command:
|
|
14446
|
+
${commandLine}
|
|
14447
|
+
To use your system's shell instead, set this task to TaskShell.system().`
|
|
14448
|
+
);
|
|
14449
|
+
}
|
|
14438
14450
|
var TaskRuntime = class _TaskRuntime {
|
|
14439
14451
|
/**
|
|
14440
14452
|
* The project-relative path of the tasks manifest file.
|
|
@@ -14837,7 +14849,12 @@ var RunTask = class {
|
|
|
14837
14849
|
return systemShell(command, { cwd: cwd2, env, capture: capture2 });
|
|
14838
14850
|
}
|
|
14839
14851
|
const builder = this.buildDaxCommand(command, shell);
|
|
14840
|
-
|
|
14852
|
+
let result;
|
|
14853
|
+
try {
|
|
14854
|
+
result = await builder.cwd(cwd2).env(env).stdout(capture2 ? "piped" : "inherit").stderr(capture2 ? "piped" : "inherit").noThrow();
|
|
14855
|
+
} catch (e) {
|
|
14856
|
+
throw enrichBuiltinShellError(e, command);
|
|
14857
|
+
}
|
|
14841
14858
|
return {
|
|
14842
14859
|
status: result.code,
|
|
14843
14860
|
stdout: capture2 ? Buffer.from(result.stdoutBytes) : null,
|
package/lib/sample-file.js
CHANGED
|
@@ -45,7 +45,7 @@ const util_1 = require("./util");
|
|
|
45
45
|
* Use this for creating example code files or other resources.
|
|
46
46
|
*/
|
|
47
47
|
class SampleFile extends component_1.Component {
|
|
48
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleFile", version: "0.101.
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleFile", version: "0.101.4" };
|
|
49
49
|
filePath;
|
|
50
50
|
options;
|
|
51
51
|
/**
|
|
@@ -96,7 +96,7 @@ exports.SampleFile = SampleFile;
|
|
|
96
96
|
* Renders the given files into the directory if the directory does not exist. Use this to create sample code files
|
|
97
97
|
*/
|
|
98
98
|
class SampleDir extends component_1.Component {
|
|
99
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleDir", version: "0.101.
|
|
99
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleDir", version: "0.101.4" };
|
|
100
100
|
dir;
|
|
101
101
|
options;
|
|
102
102
|
/**
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FutureComponent } from "./component";
|
|
2
|
+
import type { DependencyRequest } from "./dependencies";
|
|
3
|
+
import type { TaskStep } from "./task-model";
|
|
4
|
+
/**
|
|
5
|
+
* The resolved configuration for running a script.
|
|
6
|
+
*/
|
|
7
|
+
export interface RunScriptConfig {
|
|
8
|
+
/**
|
|
9
|
+
* Dependencies required to run the script.
|
|
10
|
+
*/
|
|
11
|
+
readonly dependencies: DependencyRequest[];
|
|
12
|
+
/**
|
|
13
|
+
* The task steps to execute the script.
|
|
14
|
+
*/
|
|
15
|
+
readonly steps: TaskStep[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A script runner that can produce the configuration to execute a file of a
|
|
19
|
+
* particular type.
|
|
20
|
+
*/
|
|
21
|
+
export interface IScriptRunner {
|
|
22
|
+
/**
|
|
23
|
+
* Produce the configuration to run the given entrypoint.
|
|
24
|
+
*/
|
|
25
|
+
configFor(entrypoint: string): RunScriptConfig;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A script runner that executes the entrypoint file directly.
|
|
29
|
+
*
|
|
30
|
+
* A runner is a {@link FutureComponent}: it can be created standalone (e.g. in
|
|
31
|
+
* `.projenrc.ts`) and is attached to a project by whoever consumes it.
|
|
32
|
+
*/
|
|
33
|
+
export declare class ScriptRunner extends FutureComponent implements IScriptRunner {
|
|
34
|
+
configFor(entrypoint: string): RunScriptConfig;
|
|
35
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScriptRunner = void 0;
|
|
4
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
+
const component_1 = require("./component");
|
|
6
|
+
/**
|
|
7
|
+
* A script runner that executes the entrypoint file directly.
|
|
8
|
+
*
|
|
9
|
+
* A runner is a {@link FutureComponent}: it can be created standalone (e.g. in
|
|
10
|
+
* `.projenrc.ts`) and is attached to a project by whoever consumes it.
|
|
11
|
+
*/
|
|
12
|
+
class ScriptRunner extends component_1.FutureComponent {
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ScriptRunner", version: "0.101.4" };
|
|
14
|
+
configFor(entrypoint) {
|
|
15
|
+
return {
|
|
16
|
+
dependencies: [],
|
|
17
|
+
steps: [{ execArgs: [entrypoint] }],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ScriptRunner = ScriptRunner;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LXJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zY3JpcHQtcnVubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwyQ0FBOEM7QUE4QjlDOzs7OztHQUtHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsMkJBQWU7O0lBQ3hDLFNBQVMsQ0FBQyxVQUFrQjtRQUNqQyxPQUFPO1lBQ0wsWUFBWSxFQUFFLEVBQUU7WUFDaEIsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1NBQ3BDLENBQUM7SUFDSixDQUFDOztBQU5ILG9DQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRnV0dXJlQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IERlcGVuZGVuY3lSZXF1ZXN0IH0gZnJvbSBcIi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgdHlwZSB7IFRhc2tTdGVwIH0gZnJvbSBcIi4vdGFzay1tb2RlbFwiO1xuXG4vKipcbiAqIFRoZSByZXNvbHZlZCBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIGEgc2NyaXB0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1blNjcmlwdENvbmZpZyB7XG4gIC8qKlxuICAgKiBEZXBlbmRlbmNpZXMgcmVxdWlyZWQgdG8gcnVuIHRoZSBzY3JpcHQuXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY3lSZXF1ZXN0W107XG5cbiAgLyoqXG4gICAqIFRoZSB0YXNrIHN0ZXBzIHRvIGV4ZWN1dGUgdGhlIHNjcmlwdC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBUYXNrU3RlcFtdO1xufVxuXG4vKipcbiAqIEEgc2NyaXB0IHJ1bm5lciB0aGF0IGNhbiBwcm9kdWNlIHRoZSBjb25maWd1cmF0aW9uIHRvIGV4ZWN1dGUgYSBmaWxlIG9mIGFcbiAqIHBhcnRpY3VsYXIgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2NyaXB0UnVubmVyIHtcbiAgLyoqXG4gICAqIFByb2R1Y2UgdGhlIGNvbmZpZ3VyYXRpb24gdG8gcnVuIHRoZSBnaXZlbiBlbnRyeXBvaW50LlxuICAgKi9cbiAgY29uZmlnRm9yKGVudHJ5cG9pbnQ6IHN0cmluZyk6IFJ1blNjcmlwdENvbmZpZztcbn1cblxuLyoqXG4gKiBBIHNjcmlwdCBydW5uZXIgdGhhdCBleGVjdXRlcyB0aGUgZW50cnlwb2ludCBmaWxlIGRpcmVjdGx5LlxuICpcbiAqIEEgcnVubmVyIGlzIGEge0BsaW5rIEZ1dHVyZUNvbXBvbmVudH06IGl0IGNhbiBiZSBjcmVhdGVkIHN0YW5kYWxvbmUgKGUuZy4gaW5cbiAqIGAucHJvamVucmMudHNgKSBhbmQgaXMgYXR0YWNoZWQgdG8gYSBwcm9qZWN0IGJ5IHdob2V2ZXIgY29uc3VtZXMgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY3JpcHRSdW5uZXIgZXh0ZW5kcyBGdXR1cmVDb21wb25lbnQgaW1wbGVtZW50cyBJU2NyaXB0UnVubmVyIHtcbiAgcHVibGljIGNvbmZpZ0ZvcihlbnRyeXBvaW50OiBzdHJpbmcpOiBSdW5TY3JpcHRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgc3RlcHM6IFt7IGV4ZWNBcmdzOiBbZW50cnlwb2ludF0gfV0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
package/lib/source-code.js
CHANGED
|
@@ -9,7 +9,7 @@ const textfile_1 = require("./textfile");
|
|
|
9
9
|
*/
|
|
10
10
|
class SourceCode extends component_1.Component {
|
|
11
11
|
filePath;
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SourceCode", version: "0.101.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SourceCode", version: "0.101.4" };
|
|
13
13
|
file;
|
|
14
14
|
indentLevel = 0;
|
|
15
15
|
indent;
|