@pipeline-builder/pipeline-manager 3.4.104 → 3.4.105
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/dist/agent/prereqs.d.ts.map +1 -1
- package/dist/agent/prereqs.js +39 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prereqs.d.ts","sourceRoot":"","sources":["../../src/agent/prereqs.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"prereqs.d.ts","sourceRoot":"","sources":["../../src/agent/prereqs.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AA6DD,uEAAuE;AACvE,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAGnD;AAWD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,WAAW,EAAE,CAqEvH;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAExE"}
|
package/dist/agent/prereqs.js
CHANGED
|
@@ -38,6 +38,26 @@ 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
|
+
}
|
|
41
61
|
/** Parsed `git --version` as [major, minor], or null if git is absent/unparseable. */
|
|
42
62
|
function gitVersion() {
|
|
43
63
|
const out = read('git --version');
|
|
@@ -114,6 +134,24 @@ export function checkPrereqs(target, opts = {}) {
|
|
|
114
134
|
// openssl before the first deploy. ec2 bootstraps its secrets on the instance.
|
|
115
135
|
if (target === 'fargate') {
|
|
116
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 (advisory — the 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.
|
|
154
|
+
}
|
|
117
155
|
}
|
|
118
156
|
return checks;
|
|
119
157
|
}
|
|
@@ -121,4 +159,4 @@ export function checkPrereqs(target, opts = {}) {
|
|
|
121
159
|
export function prereqsSatisfied(checks) {
|
|
122
160
|
return checks.every((c) => c.ok || !c.required);
|
|
123
161
|
}
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVxcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wcmVyZXFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBV3pDLGdDQUFnQztBQUNoQyxTQUFTLEdBQUcsQ0FBQyxHQUFXO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQVMsSUFBSSxDQUFDLEdBQVc7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsMkNBQTJDLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckYsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxTQUFTLHNCQUFzQjtJQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRSxD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QUMsQ0FBQztRQUN0SCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLE1BQU0sT0FBTyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUMvRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxPQUFPLEtBQUssSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakwsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSwrRUFBK0U7SUFDL0UsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxDQUFDO0lBQ3RJLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsb0RBQW9EO0FBQ3BELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUE4QjtJQUM3RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIERldGVybWluaXN0aWMsIFJFQUQtT05MWSBwcmVyZXF1aXNpdGUgY2hlY2tzIHBlciB0YXJnZXQuIE5vIExMTSwgbm8gbXV0YXRpb24g4oCUXG4gKiBldmVyeSBjb21tYW5kIGhlcmUgb25seSBpbnNwZWN0cyAocHJlc2VuY2UgY2hlY2tzLCBgYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5YCxcbiAqIGBkb2NrZXIgaW5mb2ApLiBUaGlzIGlzIHRoZSBraW5kIG9mIHRoaW5nIGEgc2NyaXB0IGRvZXMgYmV0dGVyIHRoYW4gYW4gYWdlbnQsXG4gKiBzbyBpdCBzdGF5cyBkZXRlcm1pbmlzdGljOyB0aGUgTExNIGlzIHJlc2VydmVkIGZvciBOTCBwYXJzaW5nICsgZGlhZ25vc2lzLlxuICovXG5cbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgdHlwZSB7IFRhcmdldElkIH0gZnJvbSAnLi90YXJnZXRzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcmVyZXFDaGVjayB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgb2s6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRldGFpbDogc3RyaW5nO1xuICAvKiogQSBmYWlsaW5nIHJlcXVpcmVkIGNoZWNrIGJsb2NrcyBkZXBsb3ltZW50OyBhZHZpc29yeSBvbmVzIGFyZSB3YXJuaW5ncy4gKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWQ6IGJvb2xlYW47XG59XG5cbi8qKiBUcnVlIGlmIGBjbWRgIGlzIG9uIFBBVEguICovXG5mdW5jdGlvbiBoYXMoY21kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBleGVjU3luYyhgY29tbWFuZCAtdiAke2NtZH1gLCB7IHN0ZGlvOiAnaWdub3JlJywgdGltZW91dDogNTAwMCB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKiBSdW4gYSByZWFkLW9ubHkgY29tbWFuZDsgcmV0dXJuIGl0cyB0cmltbWVkIHN0ZG91dCBvciBudWxsIG9uIGZhaWx1cmUuICovXG5mdW5jdGlvbiByZWFkKGNtZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGV4ZWNTeW5jKGNtZCwgeyBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdpZ25vcmUnXSwgdGltZW91dDogMTUwMDAgfSkudG9TdHJpbmcoKS50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRvY2tlclJ1bm5pbmcoKTogYm9vbGVhbiB7XG4gIHJldHVybiBoYXMoJ2RvY2tlcicpICYmIHJlYWQoJ2RvY2tlciBpbmZvIC0tZm9ybWF0IFwie3suU2VydmVyVmVyc2lvbn19XCInKSAhPT0gbnVsbDtcbn1cblxuLyoqIERvY2tlciBDb21wb3NlIHYyIChgZG9ja2VyIGNvbXBvc2VgKSBvciBsZWdhY3kgdjEgKGBkb2NrZXItY29tcG9zZWApIOKAlCBzZXR1cC5zaCBuZWVkcyBvbmUuICovXG5mdW5jdGlvbiBkb2NrZXJDb21wb3NlQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVhZCgnZG9ja2VyIGNvbXBvc2UgdmVyc2lvbicpICE9PSBudWxsIHx8IGhhcygnZG9ja2VyLWNvbXBvc2UnKTtcbn1cblxuZnVuY3Rpb24gYXdzSWRlbnRpdHkoKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghaGFzKCdhd3MnKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiByZWFkKCdhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHkgLS1xdWVyeSBBY2NvdW50IC0tb3V0cHV0IHRleHQnKTtcbn1cblxuLyoqIFBhcnNlZCBgZ2l0IC0tdmVyc2lvbmAgYXMgW21ham9yLCBtaW5vcl0sIG9yIG51bGwgaWYgZ2l0IGlzIGFic2VudC91bnBhcnNlYWJsZS4gKi9cbmZ1bmN0aW9uIGdpdFZlcnNpb24oKTogW251bWJlciwgbnVtYmVyXSB8IG51bGwge1xuICBjb25zdCBvdXQgPSByZWFkKCdnaXQgLS12ZXJzaW9uJyk7XG4gIGNvbnN0IG0gPSBvdXQ/Lm1hdGNoKC8oXFxkKylcXC4oXFxkKykvKTtcbiAgcmV0dXJuIG0gPyBbTnVtYmVyKG1bMV0pLCBOdW1iZXIobVsyXSldIDogbnVsbDtcbn1cblxuLyoqIFRydWUgd2hlbiBnaXQgaXMgb24gUEFUSCAocmVxdWlyZWQgdG8gYm9vdHN0cmFwIGEgY2xvbmUgYXQgYWxsKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnaXRBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiBnaXRWZXJzaW9uKCkgIT09IG51bGw7XG59XG5cbi8qKlxuICogQ29uZSBgc3BhcnNlLWNoZWNrb3V0YCAoKyBgLS1maWx0ZXI9YmxvYjpub25lYCkgbmVlZHMgZ2l0IOKJpSAyLjI3LiBCZWxvdyB0aGF0LFxuICogdGhlIGJvb3RzdHJhcCBmYWxscyBiYWNrIHRvIGEgKGNvcnJlY3QsIGp1c3QgbGFyZ2VyKSBmdWxsIGNsb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpOiBib29sZWFuIHtcbiAgY29uc3QgdiA9IGdpdFZlcnNpb24oKTtcbiAgcmV0dXJuIHYgIT09IG51bGwgJiYgKHZbMF0gPiAyIHx8ICh2WzBdID09PSAyICYmIHZbMV0gPj0gMjcpKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFByZXJlcUNoZWNrIGZyb20gYSBTSU5HTEUgcHJlc2VuY2UgZXZhbHVhdGlvbi4gQ29sbGFwc2VzIHRoZSByZXBlYXRlZFxuICogYHsgb2s6IHByb2JlKCksIGRldGFpbDogcHJvYmUoKSA/IGEgOiBiIH1gIHNoYXBlIOKAlCB3aGljaCBhbHNvIGNhbGxlZCB0aGUgcHJvYmVcbiAqIHR3aWNlIOKAlCBpbnRvIG9uZSBwbGFjZTsgdGhlIGNhbGxlciBldmFsdWF0ZXMgdGhlIHByb2JlIG9uY2UgYW5kIHBhc3NlcyB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBjaGVjayhuYW1lOiBzdHJpbmcsIHByZXNlbnQ6IGJvb2xlYW4sIHByZXNlbnREZXRhaWw6IHN0cmluZywgbWlzc2luZ0RldGFpbDogc3RyaW5nLCByZXF1aXJlZCA9IHRydWUpOiBQcmVyZXFDaGVjayB7XG4gIHJldHVybiB7IG5hbWUsIG9rOiBwcmVzZW50LCBkZXRhaWw6IHByZXNlbnQgPyBwcmVzZW50RGV0YWlsIDogbWlzc2luZ0RldGFpbCwgcmVxdWlyZWQgfTtcbn1cblxuLyoqXG4gKiBSdW4gdGhlIHJlYWQtb25seSBwcmVyZXF1aXNpdGUgY2hlY2tzIGZvciBhIHRhcmdldC4gUHVyZSBpbnNwZWN0aW9uIOKAlCBzYWZlIHRvXG4gKiBydW4gdW5jb25kaXRpb25hbGx5ICh0aGUgcGxhbiBhc3NlbWJsZXMgdGhpcyBiZWZvcmUgdGhlIGdhdGVkIGV4ZWN1dGlvbikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1ByZXJlcXModGFyZ2V0OiBUYXJnZXRJZCwgb3B0czogeyBib290c3RyYXA/OiBib29sZWFuOyB3aXRoUGx1Z2lucz86IGJvb2xlYW4gfSA9IHt9KTogUHJlcmVxQ2hlY2tbXSB7XG4gIGNvbnN0IGNoZWNrczogUHJlcmVxQ2hlY2tbXSA9IFtdO1xuICAvLyBzZXR1cC5zaCAobG9jYWwpICsgc2V0dXAuc2ggKG1pbmlrdWJlKSBib3RoIGdlbmVyYXRlIHRoZSBUTFMgY2VydCArIHJlZ2lzdHJ5IEpXVCBrZXkgd2l0aCBvcGVuc3NsLlxuICBjb25zdCBPUEVOU1NMX1RMUyA9ICdpbnN0YWxsIG9wZW5zc2wg4oCUIHNldHVwLnNoIGdlbmVyYXRlcyB0aGUgVExTIGNlcnQgKyByZWdpc3RyeSBKV1Qga2V5IHdpdGggaXQnO1xuXG4gIC8vIGAtLXJlcG9gIGJvb3RzdHJhcCBnaXQtY2xvbmVzIHRoZSBwbGF0Zm9ybSByZXBvIGZpcnN0IOKGkiBnaXQgaXMgcmVxdWlyZWQuIEFcbiAgLy8gZ2l0IGJlbG93IDIuMjcgc3RpbGwgd29ya3MgKGZ1bGwtY2xvbmUgZmFsbGJhY2spLCBzbyB0aGUgdmVyc2lvbiBpcyBhZHZpc29yeS5cbiAgaWYgKG9wdHMuYm9vdHN0cmFwKSB7XG4gICAgY29uc3QgdiA9IGdpdFZlcnNpb24oKTtcbiAgICBjaGVja3MucHVzaCh7IG5hbWU6ICdnaXQnLCBvazogdiAhPT0gbnVsbCwgZGV0YWlsOiB2ID8gYG9uIFBBVEggKCR7dlswXX0uJHt2WzFdfSlgIDogJ2luc3RhbGwgZ2l0JywgcmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgaWYgKHYgIT09IG51bGwgJiYgIWdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKSkge1xuICAgICAgY2hlY2tzLnB1c2goeyBuYW1lOiAnZ2l0IOKJpSAyLjI3Jywgb2s6IGZhbHNlLCBkZXRhaWw6ICdzcGFyc2UgY2xvbmUgbmVlZHMgZ2l0IOKJpSAyLjI3IOKAlCBmYWxsaW5nIGJhY2sgdG8gYSBmdWxsIGNsb25lJywgcmVxdWlyZWQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0YXJnZXQgPT09ICdsb2NhbCcpIHtcbiAgICAvLyBkZXBsb3kvbG9jYWwvYmluL3NldHVwLnNoIGhhcmQtY2hlY2tzIGFsbCBvZiB0aGVzZSBhdCBzdGFydHVwIGFuZCBhYm9ydHMgaWZcbiAgICAvLyBhbnkgaXMgbWlzc2luZyDigJQgbWlycm9yIHRoZW0gaGVyZSBzbyBwcm92aXNpb24gYmxvY2tzIHVwIGZyb250IGluc3RlYWQgb2ZcbiAgICAvLyBmYWlsaW5nIG1pZC1kZXBsb3kgKGUuZy4gdGhlIGNsYXNzaWMgXCJ5cSBpcyBub3QgaW5zdGFsbGVkXCIpLlxuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXInLCBkb2NrZXJSdW5uaW5nKCksICdkYWVtb24gcmVhY2hhYmxlJywgJ2luc3RhbGwgRG9ja2VyIGFuZCBzdGFydCB0aGUgZGFlbW9uJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXIgQ29tcG9zZScsIGRvY2tlckNvbXBvc2VBdmFpbGFibGUoKSwgJ2F2YWlsYWJsZScsICduZWVkcyBgZG9ja2VyIGNvbXBvc2VgICh2MiBwbHVnaW4pIG9yIGBkb2NrZXItY29tcG9zZWAgKHYxKScpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygneXEnLCBoYXMoJ3lxJyksICdvbiBQQVRIJywgJ2luc3RhbGwgeXEgKG1hY09TOiBgYnJldyBpbnN0YWxsIHlxYCkg4oCUIHNldHVwLnNoIHJlcXVpcmVzIGl0JykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgT1BFTlNTTF9UTFMpKTtcbiAgICByZXR1cm4gY2hlY2tzO1xuICB9XG5cbiAgaWYgKHRhcmdldCA9PT0gJ21pbmlrdWJlJykge1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdEb2NrZXInLCBkb2NrZXJSdW5uaW5nKCksICdkYWVtb24gcmVhY2hhYmxlJywgJ2luc3RhbGwgRG9ja2VyIGFuZCBzdGFydCB0aGUgZGFlbW9uJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdtaW5pa3ViZScsIGhhcygnbWluaWt1YmUnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBtaW5pa3ViZScpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygna3ViZWN0bCcsIGhhcygna3ViZWN0bCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIGt1YmVjdGwnKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ29wZW5zc2wnLCBoYXMoJ29wZW5zc2wnKSwgJ29uIFBBVEgnLCBPUEVOU1NMX1RMUykpO1xuICAgIC8vIG1pbmlrdWJlJ3Mgc2V0dXAuc2ggZG9lc24ndCBuZWVkIHlxLCBidXQgLS13aXRoLXBsdWdpbnMgYnVpbGRzIGltYWdlc1xuICAgIC8vIChidWlsZC1wbHVnaW4taW1hZ2VzLnNoIC8gZ2VuZXJhdGUtcGx1Z2lucy5zaCkgd2hpY2ggZG8uXG4gICAgaWYgKG9wdHMud2l0aFBsdWdpbnMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKGNoZWNrKCd5cScsIGhhcygneXEnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCB5cSAobWFjT1M6IGBicmV3IGluc3RhbGwgeXFgKSDigJQgcmVxdWlyZWQgdG8gYnVpbGQgcGx1Z2lucycpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrcztcbiAgfVxuXG4gIC8vIGVjMiArIGZhcmdhdGUg4oCUIGJvdGggZGVwbG95IHZpYSBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlcGxveWAsIHNvIGJvdGggbmVlZFxuICAvLyB0aGUgQVdTIENMSSB3aXRoIHdvcmtpbmcgY3JlZGVudGlhbHMgKGFuZCBub3RoaW5nIENESy9ub2RlLXJlbGF0ZWQpLiBlYzInc1xuICAvLyBpbnN0YW5jZSBzZWxmLWJvb3RzdHJhcHMgb3ZlciBVc2VyRGF0YSwgc28gdGhlIENMSSBpcyBpdHMgb25seSBob3N0IHRvb2wuXG4gIGNvbnN0IGFjY291bnQgPSBhd3NJZGVudGl0eSgpO1xuICBjaGVja3MucHVzaChjaGVjaygnQVdTIENMSScsIGhhcygnYXdzJyksICdvbiBQQVRIJywgJ2luc3RhbGwgdGhlIEFXUyBDTEkgdjInKSk7XG4gIGNoZWNrcy5wdXNoKHsgbmFtZTogJ0FXUyBjcmVkZW50aWFscycsIG9rOiBhY2NvdW50ICE9PSBudWxsLCBkZXRhaWw6IGFjY291bnQgPyBgYXV0aGVudGljYXRlZCAoYWNjb3VudCAke2FjY291bnR9KWAgOiAncnVuIGBhd3MgY29uZmlndXJlYCAvIHNldCBBV1NfUFJPRklMRScsIHJlcXVpcmVkOiB0cnVlIH0pO1xuICAvLyBmYXJnYXRlIHJ1bnMgaW5pdC1zZWNyZXRzLnNoIG9uIHRoZSBob3N0IHRvIGdlbmVyYXRlIHRoZSBwbGF0Zm9ybSBzZWNyZXRzXG4gIC8vIChKV1QvcmVmcmVzaCBzZWNyZXRzLCBEQiBwYXNzd29yZHMsIHRoZSByZWdpc3RyeSdzIFJTQSBzaWduaW5nIGtleSkgd2l0aFxuICAvLyBvcGVuc3NsIGJlZm9yZSB0aGUgZmlyc3QgZGVwbG95LiBlYzIgYm9vdHN0cmFwcyBpdHMgc2VjcmV0cyBvbiB0aGUgaW5zdGFuY2UuXG4gIGlmICh0YXJnZXQgPT09ICdmYXJnYXRlJykge1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgJ2luc3RhbGwgb3BlbnNzbCDigJQgaW5pdC1zZWNyZXRzLnNoIG5lZWRzIGl0IHRvIGdlbmVyYXRlIHBsYXRmb3JtIHNlY3JldHMnKSk7XG4gIH1cbiAgcmV0dXJuIGNoZWNrcztcbn1cblxuLyoqIFRydWUgd2hlbiBldmVyeSBSRVFVSVJFRCBwcmVyZXF1aXNpdGUgcGFzc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXJlcXNTYXRpc2ZpZWQoY2hlY2tzOiByZWFkb25seSBQcmVyZXFDaGVja1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja3MuZXZlcnkoKGMpID0+IGMub2sgfHwgIWMucmVxdWlyZWQpO1xufVxuIl19
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVxcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC9wcmVyZXFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBV3pDLGdDQUFnQztBQUNoQyxTQUFTLEdBQUcsQ0FBQyxHQUFXO0lBQ3RCLElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQVMsSUFBSSxDQUFDLEdBQVc7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsMkNBQTJDLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckYsQ0FBQztBQUVELGlHQUFpRztBQUNqRyxTQUFTLHNCQUFzQjtJQUM3QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMxRSxD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IENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBEZXRlcm1pbmlzdGljLCBSRUFELU9OTFkgcHJlcmVxdWlzaXRlIGNoZWNrcyBwZXIgdGFyZ2V0LiBObyBMTE0sIG5vIG11dGF0aW9uIOKAlFxuICogZXZlcnkgY29tbWFuZCBoZXJlIG9ubHkgaW5zcGVjdHMgKHByZXNlbmNlIGNoZWNrcywgYGF3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eWAsXG4gKiBgZG9ja2VyIGluZm9gKS4gVGhpcyBpcyB0aGUga2luZCBvZiB0aGluZyBhIHNjcmlwdCBkb2VzIGJldHRlciB0aGFuIGFuIGFnZW50LFxuICogc28gaXQgc3RheXMgZGV0ZXJtaW5pc3RpYzsgdGhlIExMTSBpcyByZXNlcnZlZCBmb3IgTkwgcGFyc2luZyArIGRpYWdub3Npcy5cbiAqL1xuXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHR5cGUgeyBUYXJnZXRJZCB9IGZyb20gJy4vdGFyZ2V0cy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcmVxQ2hlY2sge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9rOiBib29sZWFuO1xuICByZWFkb25seSBkZXRhaWw6IHN0cmluZztcbiAgLyoqIEEgZmFpbGluZyByZXF1aXJlZCBjaGVjayBibG9ja3MgZGVwbG95bWVudDsgYWR2aXNvcnkgb25lcyBhcmUgd2FybmluZ3MuICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkOiBib29sZWFuO1xufVxuXG4vKiogVHJ1ZSBpZiBgY21kYCBpcyBvbiBQQVRILiAqL1xuZnVuY3Rpb24gaGFzKGNtZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgZXhlY1N5bmMoYGNvbW1hbmQgLXYgJHtjbWR9YCwgeyBzdGRpbzogJ2lnbm9yZScsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKiogUnVuIGEgcmVhZC1vbmx5IGNvbW1hbmQ7IHJldHVybiBpdHMgdHJpbW1lZCBzdGRvdXQgb3IgbnVsbCBvbiBmYWlsdXJlLiAqL1xuZnVuY3Rpb24gcmVhZChjbWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICB0cnkge1xuICAgIHJldHVybiBleGVjU3luYyhjbWQsIHsgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAnaWdub3JlJ10sIHRpbWVvdXQ6IDE1MDAwIH0pLnRvU3RyaW5nKCkudHJpbSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkb2NrZXJSdW5uaW5nKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaGFzKCdkb2NrZXInKSAmJiByZWFkKCdkb2NrZXIgaW5mbyAtLWZvcm1hdCBcInt7LlNlcnZlclZlcnNpb259fVwiJykgIT09IG51bGw7XG59XG5cbi8qKiBEb2NrZXIgQ29tcG9zZSB2MiAoYGRvY2tlciBjb21wb3NlYCkgb3IgbGVnYWN5IHYxIChgZG9ja2VyLWNvbXBvc2VgKSDigJQgc2V0dXAuc2ggbmVlZHMgb25lLiAqL1xuZnVuY3Rpb24gZG9ja2VyQ29tcG9zZUF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlYWQoJ2RvY2tlciBjb21wb3NlIHZlcnNpb24nKSAhPT0gbnVsbCB8fCBoYXMoJ2RvY2tlci1jb21wb3NlJyk7XG59XG5cbmZ1bmN0aW9uIGF3c0lkZW50aXR5KCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWhhcygnYXdzJykpIHJldHVybiBudWxsO1xuICByZXR1cm4gcmVhZCgnYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5IC0tcXVlcnkgQWNjb3VudCAtLW91dHB1dCB0ZXh0Jyk7XG59XG5cbi8qKlxuICogU3RhdGUgb2YgdGhlIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlIChgQVdTU2VydmljZVJvbGVGb3JFQ1NgKS4gRUNTIGF1dG8tY3JlYXRlcyBpdCBvbiB0aGVcbiAqIGZpcnN0IGBDcmVhdGVDbHVzdGVyYCwgYnV0IHRoYXQgZmlyc3QgYXR0ZW1wdCBSQUNFUyBhbmQgZmFpbHMgKFwiVW5hYmxlIHRvIGFzc3VtZSB0aGUgc2VydmljZVxuICogbGlua2VkIHJvbGVcIik7IHRoZSByb2xlIHRoZW4gZXhpc3RzIGFuZCBhIHJlLXJ1biBzdWNjZWVkcy4gUHJlLWNyZWF0aW5nIGl0IGF2b2lkcyB0aGUgZmFpbGVkXG4gKiBmaXJzdCBzdGFjay4gUmV0dXJucyBgdW5rbm93bmAgd2hlbiB3ZSBjYW4ndCB0ZWxsIChubyBgYXdzYCwgbm8gY3JlZHMsIG9yIG5vIGBpYW06R2V0Um9sZWApIOKAlFxuICogc28gdGhlIGNhbGxlciBuZXZlciBhc3NlcnRzIFwibWlzc2luZ1wiIG9uIGFuIEFjY2Vzc0RlbmllZCwgb25seSBvbiBhIHJlYWwgTm9TdWNoRW50aXR5LlxuICovXG5mdW5jdGlvbiBlY3NMaW5rZWRSb2xlU3RhdGUoKTogJ3ByZXNlbnQnIHwgJ2Fic2VudCcgfCAndW5rbm93bicge1xuICBpZiAoIWhhcygnYXdzJykpIHJldHVybiAndW5rbm93bic7XG4gIHRyeSB7XG4gICAgLy8gc3RkZXJyIHBpcGVkIHNvIHRoZSB0aHJvdyBjYXJyaWVzIHRoZSBBV1MgZXJyb3I7IHN0ZG91dCBpZ25vcmVkLlxuICAgIGV4ZWNTeW5jKCdhd3MgaWFtIGdldC1yb2xlIC0tcm9sZS1uYW1lIEFXU1NlcnZpY2VSb2xlRm9yRUNTJywgeyBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ3BpcGUnXSwgdGltZW91dDogMTUwMDAgfSk7XG4gICAgcmV0dXJuICdwcmVzZW50JztcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIGNvbnN0IHN0ZGVyciA9IFN0cmluZygoZSBhcyB7IHN0ZGVycj86IEJ1ZmZlciB8IHN0cmluZyB9KS5zdGRlcnIgPz8gJycpO1xuICAgIHJldHVybiAvTm9TdWNoRW50aXR5fGNhbm5vdCBiZSBmb3VuZC9pLnRlc3Qoc3RkZXJyKSA/ICdhYnNlbnQnIDogJ3Vua25vd24nO1xuICB9XG59XG5cbi8qKiBQYXJzZWQgYGdpdCAtLXZlcnNpb25gIGFzIFttYWpvciwgbWlub3JdLCBvciBudWxsIGlmIGdpdCBpcyBhYnNlbnQvdW5wYXJzZWFibGUuICovXG5mdW5jdGlvbiBnaXRWZXJzaW9uKCk6IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgY29uc3Qgb3V0ID0gcmVhZCgnZ2l0IC0tdmVyc2lvbicpO1xuICBjb25zdCBtID0gb3V0Py5tYXRjaCgvKFxcZCspXFwuKFxcZCspLyk7XG4gIHJldHVybiBtID8gW051bWJlcihtWzFdKSwgTnVtYmVyKG1bMl0pXSA6IG51bGw7XG59XG5cbi8qKiBUcnVlIHdoZW4gZ2l0IGlzIG9uIFBBVEggKHJlcXVpcmVkIHRvIGJvb3RzdHJhcCBhIGNsb25lIGF0IGFsbCkuICovXG5leHBvcnQgZnVuY3Rpb24gZ2l0QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2l0VmVyc2lvbigpICE9PSBudWxsO1xufVxuXG4vKipcbiAqIENvbmUgYHNwYXJzZS1jaGVja291dGAgKCsgYC0tZmlsdGVyPWJsb2I6bm9uZWApIG5lZWRzIGdpdCDiiaUgMi4yNy4gQmVsb3cgdGhhdCxcbiAqIHRoZSBib290c3RyYXAgZmFsbHMgYmFjayB0byBhIChjb3JyZWN0LCBqdXN0IGxhcmdlcikgZnVsbCBjbG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IHYgPSBnaXRWZXJzaW9uKCk7XG4gIHJldHVybiB2ICE9PSBudWxsICYmICh2WzBdID4gMiB8fCAodlswXSA9PT0gMiAmJiB2WzFdID49IDI3KSk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBQcmVyZXFDaGVjayBmcm9tIGEgU0lOR0xFIHByZXNlbmNlIGV2YWx1YXRpb24uIENvbGxhcHNlcyB0aGUgcmVwZWF0ZWRcbiAqIGB7IG9rOiBwcm9iZSgpLCBkZXRhaWw6IHByb2JlKCkgPyBhIDogYiB9YCBzaGFwZSDigJQgd2hpY2ggYWxzbyBjYWxsZWQgdGhlIHByb2JlXG4gKiB0d2ljZSDigJQgaW50byBvbmUgcGxhY2U7IHRoZSBjYWxsZXIgZXZhbHVhdGVzIHRoZSBwcm9iZSBvbmNlIGFuZCBwYXNzZXMgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gY2hlY2sobmFtZTogc3RyaW5nLCBwcmVzZW50OiBib29sZWFuLCBwcmVzZW50RGV0YWlsOiBzdHJpbmcsIG1pc3NpbmdEZXRhaWw6IHN0cmluZywgcmVxdWlyZWQgPSB0cnVlKTogUHJlcmVxQ2hlY2sge1xuICByZXR1cm4geyBuYW1lLCBvazogcHJlc2VudCwgZGV0YWlsOiBwcmVzZW50ID8gcHJlc2VudERldGFpbCA6IG1pc3NpbmdEZXRhaWwsIHJlcXVpcmVkIH07XG59XG5cbi8qKlxuICogUnVuIHRoZSByZWFkLW9ubHkgcHJlcmVxdWlzaXRlIGNoZWNrcyBmb3IgYSB0YXJnZXQuIFB1cmUgaW5zcGVjdGlvbiDigJQgc2FmZSB0b1xuICogcnVuIHVuY29uZGl0aW9uYWxseSAodGhlIHBsYW4gYXNzZW1ibGVzIHRoaXMgYmVmb3JlIHRoZSBnYXRlZCBleGVjdXRpb24pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQcmVyZXFzKHRhcmdldDogVGFyZ2V0SWQsIG9wdHM6IHsgYm9vdHN0cmFwPzogYm9vbGVhbjsgd2l0aFBsdWdpbnM/OiBib29sZWFuIH0gPSB7fSk6IFByZXJlcUNoZWNrW10ge1xuICBjb25zdCBjaGVja3M6IFByZXJlcUNoZWNrW10gPSBbXTtcbiAgLy8gc2V0dXAuc2ggKGxvY2FsKSArIHNldHVwLnNoIChtaW5pa3ViZSkgYm90aCBnZW5lcmF0ZSB0aGUgVExTIGNlcnQgKyByZWdpc3RyeSBKV1Qga2V5IHdpdGggb3BlbnNzbC5cbiAgY29uc3QgT1BFTlNTTF9UTFMgPSAnaW5zdGFsbCBvcGVuc3NsIOKAlCBzZXR1cC5zaCBnZW5lcmF0ZXMgdGhlIFRMUyBjZXJ0ICsgcmVnaXN0cnkgSldUIGtleSB3aXRoIGl0JztcblxuICAvLyBgLS1yZXBvYCBib290c3RyYXAgZ2l0LWNsb25lcyB0aGUgcGxhdGZvcm0gcmVwbyBmaXJzdCDihpIgZ2l0IGlzIHJlcXVpcmVkLiBBXG4gIC8vIGdpdCBiZWxvdyAyLjI3IHN0aWxsIHdvcmtzIChmdWxsLWNsb25lIGZhbGxiYWNrKSwgc28gdGhlIHZlcnNpb24gaXMgYWR2aXNvcnkuXG4gIGlmIChvcHRzLmJvb3RzdHJhcCkge1xuICAgIGNvbnN0IHYgPSBnaXRWZXJzaW9uKCk7XG4gICAgY2hlY2tzLnB1c2goeyBuYW1lOiAnZ2l0Jywgb2s6IHYgIT09IG51bGwsIGRldGFpbDogdiA/IGBvbiBQQVRIICgke3ZbMF19LiR7dlsxXX0pYCA6ICdpbnN0YWxsIGdpdCcsIHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgIGlmICh2ICE9PSBudWxsICYmICFnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCkpIHtcbiAgICAgIGNoZWNrcy5wdXNoKHsgbmFtZTogJ2dpdCDiiaUgMi4yNycsIG9rOiBmYWxzZSwgZGV0YWlsOiAnc3BhcnNlIGNsb25lIG5lZWRzIGdpdCDiiaUgMi4yNyDigJQgZmFsbGluZyBiYWNrIHRvIGEgZnVsbCBjbG9uZScsIHJlcXVpcmVkOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFyZ2V0ID09PSAnbG9jYWwnKSB7XG4gICAgLy8gZGVwbG95L2xvY2FsL2Jpbi9zZXR1cC5zaCBoYXJkLWNoZWNrcyBhbGwgb2YgdGhlc2UgYXQgc3RhcnR1cCBhbmQgYWJvcnRzIGlmXG4gICAgLy8gYW55IGlzIG1pc3Npbmcg4oCUIG1pcnJvciB0aGVtIGhlcmUgc28gcHJvdmlzaW9uIGJsb2NrcyB1cCBmcm9udCBpbnN0ZWFkIG9mXG4gICAgLy8gZmFpbGluZyBtaWQtZGVwbG95IChlLmcuIHRoZSBjbGFzc2ljIFwieXEgaXMgbm90IGluc3RhbGxlZFwiKS5cbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyJywgZG9ja2VyUnVubmluZygpLCAnZGFlbW9uIHJlYWNoYWJsZScsICdpbnN0YWxsIERvY2tlciBhbmQgc3RhcnQgdGhlIGRhZW1vbicpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyIENvbXBvc2UnLCBkb2NrZXJDb21wb3NlQXZhaWxhYmxlKCksICdhdmFpbGFibGUnLCAnbmVlZHMgYGRvY2tlciBjb21wb3NlYCAodjIgcGx1Z2luKSBvciBgZG9ja2VyLWNvbXBvc2VgICh2MSknKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ3lxJywgaGFzKCd5cScpLCAnb24gUEFUSCcsICdpbnN0YWxsIHlxIChtYWNPUzogYGJyZXcgaW5zdGFsbCB5cWApIOKAlCBzZXR1cC5zaCByZXF1aXJlcyBpdCcpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnb3BlbnNzbCcsIGhhcygnb3BlbnNzbCcpLCAnb24gUEFUSCcsIE9QRU5TU0xfVExTKSk7XG4gICAgcmV0dXJuIGNoZWNrcztcbiAgfVxuXG4gIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHtcbiAgICBjaGVja3MucHVzaChjaGVjaygnRG9ja2VyJywgZG9ja2VyUnVubmluZygpLCAnZGFlbW9uIHJlYWNoYWJsZScsICdpbnN0YWxsIERvY2tlciBhbmQgc3RhcnQgdGhlIGRhZW1vbicpKTtcbiAgICBjaGVja3MucHVzaChjaGVjaygnbWluaWt1YmUnLCBoYXMoJ21pbmlrdWJlJyksICdvbiBQQVRIJywgJ2luc3RhbGwgbWluaWt1YmUnKSk7XG4gICAgY2hlY2tzLnB1c2goY2hlY2soJ2t1YmVjdGwnLCBoYXMoJ2t1YmVjdGwnKSwgJ29uIFBBVEgnLCAnaW5zdGFsbCBrdWJlY3RsJykpO1xuICAgIGNoZWNrcy5wdXNoKGNoZWNrKCdvcGVuc3NsJywgaGFzKCdvcGVuc3NsJyksICdvbiBQQVRIJywgT1BFTlNTTF9UTFMpKTtcbiAgICAvLyBtaW5pa3ViZSdzIHNldHVwLnNoIGRvZXNuJ3QgbmVlZCB5cSwgYnV0IC0td2l0aC1wbHVnaW5zIGJ1aWxkcyBpbWFnZXNcbiAgICAvLyAoYnVpbGQtcGx1Z2luLWltYWdlcy5zaCAvIGdlbmVyYXRlLXBsdWdpbnMuc2gpIHdoaWNoIGRvLlxuICAgIGlmIChvcHRzLndpdGhQbHVnaW5zKSB7XG4gICAgICBjaGVja3MucHVzaChjaGVjaygneXEnLCBoYXMoJ3lxJyksICdvbiBQQVRIJywgJ2luc3RhbGwgeXEgKG1hY09TOiBgYnJldyBpbnN0YWxsIHlxYCkg4oCUIHJlcXVpcmVkIHRvIGJ1aWxkIHBsdWdpbnMnKSk7XG4gICAgfVxuICAgIHJldHVybiBjaGVja3M7XG4gIH1cblxuICAvLyBlYzIgKyBmYXJnYXRlIOKAlCBib3RoIGRlcGxveSB2aWEgYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXBsb3lgLCBzbyBib3RoIG5lZWRcbiAgLy8gdGhlIEFXUyBDTEkgd2l0aCB3b3JraW5nIGNyZWRlbnRpYWxzIChhbmQgbm90aGluZyBDREsvbm9kZS1yZWxhdGVkKS4gZWMyJ3NcbiAgLy8gaW5zdGFuY2Ugc2VsZi1ib290c3RyYXBzIG92ZXIgVXNlckRhdGEsIHNvIHRoZSBDTEkgaXMgaXRzIG9ubHkgaG9zdCB0b29sLlxuICBjb25zdCBhY2NvdW50ID0gYXdzSWRlbnRpdHkoKTtcbiAgY2hlY2tzLnB1c2goY2hlY2soJ0FXUyBDTEknLCBoYXMoJ2F3cycpLCAnb24gUEFUSCcsICdpbnN0YWxsIHRoZSBBV1MgQ0xJIHYyJykpO1xuICBjaGVja3MucHVzaCh7IG5hbWU6ICdBV1MgY3JlZGVudGlhbHMnLCBvazogYWNjb3VudCAhPT0gbnVsbCwgZGV0YWlsOiBhY2NvdW50ID8gYGF1dGhlbnRpY2F0ZWQgKGFjY291bnQgJHthY2NvdW50fSlgIDogJ3J1biBgYXdzIGNvbmZpZ3VyZWAgLyBzZXQgQVdTX1BST0ZJTEUnLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgLy8gZmFyZ2F0ZSBydW5zIGluaXQtc2VjcmV0cy5zaCBvbiB0aGUgaG9zdCB0byBnZW5lcmF0ZSB0aGUgcGxhdGZvcm0gc2VjcmV0c1xuICAvLyAoSldUL3JlZnJlc2ggc2VjcmV0cywgREIgcGFzc3dvcmRzLCB0aGUgcmVnaXN0cnkncyBSU0Egc2lnbmluZyBrZXkpIHdpdGhcbiAgLy8gb3BlbnNzbCBiZWZvcmUgdGhlIGZpcnN0IGRlcGxveS4gZWMyIGJvb3RzdHJhcHMgaXRzIHNlY3JldHMgb24gdGhlIGluc3RhbmNlLlxuICBpZiAodGFyZ2V0ID09PSAnZmFyZ2F0ZScpIHtcbiAgICBjaGVja3MucHVzaChjaGVjaygnb3BlbnNzbCcsIGhhcygnb3BlbnNzbCcpLCAnb24gUEFUSCcsICdpbnN0YWxsIG9wZW5zc2wg4oCUIGluaXQtc2VjcmV0cy5zaCBuZWVkcyBpdCB0byBnZW5lcmF0ZSBwbGF0Zm9ybSBzZWNyZXRzJykpO1xuICAgIC8vIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlOiBzdXJmYWNlIGl0IGFzIGEgaGVhZHMtdXAgKGFkdmlzb3J5IOKAlCB0aGUgZGVwbG95IHNlbGYtaGVhbHMsXG4gICAgLy8gYW5kIHRoZSBwcmluY2lwYWwgbWF5IGxhY2sgaWFtOkdldFJvbGUpLiBPbmx5IGNoZWNrZWQgd2hlbiB3ZSBoYXZlIHdvcmtpbmcgY3JlZHMsIGFuZFxuICAgIC8vIG9ubHkgYXNzZXJ0ZWQgXCJtaXNzaW5nXCIgb24gYSBjb25maXJtZWQgTm9TdWNoRW50aXR5LiBlYzIgZG9lc24ndCB1c2UgRUNTLCBzbyBmYXJnYXRlLW9ubHkuXG4gICAgaWYgKGFjY291bnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNsciA9IGVjc0xpbmtlZFJvbGVTdGF0ZSgpO1xuICAgICAgaWYgKHNsciA9PT0gJ3ByZXNlbnQnKSB7XG4gICAgICAgIGNoZWNrcy5wdXNoKHsgbmFtZTogJ0VDUyBzZXJ2aWNlLWxpbmtlZCByb2xlJywgb2s6IHRydWUsIGRldGFpbDogJ0FXU1NlcnZpY2VSb2xlRm9yRUNTIGV4aXN0cycsIHJlcXVpcmVkOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoc2xyID09PSAnYWJzZW50Jykge1xuICAgICAgICBjaGVja3MucHVzaCh7XG4gICAgICAgICAgbmFtZTogJ0VDUyBzZXJ2aWNlLWxpbmtlZCByb2xlJyxcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDogJ0FXU1NlcnZpY2VSb2xlRm9yRUNTIG5vdCBmb3VuZCDigJQgdGhlIGZpcnN0IEVDUyBjbHVzdGVyIGNyZWF0ZSB3aWxsIGNyZWF0ZSBpdCwgYnV0IHRoYXQgZmlyc3QgYXR0ZW1wdCBmYWlscyBvbiB0aGUgbm90LXlldC1yZWFkeSByb2xlICh0aGUgcmUtcnVuIHRoZW4gc2VsZi1oZWFscykuIFRvIGF2b2lkIHRoZSBmYWlsZWQgZmlyc3Qgc3RhY2ssIHByZS1jcmVhdGUgaXQ6IGF3cyBpYW0gY3JlYXRlLXNlcnZpY2UtbGlua2VkLXJvbGUgLS1hd3Mtc2VydmljZS1uYW1lIGVjcy5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyAndW5rbm93bicgKG5vIGlhbTpHZXRSb2xlIC8gdHJhbnNpZW50KSDihpIgbm8gbGluZSwgcmF0aGVyIHRoYW4gYSBtaXNsZWFkaW5nIG9uZS5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoZWNrcztcbn1cblxuLyoqIFRydWUgd2hlbiBldmVyeSBSRVFVSVJFRCBwcmVyZXF1aXNpdGUgcGFzc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXJlcXNTYXRpc2ZpZWQoY2hlY2tzOiByZWFkb25seSBQcmVyZXFDaGVja1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja3MuZXZlcnkoKGMpID0+IGMub2sgfHwgIWMucmVxdWlyZWQpO1xufVxuIl19
|