@pipeline-builder/pipeline-data 4.1.15 → 4.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/access-control-builder.d.ts +18 -1
- package/lib/api/access-control-builder.js +19 -6
- package/lib/api/crud-service.d.ts +94 -36
- package/lib/api/crud-service.js +188 -166
- package/lib/api/plugin-resolution.d.ts +253 -0
- package/lib/api/plugin-resolution.js +649 -0
- package/lib/api/public-directory.d.ts +281 -0
- package/lib/api/public-directory.js +457 -0
- package/lib/api/query-builders.d.ts +13 -0
- package/lib/api/query-builders.js +74 -9
- package/lib/api/reporting/caches.js +4 -4
- package/lib/api/reporting/dora-scoring.d.ts +3 -3
- package/lib/api/reporting/dora-scoring.js +4 -4
- package/lib/api/reporting/dora.d.ts +6 -6
- package/lib/api/reporting/dora.js +97 -73
- package/lib/api/reporting/plugin-runtime.d.ts +25 -0
- package/lib/api/reporting/plugin-runtime.js +106 -0
- package/lib/api/reporting/query-scope.d.ts +8 -2
- package/lib/api/reporting/query-scope.js +16 -7
- package/lib/api/reporting/retention.d.ts +4 -10
- package/lib/api/reporting/retention.js +8 -11
- package/lib/api/reporting/sql-helpers.d.ts +4 -7
- package/lib/api/reporting/sql-helpers.js +8 -9
- package/lib/api/reporting/types.d.ts +55 -17
- package/lib/api/reporting/types.js +1 -1
- package/lib/api/reporting-service.d.ts +35 -26
- package/lib/api/reporting-service.js +245 -161
- package/lib/api/semver-range.d.ts +73 -0
- package/lib/api/semver-range.js +227 -0
- package/lib/api/soft-delete-sweep.js +8 -20
- package/lib/core/query-filters.d.ts +18 -3
- package/lib/core/query-filters.js +1 -1
- package/lib/database/drizzle-schema.d.ts +7790 -2461
- package/lib/database/drizzle-schema.js +29 -1
- package/lib/database/index.d.ts +4 -2
- package/lib/database/index.js +5 -3
- package/lib/database/pg-result.d.ts +19 -0
- package/lib/database/pg-result.js +32 -0
- package/lib/database/postgres-connection.js +14 -24
- package/lib/database/public-reader.d.ts +14 -0
- package/lib/database/public-reader.js +68 -0
- package/lib/database/retry-strategy.d.ts +3 -5
- package/lib/database/retry-strategy.js +4 -6
- package/lib/database/schema/compliance.d.ts +16 -34
- package/lib/database/schema/compliance.js +4 -4
- package/lib/database/schema/dashboard.js +4 -2
- package/lib/database/schema/ecosystem.d.ts +6586 -0
- package/lib/database/schema/ecosystem.js +709 -0
- package/lib/database/schema/message.d.ts +6 -12
- package/lib/database/schema/message.js +3 -1
- package/lib/database/schema/pipeline.d.ts +79 -5
- package/lib/database/schema/pipeline.js +46 -25
- package/lib/database/schema/plugin.d.ts +587 -3
- package/lib/database/schema/plugin.js +86 -14
- package/lib/database/tenancy.d.ts +6 -7
- package/lib/database/tenancy.js +13 -14
- package/lib/index.d.ts +7 -4
- package/lib/index.js +7 -4
- package/lib/testing/exports.json +146 -0
- package/package.json +44 -7
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version specs for plugin lookups (docs/plugin-installing.md).
|
|
3
|
+
*
|
|
4
|
+
* A small, dependency-free matcher for exactly the forms plugin references use:
|
|
5
|
+
*
|
|
6
|
+
* exact `1.2.3`, `1.2.3-rc.1` that one version
|
|
7
|
+
* caret `^1.2.3` >=1.2.3 <2.0.0 (`^0.2.3` <0.3.0, `^0.0.3` <0.0.4)
|
|
8
|
+
* `^1`, `^1.2` >=1.0.0 <2.0.0, >=1.2.0 <2.0.0 (`^0.2` <0.3.0, `^0` <1.0.0)
|
|
9
|
+
* tilde `~1.2.3` >=1.2.3 <1.3.0
|
|
10
|
+
* `~1`, `~1.2` >=1.0.0 <2.0.0, >=1.2.0 <1.3.0
|
|
11
|
+
* partial `1`, `1.x`, `1.2`, `1.2.x` >=1.0.0 <2.0.0 / >=1.2.0 <1.3.0
|
|
12
|
+
* latest `latest` the highest stable version
|
|
13
|
+
*
|
|
14
|
+
* npm semantics throughout, including prereleases: a range never matches a
|
|
15
|
+
* prerelease unless its own lower bound is a prerelease of the SAME
|
|
16
|
+
* major.minor.patch (so `^1.2.3-beta.1` admits `1.2.3-beta.2` but not
|
|
17
|
+
* `1.3.0-beta.1`). An exact spec may name a prerelease directly.
|
|
18
|
+
*
|
|
19
|
+
* The matcher runs in JS ({@link satisfiesVersionSpec}) and — for the query
|
|
20
|
+
* builders — as SQL over the `version` column ({@link versionSpecCondition},
|
|
21
|
+
* {@link semverOrderBy}); the two are kept equivalent by the shared tests.
|
|
22
|
+
*/
|
|
23
|
+
import { SQL } from 'drizzle-orm';
|
|
24
|
+
import type { AnyColumn } from 'drizzle-orm/column';
|
|
25
|
+
/** A parsed `major.minor.patch[-prerelease][+build]` version. */
|
|
26
|
+
export interface SemverParts {
|
|
27
|
+
major: number;
|
|
28
|
+
minor: number;
|
|
29
|
+
patch: number;
|
|
30
|
+
/** Dot-separated prerelease identifiers; empty for a stable version. */
|
|
31
|
+
prerelease: string[];
|
|
32
|
+
}
|
|
33
|
+
/** A parsed version spec. `range` bounds are `[min, max)`. */
|
|
34
|
+
export type VersionSpec = {
|
|
35
|
+
kind: 'exact';
|
|
36
|
+
version: string;
|
|
37
|
+
} | {
|
|
38
|
+
kind: 'latest';
|
|
39
|
+
} | {
|
|
40
|
+
kind: 'range';
|
|
41
|
+
min: SemverParts;
|
|
42
|
+
max: SemverParts;
|
|
43
|
+
};
|
|
44
|
+
/** Parse a full semver string, or `null` when it isn't one. */
|
|
45
|
+
export declare function parseSemver(version: string): SemverParts | null;
|
|
46
|
+
/** Semver 2.0 precedence: negative when `a < b`, 0 when equal, positive when `a > b`. */
|
|
47
|
+
export declare function compareSemverParts(a: SemverParts, b: SemverParts): number;
|
|
48
|
+
/** {@link compareSemverParts} over strings; unparseable versions sort lowest. */
|
|
49
|
+
export declare function compareSemver(a: string, b: string): number;
|
|
50
|
+
/**
|
|
51
|
+
* Parse a version spec, or `null` when it is none of the supported forms (the
|
|
52
|
+
* caller then treats the input as a literal version, which matches nothing).
|
|
53
|
+
*/
|
|
54
|
+
export declare function parseVersionSpec(spec: string): VersionSpec | null;
|
|
55
|
+
/** True when `spec` resolves to a SET of versions (range or `latest`), not one. */
|
|
56
|
+
export declare function isVersionRange(spec: string): boolean;
|
|
57
|
+
/** Whether `version` satisfies `spec` (a string or an already-parsed spec). */
|
|
58
|
+
export declare function satisfiesVersionSpec(version: string, spec: string | VersionSpec): boolean;
|
|
59
|
+
/** The highest of `versions` satisfying `spec`, or `null`. */
|
|
60
|
+
export declare function maxSatisfying(versions: readonly string[], spec: string | VersionSpec): string | null;
|
|
61
|
+
/**
|
|
62
|
+
* SQL predicate for `col` satisfying `spec`. Precision note: prerelease-vs-
|
|
63
|
+
* prerelease ordering WITHIN the lower bound's own tuple is not compared in SQL
|
|
64
|
+
* (every prerelease of that tuple is admitted) — {@link semverOrderBy} still
|
|
65
|
+
* ranks them, and the JS matcher is exact.
|
|
66
|
+
*/
|
|
67
|
+
export declare function versionSpecCondition(col: AnyColumn, spec: string): SQL;
|
|
68
|
+
/**
|
|
69
|
+
* ORDER BY terms ranking `col` highest-semver first: numeric major/minor/patch,
|
|
70
|
+
* a stable version above its prereleases, then the prerelease text (a
|
|
71
|
+
* lexicographic tiebreak — close to, not exactly, semver identifier order).
|
|
72
|
+
*/
|
|
73
|
+
export declare function semverOrderBy(col: AnyColumn): SQL[];
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Version specs for plugin lookups (docs/plugin-installing.md).
|
|
5
|
+
*
|
|
6
|
+
* A small, dependency-free matcher for exactly the forms plugin references use:
|
|
7
|
+
*
|
|
8
|
+
* exact `1.2.3`, `1.2.3-rc.1` that one version
|
|
9
|
+
* caret `^1.2.3` >=1.2.3 <2.0.0 (`^0.2.3` <0.3.0, `^0.0.3` <0.0.4)
|
|
10
|
+
* `^1`, `^1.2` >=1.0.0 <2.0.0, >=1.2.0 <2.0.0 (`^0.2` <0.3.0, `^0` <1.0.0)
|
|
11
|
+
* tilde `~1.2.3` >=1.2.3 <1.3.0
|
|
12
|
+
* `~1`, `~1.2` >=1.0.0 <2.0.0, >=1.2.0 <1.3.0
|
|
13
|
+
* partial `1`, `1.x`, `1.2`, `1.2.x` >=1.0.0 <2.0.0 / >=1.2.0 <1.3.0
|
|
14
|
+
* latest `latest` the highest stable version
|
|
15
|
+
*
|
|
16
|
+
* npm semantics throughout, including prereleases: a range never matches a
|
|
17
|
+
* prerelease unless its own lower bound is a prerelease of the SAME
|
|
18
|
+
* major.minor.patch (so `^1.2.3-beta.1` admits `1.2.3-beta.2` but not
|
|
19
|
+
* `1.3.0-beta.1`). An exact spec may name a prerelease directly.
|
|
20
|
+
*
|
|
21
|
+
* The matcher runs in JS ({@link satisfiesVersionSpec}) and — for the query
|
|
22
|
+
* builders — as SQL over the `version` column ({@link versionSpecCondition},
|
|
23
|
+
* {@link semverOrderBy}); the two are kept equivalent by the shared tests.
|
|
24
|
+
*/
|
|
25
|
+
import { and, asc, desc, eq, or, sql, SQL } from 'drizzle-orm';
|
|
26
|
+
const SEMVER = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
27
|
+
const PARTIAL = /^(0|[1-9]\d*)(?:\.(0|[1-9]\d*|x|\*))?(?:\.(x|\*))?$/;
|
|
28
|
+
/** Upper bound on any numeric part (keeps SQL `::int` casts in range). */
|
|
29
|
+
const MAX_PART = 2_147_483_647;
|
|
30
|
+
/** Parse a full semver string, or `null` when it isn't one. */
|
|
31
|
+
export function parseSemver(version) {
|
|
32
|
+
const m = SEMVER.exec(version.trim());
|
|
33
|
+
if (!m)
|
|
34
|
+
return null;
|
|
35
|
+
const [major, minor, patch] = [Number(m[1]), Number(m[2]), Number(m[3])];
|
|
36
|
+
if (major > MAX_PART || minor > MAX_PART || patch > MAX_PART)
|
|
37
|
+
return null;
|
|
38
|
+
return { major, minor, patch, prerelease: m[4] ? m[4].split('.') : [] };
|
|
39
|
+
}
|
|
40
|
+
function compareIdentifiers(a, b) {
|
|
41
|
+
const an = /^\d+$/.test(a);
|
|
42
|
+
const bn = /^\d+$/.test(b);
|
|
43
|
+
if (an && bn)
|
|
44
|
+
return Number(a) - Number(b);
|
|
45
|
+
if (an)
|
|
46
|
+
return -1; // numeric identifiers sort below alphanumeric ones
|
|
47
|
+
if (bn)
|
|
48
|
+
return 1;
|
|
49
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
50
|
+
}
|
|
51
|
+
/** Semver 2.0 precedence: negative when `a < b`, 0 when equal, positive when `a > b`. */
|
|
52
|
+
export function compareSemverParts(a, b) {
|
|
53
|
+
if (a.major !== b.major)
|
|
54
|
+
return a.major - b.major;
|
|
55
|
+
if (a.minor !== b.minor)
|
|
56
|
+
return a.minor - b.minor;
|
|
57
|
+
if (a.patch !== b.patch)
|
|
58
|
+
return a.patch - b.patch;
|
|
59
|
+
// A stable version outranks any prerelease of the same tuple.
|
|
60
|
+
if (!a.prerelease.length || !b.prerelease.length)
|
|
61
|
+
return b.prerelease.length - a.prerelease.length;
|
|
62
|
+
for (let i = 0; i < Math.max(a.prerelease.length, b.prerelease.length); i++) {
|
|
63
|
+
if (a.prerelease[i] === undefined)
|
|
64
|
+
return -1;
|
|
65
|
+
if (b.prerelease[i] === undefined)
|
|
66
|
+
return 1;
|
|
67
|
+
const c = compareIdentifiers(a.prerelease[i], b.prerelease[i]);
|
|
68
|
+
if (c !== 0)
|
|
69
|
+
return c;
|
|
70
|
+
}
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
/** {@link compareSemverParts} over strings; unparseable versions sort lowest. */
|
|
74
|
+
export function compareSemver(a, b) {
|
|
75
|
+
const pa = parseSemver(a);
|
|
76
|
+
const pb = parseSemver(b);
|
|
77
|
+
if (!pa || !pb)
|
|
78
|
+
return (pa ? 1 : 0) - (pb ? 1 : 0);
|
|
79
|
+
return compareSemverParts(pa, pb);
|
|
80
|
+
}
|
|
81
|
+
const parts = (major, minor, patch, prerelease = []) => ({ major, minor, patch, prerelease });
|
|
82
|
+
/**
|
|
83
|
+
* Parse a version spec, or `null` when it is none of the supported forms (the
|
|
84
|
+
* caller then treats the input as a literal version, which matches nothing).
|
|
85
|
+
*/
|
|
86
|
+
export function parseVersionSpec(spec) {
|
|
87
|
+
const s = spec.trim();
|
|
88
|
+
if (s === 'latest')
|
|
89
|
+
return { kind: 'latest' };
|
|
90
|
+
if (s.startsWith('^') || s.startsWith('~')) {
|
|
91
|
+
const partial = PARTIAL.exec(s.slice(1));
|
|
92
|
+
if (partial && !parseSemver(s.slice(1)))
|
|
93
|
+
return partialOperatorRange(s[0], partial);
|
|
94
|
+
const base = parseSemver(s.slice(1));
|
|
95
|
+
if (!base)
|
|
96
|
+
return null;
|
|
97
|
+
const { major, minor, patch } = base;
|
|
98
|
+
let max;
|
|
99
|
+
if (s[0] === '~')
|
|
100
|
+
max = parts(major, minor + 1, 0);
|
|
101
|
+
else if (major > 0)
|
|
102
|
+
max = parts(major + 1, 0, 0);
|
|
103
|
+
else if (minor > 0)
|
|
104
|
+
max = parts(0, minor + 1, 0);
|
|
105
|
+
else
|
|
106
|
+
max = parts(0, 0, patch + 1);
|
|
107
|
+
return { kind: 'range', min: base, max };
|
|
108
|
+
}
|
|
109
|
+
if (parseSemver(s))
|
|
110
|
+
return { kind: 'exact', version: s };
|
|
111
|
+
const m = PARTIAL.exec(s);
|
|
112
|
+
if (!m)
|
|
113
|
+
return null;
|
|
114
|
+
const major = Number(m[1]);
|
|
115
|
+
const minorWild = m[2] === undefined || m[2] === 'x' || m[2] === '*';
|
|
116
|
+
if (major > MAX_PART)
|
|
117
|
+
return null;
|
|
118
|
+
if (minorWild)
|
|
119
|
+
return { kind: 'range', min: parts(major, 0, 0), max: parts(major + 1, 0, 0) };
|
|
120
|
+
const minor = Number(m[2]);
|
|
121
|
+
if (minor > MAX_PART)
|
|
122
|
+
return null;
|
|
123
|
+
return { kind: 'range', min: parts(major, minor, 0), max: parts(major, minor + 1, 0) };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* `^` / `~` over a PARTIAL version (npm): the missing parts are zero, and the
|
|
127
|
+
* upper bound follows the operator — `^1` / `~1` <2.0.0, `^1.2` <2.0.0 but
|
|
128
|
+
* `~1.2` <1.3.0, and a zero major narrows a caret to the next minor
|
|
129
|
+
* (`^0.2` <0.3.0) or major (`^0` <1.0.0).
|
|
130
|
+
*/
|
|
131
|
+
function partialOperatorRange(op, m) {
|
|
132
|
+
const major = Number(m[1]);
|
|
133
|
+
const minorGiven = m[2] !== undefined && m[2] !== 'x' && m[2] !== '*';
|
|
134
|
+
const minor = minorGiven ? Number(m[2]) : 0;
|
|
135
|
+
if (major > MAX_PART || minor > MAX_PART)
|
|
136
|
+
return null;
|
|
137
|
+
const min = parts(major, minor, 0);
|
|
138
|
+
if (!minorGiven)
|
|
139
|
+
return { kind: 'range', min, max: parts(major + 1, 0, 0) };
|
|
140
|
+
if (op === '~' || major === 0)
|
|
141
|
+
return { kind: 'range', min, max: parts(major, minor + 1, 0) };
|
|
142
|
+
return { kind: 'range', min, max: parts(major + 1, 0, 0) };
|
|
143
|
+
}
|
|
144
|
+
/** True when `spec` resolves to a SET of versions (range or `latest`), not one. */
|
|
145
|
+
export function isVersionRange(spec) {
|
|
146
|
+
const parsed = parseVersionSpec(spec);
|
|
147
|
+
return parsed !== null && parsed.kind !== 'exact';
|
|
148
|
+
}
|
|
149
|
+
/** Whether `version` satisfies `spec` (a string or an already-parsed spec). */
|
|
150
|
+
export function satisfiesVersionSpec(version, spec) {
|
|
151
|
+
const parsed = typeof spec === 'string' ? parseVersionSpec(spec) : spec;
|
|
152
|
+
if (!parsed)
|
|
153
|
+
return typeof spec === 'string' && version === spec;
|
|
154
|
+
if (parsed.kind === 'exact')
|
|
155
|
+
return version === parsed.version;
|
|
156
|
+
const v = parseSemver(version);
|
|
157
|
+
if (!v)
|
|
158
|
+
return false;
|
|
159
|
+
if (parsed.kind === 'latest')
|
|
160
|
+
return v.prerelease.length === 0;
|
|
161
|
+
if (compareSemverParts(v, parsed.min) < 0 || compareSemverParts(v, parsed.max) >= 0)
|
|
162
|
+
return false;
|
|
163
|
+
if (v.prerelease.length === 0)
|
|
164
|
+
return true;
|
|
165
|
+
const { min } = parsed;
|
|
166
|
+
return min.prerelease.length > 0 && v.major === min.major && v.minor === min.minor && v.patch === min.patch;
|
|
167
|
+
}
|
|
168
|
+
/** The highest of `versions` satisfying `spec`, or `null`. */
|
|
169
|
+
export function maxSatisfying(versions, spec) {
|
|
170
|
+
let best = null;
|
|
171
|
+
for (const v of versions) {
|
|
172
|
+
if (satisfiesVersionSpec(v, spec) && (best === null || compareSemver(v, best) > 0))
|
|
173
|
+
best = v;
|
|
174
|
+
}
|
|
175
|
+
return best;
|
|
176
|
+
}
|
|
177
|
+
// -- SQL ------------------------------------------------------------------------
|
|
178
|
+
//
|
|
179
|
+
// The `version` column is CHECK-constrained to `^\d+\.\d+\.\d+(-pre)?(\+build)?$`,
|
|
180
|
+
// so the numeric parts are split out reliably: major/minor are the first two
|
|
181
|
+
// dot fields, patch is the third with any `-pre` / `+build` suffix removed, and
|
|
182
|
+
// the prerelease is whatever sits between the first `-` and any `+`.
|
|
183
|
+
const majorOf = (col) => sql `split_part(${col}, '.', 1)::int`;
|
|
184
|
+
const minorOf = (col) => sql `split_part(${col}, '.', 2)::int`;
|
|
185
|
+
const patchOf = (col) => sql `substring(${col} from '^[0-9]+\\.[0-9]+\\.([0-9]+)')::int`;
|
|
186
|
+
/** The prerelease suffix, or NULL for a stable version. */
|
|
187
|
+
const prereleaseOf = (col) => sql `substring(split_part(${col}, '+', 1) from '^[0-9]+\\.[0-9]+\\.[0-9]+-(.+)$')`;
|
|
188
|
+
const tupleOf = (col) => sql `(${majorOf(col)}, ${minorOf(col)}, ${patchOf(col)})`;
|
|
189
|
+
const tupleLit = (p) => sql `(${p.major}::int, ${p.minor}::int, ${p.patch}::int)`;
|
|
190
|
+
/**
|
|
191
|
+
* SQL predicate for `col` satisfying `spec`. Precision note: prerelease-vs-
|
|
192
|
+
* prerelease ordering WITHIN the lower bound's own tuple is not compared in SQL
|
|
193
|
+
* (every prerelease of that tuple is admitted) — {@link semverOrderBy} still
|
|
194
|
+
* ranks them, and the JS matcher is exact.
|
|
195
|
+
*/
|
|
196
|
+
export function versionSpecCondition(col, spec) {
|
|
197
|
+
const parsed = parseVersionSpec(spec);
|
|
198
|
+
if (!parsed)
|
|
199
|
+
return eq(col, spec);
|
|
200
|
+
if (parsed.kind === 'exact')
|
|
201
|
+
return eq(col, parsed.version);
|
|
202
|
+
const stable = sql `${prereleaseOf(col)} IS NULL`;
|
|
203
|
+
if (parsed.kind === 'latest')
|
|
204
|
+
return stable;
|
|
205
|
+
const { min, max } = parsed;
|
|
206
|
+
const inRange = and(sql `${tupleOf(col)} >= ${tupleLit(min)}`, sql `${tupleOf(col)} < ${tupleLit(max)}`);
|
|
207
|
+
if (min.prerelease.length === 0)
|
|
208
|
+
return and(inRange, stable);
|
|
209
|
+
// A prerelease lower bound: stable versions above it, plus prereleases of its own tuple.
|
|
210
|
+
return and(inRange, or(stable, sql `${tupleOf(col)} = ${tupleLit(min)}`));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* ORDER BY terms ranking `col` highest-semver first: numeric major/minor/patch,
|
|
214
|
+
* a stable version above its prereleases, then the prerelease text (a
|
|
215
|
+
* lexicographic tiebreak — close to, not exactly, semver identifier order).
|
|
216
|
+
*/
|
|
217
|
+
export function semverOrderBy(col) {
|
|
218
|
+
return [
|
|
219
|
+
desc(majorOf(col)),
|
|
220
|
+
desc(minorOf(col)),
|
|
221
|
+
desc(patchOf(col)),
|
|
222
|
+
sql `${prereleaseOf(col)} IS NULL DESC`,
|
|
223
|
+
desc(prereleaseOf(col)),
|
|
224
|
+
asc(col),
|
|
225
|
+
];
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtdmVyLXJhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zZW12ZXItcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWtCL0QsTUFBTSxNQUFNLEdBQUcsNkhBQTZILENBQUM7QUFDN0ksTUFBTSxPQUFPLEdBQUcscURBQXFELENBQUM7QUFFdEUsMEVBQTBFO0FBQzFFLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQztBQUUvQiwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFlO0lBQ3pDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsSUFBSSxLQUFLLEdBQUcsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLElBQUksS0FBSyxHQUFHLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMxRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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QyxHQUFHLENBQUMsQ0FBQztRQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDO0tBQ1QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBWZXJzaW9uIHNwZWNzIGZvciBwbHVnaW4gbG9va3VwcyAoZG9jcy9wbHVnaW4taW5zdGFsbGluZy5tZCkuXG4gKlxuICogQSBzbWFsbCwgZGVwZW5kZW5jeS1mcmVlIG1hdGNoZXIgZm9yIGV4YWN0bHkgdGhlIGZvcm1zIHBsdWdpbiByZWZlcmVuY2VzIHVzZTpcbiAqXG4gKiAgIGV4YWN0ICAgIGAxLjIuM2AsIGAxLjIuMy1yYy4xYCAgIHRoYXQgb25lIHZlcnNpb25cbiAqICAgY2FyZXQgICAgYF4xLjIuM2AgICAgICAgICAgICAgICAgPj0xLjIuMyA8Mi4wLjAgIChgXjAuMi4zYCA8MC4zLjAsIGBeMC4wLjNgIDwwLjAuNClcbiAqICAgICAgICAgICAgYF4xYCwgYF4xLjJgICAgICAgICAgICAgPj0xLjAuMCA8Mi4wLjAsID49MS4yLjAgPDIuMC4wICAoYF4wLjJgIDwwLjMuMCwgYF4wYCA8MS4wLjApXG4gKiAgIHRpbGRlICAgIGB+MS4yLjNgICAgICAgICAgICAgICAgID49MS4yLjMgPDEuMy4wXG4gKiAgICAgICAgICAgIGB+MWAsIGB+MS4yYCAgICAgICAgICAgID49MS4wLjAgPDIuMC4wLCA+PTEuMi4wIDwxLjMuMFxuICogICBwYXJ0aWFsICBgMWAsIGAxLnhgLCBgMS4yYCwgYDEuMi54YCAgPj0xLjAuMCA8Mi4wLjAgLyA+PTEuMi4wIDwxLjMuMFxuICogICBsYXRlc3QgICBgbGF0ZXN0YCAgICAgICAgICAgICAgICB0aGUgaGlnaGVzdCBzdGFibGUgdmVyc2lvblxuICpcbiAqIG5wbSBzZW1hbnRpY3MgdGhyb3VnaG91dCwgaW5jbHVkaW5nIHByZXJlbGVhc2VzOiBhIHJhbmdlIG5ldmVyIG1hdGNoZXMgYVxuICogcHJlcmVsZWFzZSB1bmxlc3MgaXRzIG93biBsb3dlciBib3VuZCBpcyBhIHByZXJlbGVhc2Ugb2YgdGhlIFNBTUVcbiAqIG1ham9yLm1pbm9yLnBhdGNoIChzbyBgXjEuMi4zLWJldGEuMWAgYWRtaXRzIGAxLjIuMy1iZXRhLjJgIGJ1dCBub3RcbiAqIGAxLjMuMC1iZXRhLjFgKS4gQW4gZXhhY3Qgc3BlYyBtYXkgbmFtZSBhIHByZXJlbGVhc2UgZGlyZWN0bHkuXG4gKlxuICogVGhlIG1hdGNoZXIgcnVucyBpbiBKUyAoe0BsaW5rIHNhdGlzZmllc1ZlcnNpb25TcGVjfSkgYW5kIOKAlCBmb3IgdGhlIHF1ZXJ5XG4gKiBidWlsZGVycyDigJQgYXMgU1FMIG92ZXIgdGhlIGB2ZXJzaW9uYCBjb2x1bW4gKHtAbGluayB2ZXJzaW9uU3BlY0NvbmRpdGlvbn0sXG4gKiB7QGxpbmsgc2VtdmVyT3JkZXJCeX0pOyB0aGUgdHdvIGFyZSBrZXB0IGVxdWl2YWxlbnQgYnkgdGhlIHNoYXJlZCB0ZXN0cy5cbiAqL1xuXG5pbXBvcnQgeyBhbmQsIGFzYywgZGVzYywgZXEsIG9yLCBzcWwsIFNRTCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB0eXBlIHsgQW55Q29sdW1uIH0gZnJvbSAnZHJpenpsZS1vcm0vY29sdW1uJztcblxuLyoqIEEgcGFyc2VkIGBtYWpvci5taW5vci5wYXRjaFstcHJlcmVsZWFzZV1bK2J1aWxkXWAgdmVyc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VtdmVyUGFydHMge1xuICBtYWpvcjogbnVtYmVyO1xuICBtaW5vcjogbnVtYmVyO1xuICBwYXRjaDogbnVtYmVyO1xuICAvKiogRG90LXNlcGFyYXRlZCBwcmVyZWxlYXNlIGlkZW50aWZpZXJzOyBlbXB0eSBmb3IgYSBzdGFibGUgdmVyc2lvbi4gKi9cbiAgcHJlcmVsZWFzZTogc3RyaW5nW107XG59XG5cbi8qKiBBIHBhcnNlZCB2ZXJzaW9uIHNwZWMuIGByYW5nZWAgYm91bmRzIGFyZSBgW21pbiwgbWF4KWAuICovXG5leHBvcnQgdHlwZSBWZXJzaW9uU3BlYyA9XG4gIHwgeyBraW5kOiAnZXhhY3QnOyB2ZXJzaW9uOiBzdHJpbmcgfVxuICB8IHsga2luZDogJ2xhdGVzdCcgfVxuICB8IHsga2luZDogJ3JhbmdlJzsgbWluOiBTZW12ZXJQYXJ0czsgbWF4OiBTZW12ZXJQYXJ0cyB9O1xuXG5jb25zdCBTRU1WRVIgPSAvXigwfFsxLTldXFxkKilcXC4oMHxbMS05XVxcZCopXFwuKDB8WzEtOV1cXGQqKSg/Oi0oWzAtOUEtWmEtei1dKyg/OlxcLlswLTlBLVphLXotXSspKikpPyg/OlxcK1swLTlBLVphLXotXSsoPzpcXC5bMC05QS1aYS16LV0rKSopPyQvO1xuY29uc3QgUEFSVElBTCA9IC9eKDB8WzEtOV1cXGQqKSg/OlxcLigwfFsxLTldXFxkKnx4fFxcKikpPyg/OlxcLih4fFxcKikpPyQvO1xuXG4vKiogVXBwZXIgYm91bmQgb24gYW55IG51bWVyaWMgcGFydCAoa2VlcHMgU1FMIGA6OmludGAgY2FzdHMgaW4gcmFuZ2UpLiAqL1xuY29uc3QgTUFYX1BBUlQgPSAyXzE0N180ODNfNjQ3O1xuXG4vKiogUGFyc2UgYSBmdWxsIHNlbXZlciBzdHJpbmcsIG9yIGBudWxsYCB3aGVuIGl0IGlzbid0IG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlbXZlcih2ZXJzaW9uOiBzdHJpbmcpOiBTZW12ZXJQYXJ0cyB8IG51bGwge1xuICBjb25zdCBtID0gU0VNVkVSLmV4ZWModmVyc2lvbi50cmltKCkpO1xuICBpZiAoIW0pIHJldHVybiBudWxsO1xuICBjb25zdCBbbWFqb3IsIG1pbm9yLCBwYXRjaF0gPSBbTnVtYmVyKG1bMV0pLCBOdW1iZXIobVsyXSksIE51bWJlcihtWzNdKV07XG4gIGlmIChtYWpvciA+IE1BWF9QQVJUIHx8IG1pbm9yID4gTUFYX1BBUlQgfHwgcGF0Y2ggPiBNQVhfUEFSVCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7IG1ham9yLCBtaW5vciwgcGF0Y2gsIHByZXJlbGVhc2U6IG1bNF0gPyBtWzRdLnNwbGl0KCcuJykgOiBbXSB9O1xufVxuXG5mdW5jdGlvbiBjb21wYXJlSWRlbnRpZmllcnMoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBhbiA9IC9eXFxkKyQvLnRlc3QoYSk7XG4gIGNvbnN0IGJuID0gL15cXGQrJC8udGVzdChiKTtcbiAgaWYgKGFuICYmIGJuKSByZXR1cm4gTnVtYmVyKGEpIC0gTnVtYmVyKGIpO1xuICBpZiAoYW4pIHJldHVybiAtMTsgLy8gbnVtZXJpYyBpZGVudGlmaWVycyBzb3J0IGJlbG93IGFscGhhbnVtZXJpYyBvbmVzXG4gIGlmIChibikgcmV0dXJuIDE7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cblxuLyoqIFNlbXZlciAyLjAgcHJlY2VkZW5jZTogbmVnYXRpdmUgd2hlbiBgYSA8IGJgLCAwIHdoZW4gZXF1YWwsIHBvc2l0aXZlIHdoZW4gYGEgPiBiYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlU2VtdmVyUGFydHMoYTogU2VtdmVyUGFydHMsIGI6IFNlbXZlclBhcnRzKTogbnVtYmVyIHtcbiAgaWYgKGEubWFqb3IgIT09IGIubWFqb3IpIHJldHVybiBhLm1ham9yIC0gYi5tYWpvcjtcbiAgaWYgKGEubWlub3IgIT09IGIubWlub3IpIHJldHVybiBhLm1pbm9yIC0gYi5taW5vcjtcbiAgaWYgKGEucGF0Y2ggIT09IGIucGF0Y2gpIHJldHVybiBhLnBhdGNoIC0gYi5wYXRjaDtcbiAgLy8gQSBzdGFibGUgdmVyc2lvbiBvdXRyYW5rcyBhbnkgcHJlcmVsZWFzZSBvZiB0aGUgc2FtZSB0dXBsZS5cbiAgaWYgKCFhLnByZXJlbGVhc2UubGVuZ3RoIHx8ICFiLnByZXJlbGVhc2UubGVuZ3RoKSByZXR1cm4gYi5wcmVyZWxlYXNlLmxlbmd0aCAtIGEucHJlcmVsZWFzZS5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5tYXgoYS5wcmVyZWxlYXNlLmxlbmd0aCwgYi5wcmVyZWxlYXNlLmxlbmd0aCk7IGkrKykge1xuICAgIGlmIChhLnByZXJlbGVhc2VbaV0gPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmIChiLnByZXJlbGVhc2VbaV0gPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgY29uc3QgYyA9IGNvbXBhcmVJZGVudGlmaWVycyhhLnByZXJlbGVhc2VbaV0hLCBiLnByZXJlbGVhc2VbaV0hKTtcbiAgICBpZiAoYyAhPT0gMCkgcmV0dXJuIGM7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8qKiB7QGxpbmsgY29tcGFyZVNlbXZlclBhcnRzfSBvdmVyIHN0cmluZ3M7IHVucGFyc2VhYmxlIHZlcnNpb25zIHNvcnQgbG93ZXN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVTZW12ZXIoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBwYSA9IHBhcnNlU2VtdmVyKGEpO1xuICBjb25zdCBwYiA9IHBhcnNlU2VtdmVyKGIpO1xuICBpZiAoIXBhIHx8ICFwYikgcmV0dXJuIChwYSA/IDEgOiAwKSAtIChwYiA/IDEgOiAwKTtcbiAgcmV0dXJuIGNvbXBhcmVTZW12ZXJQYXJ0cyhwYSwgcGIpO1xufVxuXG5jb25zdCBwYXJ0cyA9IChtYWpvcjogbnVtYmVyLCBtaW5vcjogbnVtYmVyLCBwYXRjaDogbnVtYmVyLCBwcmVyZWxlYXNlOiBzdHJpbmdbXSA9IFtdKTogU2VtdmVyUGFydHMgPT5cbiAgKHsgbWFqb3IsIG1pbm9yLCBwYXRjaCwgcHJlcmVsZWFzZSB9KTtcblxuLyoqXG4gKiBQYXJzZSBhIHZlcnNpb24gc3BlYywgb3IgYG51bGxgIHdoZW4gaXQgaXMgbm9uZSBvZiB0aGUgc3VwcG9ydGVkIGZvcm1zICh0aGVcbiAqIGNhbGxlciB0aGVuIHRyZWF0cyB0aGUgaW5wdXQgYXMgYSBsaXRlcmFsIHZlcnNpb24sIHdoaWNoIG1hdGNoZXMgbm90aGluZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZlcnNpb25TcGVjKHNwZWM6IHN0cmluZyk6IFZlcnNpb25TcGVjIHwgbnVsbCB7XG4gIGNvbnN0IHMgPSBzcGVjLnRyaW0oKTtcbiAgaWYgKHMgPT09ICdsYXRlc3QnKSByZXR1cm4geyBraW5kOiAnbGF0ZXN0JyB9O1xuXG4gIGlmIChzLnN0YXJ0c1dpdGgoJ14nKSB8fCBzLnN0YXJ0c1dpdGgoJ34nKSkge1xuICAgIGNvbnN0IHBhcnRpYWwgPSBQQVJUSUFMLmV4ZWMocy5zbGljZSgxKSk7XG4gICAgaWYgKHBhcnRpYWwgJiYgIXBhcnNlU2VtdmVyKHMuc2xpY2UoMSkpKSByZXR1cm4gcGFydGlhbE9wZXJhdG9yUmFuZ2Uoc1swXSBhcyAnXicgfCAnficsIHBhcnRpYWwpO1xuICAgIGNvbnN0IGJhc2UgPSBwYXJzZVNlbXZlcihzLnNsaWNlKDEpKTtcbiAgICBpZiAoIWJhc2UpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgbWFqb3IsIG1pbm9yLCBwYXRjaCB9ID0gYmFzZTtcbiAgICBsZXQgbWF4OiBTZW12ZXJQYXJ0cztcbiAgICBpZiAoc1swXSA9PT0gJ34nKSBtYXggPSBwYXJ0cyhtYWpvciwgbWlub3IgKyAxLCAwKTtcbiAgICBlbHNlIGlmIChtYWpvciA+IDApIG1heCA9IHBhcnRzKG1ham9yICsgMSwgMCwgMCk7XG4gICAgZWxzZSBpZiAobWlub3IgPiAwKSBtYXggPSBwYXJ0cygwLCBtaW5vciArIDEsIDApO1xuICAgIGVsc2UgbWF4ID0gcGFydHMoMCwgMCwgcGF0Y2ggKyAxKTtcbiAgICByZXR1cm4geyBraW5kOiAncmFuZ2UnLCBtaW46IGJhc2UsIG1heCB9O1xuICB9XG5cbiAgaWYgKHBhcnNlU2VtdmVyKHMpKSByZXR1cm4geyBraW5kOiAnZXhhY3QnLCB2ZXJzaW9uOiBzIH07XG5cbiAgY29uc3QgbSA9IFBBUlRJQUwuZXhlYyhzKTtcbiAgaWYgKCFtKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbWFqb3IgPSBOdW1iZXIobVsxXSk7XG4gIGNvbnN0IG1pbm9yV2lsZCA9IG1bMl0gPT09IHVuZGVmaW5lZCB8fCBtWzJdID09PSAneCcgfHwgbVsyXSA9PT0gJyonO1xuICBpZiAobWFqb3IgPiBNQVhfUEFSVCkgcmV0dXJuIG51bGw7XG4gIGlmIChtaW5vcldpbGQpIHJldHVybiB7IGtpbmQ6ICdyYW5nZScsIG1pbjogcGFydHMobWFqb3IsIDAsIDApLCBtYXg6IHBhcnRzKG1ham9yICsgMSwgMCwgMCkgfTtcbiAgY29uc3QgbWlub3IgPSBOdW1iZXIobVsyXSk7XG4gIGlmIChtaW5vciA+IE1BWF9QQVJUKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsga2luZDogJ3JhbmdlJywgbWluOiBwYXJ0cyhtYWpvciwgbWlub3IsIDApLCBtYXg6IHBhcnRzKG1ham9yLCBtaW5vciArIDEsIDApIH07XG59XG5cbi8qKlxuICogYF5gIC8gYH5gIG92ZXIgYSBQQVJUSUFMIHZlcnNpb24gKG5wbSk6IHRoZSBtaXNzaW5nIHBhcnRzIGFyZSB6ZXJvLCBhbmQgdGhlXG4gKiB1cHBlciBib3VuZCBmb2xsb3dzIHRoZSBvcGVyYXRvciDigJQgYF4xYCAvIGB+MWAgPDIuMC4wLCBgXjEuMmAgPDIuMC4wIGJ1dFxuICogYH4xLjJgIDwxLjMuMCwgYW5kIGEgemVybyBtYWpvciBuYXJyb3dzIGEgY2FyZXQgdG8gdGhlIG5leHQgbWlub3JcbiAqIChgXjAuMmAgPDAuMy4wKSBvciBtYWpvciAoYF4wYCA8MS4wLjApLlxuICovXG5mdW5jdGlvbiBwYXJ0aWFsT3BlcmF0b3JSYW5nZShvcDogJ14nIHwgJ34nLCBtOiBSZWdFeHBFeGVjQXJyYXkpOiBWZXJzaW9uU3BlYyB8IG51bGwge1xuICBjb25zdCBtYWpvciA9IE51bWJlcihtWzFdKTtcbiAgY29uc3QgbWlub3JHaXZlbiA9IG1bMl0gIT09IHVuZGVmaW5lZCAmJiBtWzJdICE9PSAneCcgJiYgbVsyXSAhPT0gJyonO1xuICBjb25zdCBtaW5vciA9IG1pbm9yR2l2ZW4gPyBOdW1iZXIobVsyXSkgOiAwO1xuICBpZiAobWFqb3IgPiBNQVhfUEFSVCB8fCBtaW5vciA+IE1BWF9QQVJUKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbWluID0gcGFydHMobWFqb3IsIG1pbm9yLCAwKTtcbiAgaWYgKCFtaW5vckdpdmVuKSByZXR1cm4geyBraW5kOiAncmFuZ2UnLCBtaW4sIG1heDogcGFydHMobWFqb3IgKyAxLCAwLCAwKSB9O1xuICBpZiAob3AgPT09ICd+JyB8fCBtYWpvciA9PT0gMCkgcmV0dXJuIHsga2luZDogJ3JhbmdlJywgbWluLCBtYXg6IHBhcnRzKG1ham9yLCBtaW5vciArIDEsIDApIH07XG4gIHJldHVybiB7IGtpbmQ6ICdyYW5nZScsIG1pbiwgbWF4OiBwYXJ0cyhtYWpvciArIDEsIDAsIDApIH07XG59XG5cbi8qKiBUcnVlIHdoZW4gYHNwZWNgIHJlc29sdmVzIHRvIGEgU0VUIG9mIHZlcnNpb25zIChyYW5nZSBvciBgbGF0ZXN0YCksIG5vdCBvbmUuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWZXJzaW9uUmFuZ2Uoc3BlYzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlVmVyc2lvblNwZWMoc3BlYyk7XG4gIHJldHVybiBwYXJzZWQgIT09IG51bGwgJiYgcGFyc2VkLmtpbmQgIT09ICdleGFjdCc7XG59XG5cbi8qKiBXaGV0aGVyIGB2ZXJzaW9uYCBzYXRpc2ZpZXMgYHNwZWNgIChhIHN0cmluZyBvciBhbiBhbHJlYWR5LXBhcnNlZCBzcGVjKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNWZXJzaW9uU3BlYyh2ZXJzaW9uOiBzdHJpbmcsIHNwZWM6IHN0cmluZyB8IFZlcnNpb25TcGVjKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcnNlZCA9IHR5cGVvZiBzcGVjID09PSAnc3RyaW5nJyA/IHBhcnNlVmVyc2lvblNwZWMoc3BlYykgOiBzcGVjO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIHR5cGVvZiBzcGVjID09PSAnc3RyaW5nJyAmJiB2ZXJzaW9uID09PSBzcGVjO1xuICBpZiAocGFyc2VkLmtpbmQgPT09ICdleGFjdCcpIHJldHVybiB2ZXJzaW9uID09PSBwYXJzZWQudmVyc2lvbjtcbiAgY29uc3QgdiA9IHBhcnNlU2VtdmVyKHZlcnNpb24pO1xuICBpZiAoIXYpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBhcnNlZC5raW5kID09PSAnbGF0ZXN0JykgcmV0dXJuIHYucHJlcmVsZWFzZS5sZW5ndGggPT09IDA7XG4gIGlmIChjb21wYXJlU2VtdmVyUGFydHModiwgcGFyc2VkLm1pbikgPCAwIHx8IGNvbXBhcmVTZW12ZXJQYXJ0cyh2LCBwYXJzZWQubWF4KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2LnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgeyBtaW4gfSA9IHBhcnNlZDtcbiAgcmV0dXJuIG1pbi5wcmVyZWxlYXNlLmxlbmd0aCA+IDAgJiYgdi5tYWpvciA9PT0gbWluLm1ham9yICYmIHYubWlub3IgPT09IG1pbi5taW5vciAmJiB2LnBhdGNoID09PSBtaW4ucGF0Y2g7XG59XG5cbi8qKiBUaGUgaGlnaGVzdCBvZiBgdmVyc2lvbnNgIHNhdGlzZnlpbmcgYHNwZWNgLCBvciBgbnVsbGAuICovXG5leHBvcnQgZnVuY3Rpb24gbWF4U2F0aXNmeWluZyh2ZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW10sIHNwZWM6IHN0cmluZyB8IFZlcnNpb25TcGVjKTogc3RyaW5nIHwgbnVsbCB7XG4gIGxldCBiZXN0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgZm9yIChjb25zdCB2IG9mIHZlcnNpb25zKSB7XG4gICAgaWYgKHNhdGlzZmllc1ZlcnNpb25TcGVjKHYsIHNwZWMpICYmIChiZXN0ID09PSBudWxsIHx8IGNvbXBhcmVTZW12ZXIodiwgYmVzdCkgPiAwKSkgYmVzdCA9IHY7XG4gIH1cbiAgcmV0dXJuIGJlc3Q7XG59XG5cbi8vIC0tIFNRTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBUaGUgYHZlcnNpb25gIGNvbHVtbiBpcyBDSEVDSy1jb25zdHJhaW5lZCB0byBgXlxcZCtcXC5cXGQrXFwuXFxkKygtcHJlKT8oXFwrYnVpbGQpPyRgLFxuLy8gc28gdGhlIG51bWVyaWMgcGFydHMgYXJlIHNwbGl0IG91dCByZWxpYWJseTogbWFqb3IvbWlub3IgYXJlIHRoZSBmaXJzdCB0d29cbi8vIGRvdCBmaWVsZHMsIHBhdGNoIGlzIHRoZSB0aGlyZCB3aXRoIGFueSBgLXByZWAgLyBgK2J1aWxkYCBzdWZmaXggcmVtb3ZlZCwgYW5kXG4vLyB0aGUgcHJlcmVsZWFzZSBpcyB3aGF0ZXZlciBzaXRzIGJldHdlZW4gdGhlIGZpcnN0IGAtYCBhbmQgYW55IGArYC5cblxuY29uc3QgbWFqb3JPZiA9IChjb2w6IEFueUNvbHVtbik6IFNRTCA9PiBzcWxgc3BsaXRfcGFydCgke2NvbH0sICcuJywgMSk6OmludGA7XG5jb25zdCBtaW5vck9mID0gKGNvbDogQW55Q29sdW1uKTogU1FMID0+IHNxbGBzcGxpdF9wYXJ0KCR7Y29sfSwgJy4nLCAyKTo6aW50YDtcbmNvbnN0IHBhdGNoT2YgPSAoY29sOiBBbnlDb2x1bW4pOiBTUUwgPT4gc3FsYHN1YnN0cmluZygke2NvbH0gZnJvbSAnXlswLTldK1xcXFwuWzAtOV0rXFxcXC4oWzAtOV0rKScpOjppbnRgO1xuLyoqIFRoZSBwcmVyZWxlYXNlIHN1ZmZpeCwgb3IgTlVMTCBmb3IgYSBzdGFibGUgdmVyc2lvbi4gKi9cbmNvbnN0IHByZXJlbGVhc2VPZiA9IChjb2w6IEFueUNvbHVtbik6IFNRTCA9PiBzcWxgc3Vic3RyaW5nKHNwbGl0X3BhcnQoJHtjb2x9LCAnKycsIDEpIGZyb20gJ15bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rLSguKykkJylgO1xuXG5jb25zdCB0dXBsZU9mID0gKGNvbDogQW55Q29sdW1uKTogU1FMID0+IHNxbGAoJHttYWpvck9mKGNvbCl9LCAke21pbm9yT2YoY29sKX0sICR7cGF0Y2hPZihjb2wpfSlgO1xuY29uc3QgdHVwbGVMaXQgPSAocDogU2VtdmVyUGFydHMpOiBTUUwgPT4gc3FsYCgke3AubWFqb3J9OjppbnQsICR7cC5taW5vcn06OmludCwgJHtwLnBhdGNofTo6aW50KWA7XG5cbi8qKlxuICogU1FMIHByZWRpY2F0ZSBmb3IgYGNvbGAgc2F0aXNmeWluZyBgc3BlY2AuIFByZWNpc2lvbiBub3RlOiBwcmVyZWxlYXNlLXZzLVxuICogcHJlcmVsZWFzZSBvcmRlcmluZyBXSVRISU4gdGhlIGxvd2VyIGJvdW5kJ3Mgb3duIHR1cGxlIGlzIG5vdCBjb21wYXJlZCBpbiBTUUxcbiAqIChldmVyeSBwcmVyZWxlYXNlIG9mIHRoYXQgdHVwbGUgaXMgYWRtaXR0ZWQpIOKAlCB7QGxpbmsgc2VtdmVyT3JkZXJCeX0gc3RpbGxcbiAqIHJhbmtzIHRoZW0sIGFuZCB0aGUgSlMgbWF0Y2hlciBpcyBleGFjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb25TcGVjQ29uZGl0aW9uKGNvbDogQW55Q29sdW1uLCBzcGVjOiBzdHJpbmcpOiBTUUwge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVZlcnNpb25TcGVjKHNwZWMpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGVxKGNvbCwgc3BlYyk7XG4gIGlmIChwYXJzZWQua2luZCA9PT0gJ2V4YWN0JykgcmV0dXJuIGVxKGNvbCwgcGFyc2VkLnZlcnNpb24pO1xuICBjb25zdCBzdGFibGUgPSBzcWxgJHtwcmVyZWxlYXNlT2YoY29sKX0gSVMgTlVMTGA7XG4gIGlmIChwYXJzZWQua2luZCA9PT0gJ2xhdGVzdCcpIHJldHVybiBzdGFibGU7XG5cbiAgY29uc3QgeyBtaW4sIG1heCB9ID0gcGFyc2VkO1xuICBjb25zdCBpblJhbmdlID0gYW5kKHNxbGAke3R1cGxlT2YoY29sKX0gPj0gJHt0dXBsZUxpdChtaW4pfWAsIHNxbGAke3R1cGxlT2YoY29sKX0gPCAke3R1cGxlTGl0KG1heCl9YCkhO1xuICBpZiAobWluLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSByZXR1cm4gYW5kKGluUmFuZ2UsIHN0YWJsZSkhO1xuICAvLyBBIHByZXJlbGVhc2UgbG93ZXIgYm91bmQ6IHN0YWJsZSB2ZXJzaW9ucyBhYm92ZSBpdCwgcGx1cyBwcmVyZWxlYXNlcyBvZiBpdHMgb3duIHR1cGxlLlxuICByZXR1cm4gYW5kKGluUmFuZ2UsIG9yKHN0YWJsZSwgc3FsYCR7dHVwbGVPZihjb2wpfSA9ICR7dHVwbGVMaXQobWluKX1gKSkhO1xufVxuXG4vKipcbiAqIE9SREVSIEJZIHRlcm1zIHJhbmtpbmcgYGNvbGAgaGlnaGVzdC1zZW12ZXIgZmlyc3Q6IG51bWVyaWMgbWFqb3IvbWlub3IvcGF0Y2gsXG4gKiBhIHN0YWJsZSB2ZXJzaW9uIGFib3ZlIGl0cyBwcmVyZWxlYXNlcywgdGhlbiB0aGUgcHJlcmVsZWFzZSB0ZXh0IChhXG4gKiBsZXhpY29ncmFwaGljIHRpZWJyZWFrIOKAlCBjbG9zZSB0bywgbm90IGV4YWN0bHksIHNlbXZlciBpZGVudGlmaWVyIG9yZGVyKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbXZlck9yZGVyQnkoY29sOiBBbnlDb2x1bW4pOiBTUUxbXSB7XG4gIHJldHVybiBbXG4gICAgZGVzYyhtYWpvck9mKGNvbCkpLFxuICAgIGRlc2MobWlub3JPZihjb2wpKSxcbiAgICBkZXNjKHBhdGNoT2YoY29sKSksXG4gICAgc3FsYCR7cHJlcmVsZWFzZU9mKGNvbCl9IElTIE5VTEwgREVTQ2AsXG4gICAgZGVzYyhwcmVyZWxlYXNlT2YoY29sKSksXG4gICAgYXNjKGNvbCksXG4gIF07XG59XG4iXX0=
|
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
* than left to the caller. This is a cross-tenant housekeeping job, not a
|
|
18
18
|
* per-org operation.
|
|
19
19
|
*/
|
|
20
|
-
import { createLogger, createScheduler,
|
|
20
|
+
import { createLogger, createScheduler, envBool, envInt } from '@pipeline-builder/api-core';
|
|
21
21
|
import { runWithTenantContext } from '../database/tenancy.js';
|
|
22
22
|
const logger = createLogger('soft-delete-sweep');
|
|
23
23
|
/** Kill-switch: `SOFT_DELETE_PURGE_ENABLED=false` disables all hard-purging
|
|
24
24
|
* (tombstones still accumulate + stay restorable; nothing is destroyed). */
|
|
25
25
|
export function isSoftDeletePurgeEnabled() {
|
|
26
|
-
return (
|
|
26
|
+
return envBool('SOFT_DELETE_PURGE_ENABLED', true);
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Run one purge sweep across `entities`. Loops each entity's `purgeExpired` in
|
|
@@ -93,32 +93,20 @@ export function createSoftDeletePurgeScheduler(opts) {
|
|
|
93
93
|
logger.info('Soft-delete purge scheduler disabled (SOFT_DELETE_PURGE_ENABLED=false)', { service: opts.service });
|
|
94
94
|
return null;
|
|
95
95
|
}
|
|
96
|
-
const intervalMs =
|
|
97
|
-
const startupDelayMs =
|
|
98
|
-
const lockTtlMs =
|
|
99
|
-
const lock = createEnvRedisLock();
|
|
96
|
+
const intervalMs = envInt('SOFT_DELETE_PURGE_INTERVAL_HOURS', 6, { min: 1 }) * 60 * 60 * 1000;
|
|
97
|
+
const startupDelayMs = envInt('SOFT_DELETE_PURGE_STARTUP_DELAY_MS', 120_000, { min: 0 });
|
|
98
|
+
const lockTtlMs = envInt('SOFT_DELETE_PURGE_LOCK_TTL_MS', 900_000, { min: 1000 });
|
|
100
99
|
logger.info('Soft-delete purge scheduler starting', {
|
|
101
100
|
service: opts.service,
|
|
102
101
|
entities: opts.entities.map((e) => e.name),
|
|
103
102
|
intervalHours: intervalMs / 3_600_000,
|
|
104
|
-
locked: !!lock,
|
|
105
103
|
});
|
|
106
|
-
|
|
104
|
+
return createScheduler({
|
|
107
105
|
name: `soft-delete-purge:${opts.service}`,
|
|
108
106
|
intervalMs,
|
|
109
107
|
startupDelayMs,
|
|
110
108
|
run: async () => { await runSoftDeletePurge(opts.entities, opts); },
|
|
111
|
-
|
|
109
|
+
lock: { key: `soft-delete-purge:${opts.service}:leader`, ttlMs: lockTtlMs },
|
|
112
110
|
});
|
|
113
|
-
if (!lock)
|
|
114
|
-
return scheduler;
|
|
115
|
-
// Own the leader-lock Redis client's lifecycle: `stop()` (wired to the
|
|
116
|
-
// service's runServer onShutdown) also closes the connection so it can't keep
|
|
117
|
-
// the process from exiting cleanly. Per-cycle lock acquire/release is handled
|
|
118
|
-
// by withLeaderLock; this is just connection teardown.
|
|
119
|
-
return {
|
|
120
|
-
start: () => scheduler.start(),
|
|
121
|
-
stop: () => { scheduler.stop(); void closeLeaderLock(lock); },
|
|
122
|
-
};
|
|
123
111
|
}
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdC1kZWxldGUtc3dlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3NvZnQtZGVsZXRlLXN3ZWVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQWtCLE1BQU0sNEJBQTRCLENBQUM7QUFDaEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFrQmpEOzZFQUM2RTtBQUM3RSxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixJQUFJLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sQ0FBQztBQUNyRixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxRQUEyQixFQUMzQixJQUFJLEdBQTJCLEVBQUU7SUFFakMsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztJQUMxQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztRQUM3RSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUM7SUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUNsRCwrRUFBK0U7SUFDL0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUV2QiwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pF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QVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUMsYUFBYSxFQUFFLFVBQVUsR0FBRyxTQUFTO1FBQ3JDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUVILE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQztRQUNoQyxJQUFJLEVBQUUscUJBQXFCLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDekMsVUFBVTtRQUNWLGNBQWM7UUFDZCxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUscUJBQXFCLElBQUksQ0FBQyxPQUFPLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3BILENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFNUIsdUVBQXVFO0lBQ3ZFLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsdURBQXVEO0lBQ3ZELE9BQU87UUFDTCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtRQUM5QixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU2hhcmVkIHNvZnQtZGVsZXRlIHJldGVudGlvbiBwdXJnZS5cbiAqXG4gKiBFdmVyeSB7QGxpbmsgQ3J1ZFNlcnZpY2V9IGVudGl0eSBzb2Z0LWRlbGV0ZXMgKHNldHMgYGRlbGV0ZWRBdGAgKyBhXG4gKiBgcHVyZ2VfYWZ0ZXJgIGRlYWRsaW5lKS4gVGhpcyBvcmNoZXN0cmF0b3IgcnVucyBvbmUgcHVyZ2UgcGFzcyBhY3Jvc3MgYSBzZXRcbiAqIG9mIHN1Y2ggZW50aXRpZXMsIGhhcmQtZGVsZXRpbmcgdG9tYnN0b25lcyB3aG9zZSBkZWFkbGluZSBoYXMgcGFzc2VkLiBJdCBpc1xuICogdGhlIGBydW5gIGNhbGxiYWNrIGEgc2VydmljZSBoYW5kcyB0byBgY3JlYXRlU2NoZWR1bGVyYCAobGVhZGVyLWxvY2tlZCksIHNvXG4gKiBvbmx5IG9uZSBwb2Qgc3dlZXBzIGF0IGEgdGltZS5cbiAqXG4gKiBSdW5zIGluIGFuIGV4cGxpY2l0ICoqc3lzYWRtaW4gdGVuYW50IHNjb3BlKiogKGBydW5XaXRoVGVuYW50Q29udGV4dCh7XG4gKiBpc1N1cGVyQWRtaW46IHRydWUgfSlgKSBzbyB0aGUgdW5kZXJseWluZyBgcHVyZ2VFeHBpcmVkYCBzcGFucyBldmVyeSBvcmcgYW5kXG4gKiBieXBhc3NlcyBSTFMgb24gRk9SQ0UnZCB0YWJsZXMgKHBsdWdpbnMvcGlwZWxpbmVzL2V0Yy4pLiBBIGJhcmUgbm8tdGVuYW50XG4gKiBjb250ZXh0IHdvdWxkIHNlZSB6ZXJvIHJvd3Mgb24gdGhvc2UgdGFibGVzIOKAlCBhbmQgaW4gcHJvZHVjdGlvbiAoYHN0cmljdGBcbiAqIG1vZGUpIGB3aXRoVGVuYW50VHhgIHRocm93cyBvdXRyaWdodCDigJQgc28gdGhlIHNjb3BlIGlzIGVzdGFibGlzaGVkIGhlcmUgcmF0aGVyXG4gKiB0aGFuIGxlZnQgdG8gdGhlIGNhbGxlci4gVGhpcyBpcyBhIGNyb3NzLXRlbmFudCBob3VzZWtlZXBpbmcgam9iLCBub3QgYVxuICogcGVyLW9yZyBvcGVyYXRpb24uXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBjcmVhdGVTY2hlZHVsZXIsIGNyZWF0ZUVudlJlZGlzTG9jaywgY2xvc2VMZWFkZXJMb2NrLCB0eXBlIFNjaGVkdWxlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHJ1bldpdGhUZW5hbnRDb250ZXh0IH0gZnJvbSAnLi4vZGF0YWJhc2UvdGVuYW5jeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignc29mdC1kZWxldGUtc3dlZXAnKTtcblxuLyoqIFRoZSBzbGljZSBvZiBhIENydWRTZXJ2aWNlIHRoZSBzd2VlcCBuZWVkcywgcGx1cyBhIGxhYmVsIGZvciBsb2dzL21ldHJpY3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1cmdlYWJsZUVudGl0eSB7XG4gIC8qKiBUYWJsZS9lbnRpdHkgbGFiZWwgKGUuZy4gJ3BpcGVsaW5lJykgZm9yIHBlci10YWJsZSBsb2dnaW5nLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBIYXJkLWRlbGV0ZSB1cCB0byBgbGltaXRgIGV4cGlyZWQgdG9tYnN0b25lczsgcmV0dXJucyByb3dzIHB1cmdlZC4gKi9cbiAgcHVyZ2VFeHBpcmVkKG5vdzogRGF0ZSwgbGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29mdERlbGV0ZVB1cmdlT3B0aW9ucyB7XG4gIC8qKiBSb3dzIHBlciBiYXRjaCBwZXIgdGFibGUgKGRlZmF1bHQgNTAwKS4gKi9cbiAgYmF0Y2hTaXplPzogbnVtYmVyO1xuICAvKiogTWF4IGJhdGNoZXMgcGVyIHRhYmxlIHBlciB0aWNrIChkZWZhdWx0IDIwIOKGkiDiiaQgMTBrL3RhYmxlL3RpY2spOyB0aGUgcmVzdFxuICAgKiAgaXMgZGVmZXJyZWQgdG8gdGhlIG5leHQgdGljayBzbyBhIGh1Z2UgYmFja2xvZyBjYW4ndCBibG93IHRoZSBsb2NrIFRUTC4gKi9cbiAgbWF4QmF0Y2hlc1BlckVudGl0eT86IG51bWJlcjtcbn1cblxuLyoqIEtpbGwtc3dpdGNoOiBgU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRD1mYWxzZWAgZGlzYWJsZXMgYWxsIGhhcmQtcHVyZ2luZ1xuICogICh0b21ic3RvbmVzIHN0aWxsIGFjY3VtdWxhdGUgKyBzdGF5IHJlc3RvcmFibGU7IG5vdGhpbmcgaXMgZGVzdHJveWVkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NvZnREZWxldGVQdXJnZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiAocHJvY2Vzcy5lbnYuU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRCA/PyAndHJ1ZScpLnRvTG93ZXJDYXNlKCkgIT09ICdmYWxzZSc7XG59XG5cbi8qKlxuICogUnVuIG9uZSBwdXJnZSBzd2VlcCBhY3Jvc3MgYGVudGl0aWVzYC4gTG9vcHMgZWFjaCBlbnRpdHkncyBgcHVyZ2VFeHBpcmVkYCBpblxuICogYmF0Y2hlcyB1bnRpbCBhIGJhdGNoIHJldHVybnMgYDwgYmF0Y2hTaXplYCAoZHJhaW5lZCkgb3IgdGhlIHBlci10aWNrIGNhcCBpc1xuICogaGl0IChsb2dnZWQ7IGNvbnRpbnVlZCBuZXh0IHRpY2spLiBOZXZlciB0aHJvd3Mg4oCUIGEgZmFpbGluZyBlbnRpdHkgaXMgbG9nZ2VkXG4gKiBhbmQgdGhlIHN3ZWVwIG1vdmVzIG9uLiBSZXR1cm5zIHBlci1lbnRpdHkgcHVyZ2VkIGNvdW50cyAoYWxzbyBsb2dnZWQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU29mdERlbGV0ZVB1cmdlKFxuICBlbnRpdGllczogUHVyZ2VhYmxlRW50aXR5W10sXG4gIG9wdHM6IFNvZnREZWxldGVQdXJnZU9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4ge1xuICBjb25zdCBjb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgaWYgKCFpc1NvZnREZWxldGVQdXJnZUVuYWJsZWQoKSkge1xuICAgIGxvZ2dlci5kZWJ1ZygnU29mdC1kZWxldGUgcHVyZ2UgZGlzYWJsZWQgKFNPRlRfREVMRVRFX1BVUkdFX0VOQUJMRUQ9ZmFsc2UpJyk7XG4gICAgcmV0dXJuIGNvdW50cztcbiAgfVxuXG4gIGNvbnN0IGJhdGNoU2l6ZSA9IG9wdHMuYmF0Y2hTaXplID8/IDUwMDtcbiAgY29uc3QgbWF4QmF0Y2hlcyA9IG9wdHMubWF4QmF0Y2hlc1BlckVudGl0eSA/PyAyMDtcbiAgLy8gT25lIGBub3dgIGZvciB0aGUgd2hvbGUgdGljayDigJQgcm93cyB0aGF0IGV4cGlyZSBtaWQtc3dlZXAgd2FpdCBmb3IgdGhlIG5leHQuXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgLy8gRXN0YWJsaXNoIGEgc3lzYWRtaW4gc2NvcGUgc28gZXZlcnkgYHB1cmdlRXhwaXJlZGAgKHdoaWNoIHJvdXRlcyB0aHJvdWdoXG4gIC8vIGB3aXRoVGVuYW50VHhgKSBieXBhc3NlcyBSTFMgYW5kIHNwYW5zIGFsbCBvcmdzLiBXaXRob3V0IHRoaXMsIEZPUkNFJ2RcbiAgLy8gdGFibGVzIHJldHVybiB6ZXJvIHJvd3MgYW5kIHByb2R1Y3Rpb24gYHN0cmljdGAgbW9kZSB0aHJvd3MuXG4gIHJldHVybiBydW5XaXRoVGVuYW50Q29udGV4dCh7IGlzU3VwZXJBZG1pbjogdHJ1ZSB9LCBhc3luYyAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEJhdGNoZXM7IGkrKykge1xuICAgICAgICBsZXQgcHVyZ2VkOiBudW1iZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHVyZ2VkID0gYXdhaXQgZW50aXR5LnB1cmdlRXhwaXJlZChub3csIGJhdGNoU2l6ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignUHVyZ2UgYmF0Y2ggZmFpbGVkJywgeyBlbnRpdHk6IGVudGl0eS5uYW1lLCBlcnJvcjogU3RyaW5nKGVycikgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdG90YWwgKz0gcHVyZ2VkO1xuICAgICAgICBpZiAocHVyZ2VkIDwgYmF0Y2hTaXplKSBicmVhazsgLy8gZHJhaW5lZFxuICAgICAgICBpZiAoaSA9PT0gbWF4QmF0Y2hlcyAtIDEpIHtcbiAgICAgICAgICBsb2dnZXIud2FybignUHVyZ2UgaGl0IHBlci10aWNrIGNhcDsgcmVtYWluaW5nIHRvbWJzdG9uZXMgZGVmZXJyZWQgdG8gbmV4dCB0aWNrJywge1xuICAgICAgICAgICAgZW50aXR5OiBlbnRpdHkubmFtZSwgcHVyZ2VkVGhpc1RpY2s6IHRvdGFsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodG90YWwgPiAwKSBsb2dnZXIuaW5mbygnUHVyZ2VkIGV4cGlyZWQgc29mdC1kZWxldGVkIHJvd3MnLCB7IGVudGl0eTogZW50aXR5Lm5hbWUsIGNvdW50OiB0b3RhbCB9KTtcbiAgICAgIGNvdW50c1tlbnRpdHkubmFtZV0gPSB0b3RhbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnRzO1xuICB9KTtcbn1cblxuLy8gLS0gU2NoZWR1bGVyIGZhY3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTb2Z0RGVsZXRlUHVyZ2VTY2hlZHVsZXJPcHRpb25zIGV4dGVuZHMgU29mdERlbGV0ZVB1cmdlT3B0aW9ucyB7XG4gIC8qKiBTZXJ2aWNlIGxhYmVsIGZvciBsb2dzICsgdGhlIGxlYWRlci1sb2NrIGtleSAoZS5nLiAncGlwZWxpbmUnLCAncGx1Z2luJykuICovXG4gIHNlcnZpY2U6IHN0cmluZztcbiAgLyoqIEVudGl0aWVzIHRvIHN3ZWVwIOKAlCB1c3VhbGx5IHRoZSBzZXJ2aWNlJ3Mgb3duIENydWRTZXJ2aWNlIHNpbmdsZXRvbnMuICovXG4gIGVudGl0aWVzOiBQdXJnZWFibGVFbnRpdHlbXTtcbn1cblxuLyoqXG4gKiBCdWlsZCAoYnV0IGRvIE5PVCBzdGFydCkgYSBsZWFkZXItbG9ja2VkIHNjaGVkdWxlciB0aGF0IHJ1bnMgdGhlIHNvZnQtZGVsZXRlXG4gKiBwdXJnZSBzd2VlcCBmb3IgYGVudGl0aWVzYCBvbiBhIGNhZGVuY2UuIFRoZSBjYWxsZXIgYC5zdGFydCgpYHMgaXQgYW5kIHdpcmVzXG4gKiBgc3RvcCgpYCB0byBTSUdURVJNLiBSZXR1cm5zIG51bGwgd2hlbiBwdXJnaW5nIGlzIGRpc2FibGVkLlxuICpcbiAqIEVudiBjb25maWc6XG4gKiAgIFNPRlRfREVMRVRFX1BVUkdFX0VOQUJMRUQgICAgICAgICAgIChkZWZhdWx0IHRydWU7IGZhbHNlIOKHkiBudWxsLCBubyBzd2VlcClcbiAqICAgU09GVF9ERUxFVEVfUFVSR0VfSU5URVJWQUxfSE9VUlMgICAgKGRlZmF1bHQgNilcbiAqICAgU09GVF9ERUxFVEVfUFVSR0VfU1RBUlRVUF9ERUxBWV9NUyAgKGRlZmF1bHQgMTIwMDAwIOKAlCAyIG1pbiBzZXR0bGUpXG4gKiAgIFNPRlRfREVMRVRFX1BVUkdFX0xPQ0tfVFRMX01TICAgICAgIChkZWZhdWx0IDkwMDAwMCDigJQgMTUgbWluOyBvdXRsYXN0cyBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2VlcCwgc3RheXMgdW5kZXIgdGhlIGludGVydmFsKVxuICpcbiAqIEEgY3Jvc3MtcG9kIGxlYWRlciBsb2NrICh3aGVuIFJlZGlzIGlzIGNvbmZpZ3VyZWQpIG1lYW5zIG9ubHkgb25lIHJlcGxpY2FcbiAqIHN3ZWVwcyBwZXIgd2luZG93OyB3aXRob3V0IFJlZGlzIGl0IHJ1bnMgb24gZXZlcnkgcG9kIOKAlCBzdGlsbCBzYWZlLCBzaW5jZSB0aGVcbiAqIHB1cmdlIGlzIGEgYmF0Y2hlZCBpZGVtcG90ZW50IERFTEVURSwganVzdCByZWR1bmRhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTb2Z0RGVsZXRlUHVyZ2VTY2hlZHVsZXIob3B0czogU29mdERlbGV0ZVB1cmdlU2NoZWR1bGVyT3B0aW9ucyk6IFNjaGVkdWxlciB8IG51bGwge1xuICBpZiAoIWlzU29mdERlbGV0ZVB1cmdlRW5hYmxlZCgpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NvZnQtZGVsZXRlIHB1cmdlIHNjaGVkdWxlciBkaXNhYmxlZCAoU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRD1mYWxzZSknLCB7IHNlcnZpY2U6IG9wdHMuc2VydmljZSB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGludGVydmFsTXMgPSBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy5lbnYuU09GVF9ERUxFVEVfUFVSR0VfSU5URVJWQUxfSE9VUlMgPz8gJzYnLCAxMCkgfHwgNikgKiA2MCAqIDYwICogMTAwMDtcbiAgY29uc3Qgc3RhcnR1cERlbGF5TXMgPSBNYXRoLm1heCgwLCBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy5lbnYuU09GVF9ERUxFVEVfUFVSR0VfU1RBUlRVUF9ERUxBWV9NUyA/PyAnMTIwMDAwJywgMTApIHx8IDApO1xuICBjb25zdCBsb2NrVHRsTXMgPSBNYXRoLm1heCgxMDAwLCBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy5lbnYuU09GVF9ERUxFVEVfUFVSR0VfTE9DS19UVExfTVMgPz8gJzkwMDAwMCcsIDEwKSB8fCA5MDAwMDApO1xuICBjb25zdCBsb2NrID0gY3JlYXRlRW52UmVkaXNMb2NrKCk7XG5cbiAgbG9nZ2VyLmluZm8oJ1NvZnQtZGVsZXRlIHB1cmdlIHNjaGVkdWxlciBzdGFydGluZycsIHtcbiAgICBzZXJ2aWNlOiBvcHRzLnNlcnZpY2UsXG4gICAgZW50aXRpZXM6IG9wdHMuZW50aXRpZXMubWFwKChlKSA9PiBlLm5hbWUpLFxuICAgIGludGVydmFsSG91cnM6IGludGVydmFsTXMgLyAzXzYwMF8wMDAsXG4gICAgbG9ja2VkOiAhIWxvY2ssXG4gIH0pO1xuXG4gIGNvbnN0IHNjaGVkdWxlciA9IGNyZWF0ZVNjaGVkdWxlcih7XG4gICAgbmFtZTogYHNvZnQtZGVsZXRlLXB1cmdlOiR7b3B0cy5zZXJ2aWNlfWAsXG4gICAgaW50ZXJ2YWxNcyxcbiAgICBzdGFydHVwRGVsYXlNcyxcbiAgICBydW46IGFzeW5jICgpID0+IHsgYXdhaXQgcnVuU29mdERlbGV0ZVB1cmdlKG9wdHMuZW50aXRpZXMsIG9wdHMpOyB9LFxuICAgIC4uLihsb2NrID8geyBsb2NrOiB7IHJlZGlzOiAoKSA9PiBsb2NrLCBrZXk6IGBzb2Z0LWRlbGV0ZS1wdXJnZToke29wdHMuc2VydmljZX06bGVhZGVyYCwgdHRsTXM6IGxvY2tUdGxNcyB9IH0gOiB7fSksXG4gIH0pO1xuICBpZiAoIWxvY2spIHJldHVybiBzY2hlZHVsZXI7XG5cbiAgLy8gT3duIHRoZSBsZWFkZXItbG9jayBSZWRpcyBjbGllbnQncyBsaWZlY3ljbGU6IGBzdG9wKClgICh3aXJlZCB0byB0aGVcbiAgLy8gc2VydmljZSdzIHJ1blNlcnZlciBvblNodXRkb3duKSBhbHNvIGNsb3NlcyB0aGUgY29ubmVjdGlvbiBzbyBpdCBjYW4ndCBrZWVwXG4gIC8vIHRoZSBwcm9jZXNzIGZyb20gZXhpdGluZyBjbGVhbmx5LiBQZXItY3ljbGUgbG9jayBhY3F1aXJlL3JlbGVhc2UgaXMgaGFuZGxlZFxuICAvLyBieSB3aXRoTGVhZGVyTG9jazsgdGhpcyBpcyBqdXN0IGNvbm5lY3Rpb24gdGVhcmRvd24uXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6ICgpID0+IHNjaGVkdWxlci5zdGFydCgpLFxuICAgIHN0b3A6ICgpID0+IHsgc2NoZWR1bGVyLnN0b3AoKTsgdm9pZCBjbG9zZUxlYWRlckxvY2sobG9jayk7IH0sXG4gIH07XG59XG4iXX0=
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdC1kZWxldGUtc3dlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3NvZnQtZGVsZXRlLXN3ZWVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFrQixNQUFNLDRCQUE0QixDQUFDO0FBQzVHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBa0JqRDs2RUFDNkU7QUFDN0UsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxPQUFPLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxRQUEyQixFQUMzQixJQUFJLEdBQTJCLEVBQUU7SUFFakMsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztJQUMxQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztRQUM3RSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUM7SUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUNsRCwrRUFBK0U7SUFDL0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUV2QiwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLCtEQUErRDtJQUMvRCxPQUFPLG9CQUFvQixDQUFDLEVBQUUsWUFBWSxF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LElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxxQkFBcUIsSUFBSSxDQUFDLE9BQU8sU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7S0FDNUUsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNoYXJlZCBzb2Z0LWRlbGV0ZSByZXRlbnRpb24gcHVyZ2UuXG4gKlxuICogRXZlcnkge0BsaW5rIENydWRTZXJ2aWNlfSBlbnRpdHkgc29mdC1kZWxldGVzIChzZXRzIGBkZWxldGVkQXRgICsgYVxuICogYHB1cmdlX2FmdGVyYCBkZWFkbGluZSkuIFRoaXMgb3JjaGVzdHJhdG9yIHJ1bnMgb25lIHB1cmdlIHBhc3MgYWNyb3NzIGEgc2V0XG4gKiBvZiBzdWNoIGVudGl0aWVzLCBoYXJkLWRlbGV0aW5nIHRvbWJzdG9uZXMgd2hvc2UgZGVhZGxpbmUgaGFzIHBhc3NlZC4gSXQgaXNcbiAqIHRoZSBgcnVuYCBjYWxsYmFjayBhIHNlcnZpY2UgaGFuZHMgdG8gYGNyZWF0ZVNjaGVkdWxlcmAgKGxlYWRlci1sb2NrZWQpLCBzb1xuICogb25seSBvbmUgcG9kIHN3ZWVwcyBhdCBhIHRpbWUuXG4gKlxuICogUnVucyBpbiBhbiBleHBsaWNpdCAqKnN5c2FkbWluIHRlbmFudCBzY29wZSoqIChgcnVuV2l0aFRlbmFudENvbnRleHQoe1xuICogaXNTdXBlckFkbWluOiB0cnVlIH0pYCkgc28gdGhlIHVuZGVybHlpbmcgYHB1cmdlRXhwaXJlZGAgc3BhbnMgZXZlcnkgb3JnIGFuZFxuICogYnlwYXNzZXMgUkxTIG9uIEZPUkNFJ2QgdGFibGVzIChwbHVnaW5zL3BpcGVsaW5lcy9ldGMuKS4gQSBiYXJlIG5vLXRlbmFudFxuICogY29udGV4dCB3b3VsZCBzZWUgemVybyByb3dzIG9uIHRob3NlIHRhYmxlcyDigJQgYW5kIGluIHByb2R1Y3Rpb24gKGBzdHJpY3RgXG4gKiBtb2RlKSBgd2l0aFRlbmFudFR4YCB0aHJvd3Mgb3V0cmlnaHQg4oCUIHNvIHRoZSBzY29wZSBpcyBlc3RhYmxpc2hlZCBoZXJlIHJhdGhlclxuICogdGhhbiBsZWZ0IHRvIHRoZSBjYWxsZXIuIFRoaXMgaXMgYSBjcm9zcy10ZW5hbnQgaG91c2VrZWVwaW5nIGpvYiwgbm90IGFcbiAqIHBlci1vcmcgb3BlcmF0aW9uLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgY3JlYXRlU2NoZWR1bGVyLCBlbnZCb29sLCBlbnZJbnQsIHR5cGUgU2NoZWR1bGVyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcnVuV2l0aFRlbmFudENvbnRleHQgfSBmcm9tICcuLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdzb2Z0LWRlbGV0ZS1zd2VlcCcpO1xuXG4vKiogVGhlIHNsaWNlIG9mIGEgQ3J1ZFNlcnZpY2UgdGhlIHN3ZWVwIG5lZWRzLCBwbHVzIGEgbGFiZWwgZm9yIGxvZ3MvbWV0cmljcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVyZ2VhYmxlRW50aXR5IHtcbiAgLyoqIFRhYmxlL2VudGl0eSBsYWJlbCAoZS5nLiAncGlwZWxpbmUnKSBmb3IgcGVyLXRhYmxlIGxvZ2dpbmcuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIEhhcmQtZGVsZXRlIHVwIHRvIGBsaW1pdGAgZXhwaXJlZCB0b21ic3RvbmVzOyByZXR1cm5zIHJvd3MgcHVyZ2VkLiAqL1xuICBwdXJnZUV4cGlyZWQobm93OiBEYXRlLCBsaW1pdD86IG51bWJlcik6IFByb21pc2U8bnVtYmVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb2Z0RGVsZXRlUHVyZ2VPcHRpb25zIHtcbiAgLyoqIFJvd3MgcGVyIGJhdGNoIHBlciB0YWJsZSAoZGVmYXVsdCA1MDApLiAqL1xuICBiYXRjaFNpemU/OiBudW1iZXI7XG4gIC8qKiBNYXggYmF0Y2hlcyBwZXIgdGFibGUgcGVyIHRpY2sgKGRlZmF1bHQgMjAg4oaSIOKJpCAxMGsvdGFibGUvdGljayk7IHRoZSByZXN0XG4gICAqICBpcyBkZWZlcnJlZCB0byB0aGUgbmV4dCB0aWNrIHNvIGEgaHVnZSBiYWNrbG9nIGNhbid0IGJsb3cgdGhlIGxvY2sgVFRMLiAqL1xuICBtYXhCYXRjaGVzUGVyRW50aXR5PzogbnVtYmVyO1xufVxuXG4vKiogS2lsbC1zd2l0Y2g6IGBTT0ZUX0RFTEVURV9QVVJHRV9FTkFCTEVEPWZhbHNlYCBkaXNhYmxlcyBhbGwgaGFyZC1wdXJnaW5nXG4gKiAgKHRvbWJzdG9uZXMgc3RpbGwgYWNjdW11bGF0ZSArIHN0YXkgcmVzdG9yYWJsZTsgbm90aGluZyBpcyBkZXN0cm95ZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU29mdERlbGV0ZVB1cmdlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVudkJvb2woJ1NPRlRfREVMRVRFX1BVUkdFX0VOQUJMRUQnLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBSdW4gb25lIHB1cmdlIHN3ZWVwIGFjcm9zcyBgZW50aXRpZXNgLiBMb29wcyBlYWNoIGVudGl0eSdzIGBwdXJnZUV4cGlyZWRgIGluXG4gKiBiYXRjaGVzIHVudGlsIGEgYmF0Y2ggcmV0dXJucyBgPCBiYXRjaFNpemVgIChkcmFpbmVkKSBvciB0aGUgcGVyLXRpY2sgY2FwIGlzXG4gKiBoaXQgKGxvZ2dlZDsgY29udGludWVkIG5leHQgdGljaykuIE5ldmVyIHRocm93cyDigJQgYSBmYWlsaW5nIGVudGl0eSBpcyBsb2dnZWRcbiAqIGFuZCB0aGUgc3dlZXAgbW92ZXMgb24uIFJldHVybnMgcGVyLWVudGl0eSBwdXJnZWQgY291bnRzIChhbHNvIGxvZ2dlZCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Tb2Z0RGVsZXRlUHVyZ2UoXG4gIGVudGl0aWVzOiBQdXJnZWFibGVFbnRpdHlbXSxcbiAgb3B0czogU29mdERlbGV0ZVB1cmdlT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PiB7XG4gIGNvbnN0IGNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBpZiAoIWlzU29mdERlbGV0ZVB1cmdlRW5hYmxlZCgpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdTb2Z0LWRlbGV0ZSBwdXJnZSBkaXNhYmxlZCAoU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRD1mYWxzZSknKTtcbiAgICByZXR1cm4gY291bnRzO1xuICB9XG5cbiAgY29uc3QgYmF0Y2hTaXplID0gb3B0cy5iYXRjaFNpemUgPz8gNTAwO1xuICBjb25zdCBtYXhCYXRjaGVzID0gb3B0cy5tYXhCYXRjaGVzUGVyRW50aXR5ID8/IDIwO1xuICAvLyBPbmUgYG5vd2AgZm9yIHRoZSB3aG9sZSB0aWNrIOKAlCByb3dzIHRoYXQgZXhwaXJlIG1pZC1zd2VlcCB3YWl0IGZvciB0aGUgbmV4dC5cbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAvLyBFc3RhYmxpc2ggYSBzeXNhZG1pbiBzY29wZSBzbyBldmVyeSBgcHVyZ2VFeHBpcmVkYCAod2hpY2ggcm91dGVzIHRocm91Z2hcbiAgLy8gYHdpdGhUZW5hbnRUeGApIGJ5cGFzc2VzIFJMUyBhbmQgc3BhbnMgYWxsIG9yZ3MuIFdpdGhvdXQgdGhpcywgRk9SQ0UnZFxuICAvLyB0YWJsZXMgcmV0dXJuIHplcm8gcm93cyBhbmQgcHJvZHVjdGlvbiBgc3RyaWN0YCBtb2RlIHRocm93cy5cbiAgcmV0dXJuIHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgaXNTdXBlckFkbWluOiB0cnVlIH0sIGFzeW5jICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBlbnRpdGllcykge1xuICAgICAgbGV0IHRvdGFsID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4QmF0Y2hlczsgaSsrKSB7XG4gICAgICAgIGxldCBwdXJnZWQ6IG51bWJlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwdXJnZWQgPSBhd2FpdCBlbnRpdHkucHVyZ2VFeHBpcmVkKG5vdywgYmF0Y2hTaXplKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdQdXJnZSBiYXRjaCBmYWlsZWQnLCB7IGVudGl0eTogZW50aXR5Lm5hbWUsIGVycm9yOiBTdHJpbmcoZXJyKSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0b3RhbCArPSBwdXJnZWQ7XG4gICAgICAgIGlmIChwdXJnZWQgPCBiYXRjaFNpemUpIGJyZWFrOyAvLyBkcmFpbmVkXG4gICAgICAgIGlmIChpID09PSBtYXhCYXRjaGVzIC0gMSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdQdXJnZSBoaXQgcGVyLXRpY2sgY2FwOyByZW1haW5pbmcgdG9tYnN0b25lcyBkZWZlcnJlZCB0byBuZXh0IHRpY2snLCB7XG4gICAgICAgICAgICBlbnRpdHk6IGVudGl0eS5uYW1lLCBwdXJnZWRUaGlzVGljazogdG90YWwsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0b3RhbCA+IDApIGxvZ2dlci5pbmZvKCdQdXJnZWQgZXhwaXJlZCBzb2Z0LWRlbGV0ZWQgcm93cycsIHsgZW50aXR5OiBlbnRpdHkubmFtZSwgY291bnQ6IHRvdGFsIH0pO1xuICAgICAgY291bnRzW2VudGl0eS5uYW1lXSA9IHRvdGFsO1xuICAgIH1cblxuICAgIHJldHVybiBjb3VudHM7XG4gIH0pO1xufVxuXG4vLyAtLSBTY2hlZHVsZXIgZmFjdG9yeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnREZWxldGVQdXJnZVNjaGVkdWxlck9wdGlvbnMgZXh0ZW5kcyBTb2Z0RGVsZXRlUHVyZ2VPcHRpb25zIHtcbiAgLyoqIFNlcnZpY2UgbGFiZWwgZm9yIGxvZ3MgKyB0aGUgbGVhZGVyLWxvY2sga2V5IChlLmcuICdwaXBlbGluZScsICdwbHVnaW4nKS4gKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiogRW50aXRpZXMgdG8gc3dlZXAg4oCUIHVzdWFsbHkgdGhlIHNlcnZpY2UncyBvd24gQ3J1ZFNlcnZpY2Ugc2luZ2xldG9ucy4gKi9cbiAgZW50aXRpZXM6IFB1cmdlYWJsZUVudGl0eVtdO1xufVxuXG4vKipcbiAqIEJ1aWxkIChidXQgZG8gTk9UIHN0YXJ0KSBhIGxlYWRlci1sb2NrZWQgc2NoZWR1bGVyIHRoYXQgcnVucyB0aGUgc29mdC1kZWxldGVcbiAqIHB1cmdlIHN3ZWVwIGZvciBgZW50aXRpZXNgIG9uIGEgY2FkZW5jZS4gVGhlIGNhbGxlciBgLnN0YXJ0KClgcyBpdCBhbmQgd2lyZXNcbiAqIGBzdG9wKClgIHRvIFNJR1RFUk0uIFJldHVybnMgbnVsbCB3aGVuIHB1cmdpbmcgaXMgZGlzYWJsZWQuXG4gKlxuICogRW52IGNvbmZpZzpcbiAqICAgU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRCAgICAgICAgICAgKGRlZmF1bHQgdHJ1ZTsgZmFsc2Ug4oeSIG51bGwsIG5vIHN3ZWVwKVxuICogICBTT0ZUX0RFTEVURV9QVVJHRV9JTlRFUlZBTF9IT1VSUyAgICAoZGVmYXVsdCA2KVxuICogICBTT0ZUX0RFTEVURV9QVVJHRV9TVEFSVFVQX0RFTEFZX01TICAoZGVmYXVsdCAxMjAwMDAg4oCUIDIgbWluIHNldHRsZSlcbiAqICAgU09GVF9ERUxFVEVfUFVSR0VfTE9DS19UVExfTVMgICAgICAgKGRlZmF1bHQgOTAwMDAwIOKAlCAxNSBtaW47IG91dGxhc3RzIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwLCBzdGF5cyB1bmRlciB0aGUgaW50ZXJ2YWwpXG4gKlxuICogQSBjcm9zcy1wb2QgbGVhZGVyIGxvY2sgKHdoZW4gUmVkaXMgaXMgY29uZmlndXJlZCkgbWVhbnMgb25seSBvbmUgcmVwbGljYVxuICogc3dlZXBzIHBlciB3aW5kb3c7IHdpdGhvdXQgUmVkaXMgaXQgcnVucyBvbiBldmVyeSBwb2Qg4oCUIHN0aWxsIHNhZmUsIHNpbmNlIHRoZVxuICogcHVyZ2UgaXMgYSBiYXRjaGVkIGlkZW1wb3RlbnQgREVMRVRFLCBqdXN0IHJlZHVuZGFudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNvZnREZWxldGVQdXJnZVNjaGVkdWxlcihvcHRzOiBTb2Z0RGVsZXRlUHVyZ2VTY2hlZHVsZXJPcHRpb25zKTogU2NoZWR1bGVyIHwgbnVsbCB7XG4gIGlmICghaXNTb2Z0RGVsZXRlUHVyZ2VFbmFibGVkKCkpIHtcbiAgICBsb2dnZXIuaW5mbygnU29mdC1kZWxldGUgcHVyZ2Ugc2NoZWR1bGVyIGRpc2FibGVkIChTT0ZUX0RFTEVURV9QVVJHRV9FTkFCTEVEPWZhbHNlKScsIHsgc2VydmljZTogb3B0cy5zZXJ2aWNlIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaW50ZXJ2YWxNcyA9IGVudkludCgnU09GVF9ERUxFVEVfUFVSR0VfSU5URVJWQUxfSE9VUlMnLCA2LCB7IG1pbjogMSB9KSAqIDYwICogNjAgKiAxMDAwO1xuICBjb25zdCBzdGFydHVwRGVsYXlNcyA9IGVudkludCgnU09GVF9ERUxFVEVfUFVSR0VfU1RBUlRVUF9ERUxBWV9NUycsIDEyMF8wMDAsIHsgbWluOiAwIH0pO1xuICBjb25zdCBsb2NrVHRsTXMgPSBlbnZJbnQoJ1NPRlRfREVMRVRFX1BVUkdFX0xPQ0tfVFRMX01TJywgOTAwXzAwMCwgeyBtaW46IDEwMDAgfSk7XG5cbiAgbG9nZ2VyLmluZm8oJ1NvZnQtZGVsZXRlIHB1cmdlIHNjaGVkdWxlciBzdGFydGluZycsIHtcbiAgICBzZXJ2aWNlOiBvcHRzLnNlcnZpY2UsXG4gICAgZW50aXRpZXM6IG9wdHMuZW50aXRpZXMubWFwKChlKSA9PiBlLm5hbWUpLFxuICAgIGludGVydmFsSG91cnM6IGludGVydmFsTXMgLyAzXzYwMF8wMDAsXG4gIH0pO1xuXG4gIHJldHVybiBjcmVhdGVTY2hlZHVsZXIoe1xuICAgIG5hbWU6IGBzb2Z0LWRlbGV0ZS1wdXJnZToke29wdHMuc2VydmljZX1gLFxuICAgIGludGVydmFsTXMsXG4gICAgc3RhcnR1cERlbGF5TXMsXG4gICAgcnVuOiBhc3luYyAoKSA9PiB7IGF3YWl0IHJ1blNvZnREZWxldGVQdXJnZShvcHRzLmVudGl0aWVzLCBvcHRzKTsgfSxcbiAgICBsb2NrOiB7IGtleTogYHNvZnQtZGVsZXRlLXB1cmdlOiR7b3B0cy5zZXJ2aWNlfTpsZWFkZXJgLCB0dGxNczogbG9ja1R0bE1zIH0sXG4gIH0pO1xufVxuIl19
|
|
@@ -96,11 +96,26 @@ export interface PluginFilter extends CommonFilter {
|
|
|
96
96
|
*/
|
|
97
97
|
readonly name?: string;
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
99
|
+
* How `name` matches: `contains` (default — case-insensitive substring, for
|
|
100
|
+
* list/search) or `exact` (resolution — the lookup path). Internal: not in
|
|
101
|
+
* the public filter schema.
|
|
102
|
+
*/
|
|
103
|
+
readonly nameMatch?: 'exact' | 'contains';
|
|
104
|
+
/**
|
|
105
|
+
* Publisher handle of an installed listing to resolve through.
|
|
106
|
+
* Lookup only: a `plugins` row query ignores it (the resolver routes a
|
|
107
|
+
* qualified reference to the listing, never to an org's own rows).
|
|
108
|
+
*/
|
|
109
|
+
readonly publisher?: string;
|
|
110
|
+
/**
|
|
111
|
+
* Plugin version spec: exact (`1.2.3`), caret (`^1.2.3`), tilde (`~1.2.3`),
|
|
112
|
+
* partial (`1`, `1.2`, `1.x`) or `latest` — see semver-range.ts. A range never
|
|
113
|
+
* matches a yanked version.
|
|
114
|
+
* @example "1.0.0", "^2.0.0", "~1.2.3", "latest"
|
|
102
115
|
*/
|
|
103
116
|
readonly version?: string;
|
|
117
|
+
/** Exclude yanked versions (resolution without a version spec). Internal. */
|
|
118
|
+
readonly excludeYanked?: boolean;
|
|
104
119
|
/**
|
|
105
120
|
* Keyword to search within the keywords JSONB array (case-insensitive contains)
|
|
106
121
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
export {};
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3F1ZXJ5LWZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFZpc2liaWxpdHkgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbi8qKlxuICogQmFzZSBmaWx0ZXIgaW50ZXJmYWNlIGNvbnRhaW5pbmcgY29tbW9uIGZpbHRlciBwcm9wZXJ0aWVzIHNoYXJlZCBhY3Jvc3MgYWxsIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsdGVyOiBDb21tb25GaWx0ZXIgPSB7XG4gKiAgIGlkOiAnMTIzJyxcbiAqICAgb3JnSWQ6ICdteS1vcmcnLFxuICogICB2aXNpYmlsaXR5OiAncHVibGljJyxcbiAqICAgaXNEZWZhdWx0OiB0cnVlLFxuICogICBpc0FjdGl2ZTogdHJ1ZVxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkZpbHRlciB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudGl0eVxuICAgKiBDYW4gYmUgYSBzaW5nbGUgSUQgb3IgYXJyYXkgb2YgSURzIGZvciBiYXRjaCBmaWx0ZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLy8gLS0tIFZpZXdlciBjb250ZXh0IChzZXJ2ZXItc2V0LCBORVZFUiBjbGllbnQtc3VwcGxpZWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBPbmx5IGVudGl0aWVzIHdob3NlIHZpc2liaWxpdHkgcHJlZGljYXRlIGhhcyBhIFBFUi1VU0VSIHJ1bmcgcmVhZCB0aGVzZSDigJRcbiAgLy8gcGlwZWxpbmUgdGVtcGxhdGVzIChgcHJpdmF0ZWAgaXMgYXV0aG9yLW9ubHkpIGFuZCBtZXNzYWdlcyAoYSBwZXItdXNlclxuICAvLyB0YXJnZXRlZCByb3cgaXMgdmlzaWJsZSBvbmx5IHRvIGl0cyB0YXJnZXQpLiBUaGVpciBzZXJ2aWNlcyBzdGFtcCB0aGVtIGZyb21cbiAgLy8gdGhlIHJlcXVlc3QncyBgVGVuYW50Q29udGV4dGAgdmlhIGB3aXRoVmlld2VyQ29udGV4dGAsIHNvIG5vIHJvdXRlIG9yIHF1ZXJ5XG4gIC8vIHN0cmluZyBjYW4gaW5qZWN0IHRoZW0uIEV2ZXJ5dGhpbmcgZWxzZSBpZ25vcmVzIHRoZW0uXG4gIC8vXG4gIC8vIEJvdGggZmFpbCBDTE9TRUQgd2hlbiBhYnNlbnQ6IG5vIHZpZXdlciBtZWFucyB0aGUgcGVyLXVzZXIgcnVuZyBtYXRjaGVzXG4gIC8vIE5PVEhJTkcsIG5ldmVyIGV2ZXJ5dGhpbmcuXG5cbiAgLyoqIENhbGxlcidzIHVzZXIgaWQsIG1hdGNoZWQgYWdhaW5zdCB0aGUgZW50aXR5J3MgcGVyLXVzZXIgY29sdW1uLiAqL1xuICByZWFkb25seSB2aWV3ZXJVc2VySWQ/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBjYWxsZXIgaXMgYSBwbGF0Zm9ybSBzdXBlci1hZG1pbiAoc2VlcyBldmVyeSBydW5nKS4gKi9cbiAgcmVhZG9ubHkgdmlld2VySXNTdXBlckFkbWluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3JnYW5pemF0aW9uIGlkZW50aWZpZXIgdG8gZmlsdGVyIGVudGl0aWVzIGJ5IG9yZ2FuaXphdGlvblxuICAgKiBDYW4gYmUgYSBzaW5nbGUgb3JnIElEIG9yIGFycmF5IGZvciBtdWx0aS1vcmcgZmlsdGVyaW5nXG4gICAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYXJyb3cgdG8gb25lIHJ1bmcgb2YgdGhlIHNoYXJlZCB0aHJlZS1ydW5nIHNoYXJpbmcgbGFkZGVyLiBBcHBsaWVkIFdJVEhJTlxuICAgKiB3aGF0IHRoZSBjYWxsZXIgY2FuIGFscmVhZHkgc2VlIOKAlCBuZXZlciB3aWRlbnMgaXQuXG4gICAqIEBzZWUgVmlzaWJpbGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaWJpbGl0eT86IFZpc2liaWxpdHkgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBkZWZhdWx0IHN0YXR1c1xuICAgKiAtIHRydWU6IE9ubHkgZGVmYXVsdCBlbnRpdGllc1xuICAgKiAtIGZhbHNlOiBPbmx5IG5vbi1kZWZhdWx0IGVudGl0aWVzXG4gICAqIC0gdW5kZWZpbmVkOiBBbGwgZW50aXRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGlzRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBhY3RpdmUvaW5hY3RpdmUgc3RhdHVzXG4gICAqIC0gdHJ1ZTogT25seSBhY3RpdmUgZW50aXRpZXNcbiAgICogLSBmYWxzZTogT25seSBpbmFjdGl2ZSBlbnRpdGllc1xuICAgKiAtIHVuZGVmaW5lZDogQWxsIGVudGl0aWVzXG4gICAqL1xuICByZWFkb25seSBpc0FjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXN1bHRzIHRvIHJldHVyblxuICAgKiBAbWluaW11bSAxXG4gICAqIEBtYXhpbXVtIDEwMDBcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzdWx0cyB0byBza2lwIChmb3IgcGFnaW5hdGlvbilcbiAgICogQG1pbmltdW0gMFxuICAgKi9cbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTb3J0IGZpZWxkIGFuZCBkaXJlY3Rpb25cbiAgICogQGV4YW1wbGUgXCJuYW1lOmFzY1wiLCBcImNyZWF0ZWRBdDpkZXNjXCJcbiAgICovXG4gIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBjYXRhbG9nIG93bmVyIChkZXZlbG9wZXItcG9ydGFsIFwibXkgc2VydmljZXNcIiB2aWV3KS5cbiAgICogTWF0Y2hlcyB0aGUgZW50aXR5J3MgYG93bmVySWRgIGV4YWN0bHkgKGEgdXNlciBpZCBvciB0ZWFtIGlkKS5cbiAgICogT25seSBhcHBsaWVkIGJ5IGJ1aWxkZXJzIGZvciBlbnRpdGllcyB0aGF0IGNhcnJ5IGFuIG93bmVyIGNvbHVtblxuICAgKiAocGlwZWxpbmVzLCBwbHVnaW5zKTsgaWdub3JlZCBlbHNld2hlcmUuXG4gICAqL1xuICByZWFkb25seSBvd25lcklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgbGlmZWN5Y2xlIHN0YWdlIChleHBlcmltZW50YWwgfCBwcm9kdWN0aW9uIHwgZGVwcmVjYXRlZCkuXG4gICAqIE9ubHkgYXBwbGllZCBieSBidWlsZGVycyBmb3IgZW50aXRpZXMgdGhhdCBjYXJyeSBhIGxpZmVjeWNsZSBjb2x1bW4uXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsdGVyIGludGVyZmFjZSBmb3IgcGx1Z2luLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBFeHRlbmRzIENvbW1vbkZpbHRlciB0byBpbmNsdWRlIHBsdWdpbi1yZWxhdGVkIGZpbHRlciBvcHRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWx0ZXI6IFBsdWdpbkZpbHRlciA9IHtcbiAqICAgbmFtZTogJ25vZGVqcy1idWlsZCcsXG4gKiAgIHZlcnNpb246ICcxLjAuMCcsXG4gKiAgIGlzQWN0aXZlOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIHRvIGZpbHRlciBieVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUGx1Z2luIHZlcnNpb24gdG8gZmlsdGVyIGJ5XG4gICAqIFN1cHBvcnRzIHNlbWFudGljIHZlcnNpb25pbmdcbiAgICogQGV4YW1wbGUgXCIxLjAuMFwiLCBcIl4yLjAuMFwiLCBcIn4xLjIuM1wiXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZXl3b3JkIHRvIHNlYXJjaCB3aXRoaW4gdGhlIGtleXdvcmRzIEpTT05CIGFycmF5IChjYXNlLWluc2Vuc2l0aXZlIGNvbnRhaW5zKVxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGx1Z2luIGNhdGVnb3J5IHRvIGZpbHRlciBieVxuICAgKiBAZXhhbXBsZSBcImxhbmd1YWdlXCIsIFwic2VjdXJpdHlcIiwgXCJ0ZXN0aW5nXCJcbiAgICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZpbHRlciBpbnRlcmZhY2UgZm9yIHBpcGVsaW5lLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBFeHRlbmRzIENvbW1vbkZpbHRlciB0byBpbmNsdWRlIHBpcGVsaW5lLXJlbGF0ZWQgZmlsdGVyIG9wdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbHRlcjogUGlwZWxpbmVGaWx0ZXIgPSB7XG4gKiAgIHByb2plY3Q6ICdteS1hcHAnLFxuICogICBvcmdhbml6YXRpb246ICdteS1vcmcnLFxuICogICBwaXBlbGluZU5hbWU6ICdteS1waXBlbGluZScsXG4gKiAgIGlzQWN0aXZlOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVGaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICAvKipcbiAgICogUHJvamVjdCBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGlwZWxpbmVcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9yZ2FuaXphdGlvbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGlwZWxpbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUGlwZWxpbmUgbmFtZSB0byBmaWx0ZXIgYnlcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogS2V5d29yZCB0byBzZWFyY2ggd2l0aGluIHRoZSBrZXl3b3JkcyBKU09OQiBhcnJheSAoY2FzZS1pbnNlbnNpdGl2ZSBjb250YWlucylcbiAgICovXG4gIHJlYWRvbmx5IGtleXdvcmQ/OiBzdHJpbmc7XG59XG5cbi8qKiBGaWx0ZXIgaW50ZXJmYWNlIGZvciBwaXBlbGluZS10ZW1wbGF0ZSBxdWVyaWVzIChnb2xkZW4tcGF0aCBjYXRhbG9nKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVUZW1wbGF0ZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIC8qKiBUZW1wbGF0ZSBuYW1lIChjYXNlLWluc2Vuc2l0aXZlIGNvbnRhaW5zKS4gKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgLyoqIENhdGVnb3J5IHRvIGZpbHRlciBieSAoZS5nLiAnbGFuZ3VhZ2UnLCAnZ2VuZXJhbCcpLiAqL1xuICByZWFkb25seSBjYXRlZ29yeT86IHN0cmluZztcbiAgLyoqIEtleXdvcmQgc2VhcmNoIHdpdGhpbiB0aGUga2V5d29yZHMgSlNPTkIgYXJyYXkuICovXG4gIHJlYWRvbmx5IGtleXdvcmQ/OiBzdHJpbmc7XG4gIC8vIFNoYXJpbmcgcnVuZyArIHZpZXdlciBjb250ZXh0IGFyZSBpbmhlcml0ZWQgZnJvbSBDb21tb25GaWx0ZXIuXG59XG5cbi8qKlxuICogRmlsdGVyIGludGVyZmFjZSBmb3IgbWVzc2FnZS1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxuICogRXh0ZW5kcyBDb21tb25GaWx0ZXIgdG8gaW5jbHVkZSBtZXNzYWdlLXJlbGF0ZWQgZmlsdGVyIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIC8qKlxuICAgKiBUaHJlYWQgSUQgdG8gZmlsdGVyIGJ5IChmb3IgZmV0Y2hpbmcgdGhyZWFkIHJlcGxpZXMpLlxuICAgKiBQYXNzIGBudWxsYCB0byBmaWx0ZXIgZm9yIHJvb3QgbWVzc2FnZXMgb25seSAodGhyZWFkSWQgSVMgTlVMTCkuXG4gICAqL1xuICByZWFkb25seSB0aHJlYWRJZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFJlY2lwaWVudCBvcmdhbml6YXRpb24gSUQgdG8gZmlsdGVyIGJ5XG4gICAqIFVzZSAnKicgZm9yIGJyb2FkY2FzdCBhbm5vdW5jZW1lbnRzXG4gICAqL1xuICByZWFkb25seSByZWNpcGllbnRPcmdJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVjaXBpZW50IHVzZXIgSUQgdG8gZmlsdGVyIGJ5IChwZXItdXNlciB0YXJnZXRpbmcgd2l0aGluIHRoZSByZWNpcGllbnRcbiAgICogb3JnKS4gUGFzcyBgbnVsbGAgdG8gbWF0Y2ggb3JnLXdpZGUgbWVzc2FnZXMgb25seSAocmVjaXBpZW50X3VzZXJfaWQgSVNcbiAgICogTlVMTCkuIFJhcmVseSBzZXQgZGlyZWN0bHkgYnkgY2FsbGVycyDigJQgc2VlIGB2aWV3ZXJVc2VySWRgIGZvciB0aGVcbiAgICogdmlzaWJpbGl0eS1zY29waW5nIHZhcmlhbnQuXG4gICAqL1xuICByZWFkb25seSByZWNpcGllbnRVc2VySWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8vIE5PVEU6IHRoZSBWSUVXRVIncyB1c2VyIGlkIChgdmlld2VyVXNlcklkYCkgaXMgaW5oZXJpdGVkIGZyb20gQ29tbW9uRmlsdGVyLlxuICAvLyBGb3IgbWVzc2FnZXMgaXQgaXMgTk9UIGEgY29sdW1uIGZpbHRlcjogd2hlbiBwcmVzZW50LCB0aGUgcmVjaXBpZW50LXNpZGVcbiAgLy8gYnJhbmNoIGluIGBidWlsZE1lc3NhZ2VDb25kaXRpb25zYCB3aWRlbnMgdG8gaW5jbHVkZSByb3dzIHRhcmdldGVkIGF0IHRoaXNcbiAgLy8gdXNlciAocmVjaXBpZW50X3VzZXJfaWQgPSB2aWV3ZXJVc2VySWQpIEFMT05HU0lERSBvcmctd2lkZSBvbmVzXG4gIC8vIChyZWNpcGllbnRfdXNlcl9pZCBJUyBOVUxMKS4gV2hlbiBhYnNlbnQsIG9ubHkgb3JnLXdpZGUgcmVjaXBpZW50IHJvd3MgYXJlXG4gIC8vIHZpc2libGUsIHNvIGEgdXNlci10YXJnZXRlZCBtZXNzYWdlIHN0YXlzIHByaXZhdGUgdG8gaXRzIHRhcmdldCwgdGhlIHNlbmRlcixcbiAgLy8gYW5kIHRoZSBzeXN0ZW0gb3JnLiBNZXNzYWdlU2VydmljZSBzdGFtcHMgaXQgZnJvbSB0aGUgdGVuYW50IGNvbnRleHQuXG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgdHlwZSBmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2VUeXBlPzogJ2Fubm91bmNlbWVudCcgfCAnY29udmVyc2F0aW9uJztcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IHByaW9yaXR5IGxldmVsXG4gICAqL1xuICByZWFkb25seSBwcmlvcml0eT86ICdub3JtYWwnIHwgJ2hpZ2gnIHwgJ3VyZ2VudCc7XG5cbiAgLyoqXG4gICAqIENoYW5uZWwvaW5ib3gtYnVja2V0IGZpbHRlciAoZS5nLiAnc3VwcG9ydCcsICdoZWxwJykuIE1hdGNoZXMgcm93c1xuICAgKiBleGFjdGx5OyBwYXNzIG51bGwgdG8gbWF0Y2ggY2hhbm5lbCBJUyBOVUxMIChvcmctdG8tb3JnIG1lc3NhZ2VzKS5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5uZWw/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgcmVhZCBzdGF0ZSBmb3IgdGhlIHJlcXVlc3Rpbmcgb3JnLlxuICAgKiBJbXBsZW1lbnRlZCBhcyBhIEpTT05CIGtleS1leGlzdGVuY2UgY2hlY2sgYWdhaW5zdCBgbWVzc2FnZXMucmVhZF9ieWBcbiAgICogKGEgYHsgW29yZ0lkXTogaXNvVGltZXN0YW1wIH1gIG1hcCksIHVzaW5nIHRoZSBvcmdJZCBwYXNzZWQgdG9cbiAgICogYGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnNgLlxuICAgKiAtIHRydWUgIOKGkiBvbmx5IG1lc3NhZ2VzIHRoZSBvcmcgaGFzIHJlYWQgKG9yZ0lkIGtleSBleGlzdHMgaW4gcmVhZF9ieSlcbiAgICogLSBmYWxzZSDihpIgb25seSBtZXNzYWdlcyB0aGUgb3JnIGhhcyBOT1QgcmVhZFxuICAgKiAtIHVuZGVmaW5lZCDihpIgbm8gcmVhZC1zdGF0ZSBmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGlzUmVhZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZyZWUtdGV4dCBpbmJveCBzZWFyY2guIENhc2UtaW5zZW5zaXRpdmUgc3Vic3RyaW5nIG1hdGNoIGFnYWluc3QgdGhlXG4gICAqIG1lc3NhZ2UgYHN1YmplY3RgIE9SIGBjb250ZW50YCAoTElLRSB3aWxkY2FyZHMgaW4gdGhlIHRlcm0gYXJlIGVzY2FwZWQsIHNvIGFcbiAgICogbGl0ZXJhbCBgJWAvYF9gIG1hdGNoZXMgaXRzZWxmKS4gQXBwbGllZCBvbiB0b3Agb2YgdGhlIHZpc2liaWxpdHkgc2NvcGUsIHNvXG4gICAqIGl0IG5ldmVyIHdpZGVucyB3aGF0IHRoZSBjYWxsZXIgY2FuIHNlZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlYXJjaD86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29tcGxpYW5jZSBGaWx0ZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRmlsdGVyIGZvciBjb21wbGlhbmNlIHBvbGljaWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsaWFuY2VQb2xpY3lGaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBpc1RlbXBsYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgcnVsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZVJ1bGVGaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBwb2xpY3lJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGFyZ2V0PzogJ3BsdWdpbicgfCAncGlwZWxpbmUnO1xuICByZWFkb25seSBmaWVsZD86IHN0cmluZztcbiAgcmVhZG9ubHkgc2V2ZXJpdHk/OiAnd2FybmluZycgfCAnZXJyb3InIHwgJ2NyaXRpY2FsJztcbiAgcmVhZG9ubHkgc2NvcGU/OiAnb3JnJyB8ICdwdWJsaXNoZWQnO1xuICByZWFkb25seSB0YWc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsdGVyIGZvciBjb21wbGlhbmNlIGV4ZW1wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZUV4ZW1wdGlvbkZpbHRlciB7XG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudGl0eVR5cGU/OiAncGx1Z2luJyB8ICdwaXBlbGluZSc7XG4gIHJlYWRvbmx5IGVudGl0eUlkPzogc3RyaW5nO1xuICByZWFkb25seSBzdGF0dXM/OiAncGVuZGluZycgfCAnYXBwcm92ZWQnIHwgJ3JlamVjdGVkJyB8ICdleHBpcmVkJztcbiAgcmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9mZnNldD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgYXVkaXQgbG9nIGVudHJpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZUF1ZGl0RmlsdGVyIHtcbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhcmdldD86ICdwbHVnaW4nIHwgJ3BpcGVsaW5lJztcbiAgcmVhZG9ubHkgYWN0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSByZXN1bHQ/OiAncGFzcycgfCAnd2FybicgfCAnYmxvY2snO1xuICByZWFkb25seSBzY2FuSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRhdGVGcm9tPzogc3RyaW5nO1xuICByZWFkb25seSBkYXRlVG8/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuICByZWFkb25seSBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRmlsdGVyIGZvciBjb21wbGlhbmNlIHNjYW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsaWFuY2VTY2FuRmlsdGVyIHtcbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhcmdldD86ICdwbHVnaW4nIHwgJ3BpcGVsaW5lJyB8ICdhbGwnO1xuICByZWFkb25seSBzdGF0dXM/OiAncGVuZGluZycgfCAncnVubmluZycgfCAnY29tcGxldGVkJyB8ICdmYWlsZWQnIHwgJ2NhbmNlbGxlZCc7XG4gIHJlYWRvbmx5IHRyaWdnZXJlZEJ5PzogJ21hbnVhbCcgfCAnc2NoZWR1bGVkJyB8ICdydWxlLWNoYW5nZScgfCAncnVsZS1kcnktcnVuJztcbiAgcmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9mZnNldD86IG51bWJlcjtcbn1cbiJdfQ==
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3F1ZXJ5LWZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFZpc2liaWxpdHkgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbi8qKlxuICogQmFzZSBmaWx0ZXIgaW50ZXJmYWNlIGNvbnRhaW5pbmcgY29tbW9uIGZpbHRlciBwcm9wZXJ0aWVzIHNoYXJlZCBhY3Jvc3MgYWxsIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsdGVyOiBDb21tb25GaWx0ZXIgPSB7XG4gKiAgIGlkOiAnMTIzJyxcbiAqICAgb3JnSWQ6ICdteS1vcmcnLFxuICogICB2aXNpYmlsaXR5OiAncHVibGljJyxcbiAqICAgaXNEZWZhdWx0OiB0cnVlLFxuICogICBpc0FjdGl2ZTogdHJ1ZVxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkZpbHRlciB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudGl0eVxuICAgKiBDYW4gYmUgYSBzaW5nbGUgSUQgb3IgYXJyYXkgb2YgSURzIGZvciBiYXRjaCBmaWx0ZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLy8gLS0tIFZpZXdlciBjb250ZXh0IChzZXJ2ZXItc2V0LCBORVZFUiBjbGllbnQtc3VwcGxpZWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBPbmx5IGVudGl0aWVzIHdob3NlIHZpc2liaWxpdHkgcHJlZGljYXRlIGhhcyBhIFBFUi1VU0VSIHJ1bmcgcmVhZCB0aGVzZSDigJRcbiAgLy8gcGlwZWxpbmUgdGVtcGxhdGVzIChgcHJpdmF0ZWAgaXMgYXV0aG9yLW9ubHkpIGFuZCBtZXNzYWdlcyAoYSBwZXItdXNlclxuICAvLyB0YXJnZXRlZCByb3cgaXMgdmlzaWJsZSBvbmx5IHRvIGl0cyB0YXJnZXQpLiBUaGVpciBzZXJ2aWNlcyBzdGFtcCB0aGVtIGZyb21cbiAgLy8gdGhlIHJlcXVlc3QncyBgVGVuYW50Q29udGV4dGAgdmlhIGB3aXRoVmlld2VyQ29udGV4dGAsIHNvIG5vIHJvdXRlIG9yIHF1ZXJ5XG4gIC8vIHN0cmluZyBjYW4gaW5qZWN0IHRoZW0uIEV2ZXJ5dGhpbmcgZWxzZSBpZ25vcmVzIHRoZW0uXG4gIC8vXG4gIC8vIEJvdGggZmFpbCBDTE9TRUQgd2hlbiBhYnNlbnQ6IG5vIHZpZXdlciBtZWFucyB0aGUgcGVyLXVzZXIgcnVuZyBtYXRjaGVzXG4gIC8vIE5PVEhJTkcsIG5ldmVyIGV2ZXJ5dGhpbmcuXG5cbiAgLyoqIENhbGxlcidzIHVzZXIgaWQsIG1hdGNoZWQgYWdhaW5zdCB0aGUgZW50aXR5J3MgcGVyLXVzZXIgY29sdW1uLiAqL1xuICByZWFkb25seSB2aWV3ZXJVc2VySWQ/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBjYWxsZXIgaXMgYSBwbGF0Zm9ybSBzdXBlci1hZG1pbiAoc2VlcyBldmVyeSBydW5nKS4gKi9cbiAgcmVhZG9ubHkgdmlld2VySXNTdXBlckFkbWluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3JnYW5pemF0aW9uIGlkZW50aWZpZXIgdG8gZmlsdGVyIGVudGl0aWVzIGJ5IG9yZ2FuaXphdGlvblxuICAgKiBDYW4gYmUgYSBzaW5nbGUgb3JnIElEIG9yIGFycmF5IGZvciBtdWx0aS1vcmcgZmlsdGVyaW5nXG4gICAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYXJyb3cgdG8gb25lIHJ1bmcgb2YgdGhlIHNoYXJlZCB0aHJlZS1ydW5nIHNoYXJpbmcgbGFkZGVyLiBBcHBsaWVkIFdJVEhJTlxuICAgKiB3aGF0IHRoZSBjYWxsZXIgY2FuIGFscmVhZHkgc2VlIOKAlCBuZXZlciB3aWRlbnMgaXQuXG4gICAqIEBzZWUgVmlzaWJpbGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaWJpbGl0eT86IFZpc2liaWxpdHkgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBkZWZhdWx0IHN0YXR1c1xuICAgKiAtIHRydWU6IE9ubHkgZGVmYXVsdCBlbnRpdGllc1xuICAgKiAtIGZhbHNlOiBPbmx5IG5vbi1kZWZhdWx0IGVudGl0aWVzXG4gICAqIC0gdW5kZWZpbmVkOiBBbGwgZW50aXRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGlzRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBhY3RpdmUvaW5hY3RpdmUgc3RhdHVzXG4gICAqIC0gdHJ1ZTogT25seSBhY3RpdmUgZW50aXRpZXNcbiAgICogLSBmYWxzZTogT25seSBpbmFjdGl2ZSBlbnRpdGllc1xuICAgKiAtIHVuZGVmaW5lZDogQWxsIGVudGl0aWVzXG4gICAqL1xuICByZWFkb25seSBpc0FjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXN1bHRzIHRvIHJldHVyblxuICAgKiBAbWluaW11bSAxXG4gICAqIEBtYXhpbXVtIDEwMDBcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzdWx0cyB0byBza2lwIChmb3IgcGFnaW5hdGlvbilcbiAgICogQG1pbmltdW0gMFxuICAgKi9cbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTb3J0IGZpZWxkIGFuZCBkaXJlY3Rpb25cbiAgICogQGV4YW1wbGUgXCJuYW1lOmFzY1wiLCBcImNyZWF0ZWRBdDpkZXNjXCJcbiAgICovXG4gIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBjYXRhbG9nIG93bmVyIChkZXZlbG9wZXItcG9ydGFsIFwibXkgc2VydmljZXNcIiB2aWV3KS5cbiAgICogTWF0Y2hlcyB0aGUgZW50aXR5J3MgYG93bmVySWRgIGV4YWN0bHkgKGEgdXNlciBpZCBvciB0ZWFtIGlkKS5cbiAgICogT25seSBhcHBsaWVkIGJ5IGJ1aWxkZXJzIGZvciBlbnRpdGllcyB0aGF0IGNhcnJ5IGFuIG93bmVyIGNvbHVtblxuICAgKiAocGlwZWxpbmVzLCBwbHVnaW5zKTsgaWdub3JlZCBlbHNld2hlcmUuXG4gICAqL1xuICByZWFkb25seSBvd25lcklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgbGlmZWN5Y2xlIHN0YWdlIChleHBlcmltZW50YWwgfCBwcm9kdWN0aW9uIHwgZGVwcmVjYXRlZCkuXG4gICAqIE9ubHkgYXBwbGllZCBieSBidWlsZGVycyBmb3IgZW50aXRpZXMgdGhhdCBjYXJyeSBhIGxpZmVjeWNsZSBjb2x1bW4uXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsdGVyIGludGVyZmFjZSBmb3IgcGx1Z2luLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBFeHRlbmRzIENvbW1vbkZpbHRlciB0byBpbmNsdWRlIHBsdWdpbi1yZWxhdGVkIGZpbHRlciBvcHRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWx0ZXI6IFBsdWdpbkZpbHRlciA9IHtcbiAqICAgbmFtZTogJ25vZGVqcy1idWlsZCcsXG4gKiAgIHZlcnNpb246ICcxLjAuMCcsXG4gKiAgIGlzQWN0aXZlOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIHRvIGZpbHRlciBieVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IGBuYW1lYCBtYXRjaGVzOiBgY29udGFpbnNgIChkZWZhdWx0IOKAlCBjYXNlLWluc2Vuc2l0aXZlIHN1YnN0cmluZywgZm9yXG4gICAqIGxpc3Qvc2VhcmNoKSBvciBgZXhhY3RgIChyZXNvbHV0aW9uIOKAlCB0aGUgbG9va3VwIHBhdGgpLiBJbnRlcm5hbDogbm90IGluXG4gICAqIHRoZSBwdWJsaWMgZmlsdGVyIHNjaGVtYS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWVNYXRjaD86ICdleGFjdCcgfCAnY29udGFpbnMnO1xuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXIgaGFuZGxlIG9mIGFuIGluc3RhbGxlZCBsaXN0aW5nIHRvIHJlc29sdmUgdGhyb3VnaC5cbiAgICogTG9va3VwIG9ubHk6IGEgYHBsdWdpbnNgIHJvdyBxdWVyeSBpZ25vcmVzIGl0ICh0aGUgcmVzb2x2ZXIgcm91dGVzIGFcbiAgICogcXVhbGlmaWVkIHJlZmVyZW5jZSB0byB0aGUgbGlzdGluZywgbmV2ZXIgdG8gYW4gb3JnJ3Mgb3duIHJvd3MpLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gdmVyc2lvbiBzcGVjOiBleGFjdCAoYDEuMi4zYCksIGNhcmV0IChgXjEuMi4zYCksIHRpbGRlIChgfjEuMi4zYCksXG4gICAqIHBhcnRpYWwgKGAxYCwgYDEuMmAsIGAxLnhgKSBvciBgbGF0ZXN0YCDigJQgc2VlIHNlbXZlci1yYW5nZS50cy4gQSByYW5nZSBuZXZlclxuICAgKiBtYXRjaGVzIGEgeWFua2VkIHZlcnNpb24uXG4gICAqIEBleGFtcGxlIFwiMS4wLjBcIiwgXCJeMi4wLjBcIiwgXCJ+MS4yLjNcIiwgXCJsYXRlc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKiogRXhjbHVkZSB5YW5rZWQgdmVyc2lvbnMgKHJlc29sdXRpb24gd2l0aG91dCBhIHZlcnNpb24gc3BlYykuIEludGVybmFsLiAqL1xuICByZWFkb25seSBleGNsdWRlWWFua2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogS2V5d29yZCB0byBzZWFyY2ggd2l0aGluIHRoZSBrZXl3b3JkcyBKU09OQiBhcnJheSAoY2FzZS1pbnNlbnNpdGl2ZSBjb250YWlucylcbiAgICovXG4gIHJlYWRvbmx5IGtleXdvcmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsdWdpbiBjYXRlZ29yeSB0byBmaWx0ZXIgYnlcbiAgICogQGV4YW1wbGUgXCJsYW5ndWFnZVwiLCBcInNlY3VyaXR5XCIsIFwidGVzdGluZ1wiXG4gICAqL1xuICByZWFkb25seSBjYXRlZ29yeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgaW50ZXJmYWNlIGZvciBwaXBlbGluZS1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxuICogRXh0ZW5kcyBDb21tb25GaWx0ZXIgdG8gaW5jbHVkZSBwaXBlbGluZS1yZWxhdGVkIGZpbHRlciBvcHRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWx0ZXI6IFBpcGVsaW5lRmlsdGVyID0ge1xuICogICBwcm9qZWN0OiAnbXktYXBwJyxcbiAqICAgb3JnYW5pemF0aW9uOiAnbXktb3JnJyxcbiAqICAgcGlwZWxpbmVOYW1lOiAnbXktcGlwZWxpbmUnLFxuICogICBpc0FjdGl2ZTogdHJ1ZVxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFByb2plY3QgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcmdhbml6YXRpb24gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lIG5hbWUgdG8gZmlsdGVyIGJ5XG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEtleXdvcmQgdG8gc2VhcmNoIHdpdGhpbiB0aGUga2V5d29yZHMgSlNPTkIgYXJyYXkgKGNhc2UtaW5zZW5zaXRpdmUgY29udGFpbnMpXG4gICAqL1xuICByZWFkb25seSBrZXl3b3JkPzogc3RyaW5nO1xufVxuXG4vKiogRmlsdGVyIGludGVyZmFjZSBmb3IgcGlwZWxpbmUtdGVtcGxhdGUgcXVlcmllcyAoZ29sZGVuLXBhdGggY2F0YWxvZykuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lVGVtcGxhdGVGaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICAvKiogVGVtcGxhdGUgbmFtZSAoY2FzZS1pbnNlbnNpdGl2ZSBjb250YWlucykuICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDYXRlZ29yeSB0byBmaWx0ZXIgYnkgKGUuZy4gJ2xhbmd1YWdlJywgJ2dlbmVyYWwnKS4gKi9cbiAgcmVhZG9ubHkgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIC8qKiBLZXl3b3JkIHNlYXJjaCB3aXRoaW4gdGhlIGtleXdvcmRzIEpTT05CIGFycmF5LiAqL1xuICByZWFkb25seSBrZXl3b3JkPzogc3RyaW5nO1xuICAvLyBTaGFyaW5nIHJ1bmcgKyB2aWV3ZXIgY29udGV4dCBhcmUgaW5oZXJpdGVkIGZyb20gQ29tbW9uRmlsdGVyLlxufVxuXG4vKipcbiAqIEZpbHRlciBpbnRlcmZhY2UgZm9yIG1lc3NhZ2Utc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIEV4dGVuZHMgQ29tbW9uRmlsdGVyIHRvIGluY2x1ZGUgbWVzc2FnZS1yZWxhdGVkIGZpbHRlciBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VGaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICAvKipcbiAgICogVGhyZWFkIElEIHRvIGZpbHRlciBieSAoZm9yIGZldGNoaW5nIHRocmVhZCByZXBsaWVzKS5cbiAgICogUGFzcyBgbnVsbGAgdG8gZmlsdGVyIGZvciByb290IG1lc3NhZ2VzIG9ubHkgKHRocmVhZElkIElTIE5VTEwpLlxuICAgKi9cbiAgcmVhZG9ubHkgdGhyZWFkSWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBSZWNpcGllbnQgb3JnYW5pemF0aW9uIElEIHRvIGZpbHRlciBieVxuICAgKiBVc2UgJyonIGZvciBicm9hZGNhc3QgYW5ub3VuY2VtZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgcmVjaXBpZW50T3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlY2lwaWVudCB1c2VyIElEIHRvIGZpbHRlciBieSAocGVyLXVzZXIgdGFyZ2V0aW5nIHdpdGhpbiB0aGUgcmVjaXBpZW50XG4gICAqIG9yZykuIFBhc3MgYG51bGxgIHRvIG1hdGNoIG9yZy13aWRlIG1lc3NhZ2VzIG9ubHkgKHJlY2lwaWVudF91c2VyX2lkIElTXG4gICAqIE5VTEwpLiBSYXJlbHkgc2V0IGRpcmVjdGx5IGJ5IGNhbGxlcnMg4oCUIHNlZSBgdmlld2VyVXNlcklkYCBmb3IgdGhlXG4gICAqIHZpc2liaWxpdHktc2NvcGluZyB2YXJpYW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjaXBpZW50VXNlcklkPzogc3RyaW5nIHwgbnVsbDtcblxuICAvLyBOT1RFOiB0aGUgVklFV0VSJ3MgdXNlciBpZCAoYHZpZXdlclVzZXJJZGApIGlzIGluaGVyaXRlZCBmcm9tIENvbW1vbkZpbHRlci5cbiAgLy8gRm9yIG1lc3NhZ2VzIGl0IGlzIE5PVCBhIGNvbHVtbiBmaWx0ZXI6IHdoZW4gcHJlc2VudCwgdGhlIHJlY2lwaWVudC1zaWRlXG4gIC8vIGJyYW5jaCBpbiBgYnVpbGRNZXNzYWdlQ29uZGl0aW9uc2Agd2lkZW5zIHRvIGluY2x1ZGUgcm93cyB0YXJnZXRlZCBhdCB0aGlzXG4gIC8vIHVzZXIgKHJlY2lwaWVudF91c2VyX2lkID0gdmlld2VyVXNlcklkKSBBTE9OR1NJREUgb3JnLXdpZGUgb25lc1xuICAvLyAocmVjaXBpZW50X3VzZXJfaWQgSVMgTlVMTCkuIFdoZW4gYWJzZW50LCBvbmx5IG9yZy13aWRlIHJlY2lwaWVudCByb3dzIGFyZVxuICAvLyB2aXNpYmxlLCBzbyBhIHVzZXItdGFyZ2V0ZWQgbWVzc2FnZSBzdGF5cyBwcml2YXRlIHRvIGl0cyB0YXJnZXQsIHRoZSBzZW5kZXIsXG4gIC8vIGFuZCB0aGUgc3lzdGVtIG9yZy4gTWVzc2FnZVNlcnZpY2Ugc3RhbXBzIGl0IGZyb20gdGhlIHRlbmFudCBjb250ZXh0LlxuXG4gIC8qKlxuICAgKiBNZXNzYWdlIHR5cGUgZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlVHlwZT86ICdhbm5vdW5jZW1lbnQnIHwgJ2NvbnZlcnNhdGlvbic7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBwcmlvcml0eSBsZXZlbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHk/OiAnbm9ybWFsJyB8ICdoaWdoJyB8ICd1cmdlbnQnO1xuXG4gIC8qKlxuICAgKiBDaGFubmVsL2luYm94LWJ1Y2tldCBmaWx0ZXIgKGUuZy4gJ3N1cHBvcnQnLCAnaGVscCcpLiBNYXRjaGVzIHJvd3NcbiAgICogZXhhY3RseTsgcGFzcyBudWxsIHRvIG1hdGNoIGNoYW5uZWwgSVMgTlVMTCAob3JnLXRvLW9yZyBtZXNzYWdlcykuXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IHJlYWQgc3RhdGUgZm9yIHRoZSByZXF1ZXN0aW5nIG9yZy5cbiAgICogSW1wbGVtZW50ZWQgYXMgYSBKU09OQiBrZXktZXhpc3RlbmNlIGNoZWNrIGFnYWluc3QgYG1lc3NhZ2VzLnJlYWRfYnlgXG4gICAqIChhIGB7IFtvcmdJZF06IGlzb1RpbWVzdGFtcCB9YCBtYXApLCB1c2luZyB0aGUgb3JnSWQgcGFzc2VkIHRvXG4gICAqIGBidWlsZE1lc3NhZ2VDb25kaXRpb25zYC5cbiAgICogLSB0cnVlICDihpIgb25seSBtZXNzYWdlcyB0aGUgb3JnIGhhcyByZWFkIChvcmdJZCBrZXkgZXhpc3RzIGluIHJlYWRfYnkpXG4gICAqIC0gZmFsc2Ug4oaSIG9ubHkgbWVzc2FnZXMgdGhlIG9yZyBoYXMgTk9UIHJlYWRcbiAgICogLSB1bmRlZmluZWQg4oaSIG5vIHJlYWQtc3RhdGUgZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBpc1JlYWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGcmVlLXRleHQgaW5ib3ggc2VhcmNoLiBDYXNlLWluc2Vuc2l0aXZlIHN1YnN0cmluZyBtYXRjaCBhZ2FpbnN0IHRoZVxuICAgKiBtZXNzYWdlIGBzdWJqZWN0YCBPUiBgY29udGVudGAgKExJS0Ugd2lsZGNhcmRzIGluIHRoZSB0ZXJtIGFyZSBlc2NhcGVkLCBzbyBhXG4gICAqIGxpdGVyYWwgYCVgL2BfYCBtYXRjaGVzIGl0c2VsZikuIEFwcGxpZWQgb24gdG9wIG9mIHRoZSB2aXNpYmlsaXR5IHNjb3BlLCBzb1xuICAgKiBpdCBuZXZlciB3aWRlbnMgd2hhdCB0aGUgY2FsbGVyIGNhbiBzZWUuXG4gICAqL1xuICByZWFkb25seSBzZWFyY2g/OiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbXBsaWFuY2UgRmlsdGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEZpbHRlciBmb3IgY29tcGxpYW5jZSBwb2xpY2llcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlUG9saWN5RmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaXNUZW1wbGF0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRmlsdGVyIGZvciBjb21wbGlhbmNlIHJ1bGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsaWFuY2VSdWxlRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcG9saWN5SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhcmdldD86ICdwbHVnaW4nIHwgJ3BpcGVsaW5lJztcbiAgcmVhZG9ubHkgZmllbGQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldmVyaXR5PzogJ3dhcm5pbmcnIHwgJ2Vycm9yJyB8ICdjcml0aWNhbCc7XG4gIHJlYWRvbmx5IHNjb3BlPzogJ29yZycgfCAncHVibGlzaGVkJztcbiAgcmVhZG9ubHkgdGFnPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZpbHRlciBmb3IgY29tcGxpYW5jZSBleGVtcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsaWFuY2VFeGVtcHRpb25GaWx0ZXIge1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcnVsZUlkPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRpdHlUeXBlPzogJ3BsdWdpbicgfCAncGlwZWxpbmUnO1xuICByZWFkb25seSBlbnRpdHlJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdHVzPzogJ3BlbmRpbmcnIHwgJ2FwcHJvdmVkJyB8ICdyZWplY3RlZCcgfCAnZXhwaXJlZCc7XG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuICByZWFkb25seSBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRmlsdGVyIGZvciBjb21wbGlhbmNlIGF1ZGl0IGxvZyBlbnRyaWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsaWFuY2VBdWRpdEZpbHRlciB7XG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICByZWFkb25seSB0YXJnZXQ/OiAncGx1Z2luJyB8ICdwaXBlbGluZSc7XG4gIHJlYWRvbmx5IGFjdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzdWx0PzogJ3Bhc3MnIHwgJ3dhcm4nIHwgJ2Jsb2NrJztcbiAgcmVhZG9ubHkgc2NhbklkPzogc3RyaW5nO1xuICByZWFkb25seSBkYXRlRnJvbT86IHN0cmluZztcbiAgcmVhZG9ubHkgZGF0ZVRvPzogc3RyaW5nO1xuICByZWFkb25seSBsaW1pdD86IG51bWJlcjtcbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZpbHRlciBmb3IgY29tcGxpYW5jZSBzY2Fucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlU2NhbkZpbHRlciB7XG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICByZWFkb25seSB0YXJnZXQ/OiAncGx1Z2luJyB8ICdwaXBlbGluZScgfCAnYWxsJztcbiAgcmVhZG9ubHkgc3RhdHVzPzogJ3BlbmRpbmcnIHwgJ3J1bm5pbmcnIHwgJ2NvbXBsZXRlZCcgfCAnZmFpbGVkJyB8ICdjYW5jZWxsZWQnO1xuICByZWFkb25seSB0cmlnZ2VyZWRCeT86ICdtYW51YWwnIHwgJ3NjaGVkdWxlZCcgfCAncnVsZS1jaGFuZ2UnIHwgJ3J1bGUtZHJ5LXJ1bic7XG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuICByZWFkb25seSBvZmZzZXQ/OiBudW1iZXI7XG59XG4iXX0=
|