@pipeline-builder/pipeline-manager 3.4.105 → 3.4.107

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.
@@ -38,26 +38,6 @@ function awsIdentity() {
38
38
  return null;
39
39
  return read('aws sts get-caller-identity --query Account --output text');
40
40
  }
41
- /**
42
- * State of the ECS service-linked role (`AWSServiceRoleForECS`). ECS auto-creates it on the
43
- * first `CreateCluster`, but that first attempt RACES and fails ("Unable to assume the service
44
- * linked role"); the role then exists and a re-run succeeds. Pre-creating it avoids the failed
45
- * first stack. Returns `unknown` when we can't tell (no `aws`, no creds, or no `iam:GetRole`) —
46
- * so the caller never asserts "missing" on an AccessDenied, only on a real NoSuchEntity.
47
- */
48
- function ecsLinkedRoleState() {
49
- if (!has('aws'))
50
- return 'unknown';
51
- try {
52
- // stderr piped so the throw carries the AWS error; stdout ignored.
53
- execSync('aws iam get-role --role-name AWSServiceRoleForECS', { stdio: ['ignore', 'ignore', 'pipe'], timeout: 15000 });
54
- return 'present';
55
- }
56
- catch (e) {
57
- const stderr = String(e.stderr ?? '');
58
- return /NoSuchEntity|cannot be found/i.test(stderr) ? 'absent' : 'unknown';
59
- }
60
- }
61
41
  /** Parsed `git --version` as [major, minor], or null if git is absent/unparseable. */
62
42
  function gitVersion() {
63
43
  const out = read('git --version');
@@ -102,7 +82,7 @@ export function checkPrereqs(target, opts = {}) {
102
82
  }
103
83
  }
104
84
  if (target === 'local') {
105
- // deploy/local/bin/setup.sh hard-checks all of these at startup and aborts if
85
+ // deploy/local/docker/bin/setup.sh hard-checks all of these at startup and aborts if
106
86
  // any is missing — mirror them here so provision blocks up front instead of
107
87
  // failing mid-deploy (e.g. the classic "yq is not installed").
108
88
  checks.push(check('Docker', dockerRunning(), 'daemon reachable', 'install Docker and start the daemon'));
@@ -123,34 +103,26 @@ export function checkPrereqs(target, opts = {}) {
123
103
  }
124
104
  return checks;
125
105
  }
126
- // ec2 + fargate — both deploy via `aws cloudformation deploy`, so both need
127
- // the AWS CLI with working credentials (and nothing CDK/node-related). ec2's
128
- // instance self-bootstraps over UserData, so the CLI is its only host tool.
106
+ // ec2 + eks — both deploy to AWS via the CLI, so both need the AWS CLI + working creds.
129
107
  const account = awsIdentity();
130
108
  checks.push(check('AWS CLI', has('aws'), 'on PATH', 'install the AWS CLI v2'));
131
109
  checks.push({ name: 'AWS credentials', ok: account !== null, detail: account ? `authenticated (account ${account})` : 'run `aws configure` / set AWS_PROFILE', required: true });
132
- // fargate runs init-secrets.sh on the host to generate the platform secrets
133
- // (JWT/refresh secrets, DB passwords, the registry's RSA signing key) with
134
- // openssl before the first deploy. ec2 bootstraps its secrets on the instance.
135
- if (target === 'fargate') {
136
- checks.push(check('openssl', has('openssl'), 'on PATH', 'install openssl — init-secrets.sh needs it to generate platform secrets'));
137
- // ECS service-linked role: surface it as a heads-up (advisorythe deploy self-heals,
138
- // and the principal may lack iam:GetRole). Only checked when we have working creds, and
139
- // only asserted "missing" on a confirmed NoSuchEntity. ec2 doesn't use ECS, so fargate-only.
140
- if (account !== null) {
141
- const slr = ecsLinkedRoleState();
142
- if (slr === 'present') {
143
- checks.push({ name: 'ECS service-linked role', ok: true, detail: 'AWSServiceRoleForECS exists', required: false });
144
- }
145
- else if (slr === 'absent') {
146
- checks.push({
147
- name: 'ECS service-linked role',
148
- ok: false,
149
- required: false,
150
- detail: 'AWSServiceRoleForECS not found — the first ECS cluster create will create it, but that first attempt fails on the not-yet-ready role (the re-run then self-heals). To avoid the failed first stack, pre-create it: aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com',
151
- });
152
- }
153
- // 'unknown' (no iam:GetRole / transient) → no line, rather than a misleading one.
110
+ // eks: setup.sh creates the Auto Mode cluster (eksctl), applies the manifests (kubectl,
111
+ // rendered through envsubst), and generates the registry token-signing keypair on the
112
+ // host (openssl) before creating the k8s secret. ec2 bootstraps its secrets on the
113
+ // instance, so it needs none of these.
114
+ if (target === 'eks') {
115
+ // eksctl can run from PATH OR via the official image setup.sh falls back to
116
+ // `docker run public.ecr.aws/eksctl/eksctl` when the binary is absent, so a host
117
+ // with Docker + AWS creds is sufficient.
118
+ const eksctlOnPath = has('eksctl');
119
+ checks.push(check('eksctl', eksctlOnPath || dockerRunning(), eksctlOnPath ? 'on PATH' : 'via Docker image public.ecr.aws/eksctl/eksctl (binary not found)', 'install eksctl, or install + start Docker (setup.sh will run public.ecr.aws/eksctl/eksctl)'));
120
+ checks.push(check('kubectl', has('kubectl'), 'on PATH', 'install kubectl — applies the manifests to the cluster'));
121
+ checks.push(check('openssl', has('openssl'), 'on PATH', 'install openssl setup.sh generates the registry token keypair'));
122
+ checks.push(check('envsubst', has('envsubst'), 'on PATH', 'install gettext (macOS: `brew install gettext`) — setup.sh renders cluster.yaml + manifests with envsubst'));
123
+ // Like minikube, --with-plugins builds plugin images on the host, which needs yq.
124
+ if (opts.withPlugins) {
125
+ checks.push(check('yq', has('yq'), 'on PATH', 'install yq (macOS: `brew install yq`) — required to build plugins'));
154
126
  }
155
127
  }
156
128
  return checks;
@@ -159,4 +131,4 @@ export function checkPrereqs(target, opts = {}) {
159
131
  export function prereqsSatisfied(checks) {
160
132
  return checks.every((c) => c.ok || !c.required);
161
133
  }
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVxcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wcmVyZXFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBV3pDLGdDQUFnQztBQUNoQyxTQUFTLEdBQUcsQ0FBQyxHQUFXO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQVMsSUFBSSxDQUFDLEdBQVc7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsMkNBQTJDLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckYsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxTQUFTLHNCQUFzQjtJQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsU0FBUyxXQUFXO0lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDN0IsT0FBTyxJQUFJLENBQUMsMkRBQTJELENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxrQkFBa0I7SUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNsQyxJQUFJLENBQUM7UUFDSCxtRUFBbUU7UUFDbkUsUUFBUSxDQUFDLG1EQUFtRCxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2SCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztRQUNwQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUUsQ0FBa0MsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsT0FBTywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzdFLENBQUM7QUFDSCxDQUFDO0FBRUQsc0ZBQXNGO0FBQ3RGLFNBQVMsVUFBVTtJQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqRCxDQUFDO0FBRUQsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxZQUFZO0lBQzFCLE9BQU8sVUFBVSxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxLQUFLLENBQUMsSUFBWSxFQUFFLE9BQWdCLEVBQUUsYUFBcUIsRUFBRSxhQUFxQixFQUFFLFFBQVEsR0FBRyxJQUFJO0lBQzFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMxRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFnQixFQUFFLE9BQXVELEVBQUU7SUFDdEcsTUFBTSxNQUFNLEdBQWtCLEVBQUUsQ0FBQztJQUNqQyxxR0FBcUc7SUFDckcsTUFBTSxXQUFXLEdBQUcsOEVBQThFLENBQUM7SUFFbkcsNkVBQTZFO0lBQzdFLGdGQUFnRjtJQUNoRixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RILElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSw4REFBOEQsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxSSxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLDhFQUE4RTtRQUM5RSw0RUFBNEU7UUFDNUUsK0RBQStEO1FBQy9ELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDLENBQUM7UUFDekcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxXQUFXLEVBQUUsNkRBQTZELENBQUMsQ0FBQyxDQUFDO1FBQzNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLDhEQUE4RCxDQUFDLENBQUMsQ0FBQztRQUMvRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUscUNBQXFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUMvRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN0RSx3RUFBd0U7UUFDeEUsMkRBQTJEO1FBQzNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1FQUFtRSxDQUFDLENBQUMsQ0FBQztRQUN0SCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLE1BQU0sT0FBTyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUMvRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxPQUFPLEtBQUssSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakwsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSwrRUFBK0U7SUFDL0UsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxDQUFDO1FBQ3BJLHVGQUF1RjtRQUN2Rix3RkFBd0Y7UUFDeEYsNkZBQTZGO1FBQzdGLElBQUksT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JCLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixFQUFFLENBQUM7WUFDakMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsNkJBQTZCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDckgsQ0FBQztpQkFBTSxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixJQUFJLEVBQUUseUJBQXlCO29CQUMvQixFQUFFLEVBQUUsS0FBSztvQkFDVCxRQUFRLEVBQUUsS0FBSztvQkFDZixNQUFNLEVBQUUsNFJBQTRSO2lCQUNyUyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0Qsa0ZBQWtGO1FBQ3BGLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELG9EQUFvRDtBQUNwRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBOEI7SUFDN0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBEZXRlcm1pbmlzdGljLCBSRUFELU9OTFkgcHJlcmVxdWlzaXRlIGNoZWNrcyBwZXIgdGFyZ2V0LiBObyBMTE0sIG5vIG11dGF0aW9uIOKAlFxuICogZXZlcnkgY29tbWFuZCBoZXJlIG9ubHkgaW5zcGVjdHMgKHByZXNlbmNlIGNoZWNrcywgYGF3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eWAsXG4gKiBgZG9ja2VyIGluZm9gKS4gVGhpcyBpcyB0aGUga2luZCBvZiB0aGluZyBhIHNjcmlwdCBkb2VzIGJldHRlciB0aGFuIGFuIGFnZW50LFxuICogc28gaXQgc3RheXMgZGV0ZXJtaW5pc3RpYzsgdGhlIExMTSBpcyByZXNlcnZlZCBmb3IgTkwgcGFyc2luZyArIGRpYWdub3Npcy5cbiAqL1xuXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHR5cGUgeyBUYXJnZXRJZCB9IGZyb20gJy4vdGFyZ2V0cy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcmVxQ2hlY2sge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9rOiBib29sZWFuO1xuICByZWFkb25seSBkZXRhaWw6IHN0cmluZztcbiAgLyoqIEEgZmFpbGluZyByZXF1aXJlZCBjaGVjayBibG9ja3MgZGVwbG95bWVudDsgYWR2aXNvcnkgb25lcyBhcmUgd2FybmluZ3MuICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkOiBib29sZWFuO1xufVxuXG4vKiogVHJ1ZSBpZiBgY21kYCBpcyBvbiBQQVRILiAqL1xuZnVuY3Rpb24gaGFzKGNtZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgZXhlY1N5bmMoYGNvbW1hbmQgLXYgJHtjbWR9YCwgeyBzdGRpbzogJ2lnbm9yZScsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKiogUnVuIGEgcmVhZC1vbmx5IGNvbW1hbmQ7IHJldHVybiBpdHMgdHJpbW1lZCBzdGRvdXQgb3IgbnVsbCBvbiBmYWlsdXJlLiAqL1xuZnVuY3Rpb24gcmVhZChjbWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICB0cnkge1xuICAgIHJldHVybiBleGVjU3luYyhjbWQsIHsgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAnaWdub3JlJ10sIHRpbWVvdXQ6IDE1MDAwIH0pLnRvU3RyaW5nKCkudHJpbSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkb2NrZXJSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaGFzKCdkb2NrZXInKSAmJiByZWFkKCdkb2NrZXIgaW5mbyAtLWZvcm1hdCBcInt7LlNlcnZlclZlcnNpb259fVwiJykgIT09IG51bGw7XG59XG5cbi8qKiBEb2NrZXIgQ29tcG9zZSB2MiAoYGRvY2tlciBjb21wb3NlYCkgb3IgbGVnYWN5IHYxIChgZG9ja2VyLWNvbXBvc2VgKSDigJQgc2V0dXAuc2ggbmVlZHMgb25lLiAqL1xuZnVuY3Rpb24gZG9ja2VyQ29tcG9zZUF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlYWQoJ2RvY2tlciBjb21wb3NlIHZlcnNpb24nKSAhPT0gbnVsbCB8fCBoYXMoJ2RvY2tlci1jb21wb3NlJyk7XG59XG5cbmZ1bmN0aW9uIGF3c0lkZW50aXR5KCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWhhcygnYXdzJykpIHJldHVybiBudWxsO1xuICByZXR1cm4gcmVhZCgnYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5IC0tcXVlcnkgQWNjb3VudCAtLW91dHB1dCB0ZXh0Jyk7XG59XG5cbi8qKlxuICogU3RhdGUgb2YgdGhlIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlIChgQVdTU2VydmljZVJvbGVGb3JFQ1NgKS4gRUNTIGF1dG8tY3JlYXRlcyBpdCBvbiB0aGVcbiAqIGZpcnN0IGBDcmVhdGVDbHVzdGVyYCwgYnV0IHRoYXQgZmlyc3QgYXR0ZW1wdCBSQUNFUyBhbmQgZmFpbHMgKFwiVW5hYmxlIHRvIGFzc3VtZSB0aGUgc2VydmljZVxuICogbGlua2VkIHJvbGVcIik7IHRoZSByb2xlIHRoZW4gZXhpc3RzIGFuZCBhIHJlLXJ1biBzdWNjZWVkcy4gUHJlLWNyZWF0aW5nIGl0IGF2b2lkcyB0aGUgZmFpbGVkXG4gKiBmaXJzdCBzdGFjay4gUmV0dXJucyBgdW5rbm93bmAgd2hlbiB3ZSBjYW4ndCB0ZWxsIChubyBgYXdzYCwgbm8gY3JlZHMsIG9yIG5vIGBpYW06R2V0Um9sZWApIOKAlFxuICogc28gdGhlIGNhbGxlciBuZXZlciBhc3NlcnRzIFwibWlzc2luZ1wiIG9uIGFuIEFjY2Vzc0RlbmllZCwgb25seSBvbiBhIHJlYWwgTm9TdWNoRW50aXR5LlxuICovXG5mdW5jdGlvbiBlY3NMaW5rZWRSb2xlU3RhdGUoKTogJ3ByZXNlbnQnIHwgJ2Fic2VudCcgfCAndW5rbm93bicge1xuICBpZiAoIWhhcygnYXdzJykpIHJldHVybiAndW5rbm93bic7XG4gIHRyeSB7XG4gICAgLy8gc3RkZXJyIHBpcGVkIHNvIHRoZSB0aHJvdyBjYXJyaWVzIHRoZSBBV1MgZXJyb3I7IHN0ZG91dCBpZ25vcmVkLlxuICAgIGV4ZWNTeW5jKCdhd3MgaWFtIGdldC1yb2xlIC0tcm9sZS1uYW1lIEFXU1NlcnZpY2VSb2xlRm9yRUNTJywgeyBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ3BpcGUnXSwgdGltZW91dDogMTUwMDAgfSk7XG4gICAgcmV0dXJuICdwcmVzZW50JztcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIGNvbnN0IHN0ZGVyciA9IFN0cmluZygoZSBhcyB7IHN0ZGVycj86IEJ1ZmZlciB8IHN0cmluZyB9KS5zdGRlcnIgPz8gJycpO1xuICAgIHJldHVybiAvTm9TdWNoRW50aXR5fGNhbm5vdCBiZSBmb3VuZC9pLnRlc3Qoc3RkZXJyKSA/ICdhYnNlbnQnIDogJ3Vua25vd24nO1xuICB9XG59XG5cbi8qKiBQYXJzZWQgYGdpdCAtLXZlcnNpb25gIGFzIFttYWpvciwgbWlub3JdLCBvciBudWxsIGlmIGdpdCBpcyBhYnNlbnQvdW5wYXJzZWFibGUuICovXG5mdW5jdGlvbiBnaXRWZXJzaW9uKCk6IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgY29uc3Qgb3V0ID0gcmVhZCgnZ2l0IC0tdmVyc2lvbicpO1xuICBjb25zdCBtID0gb3V0Py5tYXRjaCgvKFxcZCspXFwuKFxcZCspLyk7XG4gIHJldHVybiBtID8gW051bWJlcihtWzFdKSwgTnVtYmVyKG1bMl0pXSA6IG51bGw7XG59XG5cbi8qKiBUcnVlIHdoZW4gZ2l0IGlzIG9uIFBBVEggKHJlcXVpcmVkIHRvIGJvb3RzdHJhcCBhIGNsb25lIGF0IGFsbCkuICovXG5leHBvcnQgZnVuY3Rpb24gZ2l0QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2l0VmVyc2lvbigpICE9PSBudWxsO1xufVxuXG4vKipcbiAqIENvbmUgYHNwYXJzZS1jaGVja291dGAgKCsgYC0tZmlsdGVyPWJsb2I6bm9uZWApIG5lZWRzIGdpdCDiiaUgMi4yNy4gQmVsb3cgdGhhdCxcbiAqIHRoZSBib290c3RyYXAgZmFsbHMgYmFjayB0byBhIChjb3JyZWN0LCBqdXN0IGxhcmdlcikgZnVsbCBjbG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IHYgPSBnaXRWZXJzaW9uKCk7XG4gIHJldHVybiB2ICE9PSBudWxsICYmICh2WzBdID4gMiB8fCAodlswXSA9PT0gMiAmJiB2WzFdID49IDI3KSk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBQcmVyZXFDaGVjayBmcm9tIGEgU0lOR0xFIHByZXNlbmNlIGV2YWx1YXRpb24uIENvbGxhcHNlcyB0aGUgcmVwZWF0ZWRcbiAqIGB7IG9rOiBwcm9iZSgpLCBkZXRhaWw6IHByb2JlKCkgPyBhIDogYiB9YCBzaGFwZSDigJQgd2hpY2ggYWxzbyBjYWxsZWQgdGhlIHByb2JlXG4gKiB0d2ljZSDigJQgaW50byBvbmUgcGxhY2U7IHRoZSBjYWxsZXIgZXZhbHVhdGVzIHRoZSBwcm9iZSBvbmNlIGFuZCBwYXNzZXMgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gY2hlY2sobmFtZTogc3RyaW5nLCBwcmVzZW50OiBib29sZWFuLCBwcmVzZW50RGV0YWlsOiBzdHJpbmcsIG1pc3NpbmdEZXRhaWw6IHN0cmluZywgcmVxdWlyZWQgPSB0cnVlKTogUHJlcmVxQ2hlY2sge1xuICByZXR1cm4geyBuYW1lLCBvazogcHJlc2VudCwgZGV0YWlsOiBwcmVzZW50ID8gcHJlc2VudERldGFpbCA6IG1pc3NpbmdEZXRhaWwsIHJlcXVpcmVkIH07XG59XG5cbi8qKlxuICogUnVuIHRoZSByZWFkLW9ubHkgcHJlcmVxdWlzaXRlIGNoZWNrcyBmb3IgYSB0YXJnZXQuIFB1cmUgaW5zcGVjdGlvbiDigJQgc2FmZSB0b1xuICogcnVuIHVuY29uZGl0aW9uYWxseSAodGhlIHBsYW4gYXNzZW1ibGVzIHRoaXMgYmVmb3JlIHRoZSBnYXRlZCBleGVjdXRpb24pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcmVyZXFzKHRhcmdldDogVGFyZ2V0SWQsIG9wdHM6IHsgYm9vdHN0cmFwPzogYm9vbGVhbjsgd2l0aFBsdWdpbnM/OiBib29sZWFuIH0gPSB7fSk6IFByZXJlcUNoZWNrW10ge1xuICBjb25zdCBjaGVja3M6IFByZXJlcUNoZWNrW10gPSBbXTtcbiAgLy8gc2V0dXAuc2ggKGxvY2FsKSArIHNldHVwLnNoIChtaW5pa3ViZSkgYm90aCBnZW5lcmF0ZSB0aGUgVExTIGNlcnQgKyByZWdpc3RyeSBKV1Qga2V5IHdpdGggb3BlbnNzbC5cbiAgY29uc3QgT1BFTlNTTF9UTFMgPSAnaW5zdGFsbCBvcGVuc3NsIOKAlCBzZXR1cC5zaCBnZW5lcmF0ZXMgdGhlIFRMUyBjZXJ0ICsgcmVnaXN0cnkgSldUIGtleSB3aXRoIGl0JztcblxuICAvLyBgLS1yZXBvYCBib290c3RyYXAgZ2l0LWNsb25lcyB0aGUgcGxhdGZvcm0gcmVwbyBmaXJzdCDihpIgZ2l0IGlzIHJlcXVpcmVkLiBBXG4gIC8vIGdpdCBiZWxvdyAyLjI3IHN0aWxsIHdvcmtzIChmdWxsLWNsb25lIGZhbGxiYWNrKSwgc28gdGhlIHZlcnNpb24gaXMgYWR2aXNvcnkuXG4gIGlmIChvcHRzLmJvb3RzdHJhcCkge1xuICAgIGNvbnN0IHYgPSBnaXRWZXJzaW9uKCk7XG4gICAgY2hlY2tzLnB1c2goeyBuYW1lOiAnZ2l0Jywgb2s6IHYgIT09IG51bGwsIGRldGFpbDogdiA/IGBvbiBQQVRIICgke3ZbMF19LiR7dlsxXX0pYCA6ICdpbnN0YWxsIGdpdCcsIHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgIGlmICh2ICE9PSBudWxsICYmICFnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCkpIHtcbiAgICAgIGNoZWNrcy5wdXNoKHsgbmFtZTogJ2dpdCDiiaUgMi4yNycsIG9rOiBmYWxzZSwgZGV0YWlsOiAnc3BhcnNlIGNsb25lIG5lZWRzIGdpdCDiiaUgMi4yNyDigJQgZmFsbGluZyBiYWNrIHRvIGEgZnVsbCBjbG9uZScsIHJlcXVpcmVkOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFyZ2V0ID09PSAnbG9jYWwnKSB7XG4gICAgLy8gZGVwbG95L2xvY2FsL2Jpbi9zZXR1cC5zaCBoYXJkLWNoZWNrcyBhbGwgb2YgdGhlc2UgYXQgc3RhcnR1cCBhbmQgYWJvcnRzIGlmXG4gICAgLy8gYW55IGlzIG1pc3Npbmcg4oCUIG1pcnJvciB0aGVtIGhlcmUgc28gcHJvdmlzaW9uIGJsb2NrcyB1cCBmcm9udCBpbnN0ZWFkIG9mXG4gICAgLy8gZmFpbGluZyBtaWQtZGVwbG95IChlLmcuIHRoZSBjbGFzc2ljIFwieXEgaXMgbm90IGluc3RhbGxlZFwiKS5cbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyJywgZG9ja2VyUnVubmluZygpLCAnZGFlbW9uIHJlYWNoYWJsZScsICdpbnN0YWxsIERvY2tlciBhbmQgc3RhcnQgdGhlIGRhZW1vbicpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyIENvbXBvc2UnLCBkb2NrZXJDb21wb3NlQXZhaWxhYmxlKCksICdhdmFpbGFibGUnLCAnbmVlZHMgYGRvY2tlciBjb21wb3NlYCAodjIgcGx1Z2luKSBvciBgZG9ja2VyLWNvbXBvc2VgICh2MSknKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ3lxJywgaGFzKCd5cScpLCAnb24gUEFUSCcsICdpbnN0YWxsIHlxIChtYWNPUzogYGJyZXcgaW5zdGFsbCB5cWApIOKAlCBzZXR1cC5zaCByZXF1aXJlcyBpdCcpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnb3BlbnNzbCcsIGhhcygnb3BlbnNzbCcpLCAnb24gUEFUSCcsIE9QRU5TU0xfVExTKSk7XG4gICAgcmV0dXJuIGNoZWNrcztcbiAgfVxuXG4gIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHtcbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyJywgZG9ja2VyUnVubmluZygpLCAnZGFlbW9uIHJlYWNoYWJsZScsICdpbnN0YWxsIERvY2tlciBhbmQgc3RhcnQgdGhlIGRhZW1vbicpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnbWluaWt1YmUnLCBoYXMoJ21pbmlrdWJlJyksICdvbiBQQVRIJywgJ2luc3RhbGwgbWluaWt1YmUnKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2t1YmVjdGwnLCBoYXMoJ2t1YmVjdGwnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBrdWJlY3RsJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgT1BFTlNTTF9UTFMpKTtcbiAgICAvLyBtaW5pa3ViZSdzIHNldHVwLnNoIGRvZXNuJ3QgbmVlZCB5cSwgYnV0IC0td2l0aC1wbHVnaW5zIGJ1aWxkcyBpbWFnZXNcbiAgICAvLyAoYnVpbGQtcGx1Z2luLWltYWdlcy5zaCAvIGdlbmVyYXRlLXBsdWdpbnMuc2gpIHdoaWNoIGRvLlxuICAgIGlmIChvcHRzLndpdGhQbHVnaW5zKSB7XG4gICAgICBjaGVja3MucHVzaChjaGVjaygneXEnLCBoYXMoJ3lxJyksICdvbiBQQVRIJywgJ2luc3RhbGwgeXEgKG1hY09TOiBgYnJldyBpbnN0YWxsIHlxYCkg4oCUIHJlcXVpcmVkIHRvIGJ1aWxkIHBsdWdpbnMnKSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja3M7XG4gIH1cblxuICAvLyBlYzIgKyBmYXJnYXRlIOKAlCBib3RoIGRlcGxveSB2aWEgYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXBsb3lgLCBzbyBib3RoIG5lZWRcbiAgLy8gdGhlIEFXUyBDTEkgd2l0aCB3b3JraW5nIGNyZWRlbnRpYWxzIChhbmQgbm90aGluZyBDREsvbm9kZS1yZWxhdGVkKS4gZWMyJ3NcbiAgLy8gaW5zdGFuY2Ugc2VsZi1ib290c3RyYXBzIG92ZXIgVXNlckRhdGEsIHNvIHRoZSBDTEkgaXMgaXRzIG9ubHkgaG9zdCB0b29sLlxuICBjb25zdCBhY2NvdW50ID0gYXdzSWRlbnRpdHkoKTtcbiAgY2hlY2tzLnB1c2goY2hlY2soJ0FXUyBDTEknLCBoYXMoJ2F3cycpLCAnb24gUEFUSCcsICdpbnN0YWxsIHRoZSBBV1MgQ0xJIHYyJykpO1xuICBjaGVja3MucHVzaCh7IG5hbWU6ICdBV1MgY3JlZGVudGlhbHMnLCBvazogYWNjb3VudCAhPT0gbnVsbCwgZGV0YWlsOiBhY2NvdW50ID8gYGF1dGhlbnRpY2F0ZWQgKGFjY291bnQgJHthY2NvdW50fSlgIDogJ3J1biBgYXdzIGNvbmZpZ3VyZWAgLyBzZXQgQVdTX1BST0ZJTEUnLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgLy8gZmFyZ2F0ZSBydW5zIGluaXQtc2VjcmV0cy5zaCBvbiB0aGUgaG9zdCB0byBnZW5lcmF0ZSB0aGUgcGxhdGZvcm0gc2VjcmV0c1xuICAvLyAoSldUL3JlZnJlc2ggc2VjcmV0cywgREIgcGFzc3dvcmRzLCB0aGUgcmVnaXN0cnkncyBSU0Egc2lnbmluZyBrZXkpIHdpdGhcbiAgLy8gb3BlbnNzbCBiZWZvcmUgdGhlIGZpcnN0IGRlcGxveS4gZWMyIGJvb3RzdHJhcHMgaXRzIHNlY3JldHMgb24gdGhlIGluc3RhbmNlLlxuICBpZiAodGFyZ2V0ID09PSAnZmFyZ2F0ZScpIHtcbiAgICBjaGVja3MucHVzaChjaGVjaygnb3BlbnNzbCcsIGhhcygnb3BlbnNzbCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIG9wZW5zc2wg4oCUIGluaXQtc2VjcmV0cy5zaCBuZWVkcyBpdCB0byBnZW5lcmF0ZSBwbGF0Zm9ybSBzZWNyZXRzJykpO1xuICAgIC8vIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlOiBzdXJmYWNlIGl0IGFzIGEgaGVhZHMtdXAgKGFkdmlzb3J5IOKAlCB0aGUgZGVwbG95IHNlbGYtaGVhbHMsXG4gICAgLy8gYW5kIHRoZSBwcmluY2lwYWwgbWF5IGxhY2sgaWFtOkdldFJvbGUpLiBPbmx5IGNoZWNrZWQgd2hlbiB3ZSBoYXZlIHdvcmtpbmcgY3JlZHMsIGFuZFxuICAgIC8vIG9ubHkgYXNzZXJ0ZWQgXCJtaXNzaW5nXCIgb24gYSBjb25maXJtZWQgTm9TdWNoRW50aXR5LiBlYzIgZG9lc24ndCB1c2UgRUNTLCBzbyBmYXJnYXRlLW9ubHkuXG4gICAgaWYgKGFjY291bnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNsciA9IGVjc0xpbmtlZFJvbGVTdGF0ZSgpO1xuICAgICAgaWYgKHNsciA9PT0gJ3ByZXNlbnQnKSB7XG4gICAgICAgIGNoZWNrcy5wdXNoKHsgbmFtZTogJ0VDUyBzZXJ2aWNlLWxpbmtlZCByb2xlJywgb2s6IHRydWUsIGRldGFpbDogJ0FXU1NlcnZpY2VSb2xlRm9yRUNTIGV4aXN0cycsIHJlcXVpcmVkOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoc2xyID09PSAnYWJzZW50Jykge1xuICAgICAgICBjaGVja3MucHVzaCh7XG4gICAgICAgICAgbmFtZTogJ0VDUyBzZXJ2aWNlLWxpbmtlZCByb2xlJyxcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDogJ0FXU1NlcnZpY2VSb2xlRm9yRUNTIG5vdCBmb3VuZCDigJQgdGhlIGZpcnN0IEVDUyBjbHVzdGVyIGNyZWF0ZSB3aWxsIGNyZWF0ZSBpdCwgYnV0IHRoYXQgZmlyc3QgYXR0ZW1wdCBmYWlscyBvbiB0aGUgbm90LXlldC1yZWFkeSByb2xlICh0aGUgcmUtcnVuIHRoZW4gc2VsZi1oZWFscykuIFRvIGF2b2lkIHRoZSBmYWlsZWQgZmlyc3Qgc3RhY2ssIHByZS1jcmVhdGUgaXQ6IGF3cyBpYW0gY3JlYXRlLXNlcnZpY2UtbGlua2VkLXJvbGUgLS1hd3Mtc2VydmljZS1uYW1lIGVjcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyAndW5rbm93bicgKG5vIGlhbTpHZXRSb2xlIC8gdHJhbnNpZW50KSDihpIgbm8gbGluZSwgcmF0aGVyIHRoYW4gYSBtaXNsZWFkaW5nIG9uZS5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoZWNrcztcbn1cblxuLyoqIFRydWUgd2hlbiBldmVyeSBSRVFVSVJFRCBwcmVyZXF1aXNpdGUgcGFzc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXJlcXNTYXRpc2ZpZWQoY2hlY2tzOiByZWFkb25seSBQcmVyZXFDaGVja1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja3MuZXZlcnkoKGMpID0+IGMub2sgfHwgIWMucmVxdWlyZWQpO1xufVxuIl19
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVxcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wcmVyZXFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBV3pDLGdDQUFnQztBQUNoQyxTQUFTLEdBQUcsQ0FBQyxHQUFXO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQVMsSUFBSSxDQUFDLEdBQVc7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsMkNBQTJDLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckYsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxTQUFTLHNCQUFzQjtJQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRSxD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QUFDLENBQUMsQ0FBQztRQUM1SCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSwyR0FBMkcsQ0FBQyxDQUFDLENBQUM7UUFDeEssa0ZBQWtGO1FBQ2xGLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1FQUFtRSxDQUFDLENBQUMsQ0FBQztRQUN0SCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQThCO0lBQzdELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYywgUkVBRC1PTkxZIHByZXJlcXVpc2l0ZSBjaGVja3MgcGVyIHRhcmdldC4gTm8gTExNLCBubyBtdXRhdGlvbiDigJRcbiAqIGV2ZXJ5IGNvbW1hbmQgaGVyZSBvbmx5IGluc3BlY3RzIChwcmVzZW5jZSBjaGVja3MsIGBhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHlgLFxuICogYGRvY2tlciBpbmZvYCkuIFRoaXMgaXMgdGhlIGtpbmQgb2YgdGhpbmcgYSBzY3JpcHQgZG9lcyBiZXR0ZXIgdGhhbiBhbiBhZ2VudCxcbiAqIHNvIGl0IHN0YXlzIGRldGVybWluaXN0aWM7IHRoZSBMTE0gaXMgcmVzZXJ2ZWQgZm9yIE5MIHBhcnNpbmcgKyBkaWFnbm9zaXMuXG4gKi9cblxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0SWQgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByZXJlcUNoZWNrIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBvazogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGV0YWlsOiBzdHJpbmc7XG4gIC8qKiBBIGZhaWxpbmcgcmVxdWlyZWQgY2hlY2sgYmxvY2tzIGRlcGxveW1lbnQ7IGFkdmlzb3J5IG9uZXMgYXJlIHdhcm5pbmdzLiAqL1xuICByZWFkb25seSByZXF1aXJlZDogYm9vbGVhbjtcbn1cblxuLyoqIFRydWUgaWYgYGNtZGAgaXMgb24gUEFUSC4gKi9cbmZ1bmN0aW9uIGhhcyhjbWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGV4ZWNTeW5jKGBjb21tYW5kIC12ICR7Y21kfWAsIHsgc3RkaW86ICdpZ25vcmUnLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIFJ1biBhIHJlYWQtb25seSBjb21tYW5kOyByZXR1cm4gaXRzIHRyaW1tZWQgc3Rkb3V0IG9yIG51bGwgb24gZmFpbHVyZS4gKi9cbmZ1bmN0aW9uIHJlYWQoY21kOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXhlY1N5bmMoY21kLCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ2lnbm9yZSddLCB0aW1lb3V0OiAxNTAwMCB9KS50b1N0cmluZygpLnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZG9ja2VyUnVubmluZygpOiBib29sZWFuIHtcbiAgcmV0dXJuIGhhcygnZG9ja2VyJykgJiYgcmVhZCgnZG9ja2VyIGluZm8gLS1mb3JtYXQgXCJ7ey5TZXJ2ZXJWZXJzaW9ufX1cIicpICE9PSBudWxsO1xufVxuXG4vKiogRG9ja2VyIENvbXBvc2UgdjIgKGBkb2NrZXIgY29tcG9zZWApIG9yIGxlZ2FjeSB2MSAoYGRvY2tlci1jb21wb3NlYCkg4oCUIHNldHVwLnNoIG5lZWRzIG9uZS4gKi9cbmZ1bmN0aW9uIGRvY2tlckNvbXBvc2VBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWFkKCdkb2NrZXIgY29tcG9zZSB2ZXJzaW9uJykgIT09IG51bGwgfHwgaGFzKCdkb2NrZXItY29tcG9zZScpO1xufVxuXG5mdW5jdGlvbiBhd3NJZGVudGl0eSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFoYXMoJ2F3cycpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHJlYWQoJ2F3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eSAtLXF1ZXJ5IEFjY291bnQgLS1vdXRwdXQgdGV4dCcpO1xufVxuXG4vKiogUGFyc2VkIGBnaXQgLS12ZXJzaW9uYCBhcyBbbWFqb3IsIG1pbm9yXSwgb3IgbnVsbCBpZiBnaXQgaXMgYWJzZW50L3VucGFyc2VhYmxlLiAqL1xuZnVuY3Rpb24gZ2l0VmVyc2lvbigpOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbCB7XG4gIGNvbnN0IG91dCA9IHJlYWQoJ2dpdCAtLXZlcnNpb24nKTtcbiAgY29uc3QgbSA9IG91dD8ubWF0Y2goLyhcXGQrKVxcLihcXGQrKS8pO1xuICByZXR1cm4gbSA/IFtOdW1iZXIobVsxXSksIE51bWJlcihtWzJdKV0gOiBudWxsO1xufVxuXG4vKiogVHJ1ZSB3aGVuIGdpdCBpcyBvbiBQQVRIIChyZXF1aXJlZCB0byBib290c3RyYXAgYSBjbG9uZSBhdCBhbGwpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdpdEF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdpdFZlcnNpb24oKSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBDb25lIGBzcGFyc2UtY2hlY2tvdXRgICgrIGAtLWZpbHRlcj1ibG9iOm5vbmVgKSBuZWVkcyBnaXQg4omlIDIuMjcuIEJlbG93IHRoYXQsXG4gKiB0aGUgYm9vdHN0cmFwIGZhbGxzIGJhY2sgdG8gYSAoY29ycmVjdCwganVzdCBsYXJnZXIpIGZ1bGwgY2xvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCk6IGJvb2xlYW4ge1xuICBjb25zdCB2ID0gZ2l0VmVyc2lvbigpO1xuICByZXR1cm4gdiAhPT0gbnVsbCAmJiAodlswXSA+IDIgfHwgKHZbMF0gPT09IDIgJiYgdlsxXSA+PSAyNykpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgUHJlcmVxQ2hlY2sgZnJvbSBhIFNJTkdMRSBwcmVzZW5jZSBldmFsdWF0aW9uLiBDb2xsYXBzZXMgdGhlIHJlcGVhdGVkXG4gKiBgeyBvazogcHJvYmUoKSwgZGV0YWlsOiBwcm9iZSgpID8gYSA6IGIgfWAgc2hhcGUg4oCUIHdoaWNoIGFsc28gY2FsbGVkIHRoZSBwcm9iZVxuICogdHdpY2Ug4oCUIGludG8gb25lIHBsYWNlOyB0aGUgY2FsbGVyIGV2YWx1YXRlcyB0aGUgcHJvYmUgb25jZSBhbmQgcGFzc2VzIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrKG5hbWU6IHN0cmluZywgcHJlc2VudDogYm9vbGVhbiwgcHJlc2VudERldGFpbDogc3RyaW5nLCBtaXNzaW5nRGV0YWlsOiBzdHJpbmcsIHJlcXVpcmVkID0gdHJ1ZSk6IFByZXJlcUNoZWNrIHtcbiAgcmV0dXJuIHsgbmFtZSwgb2s6IHByZXNlbnQsIGRldGFpbDogcHJlc2VudCA/IHByZXNlbnREZXRhaWwgOiBtaXNzaW5nRGV0YWlsLCByZXF1aXJlZCB9O1xufVxuXG4vKipcbiAqIFJ1biB0aGUgcmVhZC1vbmx5IHByZXJlcXVpc2l0ZSBjaGVja3MgZm9yIGEgdGFyZ2V0LiBQdXJlIGluc3BlY3Rpb24g4oCUIHNhZmUgdG9cbiAqIHJ1biB1bmNvbmRpdGlvbmFsbHkgKHRoZSBwbGFuIGFzc2VtYmxlcyB0aGlzIGJlZm9yZSB0aGUgZ2F0ZWQgZXhlY3V0aW9uKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUHJlcmVxcyh0YXJnZXQ6IFRhcmdldElkLCBvcHRzOiB7IGJvb3RzdHJhcD86IGJvb2xlYW47IHdpdGhQbHVnaW5zPzogYm9vbGVhbiB9ID0ge30pOiBQcmVyZXFDaGVja1tdIHtcbiAgY29uc3QgY2hlY2tzOiBQcmVyZXFDaGVja1tdID0gW107XG4gIC8vIHNldHVwLnNoIChsb2NhbCkgKyBzZXR1cC5zaCAobWluaWt1YmUpIGJvdGggZ2VuZXJhdGUgdGhlIFRMUyBjZXJ0ICsgcmVnaXN0cnkgSldUIGtleSB3aXRoIG9wZW5zc2wuXG4gIGNvbnN0IE9QRU5TU0xfVExTID0gJ2luc3RhbGwgb3BlbnNzbCDigJQgc2V0dXAuc2ggZ2VuZXJhdGVzIHRoZSBUTFMgY2VydCArIHJlZ2lzdHJ5IEpXVCBrZXkgd2l0aCBpdCc7XG5cbiAgLy8gYC0tcmVwb2AgYm9vdHN0cmFwIGdpdC1jbG9uZXMgdGhlIHBsYXRmb3JtIHJlcG8gZmlyc3Qg4oaSIGdpdCBpcyByZXF1aXJlZC4gQVxuICAvLyBnaXQgYmVsb3cgMi4yNyBzdGlsbCB3b3JrcyAoZnVsbC1jbG9uZSBmYWxsYmFjayksIHNvIHRoZSB2ZXJzaW9uIGlzIGFkdmlzb3J5LlxuICBpZiAob3B0cy5ib290c3RyYXApIHtcbiAgICBjb25zdCB2ID0gZ2l0VmVyc2lvbigpO1xuICAgIGNoZWNrcy5wdXNoKHsgbmFtZTogJ2dpdCcsIG9rOiB2ICE9PSBudWxsLCBkZXRhaWw6IHYgPyBgb24gUEFUSCAoJHt2WzBdfS4ke3ZbMV19KWAgOiAnaW5zdGFsbCBnaXQnLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICBpZiAodiAhPT0gbnVsbCAmJiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpKSB7XG4gICAgICBjaGVja3MucHVzaCh7IG5hbWU6ICdnaXQg4omlIDIuMjcnLCBvazogZmFsc2UsIGRldGFpbDogJ3NwYXJzZSBjbG9uZSBuZWVkcyBnaXQg4omlIDIuMjcg4oCUIGZhbGxpbmcgYmFjayB0byBhIGZ1bGwgY2xvbmUnLCByZXF1aXJlZDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRhcmdldCA9PT0gJ2xvY2FsJykge1xuICAgIC8vIGRlcGxveS9sb2NhbC9kb2NrZXIvYmluL3NldHVwLnNoIGhhcmQtY2hlY2tzIGFsbCBvZiB0aGVzZSBhdCBzdGFydHVwIGFuZCBhYm9ydHMgaWZcbiAgICAvLyBhbnkgaXMgbWlzc2luZyDigJQgbWlycm9yIHRoZW0gaGVyZSBzbyBwcm92aXNpb24gYmxvY2tzIHVwIGZyb250IGluc3RlYWQgb2ZcbiAgICAvLyBmYWlsaW5nIG1pZC1kZXBsb3kgKGUuZy4gdGhlIGNsYXNzaWMgXCJ5cSBpcyBub3QgaW5zdGFsbGVkXCIpLlxuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXInLCBkb2NrZXJSdW5uaW5nKCksICdkYWVtb24gcmVhY2hhYmxlJywgJ2luc3RhbGwgRG9ja2VyIGFuZCBzdGFydCB0aGUgZGFlbW9uJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXIgQ29tcG9zZScsIGRvY2tlckNvbXBvc2VBdmFpbGFibGUoKSwgJ2F2YWlsYWJsZScsICduZWVkcyBgZG9ja2VyIGNvbXBvc2VgICh2MiBwbHVnaW4pIG9yIGBkb2NrZXItY29tcG9zZWAgKHYxKScpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygneXEnLCBoYXMoJ3lxJyksICdvbiBQQVRIJywgJ2luc3RhbGwgeXEgKG1hY09TOiBgYnJldyBpbnN0YWxsIHlxYCkg4oCUIHNldHVwLnNoIHJlcXVpcmVzIGl0JykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgT1BFTlNTTF9UTFMpKTtcbiAgICByZXR1cm4gY2hlY2tzO1xuICB9XG5cbiAgaWYgKHRhcmdldCA9PT0gJ21pbmlrdWJlJykge1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXInLCBkb2NrZXJSdW5uaW5nKCksICdkYWVtb24gcmVhY2hhYmxlJywgJ2luc3RhbGwgRG9ja2VyIGFuZCBzdGFydCB0aGUgZGFlbW9uJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdtaW5pa3ViZScsIGhhcygnbWluaWt1YmUnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBtaW5pa3ViZScpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygna3ViZWN0bCcsIGhhcygna3ViZWN0bCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIGt1YmVjdGwnKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ29wZW5zc2wnLCBoYXMoJ29wZW5zc2wnKSwgJ29uIFBBVEgnLCBPUEVOU1NMX1RMUykpO1xuICAgIC8vIG1pbmlrdWJlJ3Mgc2V0dXAuc2ggZG9lc24ndCBuZWVkIHlxLCBidXQgLS13aXRoLXBsdWdpbnMgYnVpbGRzIGltYWdlc1xuICAgIC8vIChidWlsZC1wbHVnaW4taW1hZ2VzLnNoIC8gZ2VuZXJhdGUtcGx1Z2lucy5zaCkgd2hpY2ggZG8uXG4gICAgaWYgKG9wdHMud2l0aFBsdWdpbnMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKGNoZWNrKCd5cScsIGhhcygneXEnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCB5cSAobWFjT1M6IGBicmV3IGluc3RhbGwgeXFgKSDigJQgcmVxdWlyZWQgdG8gYnVpbGQgcGx1Z2lucycpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrcztcbiAgfVxuXG4gIC8vIGVjMiArIGVrcyDigJQgYm90aCBkZXBsb3kgdG8gQVdTIHZpYSB0aGUgQ0xJLCBzbyBib3RoIG5lZWQgdGhlIEFXUyBDTEkgKyB3b3JraW5nIGNyZWRzLlxuICBjb25zdCBhY2NvdW50ID0gYXdzSWRlbnRpdHkoKTtcbiAgY2hlY2tzLnB1c2goY2hlY2soJ0FXUyBDTEknLCBoYXMoJ2F3cycpLCAnb24gUEFUSCcsICdpbnN0YWxsIHRoZSBBV1MgQ0xJIHYyJykpO1xuICBjaGVja3MucHVzaCh7IG5hbWU6ICdBV1MgY3JlZGVudGlhbHMnLCBvazogYWNjb3VudCAhPT0gbnVsbCwgZGV0YWlsOiBhY2NvdW50ID8gYGF1dGhlbnRpY2F0ZWQgKGFjY291bnQgJHthY2NvdW50fSlgIDogJ3J1biBgYXdzIGNvbmZpZ3VyZWAgLyBzZXQgQVdTX1BST0ZJTEUnLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgLy8gZWtzOiBzZXR1cC5zaCBjcmVhdGVzIHRoZSBBdXRvIE1vZGUgY2x1c3RlciAoZWtzY3RsKSwgYXBwbGllcyB0aGUgbWFuaWZlc3RzIChrdWJlY3RsLFxuICAvLyByZW5kZXJlZCB0aHJvdWdoIGVudnN1YnN0KSwgYW5kIGdlbmVyYXRlcyB0aGUgcmVnaXN0cnkgdG9rZW4tc2lnbmluZyBrZXlwYWlyIG9uIHRoZVxuICAvLyBob3N0IChvcGVuc3NsKSBiZWZvcmUgY3JlYXRpbmcgdGhlIGs4cyBzZWNyZXQuIGVjMiBib290c3RyYXBzIGl0cyBzZWNyZXRzIG9uIHRoZVxuICAvLyBpbnN0YW5jZSwgc28gaXQgbmVlZHMgbm9uZSBvZiB0aGVzZS5cbiAgaWYgKHRhcmdldCA9PT0gJ2VrcycpIHtcbiAgICAvLyBla3NjdGwgY2FuIHJ1biBmcm9tIFBBVEggT1IgdmlhIHRoZSBvZmZpY2lhbCBpbWFnZSDigJQgc2V0dXAuc2ggZmFsbHMgYmFjayB0b1xuICAgIC8vIGBkb2NrZXIgcnVuIHB1YmxpYy5lY3IuYXdzL2Vrc2N0bC9la3NjdGxgIHdoZW4gdGhlIGJpbmFyeSBpcyBhYnNlbnQsIHNvIGEgaG9zdFxuICAgIC8vIHdpdGggRG9ja2VyICsgQVdTIGNyZWRzIGlzIHN1ZmZpY2llbnQuXG4gICAgY29uc3QgZWtzY3RsT25QYXRoID0gaGFzKCdla3NjdGwnKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnZWtzY3RsJywgZWtzY3RsT25QYXRoIHx8IGRvY2tlclJ1bm5pbmcoKSxcbiAgICAgIGVrc2N0bE9uUGF0aCA/ICdvbiBQQVRIJyA6ICd2aWEgRG9ja2VyIGltYWdlIHB1YmxpYy5lY3IuYXdzL2Vrc2N0bC9la3NjdGwgKGJpbmFyeSBub3QgZm91bmQpJyxcbiAgICAgICdpbnN0YWxsIGVrc2N0bCwgb3IgaW5zdGFsbCArIHN0YXJ0IERvY2tlciAoc2V0dXAuc2ggd2lsbCBydW4gcHVibGljLmVjci5hd3MvZWtzY3RsL2Vrc2N0bCknKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2t1YmVjdGwnLCBoYXMoJ2t1YmVjdGwnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBrdWJlY3RsIOKAlCBhcHBsaWVzIHRoZSBtYW5pZmVzdHMgdG8gdGhlIGNsdXN0ZXInKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ29wZW5zc2wnLCBoYXMoJ29wZW5zc2wnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBvcGVuc3NsIOKAlCBzZXR1cC5zaCBnZW5lcmF0ZXMgdGhlIHJlZ2lzdHJ5IHRva2VuIGtleXBhaXInKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2VudnN1YnN0JywgaGFzKCdlbnZzdWJzdCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIGdldHRleHQgKG1hY09TOiBgYnJldyBpbnN0YWxsIGdldHRleHRgKSDigJQgc2V0dXAuc2ggcmVuZGVycyBjbHVzdGVyLnlhbWwgKyBtYW5pZmVzdHMgd2l0aCBlbnZzdWJzdCcpKTtcbiAgICAvLyBMaWtlIG1pbmlrdWJlLCAtLXdpdGgtcGx1Z2lucyBidWlsZHMgcGx1Z2luIGltYWdlcyBvbiB0aGUgaG9zdCwgd2hpY2ggbmVlZHMgeXEuXG4gICAgaWYgKG9wdHMud2l0aFBsdWdpbnMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKGNoZWNrKCd5cScsIGhhcygneXEnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCB5cSAobWFjT1M6IGBicmV3IGluc3RhbGwgeXFgKSDigJQgcmVxdWlyZWQgdG8gYnVpbGQgcGx1Z2lucycpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoZWNrcztcbn1cblxuLyoqIFRydWUgd2hlbiBldmVyeSBSRVFVSVJFRCBwcmVyZXF1aXNpdGUgcGFzc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXJlcXNTYXRpc2ZpZWQoY2hlY2tzOiByZWFkb25seSBQcmVyZXFDaGVja1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja3MuZXZlcnkoKGMpID0+IGMub2sgfHwgIWMucmVxdWlyZWQpO1xufVxuIl19
@@ -1,4 +1,4 @@
1
- export type TargetId = 'local' | 'minikube' | 'ec2' | 'fargate';
1
+ export type TargetId = 'local' | 'minikube' | 'ec2' | 'eks';
2
2
  /** A single input the underlying deploy script accepts. */
3
3
  export interface InputSpec {
4
4
  /** Flag name passed to the script (without the leading `--`). */
@@ -43,7 +43,7 @@ export interface TargetSpec {
43
43
  * cloned deploy source at runtime (ports.ts `discoverHostPorts`): local from
44
44
  * docker-compose.yml's published ports, minikube from setup.sh's port-forwards. This
45
45
  * static copy is used only when that source can't be read. Empty for remote targets
46
- * (ec2/fargate bind nothing on the operator's machine).
46
+ * (ec2/eks bind nothing on the operator's machine).
47
47
  */
48
48
  readonly hostPorts: readonly {
49
49
  service: string;
@@ -112,15 +112,17 @@ export interface TeardownResult {
112
112
  /**
113
113
  * Assemble the teardown command for a target. Pure and deterministic — mirrors
114
114
  * `assembleCommand` for the destroy path. local/minikube STOP the stack
115
- * (non-destructive — on-disk / PVC data survives); ec2/fargate DELETE their
116
- * CloudFormation stacks and are irreversible. For Fargate, `assumeYes` forwards
117
- * the native script's own `--yes` (the agent runs its own typed confirmation
118
- * first, so the script must not also block on stdin); EC2 `delete-stack` has no
119
- * native prompt, which is exactly why the agent gate is mandatory there.
115
+ * (non-destructive — on-disk / PVC data survives); ec2 DELETEs its CloudFormation
116
+ * stack and eks DELETEs its cluster (eksctl) — both irreversible. EC2 `delete-stack`
117
+ * and `eksctl delete cluster` have no native prompt, which is exactly why the agent's
118
+ * typed-confirmation gate is mandatory there.
120
119
  */
121
120
  export declare function teardownCommand(target: TargetId, opts?: {
122
121
  stackName?: string;
122
+ clusterName?: string;
123
123
  region?: string;
124
+ domain?: string;
125
+ hostedZoneId?: string;
124
126
  assumeYes?: boolean;
125
127
  }): TeardownResult;
126
128
  //# sourceMappingURL=targets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/agent/targets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/agent/targets.ts"],"names":[],"mappings":"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"}
@@ -18,19 +18,20 @@ const REGION = { flag: 'region', key: 'region', description: 'AWS region' };
18
18
  const DEPLOY_MODE = { flag: 'deploy-mode', key: 'deployMode', description: 'public (internet-facing ALB) or private (internal, default)' };
19
19
  const KEY_PAIR = { flag: 'key-pair', key: 'keyPair', description: 'EC2 key pair in the region (break-glass serial console; routine access is SSM)' };
20
20
  const INSTANCE_TYPE = { flag: 'instance-type', key: 'instanceType', description: 'EC2 instance type (default t3.2xlarge)' };
21
- // Deploy-time stack identity (also reused as the teardown target). ec2 takes a full
22
- // --stack-name; fargate takes a --stack-prefix. Both read the same `stackName` param key,
23
- // so a single --stack-name CLI option drives the right flag per target.
21
+ // ec2 deploy/teardown stack name (CloudFormation). The `stackName` param key is also reused
22
+ // by the teardown path as the resource identifier (ec2 stack / eks cluster name).
24
23
  const STACK_NAME = { flag: 'stack-name', key: 'stackName', description: 'CloudFormation stack name (default pipeline-builder) — set to run a second ec2 environment' };
25
- const STACK_PREFIX = { flag: 'stack-prefix', key: 'stackName', description: 'CloudFormation stack prefix (default pb) set to run a second fargate environment' };
26
- // Auto-init is ON BY DEFAULT on the AWS targets (ec2 + fargate setup.sh default true), so
27
- // `--no-auto-init` is the load-bearing opt-out and `--auto-init` is a no-op reaffirm —
28
- // mirrors --email/--no-email. NOTE: `--no-auto-init`'s key (noAutoInit) is NOT derivable
29
- // from its flag the way the other specs' keys are (commander folds --x/--no-x into a single
30
- // `x` option); provision.ts assembles both keys explicitly — see the param-assembly there.
31
- const AUTO_INIT = { flag: 'auto-init', key: 'autoInit', description: 'Deploy self-runs init-platform once the platform is up — the DEFAULT on ec2/fargate (ec2: on first boot; fargate: a one-shot ECS task; register + all loads)', boolean: true };
32
- const NO_AUTO_INIT = { flag: 'no-auto-init', key: 'noAutoInit', description: 'Skip the deploy-managed auto-init; run init-platform manually (ec2: on the box; fargate: from a VPC-attached host)', boolean: true };
33
- // SES / email family shared by ec2 + fargate. SES is provisioned BY DEFAULT
24
+ // eks cluster name (eksctl). Set to run a second EKS environment in one account.
25
+ const CLUSTER_NAME = { flag: 'cluster-name', key: 'clusterName', description: 'EKS cluster name (default pipeline-builder)' };
26
+ // Auto-init is ON BY DEFAULT on ec2 (setup.sh/template default true), so `--no-auto-init`
27
+ // is the load-bearing opt-out and `--auto-init` is a no-op reaffirm — mirrors --email/--no-email.
28
+ // NOTE: `--no-auto-init`'s key (noAutoInit) is NOT derivable from its flag the way the other
29
+ // specs' keys are (commander folds --x/--no-x into a single `x` option); provision.ts assembles
30
+ // both keys explicitly see the param-assembly there. (eks/minikube run init via provision, not
31
+ // a deploy-managed auto-init, so they ignore these.)
32
+ const AUTO_INIT = { flag: 'auto-init', key: 'autoInit', description: 'ec2: the instance self-runs init-platform on first boot (register + all loads) the DEFAULT on ec2', boolean: true };
33
+ const NO_AUTO_INIT = { flag: 'no-auto-init', key: 'noAutoInit', description: 'ec2: skip the on-boot auto-init and run init-platform manually on the box instead', boolean: true };
34
+ // SES / email family — shared by ec2 + eks. SES is provisioned BY DEFAULT
34
35
  // on AWS deploys; `--no-email` is the opt-out (`--email` is a harmless no-op kept
35
36
  // for back-compat).
36
37
  const EMAIL = [
@@ -46,17 +47,17 @@ export const TARGETS = {
46
47
  local: {
47
48
  id: 'local',
48
49
  label: 'Local (Docker Compose)',
49
- dir: 'deploy/local',
50
+ dir: 'deploy/local/docker',
50
51
  entrypoint: 'bin/setup.sh',
51
- sparsePaths: ['deploy/local'],
52
+ sparsePaths: ['deploy/local/docker'],
52
53
  required: [],
53
54
  optional: [],
54
55
  postDeploy: './deploy/bin/init-platform.sh local',
55
56
  cost: 'Free',
56
57
  bestFor: 'Development',
57
58
  deploys: 'the platform as a Docker Compose stack — an nginx TLS proxy, the API services (platform, plugin, pipeline, message, reporting, compliance, quota, billing, image-registry), the frontend, and postgres + mongo + redis. First run pulls the ghcr.io images and generates a local TLS cert (a few minutes).',
58
- destroys: 'stops all containers — data under deploy/local/data persists on disk (delete it manually for a clean slate)',
59
- // Mirrors the published ports in deploy/local/docker-compose.yml.
59
+ destroys: 'stops all containers — data under deploy/local/docker/data persists on disk (delete it manually for a clean slate)',
60
+ // Mirrors the published ports in deploy/local/docker/docker-compose.yml.
60
61
  hostPorts: [
61
62
  { service: 'nginx — HTTPS gateway (UI/API)', port: 8443 },
62
63
  { service: 'nginx — HTTP redirect', port: 8080 },
@@ -69,9 +70,9 @@ export const TARGETS = {
69
70
  minikube: {
70
71
  id: 'minikube',
71
72
  label: 'Minikube (local Kubernetes)',
72
- dir: 'deploy/minikube',
73
+ dir: 'deploy/local/minikube',
73
74
  entrypoint: 'bin/setup.sh',
74
- sparsePaths: ['deploy/minikube'],
75
+ sparsePaths: ['deploy/local/minikube'],
75
76
  required: [],
76
77
  optional: [],
77
78
  postDeploy: './deploy/bin/init-platform.sh minikube',
@@ -79,7 +80,7 @@ export const TARGETS = {
79
80
  bestFor: 'Local Kubernetes',
80
81
  deploys: 'the platform onto a local Minikube cluster — the same services as Kubernetes Deployments/Services behind an ingress, plus in-cluster postgres + mongo + redis. First run pulls images, builds the cluster, and generates a TLS cert (several minutes).',
81
82
  destroys: 'stops the minikube stack — persistent volumes (PVC data) remain until the cluster is deleted',
82
- // Mirrors the kubectl port-forwards started in deploy/minikube/bin/setup.sh.
83
+ // Mirrors the kubectl port-forwards started in deploy/local/minikube/bin/setup.sh.
83
84
  hostPorts: [
84
85
  { service: 'nginx — HTTPS gateway (UI/API)', port: 8443 },
85
86
  { service: 'Mongo Express (Mongo UI)', port: 8081 },
@@ -101,23 +102,23 @@ export const TARGETS = {
101
102
  destroys: 'DELETES the CloudFormation stack: the VPC, EC2 instance, and its EBS data volume (databases, registry, plugin builds). Irreversible.',
102
103
  hostPorts: [], // remote (AWS) — binds nothing on the operator's machine
103
104
  },
104
- fargate: {
105
- id: 'fargate',
106
- label: 'AWS Fargate (serverless ECS, 6 CloudFormation stacks)',
107
- dir: 'deploy/aws/fargate',
105
+ eks: {
106
+ id: 'eks',
107
+ label: 'AWS EKS Auto Mode (managed Kubernetes)',
108
+ dir: 'deploy/aws/eks',
108
109
  entrypoint: 'bin/setup.sh',
109
- sparsePaths: ['deploy/aws/fargate'],
110
+ sparsePaths: ['deploy/aws/eks'],
110
111
  required: [DOMAIN, HOSTED_ZONE],
111
- optional: [REGION, DEPLOY_MODE, GHCR_TOKEN, STACK_PREFIX, AUTO_INIT, NO_AUTO_INIT, ...EMAIL],
112
- postDeploy: './deploy/bin/init-platform.sh fargate # auto-runs as a one-shot ECS task by default; --no-auto-init to run it manually from a VPC host',
113
- cost: '~$100-300/mo',
112
+ optional: [REGION, DEPLOY_MODE, GHCR_TOKEN, CLUSTER_NAME, ...EMAIL],
113
+ postDeploy: './deploy/bin/init-platform.sh eks # register admin + load plugins (run with kubectl access to the cluster)',
114
+ cost: '~$150-400/mo',
114
115
  bestFor: 'Production',
115
- deploys: 'the platform on serverless ECS Fargate via 6 CloudFormation stacks a VPC, an ALB, the ECS services, EFS-backed databases + registry, Route 53 + ACM for the domain, and (by default) SES email. Secrets are generated into Secrets Manager first.',
116
- destroys: 'DELETES all pb-* CloudFormation stacks: EFS data, databases, and registry. Secrets Manager entries are NOT auto-deleted. Irreversible.',
116
+ deploys: 'the platform on Amazon EKS Auto Mode an AWS-managed Kubernetes cluster (Karpenter-scaled EC2 nodes, AWS Load Balancer Controller, EBS/EFS CSI), the same Kubernetes workloads as the other k8s targets, an ALB Ingress + ACM for the domain, and (by default) SES email. Plugin builds run on the in-cluster rootless buildkitd (EC2 nodes allow it).',
117
+ destroys: 'Runs bin/shutdown.sh: DELETES the EKS cluster + nodes (eksctl), the EFS filesystem, and — when --domain is set — the ACM cert + Route 53 alias. EBS volumes on the Retain StorageClass are NOT auto-deleted (reported at the end). Irreversible.',
117
118
  hostPorts: [], // remote (AWS) — binds nothing on the operator's machine
118
119
  },
119
120
  };
120
- export const TARGET_IDS = ['local', 'minikube', 'ec2', 'fargate'];
121
+ export const TARGET_IDS = ['local', 'minikube', 'ec2', 'eks'];
121
122
  export function isTargetId(value) {
122
123
  return typeof value === 'string' && TARGET_IDS.includes(value);
123
124
  }
@@ -190,29 +191,34 @@ export function assembleCommand(target, params, opts = {}) {
190
191
  }
191
192
  /** CloudFormation stack name the EC2 setup.sh defaults to. */
192
193
  const DEFAULT_EC2_STACK = 'pipeline-builder';
193
- /** Stack prefix the Fargate teardown.sh defaults to. */
194
- const DEFAULT_FARGATE_PREFIX = 'pb';
194
+ /** EKS cluster name eksctl defaults to. */
195
+ const DEFAULT_EKS_CLUSTER = 'pipeline-builder';
195
196
  /**
196
197
  * Assemble the teardown command for a target. Pure and deterministic — mirrors
197
198
  * `assembleCommand` for the destroy path. local/minikube STOP the stack
198
- * (non-destructive — on-disk / PVC data survives); ec2/fargate DELETE their
199
- * CloudFormation stacks and are irreversible. For Fargate, `assumeYes` forwards
200
- * the native script's own `--yes` (the agent runs its own typed confirmation
201
- * first, so the script must not also block on stdin); EC2 `delete-stack` has no
202
- * native prompt, which is exactly why the agent gate is mandatory there.
199
+ * (non-destructive — on-disk / PVC data survives); ec2 DELETEs its CloudFormation
200
+ * stack and eks DELETEs its cluster (eksctl) — both irreversible. EC2 `delete-stack`
201
+ * and `eksctl delete cluster` have no native prompt, which is exactly why the agent's
202
+ * typed-confirmation gate is mandatory there.
203
203
  */
204
204
  export function teardownCommand(target, opts = {}) {
205
205
  const region = opts.region || process.env.AWS_REGION || 'us-east-1';
206
- // stackName/region flow unquoted into a shell-executed teardown command
207
- // reject shell metacharacters (mirrors assembleCommand).
206
+ // Anything flowing unquoted into a shell-executed teardown command is rejected
207
+ // for shell metacharacters (mirrors assembleCommand).
208
208
  assertShellSafe(region, 'region');
209
209
  if (opts.stackName)
210
210
  assertShellSafe(opts.stackName, 'stack-name');
211
+ if (opts.clusterName)
212
+ assertShellSafe(opts.clusterName, 'cluster-name');
213
+ if (opts.domain)
214
+ assertShellSafe(opts.domain, 'domain');
215
+ if (opts.hostedZoneId)
216
+ assertShellSafe(opts.hostedZoneId, 'hosted-zone-id');
211
217
  switch (target) {
212
218
  case 'local':
213
- return { command: 'cd deploy/local && bash bin/shutdown.sh', destructive: false };
219
+ return { command: 'cd deploy/local/docker && bash bin/shutdown.sh', destructive: false };
214
220
  case 'minikube':
215
- return { command: 'cd deploy/minikube && bash bin/shutdown.sh', destructive: false };
221
+ return { command: 'cd deploy/local/minikube && bash bin/shutdown.sh', destructive: false };
216
222
  case 'ec2': {
217
223
  const stack = opts.stackName || DEFAULT_EC2_STACK;
218
224
  return {
@@ -221,14 +227,22 @@ export function teardownCommand(target, opts = {}) {
221
227
  destructive: true,
222
228
  };
223
229
  }
224
- case 'fargate': {
225
- const prefix = opts.stackName || DEFAULT_FARGATE_PREFIX;
226
- return {
227
- command: `cd deploy/aws/fargate && bash bin/teardown.sh --stack-prefix ${prefix} --region ${region}` +
228
- (opts.assumeYes ? ' --yes' : ''),
229
- destructive: true,
230
- };
230
+ case 'eks': {
231
+ // eks tears down via bin/shutdown.sh (like local/minikube use bin/shutdown.sh):
232
+ // it deletes the cluster AND the resources eksctl alone would orphan — the EFS
233
+ // filesystem and, when --domain is given, the ACM cert + Route 53 alias. The
234
+ // agent's typed-confirmation gate already ran, so pass --yes to skip the
235
+ // script's own prompt.
236
+ const cluster = opts.clusterName || DEFAULT_EKS_CLUSTER;
237
+ let command = `cd deploy/aws/eks && bash bin/shutdown.sh --cluster-name ${cluster} --region ${region}`;
238
+ if (opts.domain)
239
+ command += ` --domain ${opts.domain}`;
240
+ if (opts.hostedZoneId)
241
+ command += ` --hosted-zone-id ${opts.hostedZoneId}`;
242
+ if (opts.assumeYes)
243
+ command += ' --yes';
244
+ return { command, destructive: true };
231
245
  }
232
246
  }
233
247
  }
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC90YXJnZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFzRDdELCtFQUErRTtBQUUvRSxNQUFNLE1BQU0sR0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsdURBQXVELEVBQUUsQ0FBQztBQUNsSSxNQUFNLFdBQVcsR0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQzNKLE1BQU0sVUFBVSxHQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxzRUFBc0UsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUssTUFBTSxNQUFNLEdBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ3ZGLE1BQU0sV0FBVyxHQUFjLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQ3RKLE1BQU0sUUFBUSxHQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnRkFBZ0YsRUFBRSxDQUFDO0FBQ2hLLE1BQU0sYUFBYSxHQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxDQUFDO0FBQ3ZJLG9GQUFvRjtBQUNw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QUFJLHNCQUFzQixDQUFDO1lBQ3hELE9BQU87Z0JBQ0wsT0FBTyxFQUNMLGdFQUFnRSxNQUFNLGFBQWEsTUFBTSxFQUFFO29CQUMzRixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYyByZWdpc3RyeSBvZiBwbGF0Zm9ybSBkZXBsb3kgdGFyZ2V0cyDigJQgdGhlIHNvdXJjZSBvZiB0cnV0aCB0aGVcbiAqIGBwcm92aXNpb25gIGFkdmlzb3IgdXNlcyB0byBhc3NlbWJsZSB0aGUgRVhBQ1QgZGVwbG95IGNvbW1hbmQuIFRoZSBhZ2VudCBpcyBhXG4gKiB0aGluIHdyYXBwZXIgb3ZlciB0aGUgZXhpc3RpbmcgZGVwbG95IHNjcmlwdHM7IGl0IG5ldmVyIHJlaW1wbGVtZW50c1xuICogZGVwbG95bWVudCwgb25seSB2YWxpZGF0ZXMgaW5wdXRzIGFuZCBhc3NlbWJsZXMgdGhlIGNvbW1hbmQgdG8gcnVuLlxuICpcbiAqIEtlZXAgdGhpcyBpbiBsb2NrLXN0ZXAgd2l0aCB0aGUgZmxhZ3MgdGhlIHNjcmlwdHMgYWNjZXB0IOKAlCBldmVyeSB0YXJnZXQnc1xuICogb3BlcmF0b3IgZW50cnlwb2ludCBpcyBgYmluL3NldHVwLnNoYCAoZGVwbG95Lzx0YXJnZXQ+L2Jpbi9zZXR1cC5zaCkuXG4gKi9cblxuaW1wb3J0IHsgYXNzZXJ0U2hlbGxTYWZlIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuXG5leHBvcnQgdHlwZSBUYXJnZXRJZCA9ICdsb2NhbCcgfCAnbWluaWt1YmUnIHwgJ2VjMicgfCAnZmFyZ2F0ZSc7XG5cbi8qKiBBIHNpbmdsZSBpbnB1dCB0aGUgdW5kZXJseWluZyBkZXBsb3kgc2NyaXB0IGFjY2VwdHMuICovXG5leHBvcnQgaW50ZXJmYWNlIElucHV0U3BlYyB7XG4gIC8qKiBGbGFnIG5hbWUgcGFzc2VkIHRvIHRoZSBzY3JpcHQgKHdpdGhvdXQgdGhlIGxlYWRpbmcgYC0tYCkuICovXG4gIHJlYWRvbmx5IGZsYWc6IHN0cmluZztcbiAgLyoqIEtleSBvbiB0aGUgcHJvdmlzaW9uIHBhcmFtcyBvYmplY3QuICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAvKiogSHVtYW4gZGVzY3JpcHRpb24g4oCUIHNob3duIHdoZW4gYSByZXF1aXJlZCBpbnB1dCBpcyBtaXNzaW5nLiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogU2VjcmV0IOKAlCBuZXZlciBwcmludGVkIGluIHRoZSBhc3NlbWJsZWQgY29tbWFuZCAobWFza2VkIGFzIGAqKipgKS4gKi9cbiAgcmVhZG9ubHkgc2VjcmV0PzogYm9vbGVhbjtcbiAgLyoqIEJvb2xlYW4gZmxhZyB3aXRoIG5vIHZhbHVlIChlLmcuIGAtLWVtYWlsYCkuICovXG4gIHJlYWRvbmx5IGJvb2xlYW4/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFNwZWMge1xuICByZWFkb25seSBpZDogVGFyZ2V0SWQ7XG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBEaXJlY3RvcnkgdGhlIGVudHJ5cG9pbnQgcnVucyBmcm9tIChyZWxhdGl2ZSB0byByZXBvIHJvb3QpLiAqL1xuICByZWFkb25seSBkaXI6IHN0cmluZztcbiAgLyoqIEVudHJ5cG9pbnQgc2NyaXB0IChyZWxhdGl2ZSB0byBgZGlyYCkuICovXG4gIHJlYWRvbmx5IGVudHJ5cG9pbnQ6IHN0cmluZztcbiAgLyoqIElucHV0cyB0aGUgc2NyaXB0IFJFUVVJUkVTIOKAlCB0aGUgYWR2aXNvciByZXBvcnRzIGFueSB0aGF0IGFyZSBtaXNzaW5nLiAqL1xuICByZWFkb25seSByZXF1aXJlZDogcmVhZG9ubHkgSW5wdXRTcGVjW107XG4gIC8qKiBPcHRpb25hbCBpbnB1dHMsIHBhc3NlZCB0aHJvdWdoIG9ubHkgd2hlbiBwcm92aWRlZC4gKi9cbiAgcmVhZG9ubHkgb3B0aW9uYWw6IHJlYWRvbmx5IElucHV0U3BlY1tdO1xuICAvKipcbiAgICogUmVwbyBmb2xkZXIocykgdGhpcyB0YXJnZXQncyBkZXBsb3kgbmVlZHMsIGZvciBhIHNwYXJzZSBgLS1yZXBvYCBib290c3RyYXAuXG4gICAqIENvbWJpbmVkIHdpdGggQ09NTU9OX1NQQVJTRV9QQVRIUyBhbmQgYW55IHNlbGVjdGVkIGxvYWQgc3RlcHMnIHBhdGhzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BhcnNlUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogUG9zdC1kZXBsb3kgc3RlcCB0byBzdXJmYWNlIChyZWdpc3RlcnMgYWRtaW4gKyBsb2FkcyBwbHVnaW5zKS4gKi9cbiAgcmVhZG9ubHkgcG9zdERlcGxveT86IHN0cmluZztcbiAgLyoqIFJvdWdoIG1vbnRobHkgY29zdCAoZnJvbSBkb2NzKS4gKi9cbiAgcmVhZG9ubHkgY29zdDogc3RyaW5nO1xuICAvKiogT25lLWxpbmUgXCJiZXN0IGZvclwiLiAqL1xuICByZWFkb25seSBiZXN0Rm9yOiBzdHJpbmc7XG4gIC8qKiBXaGF0IHRoZSBkZXBsb3kgY3JlYXRlcyDigJQgc2hvd24gd2hlbiBkZXBsb3lpbmcgc28gXCJEZXBsb3lpbmdcIiBpc24ndCBvcGFxdWUuICovXG4gIHJlYWRvbmx5IGRlcGxveXM6IHN0cmluZztcbiAgLyoqIFdoYXQgYSB0ZWFyZG93biBvZiB0aGlzIHRhcmdldCBkZXN0cm95cyDigJQgc2hvd24gYmVmb3JlIGEgKGdhdGVkKSB0ZWFyZG93bi4gKi9cbiAgcmVhZG9ubHkgZGVzdHJveXM6IHN0cmluZztcbiAgLyoqXG4gICAqIEhvc3QgcG9ydHMgdGhlIGRlcGxveSBiaW5kcyDigJQgYSBGQUxMQkFDSyBvbmx5LiBUaGUgbGl2ZSBsaXN0IGlzIERFUklWRUQgZnJvbSB0aGVcbiAgICogY2xvbmVkIGRlcGxveSBzb3VyY2UgYXQgcnVudGltZSAocG9ydHMudHMgYGRpc2NvdmVySG9zdFBvcnRzYCk6IGxvY2FsIGZyb21cbiAgICogZG9ja2VyLWNvbXBvc2UueW1sJ3MgcHVibGlzaGVkIHBvcnRzLCBtaW5pa3ViZSBmcm9tIHNldHVwLnNoJ3MgcG9ydC1mb3J3YXJkcy4gVGhpc1xuICAgKiBzdGF0aWMgY29weSBpcyB1c2VkIG9ubHkgd2hlbiB0aGF0IHNvdXJjZSBjYW4ndCBiZSByZWFkLiBFbXB0eSBmb3IgcmVtb3RlIHRhcmdldHNcbiAgICogKGVjMi9mYXJnYXRlIGJpbmQgbm90aGluZyBvbiB0aGUgb3BlcmF0b3IncyBtYWNoaW5lKS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RQb3J0czogcmVhZG9ubHkgeyBzZXJ2aWNlOiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9W107XG59XG5cbi8vIC0tLSBTaGFyZWQgaW5wdXQgc3BlY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgRE9NQUlOOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkb21haW4nLCBrZXk6ICdkb21haW4nLCBkZXNjcmlwdGlvbjogJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoQUxCIEFDTSBjZXJ0ICsgU0VTIERLSU0pJyB9O1xuY29uc3QgSE9TVEVEX1pPTkU6IElucHV0U3BlYyA9IHsgZmxhZzogJ2hvc3RlZC16b25lLWlkJywga2V5OiAnaG9zdGVkWm9uZUlkJywgZGVzY3JpcHRpb246ICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlIGRvbWFpbicgfTtcbmNvbnN0IEdIQ1JfVE9LRU46IElucHV0U3BlYyA9IHsgZmxhZzogJ2doY3ItdG9rZW4nLCBrZXk6ICdnaGNyVG9rZW4nLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBQQVQgd2l0aCByZWFkOnBhY2thZ2VzIChhdm9pZHMgZ2hjci5pbyBhbm9ueW1vdXMgcmF0ZSBsaW1pdHMpJywgc2VjcmV0OiB0cnVlIH07XG5jb25zdCBSRUdJT046IElucHV0U3BlYyA9IHsgZmxhZzogJ3JlZ2lvbicsIGtleTogJ3JlZ2lvbicsIGRlc2NyaXB0aW9uOiAnQVdTIHJlZ2lvbicgfTtcbmNvbnN0IERFUExPWV9NT0RFOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkZXBsb3ktbW9kZScsIGtleTogJ2RlcGxveU1vZGUnLCBkZXNjcmlwdGlvbjogJ3B1YmxpYyAoaW50ZXJuZXQtZmFjaW5nIEFMQikgb3IgcHJpdmF0ZSAoaW50ZXJuYWwsIGRlZmF1bHQpJyB9O1xuY29uc3QgS0VZX1BBSVI6IElucHV0U3BlYyA9IHsgZmxhZzogJ2tleS1wYWlyJywga2V5OiAna2V5UGFpcicsIGRlc2NyaXB0aW9uOiAnRUMyIGtleSBwYWlyIGluIHRoZSByZWdpb24gKGJyZWFrLWdsYXNzIHNlcmlhbCBjb25zb2xlOyByb3V0aW5lIGFjY2VzcyBpcyBTU00pJyB9O1xuY29uc3QgSU5TVEFOQ0VfVFlQRTogSW5wdXRTcGVjID0geyBmbGFnOiAnaW5zdGFuY2UtdHlwZScsIGtleTogJ2luc3RhbmNlVHlwZScsIGRlc2NyaXB0aW9uOiAnRUMyIGluc3RhbmNlIHR5cGUgKGRlZmF1bHQgdDMuMnhsYXJnZSknIH07XG4vLyBEZXBsb3ktdGltZSBzdGFjayBpZGVudGl0eSAoYWxzbyByZXVzZWQgYXMgdGhlIHRlYXJkb3duIHRhcmdldCkuIGVjMiB0YWtlcyBhIGZ1bGxcbi8vIC0tc3RhY2stbmFtZTsgZmFyZ2F0ZSB0YWtlcyBhIC0tc3RhY2stcHJlZml4LiBCb3RoIHJlYWQgdGhlIHNhbWUgYHN0YWNrTmFtZWAgcGFyYW0ga2V5LFxuLy8gc28gYSBzaW5nbGUgLS1zdGFjay1uYW1lIENMSSBvcHRpb24gZHJpdmVzIHRoZSByaWdodCBmbGFnIHBlciB0YXJnZXQuXG5jb25zdCBTVEFDS19OQU1FOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdzdGFjay1uYW1lJywga2V5OiAnc3RhY2tOYW1lJywgZGVzY3JpcHRpb246ICdDbG91ZEZvcm1hdGlvbiBzdGFjayBuYW1lIChkZWZhdWx0IHBpcGVsaW5lLWJ1aWxkZXIpIOKAlCBzZXQgdG8gcnVuIGEgc2Vjb25kIGVjMiBlbnZpcm9ubWVudCcgfTtcbmNvbnN0IFNUQUNLX1BSRUZJWDogSW5wdXRTcGVjID0geyBmbGFnOiAnc3RhY2stcHJlZml4Jywga2V5OiAnc3RhY2tOYW1lJywgZGVzY3JpcHRpb246ICdDbG91ZEZvcm1hdGlvbiBzdGFjayBwcmVmaXggKGRlZmF1bHQgcGIpIOKAlCBzZXQgdG8gcnVuIGEgc2Vjb25kIGZhcmdhdGUgZW52aXJvbm1lbnQnIH07XG4vLyBBdXRvLWluaXQgaXMgT04gQlkgREVGQVVMVCBvbiB0aGUgQVdTIHRhcmdldHMgKGVjMiArIGZhcmdhdGUgc2V0dXAuc2ggZGVmYXVsdCB0cnVlKSwgc29cbi8vIGAtLW5vLWF1dG8taW5pdGAgaXMgdGhlIGxvYWQtYmVhcmluZyBvcHQtb3V0IGFuZCBgLS1hdXRvLWluaXRgIGlzIGEgbm8tb3AgcmVhZmZpcm0g4oCUXG4vLyBtaXJyb3JzIC0tZW1haWwvLS1uby1lbWFpbC4gTk9URTogYC0tbm8tYXV0by1pbml0YCdzIGtleSAobm9BdXRvSW5pdCkgaXMgTk9UIGRlcml2YWJsZVxuLy8gZnJvbSBpdHMgZmxhZyB0aGUgd2F5IHRoZSBvdGhlciBzcGVjcycga2V5cyBhcmUgKGNvbW1hbmRlciBmb2xkcyAtLXgvLS1uby14IGludG8gYSBzaW5nbGVcbi8vIGB4YCBvcHRpb24pOyBwcm92aXNpb24udHMgYXNzZW1ibGVzIGJvdGgga2V5cyBleHBsaWNpdGx5IOKAlCBzZWUgdGhlIHBhcmFtLWFzc2VtYmx5IHRoZXJlLlxuY29uc3QgQVVUT19JTklUOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdhdXRvLWluaXQnLCBrZXk6ICdhdXRvSW5pdCcsIGRlc2NyaXB0aW9uOiAnRGVwbG95IHNlbGYtcnVucyBpbml0LXBsYXRmb3JtIG9uY2UgdGhlIHBsYXRmb3JtIGlzIHVwIOKAlCB0aGUgREVGQVVMVCBvbiBlYzIvZmFyZ2F0ZSAoZWMyOiBvbiBmaXJzdCBib290OyBmYXJnYXRlOiBhIG9uZS1zaG90IEVDUyB0YXNrOyByZWdpc3RlciArIGFsbCBsb2FkcyknLCBib29sZWFuOiB0cnVlIH07XG5jb25zdCBOT19BVVRPX0lOSVQ6IElucHV0U3BlYyA9IHsgZmxhZzogJ25vLWF1dG8taW5pdCcsIGtleTogJ25vQXV0b0luaXQnLCBkZXNjcmlwdGlvbjogJ1NraXAgdGhlIGRlcGxveS1tYW5hZ2VkIGF1dG8taW5pdDsgcnVuIGluaXQtcGxhdGZvcm0gbWFudWFsbHkgKGVjMjogb24gdGhlIGJveDsgZmFyZ2F0ZTogZnJvbSBhIFZQQy1hdHRhY2hlZCBob3N0KScsIGJvb2xlYW46IHRydWUgfTtcblxuLy8gU0VTIC8gZW1haWwgZmFtaWx5IOKAlCBzaGFyZWQgYnkgZWMyICsgZmFyZ2F0ZS4gU0VTIGlzIHByb3Zpc2lvbmVkIEJZIERFRkFVTFRcbi8vIG9uIEFXUyBkZXBsb3lzOyBgLS1uby1lbWFpbGAgaXMgdGhlIG9wdC1vdXQgKGAtLWVtYWlsYCBpcyBhIGhhcm1sZXNzIG5vLW9wIGtlcHRcbi8vIGZvciBiYWNrLWNvbXBhdCkuXG5jb25zdCBFTUFJTDogcmVhZG9ubHkgSW5wdXRTcGVjW10gPSBbXG4gIHsgZmxhZzogJ2VtYWlsJywga2V5OiAnZW1haWwnLCBkZXNjcmlwdGlvbjogJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScsIGJvb2xlYW46IHRydWUgfSxcbiAgeyBmbGFnOiAnbm8tZW1haWwnLCBrZXk6ICdub0VtYWlsJywgZGVzY3JpcHRpb246ICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0KScsIGJvb2xlYW46IHRydWUgfSxcbiAgeyBmbGFnOiAnZW1haWwtZnJvbScsIGtleTogJ2VtYWlsRnJvbScsIGRlc2NyaXB0aW9uOiAnRnJvbSBhZGRyZXNzIChkZWZhdWx0IG5vcmVwbHlAPGRvbWFpbj4pJyB9LFxuICB7IGZsYWc6ICdlbWFpbC1mcm9tLW5hbWUnLCBrZXk6ICdlbWFpbEZyb21OYW1lJywgZGVzY3JpcHRpb246ICdEaXNwbGF5IG5hbWUgb24gb3V0Ym91bmQgZW1haWwnIH0sXG4gIHsgZmxhZzogJ2FsZXJ0LWVtYWlsJywga2V5OiAnYWxlcnRFbWFpbCcsIGRlc2NyaXB0aW9uOiAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJyB9LFxuICB7IGZsYWc6ICduby1jcmVhdGUtc2VzLWlkZW50aXR5Jywga2V5OiAnbm9DcmVhdGVTZXNJZGVudGl0eScsIGRlc2NyaXB0aW9uOiAnU2tpcCBTRVMgaWRlbnRpdHkgY3JlYXRpb24gKGRvbWFpbiBhbHJlYWR5IHZlcmlmaWVkKScsIGJvb2xlYW46IHRydWUgfSxcbl07XG5cbi8vIC0tLSBUYXJnZXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFRBUkdFVFM6IFJlYWRvbmx5PFJlY29yZDxUYXJnZXRJZCwgVGFyZ2V0U3BlYz4+ID0ge1xuICBsb2NhbDoge1xuICAgIGlkOiAnbG9jYWwnLFxuICAgIGxhYmVsOiAnTG9jYWwgKERvY2tlciBDb21wb3NlKScsXG4gICAgZGlyOiAnZGVwbG95L2xvY2FsJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvbG9jYWwnXSxcbiAgICByZXF1aXJlZDogW10sXG4gICAgb3B0aW9uYWw6IFtdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBsb2NhbCcsXG4gICAgY29zdDogJ0ZyZWUnLFxuICAgIGJlc3RGb3I6ICdEZXZlbG9wbWVudCcsXG4gICAgZGVwbG95czogJ3RoZSBwbGF0Zm9ybSBhcyBhIERvY2tlciBDb21wb3NlIHN0YWNrIOKAlCBhbiBuZ2lueCBUTFMgcHJveHksIHRoZSBBUEkgc2VydmljZXMgKHBsYXRmb3JtLCBwbHVnaW4sIHBpcGVsaW5lLCBtZXNzYWdlLCByZXBvcnRpbmcsIGNvbXBsaWFuY2UsIHF1b3RhLCBiaWxsaW5nLCBpbWFnZS1yZWdpc3RyeSksIHRoZSBmcm9udGVuZCwgYW5kIHBvc3RncmVzICsgbW9uZ28gKyByZWRpcy4gRmlyc3QgcnVuIHB1bGxzIHRoZSBnaGNyLmlvIGltYWdlcyBhbmQgZ2VuZXJhdGVzIGEgbG9jYWwgVExTIGNlcnQgKGEgZmV3IG1pbnV0ZXMpLicsXG4gICAgZGVzdHJveXM6ICdzdG9wcyBhbGwgY29udGFpbmVycyDigJQgZGF0YSB1bmRlciBkZXBsb3kvbG9jYWwvZGF0YSBwZXJzaXN0cyBvbiBkaXNrIChkZWxldGUgaXQgbWFudWFsbHkgZm9yIGEgY2xlYW4gc2xhdGUpJyxcbiAgICAvLyBNaXJyb3JzIHRoZSBwdWJsaXNoZWQgcG9ydHMgaW4gZGVwbG95L2xvY2FsL2RvY2tlci1jb21wb3NlLnltbC5cbiAgICBob3N0UG9ydHM6IFtcbiAgICAgIHsgc2VydmljZTogJ25naW54IOKAlCBIVFRQUyBnYXRld2F5IChVSS9BUEkpJywgcG9ydDogODQ0MyB9LFxuICAgICAgeyBzZXJ2aWNlOiAnbmdpbngg4oCUIEhUVFAgcmVkaXJlY3QnLCBwb3J0OiA4MDgwIH0sXG4gICAgICB7IHNlcnZpY2U6ICdwZ0FkbWluIChQb3N0Z3JlcyBVSSknLCBwb3J0OiA1NDgwIH0sXG4gICAgICB7IHNlcnZpY2U6ICdNb25nbyBFeHByZXNzIChNb25nbyBVSSknLCBwb3J0OiAyNzA4MSB9LFxuICAgICAgeyBzZXJ2aWNlOiAnRG9ja2VyIHJlZ2lzdHJ5JywgcG9ydDogNTAwMCB9LFxuICAgICAgeyBzZXJ2aWNlOiAnSmFlZ2VyICh0cmFjaW5nIFVJKScsIHBvcnQ6IDE2Njg2IH0sXG4gICAgXSxcbiAgfSxcbiAgbWluaWt1YmU6IHtcbiAgICBpZDogJ21pbmlrdWJlJyxcbiAgICBsYWJlbDogJ01pbmlrdWJlIChsb2NhbCBLdWJlcm5ldGVzKScsXG4gICAgZGlyOiAnZGVwbG95L21pbmlrdWJlJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvbWluaWt1YmUnXSxcbiAgICByZXF1aXJlZDogW10sXG4gICAgb3B0aW9uYWw6IFtdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBtaW5pa3ViZScsXG4gICAgY29zdDogJ0ZyZWUnLFxuICAgIGJlc3RGb3I6ICdMb2NhbCBLdWJlcm5ldGVzJyxcbiAgICBkZXBsb3lzOiAndGhlIHBsYXRmb3JtIG9udG8gYSBsb2NhbCBNaW5pa3ViZSBjbHVzdGVyIOKAlCB0aGUgc2FtZSBzZXJ2aWNlcyBhcyBLdWJlcm5ldGVzIERlcGxveW1lbnRzL1NlcnZpY2VzIGJlaGluZCBhbiBpbmdyZXNzLCBwbHVzIGluLWNsdXN0ZXIgcG9zdGdyZXMgKyBtb25nbyArIHJlZGlzLiBGaXJzdCBydW4gcHVsbHMgaW1hZ2VzLCBidWlsZHMgdGhlIGNsdXN0ZXIsIGFuZCBnZW5lcmF0ZXMgYSBUTFMgY2VydCAoc2V2ZXJhbCBtaW51dGVzKS4nLFxuICAgIGRlc3Ryb3lzOiAnc3RvcHMgdGhlIG1pbmlrdWJlIHN0YWNrIOKAlCBwZXJzaXN0ZW50IHZvbHVtZXMgKFBWQyBkYXRhKSByZW1haW4gdW50aWwgdGhlIGNsdXN0ZXIgaXMgZGVsZXRlZCcsXG4gICAgLy8gTWlycm9ycyB0aGUga3ViZWN0bCBwb3J0LWZvcndhcmRzIHN0YXJ0ZWQgaW4gZGVwbG95L21pbmlrdWJlL2Jpbi9zZXR1cC5zaC5cbiAgICBob3N0UG9ydHM6IFtcbiAgICAgIHsgc2VydmljZTogJ25naW54IOKAlCBIVFRQUyBnYXRld2F5IChVSS9BUEkpJywgcG9ydDogODQ0MyB9LFxuICAgICAgeyBzZXJ2aWNlOiAnTW9uZ28gRXhwcmVzcyAoTW9uZ28gVUkpJywgcG9ydDogODA4MSB9LFxuICAgICAgeyBzZXJ2aWNlOiAncGdBZG1pbiAoUG9zdGdyZXMgVUkpJywgcG9ydDogNTQ4MCB9LFxuICAgIF0sXG4gIH0sXG4gIGVjMjoge1xuICAgIGlkOiAnZWMyJyxcbiAgICBsYWJlbDogJ0FXUyBFQzIgKHNpbmdsZSBNaW5pa3ViZSBpbnN0YW5jZSBiZWhpbmQgYW4gQUxCKScsXG4gICAgZGlyOiAnZGVwbG95L2F3cy9lYzInLFxuICAgIGVudHJ5cG9pbnQ6ICdiaW4vc2V0dXAuc2gnLFxuICAgIHNwYXJzZVBhdGhzOiBbJ2RlcGxveS9hd3MvZWMyJ10sXG4gICAgcmVxdWlyZWQ6IFtLRVlfUEFJUiwgRE9NQUlOLCBIT1NURURfWk9ORV0sXG4gICAgb3B0aW9uYWw6IFtSRUdJT04sIERFUExPWV9NT0RFLCBHSENSX1RPS0VOLCBJTlNUQU5DRV9UWVBFLCBTVEFDS19OQU1FLCBBVVRPX0lOSVQsIE5PX0FVVE9fSU5JVCwgLi4uRU1BSUxdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBlYzIgICMgYXV0by1ydW5zIG9uIHRoZSBpbnN0YW5jZSBieSBkZWZhdWx0OyAtLW5vLWF1dG8taW5pdCB0byBkbyBpdCBtYW51YWxseScsXG4gICAgY29zdDogJ34kMTQwLTI2NS9tbycsXG4gICAgYmVzdEZvcjogJ0RldiAvIHN0YWdpbmcnLFxuICAgIGRlcGxveXM6ICd0aGUgcGxhdGZvcm0gb24gYSBzaW5nbGUgRUMyIGluc3RhbmNlIHZpYSBDbG91ZEZvcm1hdGlvbiDigJQgYSBWUEMsIHRoZSBpbnN0YW5jZSAocnVubmluZyB0aGUgTWluaWt1YmUgc3RhY2spLCBhbiBBTEIsIGEgUm91dGUgNTMgcmVjb3JkICsgQUNNIGNlcnQgZm9yIHRoZSBkb21haW4sIGFuZCAoYnkgZGVmYXVsdCkgU0VTIGVtYWlsLiBUaGUgaW5zdGFuY2UgcHVsbHMgaW1hZ2VzIG9uIGZpcnN0IGJvb3QuJyxcbiAgICBkZXN0cm95czogJ0RFTEVURVMgdGhlIENsb3VkRm9ybWF0aW9uIHN0YWNrOiB0aGUgVlBDLCBFQzIgaW5zdGFuY2UsIGFuZCBpdHMgRUJTIGRhdGEgdm9sdW1lIChkYXRhYmFzZXMsIHJlZ2lzdHJ5LCBwbHVnaW4gYnVpbGRzKS4gSXJyZXZlcnNpYmxlLicsXG4gICAgaG9zdFBvcnRzOiBbXSwgLy8gcmVtb3RlIChBV1MpIOKAlCBiaW5kcyBub3RoaW5nIG9uIHRoZSBvcGVyYXRvcidzIG1hY2hpbmVcbiAgfSxcbiAgZmFyZ2F0ZToge1xuICAgIGlkOiAnZmFyZ2F0ZScsXG4gICAgbGFiZWw6ICdBV1MgRmFyZ2F0ZSAoc2VydmVybGVzcyBFQ1MsIDYgQ2xvdWRGb3JtYXRpb24gc3RhY2tzKScsXG4gICAgZGlyOiAnZGVwbG95L2F3cy9mYXJnYXRlJyxcbiAgICBlbnRyeXBvaW50OiAnYmluL3NldHVwLnNoJyxcbiAgICBzcGFyc2VQYXRoczogWydkZXBsb3kvYXdzL2ZhcmdhdGUnXSxcbiAgICByZXF1aXJlZDogW0RPTUFJTiwgSE9TVEVEX1pPTkVdLFxuICAgIG9wdGlvbmFsOiBbUkVHSU9OLCBERVBMT1lfTU9ERSwgR0hDUl9UT0tFTiwgU1RBQ0tfUFJFRklYLCBBVVRPX0lOSVQsIE5PX0FVVE9fSU5JVCwgLi4uRU1BSUxdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBmYXJnYXRlICAjIGF1dG8tcnVucyBhcyBhIG9uZS1zaG90IEVDUyB0YXNrIGJ5IGRlZmF1bHQ7IC0tbm8tYXV0by1pbml0IHRvIHJ1biBpdCBtYW51YWxseSBmcm9tIGEgVlBDIGhvc3QnLFxuICAgIGNvc3Q6ICd+JDEwMC0zMDAvbW8nLFxuICAgIGJlc3RGb3I6ICdQcm9kdWN0aW9uJyxcbiAgICBkZXBsb3lzOiAndGhlIHBsYXRmb3JtIG9uIHNlcnZlcmxlc3MgRUNTIEZhcmdhdGUgdmlhIDYgQ2xvdWRGb3JtYXRpb24gc3RhY2tzIOKAlCBhIFZQQywgYW4gQUxCLCB0aGUgRUNTIHNlcnZpY2VzLCBFRlMtYmFja2VkIGRhdGFiYXNlcyArIHJlZ2lzdHJ5LCBSb3V0ZSA1MyArIEFDTSBmb3IgdGhlIGRvbWFpbiwgYW5kIChieSBkZWZhdWx0KSBTRVMgZW1haWwuIFNlY3JldHMgYXJlIGdlbmVyYXRlZCBpbnRvIFNlY3JldHMgTWFuYWdlciBmaXJzdC4nLFxuICAgIGRlc3Ryb3lzOiAnREVMRVRFUyBhbGwgcGItKiBDbG91ZEZvcm1hdGlvbiBzdGFja3M6IEVGUyBkYXRhLCBkYXRhYmFzZXMsIGFuZCByZWdpc3RyeS4gU2VjcmV0cyBNYW5hZ2VyIGVudHJpZXMgYXJlIE5PVCBhdXRvLWRlbGV0ZWQuIElycmV2ZXJzaWJsZS4nLFxuICAgIGhvc3RQb3J0czogW10sIC8vIHJlbW90ZSAoQVdTKSDigJQgYmluZHMgbm90aGluZyBvbiB0aGUgb3BlcmF0b3IncyBtYWNoaW5lXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgVEFSR0VUX0lEUzogcmVhZG9ubHkgVGFyZ2V0SWRbXSA9IFsnbG9jYWwnLCAnbWluaWt1YmUnLCAnZWMyJywgJ2ZhcmdhdGUnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFyZ2V0SWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUYXJnZXRJZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIChUQVJHRVRfSURTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh2YWx1ZSk7XG59XG5cbi8vIC0tLSBTcGFyc2UgYm9vdHN0cmFwIHBhdGhzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBGb2xkZXJzIGV2ZXJ5IGAtLXJlcG9gIGJvb3RzdHJhcCBuZWVkcyByZWdhcmRsZXNzIG9mIHRhcmdldDogdGhlIG9yY2hlc3RyYXRpb25cbiAqIHNjcmlwdHMuIEVhY2ggdGFyZ2V0J3Mgc2V0dXAuc2ggKyBpbml0LXBsYXRmb3JtLnNoIGxpdmUgaW4gLyBkcml2ZSB0aGVzZS5cbiAqIERlbGliZXJhdGVseSBtaW5pbWFsIOKAlCBoZWF2aWVyIGZvbGRlcnMgKHBsdWdpbnMvY29tcGxpYW5jZS9zYW1wbGVzKSBhcmUgcHVsbGVkXG4gKiBpbiBvbmx5IHdoZW4gdGhlaXIgcG9zdC1pbnN0YWxsIG9wdGlvbiBpcyBzZWxlY3RlZCAoc2VlIExPQURfU1RFUFMpLlxuICovXG5leHBvcnQgY29uc3QgQ09NTU9OX1NQQVJTRV9QQVRIUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ2RlcGxveS9iaW4nXTtcblxuLyoqXG4gKiBPcHQtaW4gcG9zdC1pbnN0YWxsIGxvYWQgc3RlcHMuIEVhY2ggbWFwcyBhIHByb3Zpc2lvbiBgLS13aXRoLSpgIGZsYWcgdG8gdGhlXG4gKiBpbml0LXBsYXRmb3JtIGVudiB2YXIgdGhhdCBlbmFibGVzIGl0IEFORCB0aGUgcmVwbyBmb2xkZXIocykgaXQgcmVhZHMg4oCUIHNvIHRoZVxuICogc3BhcnNlIGNoZWNrb3V0IGdyb3dzIGV4YWN0bHkgd2l0aCB0aGUgc2VsZWN0ZWQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IExPQURfU1RFUFMgPSBbXG4gIC8vIFRoZSBwbHVnaW4gYnVpbGQgcmVhZHMgZGVwbG95L3BsdWdpbnMvX2Jhc2UgQU5EIGRlcGxveS9jb2RlYnVpbGQvYm9vdHN0cmFwLlxuICB7IGlkOiAncGx1Z2lucycsIGZsYWc6ICd3aXRoUGx1Z2lucycsIGVudjogJ0xPQURfUExVR0lOUycsIHBhdGhzOiBbJ2RlcGxveS9wbHVnaW5zJywgJ2RlcGxveS9jb2RlYnVpbGQnXSB9LFxuICB7IGlkOiAnY29tcGxpYW5jZScsIGZsYWc6ICd3aXRoQ29tcGxpYW5jZScsIGVudjogJ0xPQURfQ09NUExJQU5DRScsIHBhdGhzOiBbJ2RlcGxveS9jb21wbGlhbmNlJ10gfSxcbiAgeyBpZDogJ3NhbXBsZXMnLCBmbGFnOiAnd2l0aFNhbXBsZXMnLCBlbnY6ICdMT0FEX1BJUEVMSU5FUycsIHBhdGhzOiBbJ2RlcGxveS9zYW1wbGVzJ10gfSxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIExvYWRTdGVwSWQgPSAodHlwZW9mIExPQURfU1RFUFMpW251bWJlcl1bJ2lkJ107XG5cbi8qKlxuICogVGhlIGRlLWR1cGxpY2F0ZWQgc2V0IG9mIHNwYXJzZSBwYXRocyBmb3IgYSB0YXJnZXQgcGx1cyB0aGUgZW5hYmxlZCBsb2FkXG4gKiBzdGVwczogY29tbW9uIGJhc2Ug4oiqIHRhcmdldCBmb2xkZXIocykg4oiqIGVhY2ggZW5hYmxlZCBzdGVwJ3MgZm9sZGVyKHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BhcnNlUGF0aHNGb3IodGFyZ2V0OiBUYXJnZXRJZCwgZW5hYmxlZExvYWRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXRocyA9IG5ldyBTZXQ8c3RyaW5nPihDT01NT05fU1BBUlNFX1BBVEhTKTtcbiAgZm9yIChjb25zdCBwIG9mIFRBUkdFVFNbdGFyZ2V0XS5zcGFyc2VQYXRocykgcGF0aHMuYWRkKHApO1xuICBmb3IgKGNvbnN0IHN0ZXAgb2YgTE9BRF9TVEVQUykge1xuICAgIGlmIChlbmFibGVkTG9hZElkcy5pbmNsdWRlcyhzdGVwLmlkKSkgZm9yIChjb25zdCBwIG9mIHN0ZXAucGF0aHMpIHBhdGhzLmFkZChwKTtcbiAgfVxuICByZXR1cm4gWy4uLnBhdGhzXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3NlbWJsZVJlc3VsdCB7XG4gIC8qKiBUaGUgZXhhY3QgY29tbWFuZCB0byBydW4g4oCUIHNlY3JldHMgbWFza2VkIGFzIGAqKipgLiAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIC8qKiBSZXF1aXJlZCBpbnB1dHMgdGhhdCB3ZXJlIG5vdCBzdXBwbGllZC4gKi9cbiAgcmVhZG9ubHkgbWlzc2luZzogcmVhZG9ubHkgSW5wdXRTcGVjW107XG59XG5cbi8qKlxuICogQXNzZW1ibGUgdGhlIGRlcGxveSBjb21tYW5kIGZvciBhIHRhcmdldCBmcm9tIHRoZSBwcm92aWRlZCBwYXJhbXMuIFB1cmUgYW5kXG4gKiBkZXRlcm1pbmlzdGljIOKAlCBubyBzaGVsbCwgbm8gTExNLiBNaXNzaW5nIHJlcXVpcmVkIGlucHV0cyBhcmUgcmVwb3J0ZWQgKG5ldmVyXG4gKiBndWVzc2VkKS4gQnkgZGVmYXVsdCBzZWNyZXRzIGFyZSBtYXNrZWQgKGAqKipgKSBmb3IgRElTUExBWTsgcGFzcyBgbWFzazogZmFsc2VgXG4gKiB0byBidWlsZCB0aGUgcmVhbCBjb21tYW5kIGZvciBFWEVDVVRJT04g4oCUIHRoYXQgc3RyaW5nIG11c3QgbmV2ZXIgYmUgbG9nZ2VkIG9yXG4gKiBzaG93biB0byB0aGUgbW9kZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlbWJsZUNvbW1hbmQoXG4gIHRhcmdldDogVGFyZ2V0U3BlYyxcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0czogeyBtYXNrPzogYm9vbGVhbiB9ID0ge30sXG4pOiBBc3NlbWJsZVJlc3VsdCB7XG4gIGNvbnN0IG1hc2sgPSBvcHRzLm1hc2sgPz8gdHJ1ZTtcbiAgY29uc3QgcHJvdmlkZWQgPSAoc3BlYzogSW5wdXRTcGVjKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgdiA9IHBhcmFtc1tzcGVjLmtleV07XG4gICAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSAnJyAmJiB2ICE9PSBmYWxzZTtcbiAgfTtcblxuICBjb25zdCBtaXNzaW5nID0gdGFyZ2V0LnJlcXVpcmVkLmZpbHRlcigoc3BlYykgPT4gIXByb3ZpZGVkKHNwZWMpKTtcblxuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbYGNkICR7dGFyZ2V0LmRpcn0gJiYgYmFzaCAke3RhcmdldC5lbnRyeXBvaW50fWBdO1xuICBmb3IgKGNvbnN0IHNwZWMgb2YgWy4uLnRhcmdldC5yZXF1aXJlZCwgLi4udGFyZ2V0Lm9wdGlvbmFsXSkge1xuICAgIGlmICghcHJvdmlkZWQoc3BlYykpIGNvbnRpbnVlO1xuICAgIGlmIChzcGVjLmJvb2xlYW4pIHtcbiAgICAgIHBhcnRzLnB1c2goYC0tJHtzcGVjLmZsYWd9YCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgcmF3ID0gU3RyaW5nKHBhcmFtc1tzcGVjLmtleV0pO1xuICAgIC8vIFRoZSBhc3NlbWJsZWQgY29tbWFuZCBpcyBleGVjdXRlZCB2aWEgYSBzaGVsbCAocnVuU2NyaXB0KSwgc28gYSBwYXJhbVxuICAgIC8vIHZhbHVlIGNhcnJ5aW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHdvdWxkIGJlIGNvbW1hbmQgaW5qZWN0aW9uLiBWYWxpZGF0ZVxuICAgIC8vIHRoZSBSRUFMIHZhbHVlIGV2ZW4gd2hlbiBtYXNraW5nIGZvciBkaXNwbGF5IOKAlCB0aGUgZXhlY3V0ZWQgY29tbWFuZCB1c2VzXG4gICAgLy8gdGhlIHVubWFza2VkIHZhbHVlLiBSZWRhY3Qgc2VjcmV0cyBzbyB0aGUgZXJyb3IgbmV2ZXIgZWNob2VzIGEgdG9rZW4uXG4gICAgYXNzZXJ0U2hlbGxTYWZlKHJhdywgYC0tJHtzcGVjLmZsYWd9YCwgeyByZWRhY3RWYWx1ZTogc3BlYy5zZWNyZXQgfSk7XG4gICAgY29uc3QgdmFsdWUgPSBzcGVjLnNlY3JldCAmJiBtYXNrID8gJyoqKicgOiByYXc7XG4gICAgcGFydHMucHVzaChgLS0ke3NwZWMuZmxhZ30gJHt2YWx1ZX1gKTtcbiAgfVxuXG4gIHJldHVybiB7IGNvbW1hbmQ6IHBhcnRzLmpvaW4oJyBcXFxcXFxuICAnKSwgbWlzc2luZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlYXJkb3duUmVzdWx0IHtcbiAgLyoqIFRoZSBleGFjdCB0ZWFyZG93biBjb21tYW5kIHRvIHJ1bi4gKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGlzIHRlYXJkb3duIGlycmV2ZXJzaWJseSBkZXN0cm95cyBkYXRhIChBV1MgdGFyZ2V0cykuICovXG4gIHJlYWRvbmx5IGRlc3RydWN0aXZlOiBib29sZWFuO1xufVxuXG4vKiogQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZSB0aGUgRUMyIHNldHVwLnNoIGRlZmF1bHRzIHRvLiAqL1xuY29uc3QgREVGQVVMVF9FQzJfU1RBQ0sgPSAncGlwZWxpbmUtYnVpbGRlcic7XG4vKiogU3RhY2sgcHJlZml4IHRoZSBGYXJnYXRlIHRlYXJkb3duLnNoIGRlZmF1bHRzIHRvLiAqL1xuY29uc3QgREVGQVVMVF9GQVJHQVRFX1BSRUZJWCA9ICdwYic7XG5cbi8qKlxuICogQXNzZW1ibGUgdGhlIHRlYXJkb3duIGNvbW1hbmQgZm9yIGEgdGFyZ2V0LiBQdXJlIGFuZCBkZXRlcm1pbmlzdGljIOKAlCBtaXJyb3JzXG4gKiBgYXNzZW1ibGVDb21tYW5kYCBmb3IgdGhlIGRlc3Ryb3kgcGF0aC4gbG9jYWwvbWluaWt1YmUgU1RPUCB0aGUgc3RhY2tcbiAqIChub24tZGVzdHJ1Y3RpdmUg4oCUIG9uLWRpc2sgLyBQVkMgZGF0YSBzdXJ2aXZlcyk7IGVjMi9mYXJnYXRlIERFTEVURSB0aGVpclxuICogQ2xvdWRGb3JtYXRpb24gc3RhY2tzIGFuZCBhcmUgaXJyZXZlcnNpYmxlLiBGb3IgRmFyZ2F0ZSwgYGFzc3VtZVllc2AgZm9yd2FyZHNcbiAqIHRoZSBuYXRpdmUgc2NyaXB0J3Mgb3duIGAtLXllc2AgKHRoZSBhZ2VudCBydW5zIGl0cyBvd24gdHlwZWQgY29uZmlybWF0aW9uXG4gKiBmaXJzdCwgc28gdGhlIHNjcmlwdCBtdXN0IG5vdCBhbHNvIGJsb2NrIG9uIHN0ZGluKTsgRUMyIGBkZWxldGUtc3RhY2tgIGhhcyBub1xuICogbmF0aXZlIHByb21wdCwgd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhlIGFnZW50IGdhdGUgaXMgbWFuZGF0b3J5IHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGVhcmRvd25Db21tYW5kKFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBvcHRzOiB7IHN0YWNrTmFtZT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBhc3N1bWVZZXM/OiBib29sZWFuIH0gPSB7fSxcbik6IFRlYXJkb3duUmVzdWx0IHtcbiAgY29uc3QgcmVnaW9uID0gb3B0cy5yZWdpb24gfHwgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fCAndXMtZWFzdC0xJztcbiAgLy8gc3RhY2tOYW1lL3JlZ2lvbiBmbG93IHVucXVvdGVkIGludG8gYSBzaGVsbC1leGVjdXRlZCB0ZWFyZG93biBjb21tYW5kIOKAlFxuICAvLyByZWplY3Qgc2hlbGwgbWV0YWNoYXJhY3RlcnMgKG1pcnJvcnMgYXNzZW1ibGVDb21tYW5kKS5cbiAgYXNzZXJ0U2hlbGxTYWZlKHJlZ2lvbiwgJ3JlZ2lvbicpO1xuICBpZiAob3B0cy5zdGFja05hbWUpIGFzc2VydFNoZWxsU2FmZShvcHRzLnN0YWNrTmFtZSwgJ3N0YWNrLW5hbWUnKTtcbiAgc3dpdGNoICh0YXJnZXQpIHtcbiAgICBjYXNlICdsb2NhbCc6XG4gICAgICByZXR1cm4geyBjb21tYW5kOiAnY2QgZGVwbG95L2xvY2FsICYmIGJhc2ggYmluL3NodXRkb3duLnNoJywgZGVzdHJ1Y3RpdmU6IGZhbHNlIH07XG4gICAgY2FzZSAnbWluaWt1YmUnOlxuICAgICAgcmV0dXJuIHsgY29tbWFuZDogJ2NkIGRlcGxveS9taW5pa3ViZSAmJiBiYXNoIGJpbi9zaHV0ZG93bi5zaCcsIGRlc3RydWN0aXZlOiBmYWxzZSB9O1xuICAgIGNhc2UgJ2VjMic6IHtcbiAgICAgIGNvbnN0IHN0YWNrID0gb3B0cy5zdGFja05hbWUgfHwgREVGQVVMVF9FQzJfU1RBQ0s7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kOlxuICAgICAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVsZXRlLXN0YWNrIC0tc3RhY2stbmFtZSAke3N0YWNrfSAtLXJlZ2lvbiAke3JlZ2lvbn0gJiYgYCArXG4gICAgICAgICAgYGF3cyBjbG91ZGZvcm1hdGlvbiB3YWl0IHN0YWNrLWRlbGV0ZS1jb21wbGV0ZSAtLXN0YWNrLW5hbWUgJHtzdGFja30gLS1yZWdpb24gJHtyZWdpb259YCxcbiAgICAgICAgZGVzdHJ1Y3RpdmU6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdmYXJnYXRlJzoge1xuICAgICAgY29uc3QgcHJlZml4ID0gb3B0cy5zdGFja05hbWUgfHwgREVGQVVMVF9GQVJHQVRFX1BSRUZJWDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQ6XG4gICAgICAgICAgYGNkIGRlcGxveS9hd3MvZmFyZ2F0ZSAmJiBiYXNoIGJpbi90ZWFyZG93bi5zaCAtLXN0YWNrLXByZWZpeCAke3ByZWZpeH0gLS1yZWdpb24gJHtyZWdpb259YCArXG4gICAgICAgICAgKG9wdHMuYXNzdW1lWWVzID8gJyAtLXllcycgOiAnJyksXG4gICAgICAgIGRlc3RydWN0aXZlOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC90YXJnZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFzRDdELCtFQUErRTtBQUUvRSxNQUFNLE1BQU0sR0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsdURBQXVELEVBQUUsQ0FBQztBQUNsSSxNQUFNLFdBQVcsR0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQzNKLE1BQU0sVUFBVSxHQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxzRUFBc0UsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUssTUFBTSxNQUFNLEdBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ3ZGLE1BQU0sV0FBVyxHQUFjLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSw2REFBNkQsRUFBRSxDQUFDO0FBQ3RKLE1BQU0sUUFBUSxHQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnRkFBZ0YsRUFBRSxDQUFDO0FBQ2hLLE1BQU0sYUFBYSxHQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxDQUFDO0FBQ3ZJLDRGQUE0RjtBQUM1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QUFJLENBQUMsU0FBUyxJQUFJLGlCQUFpQixDQUFDO1lBQ2xELE9BQU87Z0JBQ0wsT0FBTyxFQUNMLGdEQUFnRCxLQUFLLGFBQWEsTUFBTSxNQUFNO29CQUM5RSw4REFBOEQsS0FBSyxhQUFhLE1BQU0sRUFBRTtnQkFDMUYsV0FBVyxFQUFFLElBQUk7YUFDbEIsQ0FBQztRQUNKLENBQUM7UUFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxnRkFBZ0Y7WUFDaEYsK0VBQStFO1lBQy9FLDZFQUE2RTtZQUM3RSx5RUFBeUU7WUFDekUsdUJBQXVCO1lBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksbUJBQW1CLENBQUM7WUFDeEQsSUFBSSxPQUFPLEdBQUcsNERBQTRELE9BQU8sYUFBYSxNQUFNLEVBQUUsQ0FBQztZQUN2RyxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxhQUFhLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2RCxJQUFJLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU8sSUFBSSxxQkFBcUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNFLElBQUksSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLFFBQVEsQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBEZXRlcm1pbmlzdGljIHJlZ2lzdHJ5IG9mIHBsYXRmb3JtIGRlcGxveSB0YXJnZXRzIOKAlCB0aGUgc291cmNlIG9mIHRydXRoIHRoZVxuICogYHByb3Zpc2lvbmAgYWR2aXNvciB1c2VzIHRvIGFzc2VtYmxlIHRoZSBFWEFDVCBkZXBsb3kgY29tbWFuZC4gVGhlIGFnZW50IGlzIGFcbiAqIHRoaW4gd3JhcHBlciBvdmVyIHRoZSBleGlzdGluZyBkZXBsb3kgc2NyaXB0czsgaXQgbmV2ZXIgcmVpbXBsZW1lbnRzXG4gKiBkZXBsb3ltZW50LCBvbmx5IHZhbGlkYXRlcyBpbnB1dHMgYW5kIGFzc2VtYmxlcyB0aGUgY29tbWFuZCB0byBydW4uXG4gKlxuICogS2VlcCB0aGlzIGluIGxvY2stc3RlcCB3aXRoIHRoZSBmbGFncyB0aGUgc2NyaXB0cyBhY2NlcHQg4oCUIGV2ZXJ5IHRhcmdldCdzXG4gKiBvcGVyYXRvciBlbnRyeXBvaW50IGlzIGBiaW4vc2V0dXAuc2hgIChkZXBsb3kvPHRhcmdldD4vYmluL3NldHVwLnNoKS5cbiAqL1xuXG5pbXBvcnQgeyBhc3NlcnRTaGVsbFNhZmUgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5cbmV4cG9ydCB0eXBlIFRhcmdldElkID0gJ2xvY2FsJyB8ICdtaW5pa3ViZScgfCAnZWMyJyB8ICdla3MnO1xuXG4vKiogQSBzaW5nbGUgaW5wdXQgdGhlIHVuZGVybHlpbmcgZGVwbG95IHNjcmlwdCBhY2NlcHRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnB1dFNwZWMge1xuICAvKiogRmxhZyBuYW1lIHBhc3NlZCB0byB0aGUgc2NyaXB0ICh3aXRob3V0IHRoZSBsZWFkaW5nIGAtLWApLiAqL1xuICByZWFkb25seSBmbGFnOiBzdHJpbmc7XG4gIC8qKiBLZXkgb24gdGhlIHByb3Zpc2lvbiBwYXJhbXMgb2JqZWN0LiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uIOKAlCBzaG93biB3aGVuIGEgcmVxdWlyZWQgaW5wdXQgaXMgbWlzc2luZy4gKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFNlY3JldCDigJQgbmV2ZXIgcHJpbnRlZCBpbiB0aGUgYXNzZW1ibGVkIGNvbW1hbmQgKG1hc2tlZCBhcyBgKioqYCkuICovXG4gIHJlYWRvbmx5IHNlY3JldD86IGJvb2xlYW47XG4gIC8qKiBCb29sZWFuIGZsYWcgd2l0aCBubyB2YWx1ZSAoZS5nLiBgLS1lbWFpbGApLiAqL1xuICByZWFkb25seSBib29sZWFuPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRTcGVjIHtcbiAgcmVhZG9ubHkgaWQ6IFRhcmdldElkO1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICAvKiogRGlyZWN0b3J5IHRoZSBlbnRyeXBvaW50IHJ1bnMgZnJvbSAocmVsYXRpdmUgdG8gcmVwbyByb290KS4gKi9cbiAgcmVhZG9ubHkgZGlyOiBzdHJpbmc7XG4gIC8qKiBFbnRyeXBvaW50IHNjcmlwdCAocmVsYXRpdmUgdG8gYGRpcmApLiAqL1xuICByZWFkb25seSBlbnRyeXBvaW50OiBzdHJpbmc7XG4gIC8qKiBJbnB1dHMgdGhlIHNjcmlwdCBSRVFVSVJFUyDigJQgdGhlIGFkdmlzb3IgcmVwb3J0cyBhbnkgdGhhdCBhcmUgbWlzc2luZy4gKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWQ6IHJlYWRvbmx5IElucHV0U3BlY1tdO1xuICAvKiogT3B0aW9uYWwgaW5wdXRzLCBwYXNzZWQgdGhyb3VnaCBvbmx5IHdoZW4gcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsOiByZWFkb25seSBJbnB1dFNwZWNbXTtcbiAgLyoqXG4gICAqIFJlcG8gZm9sZGVyKHMpIHRoaXMgdGFyZ2V0J3MgZGVwbG95IG5lZWRzLCBmb3IgYSBzcGFyc2UgYC0tcmVwb2AgYm9vdHN0cmFwLlxuICAgKiBDb21iaW5lZCB3aXRoIENPTU1PTl9TUEFSU0VfUEFUSFMgYW5kIGFueSBzZWxlY3RlZCBsb2FkIHN0ZXBzJyBwYXRocy5cbiAgICovXG4gIHJlYWRvbmx5IHNwYXJzZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFBvc3QtZGVwbG95IHN0ZXAgdG8gc3VyZmFjZSAocmVnaXN0ZXJzIGFkbWluICsgbG9hZHMgcGx1Z2lucykuICovXG4gIHJlYWRvbmx5IHBvc3REZXBsb3k/OiBzdHJpbmc7XG4gIC8qKiBSb3VnaCBtb250aGx5IGNvc3QgKGZyb20gZG9jcykuICovXG4gIHJlYWRvbmx5IGNvc3Q6IHN0cmluZztcbiAgLyoqIE9uZS1saW5lIFwiYmVzdCBmb3JcIi4gKi9cbiAgcmVhZG9ubHkgYmVzdEZvcjogc3RyaW5nO1xuICAvKiogV2hhdCB0aGUgZGVwbG95IGNyZWF0ZXMg4oCUIHNob3duIHdoZW4gZGVwbG95aW5nIHNvIFwiRGVwbG95aW5nXCIgaXNuJ3Qgb3BhcXVlLiAqL1xuICByZWFkb25seSBkZXBsb3lzOiBzdHJpbmc7XG4gIC8qKiBXaGF0IGEgdGVhcmRvd24gb2YgdGhpcyB0YXJnZXQgZGVzdHJveXMg4oCUIHNob3duIGJlZm9yZSBhIChnYXRlZCkgdGVhcmRvd24uICovXG4gIHJlYWRvbmx5IGRlc3Ryb3lzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3N0IHBvcnRzIHRoZSBkZXBsb3kgYmluZHMg4oCUIGEgRkFMTEJBQ0sgb25seS4gVGhlIGxpdmUgbGlzdCBpcyBERVJJVkVEIGZyb20gdGhlXG4gICAqIGNsb25lZCBkZXBsb3kgc291cmNlIGF0IHJ1bnRpbWUgKHBvcnRzLnRzIGBkaXNjb3Zlckhvc3RQb3J0c2ApOiBsb2NhbCBmcm9tXG4gICAqIGRvY2tlci1jb21wb3NlLnltbCdzIHB1Ymxpc2hlZCBwb3J0cywgbWluaWt1YmUgZnJvbSBzZXR1cC5zaCdzIHBvcnQtZm9yd2FyZHMuIFRoaXNcbiAgICogc3RhdGljIGNvcHkgaXMgdXNlZCBvbmx5IHdoZW4gdGhhdCBzb3VyY2UgY2FuJ3QgYmUgcmVhZC4gRW1wdHkgZm9yIHJlbW90ZSB0YXJnZXRzXG4gICAqIChlYzIvZWtzIGJpbmQgbm90aGluZyBvbiB0aGUgb3BlcmF0b3IncyBtYWNoaW5lKS5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RQb3J0czogcmVhZG9ubHkgeyBzZXJ2aWNlOiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9W107XG59XG5cbi8vIC0tLSBTaGFyZWQgaW5wdXQgc3BlY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgRE9NQUlOOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkb21haW4nLCBrZXk6ICdkb21haW4nLCBkZXNjcmlwdGlvbjogJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoQUxCIEFDTSBjZXJ0ICsgU0VTIERLSU0pJyB9O1xuY29uc3QgSE9TVEVEX1pPTkU6IElucHV0U3BlYyA9IHsgZmxhZzogJ2hvc3RlZC16b25lLWlkJywga2V5OiAnaG9zdGVkWm9uZUlkJywgZGVzY3JpcHRpb246ICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlIGRvbWFpbicgfTtcbmNvbnN0IEdIQ1JfVE9LRU46IElucHV0U3BlYyA9IHsgZmxhZzogJ2doY3ItdG9rZW4nLCBrZXk6ICdnaGNyVG9rZW4nLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBQQVQgd2l0aCByZWFkOnBhY2thZ2VzIChhdm9pZHMgZ2hjci5pbyBhbm9ueW1vdXMgcmF0ZSBsaW1pdHMpJywgc2VjcmV0OiB0cnVlIH07XG5jb25zdCBSRUdJT046IElucHV0U3BlYyA9IHsgZmxhZzogJ3JlZ2lvbicsIGtleTogJ3JlZ2lvbicsIGRlc2NyaXB0aW9uOiAnQVdTIHJlZ2lvbicgfTtcbmNvbnN0IERFUExPWV9NT0RFOiBJbnB1dFNwZWMgPSB7IGZsYWc6ICdkZXBsb3ktbW9kZScsIGtleTogJ2RlcGxveU1vZGUnLCBkZXNjcmlwdGlvbjogJ3B1YmxpYyAoaW50ZXJuZXQtZmFjaW5nIEFMQikgb3IgcHJpdmF0ZSAoaW50ZXJuYWwsIGRlZmF1bHQpJyB9O1xuY29uc3QgS0VZX1BBSVI6IElucHV0U3BlYyA9IHsgZmxhZzogJ2tleS1wYWlyJywga2V5OiAna2V5UGFpcicsIGRlc2NyaXB0aW9uOiAnRUMyIGtleSBwYWlyIGluIHRoZSByZWdpb24gKGJyZWFrLWdsYXNzIHNlcmlhbCBjb25zb2xlOyByb3V0aW5lIGFjY2VzcyBpcyBTU00pJyB9O1xuY29uc3QgSU5TVEFOQ0VfVFlQRTogSW5wdXRTcGVjID0geyBmbGFnOiAnaW5zdGFuY2UtdHlwZScsIGtleTogJ2luc3RhbmNlVHlwZScsIGRlc2NyaXB0aW9uOiAnRUMyIGluc3RhbmNlIHR5cGUgKGRlZmF1bHQgdDMuMnhsYXJnZSknIH07XG4vLyBlYzIgZGVwbG95L3RlYXJkb3duIHN0YWNrIG5hbWUgKENsb3VkRm9ybWF0aW9uKS4gVGhlIGBzdGFja05hbWVgIHBhcmFtIGtleSBpcyBhbHNvIHJldXNlZFxuLy8gYnkgdGhlIHRlYXJkb3duIHBhdGggYXMgdGhlIHJlc291cmNlIGlkZW50aWZpZXIgKGVjMiBzdGFjayAvIGVrcyBjbHVzdGVyIG5hbWUpLlxuY29uc3QgU1RBQ0tfTkFNRTogSW5wdXRTcGVjID0geyBmbGFnOiAnc3RhY2stbmFtZScsIGtleTogJ3N0YWNrTmFtZScsIGRlc2NyaXB0aW9uOiAnQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZSAoZGVmYXVsdCBwaXBlbGluZS1idWlsZGVyKSDigJQgc2V0IHRvIHJ1biBhIHNlY29uZCBlYzIgZW52aXJvbm1lbnQnIH07XG4vLyBla3MgY2x1c3RlciBuYW1lIChla3NjdGwpLiBTZXQgdG8gcnVuIGEgc2Vjb25kIEVLUyBlbnZpcm9ubWVudCBpbiBvbmUgYWNjb3VudC5cbmNvbnN0IENMVVNURVJfTkFNRTogSW5wdXRTcGVjID0geyBmbGFnOiAnY2x1c3Rlci1uYW1lJywga2V5OiAnY2x1c3Rlck5hbWUnLCBkZXNjcmlwdGlvbjogJ0VLUyBjbHVzdGVyIG5hbWUgKGRlZmF1bHQgcGlwZWxpbmUtYnVpbGRlciknIH07XG4vLyBBdXRvLWluaXQgaXMgT04gQlkgREVGQVVMVCBvbiBlYzIgKHNldHVwLnNoL3RlbXBsYXRlIGRlZmF1bHQgdHJ1ZSksIHNvIGAtLW5vLWF1dG8taW5pdGBcbi8vIGlzIHRoZSBsb2FkLWJlYXJpbmcgb3B0LW91dCBhbmQgYC0tYXV0by1pbml0YCBpcyBhIG5vLW9wIHJlYWZmaXJtIOKAlCBtaXJyb3JzIC0tZW1haWwvLS1uby1lbWFpbC5cbi8vIE5PVEU6IGAtLW5vLWF1dG8taW5pdGAncyBrZXkgKG5vQXV0b0luaXQpIGlzIE5PVCBkZXJpdmFibGUgZnJvbSBpdHMgZmxhZyB0aGUgd2F5IHRoZSBvdGhlclxuLy8gc3BlY3MnIGtleXMgYXJlIChjb21tYW5kZXIgZm9sZHMgLS14Ly0tbm8teCBpbnRvIGEgc2luZ2xlIGB4YCBvcHRpb24pOyBwcm92aXNpb24udHMgYXNzZW1ibGVzXG4vLyBib3RoIGtleXMgZXhwbGljaXRseSDigJQgc2VlIHRoZSBwYXJhbS1hc3NlbWJseSB0aGVyZS4gKGVrcy9taW5pa3ViZSBydW4gaW5pdCB2aWEgcHJvdmlzaW9uLCBub3Rcbi8vIGEgZGVwbG95LW1hbmFnZWQgYXV0by1pbml0LCBzbyB0aGV5IGlnbm9yZSB0aGVzZS4pXG5jb25zdCBBVVRPX0lOSVQ6IElucHV0U3BlYyA9IHsgZmxhZzogJ2F1dG8taW5pdCcsIGtleTogJ2F1dG9Jbml0JywgZGVzY3JpcHRpb246ICdlYzI6IHRoZSBpbnN0YW5jZSBzZWxmLXJ1bnMgaW5pdC1wbGF0Zm9ybSBvbiBmaXJzdCBib290IChyZWdpc3RlciArIGFsbCBsb2Fkcykg4oCUIHRoZSBERUZBVUxUIG9uIGVjMicsIGJvb2xlYW46IHRydWUgfTtcbmNvbnN0IE5PX0FVVE9fSU5JVDogSW5wdXRTcGVjID0geyBmbGFnOiAnbm8tYXV0by1pbml0Jywga2V5OiAnbm9BdXRvSW5pdCcsIGRlc2NyaXB0aW9uOiAnZWMyOiBza2lwIHRoZSBvbi1ib290IGF1dG8taW5pdCBhbmQgcnVuIGluaXQtcGxhdGZvcm0gbWFudWFsbHkgb24gdGhlIGJveCBpbnN0ZWFkJywgYm9vbGVhbjogdHJ1ZSB9O1xuXG4vLyBTRVMgLyBlbWFpbCBmYW1pbHkg4oCUIHNoYXJlZCBieSBlYzIgKyBla3MuIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUXG4vLyBvbiBBV1MgZGVwbG95czsgYC0tbm8tZW1haWxgIGlzIHRoZSBvcHQtb3V0IChgLS1lbWFpbGAgaXMgYSBoYXJtbGVzcyBuby1vcCBrZXB0XG4vLyBmb3IgYmFjay1jb21wYXQpLlxuY29uc3QgRU1BSUw6IHJlYWRvbmx5IElucHV0U3BlY1tdID0gW1xuICB7IGZsYWc6ICdlbWFpbCcsIGtleTogJ2VtYWlsJywgZGVzY3JpcHRpb246ICdFbmFibGUgU0VTIHRyYW5zYWN0aW9uYWwgZW1haWwgKG9uIGJ5IGRlZmF1bHQgZm9yIEFXUyknLCBib29sZWFuOiB0cnVlIH0sXG4gIHsgZmxhZzogJ25vLWVtYWlsJywga2V5OiAnbm9FbWFpbCcsIGRlc2NyaXB0aW9uOiAnU2tpcCBTRVMgKHRyYW5zYWN0aW9uYWwgZW1haWwgaXMgcHJvdmlzaW9uZWQgYnkgZGVmYXVsdCknLCBib29sZWFuOiB0cnVlIH0sXG4gIHsgZmxhZzogJ2VtYWlsLWZyb20nLCBrZXk6ICdlbWFpbEZyb20nLCBkZXNjcmlwdGlvbjogJ0Zyb20gYWRkcmVzcyAoZGVmYXVsdCBub3JlcGx5QDxkb21haW4+KScgfSxcbiAgeyBmbGFnOiAnZW1haWwtZnJvbS1uYW1lJywga2V5OiAnZW1haWxGcm9tTmFtZScsIGRlc2NyaXB0aW9uOiAnRGlzcGxheSBuYW1lIG9uIG91dGJvdW5kIGVtYWlsJyB9LFxuICB7IGZsYWc6ICdhbGVydC1lbWFpbCcsIGtleTogJ2FsZXJ0RW1haWwnLCBkZXNjcmlwdGlvbjogJ1N1YnNjcmliZSBhbiBhZGRyZXNzIHRvIHRoZSBib3VuY2UvY29tcGxhaW50IFNOUyB0b3BpYycgfSxcbiAgeyBmbGFnOiAnbm8tY3JlYXRlLXNlcy1pZGVudGl0eScsIGtleTogJ25vQ3JlYXRlU2VzSWRlbnRpdHknLCBkZXNjcmlwdGlvbjogJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknLCBib29sZWFuOiB0cnVlIH0sXG5dO1xuXG4vLyAtLS0gVGFyZ2V0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBUQVJHRVRTOiBSZWFkb25seTxSZWNvcmQ8VGFyZ2V0SWQsIFRhcmdldFNwZWM+PiA9IHtcbiAgbG9jYWw6IHtcbiAgICBpZDogJ2xvY2FsJyxcbiAgICBsYWJlbDogJ0xvY2FsIChEb2NrZXIgQ29tcG9zZSknLFxuICAgIGRpcjogJ2RlcGxveS9sb2NhbC9kb2NrZXInLFxuICAgIGVudHJ5cG9pbnQ6ICdiaW4vc2V0dXAuc2gnLFxuICAgIHNwYXJzZVBhdGhzOiBbJ2RlcGxveS9sb2NhbC9kb2NrZXInXSxcbiAgICByZXF1aXJlZDogW10sXG4gICAgb3B0aW9uYWw6IFtdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBsb2NhbCcsXG4gICAgY29zdDogJ0ZyZWUnLFxuICAgIGJlc3RGb3I6ICdEZXZlbG9wbWVudCcsXG4gICAgZGVwbG95czogJ3RoZSBwbGF0Zm9ybSBhcyBhIERvY2tlciBDb21wb3NlIHN0YWNrIOKAlCBhbiBuZ2lueCBUTFMgcHJveHksIHRoZSBBUEkgc2VydmljZXMgKHBsYXRmb3JtLCBwbHVnaW4sIHBpcGVsaW5lLCBtZXNzYWdlLCByZXBvcnRpbmcsIGNvbXBsaWFuY2UsIHF1b3RhLCBiaWxsaW5nLCBpbWFnZS1yZWdpc3RyeSksIHRoZSBmcm9udGVuZCwgYW5kIHBvc3RncmVzICsgbW9uZ28gKyByZWRpcy4gRmlyc3QgcnVuIHB1bGxzIHRoZSBnaGNyLmlvIGltYWdlcyBhbmQgZ2VuZXJhdGVzIGEgbG9jYWwgVExTIGNlcnQgKGEgZmV3IG1pbnV0ZXMpLicsXG4gICAgZGVzdHJveXM6ICdzdG9wcyBhbGwgY29udGFpbmVycyDigJQgZGF0YSB1bmRlciBkZXBsb3kvbG9jYWwvZG9ja2VyL2RhdGEgcGVyc2lzdHMgb24gZGlzayAoZGVsZXRlIGl0IG1hbnVhbGx5IGZvciBhIGNsZWFuIHNsYXRlKScsXG4gICAgLy8gTWlycm9ycyB0aGUgcHVibGlzaGVkIHBvcnRzIGluIGRlcGxveS9sb2NhbC9kb2NrZXIvZG9ja2VyLWNvbXBvc2UueW1sLlxuICAgIGhvc3RQb3J0czogW1xuICAgICAgeyBzZXJ2aWNlOiAnbmdpbngg4oCUIEhUVFBTIGdhdGV3YXkgKFVJL0FQSSknLCBwb3J0OiA4NDQzIH0sXG4gICAgICB7IHNlcnZpY2U6ICduZ2lueCDigJQgSFRUUCByZWRpcmVjdCcsIHBvcnQ6IDgwODAgfSxcbiAgICAgIHsgc2VydmljZTogJ3BnQWRtaW4gKFBvc3RncmVzIFVJKScsIHBvcnQ6IDU0ODAgfSxcbiAgICAgIHsgc2VydmljZTogJ01vbmdvIEV4cHJlc3MgKE1vbmdvIFVJKScsIHBvcnQ6IDI3MDgxIH0sXG4gICAgICB7IHNlcnZpY2U6ICdEb2NrZXIgcmVnaXN0cnknLCBwb3J0OiA1MDAwIH0sXG4gICAgICB7IHNlcnZpY2U6ICdKYWVnZXIgKHRyYWNpbmcgVUkpJywgcG9ydDogMTY2ODYgfSxcbiAgICBdLFxuICB9LFxuICBtaW5pa3ViZToge1xuICAgIGlkOiAnbWluaWt1YmUnLFxuICAgIGxhYmVsOiAnTWluaWt1YmUgKGxvY2FsIEt1YmVybmV0ZXMpJyxcbiAgICBkaXI6ICdkZXBsb3kvbG9jYWwvbWluaWt1YmUnLFxuICAgIGVudHJ5cG9pbnQ6ICdiaW4vc2V0dXAuc2gnLFxuICAgIHNwYXJzZVBhdGhzOiBbJ2RlcGxveS9sb2NhbC9taW5pa3ViZSddLFxuICAgIHJlcXVpcmVkOiBbXSxcbiAgICBvcHRpb25hbDogW10sXG4gICAgcG9zdERlcGxveTogJy4vZGVwbG95L2Jpbi9pbml0LXBsYXRmb3JtLnNoIG1pbmlrdWJlJyxcbiAgICBjb3N0OiAnRnJlZScsXG4gICAgYmVzdEZvcjogJ0xvY2FsIEt1YmVybmV0ZXMnLFxuICAgIGRlcGxveXM6ICd0aGUgcGxhdGZvcm0gb250byBhIGxvY2FsIE1pbmlrdWJlIGNsdXN0ZXIg4oCUIHRoZSBzYW1lIHNlcnZpY2VzIGFzIEt1YmVybmV0ZXMgRGVwbG95bWVudHMvU2VydmljZXMgYmVoaW5kIGFuIGluZ3Jlc3MsIHBsdXMgaW4tY2x1c3RlciBwb3N0Z3JlcyArIG1vbmdvICsgcmVkaXMuIEZpcnN0IHJ1biBwdWxscyBpbWFnZXMsIGJ1aWxkcyB0aGUgY2x1c3RlciwgYW5kIGdlbmVyYXRlcyBhIFRMUyBjZXJ0IChzZXZlcmFsIG1pbnV0ZXMpLicsXG4gICAgZGVzdHJveXM6ICdzdG9wcyB0aGUgbWluaWt1YmUgc3RhY2sg4oCUIHBlcnNpc3RlbnQgdm9sdW1lcyAoUFZDIGRhdGEpIHJlbWFpbiB1bnRpbCB0aGUgY2x1c3RlciBpcyBkZWxldGVkJyxcbiAgICAvLyBNaXJyb3JzIHRoZSBrdWJlY3RsIHBvcnQtZm9yd2FyZHMgc3RhcnRlZCBpbiBkZXBsb3kvbG9jYWwvbWluaWt1YmUvYmluL3NldHVwLnNoLlxuICAgIGhvc3RQb3J0czogW1xuICAgICAgeyBzZXJ2aWNlOiAnbmdpbngg4oCUIEhUVFBTIGdhdGV3YXkgKFVJL0FQSSknLCBwb3J0OiA4NDQzIH0sXG4gICAgICB7IHNlcnZpY2U6ICdNb25nbyBFeHByZXNzIChNb25nbyBVSSknLCBwb3J0OiA4MDgxIH0sXG4gICAgICB7IHNlcnZpY2U6ICdwZ0FkbWluIChQb3N0Z3JlcyBVSSknLCBwb3J0OiA1NDgwIH0sXG4gICAgXSxcbiAgfSxcbiAgZWMyOiB7XG4gICAgaWQ6ICdlYzInLFxuICAgIGxhYmVsOiAnQVdTIEVDMiAoc2luZ2xlIE1pbmlrdWJlIGluc3RhbmNlIGJlaGluZCBhbiBBTEIpJyxcbiAgICBkaXI6ICdkZXBsb3kvYXdzL2VjMicsXG4gICAgZW50cnlwb2ludDogJ2Jpbi9zZXR1cC5zaCcsXG4gICAgc3BhcnNlUGF0aHM6IFsnZGVwbG95L2F3cy9lYzInXSxcbiAgICByZXF1aXJlZDogW0tFWV9QQUlSLCBET01BSU4sIEhPU1RFRF9aT05FXSxcbiAgICBvcHRpb25hbDogW1JFR0lPTiwgREVQTE9ZX01PREUsIEdIQ1JfVE9LRU4sIElOU1RBTkNFX1RZUEUsIFNUQUNLX05BTUUsIEFVVE9fSU5JVCwgTk9fQVVUT19JTklULCAuLi5FTUFJTF0sXG4gICAgcG9zdERlcGxveTogJy4vZGVwbG95L2Jpbi9pbml0LXBsYXRmb3JtLnNoIGVjMiAgIyBhdXRvLXJ1bnMgb24gdGhlIGluc3RhbmNlIGJ5IGRlZmF1bHQ7IC0tbm8tYXV0by1pbml0IHRvIGRvIGl0IG1hbnVhbGx5JyxcbiAgICBjb3N0OiAnfiQxNDAtMjY1L21vJyxcbiAgICBiZXN0Rm9yOiAnRGV2IC8gc3RhZ2luZycsXG4gICAgZGVwbG95czogJ3RoZSBwbGF0Zm9ybSBvbiBhIHNpbmdsZSBFQzIgaW5zdGFuY2UgdmlhIENsb3VkRm9ybWF0aW9uIOKAlCBhIFZQQywgdGhlIGluc3RhbmNlIChydW5uaW5nIHRoZSBNaW5pa3ViZSBzdGFjayksIGFuIEFMQiwgYSBSb3V0ZSA1MyByZWNvcmQgKyBBQ00gY2VydCBmb3IgdGhlIGRvbWFpbiwgYW5kIChieSBkZWZhdWx0KSBTRVMgZW1haWwuIFRoZSBpbnN0YW5jZSBwdWxscyBpbWFnZXMgb24gZmlyc3QgYm9vdC4nLFxuICAgIGRlc3Ryb3lzOiAnREVMRVRFUyB0aGUgQ2xvdWRGb3JtYXRpb24gc3RhY2s6IHRoZSBWUEMsIEVDMiBpbnN0YW5jZSwgYW5kIGl0cyBFQlMgZGF0YSB2b2x1bWUgKGRhdGFiYXNlcywgcmVnaXN0cnksIHBsdWdpbiBidWlsZHMpLiBJcnJldmVyc2libGUuJyxcbiAgICBob3N0UG9ydHM6IFtdLCAvLyByZW1vdGUgKEFXUykg4oCUIGJpbmRzIG5vdGhpbmcgb24gdGhlIG9wZXJhdG9yJ3MgbWFjaGluZVxuICB9LFxuICBla3M6IHtcbiAgICBpZDogJ2VrcycsXG4gICAgbGFiZWw6ICdBV1MgRUtTIEF1dG8gTW9kZSAobWFuYWdlZCBLdWJlcm5ldGVzKScsXG4gICAgZGlyOiAnZGVwbG95L2F3cy9la3MnLFxuICAgIGVudHJ5cG9pbnQ6ICdiaW4vc2V0dXAuc2gnLFxuICAgIHNwYXJzZVBhdGhzOiBbJ2RlcGxveS9hd3MvZWtzJ10sXG4gICAgcmVxdWlyZWQ6IFtET01BSU4sIEhPU1RFRF9aT05FXSxcbiAgICBvcHRpb25hbDogW1JFR0lPTiwgREVQTE9ZX01PREUsIEdIQ1JfVE9LRU4sIENMVVNURVJfTkFNRSwgLi4uRU1BSUxdLFxuICAgIHBvc3REZXBsb3k6ICcuL2RlcGxveS9iaW4vaW5pdC1wbGF0Zm9ybS5zaCBla3MgICMgcmVnaXN0ZXIgYWRtaW4gKyBsb2FkIHBsdWdpbnMgKHJ1biB3aXRoIGt1YmVjdGwgYWNjZXNzIHRvIHRoZSBjbHVzdGVyKScsXG4gICAgY29zdDogJ34kMTUwLTQwMC9tbycsXG4gICAgYmVzdEZvcjogJ1Byb2R1Y3Rpb24nLFxuICAgIGRlcGxveXM6ICd0aGUgcGxhdGZvcm0gb24gQW1hem9uIEVLUyBBdXRvIE1vZGUg4oCUIGFuIEFXUy1tYW5hZ2VkIEt1YmVybmV0ZXMgY2x1c3RlciAoS2FycGVudGVyLXNjYWxlZCBFQzIgbm9kZXMsIEFXUyBMb2FkIEJhbGFuY2VyIENvbnRyb2xsZXIsIEVCUy9FRlMgQ1NJKSwgdGhlIHNhbWUgS3ViZXJuZXRlcyB3b3JrbG9hZHMgYXMgdGhlIG90aGVyIGs4cyB0YXJnZXRzLCBhbiBBTEIgSW5ncmVzcyArIEFDTSBmb3IgdGhlIGRvbWFpbiwgYW5kIChieSBkZWZhdWx0KSBTRVMgZW1haWwuIFBsdWdpbiBidWlsZHMgcnVuIG9uIHRoZSBpbi1jbHVzdGVyIHJvb3RsZXNzIGJ1aWxka2l0ZCAoRUMyIG5vZGVzIGFsbG93IGl0KS4nLFxuICAgIGRlc3Ryb3lzOiAnUnVucyBiaW4vc2h1dGRvd24uc2g6IERFTEVURVMgdGhlIEVLUyBjbHVzdGVyICsgbm9kZXMgKGVrc2N0bCksIHRoZSBFRlMgZmlsZXN5c3RlbSwgYW5kIOKAlCB3aGVuIC0tZG9tYWluIGlzIHNldCDigJQgdGhlIEFDTSBjZXJ0ICsgUm91dGUgNTMgYWxpYXMuIEVCUyB2b2x1bWVzIG9uIHRoZSBSZXRhaW4gU3RvcmFnZUNsYXNzIGFyZSBOT1QgYXV0by1kZWxldGVkIChyZXBvcnRlZCBhdCB0aGUgZW5kKS4gSXJyZXZlcnNpYmxlLicsXG4gICAgaG9zdFBvcnRzOiBbXSwgLy8gcmVtb3RlIChBV1MpIOKAlCBiaW5kcyBub3RoaW5nIG9uIHRoZSBvcGVyYXRvcidzIG1hY2hpbmVcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBUQVJHRVRfSURTOiByZWFkb25seSBUYXJnZXRJZFtdID0gWydsb2NhbCcsICdtaW5pa3ViZScsICdlYzInLCAnZWtzJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RhcmdldElkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVGFyZ2V0SWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAoVEFSR0VUX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vLyAtLS0gU3BhcnNlIGJvb3RzdHJhcCBwYXRocyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRm9sZGVycyBldmVyeSBgLS1yZXBvYCBib290c3RyYXAgbmVlZHMgcmVnYXJkbGVzcyBvZiB0YXJnZXQ6IHRoZSBvcmNoZXN0cmF0aW9uXG4gKiBzY3JpcHRzLiBFYWNoIHRhcmdldCdzIHNldHVwLnNoICsgaW5pdC1wbGF0Zm9ybS5zaCBsaXZlIGluIC8gZHJpdmUgdGhlc2UuXG4gKiBEZWxpYmVyYXRlbHkgbWluaW1hbCDigJQgaGVhdmllciBmb2xkZXJzIChwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykgYXJlIHB1bGxlZFxuICogaW4gb25seSB3aGVuIHRoZWlyIHBvc3QtaW5zdGFsbCBvcHRpb24gaXMgc2VsZWN0ZWQgKHNlZSBMT0FEX1NURVBTKS5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTU1PTl9TUEFSU0VfUEFUSFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWydkZXBsb3kvYmluJ107XG5cbi8qKlxuICogT3B0LWluIHBvc3QtaW5zdGFsbCBsb2FkIHN0ZXBzLiBFYWNoIG1hcHMgYSBwcm92aXNpb24gYC0td2l0aC0qYCBmbGFnIHRvIHRoZVxuICogaW5pdC1wbGF0Zm9ybSBlbnYgdmFyIHRoYXQgZW5hYmxlcyBpdCBBTkQgdGhlIHJlcG8gZm9sZGVyKHMpIGl0IHJlYWRzIOKAlCBzbyB0aGVcbiAqIHNwYXJzZSBjaGVja291dCBncm93cyBleGFjdGx5IHdpdGggdGhlIHNlbGVjdGVkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0FEX1NURVBTID0gW1xuICAvLyBUaGUgcGx1Z2luIGJ1aWxkIHJlYWRzIGRlcGxveS9wbHVnaW5zL19iYXNlIEFORCBkZXBsb3kvY29kZWJ1aWxkL2Jvb3RzdHJhcC5cbiAgeyBpZDogJ3BsdWdpbnMnLCBmbGFnOiAnd2l0aFBsdWdpbnMnLCBlbnY6ICdMT0FEX1BMVUdJTlMnLCBwYXRoczogWydkZXBsb3kvcGx1Z2lucycsICdkZXBsb3kvY29kZWJ1aWxkJ10gfSxcbiAgeyBpZDogJ2NvbXBsaWFuY2UnLCBmbGFnOiAnd2l0aENvbXBsaWFuY2UnLCBlbnY6ICdMT0FEX0NPTVBMSUFOQ0UnLCBwYXRoczogWydkZXBsb3kvY29tcGxpYW5jZSddIH0sXG4gIHsgaWQ6ICdzYW1wbGVzJywgZmxhZzogJ3dpdGhTYW1wbGVzJywgZW52OiAnTE9BRF9QSVBFTElORVMnLCBwYXRoczogWydkZXBsb3kvc2FtcGxlcyddIH0sXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBMb2FkU3RlcElkID0gKHR5cGVvZiBMT0FEX1NURVBTKVtudW1iZXJdWydpZCddO1xuXG4vKipcbiAqIFRoZSBkZS1kdXBsaWNhdGVkIHNldCBvZiBzcGFyc2UgcGF0aHMgZm9yIGEgdGFyZ2V0IHBsdXMgdGhlIGVuYWJsZWQgbG9hZFxuICogc3RlcHM6IGNvbW1vbiBiYXNlIOKIqiB0YXJnZXQgZm9sZGVyKHMpIOKIqiBlYWNoIGVuYWJsZWQgc3RlcCdzIGZvbGRlcihzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZVBhdGhzRm9yKHRhcmdldDogVGFyZ2V0SWQsIGVuYWJsZWRMb2FkSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oQ09NTU9OX1NQQVJTRV9QQVRIUyk7XG4gIGZvciAoY29uc3QgcCBvZiBUQVJHRVRTW3RhcmdldF0uc3BhcnNlUGF0aHMpIHBhdGhzLmFkZChwKTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIExPQURfU1RFUFMpIHtcbiAgICBpZiAoZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoc3RlcC5pZCkpIGZvciAoY29uc3QgcCBvZiBzdGVwLnBhdGhzKSBwYXRocy5hZGQocCk7XG4gIH1cbiAgcmV0dXJuIFsuLi5wYXRoc107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZW1ibGVSZXN1bHQge1xuICAvKiogVGhlIGV4YWN0IGNvbW1hbmQgdG8gcnVuIOKAlCBzZWNyZXRzIG1hc2tlZCBhcyBgKioqYC4gKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKiogUmVxdWlyZWQgaW5wdXRzIHRoYXQgd2VyZSBub3Qgc3VwcGxpZWQuICovXG4gIHJlYWRvbmx5IG1pc3Npbmc6IHJlYWRvbmx5IElucHV0U3BlY1tdO1xufVxuXG4vKipcbiAqIEFzc2VtYmxlIHRoZSBkZXBsb3kgY29tbWFuZCBmb3IgYSB0YXJnZXQgZnJvbSB0aGUgcHJvdmlkZWQgcGFyYW1zLiBQdXJlIGFuZFxuICogZGV0ZXJtaW5pc3RpYyDigJQgbm8gc2hlbGwsIG5vIExMTS4gTWlzc2luZyByZXF1aXJlZCBpbnB1dHMgYXJlIHJlcG9ydGVkIChuZXZlclxuICogZ3Vlc3NlZCkuIEJ5IGRlZmF1bHQgc2VjcmV0cyBhcmUgbWFza2VkIChgKioqYCkgZm9yIERJU1BMQVk7IHBhc3MgYG1hc2s6IGZhbHNlYFxuICogdG8gYnVpbGQgdGhlIHJlYWwgY29tbWFuZCBmb3IgRVhFQ1VUSU9OIOKAlCB0aGF0IHN0cmluZyBtdXN0IG5ldmVyIGJlIGxvZ2dlZCBvclxuICogc2hvd24gdG8gdGhlIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZW1ibGVDb21tYW5kKFxuICB0YXJnZXQ6IFRhcmdldFNwZWMsXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdHM6IHsgbWFzaz86IGJvb2xlYW4gfSA9IHt9LFxuKTogQXNzZW1ibGVSZXN1bHQge1xuICBjb25zdCBtYXNrID0gb3B0cy5tYXNrID8/IHRydWU7XG4gIGNvbnN0IHByb3ZpZGVkID0gKHNwZWM6IElucHV0U3BlYyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHYgPSBwYXJhbXNbc3BlYy5rZXldO1xuICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gJycgJiYgdiAhPT0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgbWlzc2luZyA9IHRhcmdldC5yZXF1aXJlZC5maWx0ZXIoKHNwZWMpID0+ICFwcm92aWRlZChzcGVjKSk7XG5cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW2BjZCAke3RhcmdldC5kaXJ9ICYmIGJhc2ggJHt0YXJnZXQuZW50cnlwb2ludH1gXTtcbiAgZm9yIChjb25zdCBzcGVjIG9mIFsuLi50YXJnZXQucmVxdWlyZWQsIC4uLnRhcmdldC5vcHRpb25hbF0pIHtcbiAgICBpZiAoIXByb3ZpZGVkKHNwZWMpKSBjb250aW51ZTtcbiAgICBpZiAoc3BlYy5ib29sZWFuKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAtLSR7c3BlYy5mbGFnfWApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHJhdyA9IFN0cmluZyhwYXJhbXNbc3BlYy5rZXldKTtcbiAgICAvLyBUaGUgYXNzZW1ibGVkIGNvbW1hbmQgaXMgZXhlY3V0ZWQgdmlhIGEgc2hlbGwgKHJ1blNjcmlwdCksIHNvIGEgcGFyYW1cbiAgICAvLyB2YWx1ZSBjYXJyeWluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB3b3VsZCBiZSBjb21tYW5kIGluamVjdGlvbi4gVmFsaWRhdGVcbiAgICAvLyB0aGUgUkVBTCB2YWx1ZSBldmVuIHdoZW4gbWFza2luZyBmb3IgZGlzcGxheSDigJQgdGhlIGV4ZWN1dGVkIGNvbW1hbmQgdXNlc1xuICAgIC8vIHRoZSB1bm1hc2tlZCB2YWx1ZS4gUmVkYWN0IHNlY3JldHMgc28gdGhlIGVycm9yIG5ldmVyIGVjaG9lcyBhIHRva2VuLlxuICAgIGFzc2VydFNoZWxsU2FmZShyYXcsIGAtLSR7c3BlYy5mbGFnfWAsIHsgcmVkYWN0VmFsdWU6IHNwZWMuc2VjcmV0IH0pO1xuICAgIGNvbnN0IHZhbHVlID0gc3BlYy5zZWNyZXQgJiYgbWFzayA/ICcqKionIDogcmF3O1xuICAgIHBhcnRzLnB1c2goYC0tJHtzcGVjLmZsYWd9ICR7dmFsdWV9YCk7XG4gIH1cblxuICByZXR1cm4geyBjb21tYW5kOiBwYXJ0cy5qb2luKCcgXFxcXFxcbiAgJyksIG1pc3NpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZWFyZG93blJlc3VsdCB7XG4gIC8qKiBUaGUgZXhhY3QgdGVhcmRvd24gY29tbWFuZCB0byBydW4uICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhpcyB0ZWFyZG93biBpcnJldmVyc2libHkgZGVzdHJveXMgZGF0YSAoQVdTIHRhcmdldHMpLiAqL1xuICByZWFkb25seSBkZXN0cnVjdGl2ZTogYm9vbGVhbjtcbn1cblxuLyoqIENsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWUgdGhlIEVDMiBzZXR1cC5zaCBkZWZhdWx0cyB0by4gKi9cbmNvbnN0IERFRkFVTFRfRUMyX1NUQUNLID0gJ3BpcGVsaW5lLWJ1aWxkZXInO1xuLyoqIEVLUyBjbHVzdGVyIG5hbWUgZWtzY3RsIGRlZmF1bHRzIHRvLiAqL1xuY29uc3QgREVGQVVMVF9FS1NfQ0xVU1RFUiA9ICdwaXBlbGluZS1idWlsZGVyJztcblxuLyoqXG4gKiBBc3NlbWJsZSB0aGUgdGVhcmRvd24gY29tbWFuZCBmb3IgYSB0YXJnZXQuIFB1cmUgYW5kIGRldGVybWluaXN0aWMg4oCUIG1pcnJvcnNcbiAqIGBhc3NlbWJsZUNvbW1hbmRgIGZvciB0aGUgZGVzdHJveSBwYXRoLiBsb2NhbC9taW5pa3ViZSBTVE9QIHRoZSBzdGFja1xuICogKG5vbi1kZXN0cnVjdGl2ZSDigJQgb24tZGlzayAvIFBWQyBkYXRhIHN1cnZpdmVzKTsgZWMyIERFTEVURXMgaXRzIENsb3VkRm9ybWF0aW9uXG4gKiBzdGFjayBhbmQgZWtzIERFTEVURXMgaXRzIGNsdXN0ZXIgKGVrc2N0bCkg4oCUIGJvdGggaXJyZXZlcnNpYmxlLiBFQzIgYGRlbGV0ZS1zdGFja2BcbiAqIGFuZCBgZWtzY3RsIGRlbGV0ZSBjbHVzdGVyYCBoYXZlIG5vIG5hdGl2ZSBwcm9tcHQsIHdoaWNoIGlzIGV4YWN0bHkgd2h5IHRoZSBhZ2VudCdzXG4gKiB0eXBlZC1jb25maXJtYXRpb24gZ2F0ZSBpcyBtYW5kYXRvcnkgdGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZWFyZG93bkNvbW1hbmQoXG4gIHRhcmdldDogVGFyZ2V0SWQsXG4gIG9wdHM6IHsgc3RhY2tOYW1lPzogc3RyaW5nOyBjbHVzdGVyTmFtZT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBkb21haW4/OiBzdHJpbmc7IGhvc3RlZFpvbmVJZD86IHN0cmluZzsgYXNzdW1lWWVzPzogYm9vbGVhbiB9ID0ge30sXG4pOiBUZWFyZG93blJlc3VsdCB7XG4gIGNvbnN0IHJlZ2lvbiA9IG9wdHMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgJ3VzLWVhc3QtMSc7XG4gIC8vIEFueXRoaW5nIGZsb3dpbmcgdW5xdW90ZWQgaW50byBhIHNoZWxsLWV4ZWN1dGVkIHRlYXJkb3duIGNvbW1hbmQgaXMgcmVqZWN0ZWRcbiAgLy8gZm9yIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIChtaXJyb3JzIGFzc2VtYmxlQ29tbWFuZCkuXG4gIGFzc2VydFNoZWxsU2FmZShyZWdpb24sICdyZWdpb24nKTtcbiAgaWYgKG9wdHMuc3RhY2tOYW1lKSBhc3NlcnRTaGVsbFNhZmUob3B0cy5zdGFja05hbWUsICdzdGFjay1uYW1lJyk7XG4gIGlmIChvcHRzLmNsdXN0ZXJOYW1lKSBhc3NlcnRTaGVsbFNhZmUob3B0cy5jbHVzdGVyTmFtZSwgJ2NsdXN0ZXItbmFtZScpO1xuICBpZiAob3B0cy5kb21haW4pIGFzc2VydFNoZWxsU2FmZShvcHRzLmRvbWFpbiwgJ2RvbWFpbicpO1xuICBpZiAob3B0cy5ob3N0ZWRab25lSWQpIGFzc2VydFNoZWxsU2FmZShvcHRzLmhvc3RlZFpvbmVJZCwgJ2hvc3RlZC16b25lLWlkJyk7XG4gIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgY2FzZSAnbG9jYWwnOlxuICAgICAgcmV0dXJuIHsgY29tbWFuZDogJ2NkIGRlcGxveS9sb2NhbC9kb2NrZXIgJiYgYmFzaCBiaW4vc2h1dGRvd24uc2gnLCBkZXN0cnVjdGl2ZTogZmFsc2UgfTtcbiAgICBjYXNlICdtaW5pa3ViZSc6XG4gICAgICByZXR1cm4geyBjb21tYW5kOiAnY2QgZGVwbG95L2xvY2FsL21pbmlrdWJlICYmIGJhc2ggYmluL3NodXRkb3duLnNoJywgZGVzdHJ1Y3RpdmU6IGZhbHNlIH07XG4gICAgY2FzZSAnZWMyJzoge1xuICAgICAgY29uc3Qgc3RhY2sgPSBvcHRzLnN0YWNrTmFtZSB8fCBERUZBVUxUX0VDMl9TVEFDSztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQ6XG4gICAgICAgICAgYGF3cyBjbG91ZGZvcm1hdGlvbiBkZWxldGUtc3RhY2sgLS1zdGFjay1uYW1lICR7c3RhY2t9IC0tcmVnaW9uICR7cmVnaW9ufSAmJiBgICtcbiAgICAgICAgICBgYXdzIGNsb3VkZm9ybWF0aW9uIHdhaXQgc3RhY2stZGVsZXRlLWNvbXBsZXRlIC0tc3RhY2stbmFtZSAke3N0YWNrfSAtLXJlZ2lvbiAke3JlZ2lvbn1gLFxuICAgICAgICBkZXN0cnVjdGl2ZTogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ2Vrcyc6IHtcbiAgICAgIC8vIGVrcyB0ZWFycyBkb3duIHZpYSBiaW4vc2h1dGRvd24uc2ggKGxpa2UgbG9jYWwvbWluaWt1YmUgdXNlIGJpbi9zaHV0ZG93bi5zaCk6XG4gICAgICAvLyBpdCBkZWxldGVzIHRoZSBjbHVzdGVyIEFORCB0aGUgcmVzb3VyY2VzIGVrc2N0bCBhbG9uZSB3b3VsZCBvcnBoYW4g4oCUIHRoZSBFRlNcbiAgICAgIC8vIGZpbGVzeXN0ZW0gYW5kLCB3aGVuIC0tZG9tYWluIGlzIGdpdmVuLCB0aGUgQUNNIGNlcnQgKyBSb3V0ZSA1MyBhbGlhcy4gVGhlXG4gICAgICAvLyBhZ2VudCdzIHR5cGVkLWNvbmZpcm1hdGlvbiBnYXRlIGFscmVhZHkgcmFuLCBzbyBwYXNzIC0teWVzIHRvIHNraXAgdGhlXG4gICAgICAvLyBzY3JpcHQncyBvd24gcHJvbXB0LlxuICAgICAgY29uc3QgY2x1c3RlciA9IG9wdHMuY2x1c3Rlck5hbWUgfHwgREVGQVVMVF9FS1NfQ0xVU1RFUjtcbiAgICAgIGxldCBjb21tYW5kID0gYGNkIGRlcGxveS9hd3MvZWtzICYmIGJhc2ggYmluL3NodXRkb3duLnNoIC0tY2x1c3Rlci1uYW1lICR7Y2x1c3Rlcn0gLS1yZWdpb24gJHtyZWdpb259YDtcbiAgICAgIGlmIChvcHRzLmRvbWFpbikgY29tbWFuZCArPSBgIC0tZG9tYWluICR7b3B0cy5kb21haW59YDtcbiAgICAgIGlmIChvcHRzLmhvc3RlZFpvbmVJZCkgY29tbWFuZCArPSBgIC0taG9zdGVkLXpvbmUtaWQgJHtvcHRzLmhvc3RlZFpvbmVJZH1gO1xuICAgICAgaWYgKG9wdHMuYXNzdW1lWWVzKSBjb21tYW5kICs9ICcgLS15ZXMnO1xuICAgICAgcmV0dXJuIHsgY29tbWFuZCwgZGVzdHJ1Y3RpdmU6IHRydWUgfTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==