@pipeline-builder/pipeline-manager 3.4.111 → 3.4.112
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/README.md +1 -1
- package/dist/agent/prereqs.js +5 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -56,7 +56,7 @@ pipeline-manager provision --target local --repo --with-all --with-smoke-test
|
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
- **Deploy (gated) or teardown.** `provision` shows the plan, then deploys — refusing on failed prerequisites or missing inputs, confirming before it runs (`--yes` auto-accepts for CI), then verifying health and running `init-platform`. **`--json`** prints the plan and runs nothing (the only non-executing mode). `--teardown` removes a deployment (`local`/`minikube` stop the stack; **EC2 deletes its CloudFormation stack and EKS runs `bin/shutdown.sh` (cluster + EFS + ACM + Route 53), both irreversibly** and require typing the stack/cluster id to confirm — `--force` skips it for CI).
|
|
59
|
-
- **Prerequisites, handled.** The checks mirror each target's `setup.sh` exactly — local: Docker, Docker Compose, `yq`, `openssl`; minikube: Docker, minikube, kubectl, `openssl` (+ `yq` with `--with-plugins`); ec2: AWS CLI + working credentials; eks: AWS CLI + credentials, `
|
|
59
|
+
- **Prerequisites, handled.** The checks mirror each target's `setup.sh` exactly — local: Docker, Docker Compose, `yq`, `openssl`; minikube: Docker, minikube, kubectl, `openssl` (+ `yq` with `--with-plugins`); ec2: AWS CLI + working credentials; eks: AWS CLI + credentials, `kubectl`, `openssl`, `envsubst` (+ `yq` with `--with-plugins`); `eksctl` is auto-installed by `setup.sh` (latest binary) when not already on PATH. Missing **single-binary** tools (`yq`, `kubectl`, `minikube`) are offered as an on-demand **fetch** into `~/.pipeline-manager/tools` and put on PATH — no `brew`/`apt`, no system change. For local/minikube it also **creates the target's `.env`** from `.env.example`, generating the `CHANGE_ME` secrets. Tools that aren't relocatable binaries (git, Docker/Compose, AWS CLI, openssl) fall back to the normal install instruction, and if you run from outside a checkout it **offers to sparse-clone** the deploy folders for you.
|
|
60
60
|
- **Self-healing.** On a failed deploy it matches known CloudFormation issues (cause + fix) and can auto-fix + retry a few — e.g. an existing SES identity → re-run with `--skip-ses-identity`. Gated and bounded by `--retries` (the scripts are idempotent, so a re-run resumes).
|
|
61
61
|
- **AI-optional.** Set `ANTHROPIC_API_KEY` (or `AI_PROVIDER` + its key) to parse a natural-language `--prompt` and add free-form failure diagnosis; without a key it falls back to the deterministic issue matcher.
|
|
62
62
|
- **Bootstrap a fresh machine (`--repo`).** Without a checkout, `--repo` git-clones the platform repo first, then runs from it. The clone is **sparse + partial** (`--filter=blob:none` + cone `sparse-checkout`, git ≥ 2.27 — else a full-clone fallback): it materializes only the deploy folders the selected target + options need. The common base is just `deploy/bin`; each target adds its own folder (e.g. `deploy/local/docker`; minikube is self-contained), and each post-install load adds its folder. Re-syncs are **additive** — a single `--workdir` can accumulate multiple targets. Override with `--repo <url>`, `--ref <branch|tag>`, `--workdir <dir>`.
|
package/dist/agent/prereqs.js
CHANGED
|
@@ -112,11 +112,11 @@ export function checkPrereqs(target, opts = {}) {
|
|
|
112
112
|
// host (openssl) before creating the k8s secret. ec2 bootstraps its secrets on the
|
|
113
113
|
// instance, so it needs none of these.
|
|
114
114
|
if (target === 'eks') {
|
|
115
|
-
// eksctl
|
|
116
|
-
//
|
|
117
|
-
//
|
|
115
|
+
// eksctl: setup.sh installs the latest binary automatically when it's not on PATH
|
|
116
|
+
// (downloaded from the eksctl-io GitHub release via curl), so it isn't a hard prereq —
|
|
117
|
+
// we just confirm curl is available to fetch it.
|
|
118
118
|
const eksctlOnPath = has('eksctl');
|
|
119
|
-
checks.push(check('eksctl', eksctlOnPath ||
|
|
119
|
+
checks.push(check('eksctl', eksctlOnPath || has('curl'), eksctlOnPath ? 'on PATH' : 'setup.sh will install the binary (via curl)', 'install eksctl, or ensure curl is available (setup.sh downloads the eksctl binary)'));
|
|
120
120
|
checks.push(check('kubectl', has('kubectl'), 'on PATH', 'install kubectl — applies the manifests to the cluster'));
|
|
121
121
|
checks.push(check('openssl', has('openssl'), 'on PATH', 'install openssl — setup.sh generates the registry token keypair'));
|
|
122
122
|
checks.push(check('envsubst', has('envsubst'), 'on PATH', 'install gettext (macOS: `brew install gettext`) — setup.sh renders cluster.yaml + manifests with envsubst'));
|
|
@@ -131,4 +131,4 @@ export function checkPrereqs(target, opts = {}) {
|
|
|
131
131
|
export function prereqsSatisfied(checks) {
|
|
132
132
|
return checks.every((c) => c.ok || !c.required);
|
|
133
133
|
}
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVxcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wcmVyZXFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBV3pDLGdDQUFnQztBQUNoQyxTQUFTLEdBQUcsQ0FBQyxHQUFXO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQVMsSUFBSSxDQUFDLEdBQVc7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsMkNBQTJDLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckYsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxTQUFTLHNCQUFzQjtJQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRSxD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QUFDLENBQUMsQ0FBQztRQUM1SCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSwyR0FBMkcsQ0FBQyxDQUFDLENBQUM7UUFDeEssa0ZBQWtGO1FBQ2xGLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1FQUFtRSxDQUFDLENBQUMsQ0FBQztRQUN0SCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQThCO0lBQzdELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYywgUkVBRC1PTkxZIHByZXJlcXVpc2l0ZSBjaGVja3MgcGVyIHRhcmdldC4gTm8gTExNLCBubyBtdXRhdGlvbiDigJRcbiAqIGV2ZXJ5IGNvbW1hbmQgaGVyZSBvbmx5IGluc3BlY3RzIChwcmVzZW5jZSBjaGVja3MsIGBhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHlgLFxuICogYGRvY2tlciBpbmZvYCkuIFRoaXMgaXMgdGhlIGtpbmQgb2YgdGhpbmcgYSBzY3JpcHQgZG9lcyBiZXR0ZXIgdGhhbiBhbiBhZ2VudCxcbiAqIHNvIGl0IHN0YXlzIGRldGVybWluaXN0aWM7IHRoZSBMTE0gaXMgcmVzZXJ2ZWQgZm9yIE5MIHBhcnNpbmcgKyBkaWFnbm9zaXMuXG4gKi9cblxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0SWQgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByZXJlcUNoZWNrIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBvazogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGV0YWlsOiBzdHJpbmc7XG4gIC8qKiBBIGZhaWxpbmcgcmVxdWlyZWQgY2hlY2sgYmxvY2tzIGRlcGxveW1lbnQ7IGFkdmlzb3J5IG9uZXMgYXJlIHdhcm5pbmdzLiAqL1xuICByZWFkb25seSByZXF1aXJlZDogYm9vbGVhbjtcbn1cblxuLyoqIFRydWUgaWYgYGNtZGAgaXMgb24gUEFUSC4gKi9cbmZ1bmN0aW9uIGhhcyhjbWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGV4ZWNTeW5jKGBjb21tYW5kIC12ICR7Y21kfWAsIHsgc3RkaW86ICdpZ25vcmUnLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIFJ1biBhIHJlYWQtb25seSBjb21tYW5kOyByZXR1cm4gaXRzIHRyaW1tZWQgc3Rkb3V0IG9yIG51bGwgb24gZmFpbHVyZS4gKi9cbmZ1bmN0aW9uIHJlYWQoY21kOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXhlY1N5bmMoY21kLCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ2lnbm9yZSddLCB0aW1lb3V0OiAxNTAwMCB9KS50b1N0cmluZygpLnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZG9ja2VyUnVubmluZygpOiBib29sZWFuIHtcbiAgcmV0dXJuIGhhcygnZG9ja2VyJykgJiYgcmVhZCgnZG9ja2VyIGluZm8gLS1mb3JtYXQgXCJ7ey5TZXJ2ZXJWZXJzaW9ufX1cIicpICE9PSBudWxsO1xufVxuXG4vKiogRG9ja2VyIENvbXBvc2UgdjIgKGBkb2NrZXIgY29tcG9zZWApIG9yIGxlZ2FjeSB2MSAoYGRvY2tlci1jb21wb3NlYCkg4oCUIHNldHVwLnNoIG5lZWRzIG9uZS4gKi9cbmZ1bmN0aW9uIGRvY2tlckNvbXBvc2VBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWFkKCdkb2NrZXIgY29tcG9zZSB2ZXJzaW9uJykgIT09IG51bGwgfHwgaGFzKCdkb2NrZXItY29tcG9zZScpO1xufVxuXG5mdW5jdGlvbiBhd3NJZGVudGl0eSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFoYXMoJ2F3cycpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHJlYWQoJ2F3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eSAtLXF1ZXJ5IEFjY291bnQgLS1vdXRwdXQgdGV4dCcpO1xufVxuXG4vKiogUGFyc2VkIGBnaXQgLS12ZXJzaW9uYCBhcyBbbWFqb3IsIG1pbm9yXSwgb3IgbnVsbCBpZiBnaXQgaXMgYWJzZW50L3VucGFyc2VhYmxlLiAqL1xuZnVuY3Rpb24gZ2l0VmVyc2lvbigpOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbCB7XG4gIGNvbnN0IG91dCA9IHJlYWQoJ2dpdCAtLXZlcnNpb24nKTtcbiAgY29uc3QgbSA9IG91dD8ubWF0Y2goLyhcXGQrKVxcLihcXGQrKS8pO1xuICByZXR1cm4gbSA/IFtOdW1iZXIobVsxXSksIE51bWJlcihtWzJdKV0gOiBudWxsO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGdpdCBpcyBvbiBQQVRIIChyZXF1aXJlZCB0byBib290c3RyYXAgYSBjbG9uZSBhdCBhbGwpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdpdEF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdpdFZlcnNpb24oKSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBDb25lIGBzcGFyc2UtY2hlY2tvdXRgICgrIGAtLWZpbHRlcj1ibG9iOm5vbmVgKSBuZWVkcyBnaXQg4omlIDIuMjcuIEJlbG93IHRoYXQsXG4gKiB0aGUgYm9vdHN0cmFwIGZhbGxzIGJhY2sgdG8gYSAoY29ycmVjdCwganVzdCBsYXJnZXIpIGZ1bGwgY2xvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCk6IGJvb2xlYW4ge1xuICBjb25zdCB2ID0gZ2l0VmVyc2lvbigpO1xuICByZXR1cm4gdiAhPT0gbnVsbCAmJiAodlswXSA+IDIgfHwgKHZbMF0gPT09IDIgJiYgdlsxXSA+PSAyNykpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgUHJlcmVxQ2hlY2sgZnJvbSBhIFNJTkdMRSBwcmVzZW5jZSBldmFsdWF0aW9uLiBDb2xsYXBzZXMgdGhlIHJlcGVhdGVkXG4gKiBgeyBvazogcHJvYmUoKSwgZGV0YWlsOiBwcm9iZSgpID8gYSA6IGIgfWAgc2hhcGUg4oCUIHdoaWNoIGFsc28gY2FsbGVkIHRoZSBwcm9iZVxuICogdHdpY2Ug4oCUIGludG8gb25lIHBsYWNlOyB0aGUgY2FsbGVyIGV2YWx1YXRlcyB0aGUgcHJvYmUgb25jZSBhbmQgcGFzc2VzIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrKG5hbWU6IHN0cmluZywgcHJlc2VudDogYm9vbGVhbiwgcHJlc2VudERldGFpbDogc3RyaW5nLCBtaXNzaW5nRGV0YWlsOiBzdHJpbmcsIHJlcXVpcmVkID0gdHJ1ZSk6IFByZXJlcUNoZWNrIHtcbiAgcmV0dXJuIHsgbmFtZSwgb2s6IHByZXNlbnQsIGRldGFpbDogcHJlc2VudCA/IHByZXNlbnREZXRhaWwgOiBtaXNzaW5nRGV0YWlsLCByZXF1aXJlZCB9O1xufVxuXG4vKipcbiAqIFJ1biB0aGUgcmVhZC1vbmx5IHByZXJlcXVpc2l0ZSBjaGVja3MgZm9yIGEgdGFyZ2V0LiBQdXJlIGluc3BlY3Rpb24g4oCUIHNhZmUgdG9cbiAqIHJ1biB1bmNvbmRpdGlvbmFsbHkgKHRoZSBwbGFuIGFzc2VtYmxlcyB0aGlzIGJlZm9yZSB0aGUgZ2F0ZWQgZXhlY3V0aW9uKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUHJlcmVxcyh0YXJnZXQ6IFRhcmdldElkLCBvcHRzOiB7IGJvb3RzdHJhcD86IGJvb2xlYW47IHdpdGhQbHVnaW5zPzogYm9vbGVhbiB9ID0ge30pOiBQcmVyZXFDaGVja1tdIHtcbiAgY29uc3QgY2hlY2tzOiBQcmVyZXFDaGVja1tdID0gW107XG4gIC8vIHNldHVwLnNoIChsb2NhbCkgKyBzZXR1cC5zaCAobWluaWt1YmUpIGJvdGggZ2VuZXJhdGUgdGhlIFRMUyBjZXJ0ICsgcmVnaXN0cnkgSldUIGtleSB3aXRoIG9wZW5zc2wuXG4gIGNvbnN0IE9QRU5TU0xfVExTID0gJ2luc3RhbGwgb3BlbnNzbCDigJQgc2V0dXAuc2ggZ2VuZXJhdGVzIHRoZSBUTFMgY2VydCArIHJlZ2lzdHJ5IEpXVCBrZXkgd2l0aCBpdCc7XG5cbiAgLy8gYC0tcmVwb2AgYm9vdHN0cmFwIGdpdC1jbG9uZXMgdGhlIHBsYXRmb3JtIHJlcG8gZmlyc3Qg4oaSIGdpdCBpcyByZXF1aXJlZC4gQVxuICAvLyBnaXQgYmVsb3cgMi4yNyBzdGlsbCB3b3JrcyAoZnVsbC1jbG9uZSBmYWxsYmFjayksIHNvIHRoZSB2ZXJzaW9uIGlzIGFkdmlzb3J5LlxuICBpZiAob3B0cy5ib290c3RyYXApIHtcbiAgICBjb25zdCB2ID0gZ2l0VmVyc2lvbigpO1xuICAgIGNoZWNrcy5wdXNoKHsgbmFtZTogJ2dpdCcsIG9rOiB2ICE9PSBudWxsLCBkZXRhaWw6IHYgPyBgb24gUEFUSCAoJHt2WzBdfS4ke3ZbMV19KWAgOiAnaW5zdGFsbCBnaXQnLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICBpZiAodiAhPT0gbnVsbCAmJiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpKSB7XG4gICAgICBjaGVja3MucHVzaCh7IG5hbWU6ICdnaXQg4omlIDIuMjcnLCBvazogZmFsc2UsIGRldGFpbDogJ3NwYXJzZSBjbG9uZSBuZWVkcyBnaXQg4omlIDIuMjcg4oCUIGZhbGxpbmcgYmFjayB0byBhIGZ1bGwgY2xvbmUnLCByZXF1aXJlZDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRhcmdldCA9PT0gJ2xvY2FsJykge1xuICAgIC8vIGRlcGxveS9sb2NhbC9kb2NrZXIvYmluL3NldHVwLnNoIGhhcmQtY2hlY2tzIGFsbCBvZiB0aGVzZSBhdCBzdGFydHVwIGFuZCBhYm9ydHMgaWZcbiAgICAvLyBhbnkgaXMgbWlzc2luZyDigJQgbWlycm9yIHRoZW0gaGVyZSBzbyBwcm92aXNpb24gYmxvY2tzIHVwIGZyb250IGluc3RlYWQgb2ZcbiAgICAvLyBmYWlsaW5nIG1pZC1kZXBsb3kgKGUuZy4gdGhlIGNsYXNzaWMgXCJ5cSBpcyBub3QgaW5zdGFsbGVkXCIpLlxuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXInLCBkb2NrZXJSdW5uaW5nKCksICdkYWVtb24gcmVhY2hhYmxlJywgJ2luc3RhbGwgRG9ja2VyIGFuZCBzdGFydCB0aGUgZGFlbW9uJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXIgQ29tcG9zZScsIGRvY2tlckNvbXBvc2VBdmFpbGFibGUoKSwgJ2F2YWlsYWJsZScsICduZWVkcyBgZG9ja2VyIGNvbXBvc2VgICh2MiBwbHVnaW4pIG9yIGBkb2NrZXItY29tcG9zZWAgKHYxKScpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygneXEnLCBoYXMoJ3lxJyksICdvbiBQQVRIJywgJ2luc3RhbGwgeXEgKG1hY09TOiBgYnJldyBpbnN0YWxsIHlxYCkg4oCUIHNldHVwLnNoIHJlcXVpcmVzIGl0JykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgT1BFTlNTTF9UTFMpKTtcbiAgICByZXR1cm4gY2hlY2tzO1xuICB9XG5cbiAgaWYgKHRhcmdldCA9PT0gJ21pbmlrdWJlJykge1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXInLCBkb2NrZXJSdW5uaW5nKCksICdkYWVtb24gcmVhY2hhYmxlJywgJ2luc3RhbGwgRG9ja2VyIGFuZCBzdGFydCB0aGUgZGFlbW9uJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdtaW5pa3ViZScsIGhhcygnbWluaWt1YmUnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBtaW5pa3ViZScpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygna3ViZWN0bCcsIGhhcygna3ViZWN0bCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIGt1YmVjdGwnKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ29wZW5zc2wnLCBoYXMoJ29wZW5zc2wnKSwgJ29uIFBBVEgnLCBPUEVOU1NMX1RMUykpO1xuICAgIC8vIG1pbmlrdWJlJ3Mgc2V0dXAuc2ggZG9lc24ndCBuZWVkIHlxLCBidXQgLS13aXRoLXBsdWdpbnMgYnVpbGRzIGltYWdlc1xuICAgIC8vIChidWlsZC1wbHVnaW4taW1hZ2VzLnNoIC8gZ2VuZXJhdGUtcGx1Z2lucy5zaCkgd2hpY2ggZG8uXG4gICAgaWYgKG9wdHMud2l0aFBsdWdpbnMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKGNoZWNrKCd5cScsIGhhcygneXEnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCB5cSAobWFjT1M6IGBicmV3IGluc3RhbGwgeXFgKSDigJQgcmVxdWlyZWQgdG8gYnVpbGQgcGx1Z2lucycpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrcztcbiAgfVxuXG4gIC8vIGVjMiArIGVrcyDigJQgYm90aCBkZXBsb3kgdG8gQVdTIHZpYSB0aGUgQ0xJLCBzbyBib3RoIG5lZWQgdGhlIEFXUyBDTEkgKyB3b3JraW5nIGNyZWRzLlxuICBjb25zdCBhY2NvdW50ID0gYXdzSWRlbnRpdHkoKTtcbiAgY2hlY2tzLnB1c2goY2hlY2soJ0FXUyBDTEknLCBoYXMoJ2F3cycpLCAnb24gUEFUSCcsICdpbnN0YWxsIHRoZSBBV1MgQ0xJIHYyJykpO1xuICBjaGVja3MucHVzaCh7IG5hbWU6ICdBV1MgY3JlZGVudGlhbHMnLCBvazogYWNjb3VudCAhPT0gbnVsbCwgZGV0YWlsOiBhY2NvdW50ID8gYGF1dGhlbnRpY2F0ZWQgKGFjY291bnQgJHthY2NvdW50fSlgIDogJ3J1biBgYXdzIGNvbmZpZ3VyZWAgLyBzZXQgQVdTX1BST0ZJTEUnLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgLy8gZWtzOiBzZXR1cC5zaCBjcmVhdGVzIHRoZSBBdXRvIE1vZGUgY2x1c3RlciAoZWtzY3RsKSwgYXBwbGllcyB0aGUgbWFuaWZlc3RzIChrdWJlY3RsLFxuICAvLyByZW5kZXJlZCB0aHJvdWdoIGVudnN1YnN0KSwgYW5kIGdlbmVyYXRlcyB0aGUgcmVnaXN0cnkgdG9rZW4tc2lnbmluZyBrZXlwYWlyIG9uIHRoZVxuICAvLyBob3N0IChvcGVuc3NsKSBiZWZvcmUgY3JlYXRpbmcgdGhlIGs4cyBzZWNyZXQuIGVjMiBib290c3RyYXBzIGl0cyBzZWNyZXRzIG9uIHRoZVxuICAvLyBpbnN0YW5jZSwgc28gaXQgbmVlZHMgbm9uZSBvZiB0aGVzZS5cbiAgaWYgKHRhcmdldCA9PT0gJ2VrcycpIHtcbiAgICAvLyBla3NjdGwgY2FuIHJ1biBmcm9tIFBBVEggT1IgdmlhIHRoZSBvZmZpY2lhbCBpbWFnZSDigJQgc2V0dXAuc2ggZmFsbHMgYmFjayB0b1xuICAgIC8vIGBkb2NrZXIgcnVuIHB1YmxpYy5lY3IuYXdzL2Vrc2N0bC9la3NjdGxgIHdoZW4gdGhlIGJpbmFyeSBpcyBhYnNlbnQsIHNvIGEgaG9zdFxuICAgIC8vIHdpdGggRG9ja2VyICsgQVdTIGNyZWRzIGlzIHN1ZmZpY2llbnQuXG4gICAgY29uc3QgZWtzY3RsT25QYXRoID0gaGFzKCdla3NjdGwnKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnZWtzY3RsJywgZWtzY3RsT25QYXRoIHx8IGRvY2tlclJ1bm5pbmcoKSxcbiAgICAgIGVrc2N0bE9uUGF0aCA/ICdvbiBQQVRIJyA6ICd2aWEgRG9ja2VyIGltYWdlIHB1YmxpYy5lY3IuYXdzL2Vrc2N0bC9la3NjdGwgKGJpbmFyeSBub3QgZm91bmQpJyxcbiAgICAgICdpbnN0YWxsIGVrc2N0bCwgb3IgaW5zdGFsbCArIHN0YXJ0IERvY2tlciAoc2V0dXAuc2ggd2lsbCBydW4gcHVibGljLmVjci5hd3MvZWtzY3RsL2Vrc2N0bCknKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2t1YmVjdGwnLCBoYXMoJ2t1YmVjdGwnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBrdWJlY3RsIOKAlCBhcHBsaWVzIHRoZSBtYW5pZmVzdHMgdG8gdGhlIGNsdXN0ZXInKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ29wZW5zc2wnLCBoYXMoJ29wZW5zc2wnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBvcGVuc3NsIOKAlCBzZXR1cC5zaCBnZW5lcmF0ZXMgdGhlIHJlZ2lzdHJ5IHRva2VuIGtleXBhaXInKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2VudnN1YnN0JywgaGFzKCdlbnZzdWJzdCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIGdldHRleHQgKG1hY09TOiBgYnJldyBpbnN0YWxsIGdldHRleHRgKSDigJQgc2V0dXAuc2ggcmVuZGVycyBjbHVzdGVyLnlhbWwgKyBtYW5pZmVzdHMgd2l0aCBlbnZzdWJzdCcpKTtcbiAgICAvLyBMaWtlIG1pbmlrdWJlLCAtLXdpdGgtcGx1Z2lucyBidWlsZHMgcGx1Z2luIGltYWdlcyBvbiB0aGUgaG9zdCwgd2hpY2ggbmVlZHMgeXEuXG4gICAgaWYgKG9wdHMud2l0aFBsdWdpbnMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKGNoZWNrKCd5cScsIGhhcygneXEnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCB5cSAobWFjT1M6IGBicmV3IGluc3RhbGwgeXFgKSDigJQgcmVxdWlyZWQgdG8gYnVpbGQgcGx1Z2lucycpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoZWNrcztcbn1cblxuLyoqIFRydWUgd2hlbiBldmVyeSBSRVFVSVJFRCBwcmVyZXF1aXNpdGUgcGFzc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXJlcXNTYXRpc2ZpZWQoY2hlY2tzOiByZWFkb25seSBQcmVyZXFDaGVja1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja3MuZXZlcnkoKGMpID0+IGMub2sgfHwgIWMucmVxdWlyZWQpO1xufVxuIl19
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVxcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wcmVyZXFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBV3pDLGdDQUFnQztBQUNoQyxTQUFTLEdBQUcsQ0FBQyxHQUFXO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQVMsSUFBSSxDQUFDLEdBQVc7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsMkNBQTJDLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckYsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxTQUFTLHNCQUFzQjtJQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRSxD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RSxpRUFBaUUsQ0FBQyxDQUFDLENBQUM7UUFDNUgsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxTQUFTLEVBQUUsMkdBQTJHLENBQUMsQ0FBQyxDQUFDO1FBQ3hLLGtGQUFrRjtRQUNsRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxtRUFBbUUsQ0FBQyxDQUFDLENBQUM7UUFDdEgsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsb0RBQW9EO0FBQ3BELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUE4QjtJQUM3RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIERldGVybWluaXN0aWMsIFJFQUQtT05MWSBwcmVyZXF1aXNpdGUgY2hlY2tzIHBlciB0YXJnZXQuIE5vIExMTSwgbm8gbXV0YXRpb24g4oCUXG4gKiBldmVyeSBjb21tYW5kIGhlcmUgb25seSBpbnNwZWN0cyAocHJlc2VuY2UgY2hlY2tzLCBgYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5YCxcbiAqIGBkb2NrZXIgaW5mb2ApLiBUaGlzIGlzIHRoZSBraW5kIG9mIHRoaW5nIGEgc2NyaXB0IGRvZXMgYmV0dGVyIHRoYW4gYW4gYWdlbnQsXG4gKiBzbyBpdCBzdGF5cyBkZXRlcm1pbmlzdGljOyB0aGUgTExNIGlzIHJlc2VydmVkIGZvciBOTCBwYXJzaW5nICsgZGlhZ25vc2lzLlxuICovXG5cbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgdHlwZSB7IFRhcmdldElkIH0gZnJvbSAnLi90YXJnZXRzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcmVyZXFDaGVjayB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgb2s6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRldGFpbDogc3RyaW5nO1xuICAvKiogQSBmYWlsaW5nIHJlcXVpcmVkIGNoZWNrIGJsb2NrcyBkZXBsb3ltZW50OyBhZHZpc29yeSBvbmVzIGFyZSB3YXJuaW5ncy4gKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWQ6IGJvb2xlYW47XG59XG5cbi8qKiBUcnVlIGlmIGBjbWRgIGlzIG9uIFBBVEguICovXG5mdW5jdGlvbiBoYXMoY21kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBleGVjU3luYyhgY29tbWFuZCAtdiAke2NtZH1gLCB7IHN0ZGlvOiAnaWdub3JlJywgdGltZW91dDogNTAwMCB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKiBSdW4gYSByZWFkLW9ubHkgY29tbWFuZDsgcmV0dXJuIGl0cyB0cmltbWVkIHN0ZG91dCBvciBudWxsIG9uIGZhaWx1cmUuICovXG5mdW5jdGlvbiByZWFkKGNtZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGV4ZWNTeW5jKGNtZCwgeyBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdpZ25vcmUnXSwgdGltZW91dDogMTUwMDAgfSkudG9TdHJpbmcoKS50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRvY2tlclJ1bm5pbmcoKTogYm9vbGVhbiB7XG4gIHJldHVybiBoYXMoJ2RvY2tlcicpICYmIHJlYWQoJ2RvY2tlciBpbmZvIC0tZm9ybWF0IFwie3suU2VydmVyVmVyc2lvbn19XCInKSAhPT0gbnVsbDtcbn1cblxuLyoqIERvY2tlciBDb21wb3NlIHYyIChgZG9ja2VyIGNvbXBvc2VgKSBvciBsZWdhY3kgdjEgKGBkb2NrZXItY29tcG9zZWApIOKAlCBzZXR1cC5zaCBuZWVkcyBvbmUuICovXG5mdW5jdGlvbiBkb2NrZXJDb21wb3NlQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVhZCgnZG9ja2VyIGNvbXBvc2UgdmVyc2lvbicpICE9PSBudWxsIHx8IGhhcygnZG9ja2VyLWNvbXBvc2UnKTtcbn1cblxuZnVuY3Rpb24gYXdzSWRlbnRpdHkoKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghaGFzKCdhd3MnKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiByZWFkKCdhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHkgLS1xdWVyeSBBY2NvdW50IC0tb3V0cHV0IHRleHQnKTtcbn1cblxuLyoqIFBhcnNlZCBgZ2l0IC0tdmVyc2lvbmAgYXMgW21ham9yLCBtaW5vcl0sIG9yIG51bGwgaWYgZ2l0IGlzIGFic2VudC91bnBhcnNlYWJsZS4gKi9cbmZ1bmN0aW9uIGdpdFZlcnNpb24oKTogW251bWJlciwgbnVtYmVyXSB8IG51bGwge1xuICBjb25zdCBvdXQgPSByZWFkKCdnaXQgLS12ZXJzaW9uJyk7XG4gIGNvbnN0IG0gPSBvdXQ/Lm1hdGNoKC8oXFxkKylcXC4oXFxkKykvKTtcbiAgcmV0dXJuIG0gPyBbTnVtYmVyKG1bMV0pLCBOdW1iZXIobVsyXSldIDogbnVsbDtcbn1cblxuLyoqIFRydWUgd2hlbiBnaXQgaXMgb24gUEFUSCAocmVxdWlyZWQgdG8gYm9vdHN0cmFwIGEgY2xvbmUgYXQgYWxsKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnaXRBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiBnaXRWZXJzaW9uKCkgIT09IG51bGw7XG59XG5cbi8qKlxuICogQ29uZSBgc3BhcnNlLWNoZWNrb3V0YCAoKyBgLS1maWx0ZXI9YmxvYjpub25lYCkgbmVlZHMgZ2l0IOKJpSAyLjI3LiBCZWxvdyB0aGF0LFxuICogdGhlIGJvb3RzdHJhcCBmYWxscyBiYWNrIHRvIGEgKGNvcnJlY3QsIGp1c3QgbGFyZ2VyKSBmdWxsIGNsb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpOiBib29sZWFuIHtcbiAgY29uc3QgdiA9IGdpdFZlcnNpb24oKTtcbiAgcmV0dXJuIHYgIT09IG51bGwgJiYgKHZbMF0gPiAyIHx8ICh2WzBdID09PSAyICYmIHZbMV0gPj0gMjcpKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFByZXJlcUNoZWNrIGZyb20gYSBTSU5HTEUgcHJlc2VuY2UgZXZhbHVhdGlvbi4gQ29sbGFwc2VzIHRoZSByZXBlYXRlZFxuICogYHsgb2s6IHByb2JlKCksIGRldGFpbDogcHJvYmUoKSA/IGEgOiBiIH1gIHNoYXBlIOKAlCB3aGljaCBhbHNvIGNhbGxlZCB0aGUgcHJvYmVcbiAqIHR3aWNlIOKAlCBpbnRvIG9uZSBwbGFjZTsgdGhlIGNhbGxlciBldmFsdWF0ZXMgdGhlIHByb2JlIG9uY2UgYW5kIHBhc3NlcyB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBjaGVjayhuYW1lOiBzdHJpbmcsIHByZXNlbnQ6IGJvb2xlYW4sIHByZXNlbnREZXRhaWw6IHN0cmluZywgbWlzc2luZ0RldGFpbDogc3RyaW5nLCByZXF1aXJlZCA9IHRydWUpOiBQcmVyZXFDaGVjayB7XG4gIHJldHVybiB7IG5hbWUsIG9rOiBwcmVzZW50LCBkZXRhaWw6IHByZXNlbnQgPyBwcmVzZW50RGV0YWlsIDogbWlzc2luZ0RldGFpbCwgcmVxdWlyZWQgfTtcbn1cblxuLyoqXG4gKiBSdW4gdGhlIHJlYWQtb25seSBwcmVyZXF1aXNpdGUgY2hlY2tzIGZvciBhIHRhcmdldC4gUHVyZSBpbnNwZWN0aW9uIOKAlCBzYWZlIHRvXG4gKiBydW4gdW5jb25kaXRpb25hbGx5ICh0aGUgcGxhbiBhc3NlbWJsZXMgdGhpcyBiZWZvcmUgdGhlIGdhdGVkIGV4ZWN1dGlvbikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1ByZXJlcXModGFyZ2V0OiBUYXJnZXRJZCwgb3B0czogeyBib290c3RyYXA/OiBib29sZWFuOyB3aXRoUGx1Z2lucz86IGJvb2xlYW4gfSA9IHt9KTogUHJlcmVxQ2hlY2tbXSB7XG4gIGNvbnN0IGNoZWNrczogUHJlcmVxQ2hlY2tbXSA9IFtdO1xuICAvLyBzZXR1cC5zaCAobG9jYWwpICsgc2V0dXAuc2ggKG1pbmlrdWJlKSBib3RoIGdlbmVyYXRlIHRoZSBUTFMgY2VydCArIHJlZ2lzdHJ5IEpXVCBrZXkgd2l0aCBvcGVuc3NsLlxuICBjb25zdCBPUEVOU1NMX1RMUyA9ICdpbnN0YWxsIG9wZW5zc2wg4oCUIHNldHVwLnNoIGdlbmVyYXRlcyB0aGUgVExTIGNlcnQgKyByZWdpc3RyeSBKV1Qga2V5IHdpdGggaXQnO1xuXG4gIC8vIGAtLXJlcG9gIGJvb3RzdHJhcCBnaXQtY2xvbmVzIHRoZSBwbGF0Zm9ybSByZXBvIGZpcnN0IOKGkiBnaXQgaXMgcmVxdWlyZWQuIEFcbiAgLy8gZ2l0IGJlbG93IDIuMjcgc3RpbGwgd29ya3MgKGZ1bGwtY2xvbmUgZmFsbGJhY2spLCBzbyB0aGUgdmVyc2lvbiBpcyBhZHZpc29yeS5cbiAgaWYgKG9wdHMuYm9vdHN0cmFwKSB7XG4gICAgY29uc3QgdiA9IGdpdFZlcnNpb24oKTtcbiAgICBjaGVja3MucHVzaCh7IG5hbWU6ICdnaXQnLCBvazogdiAhPT0gbnVsbCwgZGV0YWlsOiB2ID8gYG9uIFBBVEggKCR7dlswXX0uJHt2WzFdfSlgIDogJ2luc3RhbGwgZ2l0JywgcmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgaWYgKHYgIT09IG51bGwgJiYgIWdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKSkge1xuICAgICAgY2hlY2tzLnB1c2goeyBuYW1lOiAnZ2l0IOKJpSAyLjI3Jywgb2s6IGZhbHNlLCBkZXRhaWw6ICdzcGFyc2UgY2xvbmUgbmVlZHMgZ2l0IOKJpSAyLjI3IOKAlCBmYWxsaW5nIGJhY2sgdG8gYSBmdWxsIGNsb25lJywgcmVxdWlyZWQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0YXJnZXQgPT09ICdsb2NhbCcpIHtcbiAgICAvLyBkZXBsb3kvbG9jYWwvZG9ja2VyL2Jpbi9zZXR1cC5zaCBoYXJkLWNoZWNrcyBhbGwgb2YgdGhlc2UgYXQgc3RhcnR1cCBhbmQgYWJvcnRzIGlmXG4gICAgLy8gYW55IGlzIG1pc3Npbmcg4oCUIG1pcnJvciB0aGVtIGhlcmUgc28gcHJvdmlzaW9uIGJsb2NrcyB1cCBmcm9udCBpbnN0ZWFkIG9mXG4gICAgLy8gZmFpbGluZyBtaWQtZGVwbG95IChlLmcuIHRoZSBjbGFzc2ljIFwieXEgaXMgbm90IGluc3RhbGxlZFwiKS5cbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyJywgZG9ja2VyUnVubmluZygpLCAnZGFlbW9uIHJlYWNoYWJsZScsICdpbnN0YWxsIERvY2tlciBhbmQgc3RhcnQgdGhlIGRhZW1vbicpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyIENvbXBvc2UnLCBkb2NrZXJDb21wb3NlQXZhaWxhYmxlKCksICdhdmFpbGFibGUnLCAnbmVlZHMgYGRvY2tlciBjb21wb3NlYCAodjIgcGx1Z2luKSBvciBgZG9ja2VyLWNvbXBvc2VgICh2MSknKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ3lxJywgaGFzKCd5cScpLCAnb24gUEFUSCcsICdpbnN0YWxsIHlxIChtYWNPUzogYGJyZXcgaW5zdGFsbCB5cWApIOKAlCBzZXR1cC5zaCByZXF1aXJlcyBpdCcpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnb3BlbnNzbCcsIGhhcygnb3BlbnNzbCcpLCAnb24gUEFUSCcsIE9QRU5TU0xfVExTKSk7XG4gICAgcmV0dXJuIGNoZWNrcztcbiAgfVxuXG4gIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHtcbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyJywgZG9ja2VyUnVubmluZygpLCAnZGFlbW9uIHJlYWNoYWJsZScsICdpbnN0YWxsIERvY2tlciBhbmQgc3RhcnQgdGhlIGRhZW1vbicpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnbWluaWt1YmUnLCBoYXMoJ21pbmlrdWJlJyksICdvbiBQQVRIJywgJ2luc3RhbGwgbWluaWt1YmUnKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2t1YmVjdGwnLCBoYXMoJ2t1YmVjdGwnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBrdWJlY3RsJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgT1BFTlNTTF9UTFMpKTtcbiAgICAvLyBtaW5pa3ViZSdzIHNldHVwLnNoIGRvZXNuJ3QgbmVlZCB5cSwgYnV0IC0td2l0aC1wbHVnaW5zIGJ1aWxkcyBpbWFnZXNcbiAgICAvLyAoYnVpbGQtcGx1Z2luLWltYWdlcy5zaCAvIGdlbmVyYXRlLXBsdWdpbnMuc2gpIHdoaWNoIGRvLlxuICAgIGlmIChvcHRzLndpdGhQbHVnaW5zKSB7XG4gICAgICBjaGVja3MucHVzaChjaGVjaygneXEnLCBoYXMoJ3lxJyksICdvbiBQQVRIJywgJ2luc3RhbGwgeXEgKG1hY09TOiBgYnJldyBpbnN0YWxsIHlxYCkg4oCUIHJlcXVpcmVkIHRvIGJ1aWxkIHBsdWdpbnMnKSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja3M7XG4gIH1cblxuICAvLyBlYzIgKyBla3Mg4oCUIGJvdGggZGVwbG95IHRvIEFXUyB2aWEgdGhlIENMSSwgc28gYm90aCBuZWVkIHRoZSBBV1MgQ0xJICsgd29ya2luZyBjcmVkcy5cbiAgY29uc3QgYWNjb3VudCA9IGF3c0lkZW50aXR5KCk7XG4gIGNoZWNrcy5wdXNoKGNoZWNrKCdBV1MgQ0xJJywgaGFzKCdhd3MnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCB0aGUgQVdTIENMSSB2MicpKTtcbiAgY2hlY2tzLnB1c2goeyBuYW1lOiAnQVdTIGNyZWRlbnRpYWxzJywgb2s6IGFjY291bnQgIT09IG51bGwsIGRldGFpbDogYWNjb3VudCA/IGBhdXRoZW50aWNhdGVkIChhY2NvdW50ICR7YWNjb3VudH0pYCA6ICdydW4gYGF3cyBjb25maWd1cmVgIC8gc2V0IEFXU19QUk9GSUxFJywgcmVxdWlyZWQ6IHRydWUgfSk7XG4gIC8vIGVrczogc2V0dXAuc2ggY3JlYXRlcyB0aGUgQXV0byBNb2RlIGNsdXN0ZXIgKGVrc2N0bCksIGFwcGxpZXMgdGhlIG1hbmlmZXN0cyAoa3ViZWN0bCxcbiAgLy8gcmVuZGVyZWQgdGhyb3VnaCBlbnZzdWJzdCksIGFuZCBnZW5lcmF0ZXMgdGhlIHJlZ2lzdHJ5IHRva2VuLXNpZ25pbmcga2V5cGFpciBvbiB0aGVcbiAgLy8gaG9zdCAob3BlbnNzbCkgYmVmb3JlIGNyZWF0aW5nIHRoZSBrOHMgc2VjcmV0LiBlYzIgYm9vdHN0cmFwcyBpdHMgc2VjcmV0cyBvbiB0aGVcbiAgLy8gaW5zdGFuY2UsIHNvIGl0IG5lZWRzIG5vbmUgb2YgdGhlc2UuXG4gIGlmICh0YXJnZXQgPT09ICdla3MnKSB7XG4gICAgLy8gZWtzY3RsOiBzZXR1cC5zaCBpbnN0YWxscyB0aGUgbGF0ZXN0IGJpbmFyeSBhdXRvbWF0aWNhbGx5IHdoZW4gaXQncyBub3Qgb24gUEFUSFxuICAgIC8vIChkb3dubG9hZGVkIGZyb20gdGhlIGVrc2N0bC1pbyBHaXRIdWIgcmVsZWFzZSB2aWEgY3VybCksIHNvIGl0IGlzbid0IGEgaGFyZCBwcmVyZXEg4oCUXG4gICAgLy8gd2UganVzdCBjb25maXJtIGN1cmwgaXMgYXZhaWxhYmxlIHRvIGZldGNoIGl0LlxuICAgIGNvbnN0IGVrc2N0bE9uUGF0aCA9IGhhcygnZWtzY3RsJyk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2Vrc2N0bCcsIGVrc2N0bE9uUGF0aCB8fCBoYXMoJ2N1cmwnKSxcbiAgICAgIGVrc2N0bE9uUGF0aCA/ICdvbiBQQVRIJyA6ICdzZXR1cC5zaCB3aWxsIGluc3RhbGwgdGhlIGJpbmFyeSAodmlhIGN1cmwpJyxcbiAgICAgICdpbnN0YWxsIGVrc2N0bCwgb3IgZW5zdXJlIGN1cmwgaXMgYXZhaWxhYmxlIChzZXR1cC5zaCBkb3dubG9hZHMgdGhlIGVrc2N0bCBiaW5hcnkpJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdrdWJlY3RsJywgaGFzKCdrdWJlY3RsJyksICdvbiBQQVRIJywgJ2luc3RhbGwga3ViZWN0bCDigJQgYXBwbGllcyB0aGUgbWFuaWZlc3RzIHRvIHRoZSBjbHVzdGVyJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgJ2luc3RhbGwgb3BlbnNzbCDigJQgc2V0dXAuc2ggZ2VuZXJhdGVzIHRoZSByZWdpc3RyeSB0b2tlbiBrZXlwYWlyJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdlbnZzdWJzdCcsIGhhcygnZW52c3Vic3QnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBnZXR0ZXh0IChtYWNPUzogYGJyZXcgaW5zdGFsbCBnZXR0ZXh0YCkg4oCUIHNldHVwLnNoIHJlbmRlcnMgY2x1c3Rlci55YW1sICsgbWFuaWZlc3RzIHdpdGggZW52c3Vic3QnKSk7XG4gICAgLy8gTGlrZSBtaW5pa3ViZSwgLS13aXRoLXBsdWdpbnMgYnVpbGRzIHBsdWdpbiBpbWFnZXMgb24gdGhlIGhvc3QsIHdoaWNoIG5lZWRzIHlxLlxuICAgIGlmIChvcHRzLndpdGhQbHVnaW5zKSB7XG4gICAgICBjaGVja3MucHVzaChjaGVjaygneXEnLCBoYXMoJ3lxJyksICdvbiBQQVRIJywgJ2luc3RhbGwgeXEgKG1hY09TOiBgYnJldyBpbnN0YWxsIHlxYCkg4oCUIHJlcXVpcmVkIHRvIGJ1aWxkIHBsdWdpbnMnKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGVja3M7XG59XG5cbi8qKiBUcnVlIHdoZW4gZXZlcnkgUkVRVUlSRUQgcHJlcmVxdWlzaXRlIHBhc3NlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVyZXFzU2F0aXNmaWVkKGNoZWNrczogcmVhZG9ubHkgUHJlcmVxQ2hlY2tbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2hlY2tzLmV2ZXJ5KChjKSA9PiBjLm9rIHx8ICFjLnJlcXVpcmVkKTtcbn1cbiJdfQ==
|