@pipeline-builder/pipeline-manager 4.1.28 → 4.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -1
- package/dist/commands/create-pipeline.d.ts.map +1 -1
- package/dist/commands/create-pipeline.js +156 -15
- package/dist/commands/deploy.js +2 -2
- package/dist/commands/report.d.ts +3 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +315 -0
- package/dist/templates/events-stack.json +2 -1
- package/dist/types/pipeline.d.ts +2 -7
- package/dist/types/pipeline.d.ts.map +1 -1
- package/dist/types/pipeline.js +1 -1
- package/dist/utils/api-client.d.ts +14 -0
- package/dist/utils/api-client.d.ts.map +1 -1
- package/dist/utils/api-client.js +20 -1
- package/package.json +5 -5
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* `pipeline-manager report …` — the stakeholder-report add-on from a terminal.
|
|
5
|
+
*
|
|
6
|
+
* Seven verbs, matching the API surface a lead actually drives: `create`, `list`,
|
|
7
|
+
* `run --period`, `publish`, `link`, `pdf` and `transfer`.
|
|
8
|
+
*
|
|
9
|
+
* WHY A CLI FOR THIS AT ALL. Two jobs the dashboard is the wrong shape for. The first is
|
|
10
|
+
* BACKFILL: `report run --period 2026-W34` for each of five weeks is a loop in a shell and
|
|
11
|
+
* five careful clicks in a browser. The second is UNATTENDED OPERATION — a team that wants
|
|
12
|
+
* its report produced by its own scheduler rather than ours, or wants publishing gated on a
|
|
13
|
+
* release finishing, needs a command with an exit code.
|
|
14
|
+
*
|
|
15
|
+
* EVERY GATE IS THE SERVER'S. The CLI checks nothing: `reports:author` for create and run,
|
|
16
|
+
* `reports:share` for publish and link, `reports:read` for pdf, the `stakeholder_reports`
|
|
17
|
+
* feature for all of them,
|
|
18
|
+
* and the org's admin-owned policy for whether a link may be minted at all. The caller's
|
|
19
|
+
* token decides, and a 403 is printed as the server worded it — a CLI that pre-judged
|
|
20
|
+
* would be a second copy of the rules, wrong the first time either changed.
|
|
21
|
+
*/
|
|
22
|
+
import { writeFileSync } from 'node:fs';
|
|
23
|
+
import { Command } from 'commander';
|
|
24
|
+
import pico from 'picocolors';
|
|
25
|
+
import { createAuthenticatedClient, printCommandHeader, printExecutionSummary, printSslWarning, withSslOptions } from '../utils/command-utils.js';
|
|
26
|
+
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
27
|
+
import { printInfo, printKeyValue, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
|
|
28
|
+
const { bold, dim, green, yellow } = pico;
|
|
29
|
+
const BASE = '/api/reports/stakeholder';
|
|
30
|
+
/** Unwrap an envelope, or fail with the server's own words. */
|
|
31
|
+
function unwrap(response, what) {
|
|
32
|
+
const env = response;
|
|
33
|
+
if (!env || env.success === false || !env.data) {
|
|
34
|
+
throw new Error(env?.message ?? `The server returned no ${what}`);
|
|
35
|
+
}
|
|
36
|
+
return env.data;
|
|
37
|
+
}
|
|
38
|
+
export function report(program) {
|
|
39
|
+
const group = program.command('report').description('Create, run, publish and share stakeholder reports');
|
|
40
|
+
// ── list ──────────────────────────────────────────────────────────────────
|
|
41
|
+
withSslOptions(group
|
|
42
|
+
.command('list')
|
|
43
|
+
.description('List this organization\'s saved reports, their schedule and pause state.'))
|
|
44
|
+
.action(async (options) => {
|
|
45
|
+
const executionId = printCommandHeader('Report List');
|
|
46
|
+
try {
|
|
47
|
+
printSslWarning(options.verifySsl);
|
|
48
|
+
const client = createAuthenticatedClient(options);
|
|
49
|
+
const start = Date.now();
|
|
50
|
+
const data = unwrap(await client.get(`${client.getConfig().api.baseUrl}${BASE}/definitions`), 'reports');
|
|
51
|
+
printSection('Saved Reports');
|
|
52
|
+
if (data.definitions.length === 0) {
|
|
53
|
+
printInfo('No saved reports yet. Create one with `pipeline-manager report create`.');
|
|
54
|
+
}
|
|
55
|
+
for (const d of data.definitions) {
|
|
56
|
+
// The pause REASON, not just the state: "paused" on its own is a support ticket.
|
|
57
|
+
const state = d.isActive
|
|
58
|
+
? green('active')
|
|
59
|
+
: yellow(`paused${d.pausedReason ? ` (${d.pausedReason})` : ''}`);
|
|
60
|
+
printKeyValue({
|
|
61
|
+
[bold(d.name)]: `${state} ${dim(`· ${d.cadence} · ${d.timezone} · ${d.recipients.length} recipient(s)${d.autoSend ? ' · auto-send' : ''}`)}`,
|
|
62
|
+
' id': d.id,
|
|
63
|
+
' next run': d.nextRunAt ?? '(not scheduled)',
|
|
64
|
+
' last run': d.lastRunAt ?? '(never)',
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
printExecutionSummary(executionId, Date.now() - start);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
71
|
+
debug: program.opts().debug,
|
|
72
|
+
exit: true,
|
|
73
|
+
context: { command: 'report-list', executionId },
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// ── create ────────────────────────────────────────────────────────────────
|
|
78
|
+
withSslOptions(group
|
|
79
|
+
.command('create')
|
|
80
|
+
.description('Save a new scheduled report. The creator owns it; a scheduled run is authorized as the owner.')
|
|
81
|
+
.requiredOption('-n, --name <name>', 'Report name, as its recipients will see it')
|
|
82
|
+
.option('-t, --template <template>', 'weekly_delivery | monthly_health | quarterly_review', 'weekly_delivery')
|
|
83
|
+
.option('-z, --timezone <tz>', 'IANA timezone the period is cut in (defaults to the server\'s report default)')
|
|
84
|
+
.option('--week-start <day>', 'monday | sunday')
|
|
85
|
+
.option('--scope <kind>', 'org | projects | rollup', 'org')
|
|
86
|
+
.option('--projects <names>', 'Comma-separated project names (with --scope projects)')
|
|
87
|
+
.option('--recipients <ids>', 'Comma-separated recipient IDs from the org\'s distribution list')
|
|
88
|
+
.option('--auto-send', 'Publish without review. Off by default — the review step is where the context goes.'))
|
|
89
|
+
.action(async (options) => {
|
|
90
|
+
const executionId = printCommandHeader('Report Create');
|
|
91
|
+
try {
|
|
92
|
+
printSslWarning(options.verifySsl);
|
|
93
|
+
const client = createAuthenticatedClient(options);
|
|
94
|
+
const projects = splitList(options.projects);
|
|
95
|
+
if (options.scope === 'projects' && projects.length === 0) {
|
|
96
|
+
throw new Error('--scope projects needs --projects with at least one project name');
|
|
97
|
+
}
|
|
98
|
+
const body = {
|
|
99
|
+
name: options.name,
|
|
100
|
+
template: options.template,
|
|
101
|
+
scope: options.scope === 'projects' ? { kind: 'projects', projects } : { kind: options.scope },
|
|
102
|
+
recipients: splitList(options.recipients),
|
|
103
|
+
autoSend: options.autoSend === true,
|
|
104
|
+
...(options.timezone ? { timezone: options.timezone } : {}),
|
|
105
|
+
...(options.weekStart ? { weekStart: options.weekStart } : {}),
|
|
106
|
+
};
|
|
107
|
+
const start = Date.now();
|
|
108
|
+
const data = unwrap(await client.post(`${client.getConfig().api.baseUrl}${BASE}/definitions`, body), 'report');
|
|
109
|
+
printSection('Report Saved');
|
|
110
|
+
printKeyValue({
|
|
111
|
+
'Name': green(bold(data.definition.name)),
|
|
112
|
+
'ID': data.definition.id,
|
|
113
|
+
'Cadence': `${data.definition.cadence} · ${data.definition.timezone}`,
|
|
114
|
+
'Next run': data.definition.nextRunAt ?? '(not scheduled)',
|
|
115
|
+
});
|
|
116
|
+
if (data.definition.recipients.length === 0) {
|
|
117
|
+
// Said here because it is the most common way a new report reaches nobody: the
|
|
118
|
+
// distribution list is per ORG and an address confirms by email before delivery.
|
|
119
|
+
printWarning('No recipients yet — add them in the dashboard; an external address confirms by email before anything is delivered.');
|
|
120
|
+
}
|
|
121
|
+
printSuccess('Report created');
|
|
122
|
+
printExecutionSummary(executionId, Date.now() - start);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
126
|
+
debug: program.opts().debug,
|
|
127
|
+
exit: true,
|
|
128
|
+
context: { command: 'report-create', executionId },
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
// ── run ───────────────────────────────────────────────────────────────────
|
|
133
|
+
withSslOptions(group
|
|
134
|
+
.command('run')
|
|
135
|
+
.description('Compose one period into a frozen snapshot. Without --period, the last complete period.')
|
|
136
|
+
.requiredOption('-i, --id <id>', 'Report definition ID')
|
|
137
|
+
.option('-p, --period <label>', 'Period label: 2026-W38 (weekly), 2026-08 (monthly), 2026-Q3 (quarterly)')
|
|
138
|
+
.option('--regenerate', 'Produce version N+1 instead of reusing an existing snapshot'))
|
|
139
|
+
.action(async (options) => {
|
|
140
|
+
const executionId = printCommandHeader('Report Run');
|
|
141
|
+
try {
|
|
142
|
+
printSslWarning(options.verifySsl);
|
|
143
|
+
const client = createAuthenticatedClient(options);
|
|
144
|
+
const start = Date.now();
|
|
145
|
+
const data = unwrap(await client.post(`${client.getConfig().api.baseUrl}${BASE}/definitions/${encodeURIComponent(options.id)}/runs`, {
|
|
146
|
+
...(options.period ? { period: options.period } : {}),
|
|
147
|
+
...(options.regenerate ? { regenerate: true } : {}),
|
|
148
|
+
}), 'run');
|
|
149
|
+
printSection(data.reused ? 'Existing Snapshot' : 'Snapshot Composed');
|
|
150
|
+
printKeyValue({
|
|
151
|
+
'Period': green(bold(data.run.periodLabel)),
|
|
152
|
+
'Run ID': data.run.id,
|
|
153
|
+
'Version': String(data.run.version),
|
|
154
|
+
'Status': data.run.status,
|
|
155
|
+
});
|
|
156
|
+
if (data.reused) {
|
|
157
|
+
// Not a no-op to hide: a frozen snapshot's numbers do not change, so re-running
|
|
158
|
+
// returns what exists. `--regenerate` is how you ask for a new version.
|
|
159
|
+
printInfo('This period already had a snapshot, so it was returned unchanged. Use --regenerate for a new version.');
|
|
160
|
+
}
|
|
161
|
+
printExecutionSummary(executionId, Date.now() - start);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
165
|
+
debug: program.opts().debug,
|
|
166
|
+
exit: true,
|
|
167
|
+
context: { command: 'report-run', executionId },
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
// ── publish ───────────────────────────────────────────────────────────────
|
|
172
|
+
withSslOptions(group
|
|
173
|
+
.command('publish')
|
|
174
|
+
.description('Publish a composed run. Needs reports:share — publishing is when numbers leave the platform.')
|
|
175
|
+
.requiredOption('-r, --run <id>', 'Run ID to publish'))
|
|
176
|
+
.action(async (options) => {
|
|
177
|
+
const executionId = printCommandHeader('Report Publish');
|
|
178
|
+
try {
|
|
179
|
+
printSslWarning(options.verifySsl);
|
|
180
|
+
const client = createAuthenticatedClient(options);
|
|
181
|
+
const start = Date.now();
|
|
182
|
+
const data = unwrap(await client.post(`${client.getConfig().api.baseUrl}${BASE}/runs/${encodeURIComponent(options.run)}/publish`, {}), 'run');
|
|
183
|
+
printSection('Published');
|
|
184
|
+
printKeyValue({
|
|
185
|
+
'Period': green(bold(data.run.periodLabel)),
|
|
186
|
+
'Published at': data.run.publishedAt ?? '(unknown)',
|
|
187
|
+
});
|
|
188
|
+
if (data.alreadyPublished) {
|
|
189
|
+
// Idempotent by design: two publishes send one report, so a retried script is
|
|
190
|
+
// safe. Reported rather than silent, so a wrapper can tell the difference.
|
|
191
|
+
printInfo('This run was already published; nothing was sent again.');
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
printSuccess('Published — delivery is under way');
|
|
195
|
+
}
|
|
196
|
+
printExecutionSummary(executionId, Date.now() - start);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
200
|
+
debug: program.opts().debug,
|
|
201
|
+
exit: true,
|
|
202
|
+
context: { command: 'report-publish', executionId },
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
// ── link ──────────────────────────────────────────────────────────────────
|
|
207
|
+
withSslOptions(group
|
|
208
|
+
.command('link')
|
|
209
|
+
.description('Mint an expiring read-only link to a published run. The token is shown ONCE.')
|
|
210
|
+
.requiredOption('-r, --run <id>', 'Published run ID')
|
|
211
|
+
.option('--days <n>', 'Days until it expires (server default 30, maximum 180)')
|
|
212
|
+
.option('--redact-names', 'Replace project and pipeline names in the shared view'))
|
|
213
|
+
.action(async (options) => {
|
|
214
|
+
const executionId = printCommandHeader('Report Link');
|
|
215
|
+
try {
|
|
216
|
+
printSslWarning(options.verifySsl);
|
|
217
|
+
const client = createAuthenticatedClient(options);
|
|
218
|
+
const days = options.days === undefined ? undefined : Number(options.days);
|
|
219
|
+
if (days !== undefined && (!Number.isInteger(days) || days < 1)) {
|
|
220
|
+
throw new Error('--days must be a positive whole number of days');
|
|
221
|
+
}
|
|
222
|
+
const start = Date.now();
|
|
223
|
+
const data = unwrap(await client.post(`${client.getConfig().api.baseUrl}${BASE}/runs/${encodeURIComponent(options.run)}/links`, {
|
|
224
|
+
...(days !== undefined ? { expiresInDays: days } : {}),
|
|
225
|
+
...(options.redactNames ? { redactNames: true } : {}),
|
|
226
|
+
}), 'link');
|
|
227
|
+
printSection('Share Link');
|
|
228
|
+
printKeyValue({
|
|
229
|
+
Link: green(bold(data.url ?? data.token ?? '(not returned)')),
|
|
230
|
+
Expires: data.expiresAt,
|
|
231
|
+
});
|
|
232
|
+
// Said every time, because it is true every time and the consequence is permanent:
|
|
233
|
+
// the server stores only a hash, so a lost token cannot be recovered, only replaced.
|
|
234
|
+
printWarning('Copy this now — only a hash is stored, so it cannot be shown again. Revoke it in the dashboard if it leaks.');
|
|
235
|
+
printExecutionSummary(executionId, Date.now() - start);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
239
|
+
debug: program.opts().debug,
|
|
240
|
+
exit: true,
|
|
241
|
+
context: { command: 'report-link', executionId },
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
// ── pdf ───────────────────────────────────────────────────────────────────
|
|
246
|
+
withSslOptions(group
|
|
247
|
+
.command('pdf')
|
|
248
|
+
.description('Download a run as a PDF. Needs reports:read — the same permission as reading the run.')
|
|
249
|
+
.requiredOption('-r, --run <id>', 'Run ID to download')
|
|
250
|
+
.option('-o, --out <file>', 'Where to write it (default: the file name the server chose, in the working directory)'))
|
|
251
|
+
.action(async (options) => {
|
|
252
|
+
const executionId = printCommandHeader('Report PDF');
|
|
253
|
+
try {
|
|
254
|
+
printSslWarning(options.verifySsl);
|
|
255
|
+
const client = createAuthenticatedClient(options);
|
|
256
|
+
const start = Date.now();
|
|
257
|
+
const { data, filename } = await client.getBinary(`${client.getConfig().api.baseUrl}${BASE}/runs/${encodeURIComponent(options.run)}/pdf`);
|
|
258
|
+
// The server's name unless the caller asked for one: it knows the report's title and
|
|
259
|
+
// whether this run is a revision, and a scripted board pack wants that name.
|
|
260
|
+
const target = typeof options.out === 'string' && options.out.length > 0
|
|
261
|
+
? options.out
|
|
262
|
+
: (filename ?? `report-${options.run}.pdf`);
|
|
263
|
+
writeFileSync(target, data);
|
|
264
|
+
printSection('Downloaded');
|
|
265
|
+
printKeyValue({ File: green(bold(target)), Size: `${(data.length / 1024).toFixed(1)} KiB` });
|
|
266
|
+
printSuccess('Saved');
|
|
267
|
+
printExecutionSummary(executionId, Date.now() - start);
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
// A 503 here is not a failure of the report: this instance has no Chromium, and the
|
|
271
|
+
// server says so in words. It still exits non-zero, because a script that asked for a
|
|
272
|
+
// file and got none must not carry on as though it has one.
|
|
273
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
274
|
+
debug: program.opts().debug,
|
|
275
|
+
exit: true,
|
|
276
|
+
context: { command: 'report-pdf', executionId },
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
// ── transfer ──────────────────────────────────────────────────────────────
|
|
281
|
+
withSslOptions(group
|
|
282
|
+
.command('transfer')
|
|
283
|
+
.description('Hand a report to a new owner. A scheduled run is authorized AS the owner, so this is a privilege move.')
|
|
284
|
+
.requiredOption('-i, --id <id>', 'Report definition ID')
|
|
285
|
+
.requiredOption('-o, --owner <userId>', 'New owner\'s user ID — must be a live member of this org'))
|
|
286
|
+
.action(async (options) => {
|
|
287
|
+
const executionId = printCommandHeader('Report Transfer');
|
|
288
|
+
try {
|
|
289
|
+
printSslWarning(options.verifySsl);
|
|
290
|
+
const client = createAuthenticatedClient(options);
|
|
291
|
+
const start = Date.now();
|
|
292
|
+
const data = unwrap(await client.post(`${client.getConfig().api.baseUrl}${BASE}/definitions/${encodeURIComponent(options.id)}/transfer`, { ownerId: options.owner }), 'report');
|
|
293
|
+
printSection('Ownership Transferred');
|
|
294
|
+
printKeyValue({ 'Report': green(bold(data.definition.name)), 'New owner': options.owner });
|
|
295
|
+
// The consequence, in one line: from now on the report computes with a different
|
|
296
|
+
// person's access, which can change what it contains.
|
|
297
|
+
printInfo('Future runs are authorized as the new owner, so the report now computes with their access.');
|
|
298
|
+
printExecutionSummary(executionId, Date.now() - start);
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
302
|
+
debug: program.opts().debug,
|
|
303
|
+
exit: true,
|
|
304
|
+
context: { command: 'report-transfer', executionId },
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
/** `"a, b ,c"` → `['a','b','c']`; empty or absent → `[]`. */
|
|
310
|
+
function splitList(value) {
|
|
311
|
+
if (typeof value !== 'string')
|
|
312
|
+
return [];
|
|
313
|
+
return value.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3JlcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEosT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlHLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7QUEwQjFDLE1BQU0sSUFBSSxHQUFHLDBCQUEwQixDQUFDO0FBS3hDLCtEQUErRDtBQUMvRCxTQUFTLE1BQU0sQ0FBSSxRQUFpQixFQUFFLElBQVk7SUFDaEQsTUFBTSxHQUFHLEdBQUcsUUFBbUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sSUFBSSwwQkFBMEIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ2xCLENB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cUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFO2FBQ3JELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCw2REFBNkQ7QUFDN0QsU0FBUyxTQUFTLENBQUMsS0FBYztJQUMvQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIGBwaXBlbGluZS1tYW5hZ2VyIHJlcG9ydCDigKZgIOKAlCB0aGUgc3Rha2Vob2xkZXItcmVwb3J0IGFkZC1vbiBmcm9tIGEgdGVybWluYWwuXG4gKlxuICogU2V2ZW4gdmVyYnMsIG1hdGNoaW5nIHRoZSBBUEkgc3VyZmFjZSBhIGxlYWQgYWN0dWFsbHkgZHJpdmVzOiBgY3JlYXRlYCwgYGxpc3RgLFxuICogYHJ1biAtLXBlcmlvZGAsIGBwdWJsaXNoYCwgYGxpbmtgLCBgcGRmYCBhbmQgYHRyYW5zZmVyYC5cbiAqXG4gKiBXSFkgQSBDTEkgRk9SIFRISVMgQVQgQUxMLiBUd28gam9icyB0aGUgZGFzaGJvYXJkIGlzIHRoZSB3cm9uZyBzaGFwZSBmb3IuIFRoZSBmaXJzdCBpc1xuICogQkFDS0ZJTEw6IGByZXBvcnQgcnVuIC0tcGVyaW9kIDIwMjYtVzM0YCBmb3IgZWFjaCBvZiBmaXZlIHdlZWtzIGlzIGEgbG9vcCBpbiBhIHNoZWxsIGFuZFxuICogZml2ZSBjYXJlZnVsIGNsaWNrcyBpbiBhIGJyb3dzZXIuIFRoZSBzZWNvbmQgaXMgVU5BVFRFTkRFRCBPUEVSQVRJT04g4oCUIGEgdGVhbSB0aGF0IHdhbnRzXG4gKiBpdHMgcmVwb3J0IHByb2R1Y2VkIGJ5IGl0cyBvd24gc2NoZWR1bGVyIHJhdGhlciB0aGFuIG91cnMsIG9yIHdhbnRzIHB1Ymxpc2hpbmcgZ2F0ZWQgb24gYVxuICogcmVsZWFzZSBmaW5pc2hpbmcsIG5lZWRzIGEgY29tbWFuZCB3aXRoIGFuIGV4aXQgY29kZS5cbiAqXG4gKiBFVkVSWSBHQVRFIElTIFRIRSBTRVJWRVInUy4gVGhlIENMSSBjaGVja3Mgbm90aGluZzogYHJlcG9ydHM6YXV0aG9yYCBmb3IgY3JlYXRlIGFuZCBydW4sXG4gKiBgcmVwb3J0czpzaGFyZWAgZm9yIHB1Ymxpc2ggYW5kIGxpbmssIGByZXBvcnRzOnJlYWRgIGZvciBwZGYsIHRoZSBgc3Rha2Vob2xkZXJfcmVwb3J0c2BcbiAqIGZlYXR1cmUgZm9yIGFsbCBvZiB0aGVtLFxuICogYW5kIHRoZSBvcmcncyBhZG1pbi1vd25lZCBwb2xpY3kgZm9yIHdoZXRoZXIgYSBsaW5rIG1heSBiZSBtaW50ZWQgYXQgYWxsLiBUaGUgY2FsbGVyJ3NcbiAqIHRva2VuIGRlY2lkZXMsIGFuZCBhIDQwMyBpcyBwcmludGVkIGFzIHRoZSBzZXJ2ZXIgd29yZGVkIGl0IOKAlCBhIENMSSB0aGF0IHByZS1qdWRnZWRcbiAqIHdvdWxkIGJlIGEgc2Vjb25kIGNvcHkgb2YgdGhlIHJ1bGVzLCB3cm9uZyB0aGUgZmlyc3QgdGltZSBlaXRoZXIgY2hhbmdlZC5cbiAqL1xuXG5pbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludEV4ZWN1dGlvblN1bW1hcnksIHByaW50U3NsV2FybmluZywgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuY29uc3QgeyBib2xkLCBkaW0sIGdyZWVuLCB5ZWxsb3cgfSA9IHBpY287XG5cbi8qKiBUaGUgQVBJIHNoYXBlIHRoZSBDTEkgcmVhZHMuIE5hcnJvd2VkIHRvIHdoYXQgaXQgcHJpbnRzLiAqL1xuaW50ZXJmYWNlIFJlcG9ydERlZmluaXRpb24ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHRlbXBsYXRlOiBzdHJpbmc7XG4gIGNhZGVuY2U6IHN0cmluZztcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgd2Vla1N0YXJ0OiBzdHJpbmc7XG4gIGlzQWN0aXZlOiBib29sZWFuO1xuICBwYXVzZWRSZWFzb24/OiBzdHJpbmcgfCBudWxsO1xuICBuZXh0UnVuQXQ/OiBzdHJpbmcgfCBudWxsO1xuICBsYXN0UnVuQXQ/OiBzdHJpbmcgfCBudWxsO1xuICByZWNpcGllbnRzOiBzdHJpbmdbXTtcbiAgYXV0b1NlbmQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBSZXBvcnRSdW4ge1xuICBpZDogc3RyaW5nO1xuICBwZXJpb2RMYWJlbDogc3RyaW5nO1xuICB2ZXJzaW9uOiBudW1iZXI7XG4gIHN0YXR1czogc3RyaW5nO1xuICBwdWJsaXNoZWRBdD86IHN0cmluZyB8IG51bGw7XG59XG5cbmNvbnN0IEJBU0UgPSAnL2FwaS9yZXBvcnRzL3N0YWtlaG9sZGVyJztcblxuLyoqIFRoZSByZXNwb25zZSBlbnZlbG9wZSBldmVyeSByb3V0ZSBoZXJlIHJldHVybnMuICovXG5pbnRlcmZhY2UgRW52ZWxvcGU8VD4geyBzdWNjZXNzPzogYm9vbGVhbjsgZGF0YT86IFQ7IG1lc3NhZ2U/OiBzdHJpbmcgfVxuXG4vKiogVW53cmFwIGFuIGVudmVsb3BlLCBvciBmYWlsIHdpdGggdGhlIHNlcnZlcidzIG93biB3b3Jkcy4gKi9cbmZ1bmN0aW9uIHVud3JhcDxUPihyZXNwb25zZTogdW5rbm93biwgd2hhdDogc3RyaW5nKTogVCB7XG4gIGNvbnN0IGVudiA9IHJlc3BvbnNlIGFzIEVudmVsb3BlPFQ+IHwgdW5kZWZpbmVkO1xuICBpZiAoIWVudiB8fCBlbnYuc3VjY2VzcyA9PT0gZmFsc2UgfHwgIWVudi5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVudj8ubWVzc2FnZSA/PyBgVGhlIHNlcnZlciByZXR1cm5lZCBubyAke3doYXR9YCk7XG4gIH1cbiAgcmV0dXJuIGVudi5kYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0KHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgY29uc3QgZ3JvdXAgPSBwcm9ncmFtLmNvbW1hbmQoJ3JlcG9ydCcpLmRlc2NyaXB0aW9uKCdDcmVhdGUsIHJ1biwgcHVibGlzaCBhbmQgc2hhcmUgc3Rha2Vob2xkZXIgcmVwb3J0cycpO1xuXG4gIC8vIOKUgOKUgCBsaXN0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICB3aXRoU3NsT3B0aW9ucyhncm91cFxuICAgIC5jb21tYW5kKCdsaXN0JylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgdGhpcyBvcmdhbml6YXRpb25cXCdzIHNhdmVkIHJlcG9ydHMsIHRoZWlyIHNjaGVkdWxlIGFuZCBwYXVzZSBzdGF0ZS4nKSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUmVwb3J0IExpc3QnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHVud3JhcDx7IGRlZmluaXRpb25zOiBSZXBvcnREZWZpbml0aW9uW10gfT4oXG4gICAgICAgICAgYXdhaXQgY2xpZW50LmdldChgJHtjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLmJhc2VVcmx9JHtCQVNFfS9kZWZpbml0aW9uc2ApLCAncmVwb3J0cycsXG4gICAgICAgICk7XG4gICAgICAgIHByaW50U2VjdGlvbignU2F2ZWQgUmVwb3J0cycpO1xuICAgICAgICBpZiAoZGF0YS5kZWZpbml0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBwcmludEluZm8oJ05vIHNhdmVkIHJlcG9ydHMgeWV0LiBDcmVhdGUgb25lIHdpdGggYHBpcGVsaW5lLW1hbmFnZXIgcmVwb3J0IGNyZWF0ZWAuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBkIG9mIGRhdGEuZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAvLyBUaGUgcGF1c2UgUkVBU09OLCBub3QganVzdCB0aGUgc3RhdGU6IFwicGF1c2VkXCIgb24gaXRzIG93biBpcyBhIHN1cHBvcnQgdGlja2V0LlxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gZC5pc0FjdGl2ZVxuICAgICAgICAgICAgPyBncmVlbignYWN0aXZlJylcbiAgICAgICAgICAgIDogeWVsbG93KGBwYXVzZWQke2QucGF1c2VkUmVhc29uID8gYCAoJHtkLnBhdXNlZFJlYXNvbn0pYCA6ICcnfWApO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgW2JvbGQoZC5uYW1lKV06IGAke3N0YXRlfSAke2RpbShgwrcgJHtkLmNhZGVuY2V9IMK3ICR7ZC50aW1lem9uZX0gwrcgJHtkLnJlY2lwaWVudHMubGVuZ3RofSByZWNpcGllbnQocykke2QuYXV0b1NlbmQgPyAnIMK3IGF1dG8tc2VuZCcgOiAnJ31gKX1gLFxuICAgICAgICAgICAgJyAgaWQnOiBkLmlkLFxuICAgICAgICAgICAgJyAgbmV4dCBydW4nOiBkLm5leHRSdW5BdCA/PyAnKG5vdCBzY2hlZHVsZWQpJyxcbiAgICAgICAgICAgICcgIGxhc3QgcnVuJzogZC5sYXN0UnVuQXQgPz8gJyhuZXZlciknLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlcG9ydC1saXN0JywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgLy8g4pSA4pSAIGNyZWF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAuZGVzY3JpcHRpb24oJ1NhdmUgYSBuZXcgc2NoZWR1bGVkIHJlcG9ydC4gVGhlIGNyZWF0b3Igb3ducyBpdDsgYSBzY2hlZHVsZWQgcnVuIGlzIGF1dGhvcml6ZWQgYXMgdGhlIG93bmVyLicpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctbiwgLS1uYW1lIDxuYW1lPicsICdSZXBvcnQgbmFtZSwgYXMgaXRzIHJlY2lwaWVudHMgd2lsbCBzZWUgaXQnKVxuICAgIC5vcHRpb24oJy10LCAtLXRlbXBsYXRlIDx0ZW1wbGF0ZT4nLCAnd2Vla2x5X2RlbGl2ZXJ5IHwgbW9udGhseV9oZWFsdGggfCBxdWFydGVybHlfcmV2aWV3JywgJ3dlZWtseV9kZWxpdmVyeScpXG4gICAgLm9wdGlvbignLXosIC0tdGltZXpvbmUgPHR6PicsICdJQU5BIHRpbWV6b25lIHRoZSBwZXJpb2QgaXMgY3V0IGluIChkZWZhdWx0cyB0byB0aGUgc2VydmVyXFwncyByZXBvcnQgZGVmYXVsdCknKVxuICAgIC5vcHRpb24oJy0td2Vlay1zdGFydCA8ZGF5PicsICdtb25kYXkgfCBzdW5kYXknKVxuICAgIC5vcHRpb24oJy0tc2NvcGUgPGtpbmQ+JywgJ29yZyB8IHByb2plY3RzIHwgcm9sbHVwJywgJ29yZycpXG4gICAgLm9wdGlvbignLS1wcm9qZWN0cyA8bmFtZXM+JywgJ0NvbW1hLXNlcGFyYXRlZCBwcm9qZWN0IG5hbWVzICh3aXRoIC0tc2NvcGUgcHJvamVjdHMpJylcbiAgICAub3B0aW9uKCctLXJlY2lwaWVudHMgPGlkcz4nLCAnQ29tbWEtc2VwYXJhdGVkIHJlY2lwaWVudCBJRHMgZnJvbSB0aGUgb3JnXFwncyBkaXN0cmlidXRpb24gbGlzdCcpXG4gICAgLm9wdGlvbignLS1hdXRvLXNlbmQnLCAnUHVibGlzaCB3aXRob3V0IHJldmlldy4gT2ZmIGJ5IGRlZmF1bHQg4oCUIHRoZSByZXZpZXcgc3RlcCBpcyB3aGVyZSB0aGUgY29udGV4dCBnb2VzLicpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgQ3JlYXRlJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBwcm9qZWN0cyA9IHNwbGl0TGlzdChvcHRpb25zLnByb2plY3RzKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2NvcGUgPT09ICdwcm9qZWN0cycgJiYgcHJvamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLXNjb3BlIHByb2plY3RzIG5lZWRzIC0tcHJvamVjdHMgd2l0aCBhdCBsZWFzdCBvbmUgcHJvamVjdCBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIHRlbXBsYXRlOiBvcHRpb25zLnRlbXBsYXRlLFxuICAgICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlID09PSAncHJvamVjdHMnID8geyBraW5kOiAncHJvamVjdHMnLCBwcm9qZWN0cyB9IDogeyBraW5kOiBvcHRpb25zLnNjb3BlIH0sXG4gICAgICAgICAgcmVjaXBpZW50czogc3BsaXRMaXN0KG9wdGlvbnMucmVjaXBpZW50cyksXG4gICAgICAgICAgYXV0b1NlbmQ6IG9wdGlvbnMuYXV0b1NlbmQgPT09IHRydWUsXG4gICAgICAgICAgLi4uKG9wdGlvbnMudGltZXpvbmUgPyB7IHRpbWV6b25lOiBvcHRpb25zLnRpbWV6b25lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbnMud2Vla1N0YXJ0ID8geyB3ZWVrU3RhcnQ6IG9wdGlvbnMud2Vla1N0YXJ0IH0gOiB7fSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHVud3JhcDx7IGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb24gfT4oXG4gICAgICAgICAgYXdhaXQgY2xpZW50LnBvc3QoYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vZGVmaW5pdGlvbnNgLCBib2R5KSwgJ3JlcG9ydCcsXG4gICAgICAgICk7XG4gICAgICAgIHByaW50U2VjdGlvbignUmVwb3J0IFNhdmVkJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdOYW1lJzogZ3JlZW4oYm9sZChkYXRhLmRlZmluaXRpb24ubmFtZSkpLFxuICAgICAgICAgICdJRCc6IGRhdGEuZGVmaW5pdGlvbi5pZCxcbiAgICAgICAgICAnQ2FkZW5jZSc6IGAke2RhdGEuZGVmaW5pdGlvbi5jYWRlbmNlfSDCtyAke2RhdGEuZGVmaW5pdGlvbi50aW1lem9uZX1gLFxuICAgICAgICAgICdOZXh0IHJ1bic6IGRhdGEuZGVmaW5pdGlvbi5uZXh0UnVuQXQgPz8gJyhub3Qgc2NoZWR1bGVkKScsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YS5kZWZpbml0aW9uLnJlY2lwaWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gU2FpZCBoZXJlIGJlY2F1c2UgaXQgaXMgdGhlIG1vc3QgY29tbW9uIHdheSBhIG5ldyByZXBvcnQgcmVhY2hlcyBub2JvZHk6IHRoZVxuICAgICAgICAgIC8vIGRpc3RyaWJ1dGlvbiBsaXN0IGlzIHBlciBPUkcgYW5kIGFuIGFkZHJlc3MgY29uZmlybXMgYnkgZW1haWwgYmVmb3JlIGRlbGl2ZXJ5LlxuICAgICAgICAgIHByaW50V2FybmluZygnTm8gcmVjaXBpZW50cyB5ZXQg4oCUIGFkZCB0aGVtIGluIHRoZSBkYXNoYm9hcmQ7IGFuIGV4dGVybmFsIGFkZHJlc3MgY29uZmlybXMgYnkgZW1haWwgYmVmb3JlIGFueXRoaW5nIGlzIGRlbGl2ZXJlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBwcmludFN1Y2Nlc3MoJ1JlcG9ydCBjcmVhdGVkJyk7XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlcG9ydC1jcmVhdGUnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAvLyDilIDilIAgcnVuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICB3aXRoU3NsT3B0aW9ucyhncm91cFxuICAgIC5jb21tYW5kKCdydW4nKVxuICAgIC5kZXNjcmlwdGlvbignQ29tcG9zZSBvbmUgcGVyaW9kIGludG8gYSBmcm96ZW4gc25hcHNob3QuIFdpdGhvdXQgLS1wZXJpb2QsIHRoZSBsYXN0IGNvbXBsZXRlIHBlcmlvZC4nKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdSZXBvcnQgZGVmaW5pdGlvbiBJRCcpXG4gICAgLm9wdGlvbignLXAsIC0tcGVyaW9kIDxsYWJlbD4nLCAnUGVyaW9kIGxhYmVsOiAyMDI2LVczOCAod2Vla2x5KSwgMjAyNi0wOCAobW9udGhseSksIDIwMjYtUTMgKHF1YXJ0ZXJseSknKVxuICAgIC5vcHRpb24oJy0tcmVnZW5lcmF0ZScsICdQcm9kdWNlIHZlcnNpb24gTisxIGluc3RlYWQgb2YgcmV1c2luZyBhbiBleGlzdGluZyBzbmFwc2hvdCcpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgUnVuJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBydW46IFJlcG9ydFJ1bjsgcmV1c2VkPzogYm9vbGVhbiB9PihcbiAgICAgICAgICBhd2FpdCBjbGllbnQucG9zdChcbiAgICAgICAgICAgIGAke2NsaWVudC5nZXRDb25maWcoKS5hcGkuYmFzZVVybH0ke0JBU0V9L2RlZmluaXRpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMuaWQpfS9ydW5zYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uKG9wdGlvbnMucGVyaW9kID8geyBwZXJpb2Q6IG9wdGlvbnMucGVyaW9kIH0gOiB7fSksXG4gICAgICAgICAgICAgIC4uLihvcHRpb25zLnJlZ2VuZXJhdGUgPyB7IHJlZ2VuZXJhdGU6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSwgJ3J1bicsXG4gICAgICAgICk7XG4gICAgICAgIHByaW50U2VjdGlvbihkYXRhLnJldXNlZCA/ICdFeGlzdGluZyBTbmFwc2hvdCcgOiAnU25hcHNob3QgQ29tcG9zZWQnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1BlcmlvZCc6IGdyZWVuKGJvbGQoZGF0YS5ydW4ucGVyaW9kTGFiZWwpKSxcbiAgICAgICAgICAnUnVuIElEJzogZGF0YS5ydW4uaWQsXG4gICAgICAgICAgJ1ZlcnNpb24nOiBTdHJpbmcoZGF0YS5ydW4udmVyc2lvbiksXG4gICAgICAgICAgJ1N0YXR1cyc6IGRhdGEucnVuLnN0YXR1cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhLnJldXNlZCkge1xuICAgICAgICAgIC8vIE5vdCBhIG5vLW9wIHRvIGhpZGU6IGEgZnJvemVuIHNuYXBzaG90J3MgbnVtYmVycyBkbyBub3QgY2hhbmdlLCBzbyByZS1ydW5uaW5nXG4gICAgICAgICAgLy8gcmV0dXJucyB3aGF0IGV4aXN0cy4gYC0tcmVnZW5lcmF0ZWAgaXMgaG93IHlvdSBhc2sgZm9yIGEgbmV3IHZlcnNpb24uXG4gICAgICAgICAgcHJpbnRJbmZvKCdUaGlzIHBlcmlvZCBhbHJlYWR5IGhhZCBhIHNuYXBzaG90LCBzbyBpdCB3YXMgcmV0dXJuZWQgdW5jaGFuZ2VkLiBVc2UgLS1yZWdlbmVyYXRlIGZvciBhIG5ldyB2ZXJzaW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlcG9ydC1ydW4nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAvLyDilIDilIAgcHVibGlzaCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgncHVibGlzaCcpXG4gICAgLmRlc2NyaXB0aW9uKCdQdWJsaXNoIGEgY29tcG9zZWQgcnVuLiBOZWVkcyByZXBvcnRzOnNoYXJlIOKAlCBwdWJsaXNoaW5nIGlzIHdoZW4gbnVtYmVycyBsZWF2ZSB0aGUgcGxhdGZvcm0uJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1yLCAtLXJ1biA8aWQ+JywgJ1J1biBJRCB0byBwdWJsaXNoJykpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1JlcG9ydCBQdWJsaXNoJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBydW46IFJlcG9ydFJ1bjsgYWxyZWFkeVB1Ymxpc2hlZD86IGJvb2xlYW4gfT4oXG4gICAgICAgICAgYXdhaXQgY2xpZW50LnBvc3QoXG4gICAgICAgICAgICBgJHtjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLmJhc2VVcmx9JHtCQVNFfS9ydW5zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMucnVuKX0vcHVibGlzaGAsIHt9LFxuICAgICAgICAgICksICdydW4nLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1B1Ymxpc2hlZCcpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUGVyaW9kJzogZ3JlZW4oYm9sZChkYXRhLnJ1bi5wZXJpb2RMYWJlbCkpLFxuICAgICAgICAgICdQdWJsaXNoZWQgYXQnOiBkYXRhLnJ1bi5wdWJsaXNoZWRBdCA/PyAnKHVua25vd24pJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhLmFscmVhZHlQdWJsaXNoZWQpIHtcbiAgICAgICAgICAvLyBJZGVtcG90ZW50IGJ5IGRlc2lnbjogdHdvIHB1Ymxpc2hlcyBzZW5kIG9uZSByZXBvcnQsIHNvIGEgcmV0cmllZCBzY3JpcHQgaXNcbiAgICAgICAgICAvLyBzYWZlLiBSZXBvcnRlZCByYXRoZXIgdGhhbiBzaWxlbnQsIHNvIGEgd3JhcHBlciBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZS5cbiAgICAgICAgICBwcmludEluZm8oJ1RoaXMgcnVuIHdhcyBhbHJlYWR5IHB1Ymxpc2hlZDsgbm90aGluZyB3YXMgc2VudCBhZ2Fpbi4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1B1Ymxpc2hlZCDigJQgZGVsaXZlcnkgaXMgdW5kZXIgd2F5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcHJpbnRFeGVjdXRpb25TdW1tYXJ5KGV4ZWN1dGlvbklkLCBEYXRlLm5vdygpIC0gc3RhcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVwb3J0LXB1Ymxpc2gnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAvLyDilIDilIAgbGluayDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgnbGluaycpXG4gICAgLmRlc2NyaXB0aW9uKCdNaW50IGFuIGV4cGlyaW5nIHJlYWQtb25seSBsaW5rIHRvIGEgcHVibGlzaGVkIHJ1bi4gVGhlIHRva2VuIGlzIHNob3duIE9OQ0UuJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1yLCAtLXJ1biA8aWQ+JywgJ1B1Ymxpc2hlZCBydW4gSUQnKVxuICAgIC5vcHRpb24oJy0tZGF5cyA8bj4nLCAnRGF5cyB1bnRpbCBpdCBleHBpcmVzIChzZXJ2ZXIgZGVmYXVsdCAzMCwgbWF4aW11bSAxODApJylcbiAgICAub3B0aW9uKCctLXJlZGFjdC1uYW1lcycsICdSZXBsYWNlIHByb2plY3QgYW5kIHBpcGVsaW5lIG5hbWVzIGluIHRoZSBzaGFyZWQgdmlldycpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgTGluaycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF5cyA9IG9wdGlvbnMuZGF5cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTnVtYmVyKG9wdGlvbnMuZGF5cyk7XG4gICAgICAgIGlmIChkYXlzICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRheXMpIHx8IGRheXMgPCAxKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignLS1kYXlzIG11c3QgYmUgYSBwb3NpdGl2ZSB3aG9sZSBudW1iZXIgb2YgZGF5cycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHVud3JhcDx7IHVybD86IHN0cmluZzsgdG9rZW4/OiBzdHJpbmc7IGV4cGlyZXNBdDogc3RyaW5nIH0+KFxuICAgICAgICAgIGF3YWl0IGNsaWVudC5wb3N0KFxuICAgICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vcnVucy8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnJ1bil9L2xpbmtzYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uKGRheXMgIT09IHVuZGVmaW5lZCA/IHsgZXhwaXJlc0luRGF5czogZGF5cyB9IDoge30pLFxuICAgICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWRhY3ROYW1lcyA/IHsgcmVkYWN0TmFtZXM6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSwgJ2xpbmsnLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1NoYXJlIExpbmsnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgTGluazogZ3JlZW4oYm9sZChkYXRhLnVybCA/PyBkYXRhLnRva2VuID8/ICcobm90IHJldHVybmVkKScpKSxcbiAgICAgICAgICBFeHBpcmVzOiBkYXRhLmV4cGlyZXNBdCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFNhaWQgZXZlcnkgdGltZSwgYmVjYXVzZSBpdCBpcyB0cnVlIGV2ZXJ5IHRpbWUgYW5kIHRoZSBjb25zZXF1ZW5jZSBpcyBwZXJtYW5lbnQ6XG4gICAgICAgIC8vIHRoZSBzZXJ2ZXIgc3RvcmVzIG9ubHkgYSBoYXNoLCBzbyBhIGxvc3QgdG9rZW4gY2Fubm90IGJlIHJlY292ZXJlZCwgb25seSByZXBsYWNlZC5cbiAgICAgICAgcHJpbnRXYXJuaW5nKCdDb3B5IHRoaXMgbm93IOKAlCBvbmx5IGEgaGFzaCBpcyBzdG9yZWQsIHNvIGl0IGNhbm5vdCBiZSBzaG93biBhZ2Fpbi4gUmV2b2tlIGl0IGluIHRoZSBkYXNoYm9hcmQgaWYgaXQgbGVha3MuJyk7XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlcG9ydC1saW5rJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgLy8g4pSA4pSAIHBkZiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgncGRmJylcbiAgICAuZGVzY3JpcHRpb24oJ0Rvd25sb2FkIGEgcnVuIGFzIGEgUERGLiBOZWVkcyByZXBvcnRzOnJlYWQg4oCUIHRoZSBzYW1lIHBlcm1pc3Npb24gYXMgcmVhZGluZyB0aGUgcnVuLicpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctciwgLS1ydW4gPGlkPicsICdSdW4gSUQgdG8gZG93bmxvYWQnKVxuICAgIC5vcHRpb24oJy1vLCAtLW91dCA8ZmlsZT4nLCAnV2hlcmUgdG8gd3JpdGUgaXQgKGRlZmF1bHQ6IHRoZSBmaWxlIG5hbWUgdGhlIHNlcnZlciBjaG9zZSwgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5KScpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgUERGJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgZmlsZW5hbWUgfSA9IGF3YWl0IGNsaWVudC5nZXRCaW5hcnkoXG4gICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vcnVucy8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnJ1bil9L3BkZmAsXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIncyBuYW1lIHVubGVzcyB0aGUgY2FsbGVyIGFza2VkIGZvciBvbmU6IGl0IGtub3dzIHRoZSByZXBvcnQncyB0aXRsZSBhbmRcbiAgICAgICAgLy8gd2hldGhlciB0aGlzIHJ1biBpcyBhIHJldmlzaW9uLCBhbmQgYSBzY3JpcHRlZCBib2FyZCBwYWNrIHdhbnRzIHRoYXQgbmFtZS5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIG9wdGlvbnMub3V0ID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLm91dC5sZW5ndGggPiAwXG4gICAgICAgICAgPyBvcHRpb25zLm91dFxuICAgICAgICAgIDogKGZpbGVuYW1lID8/IGByZXBvcnQtJHtvcHRpb25zLnJ1bn0ucGRmYCk7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModGFyZ2V0LCBkYXRhKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdEb3dubG9hZGVkJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoeyBGaWxlOiBncmVlbihib2xkKHRhcmdldCkpLCBTaXplOiBgJHsoZGF0YS5sZW5ndGggLyAxMDI0KS50b0ZpeGVkKDEpfSBLaUJgIH0pO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ1NhdmVkJyk7XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgNTAzIGhlcmUgaXMgbm90IGEgZmFpbHVyZSBvZiB0aGUgcmVwb3J0OiB0aGlzIGluc3RhbmNlIGhhcyBubyBDaHJvbWl1bSwgYW5kIHRoZVxuICAgICAgICAvLyBzZXJ2ZXIgc2F5cyBzbyBpbiB3b3Jkcy4gSXQgc3RpbGwgZXhpdHMgbm9uLXplcm8sIGJlY2F1c2UgYSBzY3JpcHQgdGhhdCBhc2tlZCBmb3IgYVxuICAgICAgICAvLyBmaWxlIGFuZCBnb3Qgbm9uZSBtdXN0IG5vdCBjYXJyeSBvbiBhcyB0aG91Z2ggaXQgaGFzIG9uZS5cbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVwb3J0LXBkZicsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIC8vIOKUgOKUgCB0cmFuc2ZlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgndHJhbnNmZXInKVxuICAgIC5kZXNjcmlwdGlvbignSGFuZCBhIHJlcG9ydCB0byBhIG5ldyBvd25lci4gQSBzY2hlZHVsZWQgcnVuIGlzIGF1dGhvcml6ZWQgQVMgdGhlIG93bmVyLCBzbyB0aGlzIGlzIGEgcHJpdmlsZWdlIG1vdmUuJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUmVwb3J0IGRlZmluaXRpb24gSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW8sIC0tb3duZXIgPHVzZXJJZD4nLCAnTmV3IG93bmVyXFwncyB1c2VyIElEIOKAlCBtdXN0IGJlIGEgbGl2ZSBtZW1iZXIgb2YgdGhpcyBvcmcnKSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUmVwb3J0IFRyYW5zZmVyJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uIH0+KFxuICAgICAgICAgIGF3YWl0IGNsaWVudC5wb3N0KFxuICAgICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vZGVmaW5pdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5pZCl9L3RyYW5zZmVyYCxcbiAgICAgICAgICAgIHsgb3duZXJJZDogb3B0aW9ucy5vd25lciB9LFxuICAgICAgICAgICksICdyZXBvcnQnLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ093bmVyc2hpcCBUcmFuc2ZlcnJlZCcpO1xuICAgICAgICBwcmludEtleVZhbHVlKHsgJ1JlcG9ydCc6IGdyZWVuKGJvbGQoZGF0YS5kZWZpbml0aW9uLm5hbWUpKSwgJ05ldyBvd25lcic6IG9wdGlvbnMub3duZXIgfSk7XG4gICAgICAgIC8vIFRoZSBjb25zZXF1ZW5jZSwgaW4gb25lIGxpbmU6IGZyb20gbm93IG9uIHRoZSByZXBvcnQgY29tcHV0ZXMgd2l0aCBhIGRpZmZlcmVudFxuICAgICAgICAvLyBwZXJzb24ncyBhY2Nlc3MsIHdoaWNoIGNhbiBjaGFuZ2Ugd2hhdCBpdCBjb250YWlucy5cbiAgICAgICAgcHJpbnRJbmZvKCdGdXR1cmUgcnVucyBhcmUgYXV0aG9yaXplZCBhcyB0aGUgbmV3IG93bmVyLCBzbyB0aGUgcmVwb3J0IG5vdyBjb21wdXRlcyB3aXRoIHRoZWlyIGFjY2Vzcy4nKTtcbiAgICAgICAgcHJpbnRFeGVjdXRpb25TdW1tYXJ5KGV4ZWN1dGlvbklkLCBEYXRlLm5vdygpIC0gc3RhcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVwb3J0LXRyYW5zZmVyJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbi8qKiBgXCJhLCBiICxjXCJgIOKGkiBgWydhJywnYicsJ2MnXWA7IGVtcHR5IG9yIGFic2VudCDihpIgYFtdYC4gKi9cbmZ1bmN0aW9uIHNwbGl0TGlzdCh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBbXTtcbiAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSkuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCA+IDApO1xufVxuIl19
|
package/dist/types/pipeline.d.ts
CHANGED
|
@@ -97,15 +97,10 @@ export interface CreatePipelineRequest {
|
|
|
97
97
|
*/
|
|
98
98
|
pipelineName?: string;
|
|
99
99
|
/**
|
|
100
|
-
*
|
|
101
|
-
* @default '
|
|
100
|
+
* Sharing rung (private|org|public)
|
|
101
|
+
* @default 'org'
|
|
102
102
|
*/
|
|
103
103
|
visibility?: PipelineVisibility;
|
|
104
|
-
/**
|
|
105
|
-
* Whether this is the default pipeline
|
|
106
|
-
* @default false
|
|
107
|
-
*/
|
|
108
|
-
isDefault?: boolean;
|
|
109
104
|
/**
|
|
110
105
|
* Whether the pipeline is active
|
|
111
106
|
* @default true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/types/pipeline.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,YAAY,EAAE,gBAAgB;CAAG;AAEnE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/types/pipeline.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,YAAY,EAAE,gBAAgB;CAAG;AAEnE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;CACpB"}
|
package/dist/types/pipeline.js
CHANGED
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEFyYml0cmFyeSBrZXktdmFsdWUgcGlwZWxpbmUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gKiBwYXNzZWQgdGhyb3VnaCB0byB0aGUgQ0RLIGJ1aWxkZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFBpcGVsaW5lUHJvcHMgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBQaXBlbGluZSBzaGFyaW5nIHJ1bmcg4oCUIHRoZSBwbGF0Zm9ybS13aWRlIHRocmVlLXJ1bmcgbGFkZGVyLlxuICogYHByaXZhdGVgIGlzIGF1dGhvci1vbmx5LCBgb3JnYCBpcyB0aGUgd2hvbGUgb3duaW5nIG9yZywgYHB1YmxpY2AgcmVhY2hlcyB0aGVcbiAqIG9yZydzIHRlYW1zIChhbmQsIGZyb20gdGhlIHN5c3RlbSBvcmcsIGV2ZXJ5IG9yZykuXG4gKi9cbmV4cG9ydCB0eXBlIFBpcGVsaW5lVmlzaWJpbGl0eSA9ICdwcml2YXRlJyB8ICdvcmcnIHwgJ3B1YmxpYyc7XG5cbi8qKlxuICogQ29yZSBwaXBlbGluZSBmaWVsZHMgcmVxdWlyZWQgb24gZXZlcnkgcGlwZWxpbmUgcmVjb3JkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQmFzZSB7XG4gIC8qKlxuICAgKiBVbmlxdWUgcGlwZWxpbmUgaWRlbnRpZmllclxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUHJvamVjdCBuYW1lXG4gICAqL1xuICBwcm9qZWN0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9yZ2FuaXphdGlvbiBuYW1lXG4gICAqL1xuICBvcmdhbml6YXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGVuYW50IGlkZW50aWZpZXIgKGZyb20gQVBJIHJlc3BvbnNlLCB1c2VkIGZvciBwZXItb3JnIHNlY3JldCByZXNvbHV0aW9uKVxuICAgKi9cbiAgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lIHByb3BlcnRpZXMvY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvcHM6IFBpcGVsaW5lUHJvcHM7XG59XG5cbi8qKlxuICogT3B0aW9uYWwgbWV0YWRhdGEgZmllbGRzIGF0dGFjaGVkIHRvIGEgcGlwZWxpbmUgcmVjb3JkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lTWV0YWRhdGEge1xuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgcGlwZWxpbmUgbmFtZVxuICAgKi9cbiAgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaGFyaW5nIHJ1bmc6ICdwcml2YXRlJyB8ICdvcmcnIHwgJ3B1YmxpYycuXG4gICAqL1xuICB2aXNpYmlsaXR5PzogUGlwZWxpbmVWaXNpYmlsaXR5O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGRlZmF1bHQgcGlwZWxpbmVcbiAgICovXG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBpcGVsaW5lIGlzIGFjdGl2ZVxuICAgKi9cbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZSBjcmVhdGlvbiB0aW1lc3RhbXBcbiAgICovXG4gIGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogUGlwZWxpbmUgbGFzdCB1cGRhdGUgdGltZXN0YW1wXG4gICAqL1xuICB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXIgd2hvIGNyZWF0ZWQgdGhlIHBpcGVsaW5lXG4gICAqL1xuICBjcmVhdGVkQnk/
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEFyYml0cmFyeSBrZXktdmFsdWUgcGlwZWxpbmUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gKiBwYXNzZWQgdGhyb3VnaCB0byB0aGUgQ0RLIGJ1aWxkZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFBpcGVsaW5lUHJvcHMgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBQaXBlbGluZSBzaGFyaW5nIHJ1bmcg4oCUIHRoZSBwbGF0Zm9ybS13aWRlIHRocmVlLXJ1bmcgbGFkZGVyLlxuICogYHByaXZhdGVgIGlzIGF1dGhvci1vbmx5LCBgb3JnYCBpcyB0aGUgd2hvbGUgb3duaW5nIG9yZywgYHB1YmxpY2AgcmVhY2hlcyB0aGVcbiAqIG9yZydzIHRlYW1zIChhbmQsIGZyb20gdGhlIHN5c3RlbSBvcmcsIGV2ZXJ5IG9yZykuXG4gKi9cbmV4cG9ydCB0eXBlIFBpcGVsaW5lVmlzaWJpbGl0eSA9ICdwcml2YXRlJyB8ICdvcmcnIHwgJ3B1YmxpYyc7XG5cbi8qKlxuICogQ29yZSBwaXBlbGluZSBmaWVsZHMgcmVxdWlyZWQgb24gZXZlcnkgcGlwZWxpbmUgcmVjb3JkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQmFzZSB7XG4gIC8qKlxuICAgKiBVbmlxdWUgcGlwZWxpbmUgaWRlbnRpZmllclxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUHJvamVjdCBuYW1lXG4gICAqL1xuICBwcm9qZWN0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9yZ2FuaXphdGlvbiBuYW1lXG4gICAqL1xuICBvcmdhbml6YXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGVuYW50IGlkZW50aWZpZXIgKGZyb20gQVBJIHJlc3BvbnNlLCB1c2VkIGZvciBwZXItb3JnIHNlY3JldCByZXNvbHV0aW9uKVxuICAgKi9cbiAgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lIHByb3BlcnRpZXMvY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvcHM6IFBpcGVsaW5lUHJvcHM7XG59XG5cbi8qKlxuICogT3B0aW9uYWwgbWV0YWRhdGEgZmllbGRzIGF0dGFjaGVkIHRvIGEgcGlwZWxpbmUgcmVjb3JkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lTWV0YWRhdGEge1xuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgcGlwZWxpbmUgbmFtZVxuICAgKi9cbiAgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaGFyaW5nIHJ1bmc6ICdwcml2YXRlJyB8ICdvcmcnIHwgJ3B1YmxpYycuXG4gICAqL1xuICB2aXNpYmlsaXR5PzogUGlwZWxpbmVWaXNpYmlsaXR5O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGRlZmF1bHQgcGlwZWxpbmVcbiAgICovXG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBpcGVsaW5lIGlzIGFjdGl2ZVxuICAgKi9cbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZSBjcmVhdGlvbiB0aW1lc3RhbXBcbiAgICovXG4gIGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogUGlwZWxpbmUgbGFzdCB1cGRhdGUgdGltZXN0YW1wXG4gICAqL1xuICB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXIgd2hvIGNyZWF0ZWQgdGhlIHBpcGVsaW5lXG4gICAqL1xuICBjcmVhdGVkQnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXIgd2hvIGxhc3QgdXBkYXRlZCB0aGUgcGlwZWxpbmVcbiAgICovXG4gIHVwZGF0ZWRCeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21wbGV0ZSBwaXBlbGluZSBlbnRpdHkgY29tYmluaW5nIGNvcmUgZmllbGRzIGFuZCBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZSBleHRlbmRzIFBpcGVsaW5lQmFzZSwgUGlwZWxpbmVNZXRhZGF0YSB7fVxuXG4vKipcbiAqIFJlcXVlc3QgcGF5bG9hZCBmb3IgY3JlYXRpbmcgYSBuZXcgcGlwZWxpbmUgdmlhIHRoZSBwbGF0Zm9ybSBBUEkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFByb2plY3QgbmFtZVxuICAgKi9cbiAgcHJvamVjdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcmdhbml6YXRpb24gbmFtZVxuICAgKi9cbiAgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lIHByb3BlcnRpZXMvY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvcHM6IFBpcGVsaW5lUHJvcHM7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIHBpcGVsaW5lIG5hbWVcbiAgICovXG4gIHBpcGVsaW5lTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU2hhcmluZyBydW5nIChwcml2YXRlfG9yZ3xwdWJsaWMpXG4gICAqIEBkZWZhdWx0ICdvcmcnXG4gICAqL1xuICB2aXNpYmlsaXR5PzogUGlwZWxpbmVWaXNpYmlsaXR5O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwaXBlbGluZSBpcyBhY3RpdmVcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaXNBY3RpdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIHJldHVybmVkIGJ5IHNpbmdsZS1waXBlbGluZSBBUEkgZW5kcG9pbnRzIChnZXQsIGNyZWF0ZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVSZXNwb25zZSB7XG4gIHBpcGVsaW5lOiBQaXBlbGluZTtcbn1cbiJdfQ==
|
|
@@ -9,6 +9,20 @@ export declare class ApiClient {
|
|
|
9
9
|
constructor(config: Config);
|
|
10
10
|
private handleError;
|
|
11
11
|
get<T = unknown>(url: string, params?: Record<string, unknown>, headers?: Record<string, string>): Promise<T>;
|
|
12
|
+
/**
|
|
13
|
+
* A BINARY download (a report PDF): the bytes, plus the file name the server chose.
|
|
14
|
+
*
|
|
15
|
+
* `responseType: 'arraybuffer'` because the default would hand back a UTF-8 string and
|
|
16
|
+
* corrupt every byte above 0x7f — a PDF written that way opens as a damaged file, which
|
|
17
|
+
* looks like a server bug rather than a client one.
|
|
18
|
+
*
|
|
19
|
+
* The server's `Content-Disposition` name is preferred over anything the caller guesses:
|
|
20
|
+
* it knows the report's title and whether the run is a revision.
|
|
21
|
+
*/
|
|
22
|
+
getBinary(url: string, headers?: Record<string, string>): Promise<{
|
|
23
|
+
data: Buffer;
|
|
24
|
+
filename?: string;
|
|
25
|
+
}>;
|
|
12
26
|
post<T = unknown>(url: string, data?: unknown, headers?: Record<string, string>): Promise<T>;
|
|
13
27
|
postForm<T = unknown>(url: string, formData: FormData, headers?: Record<string, string>): Promise<T>;
|
|
14
28
|
put<T = unknown>(url: string, data?: unknown, headers?: Record<string, string>): Promise<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IAEvB,YAAY,MAAM,EAAE,MAAM,EAsDzB;IAED,OAAO,CAAC,WAAW;IAkDb,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlH;IAEK,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGjG;IAEK,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CASzG;IAEK,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGhG;IAEK,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGnF;IAEK,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlG;IAED,SAAS,IAAI,MAAM,CAAwB;IAC3C,UAAU,IAAI,MAAM,CAAoC;IACxD,eAAe,IAAI,OAAO,CAAsC;IAEhE;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CASzB"}
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IAEvB,YAAY,MAAM,EAAE,MAAM,EAsDzB;IAED,OAAO,CAAC,WAAW;IAkDb,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlH;IAED;;;;;;;;;OASG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAQ3G;IAEK,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGjG;IAEK,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CASzG;IAEK,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGhG;IAEK,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGnF;IAEK,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlG;IAED,SAAS,IAAI,MAAM,CAAwB;IAC3C,UAAU,IAAI,MAAM,CAAoC;IACxD,eAAe,IAAI,OAAO,CAAsC;IAEhE;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CASzB"}
|
package/dist/utils/api-client.js
CHANGED
|
@@ -105,6 +105,25 @@ export class ApiClient {
|
|
|
105
105
|
const response = await this.client.get(url, { params, headers });
|
|
106
106
|
return response.data;
|
|
107
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* A BINARY download (a report PDF): the bytes, plus the file name the server chose.
|
|
110
|
+
*
|
|
111
|
+
* `responseType: 'arraybuffer'` because the default would hand back a UTF-8 string and
|
|
112
|
+
* corrupt every byte above 0x7f — a PDF written that way opens as a damaged file, which
|
|
113
|
+
* looks like a server bug rather than a client one.
|
|
114
|
+
*
|
|
115
|
+
* The server's `Content-Disposition` name is preferred over anything the caller guesses:
|
|
116
|
+
* it knows the report's title and whether the run is a revision.
|
|
117
|
+
*/
|
|
118
|
+
async getBinary(url, headers) {
|
|
119
|
+
const response = await this.client.get(url, { headers, responseType: 'arraybuffer' });
|
|
120
|
+
const disposition = String(response.headers['content-disposition'] ?? '');
|
|
121
|
+
const match = /filename="([^"]+)"/.exec(disposition);
|
|
122
|
+
return {
|
|
123
|
+
data: Buffer.from(response.data),
|
|
124
|
+
...(match?.[1] ? { filename: match[1] } : {}),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
108
127
|
async post(url, data, headers) {
|
|
109
128
|
const response = await this.client.post(url, data, { headers });
|
|
110
129
|
return response.data;
|
|
@@ -148,4 +167,4 @@ export class ApiClient {
|
|
|
148
167
|
}
|
|
149
168
|
}
|
|
150
169
|
}
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNaLE1BQU0sQ0FBZ0I7SUFDdEIsTUFBTSxDQUFTO0lBRXZCLFlBQVksTUFBYztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDakMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEdB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LGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxZQUFZLENBQUMsb0JBQW9CLFNBQVMsQ0FBQyxXQUFXLEVBQUUsaURBQWlELENBQUMsQ0FBQztZQUM3RyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgZGVjb2RlVG9rZW5QYXlsb2FkIH0gZnJvbSAnLi9hdXRoLWd1YXJkLmpzJztcbmltcG9ydCB7IHR5cGUgQ29uZmlnIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmpzJztcbmltcG9ydCB7IE5ldHdvcmtFcnJvciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludERlYnVnLCBwcmludEVycm9yLCBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBUSU1FT1VUUyB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IEFwaUVycm9yIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuXG4vKipcbiAqIEFQSSBDbGllbnQgZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzIHRvIHRoZSBwbGF0Zm9ybSBBUElcbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUNsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBBeGlvc0luc3RhbmNlO1xuICBwcml2YXRlIGNvbmZpZzogQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZy5hdXRoPy50b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiB0b2tlbiBpcyByZXF1aXJlZC4gU2V0IFBMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgIH1cblxuICAgIC8vIFdhcm4gaWYgdG9rZW4gYXBwZWFycyBleHBpcmVkIChhZHZpc29yeSDigJQgc2VydmVyIHZhbGlkYXRlcyBhdXRob3JpdGF0aXZlbHkpXG4gICAgdGhpcy5jaGVja1Rva2VuRXhwaXJ5KGNvbmZpZy5hdXRoLnRva2VuKTtcblxuICAgIGNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBjb25maWcuYXBpLnJlamVjdFVuYXV0aG9yaXplZCA/PyB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5hcGkucmVqZWN0VW5hdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdDZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGlzIGRpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogY29uZmlnLmFwaS5iYXNlVXJsLFxuICAgICAgdGltZW91dDogY29uZmlnLmFwaS50aW1lb3V0IHx8IFRJTUVPVVRTLkhUVFBfUkVRVUVTVCxcbiAgICAgIGh0dHBzQWdlbnQsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KTtcblxuICAgIC8vIEF1dGggaW50ZXJjZXB0b3JcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoXG4gICAgICAocmVxdWVzdENvbmZpZykgPT4ge1xuICAgICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHtjb25maWcuYXV0aC50b2tlbn1gO1xuICAgICAgICBwcmludERlYnVnKCdBUEkgUmVxdWVzdCcsIHtcbiAgICAgICAgICBtZXRob2Q6IHJlcXVlc3RDb25maWcubWV0aG9kPy50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgIHVybDogcmVxdWVzdENvbmZpZy51cmwsXG4gICAgICAgICAgYmFzZVVSTDogcmVxdWVzdENvbmZpZy5iYXNlVVJMLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RDb25maWc7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHByaW50RXJyb3IoJ1JlcXVlc3QgaW50ZXJjZXB0b3IgZXJyb3InLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUmVzcG9uc2UgaW50ZXJjZXB0b3JcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHByaW50RGVidWcoJ0FQSSBSZXNwb25zZScsIHtcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgIHVybDogcmVzcG9uc2UuY29uZmlnLnVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IEF4aW9zRXJyb3IpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBBeGlvc0Vycm9yKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgIGlmIChlcnJvci5yZXNwb25zZSkge1xuICAgICAgY29uc3QgeyBzdGF0dXMsIHN0YXR1c1RleHQsIGRhdGEgfSA9IGVycm9yLnJlc3BvbnNlO1xuICAgICAgY29uc3QgdXJsID0gZXJyb3IuY29uZmlnPy51cmw7XG5cbiAgICAgIC8vIFRoZSByZXNwb25zZSBib2R5IChgZGF0YWApIGNhbiBjYXJyeSB0b2tlbnMvUElJLCBhbmQgcHJpbnRFcnJvciBhbHdheXMgd3JpdGVzXG4gICAgICAvLyAobm90IGdhdGVkIG9uIERFQlVHKSDigJQga2VlcCBpdCBvdXQgb2YgdGhlIGFsd2F5cy1vbiBsaW5lOyBzdXJmYWNlIGl0IG9ubHkgdW5kZXIgREVCVUcuXG4gICAgICBwcmludEVycm9yKCdBUEkgcmVxdWVzdCBmYWlsZWQnLCB7IHN0YXR1cywgc3RhdHVzVGV4dCwgdXJsIH0pO1xuICAgICAgcHJpbnREZWJ1ZygnQVBJIGVycm9yIHJlc3BvbnNlIGJvZHknLCB7IGRhdGEgfSk7XG5cbiAgICAgIGxldCBtZXNzYWdlID0gYEFQSSByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3N0YXR1c31gO1xuICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdtZXNzYWdlJyBpbiBkYXRhICYmIHR5cGVvZiAoZGF0YSBhcyB7IG1lc3NhZ2U6IHVua25vd24gfSkubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWVzc2FnZSA9IChkYXRhIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXBpRXJyb3IobWVzc2FnZSwgc3RhdHVzLCBlcnJvci5yZXNwb25zZSkpO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xuICAgICAgY29uc3QgY29kZSA9IGVycm9yLmNvZGUgfHwgJ1VOS05PV04nO1xuICAgICAgY29uc3QgdXJsID0gZXJyb3IuY29uZmlnPy51cmw7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gZXJyb3IuY29uZmlnPy50aW1lb3V0O1xuICAgICAgY29uc3QgY2F1c2UgPSBlcnJvci5jYXVzZTtcblxuICAgICAgcHJpbnRFcnJvcignTm8gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBBUEknLCB7XG4gICAgICAgIHVybCxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgY29kZSxcbiAgICAgICAgLi4uKGNhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyB7IGNhdXNlOiBjYXVzZS5tZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGludHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgIEVDT05OUkVGVVNFRDogJ1NlcnZlciBpcyBub3QgcnVubmluZyBvciBwb3J0IGlzIHdyb25nJyxcbiAgICAgICAgRUNPTk5SRVNFVDogJ1NlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5JyxcbiAgICAgICAgRVRJTUVET1VUOiAnQ29ubmVjdGlvbiB0aW1lZCBvdXQg4oCUIHNlcnZlciB1bnJlYWNoYWJsZSBvciB0b28gc2xvdycsXG4gICAgICAgIEVOT1RGT1VORDogJ0ROUyBsb29rdXAgZmFpbGVkIOKAlCBjaGVjayB0aGUgaG9zdG5hbWUgaW4gYmFzZVVybCcsXG4gICAgICAgIEVSUl9CQURfUkVRVUVTVDogJ1JlcXVlc3Qgd2FzIG1hbGZvcm1lZCDigJQgY2hlY2sgdGhlIGVuZHBvaW50IGFuZCBwYXlsb2FkJyxcbiAgICAgICAgQ0VSVF9IQVNfRVhQSVJFRDogJ1NTTCBjZXJ0aWZpY2F0ZSBleHBpcmVkIOKAlCB1c2UgLS1uby12ZXJpZnktc3NsIGZvciBkZXYnLFxuICAgICAgICBERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQ6ICdTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCcsXG4gICAgICAgIFVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkU6ICdTU0wgY2hhaW4gaW5jb21wbGV0ZSDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCBmb3IgZGV2JyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhpbnQgPSBoaW50c1tjb2RlXSB8fCAnQ2hlY2sgbmV0d29yayBjb25uZWN0aXZpdHkgYW5kIHNlcnZlciBzdGF0dXMnO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2NvZGV9OiAke2hpbnR9ICh1cmw6ICR7dXJsfSlgO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IE5ldHdvcmtFcnJvcihtZXNzYWdlLCB1cmwsIGVycm9yLCB0aW1lb3V0KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50RXJyb3IoJ0FQSSByZXF1ZXN0IGVycm9yJywgeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0PFQgPSB1bmtub3duPih1cmw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQ8VD4odXJsLCB7IHBhcmFtcywgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHBvc3Q8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwb3N0Rm9ybTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGZvcm1EYXRhOiBGb3JtRGF0YSwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB1cGxvYWRUaW1lb3V0ID0gdGhpcy5jb25maWcuYXBpLnVwbG9hZFRpbWVvdXQgfHwgMTUgKiA2MCAqIDEwMDA7IC8vIGRlZmF1bHQgMTUgbWludXRlc1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxUPih1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7IC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSwgLi4uaGVhZGVycyB9LFxuICAgICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgICBtYXhCb2R5TGVuZ3RoOiBJbmZpbml0eSxcbiAgICAgIHRpbWVvdXQ6IHVwbG9hZFRpbWVvdXQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwdXQ8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnB1dDxUPih1cmwsIGRhdGEsIHsgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5kZWxldGU8VD4odXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwYXRjaDxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duLCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucGF0Y2g8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnIHsgcmV0dXJuIHRoaXMuY29uZmlnOyB9XG4gIGdldEJhc2VVcmwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLmFwaS5iYXNlVXJsOyB9XG4gIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5jb25maWcuYXV0aD8udG9rZW47IH1cblxuICAvKipcbiAgICogQWR2aXNvcnkgY2hlY2s6IGRlY29kZSBKV1QgZXhwIGNsYWltIGFuZCB3YXJuIGlmIGV4cGlyZWQuXG4gICAqIERvZXMgTk9UIHZlcmlmeSBzaWduYXR1cmUg4oCUIHNlcnZlciBoYW5kbGVzIHRoYXQuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrVG9rZW5FeHBpcnkodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWQgPSBkZWNvZGVUb2tlblBheWxvYWQodG9rZW4pO1xuICAgIGlmIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkLmV4cCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKHBheWxvYWQuZXhwICogMTAwMCk7XG4gICAgICBpZiAoZXhwaXJlc0F0LmdldFRpbWUoKSA8IERhdGUubm93KCkpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBUb2tlbiBleHBpcmVkIGF0ICR7ZXhwaXJlc0F0LnRvSVNPU3RyaW5nKCl9IOKAlCBydW4gXCJwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW5cIiB0byByZWZyZXNoYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNaLE1BQU0sQ0FBZ0I7SUFDdEIsTUFBTSxDQUFTO0lBRXZCLFlBQVksTUFBYztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDakMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEdB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dHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgZGVjb2RlVG9rZW5QYXlsb2FkIH0gZnJvbSAnLi9hdXRoLWd1YXJkLmpzJztcbmltcG9ydCB7IHR5cGUgQ29uZmlnIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmpzJztcbmltcG9ydCB7IE5ldHdvcmtFcnJvciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludERlYnVnLCBwcmludEVycm9yLCBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBUSU1FT1VUUyB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IEFwaUVycm9yIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuXG4vKipcbiAqIEFQSSBDbGllbnQgZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzIHRvIHRoZSBwbGF0Zm9ybSBBUElcbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUNsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBBeGlvc0luc3RhbmNlO1xuICBwcml2YXRlIGNvbmZpZzogQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZy5hdXRoPy50b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiB0b2tlbiBpcyByZXF1aXJlZC4gU2V0IFBMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgIH1cblxuICAgIC8vIFdhcm4gaWYgdG9rZW4gYXBwZWFycyBleHBpcmVkIChhZHZpc29yeSDigJQgc2VydmVyIHZhbGlkYXRlcyBhdXRob3JpdGF0aXZlbHkpXG4gICAgdGhpcy5jaGVja1Rva2VuRXhwaXJ5KGNvbmZpZy5hdXRoLnRva2VuKTtcblxuICAgIGNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBjb25maWcuYXBpLnJlamVjdFVuYXV0aG9yaXplZCA/PyB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5hcGkucmVqZWN0VW5hdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdDZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGlzIGRpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogY29uZmlnLmFwaS5iYXNlVXJsLFxuICAgICAgdGltZW91dDogY29uZmlnLmFwaS50aW1lb3V0IHx8IFRJTUVPVVRTLkhUVFBfUkVRVUVTVCxcbiAgICAgIGh0dHBzQWdlbnQsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KTtcblxuICAgIC8vIEF1dGggaW50ZXJjZXB0b3JcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoXG4gICAgICAocmVxdWVzdENvbmZpZykgPT4ge1xuICAgICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHtjb25maWcuYXV0aC50b2tlbn1gO1xuICAgICAgICBwcmludERlYnVnKCdBUEkgUmVxdWVzdCcsIHtcbiAgICAgICAgICBtZXRob2Q6IHJlcXVlc3RDb25maWcubWV0aG9kPy50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgIHVybDogcmVxdWVzdENvbmZpZy51cmwsXG4gICAgICAgICAgYmFzZVVSTDogcmVxdWVzdENvbmZpZy5iYXNlVVJMLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RDb25maWc7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHByaW50RXJyb3IoJ1JlcXVlc3QgaW50ZXJjZXB0b3IgZXJyb3InLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUmVzcG9uc2UgaW50ZXJjZXB0b3JcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHByaW50RGVidWcoJ0FQSSBSZXNwb25zZScsIHtcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgIHVybDogcmVzcG9uc2UuY29uZmlnLnVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IEF4aW9zRXJyb3IpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBBeGlvc0Vycm9yKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgIGlmIChlcnJvci5yZXNwb25zZSkge1xuICAgICAgY29uc3QgeyBzdGF0dXMsIHN0YXR1c1RleHQsIGRhdGEgfSA9IGVycm9yLnJlc3BvbnNlO1xuICAgICAgY29uc3QgdXJsID0gZXJyb3IuY29uZmlnPy51cmw7XG5cbiAgICAgIC8vIFRoZSByZXNwb25zZSBib2R5IChgZGF0YWApIGNhbiBjYXJyeSB0b2tlbnMvUElJLCBhbmQgcHJpbnRFcnJvciBhbHdheXMgd3JpdGVzXG4gICAgICAvLyAobm90IGdhdGVkIG9uIERFQlVHKSDigJQga2VlcCBpdCBvdXQgb2YgdGhlIGFsd2F5cy1vbiBsaW5lOyBzdXJmYWNlIGl0IG9ubHkgdW5kZXIgREVCVUcuXG4gICAgICBwcmludEVycm9yKCdBUEkgcmVxdWVzdCBmYWlsZWQnLCB7IHN0YXR1cywgc3RhdHVzVGV4dCwgdXJsIH0pO1xuICAgICAgcHJpbnREZWJ1ZygnQVBJIGVycm9yIHJlc3BvbnNlIGJvZHknLCB7IGRhdGEgfSk7XG5cbiAgICAgIGxldCBtZXNzYWdlID0gYEFQSSByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3N0YXR1c31gO1xuICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdtZXNzYWdlJyBpbiBkYXRhICYmIHR5cGVvZiAoZGF0YSBhcyB7IG1lc3NhZ2U6IHVua25vd24gfSkubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWVzc2FnZSA9IChkYXRhIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXBpRXJyb3IobWVzc2FnZSwgc3RhdHVzLCBlcnJvci5yZXNwb25zZSkpO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xuICAgICAgY29uc3QgY29kZSA9IGVycm9yLmNvZGUgfHwgJ1VOS05PV04nO1xuICAgICAgY29uc3QgdXJsID0gZXJyb3IuY29uZmlnPy51cmw7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gZXJyb3IuY29uZmlnPy50aW1lb3V0O1xuICAgICAgY29uc3QgY2F1c2UgPSBlcnJvci5jYXVzZTtcblxuICAgICAgcHJpbnRFcnJvcignTm8gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBBUEknLCB7XG4gICAgICAgIHVybCxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgY29kZSxcbiAgICAgICAgLi4uKGNhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyB7IGNhdXNlOiBjYXVzZS5tZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGludHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgIEVDT05OUkVGVVNFRDogJ1NlcnZlciBpcyBub3QgcnVubmluZyBvciBwb3J0IGlzIHdyb25nJyxcbiAgICAgICAgRUNPTk5SRVNFVDogJ1NlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5JyxcbiAgICAgICAgRVRJTUVET1VUOiAnQ29ubmVjdGlvbiB0aW1lZCBvdXQg4oCUIHNlcnZlciB1bnJlYWNoYWJsZSBvciB0b28gc2xvdycsXG4gICAgICAgIEVOT1RGT1VORDogJ0ROUyBsb29rdXAgZmFpbGVkIOKAlCBjaGVjayB0aGUgaG9zdG5hbWUgaW4gYmFzZVVybCcsXG4gICAgICAgIEVSUl9CQURfUkVRVUVTVDogJ1JlcXVlc3Qgd2FzIG1hbGZvcm1lZCDigJQgY2hlY2sgdGhlIGVuZHBvaW50IGFuZCBwYXlsb2FkJyxcbiAgICAgICAgQ0VSVF9IQVNfRVhQSVJFRDogJ1NTTCBjZXJ0aWZpY2F0ZSBleHBpcmVkIOKAlCB1c2UgLS1uby12ZXJpZnktc3NsIGZvciBkZXYnLFxuICAgICAgICBERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQ6ICdTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCcsXG4gICAgICAgIFVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkU6ICdTU0wgY2hhaW4gaW5jb21wbGV0ZSDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCBmb3IgZGV2JyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhpbnQgPSBoaW50c1tjb2RlXSB8fCAnQ2hlY2sgbmV0d29yayBjb25uZWN0aXZpdHkgYW5kIHNlcnZlciBzdGF0dXMnO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2NvZGV9OiAke2hpbnR9ICh1cmw6ICR7dXJsfSlgO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IE5ldHdvcmtFcnJvcihtZXNzYWdlLCB1cmwsIGVycm9yLCB0aW1lb3V0KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50RXJyb3IoJ0FQSSByZXF1ZXN0IGVycm9yJywgeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0PFQgPSB1bmtub3duPih1cmw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQ8VD4odXJsLCB7IHBhcmFtcywgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIEJJTkFSWSBkb3dubG9hZCAoYSByZXBvcnQgUERGKTogdGhlIGJ5dGVzLCBwbHVzIHRoZSBmaWxlIG5hbWUgdGhlIHNlcnZlciBjaG9zZS5cbiAgICpcbiAgICogYHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ2AgYmVjYXVzZSB0aGUgZGVmYXVsdCB3b3VsZCBoYW5kIGJhY2sgYSBVVEYtOCBzdHJpbmcgYW5kXG4gICAqIGNvcnJ1cHQgZXZlcnkgYnl0ZSBhYm92ZSAweDdmIOKAlCBhIFBERiB3cml0dGVuIHRoYXQgd2F5IG9wZW5zIGFzIGEgZGFtYWdlZCBmaWxlLCB3aGljaFxuICAgKiBsb29rcyBsaWtlIGEgc2VydmVyIGJ1ZyByYXRoZXIgdGhhbiBhIGNsaWVudCBvbmUuXG4gICAqXG4gICAqIFRoZSBzZXJ2ZXIncyBgQ29udGVudC1EaXNwb3NpdGlvbmAgbmFtZSBpcyBwcmVmZXJyZWQgb3ZlciBhbnl0aGluZyB0aGUgY2FsbGVyIGd1ZXNzZXM6XG4gICAqIGl0IGtub3dzIHRoZSByZXBvcnQncyB0aXRsZSBhbmQgd2hldGhlciB0aGUgcnVuIGlzIGEgcmV2aXNpb24uXG4gICAqL1xuICBhc3luYyBnZXRCaW5hcnkodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgZmlsZW5hbWU/OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0PEFycmF5QnVmZmVyPih1cmwsIHsgaGVhZGVycywgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pO1xuICAgIGNvbnN0IGRpc3Bvc2l0aW9uID0gU3RyaW5nKHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA/PyAnJyk7XG4gICAgY29uc3QgbWF0Y2ggPSAvZmlsZW5hbWU9XCIoW15cIl0rKVwiLy5leGVjKGRpc3Bvc2l0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogQnVmZmVyLmZyb20ocmVzcG9uc2UuZGF0YSksXG4gICAgICAuLi4obWF0Y2g/LlsxXSA/IHsgZmlsZW5hbWU6IG1hdGNoWzFdIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBvc3Q8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwb3N0Rm9ybTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGZvcm1EYXRhOiBGb3JtRGF0YSwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB1cGxvYWRUaW1lb3V0ID0gdGhpcy5jb25maWcuYXBpLnVwbG9hZFRpbWVvdXQgfHwgMTUgKiA2MCAqIDEwMDA7IC8vIGRlZmF1bHQgMTUgbWludXRlc1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxUPih1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7IC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSwgLi4uaGVhZGVycyB9LFxuICAgICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgICBtYXhCb2R5TGVuZ3RoOiBJbmZpbml0eSxcbiAgICAgIHRpbWVvdXQ6IHVwbG9hZFRpbWVvdXQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwdXQ8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnB1dDxUPih1cmwsIGRhdGEsIHsgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5kZWxldGU8VD4odXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwYXRjaDxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duLCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucGF0Y2g8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnIHsgcmV0dXJuIHRoaXMuY29uZmlnOyB9XG4gIGdldEJhc2VVcmwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLmFwaS5iYXNlVXJsOyB9XG4gIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5jb25maWcuYXV0aD8udG9rZW47IH1cblxuICAvKipcbiAgICogQWR2aXNvcnkgY2hlY2s6IGRlY29kZSBKV1QgZXhwIGNsYWltIGFuZCB3YXJuIGlmIGV4cGlyZWQuXG4gICAqIERvZXMgTk9UIHZlcmlmeSBzaWduYXR1cmUg4oCUIHNlcnZlciBoYW5kbGVzIHRoYXQuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrVG9rZW5FeHBpcnkodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWQgPSBkZWNvZGVUb2tlblBheWxvYWQodG9rZW4pO1xuICAgIGlmIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkLmV4cCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IG5ldyBEYXRlKHBheWxvYWQuZXhwICogMTAwMCk7XG4gICAgICBpZiAoZXhwaXJlc0F0LmdldFRpbWUoKSA8IERhdGUubm93KCkpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBUb2tlbiBleHBpcmVkIGF0ICR7ZXhwaXJlc0F0LnRvSVNPU3RyaW5nKCl9IOKAlCBydW4gXCJwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW5cIiB0byByZWZyZXNoYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|